Move the \C and \X to pat.t.
[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 Sat Dec 22 19:52:24 EET 2001 [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 if test -f "/system/gnu_library/bin/ar.pm"; then
169      _exe=".pm"
170 else
171      _exe=""
172 fi
173
174 ccname=''
175 ccversion=''
176 ccsymbols=''
177 cppccsymbols=''
178 cppsymbols=''
179 from=''
180 run=''
181 targetarch=''
182 to=''
183 usecrosscompile=''
184 perllibs=''
185 dynamic_ext=''
186 extensions=''
187 known_extensions=''
188 nonxs_ext=''
189 static_ext=''
190 useopcode=''
191 useposix=''
192 extras=''
193 d_bsd=''
194 d_eunice=''
195 d_xenix=''
196 eunicefix=''
197 Mcc=''
198 ar=''
199 awk=''
200 bash=''
201 bison=''
202 byacc=''
203 cat=''
204 chgrp=''
205 chmod=''
206 chown=''
207 comm=''
208 compress=''
209 cp=''
210 cpio=''
211 cpp=''
212 csh=''
213 date=''
214 echo=''
215 egrep=''
216 emacs=''
217 expr=''
218 find=''
219 flex=''
220 gmake=''
221 grep=''
222 gzip=''
223 inews=''
224 ksh=''
225 less=''
226 line=''
227 lint=''
228 ln=''
229 lp=''
230 lpr=''
231 ls=''
232 mail=''
233 mailx=''
234 make=''
235 mkdir=''
236 more=''
237 mv=''
238 nm=''
239 nroff=''
240 perl=''
241 pg=''
242 pmake=''
243 pr=''
244 rm=''
245 rmail=''
246 sed=''
247 sendmail=''
248 shar=''
249 sleep=''
250 smail=''
251 sort=''
252 submit=''
253 tail=''
254 tar=''
255 tbl=''
256 tee=''
257 test=''
258 touch=''
259 tr=''
260 troff=''
261 uname=''
262 uniq=''
263 uuname=''
264 vi=''
265 zcat=''
266 zip=''
267 full_ar=''
268 full_sed=''
269 libswanted=''
270 hint=''
271 myuname=''
272 osname=''
273 osvers=''
274 Author=''
275 Date=''
276 Header=''
277 Id=''
278 Locker=''
279 Log=''
280 RCSfile=''
281 Revision=''
282 Source=''
283 State=''
284 _a=''
285 _exe=''
286 _o=''
287 archobjs=''
288 exe_ext=''
289 firstmakefile=''
290 lib_ext=''
291 obj_ext=''
292 path_sep=''
293 afs=''
294 afsroot=''
295 alignbytes=''
296 ansi2knr=''
297 archlib=''
298 archlibexp=''
299 d_archlib=''
300 installarchlib=''
301 archname=''
302 myarchname=''
303 d_atolf=''
304 d_atoll=''
305 baserev=''
306 bin=''
307 binexp=''
308 installbin=''
309 bincompat5005=''
310 d_bincompat5005=''
311 byteorder=''
312 cc=''
313 ccflags=''
314 cppflags=''
315 ldflags=''
316 lkflags=''
317 locincpth=''
318 optimize=''
319 cf_email=''
320 cf_by=''
321 cf_time=''
322 charsize=''
323 contains=''
324 cpp_stuff=''
325 cpplast=''
326 cppminus=''
327 cpprun=''
328 cppstdin=''
329 d__fwalk=''
330 d_access=''
331 d_accessx=''
332 d_alarm=''
333 d_attribut=''
334 d_bcmp=''
335 d_bcopy=''
336 d_bzero=''
337 d_casti32=''
338 castflags=''
339 d_castneg=''
340 d_chown=''
341 d_chroot=''
342 d_chsize=''
343 d_class=''
344 d_closedir=''
345 d_void_closedir=''
346 d_cmsghdr_s=''
347 d_const=''
348 cryptlib=''
349 d_crypt=''
350 d_csh=''
351 full_csh=''
352 d_cuserid=''
353 d_dbl_dig=''
354 d_dbminitproto=''
355 d_difftime=''
356 d_dirfd=''
357 d_dlerror=''
358 d_dlopen=''
359 d_dlsymun=''
360 d_dosuid=''
361 d_suidsafe=''
362 d_drand48proto=''
363 d_dup2=''
364 d_eaccess=''
365 d_endgrent=''
366 d_endhent=''
367 d_endnent=''
368 d_endpent=''
369 d_endpwent=''
370 d_endsent=''
371 d_fchdir=''
372 d_fchmod=''
373 d_fchown=''
374 d_fcntl=''
375 d_fcntl_can_lock=''
376 d_fd_macros=''
377 d_fd_set=''
378 d_fds_bits=''
379 d_fgetpos=''
380 d_finite=''
381 d_finitel=''
382 d_flexfnam=''
383 d_flock=''
384 d_flockproto=''
385 d_fork=''
386 d_fp_class=''
387 d_fpclass=''
388 d_fpclassify=''
389 d_fpclassl=''
390 d_fpos64_t=''
391 d_frexpl=''
392 d_fs_data_s=''
393 d_fseeko=''
394 d_fsetpos=''
395 d_fstatfs=''
396 d_fsync=''
397 d_ftello=''
398 d_ftime=''
399 d_gettimeod=''
400 d_Gconvert=''
401 d_getcwd=''
402 d_getespwnam=''
403 d_getfsstat=''
404 d_getgrent=''
405 d_getgrps=''
406 d_gethbyaddr=''
407 d_gethbyname=''
408 d_gethent=''
409 aphostname=''
410 d_gethname=''
411 d_phostname=''
412 d_uname=''
413 d_gethostprotos=''
414 d_getitimer=''
415 d_getlogin=''
416 d_getmnt=''
417 d_getmntent=''
418 d_getnbyaddr=''
419 d_getnbyname=''
420 d_getnent=''
421 d_getnetprotos=''
422 d_getpagsz=''
423 d_getpent=''
424 d_getpgid=''
425 d_getpgrp2=''
426 d_bsdgetpgrp=''
427 d_getpgrp=''
428 d_getppid=''
429 d_getprior=''
430 d_getpbyname=''
431 d_getpbynumber=''
432 d_getprotoprotos=''
433 d_getprpwnam=''
434 d_getpwent=''
435 d_getsent=''
436 d_getservprotos=''
437 d_getspnam=''
438 d_getsbyname=''
439 d_getsbyport=''
440 d_gnulibc=''
441 d_hasmntopt=''
442 d_htonl=''
443 d_inetaton=''
444 d_int64_t=''
445 d_isascii=''
446 d_isfinite=''
447 d_isinf=''
448 d_isnan=''
449 d_isnanl=''
450 d_killpg=''
451 d_lchown=''
452 d_ldbl_dig=''
453 d_link=''
454 d_locconv=''
455 d_lockf=''
456 d_longdbl=''
457 longdblsize=''
458 d_longlong=''
459 longlongsize=''
460 d_lseekproto=''
461 d_lstat=''
462 d_madvise=''
463 d_mblen=''
464 d_mbstowcs=''
465 d_mbtowc=''
466 d_memchr=''
467 d_memcmp=''
468 d_memcpy=''
469 d_memmove=''
470 d_memset=''
471 d_mkdir=''
472 d_mkdtemp=''
473 d_mkfifo=''
474 d_mkstemp=''
475 d_mkstemps=''
476 d_mktime=''
477 d_mmap=''
478 mmaptype=''
479 d_modfl=''
480 d_modfl_pow32_bug=''
481 d_mprotect=''
482 d_msg=''
483 d_msgctl=''
484 d_msgget=''
485 d_msghdr_s=''
486 d_msgrcv=''
487 d_msgsnd=''
488 d_msync=''
489 d_munmap=''
490 d_nice=''
491 d_nl_langinfo=''
492 d_off64_t=''
493 d_open3=''
494 d_fpathconf=''
495 d_pathconf=''
496 d_pause=''
497 d_pipe=''
498 d_poll=''
499 d_portable=''
500 d_procselfexe=''
501 procselfexe=''
502 d_old_pthread_create_joinable=''
503 old_pthread_create_joinable=''
504 d_pthread_atfork=''
505 d_pthread_yield=''
506 d_sched_yield=''
507 sched_yield=''
508 d_qgcvt=''
509 d_readdir=''
510 d_rewinddir=''
511 d_seekdir=''
512 d_telldir=''
513 d_readlink=''
514 d_readv=''
515 d_recvmsg=''
516 d_rename=''
517 d_rmdir=''
518 d_safebcpy=''
519 d_safemcpy=''
520 d_sanemcmp=''
521 d_sbrkproto=''
522 d_select=''
523 d_sem=''
524 d_semctl=''
525 d_semget=''
526 d_semop=''
527 d_sendmsg=''
528 d_setegid=''
529 d_seteuid=''
530 d_setgrent=''
531 d_setgrps=''
532 d_sethent=''
533 d_setitimer=''
534 d_setlinebuf=''
535 d_setlocale=''
536 d_setnent=''
537 d_setpent=''
538 d_setpgid=''
539 d_setpgrp2=''
540 d_bsdsetpgrp=''
541 d_setpgrp=''
542 d_setprior=''
543 d_setproctitle=''
544 d_setpwent=''
545 d_setregid=''
546 d_setresgid=''
547 d_setresuid=''
548 d_setreuid=''
549 d_setrgid=''
550 d_setruid=''
551 d_setsent=''
552 d_setsid=''
553 d_setvbuf=''
554 d_sfio=''
555 usesfio=''
556 d_shm=''
557 d_shmat=''
558 d_shmatprototype=''
559 shmattype=''
560 d_shmctl=''
561 d_shmdt=''
562 d_shmget=''
563 d_sigaction=''
564 d_sigprocmask=''
565 d_sigsetjmp=''
566 d_sockatmark=''
567 d_sockatmarkproto=''
568 d_msg_ctrunc=''
569 d_msg_dontroute=''
570 d_msg_oob=''
571 d_msg_peek=''
572 d_msg_proxy=''
573 d_oldsock=''
574 d_scm_rights=''
575 d_socket=''
576 d_sockpair=''
577 sockethdr=''
578 socketlib=''
579 d_socklen_t=''
580 d_socks5_init=''
581 d_sqrtl=''
582 d_sresgproto=''
583 d_sresuproto=''
584 d_statblks=''
585 d_statfs_f_flags=''
586 d_statfs_s=''
587 d_fstatvfs=''
588 d_statvfs=''
589 d_stdio_cnt_lval=''
590 d_stdio_ptr_lval=''
591 d_stdio_ptr_lval_nochange_cnt=''
592 d_stdio_ptr_lval_sets_cnt=''
593 d_stdiobase=''
594 d_stdstdio=''
595 stdio_base=''
596 stdio_bufsiz=''
597 stdio_cnt=''
598 stdio_filbuf=''
599 stdio_ptr=''
600 d_index=''
601 d_strchr=''
602 d_strcoll=''
603 d_strctcpy=''
604 d_strerrm=''
605 d_strerror=''
606 d_sysernlst=''
607 d_syserrlst=''
608 d_strftime=''
609 d_strtod=''
610 d_strtol=''
611 d_strtold=''
612 d_strtoll=''
613 d_strtoq=''
614 d_strtoul=''
615 d_strtoull=''
616 d_strtouq=''
617 d_strxfrm=''
618 d_symlink=''
619 d_syscall=''
620 d_syscallproto=''
621 d_sysconf=''
622 d_system=''
623 d_tcgetpgrp=''
624 d_tcsetpgrp=''
625 d_telldirproto=''
626 d_time=''
627 timetype=''
628 clocktype=''
629 d_times=''
630 d_truncate=''
631 d_tzname=''
632 d_u32align=''
633 d_ualarm=''
634 d_umask=''
635 d_semctl_semid_ds=''
636 d_semctl_semun=''
637 d_union_semun=''
638 d_unordered=''
639 d_usleep=''
640 d_usleepproto=''
641 d_ustat=''
642 d_vfork=''
643 usevfork=''
644 d_voidsig=''
645 signal_t=''
646 d_volatile=''
647 d_charvspr=''
648 d_vprintf=''
649 d_wait4=''
650 d_waitpid=''
651 d_wcstombs=''
652 d_wctomb=''
653 d_writev=''
654 dlext=''
655 cccdlflags=''
656 ccdlflags=''
657 dlsrc=''
658 ld=''
659 lddlflags=''
660 usedl=''
661 doublesize=''
662 ebcdic=''
663 fflushNULL=''
664 fflushall=''
665 fpossize=''
666 fpostype=''
667 gccosandvers=''
668 gccversion=''
669 gidformat=''
670 gidsign=''
671 gidsize=''
672 gidtype=''
673 groupstype=''
674 h_fcntl=''
675 h_sysfile=''
676 i_arpainet=''
677 db_hashtype=''
678 db_prefixtype=''
679 db_version_major=''
680 db_version_minor=''
681 db_version_patch=''
682 i_db=''
683 i_dbm=''
684 i_rpcsvcdbm=''
685 d_dirnamlen=''
686 direntrytype=''
687 i_dirent=''
688 i_dld=''
689 i_dlfcn=''
690 i_fcntl=''
691 i_float=''
692 i_fp=''
693 i_fp_class=''
694 i_gdbm=''
695 d_grpasswd=''
696 i_grp=''
697 i_ieeefp=''
698 i_inttypes=''
699 i_langinfo=''
700 i_libutil=''
701 i_limits=''
702 i_locale=''
703 i_machcthr=''
704 i_malloc=''
705 i_math=''
706 i_memory=''
707 i_mntent=''
708 i_ndbm=''
709 i_netdb=''
710 i_neterrno=''
711 i_netinettcp=''
712 i_niin=''
713 i_sysin=''
714 i_poll=''
715 i_prot=''
716 i_pthread=''
717 d_pwage=''
718 d_pwchange=''
719 d_pwclass=''
720 d_pwcomment=''
721 d_pwexpire=''
722 d_pwgecos=''
723 d_pwpasswd=''
724 d_pwquota=''
725 i_pwd=''
726 i_sfio=''
727 i_shadow=''
728 i_socks=''
729 i_stddef=''
730 i_stdlib=''
731 i_string=''
732 strings=''
733 i_sunmath=''
734 i_sysaccess=''
735 i_sysdir=''
736 i_sysfile=''
737 d_voidtty=''
738 i_bsdioctl=''
739 i_sysfilio=''
740 i_sysioctl=''
741 i_syssockio=''
742 i_syslog=''
743 i_sysmman=''
744 i_sysmode=''
745 i_sysmount=''
746 i_sysndir=''
747 i_sysparam=''
748 i_sysresrc=''
749 i_syssecrt=''
750 i_sysselct=''
751 i_sysstat=''
752 i_sysstatfs=''
753 i_sysstatvfs=''
754 i_systimes=''
755 i_systypes=''
756 i_sysuio=''
757 i_sysun=''
758 i_sysutsname=''
759 i_sysvfs=''
760 i_syswait=''
761 i_sgtty=''
762 i_termio=''
763 i_termios=''
764 i_systime=''
765 i_systimek=''
766 i_time=''
767 timeincl=''
768 i_unistd=''
769 i_ustat=''
770 i_utime=''
771 i_values=''
772 i_stdarg=''
773 i_varargs=''
774 i_varhdr=''
775 i_vfork=''
776 inc_version_list=''
777 inc_version_list_init=''
778 installprefix=''
779 installprefixexp=''
780 installstyle=''
781 installusrbinperl=''
782 intsize=''
783 longsize=''
784 shortsize=''
785 issymlink=''
786 libc=''
787 ldlibpthname=''
788 libperl=''
789 shrpenv=''
790 useshrplib=''
791 glibpth=''
792 libpth=''
793 loclibpth=''
794 plibpth=''
795 xlibpth=''
796 ignore_versioned_solibs=''
797 libs=''
798 libsdirs=''
799 libsfiles=''
800 libsfound=''
801 libspath=''
802 lns=''
803 d_PRIEUldbl=''
804 d_PRIFUldbl=''
805 d_PRIGUldbl=''
806 d_PRIeldbl=''
807 d_PRIfldbl=''
808 d_PRIgldbl=''
809 d_SCNfldbl=''
810 sPRIEUldbl=''
811 sPRIFUldbl=''
812 sPRIGUldbl=''
813 sPRIeldbl=''
814 sPRIfldbl=''
815 sPRIgldbl=''
816 sSCNfldbl=''
817 lseeksize=''
818 lseektype=''
819 make_set_make=''
820 d_mymalloc=''
821 freetype=''
822 mallocobj=''
823 mallocsrc=''
824 malloctype=''
825 usemymalloc=''
826 installman1dir=''
827 man1dir=''
828 man1direxp=''
829 man1ext=''
830 installman3dir=''
831 man3dir=''
832 man3direxp=''
833 man3ext=''
834 modetype=''
835 multiarch=''
836 mydomain=''
837 myhostname=''
838 phostname=''
839 c=''
840 n=''
841 d_eofnblk=''
842 eagain=''
843 o_nonblock=''
844 rd_nodata=''
845 need_va_copy=''
846 netdb_hlen_type=''
847 netdb_host_type=''
848 netdb_name_type=''
849 netdb_net_type=''
850 groupcat=''
851 hostcat=''
852 passcat=''
853 orderlib=''
854 ranlib=''
855 d_perl_otherlibdirs=''
856 otherlibdirs=''
857 package=''
858 spackage=''
859 pager=''
860 api_revision=''
861 api_subversion=''
862 api_version=''
863 api_versionstring=''
864 patchlevel=''
865 perl_patchlevel=''
866 revision=''
867 subversion=''
868 version=''
869 version_patchlevel_string=''
870 perl5=''
871 perladmin=''
872 perlpath=''
873 d_nv_preserves_uv=''
874 d_nv_preserves_uv_bits=''
875 i16size=''
876 i16type=''
877 i32size=''
878 i32type=''
879 i64size=''
880 i64type=''
881 i8size=''
882 i8type=''
883 ivsize=''
884 ivtype=''
885 nvsize=''
886 nvtype=''
887 u16size=''
888 u16type=''
889 u32size=''
890 u32type=''
891 u64size=''
892 u64type=''
893 u8size=''
894 u8type=''
895 uvsize=''
896 uvtype=''
897 ivdformat=''
898 nvEUformat=''
899 nvFUformat=''
900 nvGUformat=''
901 nveformat=''
902 nvfformat=''
903 nvgformat=''
904 uvXUformat=''
905 uvoformat=''
906 uvuformat=''
907 uvxformat=''
908 pidtype=''
909 prefix=''
910 prefixexp=''
911 installprivlib=''
912 privlib=''
913 privlibexp=''
914 prototype=''
915 ptrsize=''
916 d_PRIXU64=''
917 d_PRId64=''
918 d_PRIi64=''
919 d_PRIo64=''
920 d_PRIu64=''
921 d_PRIx64=''
922 sPRIXU64=''
923 sPRId64=''
924 sPRIi64=''
925 sPRIo64=''
926 sPRIu64=''
927 sPRIx64=''
928 d_quad=''
929 quadkind=''
930 quadtype=''
931 uquadtype=''
932 drand01=''
933 randbits=''
934 randfunc=''
935 randseedtype=''
936 seedfunc=''
937 installscript=''
938 scriptdir=''
939 scriptdirexp=''
940 selectminbits=''
941 selecttype=''
942 sh=''
943 sig_count=''
944 sig_name=''
945 sig_name_init=''
946 sig_num=''
947 sig_num_init=''
948 sig_size=''
949 installsitearch=''
950 sitearch=''
951 sitearchexp=''
952 installsitebin=''
953 sitebin=''
954 sitebinexp=''
955 installsitelib=''
956 sitelib=''
957 sitelib_stem=''
958 sitelibexp=''
959 siteprefix=''
960 siteprefixexp=''
961 sizesize=''
962 sizetype=''
963 so=''
964 socksizetype=''
965 sharpbang=''
966 shsharp=''
967 spitshell=''
968 src=''
969 ssizetype=''
970 startperl=''
971 startsh=''
972 stdchar=''
973 d_stdio_stream_array=''
974 stdio_stream_array=''
975 sysman=''
976 trnl=''
977 uidformat=''
978 uidsign=''
979 uidsize=''
980 uidtype=''
981 archname64=''
982 use64bitall=''
983 use64bitint=''
984 ccflags_uselargefiles=''
985 ldflags_uselargefiles=''
986 libswanted_uselargefiles=''
987 uselargefiles=''
988 uselongdouble=''
989 usemorebits=''
990 usemultiplicity=''
991 nm_opt=''
992 nm_so_opt=''
993 runnm=''
994 usenm=''
995 useperlio=''
996 usesocks=''
997 d_oldpthreads=''
998 use5005threads=''
999 useithreads=''
1000 usereentrant=''
1001 usethreads=''
1002 incpath=''
1003 mips_type=''
1004 usrinc=''
1005 d_vendorarch=''
1006 installvendorarch=''
1007 vendorarch=''
1008 vendorarchexp=''
1009 d_vendorbin=''
1010 installvendorbin=''
1011 vendorbin=''
1012 vendorbinexp=''
1013 d_vendorlib=''
1014 installvendorlib=''
1015 vendorlib=''
1016 vendorlib_stem=''
1017 vendorlibexp=''
1018 usevendorprefix=''
1019 vendorprefix=''
1020 vendorprefixexp=''
1021 versiononly=''
1022 defvoidused=''
1023 voidflags=''
1024 pm_apiversion=''
1025 xs_apiversion=''
1026 yacc=''
1027 yaccflags=''
1028 CONFIG=''
1029
1030 define='define'
1031 undef='undef'
1032 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1033 rmlist=''
1034
1035 : We must find out about Eunice early
1036 eunicefix=':'
1037 if test -f /etc/unixtovms; then
1038         eunicefix=/etc/unixtovms
1039 fi
1040 if test -f /etc/unixtovms.exe; then
1041         eunicefix=/etc/unixtovms.exe
1042 fi
1043
1044 i_whoami=''
1045 ccname=''
1046 ccversion=''
1047 perllibs=''
1048 : set useposix=false in your hint file to disable the POSIX extension.
1049 useposix=true
1050 : set useopcode=false in your hint file to disable the Opcode extension.
1051 useopcode=true
1052 : Trailing extension.  Override this in a hint file, if needed.
1053 : Extra object files, if any, needed on this platform.
1054 archobjs=''
1055 archname=''
1056 : Possible local include directories to search.
1057 : Set locincpth to "" in a hint file to defeat local include searches.
1058 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1059 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1060 :
1061 : no include file wanted by default
1062 inclwanted=''
1063
1064 groupstype=''
1065 libnames=''
1066 : change the next line if compiling for Xenix/286 on Xenix/386
1067 xlibpth='/usr/lib/386 /lib/386'
1068 : Possible local library directories to search.
1069 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1070 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1071
1072 : general looking path for locating libraries
1073 glibpth="/lib /usr/lib $xlibpth"
1074 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1075 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1076 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1077
1078 : Private path used by Configure to find libraries.  Its value
1079 : is prepended to libpth. This variable takes care of special
1080 : machines, like the mips.  Usually, it should be empty.
1081 plibpth=''
1082
1083 : default library list
1084 libswanted=''
1085 : some systems want to use only the non-versioned libso:s
1086 ignore_versioned_solibs=''
1087 archname64=''
1088 ccflags_uselargefiles=''
1089 ldflags_uselargefiles=''
1090 libswanted_uselargefiles=''
1091 : set usemultiplicity on the Configure command line to enable multiplicity.
1092 : set usesocks on the Configure command line to enable socks.
1093 : set usethreads on the Configure command line to enable threads.
1094 usereentrant='undef'
1095 : full support for void wanted by default
1096 defvoidused=15
1097
1098 : List of libraries we want.
1099 : If anyone needs -lnet, put it in a hint file.
1100 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1101 libswanted="$libswanted dld ld sun m c cposix posix"
1102 libswanted="$libswanted ndir dir crypt sec"
1103 libswanted="$libswanted ucb bsd BSD PW x util"
1104 : We probably want to search /usr/shlib before most other libraries.
1105 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1106 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1107 glibpth="/usr/shlib $glibpth"
1108 : Do not use vfork unless overridden by a hint file.
1109 usevfork=false
1110
1111 : Find the basic shell for Bourne shell scripts
1112 case "$sh" in
1113 '')
1114         case "$SYSTYPE" in
1115         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1116         *) xxx='/bin/sh';;
1117         esac
1118         if test -f "$xxx"; then
1119                 sh="$xxx"
1120         else
1121                 : Build up a list and do a single loop so we can 'break' out.
1122                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1123                 for xxx in sh bash ksh pdksh ash; do
1124                         for p in $pth; do
1125                                 try="$try ${p}/${xxx}"
1126                         done
1127                 done
1128                 for xxx in $try; do
1129                         if test -f "$xxx"; then
1130                                 sh="$xxx";
1131                                 break
1132                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1133                                 sh="$xxx";
1134                                 break
1135                         elif test -f "$xxx.exe"; then
1136                                 sh="$xxx";
1137                                 break
1138                         fi
1139                 done
1140         fi
1141         ;;
1142 esac
1143
1144 case "$sh" in
1145 '')     cat >&2 <<EOM
1146 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1147
1148 Usually it's in /bin/sh.  How did you even get this far?
1149 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1150 we'll try to straighten this all out.
1151 EOM
1152         exit 1
1153         ;;
1154 esac
1155
1156 : see if sh knows # comments
1157 if `$sh -c '#' >/dev/null 2>&1`; then
1158         shsharp=true
1159         spitshell=cat
1160         xcat=/bin/cat
1161         test -f $xcat$_exe || xcat=/usr/bin/cat
1162         if test ! -f $xcat$_exe; then
1163                 for p in $paths; do
1164                         if test -f $p/cat$_exe; then
1165                                 xcat=$p/cat$_exe
1166                                 break
1167                         fi
1168                 done
1169                 if test ! -f $xcat; then
1170                         echo "Can't find cat anywhere!" >&4
1171                         exit 1
1172                 fi
1173         fi
1174         echo "#!$xcat" >sharp
1175         $eunicefix sharp
1176         chmod +x sharp
1177         ./sharp > today
1178         if test -s today; then
1179                 sharpbang='#!'
1180         else
1181                 echo "#! $xcat" > sharp
1182                 $eunicefix sharp
1183                 chmod +x sharp
1184                 ./sharp > today
1185                 if test -s today; then
1186                         sharpbang='#! '
1187                 else
1188                         sharpbang=': use '
1189                 fi
1190         fi
1191 else
1192         echo " "
1193         echo "Your $sh doesn't grok # comments--I will strip them later on."
1194         shsharp=false
1195         cd ..
1196         echo "exec grep -v '^[  ]*#'" >spitshell
1197         chmod +x spitshell
1198         $eunicefix spitshell
1199         spitshell=`pwd`/spitshell
1200         cd UU
1201         echo "I presume that if # doesn't work, #! won't work either!"
1202         sharpbang=': use '
1203 fi
1204 rm -f sharp today
1205
1206 : figure out how to guarantee sh startup
1207 case "$startsh" in
1208 '') startsh=${sharpbang}${sh} ;;
1209 *)
1210 esac
1211 cat >sharp <<EOSS
1212 $startsh
1213 set abc
1214 test "$?abc" != 1
1215 EOSS
1216
1217 chmod +x sharp
1218 $eunicefix sharp
1219 if ./sharp; then
1220         : echo "Yup, it does."
1221 else
1222         echo "Hmm... '$startsh' does not guarantee sh startup..."
1223         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1224 fi
1225 rm -f sharp
1226
1227
1228 : Save command line options in file UU/cmdline.opt for later use in
1229 : generating config.sh.
1230 cat > cmdline.opt <<EOSH
1231 # Configure command line arguments.
1232 config_arg0='$0'
1233 config_args='$*'
1234 config_argc=$#
1235 EOSH
1236 argn=1
1237 args_exp=''
1238 args_sep=''
1239 for arg in "$@"; do
1240         cat >>cmdline.opt <<EOSH
1241 config_arg$argn='$arg'
1242 EOSH
1243         # Extreme backslashitis: replace each ' by '"'"'
1244         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1245 $arg
1246 EOC
1247         arg_exp=`cat cmdl.opt`
1248         args_exp="$args_exp$args_sep'$arg_exp'"
1249         argn=`expr $argn + 1`
1250         args_sep=' '
1251 done
1252 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1253 # used by ./hints/os2.sh
1254 rm -f cmdl.opt
1255
1256 : produce awk script to parse command line options
1257 cat >options.awk <<'EOF'
1258 BEGIN {
1259         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1260
1261         len = length(optstr);
1262         for (i = 1; i <= len; i++) {
1263                 c = substr(optstr, i, 1);
1264                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1265                 if (a == ":") {
1266                         arg[c] = 1;
1267                         i++;
1268                 }
1269                 opt[c] = 1;
1270         }
1271 }
1272 {
1273         expect = 0;
1274         str = $0;
1275         if (substr(str, 1, 1) != "-") {
1276                 printf("'%s'\n", str);
1277                 next;
1278         }
1279         len = length($0);
1280         for (i = 2; i <= len; i++) {
1281                 c = substr(str, i, 1);
1282                 if (!opt[c]) {
1283                         printf("-%s\n", substr(str, i));
1284                         next;
1285                 }
1286                 printf("-%s\n", c);
1287                 if (arg[c]) {
1288                         if (i < len)
1289                                 printf("'%s'\n", substr(str, i + 1));
1290                         else
1291                                 expect = 1;
1292                         next;
1293                 }
1294         }
1295 }
1296 END {
1297         if (expect)
1298                 print "?";
1299 }
1300 EOF
1301
1302 : process the command line options
1303 set X `for arg in "$@"; do echo "X$arg"; done |
1304         sed -e s/X// | awk -f options.awk`
1305 eval "set $*"
1306 shift
1307 rm -f options.awk
1308
1309 : set up default values
1310 fastread=''
1311 reuseval=false
1312 config_sh=''
1313 alldone=''
1314 error=''
1315 silent=''
1316 extractsh=''
1317 override=''
1318 knowitall=''
1319 rm -f optdef.sh posthint.sh
1320 cat >optdef.sh <<EOS
1321 $startsh
1322 EOS
1323
1324
1325 : option parsing
1326 while test $# -gt 0; do
1327         case "$1" in
1328         -d) shift; fastread=yes;;
1329         -e) shift; alldone=cont;;
1330         -f)
1331                 shift
1332                 cd ..
1333                 if test -r "$1"; then
1334                         config_sh="$1"
1335                 else
1336                         echo "$me: cannot read config file $1." >&2
1337                         error=true
1338                 fi
1339                 cd UU
1340                 shift;;
1341         -h) shift; error=true;;
1342         -r) shift; reuseval=true;;
1343         -s) shift; silent=true; realsilent=true;;
1344         -E) shift; alldone=exit;;
1345         -K) shift; knowitall=true;;
1346         -O) shift; override=true;;
1347         -S) shift; silent=true; extractsh=true;;
1348         -D)
1349                 shift
1350                 case "$1" in
1351                 *=)
1352                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1353                         echo "$me: ignoring -D $1" >&2
1354                         ;;
1355                 *=*) echo "$1" | \
1356                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1357                 *) echo "$1='define'" >> optdef.sh;;
1358                 esac
1359                 shift
1360                 ;;
1361         -U)
1362                 shift
1363                 case "$1" in
1364                 *=) echo "$1" >> optdef.sh;;
1365                 *=*)
1366                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1367                         echo "$me: ignoring -U $1" >&2
1368                         ;;
1369                 *) echo "$1='undef'" >> optdef.sh;;
1370                 esac
1371                 shift
1372                 ;;
1373         -A)
1374             shift
1375             xxx=''
1376             yyy="$1"
1377             zzz=''
1378             uuu=undef
1379             case "$yyy" in
1380             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1381                  case "$zzz" in
1382                  *:*) zzz='' ;;
1383                  *)   xxx=append
1384                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1385                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1386                  esac
1387                  ;;
1388             esac
1389             case "$xxx" in
1390             '')  case "$yyy" in
1391                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1392                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1393                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1394                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1395                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1396                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1397                  esac
1398                  ;;       
1399             esac
1400             case "$xxx" in
1401             append)
1402                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1403             clear)
1404                 echo "$yyy=''"                  >> posthint.sh ;;
1405             define)
1406                 case "$zzz" in
1407                 '') zzz=define ;;
1408                 esac
1409                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1410             eval)
1411                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1412             prepend)
1413                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1414             undef)
1415                 case "$zzz" in
1416                 '') zzz="$uuu" ;;
1417                 esac
1418                 echo "$yyy=$zzz"                >> posthint.sh ;;
1419             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1420             esac
1421             shift
1422             ;;
1423         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1424             exit 0;;
1425         --) break;;
1426         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1427         *) break;;
1428         esac
1429 done
1430
1431 case "$error" in
1432 true)
1433         cat >&2 <<EOM
1434 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1435                  [-U symbol] [-U symbol=] [-A command:symbol...]
1436   -d : use defaults for all answers.
1437   -e : go on without questioning past the production of config.sh.
1438   -f : specify an alternate default configuration file.
1439   -h : print this help message and exit (with an error status).
1440   -r : reuse C symbols value if possible (skips costly nm extraction).
1441   -s : silent mode, only echoes questions and essential information.
1442   -D : define symbol to have some value:
1443          -D symbol         symbol gets the value 'define'
1444          -D symbol=value   symbol gets the value 'value'
1445   -E : stop at the end of questions, after having produced config.sh.
1446   -K : do not use unless you know what you are doing.
1447   -O : let -D and -U override definitions from loaded configuration file.
1448   -S : perform variable substitutions on all .SH files (can mix with -f)
1449   -U : undefine symbol:
1450          -U symbol    symbol gets the value 'undef'
1451          -U symbol=   symbol gets completely empty
1452   -A : manipulate symbol after the platform specific hints have been applied:
1453          -A symbol=value                append " "value to symbol
1454          -A append:symbol=value         append value to symbol
1455          -A define:symbol=value         define symbol to have value
1456          -A clear:symbol                define symbol to be ''
1457          -A define:symbol               define symbol to be 'define'
1458          -A eval:symbol=value           define symbol to be eval of value
1459          -A prepend:symbol=value        prepend value to symbol
1460          -A undef:symbol                define symbol to be 'undef'
1461          -A undef:symbol=               define symbol to be ''
1462   -V : print version number and exit (with a zero status).
1463 EOM
1464         exit 1
1465         ;;
1466 esac
1467
1468 : Sanity checks
1469 case "$fastread$alldone" in
1470 yescont|yesexit) ;;
1471 *)
1472         case "$extractsh" in
1473         true) ;;
1474         *)
1475                 if test ! -t 0; then
1476                         echo "Say 'sh Configure', not 'sh <Configure'"
1477                         exit 1
1478                 fi
1479                 ;;
1480         esac
1481         ;;
1482 esac
1483
1484 exec 4>&1
1485 case "$silent" in
1486 true) exec 1>/dev/null;;
1487 esac
1488
1489 : run the defines and the undefines, if any, but leave the file out there...
1490 touch optdef.sh
1491 . ./optdef.sh
1492 : create the posthint manipulation script and leave the file out there...
1493 touch posthint.sh
1494
1495 : set package name
1496 package=perl5
1497 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1498 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1499 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1500 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1501 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1502 esac
1503
1504 : Some greps do not return status, grrr.
1505 echo "grimblepritz" >grimble
1506 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1507         contains=contains
1508 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1509         contains=grep
1510 else
1511         contains=contains
1512 fi
1513 rm -f grimble
1514 : the following should work in any shell
1515 case "$contains" in
1516 contains*)
1517         echo " "
1518         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1519         cat >contains <<'EOSS'
1520 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1521 EOSS
1522 chmod +x contains
1523 esac
1524
1525 : Find the path to the source tree
1526 case "$src" in
1527 '') case "$0" in
1528     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1529          case "$src" in
1530          /*)    ;;
1531          .)     ;;
1532          *)     src=`cd ../$src && pwd` ;;
1533          esac
1534          ;;
1535     *)   src='.';;
1536     esac;;
1537 esac
1538 case "$src" in
1539 '')     src=/
1540         rsrc=/
1541         ;;
1542 /*) rsrc="$src";;
1543 *) rsrc="../$src";;
1544 esac
1545 if test -f $rsrc/Configure && \
1546         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1547 then
1548    : found it, so we are ok.
1549 else
1550         rsrc=''
1551         for src in . .. ../.. ../../.. ../../../..; do
1552                 if test -f ../$src/Configure && \
1553                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1554                 then
1555                         rsrc=../$src
1556                         break
1557                 fi
1558         done
1559 fi
1560 case "$rsrc" in
1561 '')
1562         cat <<EOM >&4
1563
1564 Sorry, I can't seem to locate the source dir for $package.  Please start
1565 Configure with an explicit path -- i.e. /some/path/Configure.
1566
1567 EOM
1568         exit 1
1569         ;;
1570 ../.)   rsrc='..';;
1571 *)
1572         echo " "
1573         echo "Sources for $package found in \"$src\"." >&4
1574         ;;
1575 esac
1576
1577 : script used to extract .SH files with variable substitutions
1578 cat >extract <<'EOS'
1579 PERL_CONFIG_SH=true
1580 echo "Doing variable substitutions on .SH files..."
1581 if test -f MANIFEST; then
1582         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1583 else
1584         echo "(Looking for .SH files under the source directory.)"
1585         set x `(cd $src; find . -name "*.SH" -print)`
1586 fi
1587 shift
1588 case $# in
1589 0) set x `(cd $src; echo *.SH)`; shift;;
1590 esac
1591 if test ! -f $src/$1; then
1592         shift
1593 fi
1594 mkdir_p='
1595 name=$1;
1596 create="";
1597 while test $name; do
1598         if test ! -d "$name"; then
1599                 create="$name $create";
1600                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1601                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1602         else
1603                 name="";
1604         fi;
1605 done;
1606 for file in $create; do
1607         mkdir $file;
1608 done
1609 '
1610 for file in $*; do
1611         case "$src" in
1612         ".")
1613                 case "$file" in
1614                 */*)
1615                         dir=`expr X$file : 'X\(.*\)/'`
1616                         file=`expr X$file : 'X.*/\(.*\)'`
1617                         (cd $dir && . ./$file)
1618                         ;;
1619                 *)
1620                         . ./$file
1621                         ;;
1622                 esac
1623                 ;;
1624         *)
1625                 case "$file" in
1626                 */*)
1627                         dir=`expr X$file : 'X\(.*\)/'`
1628                         file=`expr X$file : 'X.*/\(.*\)'`
1629                         (set x $dir; shift; eval $mkdir_p)
1630                         sh <$src/$dir/$file
1631                         ;;
1632                 *)
1633                         sh <$src/$file
1634                         ;;
1635                 esac
1636                 ;;
1637         esac
1638 done
1639 if test -f $src/config_h.SH; then
1640         if test ! -f config.h; then
1641         : oops, they left it out of MANIFEST, probably, so do it anyway.
1642         . $src/config_h.SH
1643         fi
1644 fi
1645 EOS
1646
1647 : extract files and exit if asked to do so
1648 case "$extractsh" in
1649 true)
1650         case "$realsilent" in
1651         true) ;;
1652         *) exec 1>&4;;
1653         esac
1654         case "$config_sh" in
1655         '') config_sh='config.sh';;
1656         esac
1657         echo " "
1658         echo "Fetching answers from $config_sh..."
1659         cd ..
1660         . $config_sh
1661         test "$override" && . ./optdef.sh
1662         echo " "
1663         . UU/extract
1664         rm -rf UU
1665         echo "Extraction done."
1666         exit 0
1667         ;;
1668 esac
1669
1670 : Eunice requires " " instead of "", can you believe it
1671 echo " "
1672 : Here we go...
1673 echo "Beginning of configuration questions for $package."
1674
1675 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1676
1677 : first determine how to suppress newline on echo command
1678 echo " "
1679 echo "Checking echo to see how to suppress newlines..."
1680 (echo "hi there\c" ; echo " ") >.echotmp
1681 if $contains c .echotmp >/dev/null 2>&1 ; then
1682         echo "...using -n."
1683         n='-n'
1684         c=''
1685 else
1686         cat <<'EOM'
1687 ...using \c
1688 EOM
1689         n=''
1690         c='\c'
1691 fi
1692 echo $n "The star should be here-->$c"
1693 echo '*'
1694 rm -f .echotmp
1695
1696 : Now test for existence of everything in MANIFEST
1697 echo " "
1698 if test -f $rsrc/MANIFEST; then
1699         echo "First let's make sure your kit is complete.  Checking..." >&4
1700         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1701         rm -f missing
1702         tmppwd=`pwd`
1703         for filelist in x??; do
1704                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1705         done
1706         if test -s missing; then
1707                 cat missing >&4
1708                 cat >&4 <<'EOM'
1709
1710 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1711
1712 You have the option of continuing the configuration process, despite the
1713 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1714 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1715 and contact the author (perlbug@perl.org).
1716
1717 EOM
1718                 echo $n "Continue? [n] $c" >&4
1719                 read ans
1720                 case "$ans" in
1721                 y*)
1722                         echo "Continuing..." >&4
1723                         rm -f missing
1724                         ;;
1725                 *)
1726                         echo "ABORTING..." >&4
1727                         kill $$
1728                         ;;
1729                 esac
1730         else
1731                 echo "Looks good..."
1732         fi
1733 else
1734         echo "There is no MANIFEST file.  I hope your kit is complete !"
1735 fi
1736 rm -f missing x??
1737
1738 echo " "
1739 : Find the appropriate value for a newline for tr
1740 if test -n "$DJGPP"; then
1741        trnl='\012'
1742 fi
1743 if test X"$trnl" = X; then
1744         case "`echo foo|tr '\n' x 2>/dev/null`" in
1745         foox) trnl='\n' ;;
1746         esac
1747 fi
1748 if test X"$trnl" = X; then
1749         case "`echo foo|tr '\012' x 2>/dev/null`" in
1750         foox) trnl='\012' ;;
1751         esac
1752 fi
1753 if test X"$trnl" = X; then
1754         cat <<EOM >&2
1755
1756 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1757
1758 EOM
1759         exit 1
1760 fi
1761
1762 : compute the number of columns on the terminal for proper question formatting
1763 case "$COLUMNS" in
1764 '') COLUMNS='80';;
1765 esac
1766
1767 : set up the echo used in my read
1768 myecho="case \"\$xxxm\" in
1769 '') echo $n \"\$rp $c\" >&4;;
1770 *) case \"\$rp\" in
1771         '') echo $n \"[\$xxxm] $c\";;
1772         *)
1773                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1774                         echo \"\$rp\" >&4
1775                         echo $n \"[\$xxxm] $c\" >&4
1776                 else
1777                         echo $n \"\$rp [\$xxxm] $c\" >&4
1778                 fi
1779                 ;;
1780         esac;;
1781 esac"
1782
1783 : now set up to do reads with possible shell escape and default assignment
1784 cat <<EOSC >myread
1785 $startsh
1786 xxxm=\$dflt
1787 $myecho
1788 ans='!'
1789 case "\$fastread" in
1790 yes) case "\$dflt" in
1791         '') ;;
1792         *) ans='';
1793                 case "\$silent-\$rp" in
1794                 true-) ;;
1795                 *) echo " " >&4;;
1796                 esac;;
1797         esac;;
1798 *) case "\$silent" in
1799         true) case "\$rp" in
1800                 '') ans='';;
1801                 esac;;
1802         esac;;
1803 esac
1804 while expr "X\$ans" : "X!" >/dev/null; do
1805         read answ
1806         set x \$xxxm
1807         shift
1808         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1809         case  "\$answ" in
1810         "!")
1811                 sh 1>&4
1812                 echo " "
1813                 $myecho
1814                 ;;
1815         !*)
1816                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1817                 shift
1818                 sh 1>&4 -c "\$*"
1819                 echo " "
1820                 $myecho
1821                 ;;
1822         "\$ans")
1823                 case "\$ans" in
1824                 \\&*)
1825                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1826                         shift
1827                         case "\$1" in
1828                         -d)
1829                                 fastread=yes
1830                                 echo "(OK, I'll run with -d after this question.)" >&4
1831                                 ;;
1832                         -*)
1833                                 echo "*** Sorry, \$1 not supported yet." >&4
1834                                 ;;
1835                         esac
1836                         $myecho
1837                         ans=!
1838                         ;;
1839                 esac;;
1840         *)
1841                 case "\$aok" in
1842                 y)
1843                         echo "*** Substitution done -- please confirm."
1844                         xxxm="\$ans"
1845                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1846                         xxxm="\$ans"
1847                         ans=!
1848                         ;;
1849                 *)
1850                         echo "*** Error -- try again."
1851                         ans=!
1852                         ;;
1853                 esac
1854                 $myecho
1855                 ;;
1856         esac
1857         case "\$ans\$xxxm\$nostick" in
1858         '')
1859                 ans=!
1860                 $myecho
1861                 ;;
1862         esac
1863 done
1864 case "\$ans" in
1865 '') ans="\$xxxm";;
1866 esac
1867 EOSC
1868
1869 : create .config dir to save info across Configure sessions
1870 test -d ../.config || mkdir ../.config
1871 cat >../.config/README <<EOF
1872 This directory created by Configure to save information that should
1873 persist across sessions for $package.
1874
1875 You may safely delete it if you wish.
1876 EOF
1877
1878 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1879 case "$usedevel" in
1880 $define|true|[yY]*) ;;
1881 *) case "$xversion" in
1882    *[13579])
1883         cat >&4 <<EOH
1884 *** WHOA THERE!!! ***
1885
1886     This is an UNSTABLE DEVELOPMENT release.
1887     The version of this $package distribution is $xversion, that is, odd,
1888     (as opposed to even) and that signifies a development release.
1889     If you want a maintenance release, you want an even-numbered version.
1890
1891     Do ***NOT*** install this into production use.
1892     Data corruption and crashes are possible.
1893
1894     It is most seriously suggested that you do not continue any further
1895     unless you want to help in developing and debugging Perl.
1896
1897     If you *still* want to build perl, you can answer 'y' now,
1898     or pass -Dusedevel to Configure.
1899
1900 EOH
1901         rp='Do you really want to continue?'
1902         dflt='n'
1903         . ./myread
1904         case "$ans" in
1905         [yY]) echo >&4 "Okay, continuing."
1906               usedevel="$define" ;;
1907         *) echo >&4 "Okay, bye."
1908            exit 1
1909            ;;
1910         esac
1911         ;;
1912     esac
1913     ;;
1914 esac
1915 case "$usedevel" in
1916 $define|true|[yY]*)
1917         case "$versiononly" in
1918         '') versiononly="$define" ;;
1919         esac
1920         case "$installusrbinperl" in
1921         '') installusrbinperl="$undef" ;;
1922         esac
1923         ;;
1924 esac
1925
1926 : general instructions
1927 needman=true
1928 firsttime=true
1929 user=`(logname) 2>/dev/null`
1930 case "$user" in
1931 '') user=`whoami 2>&1`;;
1932 esac
1933 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1934         firsttime=false
1935         echo " "
1936         rp='Would you like to see the instructions?'
1937         dflt=n
1938         . ./myread
1939         case "$ans" in
1940         [yY]*) ;;
1941         *) needman=false;;
1942         esac
1943 fi
1944 if $needman; then
1945         cat <<EOH
1946
1947 This installation shell script will examine your system and ask you questions
1948 to determine how the perl5 package should be installed. If you get
1949 stuck on a question, you may use a ! shell escape to start a subshell or
1950 execute a command.  Many of the questions will have default answers in square
1951 brackets; typing carriage return will give you the default.
1952
1953 On some of the questions which ask for file or directory names you are allowed
1954 to use the ~name construct to specify the login directory belonging to "name",
1955 even if you don't have a shell which knows about that.  Questions where this is
1956 allowed will be marked "(~name ok)".
1957
1958 EOH
1959         rp=''
1960         dflt='Type carriage return to continue'
1961         . ./myread
1962         cat <<'EOH'
1963
1964 The prompter used in this script allows you to use shell variables and
1965 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1966 in the default answer, as if the default line was a set of arguments given to a
1967 script shell.  This means you may also use $* to repeat the whole default line,
1968 so you do not have to re-type everything to add something to the default.
1969
1970 Everytime there is a substitution, you will have to confirm.  If there is an
1971 error (e.g. an unmatched backtick), the default answer will remain unchanged
1972 and you will be prompted again.
1973
1974 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1975 the questions and use the computed defaults (or the previous answers if there
1976 was already a config.sh file). Type 'Configure -h' for a list of options.
1977 You may also start interactively and then answer '& -d' at any prompt to turn
1978 on the non-interactive behaviour for the remainder of the execution.
1979
1980 EOH
1981         . ./myread
1982         cat <<EOH
1983
1984 Much effort has been expended to ensure that this shell script will run on any
1985 Unix system.  If despite that it blows up on yours, your best bet is to edit
1986 Configure and run it again.  If you can't run Configure for some reason,
1987 you'll have to generate a config.sh file by hand.  Whatever problems you
1988 have, let me (perlbug@perl.org) know how I blew it.
1989
1990 This installation script affects things in two ways:
1991
1992 1) it may do direct variable substitutions on some of the files included
1993    in this kit.
1994 2) it builds a config.h file for inclusion in C programs.  You may edit
1995    any of these files as the need arises after running this script.
1996
1997 If you make a mistake on a question, there is no easy way to back up to it
1998 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1999 files.  Configure will offer to let you do this before it runs the SH files.
2000
2001 EOH
2002         dflt='Type carriage return to continue'
2003         . ./myread
2004         case "$firsttime" in
2005         true) echo $user >>../.config/instruct;;
2006         esac
2007 fi
2008
2009 : find out where common programs are
2010 echo " "
2011 echo "Locating common programs..." >&4
2012 cat <<EOSC >loc
2013 $startsh
2014 case \$# in
2015 0) exit 1;;
2016 esac
2017 thing=\$1
2018 shift
2019 dflt=\$1
2020 shift
2021 for dir in \$*; do
2022         case "\$thing" in
2023         .)
2024         if test -d \$dir/\$thing; then
2025                 echo \$dir
2026                 exit 0
2027         fi
2028         ;;
2029         *)
2030         for thisthing in \$dir/\$thing; do
2031                 : just loop through to pick last item
2032         done
2033         if test -f \$thisthing; then
2034                 echo \$thisthing
2035                 exit 0
2036         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2037                 echo \$thisthing
2038                 exit 0
2039         elif test -f \$dir/\$thing.exe; then
2040                 if test -n "$DJGPP"; then
2041                         echo \$dir/\$thing.exe
2042                 else
2043                         : on Eunice apparently
2044                         echo \$dir/\$thing
2045                 fi
2046                 exit 0
2047         fi
2048         ;;
2049         esac
2050 done
2051 echo \$dflt
2052 exit 1
2053 EOSC
2054 chmod +x loc
2055 $eunicefix loc
2056 loclist="
2057 awk
2058 cat
2059 chmod
2060 comm
2061 cp
2062 echo
2063 expr
2064 grep
2065 ls
2066 mkdir
2067 rm
2068 sed
2069 sort
2070 touch
2071 tr
2072 uniq
2073 "
2074 trylist="
2075 Mcc
2076 ar
2077 bison
2078 byacc
2079 cpp
2080 csh
2081 date
2082 egrep
2083 gmake
2084 gzip
2085 less
2086 ln
2087 make
2088 more
2089 nm
2090 nroff
2091 pg
2092 test
2093 uname
2094 zip
2095 "
2096 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2097 pth="$pth /lib /usr/lib"
2098 for file in $loclist; do
2099         eval xxx=\$$file
2100         case "$xxx" in
2101         /*|?:[\\/]*)
2102                 if test -f "$xxx"; then
2103                         : ok
2104                 else
2105                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2106                         xxx=`./loc $file $file $pth`
2107                 fi
2108                 ;;
2109         '') xxx=`./loc $file $file $pth`;;
2110         *) xxx=`./loc $xxx $xxx $pth`;;
2111         esac
2112         eval $file=$xxx$_exe
2113         eval _$file=$xxx
2114         case "$xxx" in
2115         /*)
2116                 echo $file is in $xxx.
2117                 ;;
2118         ?:[\\/]*)
2119                 echo $file is in $xxx.
2120                 ;;
2121         *)
2122                 echo "I don't know where '$file' is, and my life depends on it." >&4
2123                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2124                 exit 1
2125                 ;;
2126         esac
2127 done
2128 echo " "
2129 echo "Don't worry if any of the following aren't found..."
2130 say=offhand
2131 for file in $trylist; do
2132         eval xxx=\$$file
2133         case "$xxx" in
2134         /*|?:[\\/]*)
2135                 if test -f "$xxx"; then
2136                         : ok
2137                 else
2138                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2139                         xxx=`./loc $file $file $pth`
2140                 fi
2141                 ;;
2142         '') xxx=`./loc $file $file $pth`;;
2143         *) xxx=`./loc $xxx $xxx $pth`;;
2144         esac
2145         eval $file=$xxx
2146         eval _$file=$xxx
2147         case "$xxx" in
2148         /*)
2149                 echo $file is in $xxx.
2150                 ;;
2151         ?:[\\/]*)
2152                 echo $file is in $xxx.
2153                 ;;
2154         *)
2155                 echo "I don't see $file out there, $say."
2156                 say=either
2157                 ;;
2158         esac
2159 done
2160 case "$egrep" in
2161 egrep)
2162         echo "Substituting grep for egrep."
2163         egrep=$grep
2164         ;;
2165 esac
2166 case "$ln" in
2167 ln)
2168         echo "Substituting cp for ln."
2169         ln=$cp
2170         ;;
2171 esac
2172 case "$make" in
2173 make)   
2174         case "$gmake" in
2175         gmake)
2176         echo "I can't find make or gmake, and my life depends on it." >&4
2177         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2178         exit 1
2179         ;;
2180         esac
2181         ;;
2182 esac    
2183 case "$gmake" in
2184 gmake)  ;;
2185 *)      # We can't have osname yet.
2186         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2187                 # Assume that gmake, if found, is definitely GNU make
2188                 # and prefer it over the system make.
2189                 echo "Substituting gmake for make."
2190                 make=$gmake
2191         fi
2192         ;;
2193 esac
2194 case "$test" in
2195 test)
2196         echo "Hopefully test is built into your sh."
2197         ;;
2198 *)
2199         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2200                 echo "Using the test built into your sh."
2201                 test=test
2202                 _test=test
2203         fi
2204         ;;
2205 esac
2206 case "$echo" in
2207 echo)
2208         echo "Hopefully echo is built into your sh."
2209         ;;
2210 '') ;;
2211 *)
2212         echo " "
2213 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2214         $echo $n "hi there$c" >foo1
2215         echo $n "hi there$c" >foo2
2216         if cmp foo1 foo2 >/dev/null 2>&1; then
2217                 echo "They are compatible.  In fact, they may be identical."
2218         else
2219                 case "$n" in
2220                 '-n') n='' c='\c';;
2221                 *) n='-n' c='';;
2222                 esac
2223                 cat <<FOO
2224 They are not compatible!  You are probably running ksh on a non-USG system.
2225 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2226 have echo built in and we may have to run some Bourne shell scripts.  That
2227 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2228
2229 FOO
2230                 $echo $n "The star should be here-->$c"
2231                 $echo "*"
2232         fi
2233         $rm -f foo1 foo2
2234         ;;
2235 esac
2236
2237 cat <<EOS >checkcc
2238 $startsh
2239 EOS
2240 cat <<'EOSC' >>checkcc
2241 case "$cc" in
2242 '') ;;
2243 *)  $rm -f try try.*
2244     $cat >try.c <<EOM
2245 int main(int argc, char *argv[]) {
2246   return 0;
2247 }
2248 EOM
2249     if $cc -o try $ccflags $ldflags try.c; then
2250        :
2251     else
2252         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2253         despair=yes
2254         trygcc=yes
2255         case "$cc" in
2256         *gcc*) trygcc=no ;;
2257         esac
2258         case "`$cc -v -c try.c 2>&1`" in
2259         *gcc*) trygcc=no ;;
2260         esac
2261         if $test X"$trygcc" = Xyes; then
2262             if gcc -o try -c try.c; then
2263                 echo " "
2264                 echo "You seem to have a working gcc, though." >&4
2265                 rp="Would you like to use it?"
2266                 dflt=y
2267                 if $test -f myread; then
2268                     . ./myread
2269                 else
2270                     if $test -f UU/myread; then
2271                         . ./UU/myread
2272                     else
2273                         echo "Cannot find myread, sorry.  Aborting." >&2
2274                         exit 1
2275                     fi
2276                 fi  
2277                 case "$ans" in
2278                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2279                 esac
2280             fi
2281         fi
2282         if $test X"$despair" = Xyes; then
2283             $cat >&4 <<EOM
2284 You need to find a working C compiler.
2285 Either (purchase and) install the C compiler supplied by your OS vendor,
2286 or for a free C compiler try http://gcc.gnu.org/
2287 I cannot continue any further, aborting.
2288 EOM
2289             exit 1
2290         fi
2291     fi
2292     $rm -f try try.*
2293     ;;
2294 esac
2295 EOSC
2296
2297 : determine whether symbolic links are supported
2298 echo " "
2299 $touch blurfl
2300 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2301         echo "Symbolic links are supported." >&4
2302         lns="$ln -s"
2303 else
2304         echo "Symbolic links are NOT supported." >&4
2305         lns="$ln"
2306 fi
2307 $rm -f blurfl sym
2308
2309 : determine whether symbolic links are supported
2310 echo " "
2311 case "$lns" in
2312 *"ln -s")
2313         echo "Checking how to test for symbolic links..." >&4
2314         $lns blurfl sym
2315         if $test "X$issymlink" = X; then
2316                 case "$newsh" in
2317                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2318                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2319                 esac
2320                 if test $? = 0; then
2321                         issymlink="test -h"
2322                 else
2323                         echo "Your builtin 'test -h' may be broken." >&4
2324                         case "$test" in
2325                         /*)     ;;
2326                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2327                                 for p in $pth
2328                                 do
2329                                         if test -f "$p/$test"; then
2330                                                 test="$p/$test"
2331                                                 break
2332                                         fi
2333                                 done
2334                                 ;;
2335                         esac
2336                         case "$test" in
2337                         /*)
2338                                 echo "Trying external '$test -h'." >&4
2339                                 issymlink="$test -h"
2340                                 if $test ! -h sym >/dev/null 2>&1; then
2341                                         echo "External '$test -h' is broken, too." >&4
2342                                         issymlink=''
2343                                 fi
2344                                 ;;
2345                         *)      issymlink='' ;;
2346                         esac
2347                 fi              
2348         fi
2349         if $test "X$issymlink" = X; then
2350                 if $test -L sym 2>/dev/null; then
2351                         issymlink="$test -L"
2352                         echo "The builtin '$test -L' worked." >&4
2353                 fi
2354         fi
2355         if $test "X$issymlink" != X; then
2356                 echo "You can test for symbolic links with '$issymlink'." >&4
2357         else
2358                 echo "I do not know how you can test for symbolic links." >&4
2359         fi
2360         $rm -f blurfl sym
2361         ;;
2362 *)      echo "No symbolic links, so not testing for their testing..." >&4
2363         ;;
2364 esac
2365 echo " "
2366
2367
2368 case "$mksymlinks" in
2369 $define|true|[yY]*)
2370         case "$src" in
2371         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2372                 exit 1
2373                 ;;
2374         *)      case "$lns:$issymlink" in
2375                 *"ln -s:"*"test -"?)
2376                         echo "Creating the symbolic links..." >&4
2377                         echo "(First creating the subdirectories...)" >&4
2378                         cd ..
2379                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2380                                 read directory
2381                                 test -z "$directory" && break
2382                                 mkdir -p $directory
2383                         done
2384                         # Sanity check 1.
2385                         if test ! -d t/base; then
2386                                 echo "Failed to create the subdirectories.  Aborting." >&4
2387                                 exit 1
2388                         fi
2389                         echo "(Then creating the symlinks...)" >&4
2390                         awk '{print $1}' $src/MANIFEST | while true; do
2391                                 read filename
2392                                 test -z "$filename" && break
2393                                 if test -f $filename; then
2394                                         if $issymlink $filename; then
2395                                                 rm -f $filename
2396                                         fi
2397                                 fi
2398                                 if test -f $filename; then
2399                                         echo "$filename already exists, not symlinking."
2400                                 else
2401                                         ln -s $src/$filename $filename
2402                                 fi
2403                         done
2404                         # Sanity check 2.
2405                         if test ! -f t/base/lex.t; then
2406                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2407                                 exit 1
2408                         fi
2409                         cd UU
2410                         ;;
2411                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2412                         ;;
2413                 esac
2414                 ;;
2415         esac
2416         ;;
2417 esac
2418
2419
2420 case "$usecrosscompile" in
2421 $define|true|[yY]*)
2422         $echo "Cross-compiling..."
2423         croak=''
2424         case "$cc" in
2425         *-*-gcc) # A cross-compiling gcc, probably.
2426             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2427             ar=$targetarch-ar
2428             # leave out ld, choosing it is more complex
2429             nm=$targetarch-nm
2430             ranlib=$targetarch-ranlib
2431             $echo 'extern int foo;' > try.c
2432             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2433             shift
2434             if $test $# -gt 0; then
2435                 incpth="$incpth $*"
2436                 incpth="`$echo $incpth|$sed 's/^ //'`"
2437                 echo "Guessing incpth '$incpth'." >&4
2438                 for i in $*; do
2439                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2440                     if $test -d $j; then
2441                         libpth="$libpth $j"
2442                     fi
2443                 done   
2444                 libpth="`$echo $libpth|$sed 's/^ //'`"
2445                 echo "Guessing libpth '$libpth'." >&4
2446             fi
2447             $rm -f try.c
2448             ;;
2449         esac
2450         case "$targetarch" in
2451         '') echo "Targetarch not defined." >&4; croak=y ;;
2452         *)  echo "Using targetarch $targetarch." >&4 ;;
2453         esac
2454         case "$incpth" in
2455         '') echo "Incpth not defined." >&4; croak=y ;;
2456         *)  echo "Using incpth '$incpth'." >&4 ;;
2457         esac
2458         case "$libpth" in
2459         '') echo "Libpth not defined." >&4; croak=y ;;
2460         *)  echo "Using libpth '$libpth'." >&4 ;;
2461         esac
2462         case "$usrinc" in
2463         '') for i in $incpth; do
2464                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2465                     usrinc=$i
2466                     echo "Guessing usrinc $usrinc." >&4
2467                     break
2468                 fi
2469             done
2470             case "$usrinc" in
2471             '') echo "Usrinc not defined." >&4; croak=y ;;
2472             esac
2473             ;;
2474         *)  echo "Using usrinc $usrinc." >&4 ;;
2475         esac
2476         case "$targethost" in
2477         '') echo "Targethost not defined." >&4; croak=y ;;
2478         *)  echo "Using targethost $targethost." >&4
2479         esac
2480         locincpth=' '
2481         loclibpth=' '
2482         case "$croak" in
2483         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2484         esac
2485         case "$src" in
2486         /*) run=$src/Cross/run
2487             targetmkdir=$src/Cross/mkdir
2488             to=$src/Cross/to
2489             from=$src/Cross/from
2490             ;;
2491         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2492             run=$pwd/Cross/run
2493             targetmkdir=$pwd/Cross/mkdir
2494             to=$pwd/Cross/to
2495             from=$pwd/Cross/from
2496             ;;
2497         esac
2498         case "$targetrun" in
2499         '') targetrun=ssh ;;
2500         esac
2501         case "$targetto" in
2502         '') targetto=scp ;;
2503         esac
2504         case "$targetfrom" in
2505         '') targetfrom=scp ;;
2506         esac
2507         run=$run-$targetrun
2508         to=$to-$targetto
2509         from=$from-$targetfrom
2510         case "$targetdir" in
2511         '')  targetdir=/tmp
2512              echo "Guessing targetdir $targetdir." >&4
2513              ;;
2514         esac
2515         case "$targetuser" in
2516         '')  targetuser=root
2517              echo "Guessing targetuser $targetuser." >&4
2518              ;;
2519         esac
2520         case "$targetfrom" in
2521         scp)    q=-q ;;
2522         *)      q='' ;;
2523         esac
2524         case "$targetrun" in
2525         ssh|rsh)
2526             cat >$run <<EOF
2527 #!/bin/sh
2528 case "\$1" in
2529 -cwd)
2530   shift
2531   cwd=\$1
2532   shift
2533   ;;
2534 esac
2535 case "\$cwd" in
2536 '') cwd=$targetdir ;;
2537 esac
2538 exe=\$1
2539 shift
2540 if $test ! -f \$exe.xok; then
2541   $to \$exe
2542   $touch \$exe.xok
2543 fi
2544 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2545 EOF
2546             ;;
2547         *)  echo "Unknown targetrun '$targetrun'" >&4
2548             exit 1
2549             ;;
2550         esac
2551         case "$targetmkdir" in
2552         */Cross/mkdir)
2553             cat >$targetmkdir <<EOF
2554 #!/bin/sh
2555 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2556 EOF
2557             $chmod a+rx $targetmkdir
2558             ;;
2559         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2560             exit 1
2561             ;;
2562         esac
2563         case "$targetto" in
2564         scp|rcp)
2565             cat >$to <<EOF
2566 #!/bin/sh
2567 for f in \$@
2568 do
2569   case "\$f" in
2570   /*)
2571     $targetmkdir \`dirname \$f\`
2572     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2573     ;;
2574   *)
2575     $targetmkdir $targetdir/\`dirname \$f\`
2576     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2577     ;;
2578   esac
2579 done
2580 exit 0
2581 EOF
2582             ;;
2583         cp) cat >$to <<EOF
2584 #!/bin/sh
2585 for f in \$@
2586 do
2587   case "\$f" in
2588   /*)
2589     $mkdir -p $targetdir/\`dirname \$f\`
2590     $cp \$f $targetdir/\$f || exit 1
2591     ;;
2592   *)
2593     $targetmkdir $targetdir/\`dirname \$f\`
2594     $cp \$f $targetdir/\$f || exit 1
2595     ;;
2596   esac
2597 done
2598 exit 0
2599 EOF
2600             ;;
2601         *)  echo "Unknown targetto '$targetto'" >&4
2602             exit 1
2603             ;;
2604         esac
2605         case "$targetfrom" in
2606         scp|rcp)
2607           cat >$from <<EOF
2608 #!/bin/sh
2609 for f in \$@
2610 do
2611   $rm -f \$f
2612   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2613 done
2614 exit 0
2615 EOF
2616             ;;
2617         cp) cat >$from <<EOF
2618 #!/bin/sh
2619 for f in \$@
2620 do
2621   $rm -f \$f
2622   cp $targetdir/\$f . || exit 1
2623 done
2624 exit 0
2625 EOF
2626             ;;
2627         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2628             exit 1
2629             ;;
2630         esac
2631         if $test ! -f $run; then
2632             echo "Target 'run' script '$run' not found." >&4
2633         else
2634             $chmod a+rx $run
2635         fi
2636         if $test ! -f $to; then
2637             echo "Target 'to' script '$to' not found." >&4
2638         else
2639             $chmod a+rx $to
2640         fi
2641         if $test ! -f $from; then
2642             echo "Target 'from' script '$from' not found." >&4
2643         else
2644             $chmod a+rx $from
2645         fi
2646         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2647             exit 1
2648         fi
2649         cat >&4 <<EOF
2650 Using '$run' for remote execution,
2651 and '$from' and '$to'
2652 for remote file transfer.
2653 EOF
2654         ;;
2655 *)      run=''
2656         to=:
2657         from=:
2658         usecrosscompile='undef'
2659         targetarch=''
2660         ;;
2661 esac
2662
2663 : see whether [:lower:] and [:upper:] are supported character classes
2664 echo " "
2665 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2666 ABYZ)
2667         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2668         up='[:upper:]'
2669         low='[:lower:]'
2670         ;;
2671 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2672         # (0xc9 and 0xd1), therefore that is a nice testing point.
2673         if test "X$up" = X -o "X$low" = X; then
2674             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2675             ij) up='[A-Z]'
2676                 low='[a-z]'
2677                 ;;
2678             esac
2679         fi
2680         if test "X$up" = X -o "X$low" = X; then
2681             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2682             ij) up='A-Z'
2683                 low='a-z'
2684                 ;;
2685             esac
2686         fi
2687         if test "X$up" = X -o "X$low" = X; then
2688             case "`echo IJ | od -x 2>/dev/null`" in
2689             *C9D1*|*c9d1*)
2690                 echo "Hey, this might be EBCDIC." >&4
2691                 if test "X$up" = X -o "X$low" = X; then
2692                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2693                     ij) up='[A-IJ-RS-Z]'
2694                         low='[a-ij-rs-z]'
2695                         ;;
2696                     esac
2697                 fi
2698                 if test "X$up" = X -o "X$low" = X; then
2699                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2700                     ij) up='A-IJ-RS-Z'
2701                         low='a-ij-rs-z'
2702                         ;;
2703                     esac
2704                 fi
2705                 ;;
2706             esac
2707         fi
2708 esac
2709 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2710 ij)
2711     echo "Using $up and $low to convert case." >&4
2712     ;;
2713 *)
2714     echo "I don't know how to translate letters from upper to lower case." >&4
2715     echo "Your tr is not acting any way I know of." >&4
2716     exit 1
2717     ;;
2718 esac
2719 : set up the translation script tr, must be called with ./tr of course
2720 cat >tr <<EOSC
2721 $startsh
2722 case "\$1\$2" in
2723 '[A-Z][a-z]') exec $tr '$up' '$low';;
2724 '[a-z][A-Z]') exec $tr '$low' '$up';;
2725 esac
2726 exec $tr "\$@"
2727 EOSC
2728 chmod +x tr
2729 $eunicefix tr
2730
2731 : Try to determine whether config.sh was made on this system
2732 case "$config_sh" in
2733 '')
2734 myuname=`$uname -a 2>/dev/null`
2735 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2736 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2737 # because the A-Z/a-z are not consecutive.
2738 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2739         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2740 newmyuname="$myuname"
2741 dflt=n
2742 case "$knowitall" in
2743 '')
2744         if test -f ../config.sh; then
2745                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2746                         eval "`grep myuname= ../config.sh`"
2747                 fi
2748                 if test "X$myuname" = "X$newmyuname"; then
2749                         dflt=y
2750                 fi
2751         fi
2752         ;;
2753 *) dflt=y;;
2754 esac
2755
2756 : Get old answers from old config file if Configure was run on the
2757 : same system, otherwise use the hints.
2758 hint=default
2759 cd ..
2760 if test -f config.sh; then
2761         echo " "
2762         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2763         . UU/myread
2764         case "$ans" in
2765         n*|N*) echo "OK, I'll ignore it."
2766                 mv config.sh config.sh.old
2767                 myuname="$newmyuname"
2768                 ;;
2769         *)  echo "Fetching default answers from your old config.sh file..." >&4
2770                 tmp_n="$n"
2771                 tmp_c="$c"
2772                 tmp_sh="$sh"
2773                 . ./config.sh
2774                 cp config.sh UU
2775                 n="$tmp_n"
2776                 c="$tmp_c"
2777                 : Older versions did not always set $sh.  Catch re-use of such
2778                 : an old config.sh.
2779                 case "$sh" in
2780                 '') sh="$tmp_sh" ;;
2781                 esac
2782                 hint=previous
2783                 ;;
2784         esac
2785 fi
2786 . ./UU/checkcc
2787 if test ! -f config.sh; then
2788         $cat <<EOM
2789
2790 First time through, eh?  I have some defaults handy for some systems
2791 that need some extra help getting the Configure answers right:
2792
2793 EOM
2794         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2795         dflt=''
2796         : Half the following guesses are probably wrong... If you have better
2797         : tests or hints, please send them to perlbug@perl.org
2798         : The metaconfig authors would also appreciate a copy...
2799         $test -f /irix && osname=irix
2800         $test -f /xenix && osname=sco_xenix
2801         $test -f /dynix && osname=dynix
2802         $test -f /dnix && osname=dnix
2803         $test -f /lynx.os && osname=lynxos
2804         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2805         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2806         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2807         $test -f /bin/mips && /bin/mips && osname=mips
2808         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2809                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2810         $test -d /usr/apollo/bin && osname=apollo
2811         $test -f /etc/saf/_sactab && osname=svr4
2812         $test -d /usr/include/minix && osname=minix
2813         $test -d /system && osname=vos
2814         if $test -d /MachTen -o -d /MachTen_Folder; then
2815                 osname=machten
2816                 if $test -x /sbin/version; then
2817                         osvers=`/sbin/version | $awk '{print $2}' |
2818                         $sed -e 's/[A-Za-z]$//'`
2819                 elif $test -x /usr/etc/version; then
2820                         osvers=`/usr/etc/version | $awk '{print $2}' |
2821                         $sed -e 's/[A-Za-z]$//'`
2822                 else
2823                         osvers="$2.$3"
2824                 fi
2825         fi
2826
2827         $test -f /sys/posix.dll &&
2828                 $test -f /usr/bin/what &&
2829                 set X `/usr/bin/what /sys/posix.dll` &&
2830                 $test "$3" = UWIN &&
2831                 osname=uwin &&
2832                 osvers="$5"
2833
2834         if $test -f $uname; then
2835                 set X $myuname
2836                 shift
2837
2838                 case "$5" in
2839                 fps*) osname=fps ;;
2840                 mips*)
2841                         case "$4" in
2842                         umips) osname=umips ;;
2843                         *) osname=mips ;;
2844                         esac;;
2845                 [23]100) osname=mips ;;
2846                 next*) osname=next ;;
2847                 i386*)
2848                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2849                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2850                                 osname='sco'
2851                                 osvers=$tmp
2852                         elif $test -f /etc/kconfig; then
2853                                 osname=isc
2854                                 if test "$lns" = "$ln -s"; then
2855                                         osvers=4
2856                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2857                                         osvers=3
2858                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2859                                         osvers=2
2860                                 fi
2861                         fi
2862                         tmp=''
2863                         ;;
2864                 pc*)
2865                         if test -n "$DJGPP"; then
2866                                 osname=dos
2867                                 osvers=djgpp
2868                         fi
2869                         ;;
2870                 esac
2871
2872                 case "$1" in
2873                 aix) osname=aix
2874                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2875                         case "$tmp" in
2876                         'not found') osvers="$4"."$3" ;;
2877                         '<3240'|'<>3240') osvers=3.2.0 ;;
2878                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2879                         '=3250'|'>3250') osvers=3.2.5 ;;
2880                         *) osvers=$tmp;;
2881                         esac
2882                         ;;
2883                 bsd386) osname=bsd386
2884                         osvers=`$uname -r`
2885                         ;;
2886                 cygwin*) osname=cygwin
2887                         osvers="$3"
2888                         ;;
2889                 *dc.osx) osname=dcosx
2890                         osvers="$3"
2891                         ;;
2892                 dnix) osname=dnix
2893                         osvers="$3"
2894                         ;;
2895                 domainos) osname=apollo
2896                         osvers="$3"
2897                         ;;
2898                 dgux) osname=dgux 
2899                         osvers="$3"
2900                         ;;
2901                 dynixptx*) osname=dynixptx
2902                         osvers=`echo "$4"|sed 's/^v//'`
2903                         ;;
2904                 freebsd) osname=freebsd 
2905                         osvers="$3" ;;
2906                 genix) osname=genix ;;
2907                 hp*) osname=hpux 
2908                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2909                         ;;
2910                 irix*) osname=irix
2911                         case "$3" in
2912                         4*) osvers=4 ;;
2913                         5*) osvers=5 ;;
2914                         *)      osvers="$3" ;;
2915                         esac
2916                         ;;
2917                 linux) osname=linux
2918                         case "$3" in
2919                         *)      osvers="$3" ;;
2920                         esac
2921                         ;;
2922                 MiNT) osname=mint
2923                         ;;
2924                 netbsd*) osname=netbsd
2925                         osvers="$3"
2926                         ;;
2927                 news-os) osvers="$3"
2928                         case "$3" in
2929                         4*) osname=newsos4 ;;
2930                         *) osname=newsos ;;
2931                         esac
2932                         ;;
2933                 next*) osname=next ;;
2934                 nonstop-ux) osname=nonstopux ;;
2935                 POSIX-BC | posix-bc ) osname=posix-bc
2936                         osvers="$3"
2937                         ;;
2938                 powerux | power_ux | powermax_os | powermaxos | \
2939                 powerunix | power_unix) osname=powerux
2940                         osvers="$3"
2941                         ;;
2942                 qnx) osname=qnx
2943                         osvers="$4"
2944                         ;;
2945                 solaris) osname=solaris
2946                         case "$3" in
2947                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2948                         *)      osvers="$3" ;;
2949                         esac
2950                         ;;
2951                 sunos) osname=sunos
2952                         case "$3" in
2953                         5*) osname=solaris
2954                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2955                         *)      osvers="$3" ;;
2956                         esac
2957                         ;;
2958                 titanos) osname=titanos
2959                         case "$3" in
2960                         1*) osvers=1 ;;
2961                         2*) osvers=2 ;;
2962                         3*) osvers=3 ;;
2963                         4*) osvers=4 ;;
2964                         *)      osvers="$3" ;;
2965                         esac
2966                         ;;
2967                 ultrix) osname=ultrix
2968                         osvers="$3"
2969                         ;;
2970                 osf1|mls+)      case "$5" in
2971                                 alpha)
2972                                         osname=dec_osf
2973                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2974                                         case "$osvers" in
2975                                         [1-9].[0-9]*) ;;
2976                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2977                                         esac
2978                                         ;;
2979                         hp*)    osname=hp_osf1  ;;
2980                         mips)   osname=mips_osf1 ;;
2981                         esac
2982                         ;;
2983                 unixware) osname=svr5
2984                         osvers="$4"
2985                         ;;
2986                 uts)    osname=uts
2987                         osvers="$3"
2988                         ;;
2989                 vos) osvers="$3"
2990                         ;;
2991                 $2) case "$osname" in
2992                         *isc*) ;;
2993                         *freebsd*) ;;
2994                         svr*)
2995                                 : svr4.x or possibly later
2996                                 case "svr$3" in 
2997                                 ${osname}*)
2998                                         osname=svr$3
2999                                         osvers=$4
3000                                         ;;
3001                                 esac
3002                                 case "$osname" in
3003                                 svr4.0)
3004                                         : Check for ESIX
3005                                         if test -f /stand/boot ; then
3006                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3007                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3008                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3009                                                         if test -n "$isesix"; then
3010                                                                 osname=esix4
3011                                                         fi
3012                                                 fi
3013                                         fi
3014                                         ;;
3015                                 esac
3016                                 ;;
3017                         *)      if test -f /etc/systemid; then
3018                                         osname=sco
3019                                         set `echo $3 | $sed 's/\./ /g'` $4
3020                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3021                                                 osvers=$1.$2.$3
3022                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3023                                                 osvers=$1.$2
3024                                         elif $test -f $src/hints/sco_$1.sh; then
3025                                                 osvers=$1
3026                                         fi
3027                                 else
3028                                         case "$osname" in
3029                                         '') : Still unknown.  Probably a generic Sys V.
3030                                                 osname="sysv"
3031                                                 osvers="$3"
3032                                                 ;;
3033                                         esac
3034                                 fi
3035                                 ;;
3036                         esac
3037                         ;;
3038                 *)      case "$osname" in
3039                         '') : Still unknown.  Probably a generic BSD.
3040                                 osname="$1"
3041                                 osvers="$3"
3042                                 ;;
3043                         esac
3044                         ;;
3045                 esac
3046         else
3047                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3048                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3049                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3050                                 osname=news_os
3051                         fi
3052                         $rm -f UU/kernel.what
3053                 elif test -d c:/.; then
3054                         set X $myuname
3055                         osname=os2
3056                         osvers="$5"
3057                 fi
3058         fi
3059         
3060         case "$targetarch" in
3061         '') ;;
3062         *)  hostarch=$osname
3063             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3064             osvers=''
3065             ;;
3066         esac
3067
3068         : Now look for a hint file osname_osvers, unless one has been
3069         : specified already.
3070         case "$hintfile" in
3071         ''|' ')
3072                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3073                 : Also try without trailing minor version numbers.
3074                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3075                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3076                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3077                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3078                 case "$file" in
3079                 '') dflt=none ;;
3080                 *)  case "$osvers" in
3081                         '') dflt=$file
3082                                 ;;
3083                         *)  if $test -f $src/hints/$file.sh ; then
3084                                         dflt=$file
3085                                 elif $test -f $src/hints/$xfile.sh ; then
3086                                         dflt=$xfile
3087                                 elif $test -f $src/hints/$xxfile.sh ; then
3088                                         dflt=$xxfile
3089                                 elif $test -f $src/hints/$xxxfile.sh ; then
3090                                         dflt=$xxxfile
3091                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3092                                         dflt=$xxxxfile
3093                                 elif $test -f "$src/hints/${osname}.sh" ; then
3094                                         dflt="${osname}"
3095                                 else
3096                                         dflt=none
3097                                 fi
3098                                 ;;
3099                         esac
3100                         ;;
3101                 esac
3102                 if $test -f Policy.sh ; then
3103                         case "$dflt" in
3104                         *Policy*) ;;
3105                         none) dflt="Policy" ;;
3106                         *) dflt="Policy $dflt" ;;
3107                         esac
3108                 fi
3109                 ;;
3110         *)
3111                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3112                 ;;
3113         esac
3114
3115         if $test -f Policy.sh ; then
3116                 $cat <<EOM
3117
3118 There's also a Policy hint file available, which should make the
3119 site-specific (policy) questions easier to answer.
3120 EOM
3121
3122         fi
3123
3124         $cat <<EOM
3125
3126 You may give one or more space-separated answers, or "none" if appropriate.
3127 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3128 is a good thing.  DO NOT give a wrong version or a wrong OS.
3129
3130 EOM
3131
3132         rp="Which of these apply, if any?"
3133         . UU/myread
3134         tans=$ans
3135         for file in $tans; do
3136                 if $test X$file = XPolicy -a -f Policy.sh; then
3137                         . Policy.sh
3138                         $cat Policy.sh >> UU/config.sh
3139                 elif $test -f $src/hints/$file.sh; then
3140                         . $src/hints/$file.sh
3141                         $cat $src/hints/$file.sh >> UU/config.sh
3142                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3143                         : nothing
3144                 else
3145                         : Give one chance to correct a possible typo.
3146                         echo "$file.sh does not exist"
3147                         dflt=$file
3148                         rp="hint to use instead?"
3149                         . UU/myread
3150                         for file in $ans; do
3151                                 if $test -f "$src/hints/$file.sh"; then
3152                                         . $src/hints/$file.sh
3153                                         $cat $src/hints/$file.sh >> UU/config.sh
3154                                 elif $test X$ans = X -o X$ans = Xnone ; then
3155                                         : nothing
3156                                 else
3157                                         echo "$file.sh does not exist -- ignored."
3158                                 fi
3159                         done
3160                 fi
3161         done
3162
3163         hint=recommended
3164         : Remember our hint file for later.
3165         if $test -f "$src/hints/$file.sh" ; then
3166                 hintfile="$file"
3167         else
3168                 hintfile=''
3169         fi
3170 fi
3171 cd UU
3172 ;;
3173 *)
3174         echo " "
3175         echo "Fetching default answers from $config_sh..." >&4
3176         tmp_n="$n"
3177         tmp_c="$c"
3178         cd ..
3179         cp $config_sh config.sh 2>/dev/null
3180         chmod +w config.sh
3181         . ./config.sh
3182         cd UU
3183         cp ../config.sh .
3184         n="$tmp_n"
3185         c="$tmp_c"
3186         hint=previous
3187         ;;
3188 esac
3189 test "$override" && . ./optdef.sh
3190
3191 : Restore computed paths
3192 for file in $loclist $trylist; do
3193         eval $file="\$_$file"
3194 done
3195
3196 cat << EOM
3197
3198 Configure uses the operating system name and version to set some defaults.
3199 The default value is probably right if the name rings a bell. Otherwise,
3200 since spelling matters for me, either accept the default or answer "none"
3201 to leave it blank.
3202
3203 EOM
3204 case "$osname" in
3205         ''|' ')
3206                 case "$hintfile" in
3207                 ''|' '|none) dflt=none ;;
3208                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3209                 esac
3210                 ;;
3211         *) dflt="$osname" ;;
3212 esac
3213 rp="Operating system name?"
3214 . ./myread
3215 case "$ans" in
3216 none)  osname='' ;;
3217 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3218 esac
3219 echo " "
3220 case "$osvers" in
3221         ''|' ')
3222                 case "$hintfile" in
3223                 ''|' '|none) dflt=none ;;
3224                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3225                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3226                         case "$dflt" in
3227                         ''|' ') dflt=none ;;
3228                         esac
3229                         ;;
3230                 esac
3231                 ;;
3232         *) dflt="$osvers" ;;
3233 esac
3234 rp="Operating system version?"
3235 . ./myread
3236 case "$ans" in
3237 none)  osvers='' ;;
3238 *) osvers="$ans" ;;
3239 esac
3240
3241
3242 . ./posthint.sh
3243
3244 : who configured the system
3245 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3246 cf_by=`(logname) 2>/dev/null`
3247 case "$cf_by" in
3248 "")
3249         cf_by=`(whoami) 2>/dev/null`
3250         case "$cf_by" in
3251         "") cf_by=unknown ;;
3252         esac ;;
3253 esac
3254
3255 : set up the script used to warn in case of inconsistency
3256 cat <<EOS >whoa
3257 $startsh
3258 EOS
3259 cat <<'EOSC' >>whoa
3260 dflt=y
3261 echo " "
3262 echo "*** WHOA THERE!!! ***" >&4
3263 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3264 rp="    Keep the $hint value?"
3265 . ./myread
3266 case "$ans" in
3267 y) td=$was; tu=$was;;
3268 esac
3269 EOSC
3270
3271 : function used to set $1 to $val
3272 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3273 case "$val$was" in
3274 $define$undef) . ./whoa; eval "$var=\$td";;
3275 $undef$define) . ./whoa; eval "$var=\$tu";;
3276 *) eval "$var=$val";;
3277 esac'
3278
3279 case "$usethreads" in
3280 $define|true|[yY]*)     dflt='y';;
3281 *) dflt='n';;
3282 esac
3283 cat <<EOM
3284
3285 Perl can be built to take advantage of threads on some systems.
3286 To do so, Configure can be run with -Dusethreads.
3287
3288 Note that threading is a highly experimental feature, and
3289 some known race conditions still remain.  If you choose to try
3290 it, be very sure to not actually deploy it for production
3291 purposes.  README.threads has more details, and is required
3292 reading if you enable threads.
3293
3294 If this doesn't make any sense to you, just accept the default '$dflt'.
3295 EOM
3296 rp='Build a threading Perl?'
3297 . ./myread
3298 case "$ans" in
3299 y|Y)    val="$define" ;;
3300 *)      val="$undef" ;;
3301 esac
3302 set usethreads
3303 eval $setvar
3304
3305 case "$usethreads" in
3306 $define)
3307         $cat <<EOM
3308
3309 As of 5.5.640, Perl has two different internal threading implementations,
3310 the 5.005 version (5005threads) and an interpreter-based version
3311 (ithreads) that has one interpreter per thread.  Both are very 
3312 experimental.  This arrangement exists to help developers work out
3313 which one is better.
3314
3315 If you're a casual user, you probably don't want interpreter-threads
3316 at this time.  But if you do, the 'threads' module allows their use,
3317 and the 'Thread' module offers an interface to both 5005threads and
3318 ithreads (whichever has been configured).
3319 EOM
3320         : Default to ithreads unless overridden on command line or with
3321         : old config.sh
3322         dflt='y'
3323         case "$use5005threads" in
3324                 $define|true|[yY]*) dflt='n';;
3325         esac
3326         case "$useithreads" in
3327                 $undef|false|[nN]*) dflt='n';;
3328         esac
3329         rp='Use interpreter-based ithreads?'
3330         . ./myread
3331         case "$ans" in
3332         y|Y)    val="$define" ;;
3333         *)      val="$undef" ;;
3334         esac
3335         set useithreads
3336         eval $setvar
3337         : Now set use5005threads to the opposite value.
3338         case "$useithreads" in
3339         $define) val="$undef" ;;
3340         *) val="$define" ;;
3341         esac
3342         set use5005threads
3343         eval $setvar
3344         ;;
3345 *)
3346         useithreads="$undef"
3347         use5005threads="$undef"
3348         ;;
3349 esac
3350
3351 case "$useithreads$use5005threads" in
3352 "$define$define")
3353         $cat >&4 <<EOM
3354
3355 You cannot have both the ithreads and the 5.005 threads enabled
3356 at the same time.  Disabling the 5.005 threads since they are
3357 much less stable than the ithreads.
3358
3359 EOM
3360         use5005threads="$undef"
3361         ;;
3362 esac
3363
3364 case "$d_oldpthreads" in
3365 '')     : Configure tests would be welcome here.  For now, assume undef.
3366         val="$undef" ;;
3367 *)      val="$d_oldpthreads" ;;
3368 esac
3369 set d_oldpthreads
3370 eval $setvar
3371
3372
3373 case "$usethreads" in
3374 "$define"|true|[yY]*)
3375 : Look for a hint-file generated 'call-back-unit'.  If the
3376 : user has specified that a threading perl is to be built,
3377 : we may need to set or change some other defaults.
3378         if $test -f usethreads.cbu; then
3379                 echo "Your platform has some specific hints for threaded builds, using them..."
3380                 . ./usethreads.cbu
3381         else
3382                 $cat <<EOM
3383 (Your platform doesn't have any specific hints for threaded builds.
3384  Assuming POSIX threads, then.)
3385 EOM
3386         fi
3387         ;;
3388 esac
3389
3390 cat <<EOM
3391
3392 Perl can be built so that multiple Perl interpreters can coexist
3393 within the same Perl executable.
3394 EOM
3395
3396 case "$useithreads" in
3397 $define)
3398         cat <<EOM
3399 This multiple interpreter support is required for interpreter-based threads.
3400 EOM
3401         val="$define"
3402         ;;
3403 *)      case "$usemultiplicity" in
3404         $define|true|[yY]*)     dflt='y';;
3405         *) dflt='n';;
3406         esac
3407         echo " "
3408         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3409         rp='Build Perl for multiplicity?'
3410         . ./myread
3411         case "$ans" in
3412         y|Y)    val="$define" ;;
3413         *)      val="$undef" ;;
3414         esac
3415         ;;
3416 esac
3417 set usemultiplicity
3418 eval $setvar
3419
3420
3421 case "$usemorebits" in
3422 "$define"|true|[yY]*)
3423         use64bitint="$define"
3424         uselongdouble="$define"
3425         usemorebits="$define"
3426         ;;
3427 *)      usemorebits="$undef"
3428         ;;
3429 esac
3430
3431 : make some quick guesses about what we are up against
3432 echo " "
3433 $echo $n "Hmm...  $c"
3434 echo exit 1 >bsd
3435 echo exit 1 >usg
3436 echo exit 1 >v7
3437 echo exit 1 >osf1
3438 echo exit 1 >eunice
3439 echo exit 1 >xenix
3440 echo exit 1 >venix
3441 echo exit 1 >os2
3442 d_bsd="$undef"
3443 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3444 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3445 then
3446         echo "Looks kind of like an OSF/1 system, but we'll see..."
3447         echo exit 0 >osf1
3448 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3449         xxx=`./loc addbib blurfl $pth`
3450         if $test -f $xxx; then
3451         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3452                 echo exit 0 >bsd
3453                 echo exit 0 >usg
3454         else
3455                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3456                         echo "Looks kind of like an extended USG system, but we'll see..."
3457                 else
3458                         echo "Looks kind of like a USG system, but we'll see..."
3459                 fi
3460                 echo exit 0 >usg
3461         fi
3462 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3463         echo "Looks kind of like a BSD system, but we'll see..."
3464         d_bsd="$define"
3465         echo exit 0 >bsd
3466 else
3467         echo "Looks kind of like a Version 7 system, but we'll see..."
3468         echo exit 0 >v7
3469 fi
3470 case "$eunicefix" in
3471 *unixtovms*)
3472         $cat <<'EOI'
3473 There is, however, a strange, musty smell in the air that reminds me of
3474 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3475 EOI
3476         echo exit 0 >eunice
3477         d_eunice="$define"
3478 : it so happens the Eunice I know will not run shell scripts in Unix format
3479         ;;
3480 *)
3481         echo " "
3482         echo "Congratulations.  You aren't running Eunice."
3483         d_eunice="$undef"
3484         ;;
3485 esac
3486 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3487 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3488 : semicolon as a patch separator
3489 case "$p_" in
3490 :) ;;
3491 *)
3492         $cat <<'EOI'
3493 I have the feeling something is not exactly right, however...don't tell me...
3494 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3495 (Or you may be running DOS with DJGPP.)
3496 EOI
3497         echo exit 0 >os2
3498         ;;
3499 esac
3500 if test -f /xenix; then
3501         echo "Actually, this looks more like a XENIX system..."
3502         echo exit 0 >xenix
3503         d_xenix="$define"
3504 else
3505         echo " "
3506         echo "It's not Xenix..."
3507         d_xenix="$undef"
3508 fi
3509 chmod +x xenix
3510 $eunicefix xenix
3511 if test -f /venix; then
3512         echo "Actually, this looks more like a VENIX system..."
3513         echo exit 0 >venix
3514 else
3515         echo " "
3516         if ./xenix; then
3517                 : null
3518         else
3519                 echo "Nor is it Venix..."
3520         fi
3521 fi
3522 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3523 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3524 $rm -f foo
3525
3526 case "$cc" in
3527 '') dflt=cc;;
3528 *) dflt="$cc";;
3529 esac
3530 rp="Use which C compiler?"
3531 . ./myread
3532 cc="$ans"
3533 : Look for a hint-file generated 'call-back-unit'.  Now that the
3534 : user has specified the compiler, we may need to set or change some
3535 : other defaults.
3536 if $test -f cc.cbu; then
3537     . ./cc.cbu
3538 fi
3539 . ./checkcc
3540
3541 echo " "
3542 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3543 $cat >try.c <<EOM
3544 #include <stdio.h>
3545 int main() {
3546 #ifdef __GNUC__
3547 #ifdef __VERSION__
3548         printf("%s\n", __VERSION__);
3549 #else
3550         printf("%s\n", "1");
3551 #endif
3552 #endif
3553         exit(0);
3554 }
3555 EOM
3556 if $cc -o try $ccflags $ldflags try.c; then
3557         gccversion=`$run ./try`
3558         case "$gccversion" in
3559         '') echo "You are not using GNU cc." ;;
3560         *)  echo "You are using GNU cc $gccversion."
3561             ccname=gcc  
3562             ;;
3563         esac
3564 else
3565         echo " "
3566         echo "*** WHOA THERE!!! ***" >&4
3567         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3568         case "$knowitall" in
3569         '')
3570         echo "    You'd better start hunting for one and let me know about it." >&4
3571                 exit 1
3572                 ;;
3573         esac
3574 fi
3575 $rm -f try try.*
3576 case "$gccversion" in
3577 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3578 esac
3579 case "$gccversion" in
3580 '') gccosandvers='' ;;
3581 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3582    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3583    gccshortvers=''
3584    case "$gccosandvers" in
3585    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3586    $osname$osvers) ;; # looking good
3587    $osname*) cat <<EOM >&4
3588
3589 *** WHOA THERE!!! ***
3590
3591     Your gcc has not been compiled for the exact release of
3592     your operating system ($gccosandvers versus $osname$osvers).
3593
3594     In general it is a good idea to keep gcc synchronized with
3595     the operating system because otherwise serious problems
3596     may ensue when trying to compile software, like Perl.
3597
3598     I'm trying to be optimistic here, though, and will continue.
3599     If later during the configuration and build icky compilation
3600     problems appear (headerfile conflicts being the most common
3601     manifestation), I suggest reinstalling the gcc to match
3602     your operating system release.
3603
3604 EOM
3605       ;;
3606    *) gccosandvers='' ;; # failed to parse, better be silent
3607    esac
3608    ;;
3609 esac
3610 case "$ccname" in
3611 '') ccname="$cc" ;;
3612 esac
3613
3614
3615 : decide how portable to be.  Allow command line overrides.
3616 case "$d_portable" in
3617 "$undef") ;;
3618 *)      d_portable="$define" ;;
3619 esac
3620
3621 : set up shell script to do ~ expansion
3622 cat >filexp <<EOSS
3623 $startsh
3624 : expand filename
3625 case "\$1" in
3626  ~/*|~)
3627         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3628         ;;
3629  ~*)
3630         if $test -f /bin/csh; then
3631                 /bin/csh -f -c "glob \$1"
3632                 failed=\$?
3633                 echo ""
3634                 exit \$failed
3635         else
3636                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3637                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3638                 if $test ! -d "\$dir"; then
3639                         me=\`basename \$0\`
3640                         echo "\$me: can't locate home directory for: \$name" >&2
3641                         exit 1
3642                 fi
3643                 case "\$1" in
3644                 */*)
3645                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3646                         ;;
3647                 *)
3648                         echo \$dir
3649                         ;;
3650                 esac
3651         fi
3652         ;;
3653 *)
3654         echo \$1
3655         ;;
3656 esac
3657 EOSS
3658 chmod +x filexp
3659 $eunicefix filexp
3660
3661 : now set up to get a file name
3662 cat <<EOS >getfile
3663 $startsh
3664 EOS
3665 cat <<'EOSC' >>getfile
3666 tilde=''
3667 fullpath=''
3668 already=''
3669 skip=''
3670 none_ok=''
3671 exp_file=''
3672 nopath_ok=''
3673 orig_rp="$rp"
3674 orig_dflt="$dflt"
3675 case "$gfpth" in
3676 '') gfpth='.' ;;
3677 esac
3678
3679 case "$fn" in
3680 *\(*)
3681         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3682         fn=`echo $fn | sed 's/(.*)//'`
3683         ;;
3684 esac
3685
3686 case "$fn" in
3687 *:*)
3688         loc_file=`expr $fn : '.*:\(.*\)'`
3689         fn=`expr $fn : '\(.*\):.*'`
3690         ;;
3691 esac
3692
3693 case "$fn" in
3694 *~*) tilde=true;;
3695 esac
3696 case "$fn" in
3697 */*) fullpath=true;;
3698 esac
3699 case "$fn" in
3700 *+*) skip=true;;
3701 esac
3702 case "$fn" in
3703 *n*) none_ok=true;;
3704 esac
3705 case "$fn" in
3706 *e*) exp_file=true;;
3707 esac
3708 case "$fn" in
3709 *p*) nopath_ok=true;;
3710 esac
3711
3712 case "$fn" in
3713 *f*) type='File';;
3714 *d*) type='Directory';;
3715 *l*) type='Locate';;
3716 esac
3717
3718 what="$type"
3719 case "$what" in
3720 Locate) what='File';;
3721 esac
3722
3723 case "$exp_file" in
3724 '')
3725         case "$d_portable" in
3726         "$define") ;;
3727         *) exp_file=true;;
3728         esac
3729         ;;
3730 esac
3731
3732 cd ..
3733 while test "$type"; do
3734         redo=''
3735         rp="$orig_rp"
3736         dflt="$orig_dflt"
3737         case "$tilde" in
3738         true) rp="$rp (~name ok)";;
3739         esac
3740         . UU/myread
3741         if test -f UU/getfile.ok && \
3742                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3743         then
3744                 value="$ans"
3745                 ansexp="$ans"
3746                 break
3747         fi
3748         case "$ans" in
3749         none)
3750                 value=''
3751                 ansexp=''
3752                 case "$none_ok" in
3753                 true) type='';;
3754                 esac
3755                 ;;
3756         *)
3757                 case "$tilde" in
3758                 '') value="$ans"
3759                         ansexp="$ans";;
3760                 *)
3761                         value=`UU/filexp $ans`
3762                         case $? in
3763                         0)
3764                                 if test "$ans" != "$value"; then
3765                                         echo "(That expands to $value on this system.)"
3766                                 fi
3767                                 ;;
3768                         *) value="$ans";;
3769                         esac
3770                         ansexp="$value"
3771                         case "$exp_file" in
3772                         '') value="$ans";;
3773                         esac
3774                         ;;
3775                 esac
3776                 case "$fullpath" in
3777                 true)
3778                         case "$ansexp" in
3779                         /*) value="$ansexp" ;;
3780                         [a-zA-Z]:/*) value="$ansexp" ;;
3781                         *)
3782                                 redo=true
3783                                 case "$already" in
3784                                 true)
3785                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3786                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3787                                         ;;
3788                                 *)
3789                                 echo "Please give a full path name, starting with slash." >&4
3790                                         case "$tilde" in
3791                                         true)
3792                                 echo "Note that using ~name is ok provided it expands well." >&4
3793                                                 already=true
3794                                                 ;;
3795                                         esac
3796                                 esac
3797                                 ;;
3798                         esac
3799                         ;;
3800                 esac
3801                 case "$redo" in
3802                 '')
3803                         case "$type" in
3804                         File)
3805                                 for fp in $gfpth; do
3806                                         if test "X$fp" = X.; then
3807                                             pf="$ansexp"
3808                                         else    
3809                                             pf="$fp/$ansexp"
3810                                         fi
3811                                         if test -f "$pf"; then
3812                                                 type=''
3813                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3814                                         then
3815                                                 echo "($value is not a plain file, but that's ok.)"
3816                                                 type=''
3817                                         fi
3818                                         if test X"$type" = X; then
3819                                             value="$pf"
3820                                             break
3821                                         fi
3822                                 done
3823                                 ;;
3824                         Directory)
3825                                 for fp in $gfpth; do
3826                                         if test "X$fp" = X.; then
3827                                             dir="$ans"
3828                                             direxp="$ansexp"
3829                                         else    
3830                                             dir="$fp/$ansexp"
3831                                             direxp="$fp/$ansexp"
3832                                         fi
3833                                         if test -d "$direxp"; then
3834                                                 type=''
3835                                                 value="$dir"
3836                                                 break
3837                                         fi
3838                                 done
3839                                 ;;
3840                         Locate)
3841                                 if test -d "$ansexp"; then
3842                                         echo "(Looking for $loc_file in directory $value.)"
3843                                         value="$value/$loc_file"
3844                                         ansexp="$ansexp/$loc_file"
3845                                 fi
3846                                 if test -f "$ansexp"; then
3847                                         type=''
3848                                 fi
3849                                 case "$nopath_ok" in
3850                                 true)   case "$value" in
3851                                         */*) ;;
3852                                         *)      echo "Assuming $value will be in people's path."
3853                                                 type=''
3854                                                 ;;
3855                                         esac
3856                                         ;;
3857                                 esac
3858                                 ;;
3859                         esac
3860
3861                         case "$skip" in
3862                         true) type='';
3863                         esac
3864
3865                         case "$type" in
3866                         '') ;;
3867                         *)
3868                                 if test "$fastread" = yes; then
3869                                         dflt=y
3870                                 else
3871                                         dflt=n
3872                                 fi
3873                                 rp="$what $value doesn't exist.  Use that name anyway?"
3874                                 . UU/myread
3875                                 dflt=''
3876                                 case "$ans" in
3877                                 y*) type='';;
3878                                 *) echo " ";;
3879                                 esac
3880                                 ;;
3881                         esac
3882                         ;;
3883                 esac
3884                 ;;
3885         esac
3886 done
3887 cd UU
3888 ans="$value"
3889 rp="$orig_rp"
3890 dflt="$orig_dflt"
3891 rm -f getfile.ok
3892 test "X$gfpthkeep" != Xy && gfpth=""
3893 EOSC
3894
3895 : What should the include directory be ?
3896 echo " "
3897 $echo $n "Hmm...  $c"
3898 dflt='/usr/include'
3899 incpath=''
3900 mips_type=''
3901 if $test -f /bin/mips && /bin/mips; then
3902         echo "Looks like a MIPS system..."
3903         $cat >usr.c <<'EOCP'
3904 #ifdef SYSTYPE_BSD43
3905 /bsd43
3906 #endif
3907 EOCP
3908         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3909                 dflt='/bsd43/usr/include'
3910                 incpath='/bsd43'
3911                 mips_type='BSD 4.3'
3912         else
3913                 mips_type='System V'
3914         fi
3915         $rm -f usr.c usr.out
3916         echo "and you're compiling with the $mips_type compiler and libraries."
3917         xxx_prompt=y
3918         echo "exit 0" >mips
3919 else
3920         echo "Doesn't look like a MIPS system."
3921         xxx_prompt=n
3922         echo "exit 1" >mips
3923 fi
3924 chmod +x mips
3925 $eunicefix mips
3926 case "$usrinc" in
3927 '') ;;
3928 *) dflt="$usrinc";;
3929 esac
3930 case "$xxx_prompt" in
3931 y)      fn=d/
3932         echo " "
3933         rp='Where are the include files you want to use?'
3934         . ./getfile
3935         usrinc="$ans"
3936         ;;
3937 *)      usrinc="$dflt"
3938         ;;
3939 esac
3940
3941 : see how we invoke the C preprocessor
3942 echo " "
3943 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3944 cat <<'EOT' >testcpp.c
3945 #define ABC abc
3946 #define XYZ xyz
3947 ABC.XYZ
3948 EOT
3949 cd ..
3950 if test ! -f cppstdin; then
3951         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3952                 # AIX cc -E doesn't show the absolute headerfile
3953                 # locations but we'll cheat by using the -M flag.
3954                 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
3955         else
3956                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3957         fi
3958 else
3959         echo "Keeping your $hint cppstdin wrapper."
3960 fi
3961 chmod 755 cppstdin
3962 wrapper=`pwd`/cppstdin
3963 ok='false'
3964 cd UU
3965
3966 if $test "X$cppstdin" != "X" && \
3967         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3968         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3969 then
3970         echo "You used to use $cppstdin $cppminus so we'll use that again."
3971         case "$cpprun" in
3972         '') echo "But let's see if we can live without a wrapper..." ;;
3973         *)
3974                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3975                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3976                 then
3977                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3978                         ok='true'
3979                 else
3980                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3981                 fi
3982                 ;;
3983         esac
3984 else
3985         case "$cppstdin" in
3986         '') ;;
3987         *)
3988                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3989                 ;;
3990         esac
3991 fi
3992
3993 if $ok; then
3994         : nothing
3995 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3996         $cc -E <testcpp.c >testcpp.out 2>&1; \
3997         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3998         echo "Yup, it does."
3999         x_cpp="$cc -E"
4000         x_minus='';
4001 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4002         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4003         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4004         echo "Yup, it does."
4005         x_cpp="$cc -E"
4006         x_minus='-';
4007 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4008         $cc -P <testcpp.c >testcpp.out 2>&1; \
4009         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4010         echo "Yipee, that works!"
4011         x_cpp="$cc -P"
4012         x_minus='';
4013 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4014         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4015         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4016         echo "At long last!"
4017         x_cpp="$cc -P"
4018         x_minus='-';
4019 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4020         $cpp <testcpp.c >testcpp.out 2>&1; \
4021         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4022         echo "It works!"
4023         x_cpp="$cpp"
4024         x_minus='';
4025 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4026         $cpp - <testcpp.c >testcpp.out 2>&1; \
4027         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4028         echo "Hooray, it works!  I was beginning to wonder."
4029         x_cpp="$cpp"
4030         x_minus='-';
4031 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4032         $wrapper <testcpp.c >testcpp.out 2>&1; \
4033         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4034         x_cpp="$wrapper"
4035         x_minus=''
4036         echo "Eureka!"
4037 else
4038         dflt=''
4039         rp="No dice.  I can't find a C preprocessor.  Name one:"
4040         . ./myread
4041         x_cpp="$ans"
4042         x_minus=''
4043         $x_cpp <testcpp.c >testcpp.out 2>&1
4044         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4045                 echo "OK, that will do." >&4
4046         else
4047 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4048                 exit 1
4049         fi
4050 fi
4051
4052 case "$ok" in
4053 false)
4054         cppstdin="$x_cpp"
4055         cppminus="$x_minus"
4056         cpprun="$x_cpp"
4057         cpplast="$x_minus"
4058         set X $x_cpp
4059         shift
4060         case "$1" in
4061         "$cpp")
4062                 echo "Perhaps can we force $cc -E using a wrapper..."
4063                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4064                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4065                 then
4066                         echo "Yup, we can."
4067                         cppstdin="$wrapper"
4068                         cppminus='';
4069                 else
4070                         echo "Nope, we'll have to live without it..."
4071                 fi
4072                 ;;
4073         esac
4074         case "$cpprun" in
4075         "$wrapper")
4076                 cpprun=''
4077                 cpplast=''
4078                 ;;
4079         esac
4080         ;;
4081 esac
4082
4083 case "$cppstdin" in
4084 "$wrapper"|'cppstdin') ;;
4085 *) $rm -f $wrapper;;
4086 esac
4087 $rm -f testcpp.c testcpp.out
4088
4089 : Set private lib path
4090 case "$plibpth" in
4091 '') if ./mips; then
4092                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4093         fi;;
4094 esac
4095 case "$libpth" in
4096 ' ') dlist='';;
4097 '') dlist="$loclibpth $plibpth $glibpth";;
4098 *) dlist="$libpth";;
4099 esac
4100
4101 : Now check and see which directories actually exist, avoiding duplicates
4102 libpth=''
4103 for xxx in $dlist
4104 do
4105     if $test -d $xxx; then
4106                 case " $libpth " in
4107                 *" $xxx "*) ;;
4108                 *) libpth="$libpth $xxx";;
4109                 esac
4110     fi
4111 done
4112 $cat <<'EOM'
4113
4114 Some systems have incompatible or broken versions of libraries.  Among
4115 the directories listed in the question below, please remove any you
4116 know not to be holding relevant libraries, and add any that are needed.
4117 Say "none" for none.
4118
4119 EOM
4120 case "$libpth" in
4121 '') dflt='none';;
4122 *)
4123         set X $libpth
4124         shift
4125         dflt=${1+"$@"}
4126         ;;
4127 esac
4128 rp="Directories to use for library searches?"
4129 . ./myread
4130 case "$ans" in
4131 none) libpth=' ';;
4132 *) libpth="$ans";;
4133 esac
4134
4135 : compute shared library extension
4136 case "$so" in
4137 '')
4138         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4139                 dflt='sl'
4140         else
4141                 dflt='so'
4142         fi
4143         ;;
4144 *) dflt="$so";;
4145 esac
4146 $cat <<EOM
4147
4148 On some systems, shared libraries may be available.  Answer 'none' if
4149 you want to suppress searching of shared libraries for the remainder
4150 of this configuration.
4151
4152 EOM
4153 rp='What is the file extension used for shared libraries?'
4154 . ./myread
4155 so="$ans"
4156
4157 : Define several unixisms.
4158 : Hints files or command line option can be used to override them.
4159 : The convoluted testing is in case hints files set either the old
4160 : or the new name.
4161 case "$_exe" in
4162 '')     case "$exe_ext" in
4163         '')     ;;
4164         *)      _exe="$exe_ext" ;;
4165         esac
4166         ;;
4167 esac
4168 case "$_a" in
4169 '')     case "$lib_ext" in
4170     '') _a='.a';;
4171         *)      _a="$lib_ext" ;;
4172         esac
4173         ;;
4174 esac
4175 case "$_o" in
4176 '') case "$obj_ext" in
4177         '')     _o='.o';;
4178         *)      _o="$obj_ext";;
4179         esac
4180         ;;
4181 esac
4182 case "$p_" in
4183 '') case "$path_sep" in
4184         '')     p_=':';;
4185         *)      p_="$path_sep";;
4186         esac
4187         ;;
4188 esac
4189 exe_ext=$_exe
4190 lib_ext=$_a
4191 obj_ext=$_o
4192 path_sep=$p_
4193
4194 : Which makefile gets called first.  This is used by make depend.
4195 case "$firstmakefile" in
4196 '') firstmakefile='makefile';;
4197 esac
4198
4199 case "$usesocks" in
4200 $define|true|[yY]*)     dflt='y';;
4201 *) dflt='n';;
4202 esac
4203 cat <<EOM
4204
4205 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4206 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4207 to use the PerlIO abstraction layer, this will be implicitly selected.
4208
4209 If this doesn't make any sense to you, just accept the default '$dflt'.
4210 EOM
4211 rp='Build Perl for SOCKS?'
4212 . ./myread
4213 case "$ans" in
4214 y|Y)    val="$define" ;;     
4215 *)      val="$undef" ;;
4216 esac
4217 set usesocks
4218 eval $setvar
4219
4220 case "$usesocks" in
4221 $define|true|[yY]*) useperlio="$define";;
4222 esac
4223
4224 : Looking for optional libraries
4225 echo " "
4226 echo "Checking for optional libraries..." >&4
4227 case "$libs" in
4228 ' '|'') dflt='';;
4229 *) dflt="$libs";;
4230 esac
4231 case "$libswanted" in
4232 '') libswanted='c_s';;
4233 esac
4234 case "$usesocks" in
4235 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4236 esac
4237 libsfound=''
4238 libsfiles=''
4239 libsdirs=''
4240 libspath=''
4241 for thisdir in $libpth $xlibpth; do
4242   test -d $thisdir && libspath="$libspath $thisdir"
4243 done
4244 for thislib in $libswanted; do
4245         for thisdir in $libspath; do
4246             xxx=''
4247             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4248                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4249                 $test -f "$xxx" && eval $libscheck
4250                 $test -f "$xxx" && libstyle=shared
4251             fi
4252             if test ! -f "$xxx"; then
4253                 xxx=$thisdir/lib$thislib.$so
4254                 $test -f "$xxx" && eval $libscheck
4255                 $test -f "$xxx" && libstyle=shared
4256             fi  
4257             if test ! -f "$xxx"; then
4258                 xxx=$thisdir/lib$thislib$_a
4259                 $test -f "$xxx" && eval $libscheck
4260                 $test -f "$xxx" && libstyle=static
4261             fi
4262             if test ! -f "$xxx"; then
4263                 xxx=$thisdir/$thislib$_a
4264                 $test -f "$xxx" && eval $libscheck
4265                 $test -f "$xxx" && libstyle=static
4266             fi
4267             if test ! -f "$xxx"; then
4268                 xxx=$thisdir/lib${thislib}_s$_a
4269                 $test -f "$xxx" && eval $libscheck
4270                 $test -f "$xxx" && libstyle=static
4271                 $test -f "$xxx" && thislib=${thislib}_s
4272             fi
4273             if test ! -f "$xxx"; then
4274                 xxx=$thisdir/Slib$thislib$_a
4275                 $test -f "$xxx" && eval $libscheck
4276                 $test -f "$xxx" && libstyle=static
4277             fi
4278             if $test -f "$xxx"; then
4279                 case "$libstyle" in
4280                 shared) echo "Found -l$thislib (shared)." ;;
4281                 static) echo "Found -l$thislib." ;;
4282                 *)      echo "Found -l$thislib ($libstyle)." ;;
4283                 esac
4284                 case " $dflt " in
4285                 *"-l$thislib "*);;
4286                 *) dflt="$dflt -l$thislib"
4287                    libsfound="$libsfound $xxx"
4288                    yyy=`basename $xxx`
4289                    libsfiles="$libsfiles $yyy"
4290                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4291                    case " $libsdirs " in
4292                    *" $yyy "*) ;;
4293                    *) libsdirs="$libsdirs $yyy" ;;
4294                    esac
4295                    ;;
4296                 esac
4297                 break
4298             fi  
4299         done
4300         if $test ! -f "$xxx"; then
4301             echo "No -l$thislib."
4302         fi
4303 done
4304 set X $dflt
4305 shift
4306 dflt="$*"
4307 case "$libs" in
4308 '') dflt="$dflt";;
4309 *) dflt="$libs";;
4310 esac
4311 case "$dflt" in
4312 ' '|'') dflt='none';;
4313 esac
4314
4315 $cat <<EOM
4316
4317 In order to compile $package on your machine, a number of libraries
4318 are usually needed.  Include any other special libraries here as well.
4319 Say "none" for none.  The default list is almost always right.
4320 EOM
4321
4322 echo " "
4323 rp="What libraries to use?"
4324 . ./myread
4325 case "$ans" in
4326 none) libs=' ';;
4327 *) libs="$ans";;
4328 esac
4329
4330 : determine optimization, if desired, or use for debug flag also
4331 case "$optimize" in
4332 ' '|$undef) dflt='none';;
4333 '') dflt='-O';;
4334 *) dflt="$optimize";;
4335 esac
4336 $cat <<EOH
4337
4338 By default, $package compiles with the -O flag to use the optimizer.
4339 Alternately, you might want to use the symbolic debugger, which uses
4340 the -g flag (on traditional Unix systems).  Either flag can be
4341 specified here.  To use neither flag, specify the word "none".
4342
4343 EOH
4344 rp="What optimizer/debugger flag should be used?"
4345 . ./myread
4346 optimize="$ans"
4347 case "$optimize" in
4348 'none') optimize=" ";;
4349 esac
4350
4351 dflt=''
4352 : We will not override a previous value, but we might want to
4353 : augment a hint file
4354 case "$hint" in
4355 default|recommended)
4356         case "$gccversion" in
4357         1*) dflt='-fpcc-struct-return' ;;
4358         esac
4359         case "$optimize" in
4360         *-g*) dflt="$dflt -DDEBUGGING";;
4361         esac
4362         case "$gccversion" in
4363         2*) if test -d /etc/conf/kconfig.d &&
4364                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4365                 then
4366                         dflt="$dflt -posix"
4367                 fi
4368                 ;;
4369         esac
4370         case "$gccversion" in
4371         1*) ;;
4372         2.[0-8]*) ;;
4373         ?*)     echo " "
4374                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4375                 echo 'int main(void) { return 0; }' > gcctest.c
4376                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4377                         echo "Yes, it does." 2>&1
4378                         case "$ccflags" in
4379                         *strict-aliasing*) 
4380                                 echo "Leaving current flags $ccflags alone." 2>&1
4381                                 ;;
4382                         *) dflt="$dflt -fno-strict-aliasing" ;;
4383                         esac
4384                 else
4385                         echo "Nope, it doesn't, but that's ok." 2>&1
4386                 fi
4387                 ;;
4388         esac
4389         ;;
4390 esac
4391
4392 case "$mips_type" in
4393 *BSD*|'') inclwanted="$locincpth $usrinc";;
4394 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4395 esac
4396 for thisincl in $inclwanted; do
4397         if $test -d $thisincl; then
4398                 if $test x$thisincl != x$usrinc; then
4399                         case "$dflt" in
4400                         *" -I$thisincl "*);;
4401                         *) dflt="$dflt -I$thisincl ";;
4402                         esac
4403                 fi
4404         fi
4405 done
4406
4407 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4408         xxx=true;
4409 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4410         xxx=true;
4411 else
4412         xxx=false;
4413 fi;
4414 if $xxx; then
4415         case "$dflt" in
4416         *$2*);;
4417         *) dflt="$dflt -D$2";;
4418         esac;
4419 fi'
4420
4421 set signal.h LANGUAGE_C; eval $inctest
4422
4423 case "$usesocks" in
4424 $define)
4425         ccflags="$ccflags -DSOCKS"
4426         ;;
4427 esac
4428
4429 case "$hint" in
4430 default|recommended) dflt="$ccflags $dflt" ;;
4431 *) dflt="$ccflags";;
4432 esac
4433
4434 case "$dflt" in
4435 ''|' ') dflt=none;;
4436 esac
4437
4438 $cat <<EOH
4439
4440 Your C compiler may want other flags.  For this question you should include
4441 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4442 but you should NOT include libraries or ld flags like -lwhatever.  If you
4443 want $package to honor its debug switch, you should include -DDEBUGGING here.
4444 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4445
4446 To use no flags, specify the word "none".
4447
4448 EOH
4449 set X $dflt
4450 shift
4451 dflt=${1+"$@"}
4452 rp="Any additional cc flags?"
4453 . ./myread
4454 case "$ans" in
4455 none) ccflags='';;
4456 *) ccflags="$ans";;
4457 esac
4458
4459 : the following weeds options from ccflags that are of no interest to cpp
4460 case "$cppflags" in
4461 '') cppflags="$ccflags" ;;
4462 *)  cppflags="$cppflags $ccflags" ;;
4463 esac
4464 case "$gccversion" in
4465 1*) cppflags="$cppflags -D__GNUC__"
4466 esac
4467 case "$mips_type" in
4468 '');;
4469 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4470 esac
4471 case "$cppflags" in
4472 '');;
4473 *)
4474         echo " "
4475         echo "Let me guess what the preprocessor flags are..." >&4
4476         set X $cppflags
4477         shift
4478         cppflags=''
4479         $cat >cpp.c <<'EOM'
4480 #define BLURFL foo
4481
4482 BLURFL xx LFRULB
4483 EOM
4484         previous=''
4485         for flag in $*
4486         do
4487                 case "$flag" in
4488                 -*) ftry="$flag";;
4489                 *) ftry="$previous $flag";;
4490                 esac
4491                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4492                         >cpp1.out 2>/dev/null && \
4493                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4494                         >cpp2.out 2>/dev/null && \
4495                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4496                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4497                 then
4498                         cppflags="$cppflags $ftry"
4499                         previous=''
4500                 else
4501                         previous="$flag"
4502                 fi
4503         done
4504         set X $cppflags
4505         shift
4506         cppflags=${1+"$@"}
4507         case "$cppflags" in
4508         *-*)  echo "They appear to be: $cppflags";;
4509         esac
4510         $rm -f cpp.c cpp?.out
4511         ;;
4512 esac
4513
4514 : flags used in final linking phase
4515 case "$ldflags" in
4516 '') if ./venix; then
4517                 dflt='-i -z'
4518         else
4519                 dflt=''
4520         fi
4521         case "$ccflags" in
4522         *-posix*) dflt="$dflt -posix" ;;
4523         esac
4524         ;;
4525 *) dflt="$ldflags";;
4526 esac
4527
4528 : Try to guess additional flags to pick up local libraries.
4529 for thislibdir in $libpth; do
4530         case " $loclibpth " in
4531         *" $thislibdir "*)
4532                 case "$dflt " in 
4533                 *"-L$thislibdir "*) ;;
4534                 *)  dflt="$dflt -L$thislibdir" ;;
4535                 esac
4536                 ;;
4537         esac
4538 done
4539
4540 case "$dflt" in
4541 '') dflt='none' ;;
4542 esac
4543
4544 $cat <<EOH
4545
4546 Your C linker may need flags.  For this question you should
4547 include -L/whatever and any other flags used by the C linker, but you
4548 should NOT include libraries like -lwhatever.
4549
4550 Make sure you include the appropriate -L/path flags if your C linker
4551 does not normally search all of the directories you specified above,
4552 namely
4553         $libpth
4554 To use no flags, specify the word "none".
4555
4556 EOH
4557
4558 rp="Any additional ld flags (NOT including libraries)?"
4559 . ./myread
4560 case "$ans" in
4561 none) ldflags='';;
4562 *) ldflags="$ans";;
4563 esac
4564 rmlist="$rmlist pdp11"
4565
4566 : coherency check
4567 echo " "
4568 echo "Checking your choice of C compiler and flags for coherency..." >&4
4569 $cat > try.c <<'EOF'
4570 #include <stdio.h>
4571 int main() { printf("Ok\n"); exit(0); }
4572 EOF
4573 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4574 shift
4575 $cat >try.msg <<'EOM'
4576 I've tried to compile and run the following simple program:
4577
4578 EOM
4579 $cat try.c >> try.msg
4580
4581 $cat >> try.msg <<EOM
4582
4583 I used the command:
4584
4585         $*
4586         $run ./try
4587
4588 and I got the following output:
4589
4590 EOM
4591 dflt=y
4592 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4593         if $sh -c "$run ./try" >>try.msg 2>&1; then
4594                 xxx=`$run ./try`
4595                 case "$xxx" in
4596                 "Ok") dflt=n ;;
4597                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4598                         case " $libs " in
4599                         *" -lsfio "*)
4600                                 cat >> try.msg <<'EOQS'
4601 If $libs contains -lsfio, and sfio is mis-configured, then it
4602 sometimes (apparently) runs and exits with a 0 status, but with no
4603 output!  It may have to do with sfio's use of _exit vs. exit.
4604
4605 EOQS
4606                                 rp="You have a big problem.  Shall I abort Configure"
4607                                 dflt=y
4608                                 ;;
4609                         esac
4610                         ;;
4611                 esac
4612         else
4613                 echo "The program compiled OK, but exited with status $?." >>try.msg
4614                 rp="You have a problem.  Shall I abort Configure"
4615                 dflt=y
4616         fi
4617 else
4618         echo "I can't compile the test program." >>try.msg
4619         rp="You have a BIG problem.  Shall I abort Configure"
4620         dflt=y
4621 fi
4622 case "$dflt" in
4623 y)
4624         $cat try.msg >&4
4625         case "$knowitall" in
4626         '')
4627                 echo "(The supplied flags or libraries might be incorrect.)"
4628                 ;;
4629         *) dflt=n;;
4630         esac
4631         echo " "
4632         . ./myread
4633         case "$ans" in
4634         n*|N*) ;;
4635         *)      echo "Ok.  Stopping Configure." >&4
4636                 exit 1
4637                 ;;
4638         esac
4639         ;;
4640 n) echo "OK, that should do.";;
4641 esac
4642 $rm -f try try.* core
4643
4644 : define a shorthand compile call
4645 compile='
4646 mc_file=$1;
4647 shift;
4648 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4649 : define a shorthand compile call for compilations that should be ok.
4650 compile_ok='
4651 mc_file=$1;
4652 shift;
4653 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4654
4655 : check for lengths of integral types
4656 echo " "
4657 case "$intsize" in
4658 '')
4659         echo "Checking to see how big your integers are..." >&4
4660         $cat >try.c <<'EOCP'
4661 #include <stdio.h>
4662 int main()
4663 {
4664         printf("intsize=%d;\n", (int)sizeof(int));
4665         printf("longsize=%d;\n", (int)sizeof(long));
4666         printf("shortsize=%d;\n", (int)sizeof(short));
4667         exit(0);
4668 }
4669 EOCP
4670         set try
4671         if eval $compile_ok && $run ./try > /dev/null; then
4672                 eval `$run ./try`
4673                 echo "Your integers are $intsize bytes long."
4674                 echo "Your long integers are $longsize bytes long."
4675                 echo "Your short integers are $shortsize bytes long."
4676         else
4677                 $cat >&4 <<EOM
4678 !
4679 Help! I can't compile and run the intsize test program: please enlighten me!
4680 (This is probably a misconfiguration in your system or libraries, and
4681 you really ought to fix it.  Still, I'll try anyway.)
4682 !
4683 EOM
4684                 dflt=4
4685                 rp="What is the size of an integer (in bytes)?"
4686                 . ./myread
4687                 intsize="$ans"
4688                 dflt=$intsize
4689                 rp="What is the size of a long integer (in bytes)?"
4690                 . ./myread
4691                 longsize="$ans"
4692                 dflt=2
4693                 rp="What is the size of a short integer (in bytes)?"
4694                 . ./myread
4695                 shortsize="$ans"
4696         fi
4697         ;;
4698 esac
4699 $rm -f try try.*
4700
4701 : check for void type
4702 echo " "
4703 echo "Checking to see how well your C compiler groks the void type..." >&4
4704 case "$voidflags" in
4705 '')
4706         $cat >try.c <<'EOCP'
4707 #if TRY & 1
4708 void sub() {
4709 #else
4710 sub() {
4711 #endif
4712         extern void moo();      /* function returning void */
4713         void (*goo)();          /* ptr to func returning void */
4714 #if TRY & 8
4715         void *hue;              /* generic ptr */
4716 #endif
4717 #if TRY & 2
4718         void (*foo[10])();
4719 #endif
4720
4721 #if TRY & 4
4722         if(goo == moo) {
4723                 exit(0);
4724         }
4725 #endif
4726         exit(0);
4727 }
4728 int main() { sub(); }
4729 EOCP
4730         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4731                 voidflags=$defvoidused
4732         echo "Good.  It appears to support void to the level $package wants.">&4
4733                 if $contains warning .out >/dev/null 2>&1; then
4734                         echo "However, you might get some warnings that look like this:"
4735                         $cat .out
4736                 fi
4737         else
4738 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4739                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4740                         echo "It supports 1..."
4741                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4742                                 echo "It also supports 2..."
4743                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4744                                         voidflags=7
4745                                         echo "And it supports 4 but not 8 definitely."
4746                                 else
4747                                         echo "It doesn't support 4..."
4748                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4749                                                 voidflags=11
4750                                                 echo "But it supports 8."
4751                                         else
4752                                                 voidflags=3
4753                                                 echo "Neither does it support 8."
4754                                         fi
4755                                 fi
4756                         else
4757                                 echo "It does not support 2..."
4758                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4759                                         voidflags=13
4760                                         echo "But it supports 4 and 8."
4761                                 else
4762                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4763                                                 voidflags=5
4764                                                 echo "And it supports 4 but has not heard about 8."
4765                                         else
4766                                                 echo "However it supports 8 but not 4."
4767                                         fi
4768                                 fi
4769                         fi
4770                 else
4771                         echo "There is no support at all for void."
4772                         voidflags=0
4773                 fi
4774         fi
4775 esac
4776 case "$voidflags" in
4777 "$defvoidused") ;;
4778 *)      $cat >&4 <<'EOM'
4779   Support flag bits are:
4780     1: basic void declarations.
4781     2: arrays of pointers to functions returning void.
4782     4: operations between pointers to and addresses of void functions.
4783     8: generic void pointers.
4784 EOM
4785         dflt="$voidflags";
4786         rp="Your void support flags add up to what?"
4787         . ./myread
4788         voidflags="$ans"
4789         ;;
4790 esac
4791 $rm -f try.* .out
4792
4793 : check for length of pointer
4794 echo " "
4795 case "$ptrsize" in
4796 '')
4797         echo "Checking to see how big your pointers are..." >&4
4798         if test "$voidflags" -gt 7; then
4799                 echo '#define VOID_PTR char *' > try.c
4800         else
4801                 echo '#define VOID_PTR void *' > try.c
4802         fi
4803         $cat >>try.c <<'EOCP'
4804 #include <stdio.h>
4805 int main()
4806 {
4807     printf("%d\n", (int)sizeof(VOID_PTR));
4808     exit(0);
4809 }
4810 EOCP
4811         set try
4812         if eval $compile_ok; then
4813                 ptrsize=`$run ./try`
4814                 echo "Your pointers are $ptrsize bytes long."
4815         else
4816                 dflt='4'
4817                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4818                 rp="What is the size of a pointer (in bytes)?"
4819                 . ./myread
4820                 ptrsize="$ans"
4821         fi
4822         ;;
4823 esac
4824 $rm -f try.c try
4825
4826 : check for long long
4827 echo " "
4828 echo "Checking to see if you have long long..." >&4
4829 echo 'int main() { long long x = 7; return 0; }' > try.c
4830 set try
4831 if eval $compile; then
4832         val="$define"
4833         echo "You have long long."
4834 else
4835         val="$undef"
4836         echo "You do not have long long."
4837 fi
4838 $rm try.*
4839 set d_longlong
4840 eval $setvar
4841
4842 : check for length of long long
4843 case "${d_longlong}${longlongsize}" in
4844 $define)
4845         echo " "
4846         echo "Checking to see how big your long longs are..." >&4
4847         $cat >try.c <<'EOCP'
4848 #include <stdio.h>
4849 int main()
4850 {
4851     printf("%d\n", (int)sizeof(long long));
4852     return(0);
4853 }
4854 EOCP
4855         set try
4856         if eval $compile_ok; then
4857                 longlongsize=`$run ./try`
4858                 echo "Your long longs are $longlongsize bytes long."
4859         else
4860                 dflt='8'
4861                 echo " "
4862                 echo "(I can't seem to compile the test program.  Guessing...)"
4863                 rp="What is the size of a long long (in bytes)?"
4864                 . ./myread
4865                 longlongsize="$ans"
4866         fi
4867         if $test "X$longsize" = "X$longlongsize"; then
4868                 echo "(That isn't any different from an ordinary long.)"
4869         fi      
4870         ;;
4871 esac
4872 $rm -f try.* try
4873
4874 : determine filename position in cpp output
4875 echo " "
4876 echo "Computing filename position in cpp output for #include directives..." >&4
4877 case "$osname" in
4878 vos) testaccess=-e ;;
4879 *)   testaccess=-r ;;
4880 esac
4881 echo '#include <stdio.h>' > foo.c
4882 $cat >fieldn <<EOF
4883 $startsh
4884 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4885 $grep '^[       ]*#.*stdio\.h' | \
4886 while read cline; do
4887         pos=1
4888         set \$cline
4889         while $test \$# -gt 0; do
4890                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4891                         echo "\$pos"
4892                         exit 0
4893                 fi
4894                 shift
4895                 pos=\`expr \$pos + 1\`
4896         done
4897 done
4898 EOF
4899 chmod +x fieldn
4900 fieldn=`./fieldn`
4901 $rm -f foo.c fieldn
4902 case $fieldn in
4903 '') pos='???';;
4904 1) pos=first;;
4905 2) pos=second;;
4906 3) pos=third;;
4907 *) pos="${fieldn}th";;
4908 esac
4909 echo "Your cpp writes the filename in the $pos field of the line."
4910
4911 case "$osname" in
4912 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4913 *)   cppfilter='' ;;
4914 esac
4915 : locate header file
4916 $cat >findhdr <<EOF
4917 $startsh
4918 wanted=\$1
4919 name=''
4920 for usrincdir in $usrinc
4921 do
4922         if test -f \$usrincdir/\$wanted; then
4923                 echo "\$usrincdir/\$wanted"
4924                 exit 0
4925         fi
4926 done
4927 awkprg='{ print \$$fieldn }'
4928 echo "#include <\$wanted>" > foo\$\$.c
4929 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4930 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4931 while read cline; do
4932         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4933         case "\$name" in
4934         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4935         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4936         *) exit 2;;
4937         esac;
4938 done;
4939 #
4940 # status = 0: grep returned 0 lines, case statement not executed
4941 # status = 1: headerfile found
4942 # status = 2: while loop executed, no headerfile found
4943 #
4944 status=\$?
4945 $rm -f foo\$\$.c;
4946 if test \$status -eq 1; then
4947         exit 0;
4948 fi
4949 exit 1
4950 EOF
4951 chmod +x findhdr
4952
4953 : define an alternate in-header-list? function
4954 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4955 cont=true; xxf="echo \"<\$1> found.\" >&4";
4956 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4957 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4958 esac;
4959 case $# in 4) instead=instead;; *) instead="at last";; esac;
4960 while $test "$cont"; do
4961         xxx=`./findhdr $1`
4962         var=$2; eval "was=\$$2";
4963         if $test "$xxx" && $test -r "$xxx";
4964         then eval $xxf;
4965         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4966                 cont="";
4967         else eval $xxnf;
4968         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4969         set $yyy; shift; shift; yyy=$@;
4970         case $# in 0) cont="";;
4971         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4972                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4973         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4974                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4975         esac;
4976 done;
4977 while $test "$yyy";
4978 do set $yyy; var=$2; eval "was=\$$2";
4979         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4980         set $yyy; shift; shift; yyy=$@;
4981 done'
4982
4983 : see if inttypes.h is available
4984 : we want a real compile instead of Inhdr because some systems
4985 : have an inttypes.h which includes non-existent headers
4986 echo " "
4987 $cat >try.c <<EOCP
4988 #include <inttypes.h>
4989 int main() {
4990         static int32_t foo32 = 0x12345678;
4991 }
4992 EOCP
4993 set try
4994 if eval $compile; then
4995         echo "<inttypes.h> found." >&4
4996         val="$define"
4997 else
4998         echo "<inttypes.h> NOT found." >&4
4999         val="$undef"
5000 fi
5001 $rm -f try.c try
5002 set i_inttypes
5003 eval $setvar
5004
5005 : check for int64_t
5006 echo " "
5007 echo "Checking to see if you have int64_t..." >&4
5008 $cat >try.c <<EOCP
5009 #include <sys/types.h>
5010 #$i_inttypes I_INTTYPES
5011 #ifdef I_INTTYPES
5012 #include <inttypes.h>
5013 #endif
5014 int main() { int64_t x = 7; }
5015 EOCP
5016 set try
5017 if eval $compile; then
5018         val="$define"
5019         echo "You have int64_t."
5020 else
5021         val="$undef"
5022         echo "You do not have int64_t."
5023 fi
5024 $rm -f try try.*
5025 set d_int64_t
5026 eval $setvar
5027
5028
5029 echo " "
5030 echo "Checking which 64-bit integer type we could use..." >&4
5031
5032 case "$intsize" in
5033 8) val=int
5034    set quadtype
5035    eval $setvar
5036    val='"unsigned int"'
5037    set uquadtype
5038    eval $setvar
5039    quadkind=1
5040    ;;
5041 *) case "$longsize" in
5042    8) val=long
5043       set quadtype
5044       eval $setvar
5045       val='"unsigned long"'
5046       set uquadtype
5047       eval $setvar
5048       quadkind=2
5049       ;;
5050    *) case "$d_longlong:$longlongsize" in
5051       define:8)
5052         val='"long long"'
5053         set quadtype
5054         eval $setvar
5055         val='"unsigned long long"'
5056         set uquadtype
5057         eval $setvar
5058         quadkind=3
5059         ;;
5060       *) case "$d_int64_t" in
5061          define)
5062            val=int64_t
5063            set quadtype
5064            eval $setvar
5065            val=uint64_t
5066            set uquadtype
5067            eval $setvar
5068            quadkind=4
5069            ;;
5070          esac
5071          ;;
5072       esac
5073       ;;
5074    esac
5075    ;;
5076 esac
5077
5078 case "$quadtype" in
5079 '')     echo "Alas, no 64-bit integer types in sight." >&4
5080         d_quad="$undef"
5081         ;;
5082 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5083         d_quad="$define"
5084         ;;
5085 esac
5086
5087
5088 case "$uselonglong" in
5089 "$define"|true|[yY]*)
5090         cat <<EOM >&4
5091
5092 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5093 EOM
5094         use64bitint="$define"
5095         ;;
5096 esac                          
5097 case "$use64bits" in
5098 "$define"|true|[yY]*)
5099         cat <<EOM >&4
5100
5101 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5102 EOM
5103         use64bitint="$define"
5104         ;;
5105 esac                          
5106 case "$use64bitints" in
5107 "$define"|true|[yY]*)
5108         cat <<EOM >&4
5109
5110 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5111 EOM
5112         use64bitint="$define"
5113         ;;
5114 esac                          
5115 case "$use64bitsint" in
5116 "$define"|true|[yY]*)
5117         cat <<EOM >&4
5118
5119 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5120 EOM
5121         use64bitint="$define"
5122         ;;
5123 esac                          
5124 case "$uselonglongs" in
5125 "$define"|true|[yY]*)
5126         cat <<EOM >&4
5127
5128 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5129 EOM
5130         use64bitint="$define"
5131         ;;
5132 esac                          
5133 case "$use64bitsall" in
5134 "$define"|true|[yY]*)
5135         cat <<EOM >&4
5136
5137 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5138 EOM
5139         use64bitall="$define"
5140         ;;
5141 esac                          
5142
5143 case "$ccflags" in
5144 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5145 esac
5146 case "$use64bitall" in
5147 "$define"|true|[yY]*) use64bitint="$define" ;;
5148 esac
5149
5150 case "$longsize" in
5151 8) cat <<EOM
5152
5153 You have natively 64-bit long integers.
5154 EOM
5155    val="$define"
5156    ;;
5157 *) case "$use64bitint" in
5158    "$define"|true|[yY]*) dflt='y';;
5159    *) dflt='n';;
5160    esac
5161    case "$d_quad" in
5162    "$define") ;;
5163    *) dflt='n' ;;
5164    esac
5165    cat <<EOM
5166
5167 Perl can be built to take advantage of 64-bit integer types
5168 on some systems.  To do so, Configure can be run with -Duse64bitint.
5169 Choosing this option will most probably introduce binary incompatibilities.
5170
5171 If this doesn't make any sense to you, just accept the default '$dflt'.
5172 (The default has been chosen based on your configuration.)
5173 EOM
5174    rp='Try to use 64-bit integers, if available?'
5175    . ./myread
5176    case "$ans" in
5177    [yY]*) val="$define" ;;
5178    *)     val="$undef"  ;;
5179    esac
5180    ;;
5181 esac
5182 set use64bitint
5183 eval $setvar
5184
5185 case "$use64bitall" in
5186 "$define"|true|[yY]*) dflt='y' ;;
5187 *) case "$longsize" in
5188    8) dflt='y' ;;
5189    *) dflt='n' ;;
5190    esac
5191    ;;
5192 esac    
5193 cat <<EOM
5194
5195 You may also choose to try maximal 64-bitness.  It means using as much
5196 64-bitness as possible on the platform.  This in turn means even more
5197 binary incompatibilities.  On the other hand, your platform may not
5198 have any more 64-bitness available than what you already have chosen.
5199
5200 If this doesn't make any sense to you, just accept the default '$dflt'.
5201 (The default has been chosen based on your configuration.)
5202 EOM
5203 rp='Try to use maximal 64-bit support, if available?'
5204 . ./myread
5205 case "$ans" in
5206 [yY]*) val="$define" ;;
5207 *)     val="$undef"  ;;
5208 esac
5209 set use64bitall
5210 eval $setvar
5211 case "$use64bitall" in
5212 "$define")
5213         case "$use64bitint" in
5214         "$undef")
5215                 cat <<EOM
5216
5217 Since you have chosen a maximally 64-bit build, I'm also turning on
5218 the use of 64-bit integers.
5219 EOM
5220                 use64bitint="$define" ;;
5221         esac
5222         ;;
5223 esac
5224
5225 case "$use64bitall" in
5226 "$define"|true|[yY]*)
5227         case "$ptrsize" in
5228         4)      cat <<EOM >&4
5229
5230 *** You have chosen a maximally 64-bit build, but your pointers
5231 *** are only 4 bytes wide, disabling maximal 64-bitness.
5232
5233 EOM
5234                 use64bitall="$undef"
5235                 case "$use64bitint" in
5236                 "$define"|true|[yY]*) ;;
5237                 *)      cat <<EOM >&4
5238
5239 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5240
5241 EOM
5242                         use64bitint="$define"
5243                         ;;
5244                 esac
5245                 ;;
5246         esac
5247         ;;
5248 esac
5249
5250 case "$use64bitint" in
5251 "$define"|true|[yY]*)
5252 : Look for a hint-file generated 'call-back-unit'.  If the
5253 : user has specified that a 64-bit perl is to be built,
5254 : we may need to set or change some other defaults.
5255         if $test -f use64bitint.cbu; then
5256                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5257                 . ./use64bitint.cbu
5258         fi
5259         case "$longsize" in
5260         4) case "$archname64" in
5261            '') archname64=64int ;;
5262            esac
5263            ;;
5264         esac
5265         ;;
5266 esac
5267
5268 case "$use64bitall" in
5269 "$define"|true|[yY]*)
5270 : Look for a hint-file generated 'call-back-unit'.  If the
5271 : user has specified that a maximally 64-bit perl is to be built,
5272 : we may need to set or change some other defaults.
5273         if $test -f use64bitall.cbu; then
5274                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5275                 . ./use64bitall.cbu
5276         fi
5277         case "$longsize" in
5278         4) case "$archname64" in
5279            ''|64int) archname64=64all ;;
5280            esac
5281            ;;
5282         esac
5283         ;;
5284 esac
5285
5286 echo " "
5287 echo "Checking for GNU C Library..." >&4
5288 cat >try.c <<EOM
5289 #include <stdio.h>
5290 int main()
5291 {
5292 #ifdef __GLIBC__
5293     exit(0);
5294 #else
5295     exit(1);
5296 #endif
5297 }
5298 EOM
5299 set try
5300 if eval $compile_ok && $run ./try; then
5301         val="$define"
5302         echo "You are using the GNU C Library"
5303 else
5304         val="$undef"
5305         echo "You are not using the GNU C Library"
5306 fi
5307 $rm -f try try.*
5308 set d_gnulibc
5309 eval $setvar
5310
5311 : see if nm is to be used to determine whether a symbol is defined or not
5312 case "$usenm" in
5313 '')
5314         dflt=''
5315         case "$d_gnulibc" in
5316         "$define")
5317                 echo " "
5318                 echo "nm probably won't work on the GNU C Library." >&4
5319                 dflt=n
5320                 ;;
5321         esac
5322         case "$dflt" in
5323         '') 
5324                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5325                         echo " "
5326                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5327                         echo "'nm' won't be sufficient on this sytem." >&4
5328                         dflt=n
5329                 fi
5330                 ;;
5331         esac
5332         case "$dflt" in
5333         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5334                 if $test $dflt -gt 20; then
5335                         dflt=y
5336                 else
5337                         dflt=n
5338                 fi
5339                 ;;
5340         esac
5341         ;;
5342 *)
5343         case "$usenm" in
5344         true|$define) dflt=y;;
5345         *) dflt=n;;
5346         esac
5347         ;;
5348 esac
5349 $cat <<EOM
5350
5351 I can use $nm to extract the symbols from your C libraries. This
5352 is a time consuming task which may generate huge output on the disk (up
5353 to 3 megabytes) but that should make the symbols extraction faster. The
5354 alternative is to skip the 'nm' extraction part and to compile a small
5355 test program instead to determine whether each symbol is present. If
5356 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5357 this may be the best solution.
5358
5359 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5360
5361 EOM
5362 rp="Shall I use $nm to extract C symbols from the libraries?"
5363 . ./myread
5364 case "$ans" in
5365 [Nn]*) usenm=false;;
5366 *) usenm=true;;
5367 esac
5368
5369 runnm=$usenm
5370 case "$reuseval" in
5371 true) runnm=false;;
5372 esac
5373
5374 : nm options which may be necessary
5375 case "$nm_opt" in
5376 '') if $test -f /mach_boot; then
5377                 nm_opt=''       # Mach
5378         elif $test -d /usr/ccs/lib; then
5379                 nm_opt='-p'     # Solaris (and SunOS?)
5380         elif $test -f /dgux; then
5381                 nm_opt='-p'     # DG-UX
5382         elif $test -f /lib64/rld; then
5383                 nm_opt='-p'     # 64-bit Irix
5384         else
5385                 nm_opt=''
5386         fi;;
5387 esac
5388
5389 : nm options which may be necessary for shared libraries but illegal
5390 : for archive libraries.  Thank you, Linux.
5391 case "$nm_so_opt" in
5392 '')     case "$myuname" in
5393         *linux*)
5394                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5395                         nm_so_opt='--dynamic'
5396                 fi
5397                 ;;
5398         esac
5399         ;;
5400 esac
5401
5402 case "$runnm" in
5403 true)
5404 : get list of predefined functions in a handy place
5405 echo " "
5406 case "$libc" in
5407 '') libc=unknown
5408         case "$libs" in
5409         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5410         esac
5411         ;;
5412 esac
5413 case "$libs" in
5414 '') ;;
5415 *)  for thislib in $libs; do
5416         case "$thislib" in
5417         -lc|-lc_s)
5418                 : Handle C library specially below.
5419                 ;;
5420         -l*)
5421                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5422                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5423                         :
5424                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5425                         :
5426                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5427                         :
5428                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5429                         :
5430                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5435                         :
5436                 else
5437                         try=''
5438                 fi
5439                 libnames="$libnames $try"
5440                 ;;
5441         *) libnames="$libnames $thislib" ;;
5442         esac
5443         done
5444         ;;
5445 esac
5446 xxx=normal
5447 case "$libc" in
5448 unknown)
5449         set /lib/libc.$so
5450         for xxx in $libpth; do
5451                 $test -r $1 || set $xxx/libc.$so
5452                 : The messy sed command sorts on library version numbers.
5453                 $test -r $1 || \
5454                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5455                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5456                                 h
5457                                 s/[0-9][0-9]*/0000&/g
5458                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5459                                 G
5460                                 s/\n/ /' | \
5461                          $sort | $sed -e 's/^.* //'`
5462                 eval set \$$#
5463         done
5464         $test -r $1 || set /usr/ccs/lib/libc.$so
5465         $test -r $1 || set /lib/libsys_s$_a
5466         ;;
5467 *)
5468         set blurfl
5469         ;;
5470 esac
5471 if $test -r "$1"; then
5472         echo "Your (shared) C library seems to be in $1."
5473         libc="$1"
5474 elif $test -r /lib/libc && $test -r /lib/clib; then
5475         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5476         xxx=apollo
5477         libc='/lib/clib /lib/libc'
5478         if $test -r /lib/syslib; then
5479                 echo "(Your math library is in /lib/syslib.)"
5480                 libc="$libc /lib/syslib"
5481         fi
5482 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5483         echo "Your C library seems to be in $libc, as you said before."
5484 elif $test -r $incpath/usr/lib/libc$_a; then
5485         libc=$incpath/usr/lib/libc$_a;
5486         echo "Your C library seems to be in $libc.  That's fine."
5487 elif $test -r /lib/libc$_a; then
5488         libc=/lib/libc$_a;
5489         echo "Your C library seems to be in $libc.  You're normal."
5490 else
5491         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5492                 :
5493         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5494                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5495         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5496                 :
5497         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5498                 :
5499         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5500                 :
5501         else
5502                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5503         fi
5504         if $test -r "$tans"; then
5505                 echo "Your C library seems to be in $tans, of all places."
5506                 libc=$tans
5507         else
5508                 libc='blurfl'
5509         fi
5510 fi
5511 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5512         dflt="$libc"
5513         cat <<EOM
5514
5515 If the guess above is wrong (which it might be if you're using a strange
5516 compiler, or your machine supports multiple models), you can override it here.
5517
5518 EOM
5519 else
5520         dflt=''
5521         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5522         cat >&4 <<EOM
5523 I can't seem to find your C library.  I've looked in the following places:
5524
5525 EOM
5526         $sed 's/^/      /' libpath
5527         cat <<EOM
5528
5529 None of these seems to contain your C library. I need to get its name...
5530
5531 EOM
5532 fi
5533 fn=f
5534 rp='Where is your C library?'
5535 . ./getfile
5536 libc="$ans"
5537
5538 echo " "
5539 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5540 set X `cat libnames`
5541 shift
5542 xxx=files
5543 case $# in 1) xxx=file; esac
5544 echo "Extracting names from the following $xxx for later perusal:" >&4
5545 echo " "
5546 $sed 's/^/      /' libnames >&4
5547 echo " "
5548 $echo $n "This may take a while...$c" >&4
5549
5550 for file in $*; do
5551         case $file in
5552         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5553         *) $nm $nm_opt $file 2>/dev/null;;
5554         esac
5555 done >libc.tmp
5556
5557 $echo $n ".$c"
5558 $grep fprintf libc.tmp > libc.ptf
5559 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5560 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5561 xxx='[ADTSIW]'
5562 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5563         eval $xscan;\
5564         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5565                 eval $xrun
5566 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5567         eval $xscan;\
5568         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5569                 eval $xrun
5570 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5571         eval $xscan;\
5572         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5573                 eval $xrun
5574 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5575         eval $xscan;\
5576         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5577                 eval $xrun
5578 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5579         eval $xscan;\
5580         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5581                 eval $xrun
5582 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5583         eval $xscan;\
5584         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5585                 eval $xrun
5586 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5587                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5588         eval $xscan;\
5589         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5590                 eval $xrun
5591 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5592         eval $xscan;\
5593         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5594                 eval $xrun
5595 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5596         eval $xscan;\
5597         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5598                 eval $xrun
5599 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 else
5620         $nm -p $* 2>/dev/null >libc.tmp
5621         $grep fprintf libc.tmp > libc.ptf
5622         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5623                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5624         then
5625                 nm_opt='-p'
5626                 eval $xrun
5627         else
5628                 echo " "
5629                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5630                 com=''
5631                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5632                         for thisname in $libnames $libc; do
5633                                 $ar t $thisname >>libc.tmp
5634                         done
5635                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5636                         echo "Ok." >&4
5637                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5638                         # Repeat libc to extract forwarders to DLL entries too
5639                         for thisname in $libnames $libc; do
5640                                 $ar tv $thisname >>libc.tmp
5641                                 # Revision 50 of EMX has bug in $ar.
5642                                 # it will not extract forwarders to DLL entries
5643                                 # Use emximp which will extract exactly them.
5644                                 emximp -o tmp.imp $thisname \
5645                                     2>/dev/null && \
5646                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5647                                     < tmp.imp >>libc.tmp
5648                                 $rm tmp.imp
5649                         done
5650                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5651                         echo "Ok." >&4
5652                 else
5653                         echo "$ar didn't seem to work right." >&4
5654                         echo "Maybe this is a Cray...trying bld instead..." >&4
5655                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5656                         then
5657                                 for thisname in $libnames; do
5658                                         bld t $libnames | \
5659                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5660                                         $ar t $thisname >>libc.tmp
5661                                 done
5662                                 echo "Ok." >&4
5663                         else
5664                                 echo "That didn't work either.  Giving up." >&4
5665                                 exit 1
5666                         fi
5667                 fi
5668         fi
5669 fi
5670 nm_extract="$com"
5671 if $test -f /lib/syscalls.exp; then
5672         echo " "
5673         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5674         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5675 fi
5676 ;;
5677 esac
5678 $rm -f libnames libpath
5679
5680 : is a C symbol defined?
5681 csym='tlook=$1;
5682 case "$3" in
5683 -v) tf=libc.tmp; tc=""; tdc="";;
5684 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5685 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5686 esac;
5687 tx=yes;
5688 case "$reuseval-$4" in
5689 true-) ;;
5690 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5691 esac;
5692 case "$tx" in
5693 yes)
5694         case "$runnm" in
5695         true)
5696                 if $contains $tlook $tf >/dev/null 2>&1;
5697                 then tval=true;
5698                 else tval=false;
5699                 fi;;
5700         *)
5701                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5702                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5703                 then tval=true;
5704                 else tval=false;
5705                 fi;
5706                 $rm -f t t.c;;
5707         esac;;
5708 *)
5709         case "$tval" in
5710         $define) tval=true;;
5711         *) tval=false;;
5712         esac;;
5713 esac;
5714 eval "$2=$tval"'
5715
5716 : define an is-in-libc? function
5717 inlibc='echo " "; td=$define; tu=$undef;
5718 sym=$1; var=$2; eval "was=\$$2";
5719 tx=yes;
5720 case "$reuseval$was" in
5721 true) ;;
5722 true*) tx=no;;
5723 esac;
5724 case "$tx" in
5725 yes)
5726         set $sym tres -f;
5727         eval $csym;
5728         case "$tres" in
5729         true)
5730                 echo "$sym() found." >&4;
5731                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5732         *)
5733                 echo "$sym() NOT found." >&4;
5734                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5735         esac;;
5736 *)
5737         case "$was" in
5738         $define) echo "$sym() found." >&4;;
5739         *) echo "$sym() NOT found." >&4;;
5740         esac;;
5741 esac'
5742
5743 : see if sqrtl exists
5744 set sqrtl d_sqrtl
5745 eval $inlibc
5746
5747 case "$ccflags" in
5748 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5749 esac
5750
5751 case "$uselongdouble" in
5752 $define|true|[yY]*)     dflt='y';;
5753 *) dflt='n';;
5754 esac
5755 cat <<EOM
5756
5757 Perl can be built to take advantage of long doubles which
5758 (if available) may give more accuracy and range for floating point numbers.
5759
5760 If this doesn't make any sense to you, just accept the default '$dflt'.
5761 EOM
5762 rp='Try to use long doubles if available?'
5763 . ./myread
5764 case "$ans" in
5765 y|Y)    val="$define"   ;;
5766 *)      val="$undef"    ;;
5767 esac
5768 set uselongdouble
5769 eval $setvar
5770
5771 case "$uselongdouble" in
5772 true|[yY]*) uselongdouble="$define" ;;
5773 esac
5774
5775 case "$uselongdouble" in
5776 $define)
5777 : Look for a hint-file generated 'call-back-unit'.  If the
5778 : user has specified that long doubles should be used,
5779 : we may need to set or change some other defaults.
5780         if $test -f uselongdouble.cbu; then
5781                 echo "Your platform has some specific hints for long doubles, using them..."
5782                 . ./uselongdouble.cbu
5783         else
5784                 $cat <<EOM
5785 (Your platform doesn't have any specific hints for long doubles.)
5786 EOM
5787         fi
5788         ;;
5789 esac
5790
5791 case "$uselongdouble:$d_sqrtl" in
5792 $define:$undef)
5793                 $cat <<EOM >&4
5794
5795 *** You requested the use of long doubles but you do not seem to have
5796 *** the mathematic functions for long doubles.  I'm disabling the use
5797 *** of long doubles.
5798
5799 EOM
5800         uselongdouble=$undef
5801         ;;
5802 esac
5803
5804 : check for length of double
5805 echo " "
5806 case "$doublesize" in
5807 '')
5808         echo "Checking to see how big your double precision numbers are..." >&4
5809         $cat >try.c <<'EOCP'
5810 #include <stdio.h>
5811 int main()
5812 {
5813     printf("%d\n", (int)sizeof(double));
5814     exit(0);
5815 }
5816 EOCP
5817         set try
5818         if eval $compile_ok; then
5819                 doublesize=`$run ./try`
5820                 echo "Your double is $doublesize bytes long."
5821         else
5822                 dflt='8'
5823                 echo "(I can't seem to compile the test program.  Guessing...)"
5824                 rp="What is the size of a double precision number (in bytes)?"
5825                 . ./myread
5826                 doublesize="$ans"
5827         fi
5828         ;;
5829 esac
5830 $rm -f try.c try
5831
5832 : check for long doubles
5833 echo " "
5834 echo "Checking to see if you have long double..." >&4
5835 echo 'int main() { long double x = 7.0; }' > try.c
5836 set try
5837 if eval $compile; then
5838         val="$define"
5839         echo "You have long double."
5840 else
5841         val="$undef"
5842         echo "You do not have long double."
5843 fi
5844 $rm try.*
5845 set d_longdbl
5846 eval $setvar
5847
5848 : check for length of long double
5849 case "${d_longdbl}${longdblsize}" in
5850 $define)
5851         echo " "
5852         echo "Checking to see how big your long doubles are..." >&4
5853         $cat >try.c <<'EOCP'
5854 #include <stdio.h>
5855 int main()
5856 {
5857         printf("%d\n", sizeof(long double));
5858 }
5859 EOCP
5860         set try
5861         set try
5862         if eval $compile; then
5863                 longdblsize=`$run ./try`
5864                 echo "Your long doubles are $longdblsize bytes long."
5865         else
5866                 dflt='8'
5867                 echo " "
5868                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5869                 rp="What is the size of a long double (in bytes)?"
5870                 . ./myread
5871                 longdblsize="$ans"
5872         fi
5873         if $test "X$doublesize" = "X$longdblsize"; then
5874                 echo "(That isn't any different from an ordinary double.)"
5875         fi      
5876         ;;
5877 esac
5878 $rm -f try.* try
5879
5880 case "$useperlio" in
5881 $define|true|[yY]*|'')  dflt='y';;
5882 *) dflt='n';;
5883 esac
5884 cat <<EOM
5885
5886 Previous version of $package used the standard IO mechanisms as
5887 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5888 alternate IO mechanisms via the PerlIO abstraction layer, but the
5889 stdio mechanism is still available if needed.  The abstraction layer
5890 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5891 Using PerlIO with sfio may cause problems with some extension modules.
5892
5893 If this doesn't make any sense to you, just accept the default '$dflt'.
5894 EOM
5895 rp='Use the PerlIO abstraction layer?'
5896 . ./myread
5897 case "$ans" in
5898 y|Y) 
5899         val="$define"
5900         ;;
5901 *)      
5902         echo "Ok, doing things the stdio way."
5903         val="$undef"
5904         ;;
5905 esac
5906 set useperlio
5907 eval $setvar 
5908
5909 case "$usesocks" in
5910 $define|true|[yY]*)
5911         case "$useperlio" in
5912         $define|true|[yY]*) ;;
5913         *)      cat >&4 <<EOM
5914
5915 You are using the SOCKS proxy protocol library which means that you
5916 should also use the PerlIO layer.  You may be headed for trouble.
5917
5918 EOM
5919                 ;;
5920         esac
5921         ;;
5922 esac
5923
5924         
5925 : determine the architecture name
5926 echo " "
5927 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5928         tarch=`arch`"-$osname"
5929 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5930         if uname -m > tmparch 2>&1 ; then
5931                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5932                         -e 's/$/'"-$osname/" tmparch`
5933         else
5934                 tarch="$osname"
5935         fi
5936         $rm -f tmparch
5937 else
5938         tarch="$osname"
5939 fi
5940 case "$myarchname" in
5941 ''|"$tarch") ;;
5942 *)
5943         echo "(Your architecture name used to be $myarchname.)"
5944         archname=''
5945         ;;
5946 esac
5947 case "$targetarch" in
5948 '') ;;
5949 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5950 esac
5951 myarchname="$tarch"
5952 case "$archname" in
5953 '') dflt="$tarch";;
5954 *) dflt="$archname";;
5955 esac
5956 rp='What is your architecture name'
5957 . ./myread
5958 archname="$ans"
5959 case "$usethreads" in
5960 $define)
5961         echo "Threads selected." >&4
5962         case "$archname" in
5963         *-thread*) echo "...and architecture name already has -thread." >&4
5964                 ;;
5965         *)      archname="$archname-thread"
5966                 echo "...setting architecture name to $archname." >&4
5967                 ;;
5968         esac
5969         ;;
5970 esac
5971 case "$usemultiplicity" in
5972 $define)
5973         echo "Multiplicity selected." >&4
5974         case "$archname" in
5975         *-multi*) echo "...and architecture name already has -multi." >&4
5976                 ;;
5977         *)      archname="$archname-multi"
5978                 echo "...setting architecture name to $archname." >&4
5979                 ;;
5980         esac
5981         ;;
5982 esac
5983 case "$use64bitint$use64bitall" in
5984 *"$define"*)
5985         case "$archname64" in
5986         '')
5987                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5988                 ;;
5989         *)
5990                 case "$use64bitint" in
5991                 "$define") echo "64 bit integers selected." >&4 ;;
5992                 esac
5993                 case "$use64bitall" in
5994                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5995                 esac
5996                 case "$archname" in
5997                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5998                         ;;
5999                 *)      archname="$archname-$archname64"
6000                         echo "...setting architecture name to $archname." >&4
6001                         ;;
6002                 esac
6003                 ;;
6004         esac
6005 esac
6006 case "$uselongdouble" in
6007 $define)
6008         echo "Long doubles selected." >&4
6009         case "$longdblsize" in
6010         $doublesize)
6011                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6012                 ;;
6013         *)
6014                 case "$archname" in
6015                 *-ld*) echo "...and architecture name already has -ld." >&4
6016                         ;;
6017                 *)      archname="$archname-ld"
6018                         echo "...setting architecture name to $archname." >&4
6019                         ;;
6020                 esac
6021                 ;;
6022         esac
6023         ;;
6024 esac
6025 case "$useperlio" in
6026 $define)
6027         echo "Perlio selected." >&4
6028         ;;
6029 *)
6030         echo "Perlio not selected, using stdio." >&4
6031         case "$archname" in
6032         *-stdio*) echo "...and architecture name already has -stdio." >&4
6033                 ;;
6034         *)      archname="$archname-stdio"
6035                 echo "...setting architecture name to $archname." >&4
6036                 ;;
6037         esac
6038         ;;
6039 esac
6040
6041 : determine root of directory hierarchy where package will be installed.
6042 case "$prefix" in
6043 '')
6044         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6045         ;;
6046 *)
6047         dflt="$prefix"
6048         ;;
6049 esac
6050 $cat <<EOM
6051
6052 By default, $package will be installed in $dflt/bin, manual pages
6053 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6054 installation directories. Typically this is something like /usr/local.
6055 If you wish to have binaries under /usr/bin but other parts of the
6056 installation under /usr/local, that's ok: you will be prompted
6057 separately for each of the installation directories, the prefix being
6058 only used to set the defaults.
6059
6060 EOM
6061 fn=d~
6062 rp='Installation prefix to use?'
6063 . ./getfile
6064 oldprefix=''
6065 case "$prefix" in
6066 '') ;;
6067 *)
6068         case "$ans" in
6069         "$prefix") ;;
6070         *) oldprefix="$prefix";;
6071         esac
6072         ;;
6073 esac
6074 prefix="$ans"
6075 prefixexp="$ansexp"
6076
6077 case "$afsroot" in
6078 '')     afsroot=/afs ;;
6079 *)      afsroot=$afsroot ;;
6080 esac
6081
6082 : is AFS running?
6083 echo " "
6084 case "$afs" in
6085 $define|true)   afs=true ;;
6086 $undef|false)   afs=false ;;
6087 *)      if test -d $afsroot; then
6088                 afs=true
6089         else
6090                 afs=false
6091         fi
6092         ;;
6093 esac
6094 if $afs; then
6095         echo "AFS may be running... I'll be extra cautious then..." >&4
6096 else
6097         echo "AFS does not seem to be running..." >&4
6098 fi
6099
6100 : determine installation prefix for where package is to be installed.
6101 if $afs; then 
6102 $cat <<EOM
6103
6104 Since you are running AFS, I need to distinguish the directory in which
6105 files will reside from the directory in which they are installed (and from
6106 which they are presumably copied to the former directory by occult means).
6107
6108 EOM
6109         case "$installprefix" in
6110         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6111         *) dflt="$installprefix";;
6112         esac
6113 else
6114 $cat <<EOM
6115
6116 In some special cases, particularly when building $package for distribution,
6117 it is convenient to distinguish between the directory in which files should 
6118 be installed from the directory ($prefix) in which they 
6119 will eventually reside.  For most users, these two directories are the same.
6120
6121 EOM
6122         case "$installprefix" in
6123         '') dflt=$prefix ;;
6124         *) dflt=$installprefix;;
6125         esac
6126 fi
6127 fn=d~
6128 rp='What installation prefix should I use for installing files?'
6129 . ./getfile
6130 installprefix="$ans"
6131 installprefixexp="$ansexp"
6132
6133 : set the prefixit variable, to compute a suitable default value
6134 prefixit='case "$3" in
6135 ""|none)
6136         case "$oldprefix" in
6137         "") eval "$1=\"\$$2\"";;
6138         *)
6139                 case "$3" in
6140                 "") eval "$1=";;
6141                 none)
6142                         eval "tp=\"\$$2\"";
6143                         case "$tp" in
6144                         ""|" ") eval "$1=\"\$$2\"";;
6145                         *) eval "$1=";;
6146                         esac;;
6147                 esac;;
6148         esac;;
6149 *)
6150         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6151         case "$tp" in
6152         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6153         /*-$oldprefix/*|\~*-$oldprefix/*)
6154                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6155         *) eval "$1=\"\$$2\"";;
6156         esac;;
6157 esac'
6158
6159 : get the patchlevel
6160 echo " "
6161 echo "Getting the current patchlevel..." >&4
6162 if $test -r $rsrc/patchlevel.h;then
6163         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6164         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6165         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6166         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6167         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6168         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6169        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6170 else
6171         revision=0
6172         patchlevel=0
6173         subversion=0
6174         api_revision=0
6175         api_version=0
6176         api_subversion=0
6177         perl_patchlevel=0
6178         $echo "(You do not have patchlevel.h.  Eek.)"
6179 fi
6180 if $test -r $rsrc/.patch ; then  
6181         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6182                 perl_patchlevel=`cat $rsrc/.patch`
6183         fi
6184 fi
6185 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6186 version_patchlevel_string="version $patchlevel subversion $subversion"
6187 case "$perl_patchlevel" in
6188 0|'') ;;
6189 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6190 esac
6191
6192 $echo "(You have $package $version_patchlevel_string.)"
6193
6194 case "$osname" in
6195 dos|vms)
6196         : XXX Should be a Configure test for double-dots in filenames.
6197         version=`echo $revision $patchlevel $subversion | \
6198                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6199         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6200                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6201         ;;
6202 *)
6203         version=`echo $revision $patchlevel $subversion | \
6204                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6205         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6206                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6207         ;;
6208 esac
6209 : Special case the 5.005_xx maintenance series, which used 5.005
6210 : without any subversion label as a subdirectory in $sitelib
6211 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6212         api_versionstring='5.005'
6213 fi
6214
6215 : determine installation style
6216 : For now, try to deduce it from prefix unless it is already set.
6217 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6218 case "$installstyle" in
6219 '')     case "$prefix" in
6220                 *perl*) dflt='lib';;
6221                 *) dflt='lib/perl5' ;;
6222         esac
6223         ;;
6224 *)      dflt="$installstyle" ;;
6225 esac
6226 : Probably not worth prompting for this since we prompt for all
6227 : the directories individually, and the prompt would be too long and
6228 : confusing anyway.
6229 installstyle=$dflt
6230
6231 : determine where private library files go
6232 : Usual default is /usr/local/lib/perl5/$version.
6233 : Also allow things like /opt/perl/lib/$version, since 
6234 : /opt/perl/lib/perl5... would be redundant.
6235 : The default "style" setting is made in installstyle.U
6236 case "$installstyle" in
6237 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6238 *)       set dflt privlib lib/$version ;;
6239 esac
6240 eval $prefixit
6241 $cat <<EOM
6242
6243 There are some auxiliary files for $package that need to be put into a
6244 private library directory that is accessible by everyone.
6245
6246 EOM
6247 fn=d~+
6248 rp='Pathname where the private library files will reside?'
6249 . ./getfile
6250 privlib="$ans"
6251 privlibexp="$ansexp"
6252 : Change installation prefix, if necessary.
6253 if $test X"$prefix" != X"$installprefix"; then
6254         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6255 else
6256         installprivlib="$privlibexp"
6257 fi
6258
6259 : set the prefixup variable, to restore leading tilda escape
6260 prefixup='case "$prefixexp" in
6261 "$prefix") ;;
6262 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6263 esac'
6264
6265 : determine where public architecture dependent libraries go
6266 set archlib archlib
6267 eval $prefixit
6268 : privlib default is /usr/local/lib/$package/$version
6269 : archlib default is /usr/local/lib/$package/$version/$archname
6270 : privlib may have an optional trailing /share.
6271 tdflt=`echo $privlib | $sed 's,/share$,,'`
6272 tdflt=$tdflt/$archname
6273 case "$archlib" in
6274 '')     dflt=$tdflt
6275         ;;
6276 *)      dflt="$archlib"
6277     ;;
6278 esac
6279 $cat <<EOM
6280
6281 $spackage contains architecture-dependent library files.  If you are
6282 sharing libraries in a heterogeneous environment, you might store
6283 these files in a separate location.  Otherwise, you can just include
6284 them with the rest of the public library files.
6285
6286 EOM
6287 fn=d+~
6288 rp='Where do you want to put the public architecture-dependent libraries?'
6289 . ./getfile
6290 archlib="$ans"
6291 archlibexp="$ansexp"
6292 if $test X"$archlib" = X"$privlib"; then
6293         d_archlib="$undef"
6294 else
6295         d_archlib="$define"
6296 fi
6297 : Change installation prefix, if necessary.
6298 if $test X"$prefix" != X"$installprefix"; then
6299         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6300 else
6301         installarchlib="$archlibexp"
6302 fi
6303
6304
6305 : Binary compatibility with 5.005 is not possible for builds
6306 : with advanced features
6307 case "$usethreads$usemultiplicity" in
6308 *define*)
6309         bincompat5005="$undef"
6310         d_bincompat5005="$undef"
6311         ;;
6312 *)      $cat <<EOM
6313
6314 This version of Perl can be compiled for binary compatibility with 5.005.
6315 If you decide to do so, you will be able to continue using most of the
6316 extensions that were compiled for Perl 5.005.
6317
6318 EOM
6319         case "$bincompat5005$d_bincompat5005" in
6320         *"$undef"*) dflt=n ;;
6321         *) dflt=y ;;
6322         esac
6323         rp='Binary compatibility with Perl 5.005?'
6324         . ./myread
6325         case "$ans" in
6326         y*) val="$define" ;;
6327         *)  val="$undef" ;;
6328         esac
6329         set d_bincompat5005
6330         eval $setvar
6331         case "$d_bincompat5005" in
6332         "$define")
6333                 bincompat5005="$define"
6334                 ;;
6335         *)      bincompat5005="$undef"
6336                 d_bincompat5005="$undef"
6337                 ;;
6338         esac
6339         ;;
6340 esac
6341
6342
6343 : see if setuid scripts can be secure
6344 $cat <<EOM
6345
6346 Some kernels have a bug that prevents setuid #! scripts from being
6347 secure.  Some sites have disabled setuid #! scripts because of this.
6348
6349 First let's decide if your kernel supports secure setuid #! scripts.
6350 (If setuid #! scripts would be secure but have been disabled anyway,
6351 don't say that they are secure if asked.)
6352
6353 EOM
6354
6355 val="$undef"
6356 if $test -d /dev/fd; then
6357         echo "#!$ls" >reflect
6358         chmod +x,u+s reflect
6359         ./reflect >flect 2>&1
6360         if $contains "/dev/fd" flect >/dev/null; then
6361                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6362                 val="$define"
6363         else
6364                 $cat <<EOM
6365 If you are not sure if they are secure, I can check but I'll need a
6366 username and password different from the one you are using right now.
6367 If you don't have such a username or don't want me to test, simply
6368 enter 'none'.
6369
6370 EOM
6371                 rp='Other username to test security of setuid scripts with?'
6372                 dflt='none'
6373                 . ./myread
6374                 case "$ans" in
6375                 n|none)
6376                         case "$d_suidsafe" in
6377                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6378                                 dflt=n;;
6379                         "$undef")
6380                                 echo "Well, the $hint value is *not* secure." >&4
6381                                 dflt=n;;
6382                         *)      echo "Well, the $hint value *is* secure." >&4
6383                                 dflt=y;;
6384                         esac
6385                         ;;
6386                 *)
6387                         $rm -f reflect flect
6388                         echo "#!$ls" >reflect
6389                         chmod +x,u+s reflect
6390                         echo >flect
6391                         chmod a+w flect
6392                         echo '"su" will (probably) prompt you for '"$ans's password."
6393                         su $ans -c './reflect >flect'
6394                         if $contains "/dev/fd" flect >/dev/null; then
6395                                 echo "Okay, it looks like setuid scripts are secure." >&4
6396                                 dflt=y
6397                         else
6398                                 echo "I don't think setuid scripts are secure." >&4
6399                                 dflt=n
6400                         fi
6401                         ;;
6402                 esac
6403                 rp='Does your kernel have *secure* setuid scripts?'
6404                 . ./myread
6405                 case "$ans" in
6406                 [yY]*)  val="$define";;
6407                 *)      val="$undef";;
6408                 esac
6409         fi
6410 else
6411         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6412         echo "(That's for file descriptors, not floppy disks.)"
6413         val="$undef"
6414 fi
6415 set d_suidsafe
6416 eval $setvar
6417
6418 $rm -f reflect flect
6419
6420 : now see if they want to do setuid emulation
6421 echo " "
6422 val="$undef"
6423 case "$d_suidsafe" in
6424 "$define")
6425         val="$undef"
6426         echo "No need to emulate SUID scripts since they are secure here." >&4
6427         ;;
6428 *)
6429         $cat <<EOM
6430 Some systems have disabled setuid scripts, especially systems where
6431 setuid scripts cannot be secure.  On systems where setuid scripts have
6432 been disabled, the setuid/setgid bits on scripts are currently
6433 useless.  It is possible for $package to detect those bits and emulate
6434 setuid/setgid in a secure fashion.  This emulation will only work if
6435 setuid scripts have been disabled in your kernel.
6436
6437 EOM
6438         case "$d_dosuid" in
6439         "$define") dflt=y ;;
6440         *) dflt=n ;;
6441         esac
6442         rp="Do you want to do setuid/setgid emulation?"
6443         . ./myread
6444         case "$ans" in
6445         [yY]*)  val="$define";;
6446         *)      val="$undef";;
6447         esac
6448         ;;
6449 esac
6450 set d_dosuid
6451 eval $setvar
6452
6453 : see if this is a malloc.h system
6454 set malloc.h i_malloc
6455 eval $inhdr
6456
6457 : see if stdlib is available
6458 set stdlib.h i_stdlib
6459 eval $inhdr
6460
6461 : determine which malloc to compile in
6462 echo " "
6463 case "$usemymalloc" in
6464 [yY]*|true|$define)     dflt='y' ;;
6465 [nN]*|false|$undef)     dflt='n' ;;
6466 *)      case "$ptrsize" in
6467         4) dflt='y' ;;
6468         *) dflt='n' ;;
6469         esac
6470         ;;
6471 esac
6472 rp="Do you wish to attempt to use the malloc that comes with $package?"
6473 . ./myread
6474 usemymalloc="$ans"
6475 case "$ans" in
6476 y*|true)
6477         usemymalloc='y'
6478         mallocsrc='malloc.c'
6479         mallocobj="malloc$_o"
6480         d_mymalloc="$define"
6481         case "$libs" in
6482         *-lmalloc*)
6483                 : Remove malloc from list of libraries to use
6484                 echo "Removing unneeded -lmalloc from library list" >&4
6485                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6486                 shift
6487                 libs="$*"
6488                 echo "libs = $libs" >&4
6489                 ;;
6490         esac
6491         ;;
6492 *)
6493         usemymalloc='n'
6494         mallocsrc=''
6495         mallocobj=''
6496         d_mymalloc="$undef"
6497         ;;
6498 esac
6499
6500 : compute the return types of malloc and free
6501 echo " "
6502 $cat >malloc.c <<END
6503 #$i_malloc I_MALLOC
6504 #$i_stdlib I_STDLIB
6505 #include <stdio.h>
6506 #include <sys/types.h>
6507 #ifdef I_MALLOC
6508 #include <malloc.h>
6509 #endif
6510 #ifdef I_STDLIB
6511 #include <stdlib.h>
6512 #endif
6513 #ifdef TRY_MALLOC
6514 void *malloc();
6515 #endif
6516 #ifdef TRY_FREE
6517 void free();
6518 #endif
6519 END
6520 case "$malloctype" in
6521 '')
6522         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6523                 malloctype='void *'
6524         else
6525                 malloctype='char *'
6526         fi
6527         ;;
6528 esac
6529 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6530
6531 case "$freetype" in
6532 '')
6533         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6534                 freetype='void'
6535         else
6536                 freetype='int'
6537         fi
6538         ;;
6539 esac
6540 echo "Your system uses $freetype free(), it would seem." >&4
6541 $rm -f malloc.[co]
6542 $cat <<EOM
6543
6544 After $package is installed, you may wish to install various
6545 add-on modules and utilities.  Typically, these add-ons will
6546 be installed under $prefix with the rest
6547 of this package.  However, you may wish to install such add-ons
6548 elsewhere under a different prefix.
6549
6550 If you do not wish to put everything under a single prefix, that's
6551 ok.  You will be prompted for the individual locations; this siteprefix
6552 is only used to suggest the defaults.
6553
6554 The default should be fine for most people.
6555
6556 EOM
6557 fn=d~+
6558 rp='Installation prefix to use for add-on modules and utilities?'
6559 : XXX Here might be another good place for an installstyle setting.
6560 case "$siteprefix" in
6561 '') dflt=$prefix ;;
6562 *)  dflt=$siteprefix ;;
6563 esac
6564 . ./getfile
6565 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6566 oldsiteprefix=''
6567 case "$siteprefix" in
6568 '') ;;
6569 *)      case "$ans" in
6570         "$prefix") ;;
6571         *) oldsiteprefix="$prefix";;
6572         esac
6573         ;;
6574 esac
6575 siteprefix="$ans"
6576 siteprefixexp="$ansexp"
6577
6578 : determine where site specific libraries go.
6579 : Usual default is /usr/local/lib/perl5/site_perl/$version
6580 : The default "style" setting is made in installstyle.U
6581 : XXX No longer works with Prefixit stuff.
6582 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6583 case "$sitelib" in
6584 '') case "$installstyle" in
6585         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6586         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6587         esac
6588         ;;
6589 *)      dflt="$sitelib"
6590         ;;
6591 esac
6592 $cat <<EOM
6593
6594 The installation process will create a directory for
6595 site-specific extensions and modules.  Most users find it convenient
6596 to place all site-specific files in this directory rather than in the
6597 main distribution directory.
6598
6599 EOM
6600 fn=d~+
6601 rp='Pathname for the site-specific library files?'
6602 . ./getfile
6603 sitelib="$ans"
6604 sitelibexp="$ansexp"
6605 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6606 : Change installation prefix, if necessary.
6607 if $test X"$prefix" != X"$installprefix"; then
6608         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6609 else
6610         installsitelib="$sitelibexp"
6611 fi
6612
6613 : determine where site specific architecture-dependent libraries go.
6614 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6615 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6616 : sitelib may have an optional trailing /share.
6617 case "$sitearch" in
6618 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6619         dflt="$dflt/$archname"
6620         ;;
6621 *)      dflt="$sitearch"
6622         ;;
6623 esac
6624 set sitearch sitearch none
6625 eval $prefixit
6626 $cat <<EOM
6627
6628 The installation process will also create a directory for
6629 architecture-dependent site-specific extensions and modules.
6630
6631 EOM
6632 fn=d~+
6633 rp='Pathname for the site-specific architecture-dependent library files?'
6634 . ./getfile
6635 sitearch="$ans"
6636 sitearchexp="$ansexp"
6637 : Change installation prefix, if necessary.
6638 if $test X"$prefix" != X"$installprefix"; then
6639         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6640 else
6641         installsitearch="$sitearchexp"
6642 fi
6643
6644 $cat <<EOM
6645
6646 The installation process will also create a directory for
6647 vendor-supplied add-ons.  Vendors who supply perl with their system
6648 may find it convenient to place all vendor-supplied files in this
6649 directory rather than in the main distribution directory.  This will
6650 ease upgrades between binary-compatible maintenance versions of perl.
6651
6652 Of course you may also use these directories in whatever way you see
6653 fit.  For example, you might use them to access modules shared over a
6654 company-wide network.
6655
6656 The default answer should be fine for most people.
6657 This causes further questions about vendor add-ons to be skipped
6658 and no vendor-specific directories will be configured for perl.
6659
6660 EOM
6661 rp='Do you want to configure vendor-specific add-on directories?'
6662 case "$usevendorprefix" in
6663 define|true|[yY]*) dflt=y ;;
6664 *)      : User may have set vendorprefix directly on Configure command line.
6665         case "$vendorprefix" in
6666         ''|' ') dflt=n ;;
6667         *)      dflt=y ;;
6668         esac
6669         ;;
6670 esac
6671 . ./myread
6672 case "$ans" in
6673 [yY]*)  fn=d~+
6674         rp='Installation prefix to use for vendor-supplied add-ons?'
6675         case "$vendorprefix" in
6676         '') dflt='' ;;
6677         *)  dflt=$vendorprefix ;;
6678         esac
6679         . ./getfile
6680         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6681         oldvendorprefix=''
6682         case "$vendorprefix" in
6683         '') ;;
6684         *)      case "$ans" in
6685                 "$prefix") ;;
6686                 *) oldvendorprefix="$prefix";;
6687                 esac
6688                 ;;
6689         esac
6690         usevendorprefix="$define"
6691         vendorprefix="$ans"
6692         vendorprefixexp="$ansexp"
6693         ;;
6694 *)      usevendorprefix="$undef"
6695         vendorprefix=''
6696         vendorprefixexp=''
6697         ;;
6698 esac
6699
6700 case "$vendorprefix" in
6701 '')     d_vendorlib="$undef"
6702         vendorlib=''
6703         vendorlibexp=''
6704         ;;
6705 *)      d_vendorlib="$define"
6706         : determine where vendor-supplied modules go.
6707         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6708         case "$vendorlib" in
6709         '')
6710                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6711                 case "$installstyle" in
6712                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6713                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6714                 esac
6715                 ;;
6716         *)      dflt="$vendorlib"
6717                 ;;
6718         esac
6719         fn=d~+
6720         rp='Pathname for the vendor-supplied library files?'
6721         . ./getfile
6722         vendorlib="$ans"
6723         vendorlibexp="$ansexp"
6724         ;;
6725 esac
6726 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6727 : Change installation prefix, if necessary.
6728 if $test X"$prefix" != X"$installprefix"; then
6729         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6730 else
6731         installvendorlib="$vendorlibexp"
6732 fi
6733
6734 case "$vendorprefix" in
6735 '')     d_vendorarch="$undef"
6736         vendorarch=''
6737         vendorarchexp=''
6738         ;;
6739 *)      d_vendorarch="$define"
6740         : determine where vendor-supplied architecture-dependent libraries go.
6741         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6742         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6743         : vendorlib may have an optional trailing /share.
6744         case "$vendorarch" in
6745         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6746                 dflt="$dflt/$archname"
6747                 ;;
6748         *)      dflt="$vendorarch" ;;
6749         esac
6750         fn=d~+
6751         rp='Pathname for vendor-supplied architecture-dependent files?'
6752         . ./getfile
6753         vendorarch="$ans"
6754         vendorarchexp="$ansexp"
6755         ;;
6756 esac
6757 : Change installation prefix, if necessary.
6758 if $test X"$prefix" != X"$installprefix"; then
6759         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6760 else
6761         installvendorarch="$vendorarchexp"
6762 fi
6763
6764 : Final catch-all directories to search
6765 $cat <<EOM
6766
6767 Lastly, you can have perl look in other directories for extensions and
6768 modules in addition to those already specified.
6769 These directories will be searched after 
6770         $sitearch 
6771         $sitelib 
6772 EOM
6773 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6774 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6775 echo ' '
6776 case "$otherlibdirs" in
6777 ''|' ') dflt='none' ;;
6778 *)      dflt="$otherlibdirs" ;;
6779 esac
6780 $cat <<EOM
6781 Enter a colon-separated set of extra paths to include in perl's @INC
6782 search path, or enter 'none' for no extra paths.
6783
6784 EOM
6785
6786 rp='Colon-separated list of additional directories for perl to search?'
6787 . ./myread
6788 case "$ans" in
6789 ' '|''|none)    otherlibdirs=' ' ;;     
6790 *)      otherlibdirs="$ans" ;;
6791 esac
6792 case "$otherlibdirs" in
6793 ' ') val=$undef ;;
6794 *)      val=$define ;;
6795 esac
6796 set d_perl_otherlibdirs
6797 eval $setvar
6798
6799 : Cruising for prototypes
6800 echo " "
6801 echo "Checking out function prototypes..." >&4
6802 $cat >prototype.c <<'EOCP'
6803 int main(int argc, char *argv[]) {
6804         exit(0);}
6805 EOCP
6806 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6807         echo "Your C compiler appears to support function prototypes."
6808         val="$define"
6809 else
6810         echo "Your C compiler doesn't seem to understand function prototypes."
6811         val="$undef"
6812 fi
6813 set prototype
6814 eval $setvar
6815 $rm -f prototype*
6816
6817 case "$prototype" in
6818 "$define") ;;
6819 *)      ansi2knr='ansi2knr'
6820         echo " "
6821         cat <<EOM >&4
6822
6823 $me:  FATAL ERROR:
6824 This version of $package can only be compiled by a compiler that 
6825 understands function prototypes.  Unfortunately, your C compiler 
6826         $cc $ccflags
6827 doesn't seem to understand them.  Sorry about that.
6828
6829 If GNU cc is available for your system, perhaps you could try that instead.  
6830
6831 Eventually, we hope to support building Perl with pre-ANSI compilers.
6832 If you would like to help in that effort, please contact <perlbug@perl.org>.
6833
6834 Aborting Configure now.
6835 EOM
6836         exit 2
6837         ;;
6838 esac
6839
6840 : determine where public executables go
6841 echo " "
6842 set dflt bin bin
6843 eval $prefixit
6844 fn=d~
6845 rp='Pathname where the public executables will reside?'
6846 . ./getfile
6847 if $test "X$ansexp" != "X$binexp"; then
6848         installbin=''
6849 fi
6850 bin="$ans"
6851 binexp="$ansexp"
6852 : Change installation prefix, if necessary.
6853 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6854 if $test X"$prefix" != X"$installprefix"; then
6855         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6856 else
6857         installbin="$binexp"
6858 fi
6859
6860 echo " "
6861 case "$extras" in
6862 '') dflt='n';;
6863 *) dflt='y';;
6864 esac
6865 cat <<EOM
6866 Perl can be built with extra modules or bundles of modules which
6867 will be fetched from the CPAN and installed alongside Perl.
6868
6869 Notice that you will need access to the CPAN; either via the Internet,
6870 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6871 be asked later to configure the CPAN.pm module which will in turn do
6872 the installation of the rest of the extra modules or bundles.)
6873
6874 Notice also that if the modules require any external software such as
6875 libraries and headers (the libz library and the zlib.h header for the
6876 Compress::Zlib module, for example) you MUST have any such software
6877 already installed, this configuration process will NOT install such
6878 things for you.
6879
6880 If this doesn't make any sense to you, just accept the default '$dflt'.
6881 EOM
6882 rp='Install any extra modules (y or n)?'
6883 . ./myread
6884 case "$ans" in
6885 y|Y)
6886         cat <<EOM
6887
6888 Please list any extra modules or bundles to be installed from CPAN,
6889 with spaces between the names.  The names can be in any format the
6890 'install' command of CPAN.pm will understand.  (Answer 'none',
6891 without the quotes, to install no extra modules or bundles.)
6892 EOM
6893         rp='Extras?'
6894         dflt="$extras"
6895         . ./myread
6896         extras="$ans"
6897 esac
6898 case "$extras" in
6899 ''|'none')
6900         val=''
6901         $rm -f ../extras.lst
6902         ;;
6903 *)      echo "(Saving the list of extras for later...)"
6904         echo "$extras" > ../extras.lst
6905         val="'$extras'"
6906         ;;
6907 esac
6908 set extras
6909 eval $setvar
6910 echo " "
6911
6912 : Find perl5.005 or later.
6913 echo "Looking for a previously installed perl5.005 or later... "
6914 case "$perl5" in
6915 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6916                 : Check if this perl is recent and can load a simple module
6917                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6918                         perl5=$tdir/perl
6919                         break;
6920                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6921                         perl5=$tdir/perl5
6922                         break;
6923                 fi
6924         done
6925         ;;
6926 *)      perl5="$perl5"
6927         ;;
6928 esac
6929 case "$perl5" in
6930 '')     echo "None found.  That's ok.";;
6931 *)      echo "Using $perl5." ;;
6932 esac
6933
6934 : Determine list of previous versions to include in @INC
6935 $cat > getverlist <<EOPL
6936 #!$perl5 -w
6937 use File::Basename;
6938 \$api_versionstring = "$api_versionstring";
6939 \$version = "$version";
6940 \$stem = "$sitelib_stem";
6941 \$archname = "$archname";
6942 EOPL
6943         $cat >> getverlist <<'EOPL'
6944 # Can't have leading @ because metaconfig interprets it as a command!
6945 ;@inc_version_list=();
6946 # XXX Redo to do opendir/readdir? 
6947 if (-d $stem) {
6948     chdir($stem);
6949     ;@candidates = glob("5.*");
6950 }
6951 else {
6952     ;@candidates = ();
6953 }
6954
6955 # XXX ToDo:  These comparisons must be reworked when two-digit
6956 # subversions come along, so that 5.7.10 compares as greater than
6957 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6958 # widespread that we can use the built-in version vectors rather
6959 # than reinventing them here.  For 5.6.0, however, we must
6960 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6961 foreach $d (@candidates) {
6962     if ($d lt $version) {
6963         if ($d ge $api_versionstring) {
6964             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6965         }
6966         elsif ($d ge "5.005") {
6967             unshift(@inc_version_list, grep { -d } $d);
6968         }
6969     }
6970     else {
6971         # Skip newer version.  I.e. don't look in
6972         # 5.7.0 if we're installing 5.6.1.
6973     }
6974 }
6975
6976 if (@inc_version_list) {
6977     print join(' ', @inc_version_list);
6978 }
6979 else {
6980     # Blank space to preserve value for next Configure run.
6981     print " ";
6982 }
6983 EOPL
6984 chmod +x getverlist
6985 case "$inc_version_list" in
6986 '')     if test -x "$perl5$exe_ext"; then
6987                 dflt=`$perl5 getverlist`
6988         else
6989                 dflt='none'
6990         fi
6991         ;;
6992 $undef) dflt='none' ;;
6993 *)  eval dflt=\"$inc_version_list\" ;;
6994 esac
6995 case "$dflt" in
6996 ''|' ') dflt=none ;;
6997 esac
6998 case "$dflt" in
6999 5.005) case "$bincompat5005" in
7000        $define|true|[yY]*) ;;
7001        *) dflt=none ;;
7002        esac
7003        ;;
7004 esac
7005 $cat <<'EOM'
7006
7007 In order to ease the process of upgrading, this version of perl 
7008 can be configured to use modules built and installed with earlier 
7009 versions of perl that were installed under $prefix.  Specify here
7010 the list of earlier versions that this version of perl should check.
7011 If Configure detected no earlier versions of perl installed under
7012 $prefix, then the list will be empty.  Answer 'none' to tell perl
7013 to not search earlier versions.
7014
7015 The default should almost always be sensible, so if you're not sure,
7016 just accept the default.
7017 EOM
7018
7019 rp='List of earlier versions to include in @INC?'
7020 . ./myread
7021 case "$ans" in
7022 [Nn]one|''|' ') inc_version_list=' ' ;;
7023 *) inc_version_list="$ans" ;;
7024 esac
7025 case "$inc_version_list" in
7026 ''|' ') 
7027         inc_version_list_init='0';;
7028 *)      inc_version_list_init=`echo $inc_version_list |
7029                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7030         ;;
7031 esac
7032 $rm -f getverlist
7033
7034 : determine whether to install perl also as /usr/bin/perl
7035
7036 echo " "
7037 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7038         $cat <<EOM
7039 Many scripts expect perl to be installed as /usr/bin/perl.
7040 I can install the perl you are about to compile also as /usr/bin/perl
7041 (in addition to $installbin/perl).
7042 EOM
7043         case "$installusrbinperl" in
7044         "$undef"|[nN]*) dflt='n';;
7045         *)              dflt='y';;
7046         esac
7047         rp="Do you want to install perl as /usr/bin/perl?"
7048         . ./myread
7049         case "$ans" in
7050         [yY]*)  val="$define";;
7051         *)      val="$undef" ;;
7052         esac
7053 else
7054         val="$undef"
7055 fi
7056 set installusrbinperl
7057 eval $setvar
7058
7059 : see if dld is available
7060 set dld.h i_dld
7061 eval $inhdr
7062
7063 : see if dlopen exists
7064 xxx_runnm="$runnm"
7065 runnm=false
7066 set dlopen d_dlopen
7067 eval $inlibc
7068 runnm="$xxx_runnm"
7069
7070 : determine which dynamic loading, if any, to compile in
7071 echo " "
7072 dldir="ext/DynaLoader"
7073 case "$usedl" in
7074 $define|y|true)
7075         dflt='y'
7076         usedl="$define"
7077         ;;
7078 $undef|n|false)
7079         dflt='n'
7080         usedl="$undef"
7081         ;;
7082 *) 
7083         dflt='n'
7084         case "$d_dlopen" in
7085             $define) dflt='y' ;;
7086         esac
7087         case "$i_dld" in
7088             $define) dflt='y' ;;
7089         esac
7090         : Does a dl_xxx.xs file exist for this operating system
7091         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7092         ;;
7093 esac
7094 rp="Do you wish to use dynamic loading?"
7095 . ./myread
7096 usedl="$ans"
7097 case "$ans" in
7098 y*) usedl="$define"
7099         case "$dlsrc" in
7100         '')
7101                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7102                         dflt="$dldir/dl_${osname}.xs"
7103                 elif $test "$d_dlopen" = "$define" ; then
7104                         dflt="$dldir/dl_dlopen.xs"
7105                 elif $test "$i_dld" = "$define" ; then
7106                         dflt="$dldir/dl_dld.xs"
7107                 else
7108                         dflt=''
7109                 fi
7110                 ;;
7111         *)      dflt="$dldir/$dlsrc"
7112                 ;;
7113         esac
7114     echo "The following dynamic loading files are available:"
7115         : Can not go over to $dldir because getfile has path hard-coded in.
7116         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7117         rp="Source file to use for dynamic loading"
7118         fn="fne"
7119         gfpth="$src"
7120         . ./getfile
7121         usedl="$define"
7122         : emulate basename
7123         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7124
7125         $cat << EOM
7126
7127 Some systems may require passing special flags to $cc -c to
7128 compile modules that will be used to create a shared library.
7129 To use no flags, say "none".
7130
7131 EOM
7132     case "$cccdlflags" in
7133     '') case "$gccversion" in
7134                 '') case "$osname" in
7135                         hpux)   dflt='+z' ;;
7136                         next)   dflt='none' ;;
7137                         irix*)  dflt='-KPIC' ;;
7138                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7139                         sunos)  dflt='-pic' ;;
7140                         *)      dflt='none' ;;
7141                     esac
7142                         ;;
7143                 *)  case "$osname" in
7144                         darwin) dflt='none' ;;
7145                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7146                         *)      dflt='-fpic' ;;
7147                     esac ;;
7148             esac ;;
7149         ' ') dflt='none' ;;
7150     *)  dflt="$cccdlflags" ;;
7151     esac
7152     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7153     . ./myread
7154     case "$ans" in
7155     none) cccdlflags=' ' ;;
7156     *) cccdlflags="$ans" ;;
7157     esac
7158
7159     cat << EOM
7160
7161 Some systems use ld to create libraries that can be dynamically loaded,
7162 while other systems (such as those using ELF) use $cc.
7163
7164 EOM
7165         case "$ld" in
7166         '')     $cat >try.c <<'EOM'
7167 /* Test for whether ELF binaries are produced */
7168 #include <fcntl.h>
7169 #include <stdlib.h>
7170 int main() {
7171         char b[4];
7172         int i = open("a.out",O_RDONLY);
7173         if(i == -1) 
7174                 exit(1); /* fail */
7175         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7176                 exit(0); /* succeed (yes, it's ELF) */
7177         else
7178                 exit(1); /* fail */
7179 }
7180 EOM
7181                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7182                         cat <<EOM
7183 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7184 EOM
7185                         dflt="$cc"
7186                 else
7187                         echo "I'll use ld to build dynamic libraries."
7188                         dflt='ld'
7189                 fi
7190                 rm -f try.c a.out
7191                 ;;
7192         *)      dflt="$ld"
7193                 ;;
7194         esac
7195
7196     rp="What command should be used to create dynamic libraries?"
7197     . ./myread
7198         ld="$ans"
7199
7200     cat << EOM
7201
7202 Some systems may require passing special flags to $ld to create a
7203 library that can be dynamically loaded.  If your ld flags include
7204 -L/other/path options to locate libraries outside your loader's normal
7205 search path, you may need to specify those -L options here as well.  To
7206 use no flags, say "none".
7207
7208 EOM
7209     case "$lddlflags" in
7210     '') case "$osname" in
7211                         beos) dflt='-nostart' ;;
7212                         hpux) dflt='-b';
7213                               case "$gccversion" in
7214                               '') dflt="$dflt +vnocompatwarnings" ;;
7215                               esac
7216                               ;;        
7217                         linux|irix*)    dflt='-shared' ;;
7218                         next)  dflt='none' ;;
7219                         solaris) dflt='-G' ;;
7220                         sunos) dflt='-assert nodefinitions' ;;
7221                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7222                 *)     dflt='none' ;;
7223                         esac
7224                         ;;
7225     *) dflt="$lddlflags" ;;
7226     esac
7227
7228         : Try to guess additional flags to pick up local libraries.
7229         : Be careful not to append to a plain 'none'
7230         case "$dflt" in
7231         none) dflt='' ;;
7232         esac
7233         for thisflag in $ldflags; do
7234                 case "$thisflag" in
7235                 -L*|-R*|-Wl,-R*)
7236                         case " $dflt " in
7237                         *" $thisflag "*) ;;
7238                         *) dflt="$dflt $thisflag" ;;
7239                         esac
7240                         ;;
7241                 esac
7242         done
7243
7244         case "$dflt" in
7245         ''|' ') dflt='none' ;;
7246         esac
7247
7248     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7249     . ./myread
7250     case "$ans" in
7251     none) lddlflags=' ' ;;
7252     *) lddlflags="$ans" ;;
7253     esac
7254
7255         cat <<EOM
7256
7257 Some systems may require passing special flags to $cc to indicate that
7258 the resulting executable will use dynamic linking.  To use no flags,
7259 say "none".
7260
7261 EOM
7262     case "$ccdlflags" in
7263     '') case "$osname" in
7264                 hpux)   dflt='-Wl,-E' ;;
7265                 linux)  dflt='-rdynamic' ;;
7266                 next)   dflt='none' ;;
7267                 sunos)  dflt='none' ;;
7268                 *)      dflt='none' ;;
7269             esac ;;
7270     ' ')  dflt='none' ;;
7271     *)  dflt="$ccdlflags" ;;
7272     esac
7273     rp="Any special flags to pass to $cc to use dynamic linking?"
7274     . ./myread
7275     case "$ans" in
7276     none) ccdlflags=' ' ;;
7277     *) ccdlflags="$ans" ;;
7278     esac
7279     ;;
7280 *)  usedl="$undef"
7281         ld='ld'
7282     dlsrc='dl_none.xs'
7283     lddlflags=''
7284     ccdlflags=''
7285     ;;
7286 esac
7287
7288 also=''
7289 case "$usedl" in
7290 $undef)
7291         # No dynamic loading being used, so don't bother even to prompt.
7292         useshrplib='false'
7293         ;;
7294 *)      case "$useshrplib" in
7295         '')     case "$osname" in
7296                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7297                         dflt=y
7298                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7299                         ;;
7300                 next*)
7301                         case "$osvers" in
7302                         4*)     dflt=y
7303                                 also='Building a shared libperl is needed for MAB support.'
7304                                 ;;
7305                         *)      dflt=n
7306                                 ;;
7307                         esac
7308                         ;;
7309                 *)      dflt=n
7310                         ;;
7311                 esac
7312                 ;;
7313         $define|true|[Yy]*)
7314                 dflt=y
7315                 ;;
7316         *)      dflt=n
7317                 ;;
7318         esac
7319         $cat << EOM
7320
7321 The perl executable is normally obtained by linking perlmain.c with
7322 libperl${_a}, any static extensions (usually just DynaLoader), and
7323 any other libraries needed on this system (such as -lm, etc.).  Since
7324 your system supports dynamic loading, it is probably possible to build
7325 a shared libperl.$so.  If you will have more than one executable linked
7326 to libperl.$so, this will significantly reduce the size of each
7327 executable, but it may have a noticeable affect on performance.  The
7328 default is probably sensible for your system.
7329 $also
7330
7331 EOM
7332         rp="Build a shared libperl.$so (y/n)"
7333         . ./myread
7334         case "$ans" in
7335         true|$define|[Yy]*)
7336                 useshrplib='true'  ;;
7337         *)      useshrplib='false' ;;
7338         esac
7339         ;;
7340 esac
7341
7342 case "$useshrplib" in
7343 true)
7344         case "$libperl" in
7345         '')
7346                 # Figure out a good name for libperl.so.  Since it gets stored in
7347                 # a version-specific architecture-dependent library, the version
7348                 # number isn't really that important, except for making cc/ld happy.
7349                 #
7350                 # A name such as libperl.so.3.1
7351                 majmin="libperl.$so.$patchlevel.$subversion"
7352                 # A name such as libperl.so.301
7353                 majonly=`echo $patchlevel $subversion |
7354                         $awk '{printf "%d%02d", $1, $2}'`
7355                 majonly=libperl.$so.$majonly
7356                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7357                 # rely on figuring it out from the naming of libc.
7358                 case "${osname}${osvers}" in
7359                 next4*)
7360                         dflt=libperl.5.$so
7361                         # XXX How handle the --version stuff for MAB?
7362                         ;;
7363                 linux*)  # ld won't link with a bare -lperl otherwise.
7364                         dflt=libperl.$so
7365                         ;;
7366                 cygwin*) # include version
7367                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7368                         ;;
7369                 *)      # Try to guess based on whether libc has major.minor.
7370                         case "$libc" in
7371                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7372                         *libc.$so.[0-9]*) dflt=$majonly ;;
7373                         *)      dflt=libperl.$so ;;
7374                         esac
7375                         ;;
7376                 esac
7377                 ;;
7378         *)      dflt=$libperl
7379                 ;;
7380         esac
7381         cat << EOM
7382
7383 I need to select a good name for the shared libperl.  If your system uses
7384 library names with major and minor numbers, then you might want something
7385 like $majmin.  Alternatively, if your system uses a single version
7386 number for shared libraries, then you might want to use $majonly.
7387 Or, your system might be quite happy with a simple libperl.$so.
7388
7389 Since the shared libperl will get installed into a version-specific
7390 architecture-dependent directory, the version number of the shared perl
7391 library probably isn't important, so the default should be o.k.
7392
7393 EOM
7394         rp='What name do you want to give to the shared libperl?'
7395         . ./myread
7396         libperl=$ans
7397         echo "Ok, I'll use $libperl"
7398         ;;
7399 *)
7400         libperl="libperl${_a}"
7401         ;;
7402 esac
7403
7404 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7405 case "$shrpdir" in
7406 '') ;;
7407 *)      $cat >&4 <<EOM
7408 WARNING:  Use of the shrpdir variable for the installation location of
7409 the shared $libperl is not supported.  It was never documented and
7410 will not work in this version.  Let me (perlbug@perl.org)
7411 know of any problems this may cause.
7412
7413 EOM
7414         case "$shrpdir" in
7415         "$archlibexp/CORE")
7416                 $cat >&4 <<EOM
7417 But your current setting of $shrpdir is
7418 the default anyway, so it's harmless.
7419 EOM
7420                 ;;
7421         *)
7422                 $cat >&4 <<EOM
7423 Further, your current attempted setting of $shrpdir
7424 conflicts with the value of $archlibexp/CORE
7425 that installperl will use.
7426 EOM
7427                 ;;
7428         esac
7429         ;;
7430 esac
7431
7432 # How will the perl executable find the installed shared $libperl?
7433 # Add $xxx to ccdlflags.
7434 # If we can't figure out a command-line option, use $shrpenv to
7435 # set env LD_RUN_PATH.  The main perl makefile uses this.
7436 shrpdir=$archlibexp/CORE
7437 xxx=''
7438 tmp_shrpenv=''
7439 if "$useshrplib"; then
7440     case "$osname" in 
7441         aix)
7442                 # We'll set it in Makefile.SH...
7443                 ;;
7444         solaris)
7445                 xxx="-R $shrpdir"
7446                 ;;
7447         freebsd|netbsd)
7448                 xxx="-Wl,-R$shrpdir"
7449                 ;;
7450         linux|irix*|dec_osf)
7451                 xxx="-Wl,-rpath,$shrpdir"
7452                 ;;
7453         next)
7454                 # next doesn't like the default...
7455                 ;;
7456         beos)
7457                 # beos doesn't like the default, either.
7458                 ;;
7459         hpux*)
7460                 # hpux doesn't like the default, either.
7461                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7462                 ;;
7463         *)
7464                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7465                 ;;
7466         esac
7467         case "$xxx" in
7468         '') ;;
7469         *)      
7470                 # Only add $xxx if it isn't already in ccdlflags.
7471                 case " $ccdlflags " in
7472                 *" $xxx "*)     ;;
7473                 *)      ccdlflags="$ccdlflags $xxx"
7474                         cat <<EOM >&4
7475
7476 Adding $xxx to the flags
7477 passed to $ld so that the perl executable will find the 
7478 installed shared $libperl.
7479
7480 EOM
7481                         ;;
7482                 esac
7483                 ;;
7484         esac
7485 fi
7486 # Fix ccdlflags in AIX for building external extensions.
7487 # (For building Perl itself bare -bE:perl.exp is needed,
7488 #  Makefile.SH takes care of this.)
7489 case "$osname" in
7490 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7491 esac
7492 # Respect a hint or command-line value.
7493 case "$shrpenv" in
7494 '') shrpenv="$tmp_shrpenv" ;;
7495 esac
7496 case "$ldlibpthname" in
7497 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7498 none)   ldlibpthname='' ;;
7499 esac
7500
7501 : determine where manual pages are on this system
7502 echo " "
7503 case "$sysman" in
7504 '') 
7505         syspath='/usr/share/man/man1 /usr/man/man1'
7506         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7507         syspath="$syspath /usr/man/u_man/man1"
7508         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7509         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7510         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7511         sysman=`./loc . /usr/man/man1 $syspath`
7512         ;;
7513 esac
7514 if $test -d "$sysman"; then
7515         echo "System manual is in $sysman." >&4
7516 else
7517         echo "Could not find manual pages in source form." >&4
7518 fi
7519
7520 : determine where manual pages go
7521 set man1dir man1dir none
7522 eval $prefixit
7523 $cat <<EOM
7524
7525 $spackage has manual pages available in source form.
7526 EOM
7527 case "$nroff" in
7528 nroff)
7529         echo "However, you don't have nroff, so they're probably useless to you."
7530         case "$man1dir" in
7531         '') man1dir="none";;
7532         esac;;
7533 esac
7534 echo "If you don't want the manual sources installed, answer 'none'."
7535 case "$man1dir" in
7536 ' ') dflt=none
7537         ;;
7538 '')
7539         lookpath="$prefixexp/share/man/man1"
7540         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7541         lookpath="$lookpath $prefixexp/man/p_man/man1"
7542         lookpath="$lookpath $prefixexp/man/u_man/man1"
7543         lookpath="$lookpath $prefixexp/man/man.1"
7544         case "$sysman" in
7545         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7546         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7547         esac
7548         set dflt
7549         eval $prefixup
7550         ;;
7551 *)  dflt="$man1dir"
7552         ;;
7553 esac
7554 echo " "
7555 fn=dn+~
7556 rp="Where do the main $spackage manual pages (source) go?"
7557 . ./getfile
7558 if $test "X$man1direxp" != "X$ansexp"; then
7559         installman1dir=''
7560 fi
7561 man1dir="$ans"
7562 man1direxp="$ansexp"
7563 case "$man1dir" in
7564 '')     man1dir=' '
7565         installman1dir='';;
7566 esac
7567
7568 : Change installation prefix, if necessary.
7569 if $test X"$prefix" != X"$installprefix"; then
7570         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7571 else
7572         installman1dir="$man1direxp"
7573 fi
7574
7575 : What suffix to use on installed man pages
7576
7577 case "$man1dir" in
7578 ' ')
7579         man1ext='0'
7580         ;;
7581 *)
7582         rp="What suffix should be used for the main $spackage man pages?"
7583         case "$man1ext" in
7584         '')     case "$man1dir" in
7585                 *1)  dflt=1 ;;
7586                 *1p) dflt=1p ;;
7587                 *1pm) dflt=1pm ;;
7588                 *l) dflt=l;;
7589                 *n) dflt=n;;
7590                 *o) dflt=o;;
7591                 *p) dflt=p;;
7592                 *C) dflt=C;;
7593                 *L) dflt=L;;
7594                 *L1) dflt=L1;;
7595                 *) dflt=1;;
7596                 esac
7597                 ;;
7598         *)      dflt="$man1ext";;
7599         esac
7600         . ./myread
7601         man1ext="$ans"
7602         ;;
7603 esac
7604
7605 : see if we can have long filenames
7606 echo " "
7607 first=123456789abcdef
7608 $rm -f $first
7609 if (echo hi >$first) 2>/dev/null; then
7610         if $test -f 123456789abcde; then
7611                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7612                 val="$undef"
7613         else
7614                 echo 'You can have filenames longer than 14 characters.'>&4
7615                 val="$define"
7616         fi
7617 else
7618         $cat <<'EOM'
7619 You can't have filenames longer than 14 chars.
7620 You can't even think about them!
7621 EOM
7622         val="$undef"
7623 fi 
7624 set d_flexfnam
7625 eval $setvar
7626 $rm -rf 123456789abcde*
7627
7628 : determine where library module manual pages go
7629 set man3dir man3dir none
7630 eval $prefixit
7631 $cat <<EOM
7632
7633 $spackage has manual pages for many of the library modules.
7634 EOM
7635
7636 case "$nroff" in
7637 nroff)
7638         $cat <<'EOM'
7639 However, you don't have nroff, so they're probably useless to you.
7640 EOM
7641         case "$man3dir" in
7642         '') man3dir="none";;
7643         esac;;
7644 esac
7645
7646 case "$d_flexfnam" in
7647 undef)
7648         $cat <<'EOM'
7649 However, your system can't handle the long file names like File::Basename.3. 
7650 EOM
7651         case "$man3dir" in
7652         '') man3dir="none";;
7653         esac;;
7654 esac
7655
7656 echo "If you don't want the manual sources installed, answer 'none'."
7657 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7658 case "$man3dir" in
7659 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7660         if $test -d "$privlib/man/man3"; then
7661                 cat <<EOM >&4
7662
7663 WARNING:  Previous versions of perl installed man3 pages into
7664 $privlib/man/man3.  This version will suggest a 
7665 new default of $dflt.  
7666 EOM
7667                 tdflt=$dflt
7668                 dflt='n'
7669                 rp='Do you wish to preserve the old behavior?(y/n)'
7670                 . ./myread
7671                 case "$ans" in
7672                 y*) dflt="$privlib/man/man3" ;;
7673                 *)  dflt=$tdflt ;;
7674                 esac
7675     fi
7676         ;;
7677 *)      dflt="$man3dir" ;;
7678 esac
7679 case "$dflt" in
7680 ' ') dflt=none ;;
7681 esac
7682 echo " "
7683 fn=dn+~
7684 rp="Where do the $package library man pages (source) go?"
7685 . ./getfile
7686 man3dir="$ans"
7687 man3direxp="$ansexp"
7688 case "$man3dir" in
7689 '')     man3dir=' '
7690         installman3dir='';;
7691 esac
7692
7693 : Change installation prefix, if necessary.
7694 if $test X"$prefix" != X"$installprefix"; then
7695         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7696 else
7697         installman3dir="$man3direxp"
7698 fi
7699
7700 : What suffix to use on installed man pages
7701 case "$man3dir" in
7702 ' ')
7703         man3ext='0'
7704         ;;
7705 *)
7706         rp="What suffix should be used for the $package library man pages?"
7707         case "$man3ext" in
7708         '')     case "$man3dir" in
7709                 *3)  dflt=3 ;;
7710                 *3p) dflt=3p ;;
7711                 *3pm) dflt=3pm ;;
7712                 *l) dflt=l;;
7713                 *n) dflt=n;;
7714                 *o) dflt=o;;
7715                 *p) dflt=p;;
7716                 *C) dflt=C;;
7717                 *L) dflt=L;;
7718                 *L3) dflt=L3;;
7719                 *) dflt=3;;
7720                 esac
7721                 ;;
7722         *)      dflt="$man3ext";;
7723         esac
7724         . ./myread
7725         man3ext="$ans"
7726         ;;
7727 esac
7728
7729 : see if we have to deal with yellow pages, now NIS.
7730 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7731         if $test -f /usr/etc/nibindd; then
7732                 echo " "
7733                 echo "I'm fairly confident you're on a NeXT."
7734                 echo " "
7735                 rp='Do you get the hosts file via NetInfo?'
7736                 dflt=y
7737                 case "$hostcat" in
7738                 nidump*) ;;
7739                 '') ;;
7740                 *) dflt=n;;
7741                 esac
7742                 . ./myread
7743                 case "$ans" in
7744                 y*) hostcat='nidump hosts .';;
7745                 *)      case "$hostcat" in
7746                         nidump*) hostcat='';;
7747                         esac
7748                         ;;
7749                 esac
7750         fi
7751         case "$hostcat" in
7752         nidump*) ;;
7753         *)
7754                 case "$hostcat" in
7755                 *ypcat*) dflt=y;;
7756                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7757                                 dflt=y
7758                         else
7759                                 dflt=n
7760                         fi;;
7761                 *) dflt=n;;
7762                 esac
7763                 echo " "
7764                 rp='Are you getting the hosts file via yellow pages?'
7765                 . ./myread
7766                 case "$ans" in
7767                 y*) hostcat='ypcat hosts';;
7768                 *) hostcat='cat /etc/hosts';;
7769                 esac
7770                 ;;
7771         esac
7772 fi
7773 case "$hostcat" in
7774 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7775 esac
7776 case "$groupcat" in
7777 '') test -f /etc/group && groupcat='cat /etc/group';;
7778 esac
7779 case "$passcat" in
7780 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7781 esac
7782
7783 : now get the host name
7784 echo " "
7785 echo "Figuring out host name..." >&4
7786 case "$myhostname" in
7787 '') cont=true
7788         echo 'Maybe "hostname" will work...'
7789         if tans=`sh -c hostname 2>&1` ; then
7790                 myhostname=$tans
7791                 phostname=hostname
7792                 cont=''
7793         fi
7794         ;;
7795 *) cont='';;
7796 esac
7797 if $test "$cont"; then
7798         if ./xenix; then
7799                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7800                 if tans=`cat /etc/systemid 2>&1` ; then
7801                         myhostname=$tans
7802                         phostname='cat /etc/systemid'
7803                         echo "Whadyaknow.  Xenix always was a bit strange..."
7804                         cont=''
7805                 fi
7806         elif $test -r /etc/systemid; then
7807                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7808         fi
7809 fi
7810 if $test "$cont"; then
7811         echo 'No, maybe "uuname -l" will work...'
7812         if tans=`sh -c 'uuname -l' 2>&1` ; then
7813                 myhostname=$tans
7814                 phostname='uuname -l'
7815         else
7816                 echo 'Strange.  Maybe "uname -n" will work...'
7817                 if tans=`sh -c 'uname -n' 2>&1` ; then
7818                         myhostname=$tans
7819                         phostname='uname -n'
7820                 else
7821                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7822                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7823                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7824                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7825                         else
7826                                 case "$myhostname" in
7827                                 '') echo "Does this machine have an identity crisis or something?"
7828                                         phostname='';;
7829                                 *)
7830                                         echo "Well, you said $myhostname before..."
7831                                         phostname='echo $myhostname';;
7832                                 esac
7833                         fi
7834                 fi
7835         fi
7836 fi
7837 : you do not want to know about this
7838 set $myhostname
7839 myhostname=$1
7840
7841 : verify guess
7842 if $test "$myhostname" ; then
7843         dflt=y
7844         rp='Your host name appears to be "'$myhostname'".'" Right?"
7845         . ./myread
7846         case "$ans" in
7847         y*) ;;
7848         *) myhostname='';;
7849         esac
7850 fi
7851
7852 : bad guess or no guess
7853 while $test "X$myhostname" = X ; do
7854         dflt=''
7855         rp="Please type the (one word) name of your host:"
7856         . ./myread
7857         myhostname="$ans"
7858 done
7859
7860 : translate upper to lower if necessary
7861 case "$myhostname" in
7862 *[A-Z]*)
7863         echo "(Normalizing case in your host name)"
7864         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7865         ;;
7866 esac
7867
7868 case "$myhostname" in
7869 *.*)
7870         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7871         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7872         echo "(Trimming domain name from host name--host name is now $myhostname)"
7873         ;;
7874 *) case "$mydomain" in
7875         '')
7876                 {
7877                         test "X$hostcat" = "Xypcat hosts" &&
7878                         ypmatch "$myhostname" hosts 2>/dev/null |\
7879                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7880                         $test -s hosts
7881                 } || {
7882                         test "X$hostcat" != "X" &&
7883                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7884                                         /[       ]$myhostname[  . ]/p" > hosts
7885                 }
7886                 tmp_re="[       . ]"
7887                 if $test -f hosts; then
7888                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7889                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7890                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7891                                 hosts | $sort | $uniq | \
7892                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7893                         case `$echo X$dflt` in
7894                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7895                                 dflt=.
7896                                 ;;
7897                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7898                                 ;;
7899                         esac
7900                 else
7901                         echo "(I cannot locate a hosts database anywhere)"
7902                         dflt=.
7903                 fi
7904                 case "$dflt" in
7905                 .)
7906                         tans=`./loc resolv.conf X /etc /usr/etc`
7907                         if $test -f "$tans"; then
7908                                 echo "(Attempting domain name extraction from $tans)"
7909                                 dflt=.`$sed -n -e 's/   / /g' \
7910                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7911                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7912                                 case "$dflt" in
7913                                 .) dflt=.`$sed -n -e 's/        / /g' \
7914                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7915                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7916                                         ;;
7917                                 esac
7918                         fi
7919                         ;;
7920                 esac
7921                 case "$dflt" in
7922                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7923                         dflt=.`sh -c domainname 2>/dev/null`
7924                         case "$dflt" in
7925                         '') dflt='.';;
7926                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7927                         esac
7928                         ;;
7929                 esac
7930                 case "$dflt$osname" in
7931                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7932                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7933                         ;;
7934                 esac
7935                 case "$dflt" in
7936                 .) echo "(Lost all hope -- silly guess then)"
7937                         dflt='.uucp'
7938                         ;;
7939                 esac
7940                 $rm -f hosts
7941                 ;;
7942         *) dflt="$mydomain";;
7943         esac;;
7944 esac
7945 echo " "
7946 rp="What is your domain name?"
7947 . ./myread
7948 tans="$ans"
7949 case "$ans" in
7950 '') ;;
7951 .*) ;;
7952 *) tans=".$tans";;
7953 esac
7954 mydomain="$tans"
7955
7956 : translate upper to lower if necessary
7957 case "$mydomain" in
7958 *[A-Z]*)
7959         echo "(Normalizing case in your domain name)"
7960         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7961         ;;
7962 esac
7963
7964 : a little sanity check here
7965 case "$phostname" in
7966 '') ;;
7967 *)
7968         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7969         $myhostname$mydomain|$myhostname) ;;
7970         *)
7971                 case "$phostname" in
7972                 sed*)
7973                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7974                         ;;
7975                 *)
7976                         echo "(That doesn't agree with your $phostname command, by the way.)"
7977                         ;;
7978                 esac
7979         ;;
7980         esac
7981         ;;
7982 esac
7983
7984 $cat <<EOM
7985
7986 I need to get your e-mail address in Internet format if possible, i.e.
7987 something like user@host.domain. Please answer accurately since I have
7988 no easy means to double check it. The default value provided below
7989 is most probably close to reality but may not be valid from outside
7990 your organization...
7991
7992 EOM
7993 cont=x
7994 while test "$cont"; do
7995         case "$cf_email" in
7996         '') dflt="$cf_by@$myhostname$mydomain";;
7997         *) dflt="$cf_email";;
7998         esac
7999         rp='What is your e-mail address?'
8000         . ./myread
8001         cf_email="$ans"
8002         case "$cf_email" in
8003         *@*.*) cont='' ;;
8004         *)
8005                 rp='Address does not look like an Internet one.  Use it anyway?'
8006                 case "$fastread" in
8007                 yes) dflt=y ;;
8008                 *) dflt=n ;;
8009                 esac
8010                 . ./myread
8011                 case "$ans" in
8012                 y*) cont='' ;;
8013                 *) echo " " ;;
8014                 esac
8015                 ;;
8016         esac
8017 done
8018
8019 $cat <<EOM
8020
8021 If you or somebody else will be maintaining perl at your site, please
8022 fill in the correct e-mail address here so that they may be contacted
8023 if necessary. Currently, the "perlbug" program included with perl
8024 will send mail to this address in addition to perlbug@perl.org. You may
8025 enter "none" for no administrator.
8026
8027 EOM
8028 case "$perladmin" in
8029 '') dflt="$cf_email";;
8030 *) dflt="$perladmin";;
8031 esac
8032 rp='Perl administrator e-mail address'
8033 . ./myread
8034 perladmin="$ans"
8035
8036 : determine whether to only install version-specific parts.
8037 echo " "
8038 $cat <<EOM
8039 Do you want to install only the version-specific parts of the perl
8040 distribution?  Usually you do *not* want to do this.
8041 EOM
8042 case "$versiononly" in
8043 "$define"|[Yy]*|true) dflt='y' ;;
8044 *) dflt='n';
8045 esac
8046 rp="Do you want to install only the version-specific parts of perl?"
8047 . ./myread
8048 case "$ans" in
8049 [yY]*)  val="$define";;
8050 *)      val="$undef" ;;
8051 esac
8052 set versiononly
8053 eval $setvar
8054
8055 : figure out how to guarantee perl startup
8056 case "$startperl" in
8057 '')
8058         case "$sharpbang" in
8059         *!)
8060                 $cat <<EOH
8061
8062 I can use the #! construct to start perl on your system. This will
8063 make startup of perl scripts faster, but may cause problems if you
8064 want to share those scripts and perl is not in a standard place
8065 ($binexp/perl) on all your platforms. The alternative is to force
8066 a shell by starting the script with a single ':' character.
8067
8068 EOH
8069                 case "$versiononly" in
8070                 "$define")      dflt="$binexp/perl$version";;  
8071                 *)              dflt="$binexp/perl";;
8072                 esac
8073                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8074                 . ./myread
8075                 case "$ans" in
8076                 none)   startperl=": # use perl";;
8077                 *)      startperl="#!$ans"
8078                         if $test 30 -lt `echo "$ans" | wc -c`; then
8079                                 $cat >&4 <<EOM
8080
8081 WARNING:  Some systems limit the #! command to 32 characters.
8082 If you experience difficulty running Perl scripts with #!, try
8083 installing Perl in a directory with a shorter pathname.
8084
8085 EOM
8086                         fi ;;
8087                 esac
8088                 ;;
8089         *) startperl=": # use perl"
8090                 ;;
8091         esac
8092         ;;
8093 esac
8094 echo "I'll use $startperl to start perl scripts."
8095
8096 : figure best path for perl in scripts
8097 case "$perlpath" in
8098 '')
8099         case "$versiononly" in
8100         "$define")      perlpath="$binexp/perl$version";;
8101         *)              perlpath="$binexp/perl";;
8102         esac
8103         case "$startperl" in
8104         *!*) ;;
8105         *)
8106                 $cat <<EOH
8107
8108 I will use the "eval 'exec'" idiom to start Perl on your system.
8109 I can use the full path of your Perl binary for this purpose, but
8110 doing so may cause problems if you want to share those scripts and
8111 Perl is not always in a standard place ($binexp/perl).
8112
8113 EOH
8114                 dflt="$binexp/perl"
8115                 rp="What path shall I use in \"eval 'exec'\"?"
8116                 . ./myread
8117                 perlpath="$ans"
8118                 ;;
8119         esac
8120         ;;
8121 esac
8122 case "$startperl" in
8123 *!*)    ;;
8124 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8125 esac
8126
8127 : determine where public executable scripts go
8128 set scriptdir scriptdir
8129 eval $prefixit
8130 case "$scriptdir" in
8131 '')
8132         dflt="$bin"
8133         : guess some guesses
8134         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8135         $test -d /usr/share/bin     && dflt=/usr/share/bin
8136         $test -d /usr/local/script  && dflt=/usr/local/script
8137         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8138         $test -d $prefixexp/script  && dflt=$prefixexp/script
8139         set dflt
8140         eval $prefixup
8141         ;;
8142 *)  dflt="$scriptdir"
8143         ;;
8144 esac
8145 $cat <<EOM
8146  
8147 Some installations have a separate directory just for executable scripts so
8148 that they can mount it across multiple architectures but keep the scripts in
8149 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8150 Or you might just lump your scripts in with all your other executables.
8151  
8152 EOM
8153 fn=d~
8154 rp='Where do you keep publicly executable scripts?'
8155 . ./getfile
8156 if $test "X$ansexp" != "X$scriptdirexp"; then
8157         installscript=''
8158 fi
8159 scriptdir="$ans"
8160 scriptdirexp="$ansexp"
8161 : Change installation prefix, if necessary.
8162 if $test X"$prefix" != X"$installprefix"; then
8163         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8164 else
8165         installscript="$scriptdirexp"
8166 fi
8167
8168 : determine where add-on public executables go
8169 case "$sitebin" in
8170 '')     dflt=$siteprefix/bin ;;
8171 *)      dflt=$sitebin ;;
8172 esac
8173 fn=d~
8174 rp='Pathname where the add-on public executables should be installed?'
8175 . ./getfile
8176 sitebin="$ans"
8177 sitebinexp="$ansexp"
8178 : Change installation prefix, if necessary.
8179 if $test X"$prefix" != X"$installprefix"; then
8180         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8181 else
8182         installsitebin="$sitebinexp"
8183 fi
8184
8185 : define an is-a-typedef? function
8186 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8187 case "$inclist" in
8188 "") inclist="sys/types.h";;
8189 esac;
8190 eval "varval=\$$var";
8191 case "$varval" in
8192 "")
8193         $rm -f temp.c;
8194         for inc in $inclist; do
8195                 echo "#include <$inc>" >>temp.c;
8196         done;
8197         echo "#ifdef $type" >> temp.c;
8198         echo "printf(\"We have $type\");" >> temp.c;
8199         echo "#endif" >> temp.c;
8200         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8201         if $contains $type temp.E >/dev/null 2>&1; then
8202                 eval "$var=\$type";
8203         else
8204                 eval "$var=\$def";
8205         fi;
8206         $rm -f temp.?;;
8207 *) eval "$var=\$varval";;
8208 esac'
8209
8210 : define an is-a-typedef? function that prompts if the type is not available.
8211 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8212 case "$inclist" in
8213 "") inclist="sys/types.h";;
8214 esac;
8215 eval "varval=\$$var";
8216 case "$varval" in
8217 "")
8218         $rm -f temp.c;
8219         for inc in $inclist; do
8220                 echo "#include <$inc>" >>temp.c;
8221         done;
8222         echo "#ifdef $type" >> temp.c;
8223         echo "printf(\"We have $type\");" >> temp.c;
8224         echo "#endif" >> temp.c;
8225         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8226         echo " " ;
8227         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8228         if $contains $type temp.E >/dev/null 2>&1; then
8229                 echo "$type found." >&4;
8230                 eval "$var=\$type";
8231         else
8232                 echo "$type NOT found." >&4;
8233                 dflt="$def";
8234                 . ./myread ;
8235                 eval "$var=\$ans";
8236         fi;
8237         $rm -f temp.?;;
8238 *) eval "$var=\$varval";;
8239 esac'
8240
8241 : see what type lseek is declared as in the kernel
8242 rp="What is the type used for lseek's offset on this system?"
8243 set off_t lseektype long stdio.h sys/types.h
8244 eval $typedef_ask
8245
8246 echo " "
8247 echo "Checking to see how big your file offsets are..." >&4
8248 $cat >try.c <<EOCP
8249 #include <sys/types.h>
8250 #include <stdio.h>
8251 int main()
8252 {
8253     printf("%d\n", (int)sizeof($lseektype));
8254     return(0); 
8255 }
8256 EOCP
8257 set try
8258 if eval $compile_ok; then
8259         lseeksize=`$run ./try`
8260         echo "Your file offsets are $lseeksize bytes long."
8261 else
8262         dflt=$longsize
8263         echo " "
8264         echo "(I can't seem to compile the test program.  Guessing...)"
8265         rp="What is the size of your file offsets (in bytes)?"
8266         . ./myread
8267         lseeksize="$ans"
8268 fi
8269 $rm -f try.c try
8270
8271 : see what type file positions are declared as in the library
8272 rp="What is the type for file position used by fsetpos()?"
8273 set fpos_t fpostype long stdio.h sys/types.h
8274 eval $typedef_ask
8275
8276 echo " "
8277 case "$fpostype" in
8278 *_t) zzz="$fpostype"    ;;
8279 *)   zzz="fpos_t"       ;;
8280 esac
8281 echo "Checking the size of $zzz..." >&4 
8282 cat > try.c <<EOCP
8283 #include <sys/types.h>
8284 #include <stdio.h>
8285 int main() {
8286     printf("%d\n", (int)sizeof($fpostype));
8287     exit(0);
8288 }
8289 EOCP
8290 set try
8291 if eval $compile_ok; then
8292         yyy=`$run ./try`
8293         case "$yyy" in
8294         '')     fpossize=4
8295                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8296                 ;;
8297         *)      fpossize=$yyy
8298                 echo "Your $zzz is $fpossize bytes long."
8299                 ;;
8300         esac
8301 else
8302         dflt="$longsize"
8303         echo " " >&4
8304         echo "(I can't compile the test program.  Guessing...)" >&4
8305         rp="What is the size of your file positions (in bytes)?"
8306         . ./myread
8307         fpossize="$ans"
8308 fi
8309
8310
8311
8312 # Backward compatibility (uselfs is deprecated).
8313 case "$uselfs" in
8314 "$define"|true|[yY]*)
8315         cat <<EOM >&4
8316
8317 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8318 EOM
8319         uselargefiles="$define"
8320         ;;
8321 esac                          
8322
8323 case "$lseeksize:$fpossize" in
8324 8:8) cat <<EOM
8325
8326 You can have files larger than 2 gigabytes.
8327 EOM
8328    val="$define" ;;
8329 *)    case "$uselargefiles" in
8330    "$undef"|false|[nN]*) dflt='n' ;;
8331    *)   dflt='y' ;;
8332    esac
8333    cat <<EOM
8334
8335 Perl can be built to understand large files (files larger than 2 gigabytes)
8336 on some systems.  To do so, Configure can be run with -Duselargefiles.
8337
8338 If this doesn't make any sense to you, just accept the default '$dflt'.
8339 EOM
8340    rp='Try to understand large files, if available?'
8341    . ./myread
8342    case "$ans" in
8343    y|Y)         val="$define" ;;
8344    *)           val="$undef"  ;;
8345    esac
8346    ;;
8347 esac
8348 set uselargefiles
8349 eval $setvar
8350 case "$uselargefiles" in
8351 "$define")
8352 : Look for a hint-file generated 'call-back-unit'.  If the
8353 : user has specified that a large files perl is to be built,
8354 : we may need to set or change some other defaults.
8355         if $test -f uselargefiles.cbu; then
8356                 echo "Your platform has some specific hints for large file builds, using them..."
8357                 . ./uselargefiles.cbu
8358                 echo " "
8359                 echo "Rechecking to see how big your file offsets are..." >&4
8360                 $cat >try.c <<EOCP
8361 #include <sys/types.h>
8362 #include <stdio.h>
8363 int main()
8364 {
8365     printf("%d\n", (int)sizeof($lseektype));
8366     return(0); 
8367 }
8368 EOCP
8369                 set try
8370                 if eval $compile_ok; then
8371                         lseeksize=`$run ./try`
8372                         $echo "Your file offsets are now $lseeksize bytes long."
8373                 else
8374                         dflt="$lseeksize"
8375                         echo " "
8376                         echo "(I can't seem to compile the test program.  Guessing...)"
8377                         rp="What is the size of your file offsets (in bytes)?"
8378                         . ./myread
8379                         lseeksize="$ans"
8380                 fi
8381                 case "$fpostype" in
8382                 *_t) zzz="$fpostype"    ;;
8383                 *)   zzz="fpos_t"       ;;
8384                 esac
8385                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8386                 $cat > try.c <<EOCP
8387 #include <sys/types.h>
8388 #include <stdio.h>
8389 int main() {
8390     printf("%d\n", (int)sizeof($fpostype));
8391     exit(0);
8392 }
8393 EOCP
8394                 set try
8395                 if eval $compile_ok; then
8396                         yyy=`$run ./try`
8397                         dflt="$lseeksize"
8398                         case "$yyy" in
8399                         '')     echo " "
8400                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8401                                 ;;
8402                         *)      fpossize=$yyy
8403                                 echo " $fpossize bytes." >&4
8404                                 ;;
8405                         esac
8406                 else
8407                         dflt="$fpossize"
8408                         echo " "
8409                         echo "(I can't compile the test program.  Guessing...)" >&4
8410                         rp="What is the size of your file positions (in bytes)?"
8411                         . ./myread
8412                         fpossize="$ans"
8413                 fi
8414                 $rm -f try.c try
8415         fi
8416         ;;
8417 esac
8418
8419 case "$vendorprefix" in
8420 '')     d_vendorbin="$undef"
8421         vendorbin=''
8422         vendorbinexp=''
8423         ;;
8424 *)      d_vendorbin="$define"
8425         : determine where vendor-supplied executables go.
8426         case "$vendorbin" in
8427         '') dflt=$vendorprefix/bin ;;
8428         *)      dflt="$vendorbin" ;;
8429         esac
8430         fn=d~+
8431         rp='Pathname for the vendor-supplied executables directory?'
8432         . ./getfile
8433         vendorbin="$ans"
8434         vendorbinexp="$ansexp"
8435         ;;
8436 esac
8437 : Change installation prefix, if necessary.
8438 if $test X"$prefix" != X"$installprefix"; then
8439         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8440 else
8441         installvendorbin="$vendorbinexp"
8442 fi
8443
8444 : see if qgcvt exists
8445 set qgcvt d_qgcvt
8446 eval $inlibc
8447
8448 echo " "
8449
8450 if $test X"$d_longdbl" = X"$define"; then
8451
8452 echo "Checking how to print long doubles..." >&4
8453
8454 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8455         $cat >try.c <<'EOCP'
8456 #include <sys/types.h>
8457 #include <stdio.h>
8458 int main() {
8459   double d = 123.456;
8460   printf("%.3f\n", d);
8461 }
8462 EOCP
8463         set try
8464         if eval $compile; then
8465                 yyy=`$run ./try`
8466                 case "$yyy" in
8467                 123.456)
8468                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8469                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8470                         echo "We will use %f."
8471                         ;;
8472                 esac
8473         fi
8474 fi
8475
8476 if $test X"$sPRIfldbl" = X; then
8477         $cat >try.c <<'EOCP'
8478 #include <sys/types.h>
8479 #include <stdio.h>
8480 int main() {
8481   long double d = 123.456;
8482   printf("%.3Lf\n", d);
8483 }
8484 EOCP
8485         set try
8486         if eval $compile; then
8487                 yyy=`$run ./try`
8488                 case "$yyy" in
8489                 123.456)
8490                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8491                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8492                         echo "We will use %Lf."
8493                         ;;
8494                 esac
8495         fi
8496 fi
8497
8498 if $test X"$sPRIfldbl" = X; then
8499         $cat >try.c <<'EOCP'
8500 #include <sys/types.h>
8501 #include <stdio.h>
8502 int main() {
8503   long double d = 123.456;
8504   printf("%.3llf\n", d);
8505 }
8506 EOCP
8507         set try
8508         if eval $compile; then
8509                 yyy=`$run ./try`
8510                 case "$yyy" in
8511                 123.456)
8512                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8513                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8514                         echo "We will use %llf."
8515                         ;;
8516                 esac
8517         fi
8518 fi
8519
8520 if $test X"$sPRIfldbl" = X; then
8521         $cat >try.c <<'EOCP'
8522 #include <sys/types.h>
8523 #include <stdio.h>
8524 int main() {
8525   long double d = 123.456;
8526   printf("%.3lf\n", d);
8527 }
8528 EOCP
8529         set try
8530         if eval $compile; then
8531                 yyy=`$run ./try`
8532                 case "$yyy" in
8533                 123.456)
8534                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8535                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8536                         echo "We will use %lf."
8537                         ;;
8538                 esac
8539         fi
8540 fi
8541
8542 if $test X"$sPRIfldbl" = X; then
8543         echo "Cannot figure out how to print long doubles." >&4
8544 else
8545         sSCNfldbl=$sPRIfldbl    # expect consistency
8546 fi
8547
8548 $rm -f try try.*
8549
8550 fi # d_longdbl
8551
8552 case "$sPRIfldbl" in
8553 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8554         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8555         d_SCNfldbl="$undef";
8556         ;;
8557 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8558         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8559         d_SCNfldbl="$define";
8560         ;;
8561 esac
8562
8563 : Check how to convert floats to strings.
8564 echo " "
8565 echo "Checking for an efficient way to convert floats to strings."
8566 echo " " > try.c
8567 case "$uselongdouble" in
8568 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8569 esac
8570 case "$d_longdbl" in
8571 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8572 esac
8573 case "$d_PRIgldbl" in
8574 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8575 esac
8576 $cat >>try.c <<EOP
8577 #ifdef TRY_gconvert
8578 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8579 char *myname = "gconvert";
8580 #endif
8581 #ifdef TRY_gcvt
8582 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8583 char *myname = "gcvt";
8584 #endif
8585 #ifdef TRY_qgcvt
8586 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8587 char *myname = "qgcvt";
8588 #define DOUBLETYPE long double
8589 #endif
8590 #ifdef TRY_sprintf
8591 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8592 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8593 #else
8594 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8595 #endif
8596 char *myname = "sprintf";
8597 #endif
8598
8599 #ifndef DOUBLETYPE
8600 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8601 #define DOUBLETYPE long double
8602 #else
8603 #define DOUBLETYPE double
8604 #endif
8605 #endif
8606
8607 #include <stdio.h>
8608
8609 #define I_STDLIB $i_stdlib
8610 #ifdef I_STDLIB
8611 #include <stdlib.h>
8612 #endif
8613
8614 int
8615 checkit(expect, got)
8616 char *expect;
8617 char *got;
8618 {
8619     if (strcmp(expect, got)) {
8620                 printf("%s oddity:  Expected %s, got %s\n",
8621                         myname, expect, got);
8622                 exit(1);
8623         }
8624 }
8625
8626 int main()
8627
8628         char buf[64]; 
8629         buf[63] = '\0';
8630
8631         /* This must be 1st test on (which?) platform */
8632         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8633         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8634         checkit("0.1", buf);
8635
8636         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8637         checkit("1", buf);
8638
8639         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8640         checkit("1.1", buf);
8641
8642         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8643         checkit("1.01", buf);
8644
8645         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8646         checkit("1.001", buf);
8647
8648         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8649         checkit("1.0001", buf);
8650
8651         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8652         checkit("1.00001", buf);
8653
8654         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8655         checkit("1.000001", buf);
8656
8657         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8658         checkit("0", buf);
8659
8660         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8661         checkit("-1", buf);
8662
8663         /* Some Linux gcvt's give 1.e+5 here. */
8664         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8665         checkit("100000", buf);
8666         
8667         /* Some Linux gcvt's give -1.e+5 here. */
8668         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8669         checkit("-100000", buf);
8670
8671         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8672         checkit("123.456", buf);
8673
8674         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8675         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8676         if (strlen(buf) > 5)
8677             checkit("1e+030", buf); /* for Microsoft */
8678         else
8679             checkit("1e+30", buf);
8680
8681         exit(0);
8682 }
8683 EOP
8684 case "$d_Gconvert" in
8685 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8686 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8687 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8688 *) xxx_list='gconvert gcvt sprintf' ;;
8689 esac
8690
8691 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8692 "$define$define$define")
8693     # for long doubles prefer first qgcvt, then sprintf
8694     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8695     xxx_list="sprintf $xxx_list"
8696     case "$d_qgcvt" in
8697     "$define") xxx_list="qgcvt $xxx_list" ;;
8698     esac
8699     ;;
8700 esac
8701
8702 for xxx_convert in $xxx_list; do
8703         echo "Trying $xxx_convert..."
8704         $rm -f try try$_o
8705         set try -DTRY_$xxx_convert
8706         if eval $compile; then
8707                 echo "$xxx_convert() found." >&4
8708                 if $run ./try; then
8709                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8710                         break;
8711                 else
8712                         echo "...But $xxx_convert didn't work as I expected."
8713                 fi
8714         else
8715                 echo "$xxx_convert NOT found." >&4
8716         fi
8717 done
8718         
8719 case "$xxx_convert" in
8720 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8721 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8722 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8723 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8724    "$define$define$define")
8725       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8726    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8727    esac
8728    ;;  
8729 esac
8730
8731 : see if _fwalk exists
8732 set fwalk d__fwalk
8733 eval $inlibc
8734
8735 : Initialize h_fcntl
8736 h_fcntl=false
8737
8738 : Initialize h_sysfile
8739 h_sysfile=false
8740
8741 : access call always available on UNIX
8742 set access d_access
8743 eval $inlibc
8744
8745 : locate the flags for 'access()'
8746 case "$d_access" in
8747 "$define")
8748         echo " "
8749         $cat >access.c <<'EOCP'
8750 #include <sys/types.h>
8751 #ifdef I_FCNTL
8752 #include <fcntl.h>
8753 #endif
8754 #ifdef I_SYS_FILE
8755 #include <sys/file.h>
8756 #endif
8757 #ifdef I_UNISTD
8758 #include <unistd.h>
8759 #endif
8760 int main() {
8761         exit(R_OK);
8762 }
8763 EOCP
8764         : check sys/file.h first, no particular reason here
8765         if $test `./findhdr sys/file.h` && \
8766                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8767                 h_sysfile=true;
8768                 echo "<sys/file.h> defines the *_OK access constants." >&4
8769         elif $test `./findhdr fcntl.h` && \
8770                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8771                 h_fcntl=true;
8772                 echo "<fcntl.h> defines the *_OK access constants." >&4
8773         elif $test `./findhdr unistd.h` && \
8774                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8775                 echo "<unistd.h> defines the *_OK access constants." >&4
8776         else
8777                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8778         fi
8779         ;;
8780 esac
8781 $rm -f access*
8782
8783 : see if accessx exists
8784 set accessx d_accessx
8785 eval $inlibc
8786
8787 : see if alarm exists
8788 set alarm d_alarm
8789 eval $inlibc
8790
8791 : see if atolf exists
8792 set atolf d_atolf
8793 eval $inlibc
8794
8795 : see if atoll exists
8796 set atoll d_atoll
8797 eval $inlibc
8798
8799 : Look for GNU-cc style attribute checking
8800 echo " "
8801 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8802 $cat >attrib.c <<'EOCP'
8803 #include <stdio.h>
8804 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8805 EOCP
8806 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8807         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8808                 echo "Your C compiler doesn't fully support __attribute__."
8809                 val="$undef"
8810         else
8811                 echo "Your C compiler supports __attribute__."
8812                 val="$define"
8813         fi
8814 else
8815         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8816         val="$undef"
8817 fi
8818 set d_attribut
8819 eval $setvar
8820 $rm -f attrib*
8821
8822 : see if bcmp exists
8823 set bcmp d_bcmp
8824 eval $inlibc
8825
8826 : see if bcopy exists
8827 set bcopy d_bcopy
8828 eval $inlibc
8829
8830 : see if this is a unistd.h system
8831 set unistd.h i_unistd
8832 eval $inhdr
8833
8834 : see if getpgrp exists
8835 set getpgrp d_getpgrp
8836 eval $inlibc
8837
8838 case "$d_getpgrp" in
8839 "$define")
8840         echo " "
8841         echo "Checking to see which flavor of getpgrp is in use..."
8842         $cat >try.c <<EOP
8843 #$i_unistd I_UNISTD
8844 #include <sys/types.h>
8845 #ifdef I_UNISTD
8846 #  include <unistd.h>
8847 #endif
8848 int main()
8849 {
8850         if (getuid() == 0) {
8851                 printf("(I see you are running Configure as super-user...)\n");
8852                 setuid(1);
8853         }
8854 #ifdef TRY_BSD_PGRP
8855         if (getpgrp(1) == 0)
8856                 exit(0);
8857 #else
8858         if (getpgrp() > 0)
8859                 exit(0);
8860 #endif
8861         exit(1);
8862 }
8863 EOP
8864         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8865                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8866                 val="$define"
8867         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8868                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8869                 val="$undef"
8870         else
8871                 echo "I can't seem to compile and run the test program."
8872                 if ./usg; then
8873                         xxx="a USG one, i.e. you use getpgrp()."
8874                 else
8875                         # SVR4 systems can appear rather BSD-ish.
8876                         case "$i_unistd" in
8877                         $undef)
8878                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8879                                 val="$define"
8880                                 ;;
8881                         $define)
8882                                 xxx="probably a USG one, i.e. you use getpgrp()."
8883                                 val="$undef"
8884                                 ;;
8885                         esac
8886                 fi
8887                 echo "Assuming your getpgrp is $xxx" >&4
8888         fi
8889         ;;
8890 *) val="$undef";;
8891 esac
8892 set d_bsdgetpgrp
8893 eval $setvar
8894 $rm -f try try.*
8895
8896 : see if setpgrp exists
8897 set setpgrp d_setpgrp
8898 eval $inlibc
8899
8900 case "$d_setpgrp" in
8901 "$define")
8902         echo " "
8903         echo "Checking to see which flavor of setpgrp is in use..."
8904         $cat >try.c <<EOP
8905 #$i_unistd I_UNISTD
8906 #include <sys/types.h>
8907 #ifdef I_UNISTD
8908 #  include <unistd.h>
8909 #endif
8910 int main()
8911 {
8912         if (getuid() == 0) {
8913                 printf("(I see you are running Configure as super-user...)\n");
8914                 setuid(1);
8915         }
8916 #ifdef TRY_BSD_PGRP
8917         if (-1 == setpgrp(1, 1))
8918                 exit(0);
8919 #else
8920         if (setpgrp() != -1)
8921                 exit(0);
8922 #endif
8923         exit(1);
8924 }
8925 EOP
8926         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8927                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8928                 val="$define"
8929         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8930                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8931                 val="$undef"
8932         else
8933                 echo "(I can't seem to compile and run the test program.)"
8934                 if ./usg; then
8935                         xxx="a USG one, i.e. you use setpgrp()."
8936                 else
8937                         # SVR4 systems can appear rather BSD-ish.
8938                         case "$i_unistd" in
8939                         $undef)
8940                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8941                                 val="$define"
8942                                 ;;
8943                         $define)
8944                                 xxx="probably a USG one, i.e. you use setpgrp()."
8945                                 val="$undef"
8946                                 ;;
8947                         esac
8948                 fi
8949                 echo "Assuming your setpgrp is $xxx" >&4
8950         fi
8951         ;;
8952 *) val="$undef";;
8953 esac
8954 set d_bsdsetpgrp
8955 eval $setvar
8956 $rm -f try try.*
8957 : see if bzero exists
8958 set bzero d_bzero
8959 eval $inlibc
8960
8961 : see if signal is declared as pointer to function returning int or void
8962 echo " "
8963 xxx=`./findhdr signal.h`
8964 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8965 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8966         echo "You have int (*signal())() instead of void." >&4
8967         val="$undef"
8968 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8969         echo "You have void (*signal())()." >&4
8970         val="$define"
8971 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8972         echo "You have int (*signal())() instead of void." >&4
8973         val="$undef"
8974 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8975         echo "You have void (*signal())()." >&4
8976         val="$define"
8977 else
8978         case "$d_voidsig" in
8979         '')
8980         echo "I can't determine whether signal handler returns void or int..." >&4
8981                 dflt=void
8982                 rp="What type does your signal handler return?"
8983                 . ./myread
8984                 case "$ans" in
8985                 v*) val="$define";;
8986                 *) val="$undef";;
8987                 esac;;
8988         "$define")
8989                 echo "As you already told me, signal handler returns void." >&4
8990                 val="$define"
8991                 ;;
8992         *)      echo "As you already told me, signal handler returns int." >&4
8993                 val="$undef"
8994                 ;;
8995         esac
8996 fi
8997 set d_voidsig
8998 eval $setvar
8999 case "$d_voidsig" in
9000 "$define") signal_t="void";;
9001 *) signal_t="int";;
9002 esac
9003 $rm -f $$.tmp
9004
9005 : check for ability to cast large floats to 32-bit ints.
9006 echo " "
9007 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9008 if $test "$intsize" -ge 4; then
9009         xxx=int
9010 else
9011         xxx=long
9012 fi
9013 $cat >try.c <<EOCP
9014 #include <stdio.h>
9015 #include <sys/types.h>
9016 #include <signal.h>
9017 $signal_t blech(s) int s; { exit(3); }
9018 int main()
9019 {
9020         $xxx i32;
9021         double f, g;
9022         int result = 0;
9023         char str[16];
9024         signal(SIGFPE, blech);
9025
9026         /* Don't let compiler optimize the test away.  Store the number 
9027            in a writable string for gcc to pass to sscanf under HP/UX.
9028         */
9029         sprintf(str, "2147483647");
9030         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9031         g = 10 * f;
9032         i32  = ($xxx) g;
9033
9034         /* x86 processors will probably give 0x8000 0000, which is a
9035        sign change.  We don't want that.  We want to mimic SPARC
9036            behavior here, which is to preserve the sign and give
9037            back 0x7fff ffff.
9038         */
9039         if (i32 != ($xxx) f)
9040                 result |= 1;
9041         exit(result);
9042 }
9043 EOCP
9044 set try
9045 if eval $compile_ok; then
9046         $run ./try
9047         yyy=$?
9048 else
9049         echo "(I can't seem to compile the test program--assuming it can't)"
9050         yyy=1
9051 fi
9052 case "$yyy" in
9053 0)      val="$define"
9054         echo "Yup, it can."
9055         ;;
9056 *)      val="$undef"
9057         echo "Nope, it can't."
9058         ;;
9059 esac
9060 set d_casti32
9061 eval $setvar
9062 $rm -f try try.*
9063
9064 : check for ability to cast negative floats to unsigned
9065 echo " "
9066 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9067 $cat >try.c <<EOCP
9068 #include <stdio.h>
9069 #include <sys/types.h>
9070 #include <signal.h>
9071 $signal_t blech(s) int s; { exit(7); }
9072 $signal_t blech_in_list(s) int s; { exit(4); }
9073 unsigned long dummy_long(p) unsigned long p; { return p; }
9074 unsigned int dummy_int(p) unsigned int p; { return p; }
9075 unsigned short dummy_short(p) unsigned short p; { return p; }
9076 int main()
9077 {
9078         double f;
9079         unsigned long along;
9080         unsigned int aint;
9081         unsigned short ashort;
9082         int result = 0;
9083         char str[16];
9084         
9085         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9086            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9087            optimized the whole file away
9088         */
9089         /* Store the number in a writable string for gcc to pass to 
9090            sscanf under HP/UX.
9091         */
9092         sprintf(str, "-123");
9093         sscanf(str, "%lf", &f);  /* f = -123.; */
9094
9095         signal(SIGFPE, blech);
9096         along = (unsigned long)f;
9097         aint = (unsigned int)f;
9098         ashort = (unsigned short)f;
9099         if (along != (unsigned long)-123)
9100                 result |= 1;
9101         if (aint != (unsigned int)-123)
9102                 result |= 1;
9103         if (ashort != (unsigned short)-123)
9104                 result |= 1;
9105         sprintf(str, "1073741824.");
9106         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9107         f = f + f;
9108         along = 0;
9109         along = (unsigned long)f;
9110         if (along != 0x80000000)
9111                 result |= 2;
9112         f -= 1.;
9113         along = 0;
9114         along = (unsigned long)f;
9115         if (along != 0x7fffffff)
9116                 result |= 1;
9117         f += 2.;
9118         along = 0;
9119         along = (unsigned long)f;
9120         if (along != 0x80000001)
9121                 result |= 2;
9122         if (result)
9123                 exit(result);
9124         signal(SIGFPE, blech_in_list);
9125         sprintf(str, "123.");
9126         sscanf(str, "%lf", &f);  /* f = 123.; */
9127         along = dummy_long((unsigned long)f);
9128         aint = dummy_int((unsigned int)f);
9129         ashort = dummy_short((unsigned short)f);
9130         if (along != (unsigned long)123)
9131                 result |= 4;
9132         if (aint != (unsigned int)123)
9133                 result |= 4;
9134         if (ashort != (unsigned short)123)
9135                 result |= 4;
9136         exit(result);
9137
9138 }
9139 EOCP
9140 set try
9141 if eval $compile_ok; then
9142         $run ./try
9143         castflags=$?
9144 else
9145         echo "(I can't seem to compile the test program--assuming it can't)"
9146         castflags=7
9147 fi
9148 case "$castflags" in
9149 0)      val="$define"
9150         echo "Yup, it can."
9151         ;;
9152 *)      val="$undef"
9153         echo "Nope, it can't."
9154         ;;
9155 esac
9156 set d_castneg
9157 eval $setvar
9158 $rm -f try.*
9159
9160 : see if vprintf exists
9161 echo " "
9162 if set vprintf val -f d_vprintf; eval $csym; $val; then
9163         echo 'vprintf() found.' >&4
9164         val="$define"
9165         $cat >try.c <<'EOF'
9166 #include <varargs.h>
9167
9168 int main() { xxx("foo"); }
9169
9170 xxx(va_alist)
9171 va_dcl
9172 {
9173         va_list args;
9174         char buf[10];
9175
9176         va_start(args);
9177         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9178 }
9179 EOF
9180         set try
9181         if eval $compile && $run ./try; then
9182                 echo "Your vsprintf() returns (int)." >&4
9183                 val2="$undef"
9184         else
9185                 echo "Your vsprintf() returns (char*)." >&4
9186                 val2="$define"
9187         fi
9188 else
9189         echo 'vprintf() NOT found.' >&4
9190                 val="$undef"
9191                 val2="$undef"
9192 fi
9193 $rm -f try try.*
9194 set d_vprintf
9195 eval $setvar
9196 val=$val2
9197 set d_charvspr
9198 eval $setvar
9199
9200 : see if chown exists
9201 set chown d_chown
9202 eval $inlibc
9203
9204 : see if chroot exists
9205 set chroot d_chroot
9206 eval $inlibc
9207
9208 : see if chsize exists
9209 set chsize d_chsize
9210 eval $inlibc
9211
9212 : see if class exists
9213 set class d_class
9214 eval $inlibc
9215
9216 hasstruct='varname=$1; struct=$2; shift; shift;
9217 while $test $# -ge 2; do
9218         case "$1" in
9219         $define) echo "#include <$2>";;
9220         esac ;
9221     shift 2;
9222 done > try.c;
9223 echo "int main () { struct $struct foo; }" >> try.c;
9224 set try;
9225 if eval $compile; then
9226         val="$define";
9227 else
9228         val="$undef";
9229 fi;
9230 set $varname;
9231 eval $setvar;
9232 $rm -f try.c try.o'
9233
9234 : see if sys/types.h has to be included
9235 set sys/types.h i_systypes
9236 eval $inhdr
9237
9238 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9239 while $test $# -ge 2; do
9240         case "$1" in
9241         $define) echo "#include <$2>";;
9242         esac ;
9243     shift 2;
9244 done > try.c;
9245 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9246 set try;
9247 if eval $compile; then
9248         val="$define";
9249 else
9250         val="$undef";
9251 fi;
9252 set $varname;
9253 eval $setvar;
9254 $rm -f try.c try.o'
9255
9256 socketlib=''
9257 sockethdr=''
9258 : see whether socket exists
9259 echo " "
9260 $echo $n "Hmm... $c" >&4
9261 if set socket val -f d_socket; eval $csym; $val; then
9262         echo "Looks like you have Berkeley networking support." >&4
9263         d_socket="$define"
9264         if set setsockopt val -f; eval $csym; $val; then
9265                 d_oldsock="$undef"
9266         else
9267                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9268                 d_oldsock="$define"
9269         fi
9270 else
9271         if $contains socklib libc.list >/dev/null 2>&1; then
9272                 echo "Looks like you have Berkeley networking support." >&4
9273                 d_socket="$define"
9274                 : we will have to assume that it supports the 4.2 BSD interface
9275                 d_oldsock="$undef"
9276         else
9277                 echo "You don't have Berkeley networking in libc$_a..." >&4
9278                 if test "X$d_socket" = "X$define"; then
9279                    echo "...but you seem to believe that you have sockets." >&4
9280                 else
9281                         for net in net socket
9282                         do
9283                                 if test -f /usr/lib/lib$net$_a; then
9284                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9285                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9286                                         if $contains socket libc.list >/dev/null 2>&1; then
9287                                                 d_socket="$define"
9288                                                 socketlib="-l$net"
9289                                                 case "$net" in
9290                                                 net)
9291                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9292                                                         sockethdr="-I/usr/netinclude"
9293                                                         ;;
9294                                                 esac
9295                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9296                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9297                                                         d_oldsock="$undef"
9298                                                 else
9299                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9300                                                         d_oldsock="$define"
9301                                                 fi
9302                                                 break
9303                                         fi
9304                                 fi
9305                         done
9306                         if test "X$d_socket" != "X$define"; then
9307                            echo "or anywhere else I see." >&4
9308                            d_socket="$undef"
9309                            d_oldsock="$undef"
9310                         fi
9311                 fi
9312         fi
9313 fi
9314
9315 : see if socketpair exists
9316 set socketpair d_sockpair
9317 eval $inlibc
9318
9319
9320 echo " "
9321 echo "Checking the availability of certain socket constants..." >&4
9322 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9323         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9324         $cat >try.c <<EOF
9325 #include <sys/types.h>
9326 #include <sys/socket.h>
9327 int main() {
9328     int i = $ENUM;
9329 }
9330 EOF
9331         val="$undef"
9332         set try; if eval $compile; then
9333                 val="$define"
9334         fi
9335         set d_${enum}; eval $setvar
9336         $rm -f try.c try
9337 done
9338
9339 : see if this is a sys/uio.h system
9340 set sys/uio.h i_sysuio
9341 eval $inhdr
9342
9343
9344 echo " "
9345 echo "Checking to see if your system supports struct cmsghdr..." >&4
9346 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9347 eval $hasstruct
9348 case "$d_cmsghdr_s" in
9349 "$define")      echo "Yes, it does."   ;;
9350 *)              echo "No, it doesn't." ;;
9351 esac
9352
9353
9354 : check for const keyword
9355 echo " "
9356 echo 'Checking to see if your C compiler knows about "const"...' >&4
9357 $cat >const.c <<'EOCP'
9358 typedef struct spug { int drokk; } spug;
9359 int main()
9360 {
9361         const char *foo;
9362         const spug y;
9363 }
9364 EOCP
9365 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9366         val="$define"
9367         echo "Yup, it does."
9368 else
9369         val="$undef"
9370         echo "Nope, it doesn't."
9371 fi
9372 set d_const
9373 eval $setvar
9374
9375 : see if crypt exists
9376 echo " "
9377 set crypt d_crypt
9378 eval $inlibc
9379 case "$d_crypt" in
9380 $define) cryptlib='' ;;
9381 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9382                 echo 'crypt() found.' >&4
9383                 val="$define"
9384                 cryptlib=''
9385         else
9386                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9387                 if $test -z "$cryptlib"; then
9388                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9389                 else
9390                         cryptlib=-lcrypt
9391                 fi
9392                 if $test -z "$cryptlib"; then
9393                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9394                 else
9395                         cryptlib=-lcrypt
9396                 fi
9397                 if $test -z "$cryptlib"; then
9398                         cryptlib=`./loc libcrypt$_a "" $libpth`
9399                 else
9400                         cryptlib=-lcrypt
9401                 fi
9402                 if $test -z "$cryptlib"; then
9403                         echo 'crypt() NOT found.' >&4
9404                         val="$undef"
9405                 else
9406                         val="$define"
9407                 fi
9408         fi
9409         set d_crypt
9410         eval $setvar
9411         ;;
9412 esac
9413
9414 : get csh whereabouts
9415 case "$csh" in
9416 'csh') val="$undef" ;;
9417 *) val="$define" ;;
9418 esac
9419 set d_csh
9420 eval $setvar
9421 : Respect a hint or command line value for full_csh.
9422 case "$full_csh" in
9423 '') full_csh=$csh ;;
9424 esac
9425
9426 : see if cuserid exists
9427 set cuserid d_cuserid
9428 eval $inlibc
9429
9430 : see if this is a limits.h system
9431 set limits.h i_limits
9432 eval $inhdr
9433
9434 : see if this is a float.h system
9435 set float.h i_float
9436 eval $inhdr
9437
9438 : See if number of significant digits in a double precision number is known
9439 echo " "
9440 $cat >dbl_dig.c <<EOM
9441 #$i_limits I_LIMITS
9442 #$i_float I_FLOAT
9443 #ifdef I_LIMITS
9444 #include <limits.h>
9445 #endif
9446 #ifdef I_FLOAT
9447 #include <float.h>
9448 #endif
9449 #ifdef DBL_DIG
9450 printf("Contains DBL_DIG");
9451 #endif
9452 EOM
9453 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9454 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9455         echo "DBL_DIG found." >&4
9456         val="$define"
9457 else
9458         echo "DBL_DIG NOT found." >&4
9459         val="$undef"
9460 fi
9461 $rm -f dbl_dig.?
9462 set d_dbl_dig
9463 eval $setvar
9464
9465 hasproto='varname=$1; func=$2; shift; shift;
9466 while $test $# -ge 2; do
9467         case "$1" in
9468         $define) echo "#include <$2>";;
9469         esac ;
9470     shift 2;
9471 done > try.c;
9472 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9473 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9474         echo "$func() prototype found.";
9475         val="$define";
9476 else
9477         echo "$func() prototype NOT found.";
9478         val="$undef";
9479 fi;
9480 set $varname;
9481 eval $setvar;
9482 $rm -f try.c tryout.c'
9483
9484 : see if dbm.h is available
9485 : see if dbmclose exists
9486 set dbmclose d_dbmclose
9487 eval $inlibc
9488
9489 case "$d_dbmclose" in
9490 $define)
9491         set dbm.h i_dbm
9492         eval $inhdr
9493         case "$i_dbm" in
9494         $define)
9495                 val="$undef"
9496                 set i_rpcsvcdbm
9497                 eval $setvar
9498                 ;;
9499         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9500                 eval $inhdr
9501                 ;;
9502         esac
9503         ;;
9504 *)      echo "We won't be including <dbm.h>"
9505         val="$undef"
9506         set i_dbm
9507         eval $setvar
9508         val="$undef"
9509         set i_rpcsvcdbm
9510         eval $setvar
9511         ;;
9512 esac
9513
9514 : see if prototype for dbminit is available
9515 echo " "
9516 set d_dbminitproto dbminit $i_dbm dbm.h
9517 eval $hasproto
9518
9519 : see if difftime exists
9520 set difftime d_difftime
9521 eval $inlibc
9522
9523 : see if this is a dirent system
9524 echo " "
9525 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9526         val="$define"
9527         echo "<dirent.h> found." >&4
9528 else
9529         val="$undef"
9530         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9531                 echo "<sys/dir.h> found." >&4
9532                 echo " "
9533         else
9534                 xinc=`./findhdr sys/ndir.h`
9535         fi
9536         echo "<dirent.h> NOT found." >&4
9537 fi
9538 set i_dirent
9539 eval $setvar
9540
9541 : Look for type of directory structure.
9542 echo " "
9543 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9544
9545 case "$direntrytype" in
9546 ''|' ')
9547         case "$i_dirent" in
9548         $define) guess1='struct dirent' ;;
9549         *) guess1='struct direct'  ;;
9550         esac
9551         ;;
9552 *)      guess1="$direntrytype"
9553         ;;
9554 esac
9555
9556 case "$guess1" in
9557 'struct dirent') guess2='struct direct' ;;
9558 *) guess2='struct dirent' ;;
9559 esac
9560                 
9561 if $contains "$guess1" try.c >/dev/null 2>&1; then
9562         direntrytype="$guess1"
9563         echo "Your directory entries are $direntrytype." >&4
9564 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9565         direntrytype="$guess2"
9566         echo "Your directory entries seem to be $direntrytype." >&4
9567 else
9568         echo "I don't recognize your system's directory entries." >&4
9569         rp="What type is used for directory entries on this system?"
9570         dflt="$guess1"
9571         . ./myread
9572         direntrytype="$ans"
9573 fi
9574 $rm -f try.c
9575
9576
9577 : see if the directory entry stores field length
9578 echo " "
9579 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9580 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9581         echo "Good, your directory entry keeps length information in d_namlen." >&4
9582         val="$define"
9583 else
9584         echo "Your directory entry does not know about the d_namlen field." >&4
9585         val="$undef"
9586 fi
9587 set d_dirnamlen
9588 eval $setvar
9589 $rm -f try.c
9590
9591 : see if this is an sysdir system
9592 set sys/dir.h i_sysdir
9593 eval $inhdr
9594
9595 : see if this is an sysndir system
9596 set sys/ndir.h i_sysndir
9597 eval $inhdr
9598
9599 : Look for dirfd
9600 echo " "
9601 $cat >dirfd.c <<EOM
9602 #include <stdio.h>
9603 #$i_dirent I_DIRENT             /**/
9604 #$i_sysdir I_SYS_DIR            /**/
9605 #$i_sysndir I_SYS_NDIR          /**/
9606 #$i_systypes I_SYS_TYPES        /**/
9607 #if defined(I_SYS_TYPES)
9608 #include <sys/types.h>
9609 #endif
9610 #if defined(I_DIRENT)
9611 #include <dirent.h>
9612 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9613 #include <sys/dir.h>
9614 #endif
9615 #else
9616 #ifdef I_SYS_NDIR
9617 #include <sys/ndir.h>
9618 #else
9619 #ifdef I_SYS_DIR
9620 #ifdef hp9000s500
9621 #include <ndir.h>       /* may be wrong in the future */
9622 #else
9623 #include <sys/dir.h>
9624 #endif
9625 #endif
9626 #endif
9627 #endif 
9628 int main() {
9629         DIR *dirp = opendir(".");
9630         if (dirfd(dirp) >= 0)
9631                 exit(0);
9632         else
9633                 exit(1);
9634 }
9635 EOM
9636 set dirfd
9637 if eval $compile; then
9638         val="$define"
9639 fi
9640 case "$val" in
9641 $define)        echo "dirfd() found." >&4       ;;
9642 *)              echo "dirfd() NOT found." >&4   ;;
9643 esac
9644 set d_dirfd
9645 eval $setvar
9646 $rm -f dirfd*
9647
9648 : see if dlerror exists
9649 xxx_runnm="$runnm"
9650 runnm=false
9651 set dlerror d_dlerror
9652 eval $inlibc
9653 runnm="$xxx_runnm"
9654
9655 : see if dlfcn is available
9656 set dlfcn.h i_dlfcn
9657 eval $inhdr
9658
9659 case "$usedl" in
9660 $define|y|true)
9661         $cat << EOM
9662
9663 On a few systems, the dynamically loaded modules that perl generates and uses
9664 will need a different extension than shared libs. The default will probably
9665 be appropriate.
9666
9667 EOM
9668         case "$dlext" in
9669         '')     dflt="$so" ;;
9670         *)      dflt="$dlext" ;;
9671         esac
9672         rp='What is the extension of dynamically loaded modules'
9673         . ./myread
9674         dlext="$ans"
9675         ;;
9676 *)
9677         dlext="none"
9678         ;;
9679 esac
9680
9681 : Check if dlsym need a leading underscore
9682 echo " "
9683 val="$undef"
9684
9685 case "$dlsrc" in
9686 dl_dlopen.xs)
9687         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9688         $cat >dyna.c <<'EOM'
9689 fred () { }
9690 EOM
9691
9692 $cat >fred.c<<EOM
9693
9694 #include <stdio.h>
9695 #$i_dlfcn I_DLFCN
9696 #ifdef I_DLFCN
9697 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9698 #else
9699 #include <sys/types.h>
9700 #include <nlist.h>
9701 #include <link.h>
9702 #endif
9703
9704 extern int fred() ;
9705
9706 int main()
9707 {
9708     void * handle ;
9709     void * symbol ;
9710 #ifndef RTLD_LAZY
9711     int mode = 1 ;
9712 #else
9713     int mode = RTLD_LAZY ;
9714 #endif
9715     handle = dlopen("./dyna.$dlext", mode) ;
9716     if (handle == NULL) {
9717         printf ("1\n") ;
9718         fflush (stdout) ;
9719         exit(0);
9720     }
9721     symbol = dlsym(handle, "fred") ;
9722     if (symbol == NULL) {
9723         /* try putting a leading underscore */
9724         symbol = dlsym(handle, "_fred") ;
9725         if (symbol == NULL) {
9726             printf ("2\n") ;
9727             fflush (stdout) ;
9728             exit(0);
9729         }
9730         printf ("3\n") ;
9731     }
9732     else
9733         printf ("4\n") ;
9734     fflush (stdout) ;
9735     exit(0);
9736 }
9737 EOM
9738         : Call the object file tmp-dyna.o in case dlext=o.
9739         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9740                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9741                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9742                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9743                 xxx=`$run ./fred`
9744                 case $xxx in
9745                 1)      echo "Test program failed using dlopen." >&4
9746                         echo "Perhaps you should not use dynamic loading." >&4;;
9747                 2)      echo "Test program failed using dlsym." >&4
9748                         echo "Perhaps you should not use dynamic loading." >&4;;
9749                 3)      echo "dlsym needs a leading underscore" >&4
9750                         val="$define" ;;
9751                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9752                 esac
9753         else
9754                 echo "I can't compile and run the test program." >&4
9755                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9756         fi
9757         ;;
9758 esac
9759                 
9760 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9761
9762 set d_dlsymun
9763 eval $setvar
9764
9765 : see if prototype for drand48 is available
9766 echo " "
9767 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9768 eval $hasproto
9769
9770 : see if dup2 exists
9771 set dup2 d_dup2
9772 eval $inlibc
9773
9774 : see if eaccess exists
9775 set eaccess d_eaccess
9776 eval $inlibc
9777
9778 : see if endgrent exists
9779 set endgrent d_endgrent
9780 eval $inlibc
9781
9782 : see if endhostent exists
9783 set endhostent d_endhent
9784 eval $inlibc
9785
9786 : see if endnetent exists
9787 set endnetent d_endnent
9788 eval $inlibc
9789
9790 : see if endprotoent exists
9791 set endprotoent d_endpent
9792 eval $inlibc
9793
9794 : see if endpwent exists
9795 set endpwent d_endpwent
9796 eval $inlibc
9797
9798 : see if endservent exists
9799 set endservent d_endsent
9800 eval $inlibc
9801
9802 : Locate the flags for 'open()'
9803 echo " "
9804 $cat >try.c <<'EOCP'
9805 #include <sys/types.h>
9806 #ifdef I_FCNTL
9807 #include <fcntl.h>
9808 #endif
9809 #ifdef I_SYS_FILE
9810 #include <sys/file.h>
9811 #endif
9812 int main() {
9813         if(O_RDONLY);
9814 #ifdef O_TRUNC
9815         exit(0);
9816 #else
9817         exit(1);
9818 #endif
9819 }
9820 EOCP
9821 : check sys/file.h first to get FREAD on Sun
9822 if $test `./findhdr sys/file.h` && \
9823                 set try -DI_SYS_FILE && eval $compile; then
9824         h_sysfile=true;
9825         echo "<sys/file.h> defines the O_* constants..." >&4
9826         if $run ./try; then
9827                 echo "and you have the 3 argument form of open()." >&4
9828                 val="$define"
9829         else
9830                 echo "but not the 3 argument form of open().  Oh, well." >&4
9831                 val="$undef"
9832         fi
9833 elif $test `./findhdr fcntl.h` && \
9834                 set try -DI_FCNTL && eval $compile; then
9835         h_fcntl=true;
9836         echo "<fcntl.h> defines the O_* constants..." >&4
9837         if $run ./try; then
9838                 echo "and you have the 3 argument form of open()." >&4
9839                 val="$define"
9840         else
9841                 echo "but not the 3 argument form of open().  Oh, well." >&4
9842                 val="$undef"
9843         fi
9844 else
9845         val="$undef"
9846         echo "I can't find the O_* constant definitions!  You got problems." >&4
9847 fi
9848 set d_open3
9849 eval $setvar
9850 $rm -f try try.*
9851
9852 : see which of string.h or strings.h is needed
9853 echo " "
9854 strings=`./findhdr string.h`
9855 if $test "$strings" && $test -r "$strings"; then
9856         echo "Using <string.h> instead of <strings.h>." >&4
9857         val="$define"
9858 else
9859         val="$undef"
9860         strings=`./findhdr strings.h`
9861         if $test "$strings" && $test -r "$strings"; then
9862                 echo "Using <strings.h> instead of <string.h>." >&4
9863         else
9864                 echo "No string header found -- You'll surely have problems." >&4
9865         fi
9866 fi
9867 set i_string
9868 eval $setvar
9869 case "$i_string" in
9870 "$undef") strings=`./findhdr strings.h`;;
9871 *)        strings=`./findhdr string.h`;;
9872 esac
9873
9874 : see if this is a sys/file.h system
9875 val=''
9876 set sys/file.h val
9877 eval $inhdr
9878
9879 : do we need to include sys/file.h ?
9880 case "$val" in
9881 "$define")
9882         echo " "
9883         if $h_sysfile; then
9884                 val="$define"
9885                 echo "We'll be including <sys/file.h>." >&4
9886         else
9887                 val="$undef"
9888                 echo "We won't be including <sys/file.h>." >&4
9889         fi
9890         ;;
9891 *)
9892         h_sysfile=false
9893         ;;
9894 esac
9895 set i_sysfile
9896 eval $setvar
9897
9898 : see if fcntl.h is there
9899 val=''
9900 set fcntl.h val
9901 eval $inhdr
9902
9903 : see if we can include fcntl.h
9904 case "$val" in
9905 "$define")
9906         echo " "
9907         if $h_fcntl; then
9908                 val="$define"
9909                 echo "We'll be including <fcntl.h>." >&4
9910         else
9911                 val="$undef"
9912                 if $h_sysfile; then
9913         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9914                 else
9915                         echo "We won't be including <fcntl.h>." >&4
9916                 fi
9917         fi
9918         ;;
9919 *)
9920         h_fcntl=false
9921         val="$undef"
9922         ;;
9923 esac
9924 set i_fcntl
9925 eval $setvar
9926
9927 : check for non-blocking I/O stuff
9928 case "$h_sysfile" in
9929 true) echo "#include <sys/file.h>" > head.c;;
9930 *)
9931        case "$h_fcntl" in
9932        true) echo "#include <fcntl.h>" > head.c;;
9933        *) echo "#include <sys/fcntl.h>" > head.c;;
9934        esac
9935        ;;
9936 esac
9937 echo " "
9938 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9939 case "$o_nonblock" in
9940 '')
9941         $cat head.c > try.c
9942         $cat >>try.c <<EOCP
9943 #include <stdio.h>
9944 #include <stdlib.h>
9945 #$i_fcntl I_FCNTL
9946 #ifdef I_FCNTL
9947 #include <fcntl.h>
9948 #endif
9949 int main() {
9950 #ifdef O_NONBLOCK
9951         printf("O_NONBLOCK\n");
9952         exit(0);
9953 #endif
9954 #ifdef O_NDELAY
9955         printf("O_NDELAY\n");
9956         exit(0);
9957 #endif
9958 #ifdef FNDELAY
9959         printf("FNDELAY\n");
9960         exit(0);
9961 #endif
9962         exit(0);
9963 }
9964 EOCP
9965         set try
9966         if eval $compile_ok; then
9967                 o_nonblock=`$run ./try`
9968                 case "$o_nonblock" in
9969                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9970                 *) echo "Seems like we can use $o_nonblock.";;
9971                 esac
9972         else
9973                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9974         fi
9975         ;;
9976 *) echo "Using $hint value $o_nonblock.";;
9977 esac
9978 $rm -f try try.* .out core
9979
9980 echo " "
9981 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9982 case "$eagain" in
9983 '')
9984         $cat head.c > try.c
9985         $cat >>try.c <<EOCP
9986 #include <errno.h>
9987 #include <sys/types.h>
9988 #include <signal.h>
9989 #include <stdio.h> 
9990 #include <stdlib.h> 
9991 #define MY_O_NONBLOCK $o_nonblock
9992 #ifndef errno  /* XXX need better Configure test */
9993 extern int errno;
9994 #endif
9995 #$i_unistd I_UNISTD
9996 #ifdef I_UNISTD
9997 #include <unistd.h>
9998 #endif
9999 #$i_string I_STRING
10000 #ifdef I_STRING
10001 #include <string.h>
10002 #else
10003 #include <strings.h>
10004 #endif
10005 $signal_t blech(x) int x; { exit(3); }
10006 EOCP
10007         $cat >> try.c <<'EOCP'
10008 int main()
10009 {
10010         int pd[2];
10011         int pu[2];
10012         char buf[1];
10013         char string[100];
10014
10015         pipe(pd);       /* Down: child -> parent */
10016         pipe(pu);       /* Up: parent -> child */
10017         if (0 != fork()) {
10018                 int ret;
10019                 close(pd[1]);   /* Parent reads from pd[0] */
10020                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10021 #ifdef F_SETFL
10022                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10023                         exit(1);
10024 #else
10025                 exit(4);
10026 #endif
10027                 signal(SIGALRM, blech);
10028                 alarm(5);
10029                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10030                         exit(2);
10031                 sprintf(string, "%d\n", ret);
10032                 write(2, string, strlen(string));
10033                 alarm(0);
10034 #ifdef EAGAIN
10035                 if (errno == EAGAIN) {
10036                         printf("EAGAIN\n");
10037                         goto ok;
10038                 }
10039 #endif
10040 #ifdef EWOULDBLOCK
10041                 if (errno == EWOULDBLOCK)
10042                         printf("EWOULDBLOCK\n");
10043 #endif
10044         ok:
10045                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10046                 sleep(2);                               /* Give it time to close our pipe */
10047                 alarm(5);
10048                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10049                 alarm(0);
10050                 sprintf(string, "%d\n", ret);
10051                 write(3, string, strlen(string));
10052                 exit(0);
10053         }
10054
10055         close(pd[0]);                   /* We write to pd[1] */
10056         close(pu[1]);                   /* We read from pu[0] */
10057         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10058         close(pd[1]);                   /* Pipe pd is now fully closed! */
10059         exit(0);                                /* Bye bye, thank you for playing! */
10060 }
10061 EOCP
10062         set try
10063         if eval $compile_ok; then
10064                 echo "$startsh" >mtry
10065                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
10066                 chmod +x mtry
10067                 ./mtry >/dev/null 2>&1
10068                 case $? in
10069                 0) eagain=`$cat try.out`;;
10070                 1) echo "Could not perform non-blocking setting!";;
10071                 2) echo "I did a successful read() for something that was not there!";;
10072                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10073                 4) echo "Could not find F_SETFL!";;
10074                 *) echo "Something terribly wrong happened during testing.";;
10075                 esac
10076                 rd_nodata=`$cat try.ret`
10077                 echo "A read() system call with no data present returns $rd_nodata."
10078                 case "$rd_nodata" in
10079                 0|-1) ;;
10080                 *)
10081                         echo "(That's peculiar, fixing that to be -1.)"
10082                         rd_nodata=-1
10083                         ;;
10084                 esac
10085                 case "$eagain" in
10086                 '')
10087                         echo "Forcing errno EAGAIN on read() with no data available."
10088                         eagain=EAGAIN
10089                         ;;
10090                 *)
10091                         echo "Your read() sets errno to $eagain when no data is available."
10092                         ;;
10093                 esac
10094                 status=`$cat try.err`
10095                 case "$status" in
10096                 0) echo "And it correctly returns 0 to signal EOF.";;
10097                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10098                 *) echo "However, your read() returns '$status' on EOF??";;
10099                 esac
10100                 val="$define"
10101                 if test "$status" = "$rd_nodata"; then
10102                         echo "WARNING: you can't distinguish between EOF and no data!"
10103                         val="$undef"
10104                 fi
10105         else
10106                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10107                 eagain=EAGAIN
10108         fi
10109         set d_eofnblk
10110         eval $setvar
10111         ;;
10112 *)
10113         echo "Using $hint value $eagain."
10114         echo "Your read() returns $rd_nodata when no data is present."
10115         case "$d_eofnblk" in
10116         "$define") echo "And you can see EOF because read() returns 0.";;
10117         "$undef") echo "But you can't see EOF status from read() returned value.";;
10118         *)
10119                 echo "(Assuming you can't see EOF status from read anyway.)"
10120                 d_eofnblk=$undef
10121                 ;;
10122         esac
10123         ;;
10124 esac
10125 $rm -f try try.* .out core head.c mtry
10126
10127 : see if fchdir exists
10128 set fchdir d_fchdir
10129 eval $inlibc
10130
10131 : see if fchmod exists
10132 set fchmod d_fchmod
10133 eval $inlibc
10134
10135 : see if fchown exists
10136 set fchown d_fchown
10137 eval $inlibc
10138
10139 : see if this is an fcntl system
10140 set fcntl d_fcntl
10141 eval $inlibc
10142
10143 echo " "
10144 : See if fcntl-based locking works.
10145 $cat >try.c <<EOCP
10146 #include <stdlib.h>
10147 #include <unistd.h>
10148 #include <fcntl.h>
10149 #include <signal.h>
10150 $signal_t blech(x) int x; { exit(3); }
10151 int main() {
10152 #if defined(F_SETLK) && defined(F_SETLKW)
10153      struct flock flock;
10154      int retval, fd;
10155      fd = open("try.c", O_RDONLY);
10156      flock.l_type = F_RDLCK;
10157      flock.l_whence = SEEK_SET;
10158      flock.l_start = flock.l_len = 0;
10159      signal(SIGALRM, blech);
10160      alarm(10);
10161      retval = fcntl(fd, F_SETLK, &flock);
10162      close(fd);
10163      (retval < 0 ? exit(2) : exit(0));
10164 #else
10165      exit(2);
10166 #endif
10167 }
10168 EOCP
10169 echo "Checking if fcntl-based file locking works... "
10170 case "$d_fcntl" in
10171 "$define")
10172         set try
10173         if eval $compile_ok; then
10174                 if $run ./try; then
10175                         echo "Yes, it seems to work."
10176                         val="$define"
10177                 else
10178                         echo "Nope, it didn't work."
10179                         val="$undef"
10180                         case "$?" in
10181                         3) $cat >&4 <<EOM
10182 ***
10183 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10184 *** This is (almost) impossible.
10185 *** If your NFS lock daemons are not feeling well, something like
10186 *** this may happen, please investigate.  Cannot continue, aborting.
10187 ***
10188 EOM
10189                                 exit 1
10190                                 ;;
10191                         esac
10192                 fi
10193         else
10194                 echo "I'm unable to compile the test program, so I'll assume not."
10195                 val="$undef"
10196         fi
10197         ;;
10198 *) val="$undef";
10199         echo "Nope, since you don't even have fcntl()."
10200         ;;
10201 esac
10202 set d_fcntl_can_lock
10203 eval $setvar
10204 $rm -f try*
10205
10206
10207 : see if sys/select.h has to be included
10208 set sys/select.h i_sysselct
10209 eval $inhdr
10210
10211 : see if we should include time.h, sys/time.h, or both
10212 echo " "
10213 if test "X$timeincl" = X; then
10214         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10215         $echo $n "I'm now running the test program...$c"
10216         $cat >try.c <<'EOCP'
10217 #include <sys/types.h>
10218 #ifdef I_TIME
10219 #include <time.h>
10220 #endif
10221 #ifdef I_SYSTIME
10222 #ifdef SYSTIMEKERNEL
10223 #define KERNEL
10224 #endif
10225 #include <sys/time.h>
10226 #endif
10227 #ifdef I_SYSSELECT
10228 #include <sys/select.h>
10229 #endif
10230 int main()
10231 {
10232         struct tm foo;
10233 #ifdef S_TIMEVAL
10234         struct timeval bar;
10235 #endif
10236 #ifdef S_TIMEZONE
10237         struct timezone tzp;
10238 #endif
10239         if (foo.tm_sec == foo.tm_sec)
10240                 exit(0);
10241 #ifdef S_TIMEVAL
10242         if (bar.tv_sec == bar.tv_sec)
10243                 exit(0);
10244 #endif
10245         exit(1);
10246 }
10247 EOCP
10248         flags=''
10249         for s_timezone in '-DS_TIMEZONE' ''; do
10250         sysselect=''
10251         for s_timeval in '-DS_TIMEVAL' ''; do
10252         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10253         for i_time in '' '-DI_TIME'; do
10254         for i_systime in '-DI_SYSTIME' ''; do
10255                 case "$flags" in
10256                 '') $echo $n ".$c"
10257                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10258                         if eval $compile; then
10259                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10260                                 shift
10261                                 flags="$*"
10262                                 echo " "
10263                                 $echo $n "Succeeded with $flags$c"
10264                         fi
10265                         ;;
10266                 esac
10267         done
10268         done
10269         done
10270         done
10271         done
10272         timeincl=''
10273         echo " "
10274         case "$flags" in
10275         *SYSTIMEKERNEL*) i_systimek="$define"
10276                 timeincl=`./findhdr sys/time.h`
10277                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10278         *) i_systimek="$undef";;
10279         esac
10280         case "$flags" in
10281         *I_TIME*) i_time="$define"
10282                 timeincl=`./findhdr time.h`" $timeincl"
10283                 echo "We'll include <time.h>." >&4;;
10284         *) i_time="$undef";;
10285         esac
10286         case "$flags" in
10287         *I_SYSTIME*) i_systime="$define"
10288                 timeincl=`./findhdr sys/time.h`" $timeincl"
10289                 echo "We'll include <sys/time.h>." >&4;;
10290         *) i_systime="$undef";;
10291         esac
10292         $rm -f try.c try
10293 fi
10294
10295 : check for fd_set items
10296 $cat <<EOM
10297
10298 Checking to see how well your C compiler handles fd_set and friends ...
10299 EOM
10300 $cat >try.c <<EOCP
10301 #$i_systime I_SYS_TIME
10302 #$i_sysselct I_SYS_SELECT
10303 #$d_socket HAS_SOCKET
10304 #include <sys/types.h>
10305 #ifdef HAS_SOCKET
10306 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10307 #endif
10308 #ifdef I_SYS_TIME
10309 #include <sys/time.h>
10310 #endif
10311 #ifdef I_SYS_SELECT
10312 #include <sys/select.h>
10313 #endif
10314 int main() {
10315         fd_set fds;
10316
10317 #ifdef TRYBITS
10318         if(fds.fds_bits);
10319 #endif
10320
10321 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10322         exit(0);
10323 #else
10324         exit(1);
10325 #endif
10326 }
10327 EOCP
10328 set try -DTRYBITS
10329 if eval $compile; then
10330         d_fds_bits="$define"
10331         d_fd_set="$define"
10332         echo "Well, your system knows about the normal fd_set typedef..." >&4
10333         if $run ./try; then
10334                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10335                 d_fd_macros="$define"
10336         else
10337                 $cat >&4 <<'EOM'
10338 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10339 EOM
10340                 d_fd_macros="$undef"
10341         fi
10342 else
10343         $cat <<'EOM'
10344 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10345 EOM
10346         set try
10347         if eval $compile; then
10348                 d_fds_bits="$undef"
10349                 d_fd_set="$define"
10350                 echo "Well, your system has some sort of fd_set available..." >&4
10351                 if $run ./try; then
10352                         echo "and you have the normal fd_set macros." >&4
10353                         d_fd_macros="$define"
10354                 else
10355                         $cat <<'EOM'
10356 but not the normal fd_set macros!  Gross!  More work for me...
10357 EOM
10358                         d_fd_macros="$undef"
10359                 fi
10360         else
10361         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10362                 d_fd_set="$undef"
10363                 d_fds_bits="$undef"
10364                 d_fd_macros="$undef"
10365         fi
10366 fi
10367 $rm -f try try.*
10368
10369 : see if fgetpos exists
10370 set fgetpos d_fgetpos
10371 eval $inlibc
10372
10373 : see if finite exists
10374 set finite d_finite
10375 eval $inlibc
10376
10377 : see if finitel exists
10378 set finitel d_finitel
10379 eval $inlibc
10380
10381 : see if flock exists
10382 set flock d_flock
10383 eval $inlibc
10384
10385 : see if prototype for flock is available
10386 echo " "
10387 set d_flockproto flock $i_sysfile sys/file.h
10388 eval $hasproto
10389
10390 : see if fork exists
10391 set fork d_fork
10392 eval $inlibc
10393
10394 : see if fp_class exists
10395 set fp_class d_fp_class
10396 eval $inlibc
10397
10398 : see if pathconf exists
10399 set pathconf d_pathconf
10400 eval $inlibc
10401
10402 : see if fpathconf exists
10403 set fpathconf d_fpathconf
10404 eval $inlibc
10405
10406 : see if fpclass exists
10407 set fpclass d_fpclass
10408 eval $inlibc
10409
10410 : see if fpclassify exists
10411 set fpclassify d_fpclassify
10412 eval $inlibc
10413
10414 : see if fpclassl exists
10415 set fpclassl d_fpclassl
10416 eval $inlibc
10417
10418
10419 : check for fpos64_t
10420 echo " "
10421 echo "Checking to see if you have fpos64_t..." >&4
10422 $cat >try.c <<EOCP
10423 #include <stdio.h>
10424 int main() { fpos64_t x = 7; }
10425 EOCP
10426 set try
10427 if eval $compile; then
10428         val="$define"
10429         echo "You have fpos64_t."
10430 else
10431         val="$undef"
10432         echo "You do not have fpos64_t."
10433         case "$fpossize" in
10434         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10435         esac
10436 fi
10437 $rm -f try.* try
10438 set d_fpos64_t
10439 eval $setvar
10440
10441 : see if frexpl exists
10442 set frexpl d_frexpl
10443 eval $inlibc
10444
10445 : see if this is a sys/param system
10446 set sys/param.h i_sysparam
10447 eval $inhdr
10448
10449 : see if this is a sys/mount.h system
10450 set sys/mount.h i_sysmount
10451 eval $inhdr
10452
10453
10454 echo " "
10455 echo "Checking to see if your system supports struct fs_data..." >&4
10456 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10457 eval $hasstruct
10458 case "$d_fs_data_s" in
10459 "$define")      echo "Yes, it does."   ;;
10460 *)              echo "No, it doesn't." ;;
10461 esac
10462
10463 : see if fseeko exists
10464 set fseeko d_fseeko
10465 eval $inlibc
10466 case "$longsize" in
10467 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10468 esac
10469
10470 : see if fsetpos exists
10471 set fsetpos d_fsetpos
10472 eval $inlibc
10473
10474
10475 : see if fstatfs exists
10476 set fstatfs d_fstatfs
10477 eval $inlibc
10478
10479
10480 : see if statvfs exists
10481 set statvfs d_statvfs
10482 eval $inlibc
10483
10484 : see if fstatvfs exists
10485 set fstatvfs d_fstatvfs
10486 eval $inlibc
10487
10488
10489 : see if fsync exists
10490 set fsync d_fsync
10491 eval $inlibc
10492
10493 : see if ftello exists
10494 set ftello d_ftello
10495 eval $inlibc
10496 case "$longsize" in
10497 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10498 esac
10499
10500 : see if getcwd exists
10501 set getcwd d_getcwd
10502 eval $inlibc
10503
10504 : see if getespwnam exists
10505 set getespwnam d_getespwnam
10506 eval $inlibc
10507
10508
10509 : see if getfsstat exists
10510 set getfsstat d_getfsstat
10511 eval $inlibc
10512
10513 : see if getgrent exists
10514 set getgrent d_getgrent
10515 eval $inlibc
10516
10517 : see if gethostbyaddr exists
10518 set gethostbyaddr d_gethbyaddr
10519 eval $inlibc
10520
10521 : see if gethostbyname exists
10522 set gethostbyname d_gethbyname
10523 eval $inlibc
10524
10525 : see if gethostent exists
10526 set gethostent d_gethent
10527 eval $inlibc
10528
10529 : see how we will look up host name
10530 echo " "
10531 call=''
10532 if set gethostname val -f d_gethname; eval $csym; $val; then
10533         echo 'gethostname() found.' >&4
10534         d_gethname="$define"
10535         call=gethostname
10536 fi
10537 if set uname val -f d_uname; eval $csym; $val; then
10538         if ./xenix; then
10539                 $cat <<'EOM'
10540 uname() was found, but you're running xenix, and older versions of xenix
10541 have a broken uname(). If you don't really know whether your xenix is old
10542 enough to have a broken system call, use the default answer.
10543
10544 EOM
10545                 dflt=y
10546                 case "$d_uname" in
10547                 "$define") dflt=n;;
10548                 esac
10549                 rp='Is your uname() broken?'
10550                 . ./myread
10551                 case "$ans" in
10552                 n*) d_uname="$define"; call=uname;;
10553                 esac
10554         else
10555                 echo 'uname() found.' >&4
10556                 d_uname="$define"
10557                 case "$call" in
10558                 '') call=uname ;;
10559                 esac
10560         fi
10561 fi
10562 case "$d_gethname" in
10563 '') d_gethname="$undef";;
10564 esac
10565 case "$d_uname" in
10566 '') d_uname="$undef";;
10567 esac
10568 case "$d_uname$d_gethname" in
10569 *define*)
10570         dflt=n
10571         cat <<EOM
10572  
10573 Every now and then someone has a $call() that lies about the hostname
10574 but can't be fixed for political or economic reasons.  If you wish, I can
10575 pretend $call() isn't there and maybe compute hostname at run-time
10576 thanks to the '$phostname' command.
10577
10578 EOM
10579         rp="Shall I ignore $call() from now on?"
10580         . ./myread
10581         case "$ans" in
10582         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10583         esac;;
10584 esac
10585 case "$phostname" in
10586 '') aphostname='';;
10587 *) case "$aphostname" in
10588         /*) ;;
10589         *) set X $phostname
10590                 shift
10591                 file=$1
10592                 shift
10593                 file=`./loc $file $file $pth`
10594                 aphostname=`echo $file $*`
10595                 ;;
10596         esac
10597         ;;
10598 esac
10599 case "$d_uname$d_gethname" in
10600 *define*) ;;
10601 *)
10602         case "$phostname" in
10603         '')
10604                 echo "There will be no way for $package to get your hostname." >&4;;
10605         *)
10606         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10607                 ;;
10608         esac;;
10609 esac
10610 case "$d_phostname" in
10611 '') d_phostname="$undef";;
10612 esac
10613
10614 : see if this is a netdb.h system
10615 set netdb.h i_netdb
10616 eval $inhdr
10617
10618 : see if prototypes for various gethostxxx netdb.h functions are available
10619 echo " "
10620 set d_gethostprotos gethostent $i_netdb netdb.h
10621 eval $hasproto
10622
10623 : see if getitimer exists
10624 set getitimer d_getitimer
10625 eval $inlibc
10626
10627 : see if getlogin exists
10628 set getlogin d_getlogin
10629 eval $inlibc
10630
10631 : see if getmnt exists
10632 set getmnt d_getmnt
10633 eval $inlibc
10634
10635 : see if getmntent exists
10636 set getmntent d_getmntent
10637 eval $inlibc
10638
10639 : see if getnetbyaddr exists
10640 set getnetbyaddr d_getnbyaddr
10641 eval $inlibc
10642
10643 : see if getnetbyname exists
10644 set getnetbyname d_getnbyname
10645 eval $inlibc
10646
10647 : see if getnetent exists
10648 set getnetent d_getnent
10649 eval $inlibc
10650
10651 : see if prototypes for various getnetxxx netdb.h functions are available
10652 echo " "
10653 set d_getnetprotos getnetent $i_netdb netdb.h
10654 eval $hasproto
10655
10656 : see if getpagesize exists
10657 set getpagesize d_getpagsz
10658 eval $inlibc
10659
10660
10661 : see if getprotobyname exists
10662 set getprotobyname d_getpbyname
10663 eval $inlibc
10664
10665 : see if getprotobynumber exists
10666 set getprotobynumber d_getpbynumber
10667 eval $inlibc
10668
10669 : see if getprotoent exists
10670 set getprotoent d_getpent
10671 eval $inlibc
10672
10673 : see if getpgid exists
10674 set getpgid d_getpgid
10675 eval $inlibc
10676
10677 : see if getpgrp2 exists
10678 set getpgrp2 d_getpgrp2
10679 eval $inlibc
10680
10681 : see if getppid exists
10682 set getppid d_getppid
10683 eval $inlibc
10684
10685 : see if getpriority exists
10686 set getpriority d_getprior
10687 eval $inlibc
10688
10689 : see if prototypes for various getprotoxxx netdb.h functions are available
10690 echo " "
10691 set d_getprotoprotos getprotoent $i_netdb netdb.h
10692 eval $hasproto
10693
10694 : see if getprpwnam exists
10695 set getprpwnam d_getprpwnam
10696 eval $inlibc
10697
10698 : see if getpwent exists
10699 set getpwent d_getpwent
10700 eval $inlibc
10701
10702
10703 : see if getservbyname exists
10704 set getservbyname d_getsbyname
10705 eval $inlibc
10706
10707 : see if getservbyport exists
10708 set getservbyport d_getsbyport
10709 eval $inlibc
10710
10711 : see if getservent exists
10712 set getservent d_getsent
10713 eval $inlibc
10714
10715 : see if prototypes for various getservxxx netdb.h functions are available
10716 echo " "
10717 set d_getservprotos getservent $i_netdb netdb.h
10718 eval $hasproto
10719
10720 : see if getspnam exists
10721 set getspnam d_getspnam
10722 eval $inlibc
10723
10724 : see if gettimeofday or ftime exists
10725 set gettimeofday d_gettimeod
10726 eval $inlibc
10727 case "$d_gettimeod" in
10728 "$undef")
10729         set ftime d_ftime 
10730         eval $inlibc
10731         ;;
10732 *)
10733         val="$undef"; set d_ftime; eval $setvar
10734         ;;
10735 esac
10736 case "$d_gettimeod$d_ftime" in
10737 "$undef$undef")
10738         echo " "
10739         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10740         ;;
10741 esac
10742
10743 : see if this is an grp system
10744 set grp.h i_grp
10745 eval $inhdr
10746
10747 case "$i_grp" in
10748 $define)
10749         xxx=`./findhdr grp.h`
10750         $cppstdin $cppflags $cppminus < $xxx >$$.h
10751
10752         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10753                 val="$define"
10754         else
10755                 val="$undef"
10756         fi
10757         set d_grpasswd
10758         eval $setvar
10759
10760         $rm -f $$.h
10761         ;;
10762 *)
10763         val="$undef";
10764         set d_grpasswd; eval $setvar
10765         ;;
10766 esac
10767
10768 : see if hasmntopt exists
10769 set hasmntopt d_hasmntopt
10770 eval $inlibc
10771
10772 : see if this is a netinet/in.h or sys/in.h system
10773 set netinet/in.h i_niin sys/in.h i_sysin
10774 eval $inhdr
10775
10776 : see if arpa/inet.h has to be included
10777 set arpa/inet.h i_arpainet
10778 eval $inhdr
10779
10780 : see if htonl --and friends-- exists
10781 val=''
10782 set htonl val
10783 eval $inlibc
10784
10785 : Maybe they are macros.
10786 case "$val" in
10787 $undef)
10788         $cat >htonl.c <<EOM
10789 #include <stdio.h>
10790 #include <sys/types.h>
10791 #$i_niin I_NETINET_IN
10792 #$i_sysin I_SYS_IN
10793 #$i_arpainet I_ARPA_INET
10794 #ifdef I_NETINET_IN
10795 #include <netinet/in.h>
10796 #endif
10797 #ifdef I_SYS_IN
10798 #include <sys/in.h>
10799 #endif
10800 #ifdef I_ARPA_INET
10801 #include <arpa/inet.h>
10802 #endif
10803 #ifdef htonl
10804 printf("Defined as a macro.");
10805 #endif
10806 EOM
10807         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10808         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10809                 val="$define"
10810                 echo "But it seems to be defined as a macro." >&4
10811         fi
10812         $rm -f htonl.?
10813         ;;
10814 esac
10815 set d_htonl
10816 eval $setvar
10817
10818 : index or strchr
10819 echo " "
10820 if set index val -f; eval $csym; $val; then
10821         if set strchr val -f d_strchr; eval $csym; $val; then
10822                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10823                         val="$define"
10824                         vali="$undef"
10825                         echo "strchr() found." >&4
10826                 else
10827                         val="$undef"
10828                         vali="$define"
10829                         echo "index() found." >&4
10830                 fi
10831         else
10832                 val="$undef"
10833                 vali="$define"
10834                 echo "index() found." >&4
10835         fi
10836 else
10837         if set strchr val -f d_strchr; eval $csym; $val; then
10838                 val="$define"
10839                 vali="$undef"
10840                 echo "strchr() found." >&4
10841         else
10842                 echo "No index() or strchr() found!" >&4
10843                 val="$undef"
10844                 vali="$undef"
10845         fi
10846 fi
10847 set d_strchr; eval $setvar
10848 val="$vali"
10849 set d_index; eval $setvar
10850
10851 : check whether inet_aton exists
10852 set inet_aton d_inetaton
10853 eval $inlibc
10854
10855 : Look for isascii
10856 echo " "
10857 $cat >isascii.c <<'EOCP'
10858 #include <stdio.h>
10859 #include <ctype.h>
10860 int main() {
10861         int c = 'A';
10862         if (isascii(c))
10863                 exit(0);
10864         else
10865                 exit(1);
10866 }
10867 EOCP
10868 set isascii
10869 if eval $compile; then
10870         echo "isascii() found." >&4
10871         val="$define"
10872 else
10873         echo "isascii() NOT found." >&4
10874         val="$undef"
10875 fi
10876 set d_isascii
10877 eval $setvar
10878 $rm -f isascii*
10879
10880 : see if isfinite exists
10881 set isfinite d_isfinite
10882 eval $inlibc
10883
10884 : see if isinf exists
10885 set isinf d_isinf
10886 eval $inlibc
10887
10888 : see if isnan exists
10889 set isnan d_isnan
10890 eval $inlibc
10891
10892 : see if isnanl exists
10893 set isnanl d_isnanl
10894 eval $inlibc
10895
10896 : see if killpg exists
10897 set killpg d_killpg
10898 eval $inlibc
10899
10900 : see if lchown exists
10901 echo " "
10902 $cat > try.c <<'EOCP'
10903 /* System header to define __stub macros and hopefully few prototypes,
10904     which can conflict with char lchown(); below.  */
10905 #include <assert.h>
10906 /* Override any gcc2 internal prototype to avoid an error.  */
10907 /* We use char because int might match the return type of a gcc2
10908    builtin and then its argument prototype would still apply.  */
10909 char lchown();
10910 int main() {
10911     /*  The GNU C library defines this for functions which it implements
10912         to always fail with ENOSYS.  Some functions are actually named
10913         something starting with __ and the normal name is an alias.  */
10914 #if defined (__stub_lchown) || defined (__stub___lchown)
10915 choke me
10916 #else
10917 lchown();
10918 #endif
10919 ; return 0; }
10920 EOCP
10921 set try
10922 if eval $compile; then
10923     $echo "lchown() found." >&4
10924     val="$define"
10925 else
10926     $echo "lchown() NOT found." >&4
10927     val="$undef"
10928 fi
10929 set d_lchown
10930 eval $setvar
10931
10932 : See if number of significant digits in a double precision number is known
10933 echo " "
10934 $cat >ldbl_dig.c <<EOM
10935 #$i_limits I_LIMITS
10936 #$i_float I_FLOAT
10937 #ifdef I_LIMITS
10938 #include <limits.h>
10939 #endif
10940 #ifdef I_FLOAT
10941 #include <float.h>
10942 #endif
10943 #ifdef LDBL_DIG
10944 printf("Contains LDBL_DIG");
10945 #endif
10946 EOM
10947 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10948 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10949         echo "LDBL_DIG found." >&4
10950         val="$define"
10951 else
10952         echo "LDBL_DIG NOT found." >&4
10953         val="$undef"
10954 fi
10955 $rm -f ldbl_dig.?
10956 set d_ldbl_dig
10957 eval $setvar
10958
10959 : see if link exists
10960 set link d_link
10961 eval $inlibc
10962
10963 : see if localeconv exists
10964 set localeconv d_locconv
10965 eval $inlibc
10966
10967 : see if lockf exists
10968 set lockf d_lockf
10969 eval $inlibc
10970
10971 : see if prototype for lseek is available
10972 echo " "
10973 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10974 eval $hasproto
10975
10976 : see if lstat exists
10977 set lstat d_lstat
10978 eval $inlibc
10979
10980 : see if madvise exists
10981 set madvise d_madvise
10982 eval $inlibc
10983
10984 : see if mblen exists
10985 set mblen d_mblen
10986 eval $inlibc
10987
10988 : see if mbstowcs exists
10989 set mbstowcs d_mbstowcs
10990 eval $inlibc
10991
10992 : see if mbtowc exists
10993 set mbtowc d_mbtowc
10994 eval $inlibc
10995
10996 : see if memchr exists
10997 set memchr d_memchr
10998 eval $inlibc
10999
11000 : see if memcmp exists
11001 set memcmp d_memcmp
11002 eval $inlibc
11003
11004 : see if memcpy exists
11005 set memcpy d_memcpy
11006 eval $inlibc
11007
11008 : see if memmove exists
11009 set memmove d_memmove
11010 eval $inlibc
11011
11012 : see if memset exists
11013 set memset d_memset
11014 eval $inlibc
11015
11016 : see if mkdir exists
11017 set mkdir d_mkdir
11018 eval $inlibc
11019
11020 : see if mkdtemp exists
11021 set mkdtemp d_mkdtemp
11022 eval $inlibc
11023
11024 : see if mkfifo exists
11025 set mkfifo d_mkfifo
11026 eval $inlibc
11027
11028 : see if mkstemp exists
11029 set mkstemp d_mkstemp
11030 eval $inlibc
11031
11032 : see if mkstemps exists
11033 set mkstemps d_mkstemps
11034 eval $inlibc
11035
11036 : see if mktime exists
11037 set mktime d_mktime
11038 eval $inlibc
11039
11040 : see if this is a sys/mman.h system
11041 set sys/mman.h i_sysmman
11042 eval $inhdr
11043
11044 : see if mmap exists
11045 set mmap d_mmap
11046 eval $inlibc
11047 : see what shmat returns
11048 : default to something harmless
11049 mmaptype='void *'
11050 case "$i_sysmman$d_mmap" in
11051 "$define$define")
11052         $cat >mmap.c <<'END'
11053 #include <sys/mman.h>
11054 void *mmap();
11055 END
11056         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11057                 mmaptype='void *'
11058         else
11059                 mmaptype='caddr_t'
11060         fi
11061         echo "and it returns ($mmaptype)." >&4
11062         ;;
11063 esac
11064
11065
11066
11067 : see if modfl exists
11068 set modfl d_modfl
11069 eval $inlibc
11070
11071 d_modfl_pow32_bug="$undef"
11072
11073 case "$d_longdbl$d_modfl" in
11074 $define$define)
11075         $cat <<EOM
11076 Checking to see whether your modfl() is okay for large values...
11077 EOM
11078 $cat >try.c <<EOCP
11079 #include <math.h> 
11080 #include <stdio.h>
11081 int main() {
11082     long double nv = 4294967303.15;
11083     long double v, w;
11084     v = modfl(nv, &w);         
11085 #ifdef __GLIBC__
11086     printf("glibc");
11087 #endif
11088     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
11089     return 0;
11090 }
11091 EOCP
11092         case "$osname:$gccversion" in
11093         aix:)   saveccflags="$ccflags"
11094                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
11095         esac
11096         set try
11097         if eval $compile; then
11098                 foo=`$run ./try`
11099                 case "$foo" in
11100                 *" 4294967303.150000 1.150000 4294967302.000000")
11101                         echo >&4 "Your modfl() is broken for large values."
11102                         d_modfl_pow32_bug="$define"
11103                         case "$foo" in
11104                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11105                         ;;
11106                         esac
11107                         ;;
11108                 *" 4294967303.150000 0.150000 4294967303.000000")
11109                         echo >&4 "Your modfl() seems okay for large values."
11110                         ;;
11111                 *)      echo >&4 "I don't understand your modfl() at all."
11112                         d_modfl="$undef"
11113                         ;;
11114                 esac
11115                 $rm -f try.* try core core.try.*
11116         else
11117                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11118                 d_modfl="$undef"
11119         fi
11120         case "$osname:$gccversion" in
11121         aix:)   ccflags="$saveccflags" ;; # restore
11122         esac
11123         ;;
11124 esac
11125
11126 : see if mprotect exists
11127 set mprotect d_mprotect
11128 eval $inlibc
11129
11130 : see if msgctl exists
11131 set msgctl d_msgctl
11132 eval $inlibc
11133
11134 : see if msgget exists
11135 set msgget d_msgget
11136 eval $inlibc
11137
11138 : see if msgsnd exists
11139 set msgsnd d_msgsnd
11140 eval $inlibc
11141
11142 : see if msgrcv exists
11143 set msgrcv d_msgrcv
11144 eval $inlibc
11145
11146 : see how much of the 'msg*(2)' library is present.
11147 h_msg=true
11148 echo " "
11149 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11150 *"$undef"*) h_msg=false;;
11151 esac
11152 case "$osname" in
11153 freebsd)
11154     case "`ipcs 2>&1`" in
11155     "SVID messages"*"not configured"*)
11156         echo "Your $osname does not have the msg*(2) configured." >&4
11157         h_msg=false
11158         val="$undef"
11159         set msgctl d_msgctl
11160         eval $setvar
11161         set msgget d_msgget
11162         eval $setvar
11163         set msgsnd d_msgsnd
11164         eval $setvar
11165         set msgrcv d_msgrcv
11166         eval $setvar
11167         ;;
11168     esac
11169     ;;
11170 esac
11171 : we could also check for sys/ipc.h ...
11172 if $h_msg && $test `./findhdr sys/msg.h`; then
11173         echo "You have the full msg*(2) library." >&4
11174         val="$define"
11175 else
11176         echo "You don't have the full msg*(2) library." >&4
11177         val="$undef"
11178 fi
11179 set d_msg
11180 eval $setvar
11181
11182
11183 echo " "
11184 echo "Checking to see if your system supports struct msghdr..." >&4
11185 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11186 eval $hasstruct
11187 case "$d_msghdr_s" in
11188 "$define")      echo "Yes, it does."   ;;
11189 *)              echo "No, it doesn't." ;;
11190 esac
11191
11192
11193 : see if msync exists
11194 set msync d_msync
11195 eval $inlibc
11196
11197 : see if munmap exists
11198 set munmap d_munmap
11199 eval $inlibc
11200
11201 : see if nice exists
11202 set nice d_nice
11203 eval $inlibc
11204
11205 : see if this is a langinfo.h system
11206 set langinfo.h i_langinfo
11207 eval $inhdr
11208
11209 : see if nl_langinfo exists
11210 set nl_langinfo d_nl_langinfo
11211 eval $inlibc
11212
11213 : check for length of character
11214 echo " "
11215 case "$charsize" in
11216 '')
11217         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11218         $cat >try.c <<'EOCP'
11219 #include <stdio.h>
11220 int main()
11221 {
11222     printf("%d\n", (int)sizeof(char));
11223     exit(0);
11224 }
11225 EOCP
11226         set try
11227         if eval $compile_ok; then
11228                 dflt=`$run ./try`
11229         else
11230                 dflt='1'
11231                 echo "(I can't seem to compile the test program.  Guessing...)"
11232         fi
11233         ;;
11234 *)
11235         dflt="$charsize"
11236         ;;
11237 esac
11238 rp="What is the size of a character (in bytes)?"
11239 . ./myread
11240 charsize="$ans"
11241 $rm -f try.c try
11242
11243 : check for volatile keyword
11244 echo " "
11245 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11246 $cat >try.c <<'EOCP'
11247 int main()
11248 {
11249         typedef struct _goo_struct goo_struct;
11250         goo_struct * volatile goo = ((goo_struct *)0);
11251         struct _goo_struct {
11252                 long long_int;
11253                 int reg_int;
11254                 char char_var;
11255         };
11256         typedef unsigned short foo_t;
11257         char *volatile foo;
11258         volatile int bar;
11259         volatile foo_t blech;
11260         foo = foo;
11261 }
11262 EOCP
11263 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11264         val="$define"
11265         echo "Yup, it does."
11266 else
11267         val="$undef"
11268         echo "Nope, it doesn't."
11269 fi
11270 set d_volatile
11271 eval $setvar
11272 $rm -f try.*
11273
11274
11275 echo " "
11276 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11277
11278 case "$use64bitint:$d_quad:$quadtype" in
11279 define:define:?*)
11280         ivtype="$quadtype"
11281         uvtype="$uquadtype"
11282         ivsize=8
11283         uvsize=8
11284         ;;
11285 *)      ivtype="long"
11286         uvtype="unsigned long"
11287         ivsize=$longsize
11288         uvsize=$longsize
11289         ;;
11290 esac
11291
11292 case "$uselongdouble:$d_longdbl" in
11293 define:define)
11294         nvtype="long double"
11295         nvsize=$longdblsize
11296         ;;
11297 *)      nvtype=double
11298         nvsize=$doublesize
11299         ;;
11300 esac
11301
11302 $echo "(IV will be "$ivtype", $ivsize bytes)"
11303 $echo "(UV will be "$uvtype", $uvsize bytes)"
11304 $echo "(NV will be "$nvtype", $nvsize bytes)"
11305
11306 $cat >try.c <<EOCP
11307 #$i_inttypes I_INTTYPES
11308 #ifdef I_INTTYPES
11309 #include <inttypes.h>
11310 #endif
11311 #include <stdio.h>
11312 int main() {
11313 #ifdef INT8
11314    int8_t i =  INT8_MAX;
11315   uint8_t u = UINT8_MAX;
11316   printf("int8_t\n");
11317 #endif
11318 #ifdef INT16
11319    int16_t i =  INT16_MAX;
11320   uint16_t i = UINT16_MAX;
11321   printf("int16_t\n");
11322 #endif
11323 #ifdef INT32
11324    int32_t i =  INT32_MAX;
11325   uint32_t u = UINT32_MAX;
11326   printf("int32_t\n");
11327 #endif
11328 }
11329 EOCP
11330
11331 case "$i8type" in
11332 '')     case "$charsize" in
11333         1)      i8type=char
11334                 u8type="unsigned char"
11335                 i8size=$charsize
11336                 u8size=$charsize
11337                 ;;
11338         esac
11339         ;;
11340 esac
11341 case "$i8type" in
11342 '')     set try -DINT8
11343         if eval $compile; then
11344                 case "`$run ./try`" in
11345                 int8_t) i8type=int8_t
11346                         u8type=uint8_t
11347                         i8size=1
11348                         u8size=1
11349                         ;;
11350                 esac
11351         fi
11352         ;;
11353 esac
11354 case "$i8type" in
11355 '')     if $test $charsize -ge 1; then
11356                 i8type=char
11357                 u8type="unsigned char"
11358                 i8size=$charsize
11359                 u8size=$charsize
11360         fi
11361         ;;
11362 esac
11363
11364 case "$i16type" in
11365 '')     case "$shortsize" in
11366         2)      i16type=short
11367                 u16type="unsigned short"
11368                 i16size=$shortsize
11369                 u16size=$shortsize
11370                 ;;
11371         esac
11372         ;;
11373 esac
11374 case "$i16type" in
11375 '')     set try -DINT16
11376         if eval $compile; then
11377                 case "`$run ./try`" in
11378                 int16_t)
11379                         i16type=int16_t
11380                         u16type=uint16_t
11381                         i16size=2
11382                         u16size=2
11383                         ;;
11384                 esac
11385         fi
11386         ;;
11387 esac
11388 case "$i16type" in
11389 '')     if $test $shortsize -ge 2; then
11390                 i16type=short
11391                 u16type="unsigned short"
11392                 i16size=$shortsize
11393                 u16size=$shortsize
11394         fi
11395         ;;
11396 esac
11397
11398 case "$i32type" in
11399 '')     case "$longsize" in
11400         4)      i32type=long
11401                 u32type="unsigned long"
11402                 i32size=$longsize
11403                 u32size=$longsize
11404                 ;;
11405         *)      case "$intsize" in
11406                 4)      i32type=int
11407                         u32type="unsigned int"
11408                         i32size=$intsize
11409                         u32size=$intsize
11410                         ;;
11411                 esac
11412                 ;;
11413         esac
11414         ;;
11415 esac
11416 case "$i32type" in
11417 '')     set try -DINT32
11418         if eval $compile; then
11419                 case "`$run ./try`" in
11420                 int32_t)
11421                         i32type=int32_t
11422                         u32type=uint32_t
11423                         i32size=4
11424                         u32size=4
11425                         ;;
11426                 esac
11427         fi
11428         ;;
11429 esac
11430 case "$i32type" in
11431 '')     if $test $intsize -ge 4; then
11432                 i32type=int
11433                 u32type="unsigned int"
11434                 i32size=$intsize
11435                 u32size=$intsize
11436         fi
11437         ;;
11438 esac
11439
11440 case "$i64type" in
11441 '')     case "$d_quad:$quadtype" in
11442         define:?*)
11443                 i64type="$quadtype"
11444                 u64type="$uquadtype"
11445                 i64size=8
11446                 u64size=8
11447                 ;;
11448         esac
11449         ;;
11450 esac
11451
11452 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11453 : volatile so that the compiler has to store it out to memory.
11454 if test X"$d_volatile" = X"$define"; then
11455         volatile=volatile
11456 fi
11457 $cat <<EOP >try.c
11458 #include <stdio.h>
11459 #include <sys/types.h>
11460 #include <signal.h>
11461 #ifdef SIGFPE
11462 $volatile int bletched = 0;
11463 $signal_t blech(s) int s; { bletched = 1; }
11464 #endif
11465 int main() {
11466     $uvtype u = 0;
11467     $nvtype d;
11468     int     n = 8 * $uvsize;
11469     int     i;
11470 #ifdef SIGFPE
11471     signal(SIGFPE, blech);
11472 #endif
11473
11474     for (i = 0; i < n; i++) {
11475       u = u << 1 | ($uvtype)1;
11476       d = ($nvtype)u;
11477       if (($uvtype)d != u)
11478         break;
11479       if (d <= 0)
11480         break;
11481       d = ($nvtype)(u - 1);
11482       if (($uvtype)d != (u - 1))
11483         break;
11484 #ifdef SIGFPE
11485       if (bletched) {
11486         break;
11487 #endif
11488       } 
11489     }
11490     printf("%d\n", ((i == n) ? -n : i));
11491     exit(0);
11492 }
11493 EOP
11494 set try
11495
11496 d_nv_preserves_uv="$undef"
11497 if eval $compile; then
11498         d_nv_preserves_uv_bits="`$run ./try`"
11499 fi
11500 case "$d_nv_preserves_uv_bits" in
11501 \-[1-9]*)       
11502         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11503         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11504         d_nv_preserves_uv="$define"
11505         ;;
11506 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11507         d_nv_preserves_uv="$undef" ;;
11508 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11509         d_nv_preserves_uv_bits="$undef" ;;
11510 esac
11511
11512 $rm -f try.* try
11513
11514
11515 : check for off64_t
11516 echo " "
11517 echo "Checking to see if you have off64_t..." >&4
11518 $cat >try.c <<EOCP
11519 #include <sys/types.h>
11520 #include <unistd.h>
11521 int main() { off64_t x = 7; }
11522 EOCP
11523 set try
11524 if eval $compile; then
11525         val="$define"
11526         echo "You have off64_t."
11527 else
11528         val="$undef"
11529         echo "You do not have off64_t."
11530         case "$lseeksize" in
11531         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11532         esac
11533 fi
11534 $rm -f try.* try
11535 set d_off64_t
11536 eval $setvar
11537
11538 : see if POSIX threads are available
11539 set pthread.h i_pthread
11540 eval $inhdr
11541
11542
11543
11544
11545 : how to create joinable pthreads
11546 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11547         echo " "
11548         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11549         $cat >try.c <<'EOCP'
11550 #include <pthread.h>
11551 int main() {
11552     int detachstate = JOINABLE;
11553 }
11554 EOCP
11555         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11556         if eval $compile; then
11557                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11558                 val="$undef" # Yes, undef.
11559                 set d_old_pthread_create_joinable
11560                 eval $setvar
11561                 val=""
11562                 set old_pthread_create_joinable
11563                 eval $setvar
11564         else
11565                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11566                 if eval $compile; then
11567                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11568                         val="$define"
11569                         set d_old_pthread_create_joinable
11570                         eval $setvar
11571                         val=PTHREAD_CREATE_UNDETACHED
11572                         set old_pthread_create_joinable
11573                         eval $setvar
11574                 else            
11575                         set try -DJOINABLE=__UNDETACHED
11576                         if eval $compile; then
11577                                 echo "You seem to use __UNDETACHED." >&4
11578                                 val="$define"
11579                                 set d_old_pthread_create_joinable
11580                                 eval $setvar
11581                                 val=__UNDETACHED
11582                                 set old_pthread_create_joinable
11583                                 eval $setvar
11584                         else
11585                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11586                                 val="$define"
11587                                 set d_old_pthread_create_joinable
11588                                 eval $setvar
11589                                 val=0
11590                                 set old_pthread_create_joinable
11591                                 eval $setvar
11592                         fi
11593                 fi
11594         fi
11595         $rm -f try try.*
11596 else
11597     d_old_pthread_create_joinable="$undef"
11598     old_pthread_create_joinable=""
11599 fi
11600
11601 : see if pause exists
11602 set pause d_pause
11603 eval $inlibc
11604
11605 : see if pipe exists
11606 set pipe d_pipe
11607 eval $inlibc
11608
11609 : see if poll exists
11610 set poll d_poll
11611 eval $inlibc
11612
11613 : see if readlink exists
11614 set readlink d_readlink
11615 eval $inlibc
11616
11617 echo " "
11618 procselfexe=''
11619 val="$undef"
11620 case "$d_readlink" in
11621 "$define")
11622         if $issymlink /proc/self/exe ; then
11623                 $ls -l /proc/self/exe > reflect
11624                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11625                         echo "You have Linux-like /proc/self/exe."
11626                         procselfexe='"/proc/self/exe"'
11627                         val="$define"
11628                 fi
11629         fi
11630         if $issymlink /proc/curproc/file ; then
11631                 $ls -l /proc/curproc/file > reflect
11632                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11633                         echo "You have BSD-like /proc/curproc/file."
11634                         procselfexe='"/proc/curproc/file"'
11635                         val="$define"
11636                 fi
11637         fi
11638         ;;
11639 esac
11640 $rm -f reflect
11641 set d_procselfexe
11642 eval $setvar
11643
11644 : see if pthread_atfork exists
11645 set pthread_atfork d_pthread_atfork
11646 eval $inlibc
11647
11648
11649 : see whether the various POSIXish _yields exist
11650 $cat >try.c <<EOP
11651 #include <pthread.h>
11652 #include <stdio.h>
11653 int main() {
11654 #ifdef SCHED_YIELD
11655         sched_yield();
11656 #else
11657 #ifdef PTHREAD_YIELD
11658         pthread_yield();
11659 #else
11660 #ifdef PTHREAD_YIELD_NULL
11661         pthread_yield(NULL);
11662 #endif
11663 #endif
11664 #endif
11665 }
11666 EOP
11667 : see if sched_yield exists
11668 set try -DSCHED_YIELD
11669 if eval $compile; then
11670     val="$define"
11671     sched_yield='sched_yield()'
11672 else
11673     val="$undef"
11674 fi
11675 case "$usethreads" in
11676 $define)
11677         case "$val" in
11678         $define) echo 'sched_yield() found.' >&4        ;;
11679         *)       echo 'sched_yield() NOT found.' >&4    ;;
11680         esac
11681 esac
11682 set d_sched_yield
11683 eval $setvar
11684
11685 : see if pthread_yield exists
11686 set try -DPTHREAD_YIELD
11687 if eval $compile; then
11688     val="$define"
11689     case "$sched_yield" in
11690     '') sched_yield='pthread_yield()' ;;
11691     esac
11692 else
11693     set try -DPTHREAD_YIELD_NULL
11694     if eval $compile; then
11695         val="$define"
11696         case "$sched_yield" in
11697         '') sched_yield='pthread_yield(NULL)' ;;
11698         esac
11699     else
11700         val="$undef"
11701     fi
11702 fi
11703 case "$usethreads" in
11704 $define)
11705         case "$val" in
11706         $define) echo 'pthread_yield() found.' >&4      ;;
11707         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11708         esac
11709         ;;
11710 esac
11711 set d_pthread_yield
11712 eval $setvar
11713
11714 case "$sched_yield" in
11715 '') sched_yield=undef ;;
11716 esac
11717
11718 $rm -f try try.*
11719
11720 : see if this is a pwd.h system
11721 set pwd.h i_pwd
11722 eval $inhdr
11723
11724 case "$i_pwd" in
11725 $define)
11726         xxx=`./findhdr pwd.h`
11727         $cppstdin $cppflags $cppminus < $xxx >$$.h
11728
11729         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11730                 val="$define"
11731         else
11732                 val="$undef"
11733         fi
11734         set d_pwquota
11735         eval $setvar
11736
11737         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11738                 val="$define"
11739         else
11740                 val="$undef"
11741         fi
11742         set d_pwage
11743         eval $setvar
11744
11745         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11746                 val="$define"
11747         else
11748                 val="$undef"
11749         fi
11750         set d_pwchange
11751         eval $setvar
11752
11753         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11754                 val="$define"
11755         else
11756                 val="$undef"
11757         fi
11758         set d_pwclass
11759         eval $setvar
11760
11761         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11762                 val="$define"
11763         else
11764                 val="$undef"
11765         fi
11766         set d_pwexpire
11767         eval $setvar
11768
11769         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11770                 val="$define"
11771         else
11772                 val="$undef"
11773         fi
11774         set d_pwcomment
11775         eval $setvar
11776
11777         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11778                 val="$define"
11779         else
11780                 val="$undef"
11781         fi
11782         set d_pwgecos
11783         eval $setvar
11784
11785         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11786                 val="$define"
11787         else
11788                 val="$undef"
11789         fi
11790         set d_pwpasswd
11791         eval $setvar
11792
11793         $rm -f $$.h
11794         ;;
11795 *)
11796         val="$undef"; 
11797         set d_pwquota; eval $setvar
11798         set d_pwage; eval $setvar
11799         set d_pwchange; eval $setvar
11800         set d_pwclass; eval $setvar
11801         set d_pwexpire; eval $setvar
11802         set d_pwcomment; eval $setvar
11803         set d_pwgecos; eval $setvar
11804         set d_pwpasswd; eval $setvar
11805         ;;
11806 esac
11807
11808 : see if readdir and friends exist
11809 set readdir d_readdir
11810 eval $inlibc
11811 set seekdir d_seekdir
11812 eval $inlibc
11813 set telldir d_telldir
11814 eval $inlibc
11815 set rewinddir d_rewinddir
11816 eval $inlibc
11817
11818 : see if readv exists
11819 set readv d_readv
11820 eval $inlibc
11821
11822 : see if recvmsg exists
11823 set recvmsg d_recvmsg
11824 eval $inlibc
11825
11826 : see if rename exists
11827 set rename d_rename
11828 eval $inlibc
11829
11830 : see if rmdir exists
11831 set rmdir d_rmdir
11832 eval $inlibc
11833
11834 : see if memory.h is available.
11835 val=''
11836 set memory.h val
11837 eval $inhdr
11838
11839 : See if it conflicts with string.h
11840 case "$val" in
11841 $define)
11842         case "$strings" in
11843         '') ;;
11844         *)
11845                 $cppstdin $cppflags $cppminus < $strings > mem.h
11846                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11847                         echo " "
11848                         echo "We won't be including <memory.h>."
11849                         val="$undef"
11850                 fi
11851                 $rm -f mem.h
11852                 ;;
11853         esac
11854 esac
11855 set i_memory
11856 eval $setvar
11857
11858 : can bcopy handle overlapping blocks?
11859 echo " "
11860 val="$undef"
11861 case "$d_memmove" in
11862 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11863 *)      case "$d_bcopy" in
11864         "$define")
11865                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11866                 $cat >try.c <<EOCP
11867 #$i_memory I_MEMORY
11868 #$i_stdlib I_STDLIB
11869 #$i_string I_STRING
11870 #$i_unistd I_UNISTD
11871 EOCP
11872         $cat >>try.c <<'EOCP'
11873 #include <stdio.h>
11874 #ifdef I_MEMORY
11875 #  include <memory.h>
11876 #endif
11877 #ifdef I_STDLIB
11878 #  include <stdlib.h>
11879 #endif
11880 #ifdef I_STRING
11881 #  include <string.h>
11882 #else
11883 #  include <strings.h>
11884 #endif
11885 #ifdef I_UNISTD
11886 #  include <unistd.h>  /* Needed for NetBSD */
11887 #endif
11888 int main()
11889 {
11890 char buf[128], abc[128];
11891 char *b;
11892 int len;
11893 int off;
11894 int align;
11895
11896 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11897    try to store the string in read-only memory. */
11898 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11899
11900 for (align = 7; align >= 0; align--) {
11901         for (len = 36; len; len--) {
11902                 b = buf+align;
11903                 bcopy(abc, b, len);
11904                 for (off = 1; off <= len; off++) {
11905                         bcopy(b, b+off, len);
11906                         bcopy(b+off, b, len);
11907                         if (bcmp(b, abc, len))
11908                                 exit(1);
11909                 }
11910         }
11911 }
11912 exit(0);
11913 }
11914 EOCP
11915                 set try
11916                 if eval $compile_ok; then
11917                         if ./try 2>/dev/null; then
11918                                 echo "Yes, it can."
11919                                 val="$define"
11920                         else
11921                                 echo "It can't, sorry."
11922                         fi
11923                 else
11924                         echo "(I can't compile the test program, so we'll assume not...)"
11925                 fi
11926                 ;;
11927         esac
11928         $rm -f try.* try core
11929         ;;
11930 esac
11931 set d_safebcpy
11932 eval $setvar
11933
11934 : can memcpy handle overlapping blocks?
11935 echo " "
11936 val="$undef"
11937 case "$d_memmove" in
11938 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11939 *)      case "$d_memcpy" in
11940         "$define")
11941                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11942                 $cat >try.c <<EOCP
11943 #$i_memory I_MEMORY
11944 #$i_stdlib I_STDLIB
11945 #$i_string I_STRING
11946 #$i_unistd I_UNISTD
11947 EOCP
11948         $cat >>try.c <<'EOCP'
11949 #include <stdio.h>
11950 #ifdef I_MEMORY
11951 #  include <memory.h>
11952 #endif
11953 #ifdef I_STDLIB
11954 #  include <stdlib.h>
11955 #endif
11956 #ifdef I_STRING
11957 #  include <string.h>
11958 #else
11959 #  include <strings.h>
11960 #endif
11961 #ifdef I_UNISTD
11962 #  include <unistd.h>  /* Needed for NetBSD */
11963 #endif
11964 int main()
11965 {
11966 char buf[128], abc[128];
11967 char *b;
11968 int len;
11969 int off;
11970 int align;
11971
11972 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11973    try to store the string in read-only memory. */
11974 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11975
11976 for (align = 7; align >= 0; align--) {
11977         for (len = 36; len; len--) {
11978                 b = buf+align;
11979                 memcpy(b, abc, len);
11980                 for (off = 1; off <= len; off++) {
11981                         memcpy(b+off, b, len);
11982                         memcpy(b, b+off, len);
11983                         if (memcmp(b, abc, len))
11984                                 exit(1);
11985                 }
11986         }
11987 }
11988 exit(0);
11989 }
11990 EOCP
11991                 set try
11992                 if eval $compile_ok; then
11993                         if ./try 2>/dev/null; then
11994                                 echo "Yes, it can."
11995                                 val="$define"
11996                         else
11997                                 echo "It can't, sorry."
11998                         fi
11999                 else
12000                         echo "(I can't compile the test program, so we'll assume not...)"
12001                 fi
12002                 ;;
12003         esac
12004         $rm -f try.* try core
12005         ;;
12006 esac
12007 set d_safemcpy
12008 eval $setvar
12009
12010 : can memcmp be trusted to compare relative magnitude?
12011 val="$undef"
12012 case "$d_memcmp" in
12013 "$define")
12014         echo " "
12015         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12016         $cat >try.c <<EOCP
12017 #$i_memory I_MEMORY
12018 #$i_stdlib I_STDLIB
12019 #$i_string I_STRING
12020 #$i_unistd I_UNISTD
12021 EOCP
12022         $cat >>try.c <<'EOCP'
12023 #include <stdio.h>
12024 #ifdef I_MEMORY
12025 #  include <memory.h>
12026 #endif
12027 #ifdef I_STDLIB
12028 #  include <stdlib.h>
12029 #endif
12030 #ifdef I_STRING
12031 #  include <string.h>
12032 #else
12033 #  include <strings.h>
12034 #endif
12035 #ifdef I_UNISTD
12036 #  include <unistd.h>  /* Needed for NetBSD */
12037 #endif
12038 int main()
12039 {
12040 char a = -1;
12041 char b = 0;
12042 if ((a < b) && memcmp(&a, &b, 1) < 0)
12043         exit(1);
12044 exit(0);
12045 }
12046 EOCP
12047         set try
12048         if eval $compile_ok; then
12049                 if $run ./try 2>/dev/null; then
12050                         echo "Yes, it can."
12051                         val="$define"
12052                 else
12053                         echo "No, it can't (it uses signed chars)."
12054                 fi
12055         else
12056                 echo "(I can't compile the test program, so we'll assume not...)"
12057         fi
12058         ;;
12059 esac
12060 $rm -f try.* try core
12061 set d_sanemcmp
12062 eval $setvar
12063
12064 : see if prototype for sbrk is available
12065 echo " "
12066 set d_sbrkproto sbrk $i_unistd unistd.h
12067 eval $hasproto
12068
12069 : see if select exists
12070 set select d_select
12071 eval $inlibc
12072
12073 : see if semctl exists
12074 set semctl d_semctl
12075 eval $inlibc
12076
12077 : see if semget exists
12078 set semget d_semget
12079 eval $inlibc
12080
12081 : see if semop exists
12082 set semop d_semop
12083 eval $inlibc
12084
12085 : see how much of the 'sem*(2)' library is present.
12086 h_sem=true
12087 echo " "
12088 case "$d_semctl$d_semget$d_semop" in
12089 *"$undef"*) h_sem=false;;
12090 esac
12091 case "$osname" in
12092 freebsd)
12093     case "`ipcs 2>&1`" in
12094     "SVID messages"*"not configured"*)
12095         echo "Your $osname does not have the sem*(2) configured." >&4
12096         h_sem=false
12097         val="$undef"
12098         set semctl d_semctl
12099         eval $setvar
12100         set semget d_semget
12101         eval $setvar
12102         set semop d_semop
12103         eval $setvar
12104         ;;
12105     esac
12106     ;;
12107 esac
12108 : we could also check for sys/ipc.h ...
12109 if $h_sem && $test `./findhdr sys/sem.h`; then
12110         echo "You have the full sem*(2) library." >&4
12111         val="$define"
12112 else
12113         echo "You don't have the full sem*(2) library." >&4
12114         val="$undef"
12115 fi
12116 set d_sem
12117 eval $setvar
12118
12119 : see whether sys/sem.h defines union semun
12120 echo " "
12121 $cat > try.c <<'END'
12122 #include <sys/types.h>
12123 #include <sys/ipc.h>
12124 #include <sys/sem.h>
12125 int main () { union semun semun; semun.buf = 0; }
12126 END
12127 set try
12128 if eval $compile; then
12129     echo "You have union semun in <sys/sem.h>." >&4
12130     val="$define"
12131 else
12132     echo "You do not have union semun in <sys/sem.h>." >&4
12133     val="$undef"
12134 fi
12135 $rm -f try try.c try.h
12136 set d_union_semun
12137 eval $setvar
12138
12139 : see how to do semctl IPC_STAT
12140 case "$d_sem" in
12141 $define)
12142     : see whether semctl IPC_STAT can use union semun
12143     echo " "
12144     $cat > try.h <<END
12145 #ifndef S_IRUSR
12146 #   ifdef S_IREAD
12147 #       define S_IRUSR S_IREAD
12148 #       define S_IWUSR S_IWRITE
12149 #       define S_IXUSR S_IEXEC
12150 #   else
12151 #       define S_IRUSR 0400
12152 #       define S_IWUSR 0200
12153 #       define S_IXUSR 0100
12154 #   endif
12155 #   define S_IRGRP (S_IRUSR>>3)
12156 #   define S_IWGRP (S_IWUSR>>3)
12157 #   define S_IXGRP (S_IXUSR>>3)
12158 #   define S_IROTH (S_IRUSR>>6)
12159 #   define S_IWOTH (S_IWUSR>>6)
12160 #   define S_IXOTH (S_IXUSR>>6)
12161 #endif
12162 #ifndef S_IRWXU
12163 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12164 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12165 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12166 #endif
12167 END
12168
12169     $cat > try.c <<END
12170 #include <sys/types.h>
12171 #include <sys/ipc.h>
12172 #include <sys/sem.h>
12173 #include <sys/stat.h>
12174 #include <stdio.h>
12175 #include <errno.h>
12176 #include "try.h"
12177 #ifndef errno
12178 extern int errno;
12179 #endif
12180 #$d_union_semun HAS_UNION_SEMUN
12181 int main() {
12182     union semun
12183 #ifndef HAS_UNION_SEMUN
12184     {
12185         int val;
12186         struct semid_ds *buf;
12187         unsigned short *array;
12188     }
12189 #endif
12190     arg;
12191     int sem, st;
12192
12193 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12194     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12195     if (sem > -1) {
12196         struct semid_ds argbuf;
12197         arg.buf = &argbuf;
12198 #       ifdef IPC_STAT
12199         st = semctl(sem, 0, IPC_STAT, arg);
12200         if (st == 0)
12201             printf("semun\n");
12202         else
12203 #       endif /* IPC_STAT */
12204             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12205 #       ifdef IPC_RMID
12206         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12207 #       endif /* IPC_RMID */
12208             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12209     } else
12210 #endif /* IPC_PRIVATE && ... */
12211         printf("semget failed: errno = %d\n", errno);
12212   return 0;
12213 }
12214 END
12215     val="$undef"
12216     set try
12217     if eval $compile; then
12218         xxx=`$run ./try`
12219         case "$xxx" in
12220         semun) val="$define" ;;
12221         esac
12222     fi
12223     $rm -f try try.c
12224     set d_semctl_semun
12225     eval $setvar
12226     case "$d_semctl_semun" in
12227     $define)
12228         echo "You can use union semun for semctl IPC_STAT." >&4
12229         also='also'
12230         ;;
12231     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12232         also=''
12233         ;;
12234     esac
12235
12236     : see whether semctl IPC_STAT can use struct semid_ds pointer
12237     $cat > try.c <<'END'
12238 #include <sys/types.h>
12239 #include <sys/ipc.h>
12240 #include <sys/sem.h>
12241 #include <sys/stat.h>
12242 #include "try.h"
12243 #include <stdio.h>
12244 #include <errno.h>
12245 #ifndef errno
12246 extern int errno;
12247 #endif
12248 int main() {
12249     struct semid_ds arg;
12250     int sem, st;
12251
12252 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12253     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12254     if (sem > -1) {
12255 #       ifdef IPC_STAT
12256         st = semctl(sem, 0, IPC_STAT, &arg);
12257         if (st == 0)
12258             printf("semid_ds\n");
12259         else
12260 #       endif /* IPC_STAT */
12261             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12262 #       ifdef IPC_RMID
12263         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12264 #       endif /* IPC_RMID */
12265             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12266     } else
12267 #endif /* IPC_PRIVATE && ... */
12268         printf("semget failed: errno = %d\n", errno);
12269
12270     return 0;
12271 }
12272 END
12273     val="$undef"
12274     set try
12275     if eval $compile; then
12276         xxx=`$run ./try`
12277         case "$xxx" in
12278         semid_ds) val="$define" ;;
12279         esac
12280     fi
12281     $rm -f try try.c
12282     set d_semctl_semid_ds
12283     eval $setvar
12284     case "$d_semctl_semid_ds" in
12285     $define)
12286         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12287         ;;
12288     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12289         ;;
12290     esac
12291     $rm -f try.h
12292     ;;
12293 *)  val="$undef"
12294
12295     # We do not have the full sem*(2) library, so assume we can not
12296     # use either.
12297
12298     set d_semctl_semun
12299     eval $setvar
12300
12301     set d_semctl_semid_ds
12302     eval $setvar
12303     ;;
12304 esac
12305
12306 : see if sendmsg exists
12307 set sendmsg d_sendmsg
12308 eval $inlibc
12309
12310 : see if setegid exists
12311 set setegid d_setegid
12312 eval $inlibc
12313
12314 : see if seteuid exists
12315 set seteuid d_seteuid
12316 eval $inlibc
12317
12318 : see if setgrent exists
12319 set setgrent d_setgrent
12320 eval $inlibc
12321
12322 : see if sethostent exists
12323 set sethostent d_sethent
12324 eval $inlibc
12325
12326 : see if setitimer exists
12327 set setitimer d_setitimer
12328 eval $inlibc
12329
12330 : see if setlinebuf exists
12331 set setlinebuf d_setlinebuf
12332 eval $inlibc
12333
12334 : see if setlocale exists
12335 set setlocale d_setlocale
12336 eval $inlibc
12337
12338 : see if setnetent exists
12339 set setnetent d_setnent
12340 eval $inlibc
12341
12342 : see if setprotoent exists
12343 set setprotoent d_setpent
12344 eval $inlibc
12345
12346 : see if setpgid exists
12347 set setpgid d_setpgid
12348 eval $inlibc
12349
12350 : see if setpgrp2 exists
12351 set setpgrp2 d_setpgrp2
12352 eval $inlibc
12353
12354 : see if setpriority exists
12355 set setpriority d_setprior
12356 eval $inlibc
12357
12358 : see if setproctitle exists
12359 set setproctitle d_setproctitle
12360 eval $inlibc
12361
12362 : see if setpwent exists
12363 set setpwent d_setpwent
12364 eval $inlibc
12365
12366 : see if setregid exists
12367 set setregid d_setregid
12368 eval $inlibc
12369 set setresgid d_setresgid
12370 eval $inlibc
12371
12372 : see if setreuid exists
12373 set setreuid d_setreuid
12374 eval $inlibc
12375 set setresuid d_setresuid
12376 eval $inlibc
12377
12378 : see if setrgid exists
12379 set setrgid d_setrgid
12380 eval $inlibc
12381
12382 : see if setruid exists
12383 set setruid d_setruid
12384 eval $inlibc
12385
12386 : see if setservent exists
12387 set setservent d_setsent
12388 eval $inlibc
12389
12390 : see if setsid exists
12391 set setsid d_setsid
12392 eval $inlibc
12393
12394 : see if setvbuf exists
12395 set setvbuf d_setvbuf
12396 eval $inlibc
12397
12398 : see if sfio.h is available
12399 set sfio.h i_sfio
12400 eval $inhdr
12401
12402
12403 : see if sfio library is available
12404 case "$i_sfio" in
12405 $define)
12406         val=''
12407         set sfreserve val
12408         eval $inlibc
12409         ;;
12410 *)
12411         val="$undef"
12412         ;;
12413 esac
12414 : Ok, but do we want to use it.
12415 case "$val" in
12416 $define)
12417         case "$usesfio" in
12418         true|$define|[yY]*) dflt='y';;
12419         *) dflt='n';;
12420         esac
12421         echo "$package can use the sfio library, but it is experimental."
12422         case "$useperlio" in
12423         "$undef")
12424             echo "For sfio also the PerlIO abstraction layer is needed."
12425             echo "Earlier you said you wouldn't want that."
12426             ;;
12427         esac
12428         rp="You seem to have sfio available, do you want to try using it?"
12429         . ./myread
12430         case "$ans" in
12431         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12432                 useperlio="$define"
12433                 val="$define"
12434                 ;;
12435         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12436                 val="$undef"
12437                 ;;
12438         esac
12439         ;;
12440 *)      case "$usesfio" in
12441         true|$define|[yY]*)
12442                 echo "Sorry, cannot find sfio on this machine." >&4
12443                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12444                 val="$undef"
12445                 ;;
12446         esac
12447         ;;
12448 esac
12449 set d_sfio
12450 eval $setvar
12451 case "$d_sfio" in
12452 $define) usesfio='true';;
12453 *) usesfio='false';;
12454 esac
12455 case "$d_sfio" in
12456 $define) ;;
12457 *)      : Remove sfio from list of libraries to use
12458         case "$libs" in
12459         *-lsfio*)
12460                 echo "Removing unneeded -lsfio from library list" >&4
12461                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12462                 shift
12463                 libs="$*"
12464                 echo "libs = $libs" >&4
12465                 ;;
12466         esac
12467 ;;
12468 esac
12469
12470
12471 : see if shmctl exists
12472 set shmctl d_shmctl
12473 eval $inlibc
12474
12475 : see if shmget exists
12476 set shmget d_shmget
12477 eval $inlibc
12478
12479 : see if shmat exists
12480 set shmat d_shmat
12481 eval $inlibc
12482 : see what shmat returns
12483 case "$d_shmat" in
12484 "$define")
12485         $cat >shmat.c <<'END'
12486 #include <sys/shm.h>
12487 void *shmat();
12488 END
12489         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12490                 shmattype='void *'
12491         else
12492                 shmattype='char *'
12493         fi
12494         echo "and it returns ($shmattype)." >&4
12495         : see if a prototype for shmat is available
12496         xxx=`./findhdr sys/shm.h`
12497         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12498         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12499                 val="$define"
12500         else
12501                 val="$undef"
12502         fi
12503         $rm -f shmat.[co]
12504         ;;
12505 *)
12506         val="$undef"
12507         ;;
12508 esac
12509 set d_shmatprototype
12510 eval $setvar
12511
12512 : see if shmdt exists
12513 set shmdt d_shmdt
12514 eval $inlibc
12515
12516 : see how much of the 'shm*(2)' library is present.
12517 h_shm=true
12518 echo " "
12519 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12520 *"$undef"*) h_shm=false;;
12521 esac
12522 case "$osname" in
12523 freebsd)
12524     case "`ipcs 2>&1`" in
12525     "SVID shared memory"*"not configured"*)
12526         echo "Your $osname does not have the shm*(2) configured." >&4
12527         h_shm=false
12528         val="$undef"
12529         set shmctl d_shmctl
12530         evat $setvar
12531         set shmget d_shmget
12532         evat $setvar
12533         set shmat d_shmat
12534         evat $setvar
12535         set shmdt d_shmdt
12536         evat $setvar
12537         ;;
12538     esac
12539     ;;
12540 esac
12541 : we could also check for sys/ipc.h ...
12542 if $h_shm && $test `./findhdr sys/shm.h`; then
12543         echo "You have the full shm*(2) library." >&4
12544         val="$define"
12545 else
12546         echo "You don't have the full shm*(2) library." >&4
12547         val="$undef"
12548 fi
12549 set d_shm
12550 eval $setvar
12551
12552 echo " "
12553 : see if we have sigaction
12554 if set sigaction val -f d_sigaction; eval $csym; $val; then
12555         echo 'sigaction() found.' >&4
12556         $cat > try.c <<'EOP'
12557 #include <stdio.h>
12558 #include <sys/types.h>
12559 #include <signal.h>
12560 int main()
12561 {
12562     struct sigaction act, oact;
12563     act.sa_flags = 0;
12564     oact.sa_handler = 0;
12565     /* so that act and oact are used */
12566     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12567 }
12568 EOP
12569         set try
12570         if eval $compile_ok; then
12571                 val="$define"
12572         else
12573                 echo "But you don't seem to have a useable struct sigaction." >&4
12574                 val="$undef"
12575         fi
12576 else
12577         echo 'sigaction NOT found.' >&4
12578         val="$undef"
12579 fi
12580 set d_sigaction; eval $setvar
12581 $rm -f try try$_o try.c
12582
12583 : see if sigprocmask exists
12584 set sigprocmask d_sigprocmask
12585 eval $inlibc
12586
12587 : see if sigsetjmp exists
12588 echo " "
12589 case "$d_sigsetjmp" in
12590 '')
12591         $cat >try.c <<'EOP'
12592 #include <setjmp.h>
12593 sigjmp_buf env;
12594 int set = 1;
12595 int main()
12596 {
12597         if (sigsetjmp(env,1))
12598                 exit(set);
12599         set = 0;
12600         siglongjmp(env, 1);
12601         exit(1);
12602 }
12603 EOP
12604         set try
12605         if eval $compile; then
12606                 if $run ./try >/dev/null 2>&1; then
12607                         echo "POSIX sigsetjmp found." >&4
12608                         val="$define"
12609                 else
12610                         $cat >&4 <<EOM
12611 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12612 I'll ignore them.
12613 EOM
12614                         val="$undef"
12615                 fi
12616         else
12617                 echo "sigsetjmp not found." >&4
12618                 val="$undef"
12619         fi
12620         ;;
12621 *) val="$d_sigsetjmp"
12622         case "$d_sigsetjmp" in
12623         $define) echo "POSIX sigsetjmp found." >&4;;
12624         $undef) echo "sigsetjmp not found." >&4;;
12625         esac
12626         ;;
12627 esac
12628 set d_sigsetjmp
12629 eval $setvar
12630 $rm -f try.c try
12631
12632 : see if sockatmark exists
12633 set sockatmark d_sockatmark
12634 eval $inlibc
12635
12636 : see if prototype for sockatmark is available
12637 echo " "
12638 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12639 eval $hasproto
12640
12641 : see if socks5_init exists
12642 set socks5_init d_socks5_init
12643 eval $inlibc
12644
12645 : see if prototype for setresgid is available
12646 echo " "
12647 set d_sresgproto setresgid $i_unistd unistd.h
12648 eval $hasproto
12649
12650 : see if prototype for setresuid is available
12651 echo " "
12652 set d_sresuproto setresuid $i_unistd unistd.h
12653 eval $hasproto
12654
12655 : see if sys/stat.h is available
12656 set sys/stat.h i_sysstat
12657 eval $inhdr
12658
12659
12660 : see if stat knows about block sizes
12661 echo " "
12662 echo "Checking to see if your struct stat has st_blocks field..." >&4
12663 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12664 eval $hasfield
12665
12666
12667 : see if this is a sys/vfs.h system
12668 set sys/vfs.h i_sysvfs
12669 eval $inhdr
12670
12671
12672 : see if this is a sys/statfs.h system
12673 set sys/statfs.h i_sysstatfs
12674 eval $inhdr
12675
12676
12677 echo " "
12678 echo "Checking to see if your system supports struct statfs..." >&4
12679 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
12680 eval $hasstruct
12681 case "$d_statfs_s" in
12682 "$define")      echo "Yes, it does."   ;;
12683 *)              echo "No, it doesn't." ;;
12684 esac
12685
12686
12687
12688 : see if struct statfs knows about f_flags
12689 case "$d_statfs_s" in
12690 define) 
12691         echo " "
12692         echo "Checking to see if your struct statfs has f_flags field..." >&4
12693         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
12694         eval $hasfield
12695         ;;
12696 *)      val="$undef"
12697         set d_statfs_f_flags
12698         eval $setvar
12699         ;;
12700 esac
12701 case "$d_statfs_f_flags" in
12702 "$define")      echo "Yes, it does."   ;;
12703 *)              echo "No, it doesn't." ;;
12704 esac
12705
12706 : see if _ptr and _cnt from stdio act std
12707 echo " "
12708
12709 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12710         echo "(Looks like you have stdio.h from BSD.)"
12711         case "$stdio_ptr" in
12712         '') stdio_ptr='((fp)->_p)'
12713                 ptr_lval=$define
12714                 ;;
12715         *)      ptr_lval=$d_stdio_ptr_lval;;
12716         esac
12717         case "$stdio_cnt" in
12718         '') stdio_cnt='((fp)->_r)'
12719                 cnt_lval=$define
12720                 ;;
12721         *)      cnt_lval=$d_stdio_cnt_lval;;
12722         esac
12723         case "$stdio_base" in
12724         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12725         esac
12726         case "$stdio_bufsiz" in
12727         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12728         esac
12729 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12730         echo "(Looks like you have stdio.h from Linux.)"
12731         case "$stdio_ptr" in
12732         '') stdio_ptr='((fp)->_IO_read_ptr)'
12733                 ptr_lval=$define
12734                 ;;
12735         *)      ptr_lval=$d_stdio_ptr_lval;;
12736         esac
12737         case "$stdio_cnt" in
12738         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12739                 cnt_lval=$undef
12740                 ;;
12741         *)      cnt_lval=$d_stdio_cnt_lval;;
12742         esac
12743         case "$stdio_base" in
12744         '') stdio_base='((fp)->_IO_read_base)';;
12745         esac
12746         case "$stdio_bufsiz" in
12747         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12748         esac
12749 else
12750         case "$stdio_ptr" in
12751         '') stdio_ptr='((fp)->_ptr)'
12752                 ptr_lval=$define
12753                 ;;
12754         *)      ptr_lval=$d_stdio_ptr_lval;;
12755         esac
12756         case "$stdio_cnt" in
12757         '') stdio_cnt='((fp)->_cnt)'
12758                 cnt_lval=$define
12759                 ;;
12760         *)      cnt_lval=$d_stdio_cnt_lval;;
12761         esac
12762         case "$stdio_base" in
12763         '') stdio_base='((fp)->_base)';;
12764         esac
12765         case "$stdio_bufsiz" in
12766         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12767         esac
12768 fi
12769
12770 : test whether _ptr and _cnt really work
12771 echo "Checking how std your stdio is..." >&4
12772 $cat >try.c <<EOP
12773 #include <stdio.h>
12774 #define FILE_ptr(fp)    $stdio_ptr
12775 #define FILE_cnt(fp)    $stdio_cnt
12776 int main() {
12777         FILE *fp = fopen("try.c", "r");
12778         char c = getc(fp);
12779         if (
12780                 18 <= FILE_cnt(fp) &&
12781                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12782         )
12783                 exit(0);
12784         exit(1);
12785 }
12786 EOP
12787 val="$undef"
12788 set try
12789 if eval $compile && $to try.c; then
12790         if $run ./try; then
12791                 echo "Your stdio acts pretty std."
12792                 val="$define"
12793         else
12794                 echo "Your stdio isn't very std."
12795         fi
12796 else
12797         echo "Your stdio doesn't appear very std."
12798 fi
12799 $rm -f try.c try
12800 set d_stdstdio
12801 eval $setvar
12802
12803 : Can _ptr be used as an lvalue?
12804 case "$d_stdstdio$ptr_lval" in
12805 $define$define) val=$define ;;
12806 *) val=$undef ;;
12807 esac
12808 set d_stdio_ptr_lval
12809 eval $setvar
12810
12811 : Can _cnt be used as an lvalue?
12812 case "$d_stdstdio$cnt_lval" in
12813 $define$define) val=$define ;;
12814 *) val=$undef ;;
12815 esac
12816 set d_stdio_cnt_lval
12817 eval $setvar
12818
12819
12820 : test whether setting _ptr sets _cnt as a side effect
12821 d_stdio_ptr_lval_sets_cnt="$undef"
12822 d_stdio_ptr_lval_nochange_cnt="$undef"
12823 case "$d_stdio_ptr_lval$d_stdstdio" in
12824 $define$define)
12825         echo "Checking to see what happens if we set the stdio ptr..." >&4
12826 $cat >try.c <<EOP
12827 #include <stdio.h>
12828 /* Can we scream? */
12829 /* Eat dust sed :-) */
12830 /* In the buffer space, no one can hear you scream. */
12831 #define FILE_ptr(fp)    $stdio_ptr
12832 #define FILE_cnt(fp)    $stdio_cnt
12833 #include <sys/types.h>
12834 int main() {
12835         FILE *fp = fopen("try.c", "r");
12836         int c;
12837         char *ptr;
12838         size_t cnt;
12839         if (!fp) {
12840             puts("Fail even to read");
12841             exit(1);
12842         }
12843         c = getc(fp); /* Read away the first # */
12844         if (c == EOF) {
12845             puts("Fail even to read");
12846             exit(1);
12847         }
12848         if (!(
12849                 18 <= FILE_cnt(fp) &&
12850                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12851         )) {
12852                 puts("Fail even to read");
12853                 exit (1);
12854         }
12855         ptr = (char*) FILE_ptr(fp);
12856         cnt = (size_t)FILE_cnt(fp);
12857
12858         FILE_ptr(fp) += 42;
12859
12860         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12861                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12862                 exit (1);
12863         }
12864         if (FILE_cnt(fp) <= 20) {
12865                 printf ("Fail (<20 chars to test)");
12866                 exit (1);
12867         }
12868         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12869                 puts("Fail compare");
12870                 exit (1);
12871         }
12872         if (cnt == FILE_cnt(fp)) {
12873                 puts("Pass_unchanged");
12874                 exit (0);
12875         }       
12876         if (FILE_cnt(fp) == (cnt - 42)) {
12877                 puts("Pass_changed");
12878                 exit (0);
12879         }
12880         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12881         return 1;
12882
12883 }
12884 EOP
12885         set try
12886         if eval $compile && $to try.c; then
12887                 case `$run ./try` in
12888                 Pass_changed)
12889                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12890                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12891                 Pass_unchanged)
12892                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12893                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12894                 Fail*)
12895                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12896                 *)
12897                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12898         esac
12899         else
12900                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12901         fi
12902         $rm -f try.c try
12903         ;;
12904 esac
12905
12906 : see if _base is also standard
12907 val="$undef"
12908 case "$d_stdstdio" in
12909 $define)
12910         $cat >try.c <<EOP
12911 #include <stdio.h>
12912 #define FILE_base(fp)   $stdio_base
12913 #define FILE_bufsiz(fp) $stdio_bufsiz
12914 int main() {
12915         FILE *fp = fopen("try.c", "r");
12916         char c = getc(fp);
12917         if (
12918                 19 <= FILE_bufsiz(fp) &&
12919                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12920         )
12921                 exit(0);
12922         exit(1);
12923 }
12924 EOP
12925         set try
12926         if eval $compile && $to try.c; then
12927                 if $run ./try; then
12928                         echo "And its _base field acts std."
12929                         val="$define"
12930                 else
12931                         echo "But its _base field isn't std."
12932                 fi
12933         else
12934                 echo "However, it seems to be lacking the _base field."
12935         fi
12936         $rm -f try.c try
12937         ;;
12938 esac
12939 set d_stdiobase
12940 eval $setvar
12941
12942 $cat >&4 <<EOM
12943 Checking how to access stdio streams by file descriptor number...
12944 EOM
12945 case "$stdio_stream_array" in
12946 '')     $cat >try.c <<EOCP
12947 #include <stdio.h>
12948 int main() {
12949   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12950     printf("yes\n");
12951 }
12952 EOCP
12953         for s in _iob __iob __sF
12954         do
12955                 set try -DSTDIO_STREAM_ARRAY=$s
12956                 if eval $compile; then
12957                         case "`$run ./try`" in
12958                         yes)    stdio_stream_array=$s; break ;;
12959                         esac
12960                 fi
12961         done
12962         $rm -f try.* try$exe_ext
12963 esac
12964 case "$stdio_stream_array" in
12965 '')     $cat >&4 <<EOM
12966 I can't figure out how to access stdio streams by file descriptor number.
12967 EOM
12968         d_stdio_stream_array="$undef"
12969         ;;
12970 *)      $cat >&4 <<EOM
12971 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12972 EOM
12973         d_stdio_stream_array="$define"
12974         ;;
12975 esac
12976
12977 : see if strcoll exists
12978 set strcoll d_strcoll
12979 eval $inlibc
12980
12981 : check for structure copying
12982 echo " "
12983 echo "Checking to see if your C compiler can copy structs..." >&4
12984 $cat >try.c <<'EOCP'
12985 int main()
12986 {
12987         struct blurfl {
12988                 int dyick;
12989         } foo, bar;
12990
12991         foo = bar;
12992 }
12993 EOCP
12994 if $cc -c try.c >/dev/null 2>&1 ; then
12995         val="$define"
12996         echo "Yup, it can."
12997 else
12998         val="$undef"
12999         echo "Nope, it can't."
13000 fi
13001 set d_strctcpy
13002 eval $setvar
13003 $rm -f try.*
13004
13005 : see if strerror and/or sys_errlist[] exist
13006 echo " "
13007 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13008     if set strerror val -f d_strerror; eval $csym; $val; then
13009                 echo 'strerror() found.' >&4
13010                 d_strerror="$define"
13011                 d_strerrm='strerror(e)'
13012                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13013                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13014                         d_syserrlst="$define"
13015                 else
13016                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13017                         d_syserrlst="$undef"
13018                 fi
13019     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13020                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13021                 echo 'strerror() found in string header.' >&4
13022                 d_strerror="$define"
13023                 d_strerrm='strerror(e)'
13024                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13025                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13026                                 d_syserrlst="$define"
13027                 else
13028                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13029                         d_syserrlst="$undef"
13030                 fi
13031     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13032                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13033                 d_strerror="$undef"
13034                 d_syserrlst="$define"
13035                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13036     else
13037                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13038                 d_strerror="$undef"
13039                 d_syserrlst="$undef"
13040                 d_strerrm='"unknown"'
13041     fi
13042 fi
13043
13044 : see if strftime exists
13045 set strftime d_strftime
13046 eval $inlibc
13047
13048 : see if strtod exists
13049 set strtod d_strtod
13050 eval $inlibc
13051
13052 : see if strtol exists
13053 set strtol d_strtol
13054 eval $inlibc
13055
13056 : see if strtold exists
13057 set strtold d_strtold
13058 eval $inlibc
13059
13060 : see if strtoll exists
13061 set strtoll d_strtoll
13062 eval $inlibc
13063
13064 case "$d_longlong-$d_strtoll" in
13065 "$define-$define")
13066         $cat <<EOM
13067 Checking whether your strtoll() works okay...
13068 EOM
13069         $cat >try.c <<'EOCP'
13070 #include <errno.h>
13071 #ifdef __hpux
13072 #define strtoll __strtoll
13073 #endif
13074 #ifdef __EMX__
13075 #define strtoll _strtoll
13076 #endif
13077 #include <stdio.h>
13078 extern long long int strtoll(char *s, char **, int); 
13079 static int bad = 0;
13080 int check(char *s, long long ell, int een) {
13081         long long gll;
13082         errno = 0;
13083         gll = strtoll(s, 0, 10);
13084         if (!((gll == ell) && (errno == een)))
13085                 bad++;
13086 }
13087 int main() {
13088         check(" 1",                                      1LL, 0);
13089         check(" 0",                                      0LL, 0);
13090         check("-1",                                     -1LL, 0);
13091         check("-9223372036854775808", -9223372036854775808LL, 0);
13092         check("-9223372036854775808", -9223372036854775808LL, 0);
13093         check(" 9223372036854775807",  9223372036854775807LL, 0);
13094         check("-9223372036854775808", -9223372036854775808LL, 0);
13095         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13096         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13097         if (!bad)
13098                 printf("ok\n");
13099 }
13100 EOCP
13101         set try
13102         if eval $compile; then
13103                 yyy=`$run ./try`
13104                 case "$yyy" in
13105                 ok) echo "Your strtoll() seems to be working okay." ;;
13106                 *) cat <<EOM >&4
13107 Your strtoll() doesn't seem to be working okay.
13108 EOM
13109                    d_strtoll="$undef"
13110                    ;;
13111                 esac
13112         else
13113                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13114                 d_strtoll="$undef"
13115         fi
13116         ;;
13117 esac
13118
13119 : see if strtoq exists
13120 set strtoq d_strtoq
13121 eval $inlibc
13122
13123 : see if strtoul exists
13124 set strtoul d_strtoul
13125 eval $inlibc
13126
13127 case "$d_strtoul" in
13128 "$define")
13129         $cat <<EOM
13130 Checking whether your strtoul() works okay...
13131 EOM
13132         $cat >try.c <<'EOCP'
13133 #include <errno.h>
13134 #include <stdio.h>
13135 extern unsigned long int strtoul(char *s, char **, int); 
13136 static int bad = 0;
13137 void check(char *s, unsigned long eul, int een) {
13138         unsigned long gul;
13139         errno = 0;
13140         gul = strtoul(s, 0, 10);
13141         if (!((gul == eul) && (errno == een)))
13142                 bad++;
13143 }
13144 int main() {
13145         check(" 1", 1L, 0);
13146         check(" 0", 0L, 0);
13147 EOCP
13148         case "$longsize" in
13149         8)
13150             $cat >>try.c <<'EOCP'
13151         check("18446744073709551615", 18446744073709551615UL, 0);
13152         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13153 #if 0 /* strtoul() for /^-/ strings is undefined. */
13154         check("-1", 18446744073709551615UL, 0);
13155         check("-18446744073709551614", 2, 0);
13156         check("-18446744073709551615", 1, 0);
13157         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13158         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13159 #endif
13160 EOCP
13161                 ;;
13162         4)
13163                     $cat >>try.c <<'EOCP'
13164         check("4294967295", 4294967295UL, 0);
13165         check("4294967296", 4294967295UL, ERANGE);
13166 #if 0 /* strtoul() for /^-/ strings is undefined. */
13167         check("-1", 4294967295UL, 0);
13168         check("-4294967294", 2, 0);
13169         check("-4294967295", 1, 0);
13170         check("-4294967296", 4294967295UL, ERANGE);
13171         check("-4294967297", 4294967295UL, ERANGE);
13172 #endif
13173 EOCP
13174                 ;;
13175         *)
13176 : Should we write these tests to be more portable by sprintf-ing
13177 : ~0 and then manipulating that char string as input for strtol?
13178                 ;;
13179         esac
13180         $cat >>try.c <<'EOCP'
13181         if (!bad)
13182                 printf("ok\n");
13183         return 0;
13184 }
13185 EOCP
13186         set try
13187         if eval $compile; then
13188                 case "`$run ./try`" in
13189                 ok) echo "Your strtoul() seems to be working okay." ;;
13190                 *) cat <<EOM >&4
13191 Your strtoul() doesn't seem to be working okay.
13192 EOM
13193                    d_strtoul="$undef"
13194                    ;;
13195                 esac
13196         fi
13197         ;;
13198 esac
13199
13200 : see if strtoull exists
13201 set strtoull d_strtoull
13202 eval $inlibc
13203
13204 case "$d_longlong-$d_strtoull" in
13205 "$define-$define")
13206         $cat <<EOM
13207 Checking whether your strtoull() works okay...
13208 EOM
13209         $cat >try.c <<'EOCP'
13210 #include <errno.h>
13211 #ifdef __hpux
13212 #define strtoull __strtoull
13213 #endif
13214 #include <stdio.h>
13215 extern unsigned long long int strtoull(char *s, char **, int); 
13216 static int bad = 0;
13217 int check(char *s, long long eull, int een) {
13218         long long gull;
13219         errno = 0;
13220         gull = strtoull(s, 0, 10);
13221         if (!((gull == eull) && (errno == een)))
13222                 bad++;
13223 }
13224 int main() {
13225         check(" 1",                                        1LL, 0);
13226         check(" 0",                                        0LL, 0);
13227         check("18446744073709551615",  18446744073709551615ULL, 0);
13228         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13229 #if 0 /* strtoull() for /^-/ strings is undefined. */
13230         check("-1",                    18446744073709551615ULL, 0);
13231         check("-18446744073709551614",                     2LL, 0);
13232         check("-18446744073709551615",                     1LL, 0);
13233         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13234         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13235 #endif
13236         if (!bad)
13237                 printf("ok\n");
13238 }
13239 EOCP
13240         set try
13241         if eval $compile; then
13242                 case "`$run ./try`" in
13243                 ok) echo "Your strtoull() seems to be working okay." ;;
13244                 *) cat <<EOM >&4
13245 Your strtoull() doesn't seem to be working okay.
13246 EOM
13247                    d_strtoull="$undef"
13248                    ;;
13249                 esac
13250         fi
13251         ;;
13252 esac
13253
13254 : see if strtouq exists
13255 set strtouq d_strtouq
13256 eval $inlibc
13257
13258 case "$d_strtouq" in
13259 "$define")
13260         $cat <<EOM
13261 Checking whether your strtouq() works okay...
13262 EOM
13263         $cat >try.c <<'EOCP'
13264 #include <errno.h>
13265 #include <stdio.h>
13266 extern unsigned long long int strtouq(char *s, char **, int); 
13267 static int bad = 0;
13268 void check(char *s, unsigned long long eull, int een) {
13269         unsigned long long gull;
13270         errno = 0;
13271         gull = strtouq(s, 0, 10);
13272         if (!((gull == eull) && (errno == een)))
13273                 bad++;
13274 }
13275 int main() {
13276         check(" 1",                                        1LL, 0);
13277         check(" 0",                                        0LL, 0);
13278         check("18446744073709551615",  18446744073709551615ULL, 0);
13279         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13280 #if 0 /* strtouq() for /^-/ strings is undefined. */
13281         check("-1",                    18446744073709551615ULL, 0);
13282         check("-18446744073709551614",                     2LL, 0);
13283         check("-18446744073709551615",                     1LL, 0);
13284         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13285         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13286 #endif
13287         if (!bad)
13288                 printf("ok\n");
13289         return 0;
13290 }
13291 EOCP
13292         set try
13293         if eval $compile; then
13294                 case "`$run ./try`" in
13295                 ok) echo "Your strtouq() seems to be working okay." ;;
13296                 *) cat <<EOM >&4
13297 Your strtouq() doesn't seem to be working okay.
13298 EOM
13299                    d_strtouq="$undef"
13300                    ;;
13301                 esac
13302         fi
13303         ;;
13304 esac
13305
13306 : see if strxfrm exists
13307 set strxfrm d_strxfrm
13308 eval $inlibc
13309
13310 : see if symlink exists
13311 set symlink d_symlink
13312 eval $inlibc
13313
13314 : see if syscall exists
13315 set syscall d_syscall
13316 eval $inlibc
13317
13318 : see if prototype for syscall is available
13319 echo " "
13320 set d_syscallproto syscall $i_unistd unistd.h
13321 eval $hasproto
13322
13323 : see if sysconf exists
13324 set sysconf d_sysconf
13325 eval $inlibc
13326
13327 : see if system exists
13328 set system d_system
13329 eval $inlibc
13330
13331 : see if tcgetpgrp exists
13332 set tcgetpgrp d_tcgetpgrp
13333 eval $inlibc
13334
13335 : see if tcsetpgrp exists
13336 set tcsetpgrp d_tcsetpgrp
13337 eval $inlibc
13338
13339 : see if prototype for telldir is available
13340 echo " "
13341 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13342 eval $hasproto
13343
13344 : see if this is a sys/times.h system
13345 set sys/times.h i_systimes
13346 eval $inhdr
13347
13348 : see if times exists
13349 echo " "
13350 if set times val -f d_times; eval $csym; $val; then
13351         echo 'times() found.' >&4
13352         d_times="$define"
13353         inc=''
13354         case "$i_systimes" in
13355         "$define") inc='sys/times.h';;
13356         esac
13357         rp="What is the type returned by times() on this system?"
13358         set clock_t clocktype long stdio.h sys/types.h $inc
13359         eval $typedef_ask
13360 else
13361         echo 'times() NOT found, hope that will do.' >&4
13362         d_times="$undef"
13363         clocktype='int'
13364 fi
13365
13366 : see if truncate exists
13367 set truncate d_truncate
13368 eval $inlibc
13369
13370 : see if tzname[] exists
13371 echo " "
13372 if set tzname val -a d_tzname; eval $csym; $val; then
13373         val="$define"
13374         echo 'tzname[] found.' >&4
13375 else
13376         val="$undef"
13377         echo 'tzname[] NOT found.' >&4
13378 fi
13379 set d_tzname
13380 eval $setvar
13381
13382 case "$osname" in
13383 next|rhapsody|darwin) multiarch="$define" ;;
13384 esac
13385 case "$multiarch" in
13386 ''|[nN]*) multiarch="$undef" ;;
13387 esac
13388
13389 : check for ordering of bytes in a long
13390 echo " "
13391 case "$usecrosscompile$multiarch" in
13392 *$define*)
13393         $cat <<EOM
13394 You seem to be either cross-compiling or doing a multiarchitecture build,
13395 skipping the byteorder check.
13396
13397 EOM
13398         byteorder='ffff'
13399         ;;
13400 *)
13401         case "$byteorder" in
13402         '')
13403                 $cat <<'EOM'
13404 In the following, larger digits indicate more significance.  A big-endian
13405 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13406 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13407 machines may have weird orders like 3412.  A Cray will report 87654321,
13408 an Alpha will report 12345678. If the test program works the default is
13409 probably right.
13410 I'm now running the test program...
13411 EOM
13412                 $cat >try.c <<'EOCP'
13413 #include <stdio.h>
13414 int main()
13415 {
13416         int i;
13417         union {
13418                 unsigned long l;
13419                 char c[sizeof(long)];
13420         } u;
13421
13422         if (sizeof(long) > 4)
13423                 u.l = (0x08070605L << 32) | 0x04030201L;
13424         else
13425                 u.l = 0x04030201L;
13426         for (i = 0; i < sizeof(long); i++)
13427                 printf("%c", u.c[i]+'0');
13428         printf("\n");
13429         exit(0);
13430 }
13431 EOCP
13432                 xxx_prompt=y
13433                 set try
13434                 if eval $compile && ./try > /dev/null; then
13435                         dflt=`$run ./try`
13436                         case "$dflt" in
13437                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13438                                 echo "(The test program ran ok.)"
13439                                 echo "byteorder=$dflt"
13440                                 xxx_prompt=n
13441                         ;;
13442                         ????|????????) echo "(The test program ran ok.)" ;;
13443                         *) echo "(The test program didn't run right for some reason.)" ;;
13444                         esac
13445                 else
13446                         dflt='4321'
13447                         cat <<'EOM'
13448 (I can't seem to compile the test program.  Guessing big-endian...)
13449 EOM
13450                 fi
13451                 case "$xxx_prompt" in
13452                 y)
13453                         rp="What is the order of bytes in a long?"
13454                         . ./myread
13455                         byteorder="$ans"
13456                         ;;
13457                 *)      byteorder=$dflt
13458                         ;;
13459                 esac
13460                 ;;
13461         esac
13462         $rm -f try.c try
13463         ;;
13464 esac
13465
13466
13467 $cat <<EOM
13468
13469 Checking to see whether you can access character data unalignedly...
13470 EOM
13471 $cat >try.c <<EOCP
13472 #include <stdio.h>
13473 #define U32 $u32type
13474 #define BYTEORDER $byteorder
13475 int main() {
13476 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13477     U8 buf[] = "\0\0\0\1\0\0\0\0";
13478     U32 *up;
13479     int i;
13480
13481     if (sizeof(U32) != 4) {
13482         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13483         exit(1);
13484     }
13485
13486     fflush(stdout);
13487
13488     for (i = 0; i < 4; i++) {
13489         up = (U32*)(buf + i);
13490         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13491                (*up == 1 << (8*(3-i)))  /* little-endian */
13492               )
13493            )
13494         {
13495             printf("read failed (%x)\n", *up);
13496             exit(2);
13497         }
13498     }
13499
13500     /* write test */
13501     for (i = 0; i < 4; i++) {
13502         up = (U32*)(buf + i);
13503         *up = 0xBeef;
13504         if (*up != 0xBeef) {
13505             printf("write failed (%x)\n", *up);
13506             exit(3);
13507         }
13508     }
13509
13510     exit(0);
13511 #else
13512     printf("1\n");
13513     exit(1);
13514 #endif
13515     return 0;
13516 }
13517 EOCP
13518 set try
13519 if eval $compile_ok; then
13520         echo "(Testing for character data alignment may dump core.)" >&4
13521         $run ./try 2>&1 >/dev/null
13522         case "$?" in
13523         0)      cat >&4 <<EOM
13524 You can access character data pretty unalignedly.
13525 EOM
13526                 d_u32align="$undef"
13527                 ;;
13528         *)      cat >&4 <<EOM
13529 It seems that you must access character data in an aligned manner.
13530 EOM
13531                 d_u32align="$define"
13532                 ;;
13533         esac
13534         $rm -f core core.try.* try.core
13535 else
13536         rp='Can you access character data at unaligned addresses?'
13537         dflt='n'
13538         . ./myread
13539         case "$ans" in
13540         [yY]*)  d_u32align="$undef"  ;;
13541         *)      d_u32align="$define" ;;
13542         esac
13543 fi
13544
13545 : see if ualarm exists
13546 set ualarm d_ualarm
13547 eval $inlibc
13548
13549 : see if umask exists
13550 set umask d_umask
13551 eval $inlibc
13552
13553 : see if unordered exists
13554 set unordered d_unordered
13555 eval $inlibc
13556
13557 : see if usleep exists
13558 set usleep d_usleep
13559 eval $inlibc
13560
13561 : see if prototype for usleep is available
13562 echo " "
13563 set d_usleepproto usleep $i_unistd unistd.h
13564 eval $hasproto
13565
13566 : see if ustat exists
13567 set ustat d_ustat
13568 eval $inlibc
13569
13570 : backward compatibility for d_hvfork
13571 if test X$d_hvfork != X; then
13572         d_vfork="$d_hvfork"
13573         d_hvfork=''
13574 fi
13575 : see if there is a vfork
13576 val=''
13577 set vfork val
13578 eval $inlibc
13579
13580 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13581 : perl on Solaris 2.x, and probably elsewhere.
13582 case "$val" in
13583 $define)
13584         echo " "
13585         case "$usevfork" in
13586         false) dflt='n';;
13587         *) dflt='y';;
13588         esac
13589         cat <<'EOM'
13590  
13591 Perl can only use a vfork() that doesn't suffer from strict
13592 restrictions on calling functions or modifying global data in
13593 the child.  For example, glibc-2.1 contains such a vfork()
13594 that is unsuitable.  If your system provides a proper fork()
13595 call, chances are that you do NOT want perl to use vfork().
13596
13597 EOM
13598         rp="Do you still want to use vfork()?"
13599         . ./myread
13600         case "$ans" in
13601         y|Y) ;;
13602         *)
13603                 echo "Ok, we won't use vfork()."
13604                 val="$undef"
13605                 ;;
13606         esac
13607         ;;
13608 esac
13609 set d_vfork
13610 eval $setvar
13611 case "$d_vfork" in
13612 $define) usevfork='true';;
13613 *) usevfork='false';;
13614 esac
13615
13616 : see if closedir exists
13617 set closedir d_closedir
13618 eval $inlibc
13619
13620 case "$d_closedir" in
13621 "$define")
13622         echo " "
13623         echo "Checking whether closedir() returns a status..." >&4
13624         cat > try.c <<EOM
13625 #$i_dirent I_DIRENT             /**/
13626 #$i_sysdir I_SYS_DIR            /**/
13627 #$i_sysndir I_SYS_NDIR          /**/
13628 #$i_systypes I_SYS_TYPES        /**/
13629
13630 #if defined(I_SYS_TYPES)
13631 #include <sys/types.h>
13632 #endif
13633 #if defined(I_DIRENT)
13634 #include <dirent.h>
13635 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13636 #include <sys/dir.h>
13637 #endif
13638 #else
13639 #ifdef I_SYS_NDIR
13640 #include <sys/ndir.h>
13641 #else
13642 #ifdef I_SYS_DIR
13643 #ifdef hp9000s500
13644 #include <ndir.h>       /* may be wrong in the future */
13645 #else
13646 #include <sys/dir.h>
13647 #endif
13648 #endif
13649 #endif
13650 #endif 
13651 int main() { return closedir(opendir(".")); }
13652 EOM
13653         set try
13654         if eval $compile_ok; then
13655                 if $run ./try > /dev/null 2>&1 ; then
13656                         echo "Yes, it does."
13657                         val="$undef"
13658                 else
13659                         echo "No, it doesn't."
13660                         val="$define"
13661                 fi
13662         else
13663                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13664                 val="$define"
13665         fi
13666         ;;
13667 *)
13668         val="$undef";
13669         ;;
13670 esac
13671 set d_void_closedir
13672 eval $setvar
13673 $rm -f try try.*
13674 : see if there is a wait4
13675 set wait4 d_wait4
13676 eval $inlibc
13677
13678 : see if waitpid exists
13679 set waitpid d_waitpid
13680 eval $inlibc
13681
13682 : see if wcstombs exists
13683 set wcstombs d_wcstombs
13684 eval $inlibc
13685
13686 : see if wctomb exists
13687 set wctomb d_wctomb
13688 eval $inlibc
13689
13690 : see if writev exists
13691 set writev d_writev
13692 eval $inlibc
13693
13694 : preserve RCS keywords in files with variable substitution, grrr
13695 Date='$Date'
13696 Id='$Id'
13697 Log='$Log'
13698 RCSfile='$RCSfile'
13699 Revision='$Revision'
13700
13701 : check for alignment requirements
13702 echo " "
13703 case "$usecrosscompile$multiarch" in
13704 *$define*)
13705         $cat <<EOM
13706 You seem to be either cross-compiling or doing a multiarchitecture build,
13707 skipping the memory alignment check.
13708
13709 EOM
13710         case "$alignbytes" in
13711         '') alignbytes=8 ;;
13712         esac
13713         ;;
13714 *)
13715         case "$alignbytes" in
13716         '') echo "Checking alignment constraints..." >&4
13717                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13718                         $cat >try.c <<'EOCP'
13719 typedef long double NV;
13720 EOCP
13721                 else
13722                         $cat >try.c <<'EOCP'
13723 typedef double NV;
13724 EOCP
13725                 fi
13726                 $cat >>try.c <<'EOCP'
13727 #include <stdio.h>
13728 struct foobar {
13729         char foo;
13730         NV bar;
13731 } try_algn;
13732 int main()
13733 {
13734     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13735     return(0);
13736 }
13737 EOCP
13738                 set try
13739                 if eval $compile_ok; then
13740                         dflt=`$run ./try`
13741                 else
13742                         dflt='8'
13743                         echo "(I can't seem to compile the test program...)"
13744                 fi
13745                 ;;
13746         *) dflt="$alignbytes"
13747                 ;;
13748         esac
13749         rp="Doubles must be aligned on a how-many-byte boundary?"
13750         . ./myread
13751         alignbytes="$ans"
13752         $rm -f try.c try
13753         ;;
13754 esac
13755
13756
13757 : set the base revision
13758 baserev=5.0
13759
13760 : how do we catenate cpp tokens here?
13761 echo " "
13762 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13763 $cat >cpp_stuff.c <<'EOCP'
13764 #define RCAT(a,b)a/**/b
13765 #define ACAT(a,b)a ## b
13766 RCAT(Rei,ser)
13767 ACAT(Cir,cus)
13768 EOCP
13769 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13770 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13771         echo "Oh!  Smells like ANSI's been here." >&4
13772         echo "We can catify or stringify, separately or together!"
13773         cpp_stuff=42
13774 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13775         echo "Ah, yes!  The good old days!" >&4
13776         echo "However, in the good old days we don't know how to stringify and"
13777         echo "catify at the same time."
13778         cpp_stuff=1
13779 else
13780         $cat >&4 <<EOM
13781 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13782 to have to edit the values of CAT[2-5] in config.h...
13783 EOM
13784         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13785 fi
13786 $rm -f cpp_stuff.*
13787
13788 : see if this is a db.h system
13789 set db.h i_db
13790 eval $inhdr
13791
13792 case "$i_db" in
13793 $define)
13794         : Check db version.
13795         echo " "
13796         echo "Checking Berkeley DB version ..." >&4
13797         $cat >try.c <<EOCP
13798 #$d_const HASCONST
13799 #ifndef HASCONST
13800 #define const
13801 #endif
13802 #include <sys/types.h>
13803 #include <stdio.h>
13804 #include <db.h>
13805 int main(int argc, char *argv[])
13806 {
13807 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13808     int Major, Minor, Patch ;
13809     unsigned long Version ;
13810     (void)db_version(&Major, &Minor, &Patch) ;
13811     if (argc == 2) {
13812         printf("%d %d %d %d %d %d\n",
13813                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13814                Major, Minor, Patch);
13815         exit(0);
13816     }
13817     printf("You have Berkeley DB Version 2 or greater.\n");
13818
13819     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13820                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13821     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13822                 Major, Minor, Patch) ;
13823
13824     /* check that db.h & libdb are compatible */
13825     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13826         printf("db.h and libdb are incompatible.\n") ;
13827         exit(3);        
13828     }
13829
13830     printf("db.h and libdb are compatible.\n") ;
13831
13832     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13833                 + DB_VERSION_PATCH ;
13834
13835     /* needs to be >= 2.3.4 */
13836     if (Version < 2003004) {
13837     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13838         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13839         exit(2);        
13840     }
13841
13842     exit(0);
13843 #else
13844 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13845     if (argc == 2) {
13846         printf("1 0 0\n");
13847         exit(0);
13848     }
13849     printf("You have Berkeley DB Version 1.\n");
13850     exit(0);    /* DB version < 2: the coast is clear. */
13851 #else
13852     exit(1);    /* <db.h> not Berkeley DB? */
13853 #endif
13854 #endif
13855 }
13856 EOCP
13857         set try
13858         if eval $compile_ok && $run ./try; then
13859                 echo 'Looks OK.' >&4
13860                 set `$run ./try 1`
13861                 db_version_major=$1
13862                 db_version_minor=$2
13863                 db_version_patch=$3
13864         else
13865                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13866                 i_db=$undef
13867                 case " $libs " in
13868                 *"-ldb "*)
13869                         : Remove db from list of libraries to use
13870                         echo "Removing unusable -ldb from library list" >&4
13871                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13872                         shift
13873                         libs="$*"
13874                         echo "libs = $libs" >&4
13875                         ;;
13876                 esac
13877         fi
13878         $rm -f try.*
13879         ;;
13880 esac
13881
13882 case "$i_db" in
13883 define)
13884         : Check the return type needed for hash 
13885         echo " "
13886         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13887         $cat >try.c <<EOCP
13888 #$d_const HASCONST
13889 #ifndef HASCONST
13890 #define const
13891 #endif
13892 #include <sys/types.h>
13893 #include <db.h>
13894
13895 #ifndef DB_VERSION_MAJOR
13896 u_int32_t hash_cb (ptr, size)
13897 const void *ptr;
13898 size_t size;
13899 {
13900 }
13901 HASHINFO info;
13902 int main()
13903 {
13904         info.hash = hash_cb;
13905 }
13906 #endif
13907 EOCP
13908         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13909                 if $contains warning try.out >>/dev/null 2>&1 ; then
13910                         db_hashtype='int'
13911                 else
13912                         db_hashtype='u_int32_t'
13913                 fi
13914         else
13915                 : XXX Maybe we should just give up here.
13916                 db_hashtype=u_int32_t
13917                 $cat try.out >&4
13918                 echo "Help:  I can't seem to compile the db test program." >&4
13919                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13920         fi
13921         $rm -f try.*
13922         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13923         ;;
13924 *)      db_hashtype=u_int32_t
13925         ;;
13926 esac
13927 case "$i_db" in
13928 define)
13929         : Check the return type needed for prefix 
13930         echo " "
13931         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13932         cat >try.c <<EOCP
13933 #$d_const HASCONST
13934 #ifndef HASCONST
13935 #define const
13936 #endif
13937 #include <sys/types.h>
13938 #include <db.h>
13939
13940 #ifndef DB_VERSION_MAJOR
13941 size_t prefix_cb (key1, key2)
13942 const DBT *key1;
13943 const DBT *key2;
13944 {
13945 }
13946 BTREEINFO info;
13947 int main()
13948 {
13949         info.prefix = prefix_cb;
13950 }
13951 #endif
13952 EOCP
13953         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13954                 if $contains warning try.out >>/dev/null 2>&1 ; then
13955                         db_prefixtype='int'
13956                 else
13957                         db_prefixtype='size_t'
13958                 fi
13959         else
13960                 db_prefixtype='size_t'
13961                 : XXX Maybe we should just give up here.
13962                 $cat try.out >&4
13963                 echo "Help:  I can't seem to compile the db test program." >&4
13964                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13965         fi
13966         $rm -f try.*
13967         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13968         ;;
13969 *)      db_prefixtype='size_t'
13970         ;;
13971 esac
13972
13973
13974 : How can we generate normalized random numbers ?
13975 echo " "
13976 echo "Looking for a random number function..." >&4
13977 case "$randfunc" in
13978 '')
13979         if set drand48 val -f; eval $csym; $val; then
13980                 dflt="drand48"
13981                 echo "Good, found drand48()." >&4
13982         elif set random val -f; eval $csym; $val; then
13983                 dflt="random"
13984                 echo "OK, found random()." >&4
13985         else
13986                 dflt="rand"
13987                 echo "Yick, looks like I have to use rand()." >&4
13988         fi
13989         echo " "
13990         ;;
13991 *)
13992         dflt="$randfunc"
13993         ;;
13994 esac
13995 cont=true
13996
13997 case "$ccflags" in
13998 *-Dmy_rand=*|*-Dmy_srand=*)
13999         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14000         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14001         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14002         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14003         ;;
14004 esac
14005
14006 while $test "$cont"; do
14007         rp="Use which function to generate random numbers?"
14008         . ./myread
14009         if $test "$ans" = "$dflt"; then
14010                 : null
14011         else
14012                 randbits=''
14013         fi
14014         randfunc="$ans"
14015         if set $ans val -f; eval $csym; $val; then
14016                 cont=''
14017         else
14018                 dflt=y
14019                 rp="I cannot find function $ans. Use that name anyway?"
14020                 . ./myread
14021                 dflt=rand
14022                 case "$ans" in
14023                         [yY]*) cont='';;
14024                 esac
14025         fi
14026         case "$cont" in
14027         '')
14028                 case "$randfunc" in
14029                 drand48)
14030                         drand01="drand48()"
14031                         seedfunc="srand48"
14032                         randbits=48
14033                         randseedtype=long
14034                         ;;
14035                 rand|random)
14036                         case "$randbits" in
14037                         '')
14038 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14039                                 $cat >try.c <<EOCP
14040 #$i_unistd I_UNISTD
14041 #$i_stdlib I_STDLIB
14042 #include <stdio.h>
14043 #ifdef I_UNISTD
14044 #  include <unistd.h>
14045 #endif
14046 #ifdef I_STDLIB
14047 #  include <stdlib.h>
14048 #endif
14049 int main()
14050 {
14051         register int i;
14052         register unsigned long tmp;
14053         register unsigned long max = 0L;
14054
14055         for (i = 1000; i; i--) {
14056                 tmp = (unsigned long) $randfunc();
14057                 if (tmp > max) max = tmp;
14058         }
14059         for (i = 0; max; i++)
14060                 max /= 2;
14061         printf("%d\n",i);
14062 }
14063 EOCP
14064                                 set try
14065                                 if eval $compile_ok; then
14066                                         dflt=`try`
14067                                 else
14068                                         dflt='?'
14069                                         echo "(I can't seem to compile the test program...)"
14070                                 fi
14071                                 ;;
14072                         *)
14073                                 dflt="$randbits"
14074                                 ;;
14075                         esac
14076                         rp="How many bits does your $randfunc() function produce?"
14077                         . ./myread
14078                         randbits="$ans"
14079                         $rm -f try.c try
14080                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14081                         seedfunc="s$randfunc"
14082                         randseedtype=unsigned
14083                         ;;
14084                 *)
14085                         dflt="31"
14086                         rp="How many bits does your $randfunc() function produce?"
14087                         . ./myread
14088                         randbits="$ans"
14089                         seedfunc="s$randfunc"
14090                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14091                         if set $seedfunc val -f; eval $csym; $val; then
14092                                 echo "(Using $seedfunc() to seed random generator)"
14093                         else
14094                                 echo "(Warning: no $seedfunc() to seed random generator)"
14095                                 seedfunc=rand
14096                         fi
14097                         randseedtype=unsigned
14098                         ;;
14099                 esac
14100                 ;;
14101         esac
14102 done
14103
14104 echo " "
14105 echo "Determining whether or not we are on an EBCDIC system..." >&4
14106 $cat >try.c <<'EOM'
14107 int main()
14108 {
14109   if ('M'==0xd4) return 0;
14110   return 1;
14111 }
14112 EOM
14113
14114 val=$undef
14115 set try
14116 if eval $compile_ok; then
14117         if $run ./try; then
14118                 echo "You seem to speak EBCDIC." >&4
14119                 val="$define"
14120         else
14121                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14122         fi
14123 else
14124         echo "I'm unable to compile the test program." >&4
14125         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14126 fi
14127 $rm -f try try.*
14128 set ebcdic
14129 eval $setvar
14130
14131 echo " "
14132 $cat >&4 <<EOM
14133 Checking how to flush all pending stdio output...
14134 EOM
14135 # I only know how to find the first 32 possibly open files on SunOS.
14136 # See also hints/sunos_4_1.sh and util.c  --AD
14137 case "$osname" in
14138 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14139 esac
14140 $cat >>try.c <<EOCP
14141 #include <stdio.h>
14142 #$i_unistd I_UNISTD
14143 #ifdef I_UNISTD
14144 # include <unistd.h>
14145 #endif
14146 #$d_sysconf HAS_SYSCONF
14147 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14148 #ifdef HAS_STDIO_STREAM_ARRAY
14149 # define STDIO_STREAM_ARRAY $stdio_stream_array
14150 #endif
14151 int main() {
14152   FILE* p;
14153   unlink("try.out");
14154   p = fopen("try.out", "w");
14155 #ifdef TRY_FPUTC
14156   fputc('x', p);
14157 #else
14158 # ifdef TRY_FPRINTF
14159   fprintf(p, "x");
14160 # endif
14161 #endif
14162 #ifdef TRY_FFLUSH_NULL
14163   fflush(NULL);
14164 #endif
14165 #ifdef TRY_FFLUSH_ALL
14166   {
14167     long open_max = -1;
14168 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14169     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14170 # else
14171 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14172     open_max = sysconf(_SC_OPEN_MAX);
14173 #  else
14174 #   ifdef FOPEN_MAX
14175     open_max = FOPEN_MAX;
14176 #   else
14177 #    ifdef OPEN_MAX
14178     open_max = OPEN_MAX;
14179 #    else
14180 #     ifdef _NFILE
14181     open_max = _NFILE;
14182 #     endif
14183 #    endif
14184 #   endif
14185 #  endif
14186 # endif 
14187 # ifdef HAS_STDIO_STREAM_ARRAY
14188     if (open_max > 0) {
14189       long i;
14190       for (i = 0; i < open_max; i++)
14191             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14192                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14193                 STDIO_STREAM_ARRAY[i]._flag)
14194                 fflush(&STDIO_STREAM_ARRAY[i]);
14195     }   
14196   }
14197 # endif
14198 #endif
14199   _exit(42);
14200 }
14201 EOCP
14202 : first we have to find out how _not_ to flush
14203 $to try.c
14204 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14205     output=''
14206     set try -DTRY_FPUTC
14207     if eval $compile; then
14208             $run ./try 2>/dev/null
14209             code="$?"
14210             $from try.out
14211             if $test ! -s try.out -a "X$code" = X42; then
14212                 output=-DTRY_FPUTC
14213             fi
14214     fi
14215     case "$output" in
14216     '')
14217             set try -DTRY_FPRINTF
14218             if eval $compile; then
14219                     $run ./try 2>/dev/null
14220                     code="$?"
14221                     $from try.out
14222                     if $test ! -s try.out -a "X$code" = X42; then
14223                         output=-DTRY_FPRINTF
14224                     fi
14225             fi
14226         ;;
14227     esac
14228 fi
14229 : check for fflush NULL behaviour
14230 case "$fflushNULL" in
14231 '')     set try -DTRY_FFLUSH_NULL $output
14232         if eval $compile; then
14233                 $run ./try 2>/dev/null
14234                 code="$?"
14235                 $from try.out
14236                 if $test -s try.out -a "X$code" = X42; then
14237                         fflushNULL="`$cat try.out`"
14238                 else
14239                         if $test "X$code" != X42; then
14240                                 $cat >&4 <<EOM
14241 (If this test failed, don't worry, we'll try another method shortly.)
14242 EOM
14243                         fi
14244                 fi
14245         fi
14246         $rm -f core try.core core.try.*
14247         case "$fflushNULL" in
14248         x)      $cat >&4 <<EOM
14249 Your fflush(NULL) works okay for output streams.
14250 Let's see if it clobbers input pipes...
14251 EOM
14252 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14253 # bug that improperly flushes the input end of pipes.  So we avoid the
14254 # autoflush on fork/system/exec support for now. :-(
14255 $cat >tryp.c <<EOCP
14256 #include <stdio.h>
14257 int
14258 main(int argc, char **argv)
14259 {
14260     char buf[1024];
14261     int i;
14262     char *bp = buf;
14263     while (1) {
14264         while ((i = getc(stdin)) != -1
14265                && (*bp++ = i) != '\n'
14266                && bp < &buf[1024])
14267         /* DO NOTHING */ ;
14268         *bp = '\0';
14269         fprintf(stdout, "%s", buf);
14270         fflush(NULL);
14271         if (i == -1)
14272             return 0;
14273         bp = buf;
14274     }
14275 }
14276 EOCP
14277                 fflushNULL="$define"
14278                 set tryp
14279                 if eval $compile; then
14280                     $rm -f tryp.out
14281                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14282                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14283                        $cat >&4 <<EOM
14284 fflush(NULL) seems to behave okay with input streams.
14285 EOM
14286                         fflushNULL="$define"
14287                     else
14288                         $cat >&4 <<EOM
14289 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14290 EOM
14291                         fflushNULL="$undef"
14292                     fi
14293                 fi
14294                 $rm -f core tryp.c tryp.core core.tryp.*
14295                 ;;
14296         '')     $cat >&4 <<EOM
14297 Your fflush(NULL) isn't working (contrary to ANSI C).
14298 EOM
14299                 fflushNULL="$undef"
14300                 ;;
14301         *)      $cat >&4 <<EOM
14302 Cannot figure out whether your fflush(NULL) works or not.
14303 I'm assuming it doesn't (contrary to ANSI C).
14304 EOM
14305                 fflushNULL="$undef"
14306                 ;;
14307         esac
14308         ;;
14309 $define|true|[yY]*)
14310         fflushNULL="$define"
14311         ;;
14312 *)
14313         fflushNULL="$undef"
14314         ;;
14315 esac
14316 : check explicit looping only if NULL did not work, and if the pipe
14317 : bug does not show up on an explicit flush too
14318 case "$fflushNULL" in
14319 "$undef")
14320         $cat >tryp.c <<EOCP
14321 #include <stdio.h>
14322 int
14323 main(int argc, char **argv)
14324 {
14325     char buf[1024];
14326     int i;
14327     char *bp = buf;
14328     while (1) {
14329         while ((i = getc(stdin)) != -1
14330                && (*bp++ = i) != '\n'
14331                && bp < &buf[1024])
14332         /* DO NOTHING */ ;
14333         *bp = '\0';
14334         fprintf(stdout, "%s", buf);
14335         fflush(stdin);
14336         if (i == -1)
14337             return 0;
14338         bp = buf;
14339     }
14340 }
14341 EOCP
14342         set tryp
14343         if eval $compile; then
14344             $rm -f tryp.out
14345             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14346             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14347                $cat >&4 <<EOM
14348 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14349 EOM
14350                 : now check for fflushall behaviour
14351                 case "$fflushall" in
14352                 '')     set try -DTRY_FFLUSH_ALL $output
14353                         if eval $compile; then
14354                                 $cat >&4 <<EOM
14355 (Now testing the other method--but note that this also may fail.)
14356 EOM
14357                                 $run ./try 2>/dev/null
14358                                 code=$?
14359                                 $from try.out
14360                                 if $test -s try.out -a "X$code" = X42; then
14361                                         fflushall="`$cat try.out`"
14362                                 fi
14363                         fi
14364                         $rm -f core try.core core.try.*
14365                         case "$fflushall" in
14366                         x)      $cat >&4 <<EOM
14367 Whew. Flushing explicitly all the stdio streams works.
14368 EOM
14369                                 fflushall="$define"
14370                                 ;;
14371                         '')     $cat >&4 <<EOM
14372 Sigh. Flushing explicitly all the stdio streams doesn't work.
14373 EOM
14374                                 fflushall="$undef"
14375                                 ;;
14376                         *)      $cat >&4 <<EOM
14377 Cannot figure out whether flushing stdio streams explicitly works or not.
14378 I'm assuming it doesn't.
14379 EOM
14380                                 fflushall="$undef"
14381                                 ;;
14382                         esac
14383                         ;;
14384                 "$define"|true|[yY]*)
14385                         fflushall="$define"
14386                         ;;
14387                 *)
14388                         fflushall="$undef"
14389                         ;;
14390                 esac
14391             else
14392                 $cat >&4 <<EOM
14393 All is futile.  Even fflush(stdin) clobbers input pipes!
14394 EOM
14395                 fflushall="$undef"
14396             fi
14397         else
14398             fflushall="$undef"
14399         fi
14400         $rm -f core tryp.c tryp.core core.tryp.*
14401         ;;
14402 *)      fflushall="$undef"
14403         ;;
14404 esac
14405
14406 case "$fflushNULL$fflushall" in
14407 undefundef)
14408         $cat <<EOM
14409 OK, I give up.  I cannot figure out how to flush pending stdio output.
14410 We won't be flushing handles at all before fork/exec/popen.
14411 EOM
14412         ;;
14413 esac
14414 $rm -f try.* try$exe_ext
14415
14416 : Store the full pathname to the ar program for use in the C program
14417 : Respect a hint or command line value for full_ar.
14418 case "$full_ar" in
14419 '') full_ar=$ar ;;
14420 esac
14421
14422 : Store the full pathname to the sed program for use in the C program
14423 full_sed=$sed
14424
14425 : see what type gids are declared as in the kernel
14426 echo " "
14427 echo "Looking for the type for group ids returned by getgid()."
14428 set gid_t gidtype xxx stdio.h sys/types.h
14429 eval $typedef
14430 case "$gidtype" in
14431 xxx)
14432         xxx=`./findhdr sys/user.h`
14433         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14434         case $1 in
14435         unsigned) dflt="$1 $2" ;;
14436         *) dflt="$1" ;;
14437         esac
14438         ;;
14439 *) dflt="$gidtype";;
14440 esac
14441 case "$gidtype" in
14442 gid_t) echo "gid_t found." ;;
14443 *)      rp="What is the type for group ids returned by getgid()?"
14444         . ./myread
14445         gidtype="$ans"
14446         ;;
14447 esac
14448
14449 echo " "
14450 case "$gidtype" in
14451 *_t) zzz="$gidtype"     ;;
14452 *)   zzz="gid"          ;;
14453 esac
14454 echo "Checking the size of $zzz..." >&4 
14455 cat > try.c <<EOCP
14456 #include <sys/types.h>
14457 #include <stdio.h>
14458 int main() {
14459     printf("%d\n", (int)sizeof($gidtype));
14460     exit(0);
14461 }
14462 EOCP
14463 set try
14464 if eval $compile_ok; then
14465         yyy=`$run ./try`
14466         case "$yyy" in
14467         '')     gidsize=4
14468                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14469                 ;;
14470         *)      gidsize=$yyy
14471                 echo "Your $zzz is $gidsize bytes long."
14472                 ;;
14473         esac
14474 else
14475         gidsize=4
14476         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14477 fi
14478
14479
14480 echo " "
14481 case "$gidtype" in
14482 *_t) zzz="$gidtype"     ;;
14483 *)   zzz="gid"          ;;
14484 esac
14485 echo "Checking the sign of $zzz..." >&4 
14486 cat > try.c <<EOCP
14487 #include <sys/types.h>
14488 #include <stdio.h>
14489 int main() {
14490         $gidtype foo = -1;
14491         if (foo < 0)
14492                 printf("-1\n");
14493         else
14494                 printf("1\n");
14495 }
14496 EOCP
14497 set try
14498 if eval $compile; then
14499         yyy=`$run ./try`
14500         case "$yyy" in
14501         '')     gidsign=1
14502                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14503                 ;;
14504         *)      gidsign=$yyy
14505                 case "$gidsign" in
14506                  1) echo "Your $zzz is unsigned." ;;
14507                 -1) echo "Your $zzz is signed."   ;;
14508                 esac
14509                 ;;
14510         esac
14511 else
14512         gidsign=1
14513         echo "(I can't compile the test program--guessing unsigned.)" >&4
14514 fi
14515
14516
14517 echo " "
14518
14519 if $test X"$quadtype" != X; then
14520
14521 echo "Checking how to print 64-bit integers..." >&4
14522
14523 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14524         $cat >try.c <<'EOCP'
14525 #include <sys/types.h>
14526 #include <stdio.h>
14527 int main() {
14528   int q = 12345678901;
14529   printf("%ld\n", q);
14530 }
14531 EOCP
14532         set try
14533         if eval $compile; then
14534                 yyy=`$run ./try`
14535                 case "$yyy" in
14536                 12345678901)
14537                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14538                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14539                         echo "We will use %d."
14540                         ;;
14541                 esac
14542         fi
14543 fi
14544
14545 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14546         $cat >try.c <<'EOCP'
14547 #include <sys/types.h>
14548 #include <stdio.h>
14549 int main() {
14550   long q = 12345678901;
14551   printf("%ld\n", q);
14552 }
14553 EOCP
14554         set try
14555         if eval $compile; then
14556                 yyy=`$run ./try`
14557                 case "$yyy" in
14558                 12345678901)
14559                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14560                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14561                         echo "We will use %ld."
14562                         ;;
14563                 esac
14564         fi
14565 fi
14566
14567 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14568         $cat >try.c <<'EOCP'
14569 #include <sys/types.h>
14570 #include <inttypes.h>
14571 #include <stdio.h>
14572 int main() {
14573   int64_t q = 12345678901;
14574   printf("%" PRId64 "\n", q);
14575 }
14576 EOCP
14577         set try
14578         if eval $compile; then
14579                 yyy=`$run ./try`
14580                 case "$yyy" in
14581                 12345678901)
14582                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14583                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14584                         echo "We will use the C9X style."
14585                         ;;
14586                 esac
14587         fi
14588 fi
14589
14590 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14591         $cat >try.c <<EOCP
14592 #include <sys/types.h>
14593 #include <stdio.h>
14594 int main() {
14595   $quadtype q = 12345678901;
14596   printf("%Ld\n", q);
14597 }
14598 EOCP
14599         set try
14600         if eval $compile; then
14601                 yyy=`$run ./try`
14602                 case "$yyy" in
14603                 12345678901)
14604                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14605                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14606                         echo "We will use %Ld."
14607                         ;;
14608                 esac
14609         fi
14610 fi
14611
14612 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14613         $cat >try.c <<'EOCP'
14614 #include <sys/types.h>
14615 #include <stdio.h>
14616 int main() {
14617   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14618   printf("%lld\n", q);
14619 }
14620 EOCP
14621         set try
14622         if eval $compile; then
14623                 yyy=`$run ./try`
14624                 case "$yyy" in
14625                 12345678901)
14626                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14627                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14628                         echo "We will use the %lld style."
14629                         ;;
14630                 esac
14631         fi
14632 fi
14633
14634 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14635         $cat >try.c <<EOCP
14636 #include <sys/types.h>
14637 #include <stdio.h>
14638 int main() {
14639   $quadtype q = 12345678901;
14640   printf("%qd\n", q);
14641 }
14642 EOCP
14643         set try
14644         if eval $compile; then
14645                 yyy=`$run ./try`
14646                 case "$yyy" in
14647                 12345678901)
14648                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14649                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14650                         echo "We will use %qd."
14651                         ;;
14652                 esac
14653         fi
14654 fi
14655
14656 if $test X"$sPRId64" = X; then
14657         echo "Cannot figure out how to print 64-bit integers." >&4
14658 fi
14659
14660 $rm -f try try.*
14661
14662 fi
14663
14664 case "$sPRId64" in
14665 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14666         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14667         ;;
14668 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14669         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14670         ;;
14671 esac
14672
14673
14674 echo " "
14675 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14676
14677 if $test X"$ivsize" = X8; then
14678         ivdformat="$sPRId64"
14679         uvuformat="$sPRIu64"
14680         uvoformat="$sPRIo64"
14681         uvxformat="$sPRIx64"
14682         uvXUformat="$sPRIXU64"
14683 else
14684         if $test X"$ivsize" = X"$longsize"; then
14685                 ivdformat='"ld"'
14686                 uvuformat='"lu"'
14687                 uvoformat='"lo"'
14688                 uvxformat='"lx"'
14689                 uvXUformat='"lX"'
14690         else
14691                 if $test X"$ivsize" = X"$intsize"; then
14692                         ivdformat='"d"'
14693                         uvuformat='"u"'
14694                         uvoformat='"o"'
14695                         uvxformat='"x"'
14696                         uvXUformat='"X"'
14697                 else
14698                         : far out
14699                         if $test X"$ivsize" = X"$shortsize"; then
14700                                 ivdformat='"hd"'
14701                                 uvuformat='"hu"'
14702                                 uvoformat='"ho"'
14703                                 uvxformat='"hx"'
14704                                 uvXUformat='"hX"'
14705                         fi
14706                 fi
14707         fi
14708 fi
14709
14710 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14711         nveformat="$sPRIeldbl"
14712         nvfformat="$sPRIfldbl"
14713         nvgformat="$sPRIgldbl"
14714         nvEUformat="$sPRIEUldbl"
14715         nvFUformat="$sPRIFUldbl"
14716         nvGUformat="$sPRIGUldbl"
14717 else
14718         nveformat='"e"'
14719         nvfformat='"f"'
14720         nvgformat='"g"'
14721         nvEUformat='"E"'
14722         nvFUformat='"F"'
14723         nvGUformat='"G"'
14724 fi
14725
14726 case "$ivdformat" in
14727 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14728     exit 1
14729     ;;
14730 esac
14731
14732
14733 echo " "
14734 $echo "Checking the format string to be used for gids..." >&4
14735
14736 case "$gidsign" in
14737 -1)     if $test X"$gidsize" = X"$ivsize"; then
14738                 gidformat="$ivdformat"
14739         else
14740                 if $test X"$gidsize" = X"$longsize"; then
14741                         gidformat='"ld"'
14742                 else
14743                         if $test X"$gidsize" = X"$intsize"; then
14744                                 gidformat='"d"'
14745                         else
14746                                 if $test X"$gidsize" = X"$shortsize"; then
14747                                         gidformat='"hd"'
14748                                 fi
14749                         fi
14750                 fi
14751         fi
14752         ;;
14753 *)      if $test X"$gidsize" = X"$uvsize"; then
14754                 gidformat="$uvuformat"
14755         else
14756                 if $test X"$gidsize" = X"$longsize"; then
14757                         gidformat='"lu"'
14758                 else
14759                         if $test X"$gidsize" = X"$intsize"; then
14760                                 gidformat='"u"'
14761                         else
14762                                 if $test X"$gidsize" = X"$shortsize"; then
14763                                         gidformat='"hu"'
14764                                 fi
14765                         fi
14766                 fi
14767         fi
14768         ;;
14769 esac
14770
14771 : see if getgroups exists
14772 set getgroups d_getgrps
14773 eval $inlibc
14774
14775 : see if setgroups exists
14776 set setgroups d_setgrps
14777 eval $inlibc
14778
14779
14780 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14781 echo " "
14782 case "$d_getgrps$d_setgrps" in
14783 *define*)
14784         case "$groupstype" in
14785         '') dflt="$gidtype" ;;
14786         *)  dflt="$groupstype" ;;
14787         esac
14788         $cat <<EOM
14789 What type of pointer is the second argument to getgroups() and setgroups()?
14790 Usually this is the same as group ids, $gidtype, but not always.
14791
14792 EOM
14793         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14794         . ./myread
14795         groupstype="$ans"
14796         ;;
14797 *)  groupstype="$gidtype";;
14798 esac
14799
14800 echo " "
14801 echo "Checking if your $make program sets \$(MAKE)..." >&4
14802 case "$make_set_make" in
14803 '')
14804         $sed 's/^X //' > testmake.mak << 'EOF'
14805 Xall:
14806 X       @echo 'maketemp="$(MAKE)"'
14807 EOF
14808         case "`$make -f testmake.mak 2>/dev/null`" in
14809         *maketemp=*) make_set_make='#' ;;
14810         *)      make_set_make="MAKE=$make" ;;
14811         esac
14812         $rm -f testmake.mak
14813         ;;
14814 esac
14815 case "$make_set_make" in
14816 '#') echo "Yup, it does.";;
14817 *) echo "Nope, it doesn't.";;
14818 esac
14819
14820 : see what type is used for mode_t
14821 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14822 set mode_t modetype int stdio.h sys/types.h
14823 eval $typedef_ask
14824
14825 : see if stdarg is available
14826 echo " "
14827 if $test `./findhdr stdarg.h`; then
14828         echo "<stdarg.h> found." >&4
14829         valstd="$define"
14830 else
14831         echo "<stdarg.h> NOT found." >&4
14832         valstd="$undef"
14833 fi
14834
14835 : see if varags is available
14836 echo " "
14837 if $test `./findhdr varargs.h`; then
14838         echo "<varargs.h> found." >&4
14839 else
14840         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14841 fi
14842
14843 : set up the varargs testing programs
14844 $cat > varargs.c <<EOP
14845 #ifdef I_STDARG
14846 #include <stdarg.h>
14847 #endif
14848 #ifdef I_VARARGS
14849 #include <varargs.h>
14850 #endif
14851
14852 #ifdef I_STDARG
14853 int f(char *p, ...)
14854 #else
14855 int f(va_alist)
14856 va_dcl
14857 #endif
14858 {
14859         va_list ap;
14860 #ifndef I_STDARG
14861         char *p;
14862 #endif
14863 #ifdef I_STDARG
14864         va_start(ap,p);
14865 #else
14866         va_start(ap);
14867         p = va_arg(ap, char *);
14868 #endif
14869         va_end(ap);
14870 }
14871 EOP
14872 $cat > varargs <<EOP
14873 $startsh
14874 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14875         echo "true"
14876 else
14877         echo "false"
14878 fi
14879 $rm -f varargs$_o
14880 EOP
14881 chmod +x varargs
14882
14883 : now check which varargs header should be included
14884 echo " "
14885 i_varhdr=''
14886 case "$valstd" in
14887 "$define")
14888         if `./varargs I_STDARG`; then
14889                 val='stdarg.h'
14890         elif `./varargs I_VARARGS`; then
14891                 val='varargs.h'
14892         fi
14893         ;;
14894 *)
14895         if `./varargs I_VARARGS`; then
14896                 val='varargs.h'
14897         fi
14898         ;;
14899 esac
14900 case "$val" in
14901 '')
14902 echo "I could not find the definition for va_dcl... You have problems..." >&4
14903         val="$undef"; set i_stdarg; eval $setvar
14904         val="$undef"; set i_varargs; eval $setvar
14905         ;;
14906 *) 
14907         set i_varhdr
14908         eval $setvar
14909         case "$i_varhdr" in
14910         stdarg.h)
14911                 val="$define"; set i_stdarg; eval $setvar
14912                 val="$undef"; set i_varargs; eval $setvar
14913                 ;;
14914         varargs.h)
14915                 val="$undef"; set i_stdarg; eval $setvar
14916                 val="$define"; set i_varargs; eval $setvar
14917                 ;;
14918         esac
14919         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14920 esac
14921 $rm -f varargs*
14922
14923 : see if we need va_copy
14924 echo " "
14925 case "$i_stdarg" in
14926 "$define")
14927         $cat >try.c <<EOCP
14928 #include <stdarg.h>
14929 #include <stdio.h>
14930 #$i_stdlib I_STDLIB
14931 #ifdef I_STDLIB
14932 #include <stdlib.h>
14933 #endif
14934 #include <signal.h>
14935
14936 int
14937 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14938 {
14939   return vfprintf(f, fmt, *valp);
14940 }
14941  
14942 int    
14943 myvfprintf(FILE *f, const  char *fmt, va_list val)
14944 {
14945   return ivfprintf(f, fmt, &val);
14946 }
14947       
14948 int
14949 myprintf(char *fmt, ...) 
14950 {
14951   va_list val;
14952   va_start(val, fmt);
14953   return myvfprintf(stdout, fmt, val); 
14954 }         
14955
14956 int
14957 main(int ac, char **av)
14958 {
14959   signal(SIGSEGV, exit);
14960
14961   myprintf("%s%cs all right, then\n", "that", '\'');                            
14962   exit(0);      
14963 }
14964 EOCP
14965         set try
14966         if eval $compile && $run ./try 2>&1 >/dev/null; then
14967                 case "`$run ./try`" in
14968                 "that's all right, then")
14969                         okay=yes
14970                         ;;
14971                 esac
14972         fi
14973         case "$okay" in
14974         yes)    echo "It seems that you don't need va_copy()." >&4
14975                 need_va_copy="$undef"
14976                 ;;
14977         *)      echo "It seems that va_copy() or similar will be needed." >&4
14978                 need_va_copy="$define"
14979                 ;;
14980         esac
14981         $rm -f try.* core core.* *.core *.core.*
14982         ;;
14983 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14984         ;;
14985 esac
14986
14987 : define a fucntion to check prototypes
14988 $cat > protochk <<EOSH
14989 $startsh
14990 cc="$cc"
14991 optimize="$optimize"
14992 ccflags="$ccflags"
14993 prototype="$prototype"
14994 define="$define"
14995 rm=$rm
14996 EOSH
14997
14998 $cat >> protochk <<'EOSH'
14999
15000 $rm -f try.c
15001 foo="$1"
15002 shift
15003 while test $# -ge 2; do
15004         case "$1" in
15005                 $define) echo "#include <$2>" >> try.c ;;
15006                 literal) echo "$2" >> try.c ;;
15007         esac
15008     shift 2
15009 done
15010 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15011 cat >> try.c <<'EOCP'
15012 #ifdef CAN_PROTOTYPE
15013 #define _(args) args
15014 #else
15015 #define _(args) ()
15016 #endif
15017 EOCP
15018 echo "$foo" >> try.c
15019 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15020 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15021 status=$?
15022 $rm -f try.[co]
15023 exit $status
15024 EOSH
15025 chmod +x protochk
15026 $eunicefix protochk
15027
15028 : see what type is used for size_t
15029 rp="What is the type used for the length parameter for string functions?"
15030 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15031 eval $typedef_ask
15032
15033 : check for type of arguments to gethostbyaddr. 
15034 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15035         case "$d_gethbyaddr" in
15036         $define)
15037                 $cat <<EOM
15038
15039 Checking to see what type of arguments are accepted by gethostbyaddr().
15040 EOM
15041                 hdrs="$define sys/types.h
15042                         $d_socket sys/socket.h 
15043                         $i_niin netinet/in.h 
15044                         $i_netdb netdb.h
15045                         $i_unistd unistd.h"
15046                 : The first arg can 'char *' or 'void *'
15047                 : The second arg is some of integral type
15048                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15049                         for yyy in size_t long int; do
15050                                 case "$netdb_host_type" in
15051                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15052                                         if ./protochk "$try" $hdrs; then
15053                                                 echo "Your system accepts $xxx for the first arg."
15054                                                 echo "...and $yyy for the second arg."
15055                                                 netdb_host_type="$xxx"
15056                                                 netdb_hlen_type="$yyy"
15057                                         fi
15058                                         ;;
15059                                 esac
15060                         done
15061                 done
15062                 : In case none of those worked, prompt the user.
15063                 case "$netdb_host_type" in
15064                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15065                         dflt='char *'
15066                         . ./myread
15067                         netdb_host_type=$ans
15068                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15069                         dflt="$sizetype"
15070                         . ./myread
15071                         netdb_hlen_type=$ans
15072                         ;;
15073                 esac
15074                 ;;
15075         *)      : no gethostbyaddr, so pick harmless defaults
15076                 netdb_host_type='char *'
15077                 netdb_hlen_type="$sizetype"
15078                 ;;
15079         esac
15080         # Remove the "const" if needed. -- but then we'll have a 
15081         # prototype clash!
15082         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15083 fi
15084
15085 : check for type of argument to gethostbyname. 
15086 if test "X$netdb_name_type" = X ; then
15087         case "$d_gethbyname" in
15088         $define)
15089                 $cat <<EOM
15090
15091 Checking to see what type of argument is accepted by gethostbyname().
15092 EOM
15093                 hdrs="$define sys/types.h
15094                         $d_socket sys/socket.h 
15095                         $i_niin netinet/in.h 
15096                         $i_netdb netdb.h
15097                         $i_unistd unistd.h"
15098                 for xxx in "const char *" "char *"; do
15099                         case "$netdb_name_type" in
15100                         '')     try="extern struct hostent *gethostbyname($xxx);"
15101                                 if ./protochk "$try" $hdrs; then
15102                                         echo "Your system accepts $xxx."
15103                                         netdb_name_type="$xxx"
15104                                 fi
15105                                 ;;
15106                         esac
15107                 done
15108                 : In case none of those worked, prompt the user.
15109                 case "$netdb_name_type" in
15110                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15111                         dflt='char *'
15112                         . ./myread
15113                         netdb_name_type=$ans
15114                         ;;
15115                 esac
15116                 ;;
15117         *)      : no gethostbyname, so pick harmless default
15118                 netdb_name_type='char *'
15119                 ;;
15120         esac
15121 fi
15122
15123 : check for type of 1st argument to getnetbyaddr. 
15124 if test "X$netdb_net_type" = X ; then
15125         case "$d_getnbyaddr" in
15126         $define)
15127                 $cat <<EOM
15128
15129 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15130 EOM
15131                 hdrs="$define sys/types.h
15132                         $d_socket sys/socket.h 
15133                         $i_niin netinet/in.h 
15134                         $i_netdb netdb.h
15135                         $i_unistd unistd.h"
15136                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15137                         case "$netdb_net_type" in
15138                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15139                                 if ./protochk "$try" $hdrs; then
15140                                         echo "Your system accepts $xxx."
15141                                         netdb_net_type="$xxx"
15142                                 fi
15143                                 ;;
15144                         esac
15145                 done
15146                 : In case none of those worked, prompt the user.
15147                 case "$netdb_net_type" in
15148                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15149                         dflt='long'
15150                         . ./myread
15151                         netdb_net_type=$ans
15152                         ;;
15153                 esac
15154                 ;;
15155         *)      : no getnetbyaddr, so pick harmless default
15156                 netdb_net_type='long'
15157                 ;;
15158         esac
15159 fi
15160 : locate the preferred pager for this system
15161 case "$pager" in
15162 '')
15163         dflt=''
15164         case "$pg" in
15165         /*) dflt=$pg;;
15166         [a-zA-Z]:/*) dflt=$pg;;
15167         esac
15168         case "$more" in
15169         /*) dflt=$more;;
15170         [a-zA-Z]:/*) dflt=$more;;
15171         esac
15172         case "$less" in
15173         /*) dflt=$less;;
15174         [a-zA-Z]:/*) dflt=$less;;
15175         esac
15176         case "$dflt" in
15177         '') dflt=/usr/ucb/more;;
15178         esac
15179         ;;
15180 *) dflt="$pager";;
15181 esac
15182 echo " "
15183 fn=f/
15184 rp='What pager is used on your system?'
15185 . ./getfile
15186 pager="$ans"
15187
15188 : see what type pids are declared as in the kernel
15189 rp="What is the type of process ids on this system?"
15190 set pid_t pidtype int stdio.h sys/types.h
15191 eval $typedef_ask
15192
15193 : Find earliest binary compatible site_perl subdirectory perl can use.
15194 case "$bincompat5005" in
15195 "$define") xs_apiversion='5.005' ;;
15196 *) xs_apiversion=$version ;;   # The current site_perl version.
15197 esac
15198 : Find earliest pure perl site_perl subdirectory perl can use.
15199 : The versioned directories started at 5.005.
15200 pm_apiversion='5.005'
15201
15202 : see if ar generates random libraries by itself
15203 echo " "
15204 echo "Checking how to generate random libraries on your machine..." >&4
15205 echo 'int bar1() { return bar2(); }' > bar1.c
15206 echo 'int bar2() { return 2; }' > bar2.c
15207 $cat > foo.c <<'EOP'
15208 int main() { printf("%d\n", bar1()); exit(0); }
15209 EOP
15210 $cc $ccflags -c bar1.c >/dev/null 2>&1
15211 $cc $ccflags -c bar2.c >/dev/null 2>&1
15212 $cc $ccflags -c foo.c >/dev/null 2>&1
15213 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15214 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15215         $run ./foobar >/dev/null 2>&1; then
15216         echo "$ar appears to generate random libraries itself."
15217         orderlib=false
15218         ranlib=":"
15219 elif $ar ts bar$_a >/dev/null 2>&1 &&
15220         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15221         $run ./foobar >/dev/null 2>&1; then
15222                 echo "a table of contents needs to be added with '$ar ts'."
15223                 orderlib=false
15224                 ranlib="$ar ts"
15225 else
15226         case "$ranlib" in
15227         :) ranlib='';;
15228         '')
15229                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15230                 $test -f $ranlib || ranlib=''
15231                 ;;
15232         esac
15233         if $test -n "$ranlib"; then
15234                 echo "your system has '$ranlib'; we'll use that."
15235                 orderlib=false
15236         else
15237                 echo "your system doesn't seem to support random libraries"
15238                 echo "so we'll use lorder and tsort to order the libraries."
15239                 orderlib=true
15240                 ranlib=":"
15241         fi
15242 fi
15243 $rm -f foo* bar* 
15244
15245 : check for type of arguments to select. 
15246 case "$selecttype" in
15247 '') case "$d_select" in
15248         $define)
15249                 echo " "
15250                 $cat <<EOM
15251 Checking to see what type of arguments are accepted by select().
15252 EOM
15253                 hdrs="$define sys/types.h
15254                         $i_systime sys/time.h 
15255                         $i_sysselct sys/select.h
15256                         $d_socket sys/socket.h"
15257                 : The first arg can be int, unsigned, or size_t
15258                 : The last arg may or may not be 'const'
15259                 val=''
15260                 : void pointer has been seen but using that
15261                 : breaks the selectminbits test
15262                 for xxx in 'fd_set *' 'int *'; do
15263                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15264                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15265                                         case "$val" in
15266                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15267                                                 if ./protochk "$try" $hdrs; then
15268                                                         echo "Your system accepts $xxx."
15269                                                         val="$xxx"
15270                                                 fi
15271                                                 ;;
15272                                         esac
15273                                 done
15274                         done
15275                 done
15276                 case "$val" in
15277                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15278                         case "$d_fd_set" in
15279                                 $define) dflt="fd_set *" ;;
15280                                 *)              dflt="int *" ;;
15281                         esac
15282                         . ./myread
15283                         val=$ans
15284                         ;;
15285                 esac
15286                 selecttype="$val"
15287                 ;;
15288         *)      : no select, so pick a harmless default
15289                 selecttype='int *'
15290                 ;;
15291         esac
15292         ;;
15293 esac
15294
15295 : check for the select 'width'
15296 case "$selectminbits" in
15297 '') case "$d_select" in
15298         $define)
15299                 $cat <<EOM
15300
15301 Checking to see on how many bits at a time your select() operates...
15302 EOM
15303                 $cat >try.c <<EOCP
15304 #include <sys/types.h>
15305 #$i_time I_TIME
15306 #$i_systime I_SYS_TIME
15307 #$i_systimek I_SYS_TIME_KERNEL
15308 #ifdef I_TIME
15309 #   include <time.h>
15310 #endif
15311 #ifdef I_SYS_TIME
15312 #   ifdef I_SYS_TIME_KERNEL
15313 #       define KERNEL
15314 #   endif
15315 #   include <sys/time.h>
15316 #   ifdef I_SYS_TIME_KERNEL
15317 #       undef KERNEL
15318 #   endif
15319 #endif
15320 #$i_sysselct I_SYS_SELECT
15321 #ifdef I_SYS_SELECT
15322 #include <sys/select.h>
15323 #endif
15324 #$d_socket HAS_SOCKET
15325 #ifdef HAS_SOCKET
15326 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15327 #endif
15328 #include <stdio.h>
15329 $selecttype b;
15330 #define S sizeof(*(b))
15331 #define MINBITS 64
15332 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15333 #define NBITS  (NBYTES * 8)
15334 int main() {
15335     char s[NBYTES];
15336     struct timeval t;
15337     int i;
15338     FILE* fp;
15339     int fd;
15340
15341     fclose(stdin);
15342     fp = fopen("try.c", "r");
15343     if (fp == 0)
15344       exit(1);
15345     fd = fileno(fp);
15346     if (fd < 0)
15347       exit(2);
15348     b = ($selecttype)s;
15349     for (i = 0; i < NBITS; i++)
15350         FD_SET(i, b);
15351     t.tv_sec  = 0;
15352     t.tv_usec = 0;
15353     select(fd + 1, b, 0, 0, &t);
15354     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15355     printf("%d\n", i + 1);
15356     return 0;
15357 }
15358 EOCP
15359                 set try
15360                 if eval $compile_ok; then
15361                         selectminbits=`$run ./try`
15362                         case "$selectminbits" in
15363                         '')     cat >&4 <<EOM
15364 Cannot figure out on how many bits at a time your select() operates.
15365 I'll play safe and guess it is 32 bits.
15366 EOM
15367                                 selectminbits=32
15368                                 bits="32 bits"
15369                                 ;;
15370                         1)      bits="1 bit" ;;
15371                         *)      bits="$selectminbits bits" ;;
15372                         esac
15373                         echo "Your select() operates on $bits at a time." >&4
15374                 else
15375                         rp='What is the minimum number of bits your select() operates on?'
15376                         case "$byteorder" in
15377                         1234|12345678)  dflt=32 ;;
15378                         *)              dflt=1  ;;
15379                         esac
15380                         . ./myread
15381                         val=$ans
15382                         selectminbits="$val"
15383                 fi
15384                 $rm -f try.* try
15385                 ;;
15386         *)      : no select, so pick a harmless default
15387                 selectminbits='32'
15388                 ;;
15389         esac
15390         ;;
15391 esac
15392
15393 : Trace out the files included by signal.h, then look for SIGxxx names.
15394 : Remove SIGARRAYSIZE used by HPUX.
15395 : Remove SIGSTKSIZE used by Linux.
15396 : Remove SIGSTKSZ used by Posix.
15397 : Remove SIGTYP void lines used by OS2.
15398 : Some cpps, like os390, dont give the file name anywhere
15399 if [ "X$fieldn" = X ]; then
15400         : Just make some guesses.  We check them later.
15401         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15402 else
15403         xxx=`echo '#include <signal.h>' |
15404         $cppstdin $cppminus $cppflags 2>/dev/null |
15405         $grep '^[       ]*#.*include' | 
15406         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15407 fi
15408 : Check this list of files to be sure we have parsed the cpp output ok.
15409 : This will also avoid potentially non-existent files, such 
15410 : as ../foo/bar.h
15411 xxxfiles=''
15412 for xx in $xxx /dev/null ; do
15413         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15414 done
15415 : If we have found no files, at least try signal.h
15416 case "$xxxfiles" in
15417 '')     xxxfiles=`./findhdr signal.h` ;;
15418 esac
15419 xxx=`awk '
15420 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15421         print substr($2, 4, 20)
15422 }
15423 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15424         print substr($3, 4, 20)
15425 }' $xxxfiles`
15426 : Append some common names just in case the awk scan failed.
15427 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15428 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15429 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15430 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15431 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15432
15433 : generate a few handy files for later
15434 $cat > signal.c <<'EOCP'
15435 #include <sys/types.h>
15436 #include <signal.h>
15437 #include <stdio.h>
15438 int main() {
15439
15440 /* Strange style to avoid deeply-nested #if/#else/#endif */
15441 #ifndef NSIG
15442 #  ifdef _NSIG
15443 #    define NSIG (_NSIG)
15444 #  endif
15445 #endif
15446
15447 #ifndef NSIG
15448 #  ifdef SIGMAX
15449 #    define NSIG (SIGMAX+1)
15450 #  endif
15451 #endif
15452
15453 #ifndef NSIG
15454 #  ifdef SIG_MAX
15455 #    define NSIG (SIG_MAX+1)
15456 #  endif
15457 #endif
15458
15459 #ifndef NSIG
15460 #  ifdef MAXSIG
15461 #    define NSIG (MAXSIG+1)
15462 #  endif
15463 #endif
15464
15465 #ifndef NSIG
15466 #  ifdef MAX_SIG
15467 #    define NSIG (MAX_SIG+1)
15468 #  endif
15469 #endif
15470
15471 #ifndef NSIG
15472 #  ifdef SIGARRAYSIZE
15473 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15474 #  endif
15475 #endif
15476
15477 #ifndef NSIG
15478 #  ifdef _sys_nsig
15479 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15480 #  endif
15481 #endif
15482
15483 /* Default to some arbitrary number that's big enough to get most
15484    of the common signals.
15485 */
15486 #ifndef NSIG
15487 #    define NSIG 50
15488 #endif
15489
15490 printf("NSIG %d\n", NSIG);
15491
15492 #ifndef JUST_NSIG
15493
15494 EOCP
15495
15496 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15497 {
15498         printf "#ifdef SIG"; printf $1; printf "\n"
15499         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15500         printf $1; printf ");\n"
15501         printf "#endif\n"
15502 }
15503 END {
15504         printf "#endif /* JUST_NSIG */\n";
15505         printf "exit(0);\n}\n";
15506 }
15507 ' >>signal.c
15508 $cat >signal.awk <<'EOP'
15509 BEGIN { ndups = 0 }
15510 $1 ~ /^NSIG$/ { nsig = $2 }
15511 ($1 !~ /^NSIG$/) && (NF == 2) {
15512     if ($2 > maxsig) { maxsig = $2 }
15513     if (sig_name[$2]) {
15514         dup_name[ndups] = $1
15515         dup_num[ndups] = $2
15516         ndups++ 
15517     }
15518     else {
15519         sig_name[$2] = $1
15520         sig_num[$2] = $2
15521     }
15522 }
15523 END { 
15524     if (nsig == 0) {
15525         nsig = maxsig + 1
15526     }
15527     printf("NSIG %d\n", nsig);
15528     for (n = 1; n < nsig; n++) {
15529         if (sig_name[n]) {
15530             printf("%s %d\n", sig_name[n], sig_num[n])
15531         }
15532         else {
15533             printf("NUM%d %d\n", n, n) 
15534         }
15535     }
15536     for (n = 0; n < ndups; n++) {
15537         printf("%s %d\n", dup_name[n], dup_num[n])
15538     }
15539 }
15540 EOP
15541 $cat >signal_cmd <<EOS
15542 $startsh
15543 if $test -s signal.lst; then
15544     echo "Using your existing signal.lst file"
15545         exit 0
15546 fi
15547 xxx="$xxx"
15548 EOS
15549 $cat >>signal_cmd <<'EOS'
15550
15551 set signal
15552 if eval $compile_ok; then
15553         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15554 else
15555         echo "(I can't seem be able to compile the whole test program)" >&4
15556         echo "(I'll try it in little pieces.)" >&4
15557         set signal -DJUST_NSIG
15558         if eval $compile_ok; then
15559                 $run ./signal$_exe > signal.nsg
15560                 $cat signal.nsg
15561         else
15562                 echo "I can't seem to figure out how many signals you have." >&4
15563                 echo "Guessing 50." >&4
15564                 echo 'NSIG 50' > signal.nsg
15565         fi
15566         : Now look at all the signal names, one at a time.
15567         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15568                 $cat > signal.c <<EOCP
15569 #include <sys/types.h>
15570 #include <signal.h>
15571 #include <stdio.h>
15572 int main() {
15573 printf("$xx %d\n", SIG${xx});
15574 return 0;
15575 }
15576 EOCP
15577                 set signal
15578                 if eval $compile; then
15579                         echo "SIG${xx} found."
15580                         $run ./signal$_exe  >> signal.ls1
15581                 else
15582                         echo "SIG${xx} NOT found."
15583                 fi
15584         done
15585         if $test -s signal.ls1; then
15586                 $cat signal.nsg signal.ls1 |
15587                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15588         fi
15589
15590 fi
15591 if $test -s signal.lst; then
15592         :
15593 else
15594         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15595         echo 'kill -l' >signal
15596         set X `csh -f <signal`
15597         $rm -f signal
15598         shift
15599         case $# in
15600         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15601         esac
15602         echo $@ | $tr ' ' $trnl | \
15603             $awk '{ printf "%s %d\n", $1, ++s; }
15604                   END { printf "NSIG %d\n", ++s }' >signal.lst
15605 fi
15606 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15607 EOS
15608 chmod a+x signal_cmd
15609 $eunicefix signal_cmd
15610
15611 : generate list of signal names
15612 echo " "
15613 case "$sig_name_init" in
15614 '') doinit=yes ;;
15615 *)  case "$sig_num_init" in
15616     ''|*,*) doinit=yes ;;
15617     esac ;;
15618 esac
15619 case "$doinit" in
15620 yes)
15621         echo "Generating a list of signal names and numbers..." >&4
15622         . ./signal_cmd
15623         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15624         sig_name=`$awk 'BEGIN { printf "ZERO " }
15625                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15626         sig_num=`$awk  'BEGIN { printf "0 " }
15627                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15628         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15629                              !/^NSIG/   { printf "\"%s\", ", $1 }
15630                              END        { printf "0\n" }' signal.lst`
15631         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15632                              !/^NSIG/   { printf "%d, ", $2}
15633                              END        { printf "0\n"}' signal.lst`
15634         ;;
15635 esac
15636 echo "The following $sig_count signals are available:"
15637 echo " "
15638 echo $sig_name | $awk \
15639 'BEGIN { linelen = 0 }
15640 {
15641         for (i = 1; i <= NF; i++) {
15642                 name = "SIG" $i " "
15643                 linelen = linelen + length(name)
15644                 if (linelen > 70) {
15645                         printf "\n"
15646                         linelen = length(name)
15647                 }
15648                 printf "%s", name
15649         }
15650         printf "\n"
15651 }'
15652 sig_size=`echo $sig_name | awk '{print NF}'`
15653 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15654
15655 echo " "
15656 case "$sizetype" in
15657 *_t) zzz="$sizetype"    ;;
15658 *)   zzz="filesize"     ;;
15659 esac
15660 echo "Checking the size of $zzz..." >&4 
15661 cat > try.c <<EOCP
15662 #include <sys/types.h>
15663 #include <stdio.h>
15664 int main() {
15665     printf("%d\n", (int)sizeof($sizetype));
15666     exit(0);
15667 }
15668 EOCP
15669 set try
15670 if eval $compile_ok; then
15671         yyy=`$run ./try`
15672         case "$yyy" in
15673         '')     sizesize=4
15674                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15675                 ;;
15676         *)      sizesize=$yyy
15677                 echo "Your $zzz size is $sizesize bytes."
15678                 ;;
15679         esac
15680 else
15681         sizesize=4
15682         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15683 fi
15684
15685
15686 : check for socklen_t
15687 echo " "
15688 echo "Checking to see if you have socklen_t..." >&4
15689 $cat >try.c <<EOCP
15690 #include <sys/types.h>
15691 #$d_socket HAS_SOCKET
15692 #ifdef HAS_SOCKET
15693 #include <sys/socket.h>
15694 #endif
15695 int main() { socklen_t x = 16; }
15696 EOCP
15697 set try
15698 if eval $compile; then
15699         val="$define"
15700         echo "You have socklen_t."
15701 else
15702         val="$undef"
15703         echo "You do not have socklen_t."
15704         case "$sizetype" in
15705         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15706         esac
15707 fi
15708 $rm -f try try.*
15709 set d_socklen_t
15710 eval $setvar
15711
15712 : see if this is a socks.h system
15713 set socks.h i_socks
15714 eval $inhdr
15715
15716 : check for type of the size argument to socket calls
15717 case "$d_socket" in
15718 "$define")
15719         $cat <<EOM
15720
15721 Checking to see what type is the last argument of accept().
15722 EOM
15723         yyy=''
15724         case "$d_socklen_t" in
15725         "$define") yyy="$yyy socklen_t"
15726         esac
15727         yyy="$yyy $sizetype int long unsigned"
15728         for xxx in $yyy; do
15729                 case "$socksizetype" in
15730                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15731                         case "$usesocks" in
15732                         "$define")
15733                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15734                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15735                                         socksizetype="$xxx"
15736                                 fi
15737                                 ;;
15738                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15739                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15740                                         socksizetype="$xxx"
15741                                 fi
15742                                 ;;
15743                         esac
15744                         ;;
15745                 esac
15746         done
15747 : In case none of those worked, prompt the user.
15748         case "$socksizetype" in
15749         '')     rp='What is the type for socket address structure sizes?'
15750                 dflt='int'
15751                 . ./myread
15752                 socksizetype=$ans
15753                 ;;
15754         esac
15755         ;;
15756 *)      : no sockets, so pick relatively harmless default
15757         socksizetype='int'
15758         ;;
15759 esac
15760
15761 : see what type is used for signed size_t
15762 set ssize_t ssizetype int stdio.h sys/types.h
15763 eval $typedef
15764 dflt="$ssizetype"
15765 $cat > try.c <<EOM
15766 #include <stdio.h>
15767 #include <sys/types.h>
15768 #define Size_t $sizetype
15769 #define SSize_t $dflt
15770 int main()
15771 {
15772         if (sizeof(Size_t) == sizeof(SSize_t))
15773                 printf("$dflt\n");
15774         else if (sizeof(Size_t) == sizeof(int))
15775                 printf("int\n");
15776         else 
15777                 printf("long\n");
15778         exit(0);
15779 }
15780 EOM
15781 echo " "
15782 set try
15783 if eval $compile_ok && $run ./try > /dev/null; then
15784         ssizetype=`$run ./try`
15785         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15786 else
15787         $cat >&4 <<EOM
15788 Help! I can't compile and run the ssize_t test program: please enlighten me!
15789 (This is probably a misconfiguration in your system or libraries, and
15790 you really ought to fix it.  Still, I'll try anyway.)
15791
15792 I need a type that is the same size as $sizetype, but is guaranteed to
15793 be signed.  Common values are ssize_t, int and long.
15794
15795 EOM
15796         rp="What signed type is the same size as $sizetype?"
15797         . ./myread
15798         ssizetype="$ans"
15799 fi
15800 $rm -f try try.*
15801
15802 : see what type of char stdio uses.
15803 echo " "
15804 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15805 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15806         echo "Your stdio uses unsigned chars." >&4
15807         stdchar="unsigned char"
15808 else
15809         echo "Your stdio uses signed chars." >&4
15810         stdchar="char"
15811 fi
15812 $rm -f stdioh
15813
15814
15815
15816 : see if time exists
15817 echo " "
15818 if test "X$d_time" = X -o X"$timetype" = X; then
15819     if set time val -f d_time; eval $csym; $val; then
15820                 echo 'time() found.' >&4
15821                 val="$define"
15822                 rp="What is the type returned by time() on this system?"
15823                 set time_t timetype long stdio.h sys/types.h
15824                 eval $typedef_ask
15825     else
15826                 echo 'time() not found, hope that will do.' >&4
15827                 val="$undef"
15828                 timetype='int';
15829     fi
15830     set d_time
15831     eval $setvar
15832 fi
15833
15834 : see what type uids are declared as in the kernel
15835 echo " "
15836 echo "Looking for the type for user ids returned by getuid()."
15837 set uid_t uidtype xxx stdio.h sys/types.h
15838 eval $typedef
15839 case "$uidtype" in
15840 xxx)
15841         xxx=`./findhdr sys/user.h`
15842         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15843         case $1 in
15844         unsigned) dflt="$1 $2" ;;
15845         *) dflt="$1" ;;
15846         esac
15847         ;;
15848 *) dflt="$uidtype";;
15849 esac
15850 case "$uidtype" in
15851 uid_t)  echo "uid_t found." ;;
15852 *)      rp="What is the type for user ids returned by getuid()?"
15853         . ./myread
15854         uidtype="$ans"
15855         ;;
15856 esac
15857
15858 echo " "
15859 case "$uidtype" in
15860 *_t) zzz="$uidtype"     ;;
15861 *)   zzz="uid"          ;;
15862 esac
15863 echo "Checking the size of $zzz..." >&4 
15864 cat > try.c <<EOCP
15865 #include <sys/types.h>
15866 #include <stdio.h>
15867 int main() {
15868     printf("%d\n", (int)sizeof($uidtype));
15869     exit(0);
15870 }
15871 EOCP
15872 set try
15873 if eval $compile_ok; then
15874         yyy=`$run ./try`
15875         case "$yyy" in
15876         '')     uidsize=4
15877                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15878                 ;;
15879         *)      uidsize=$yyy
15880                 echo "Your $zzz is $uidsize bytes long."
15881                 ;;
15882         esac
15883 else
15884         uidsize=4
15885         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15886 fi
15887
15888 echo " "
15889 case "$uidtype" in
15890 *_t) zzz="$uidtype"     ;;
15891 *)   zzz="uid"          ;;
15892 esac
15893 echo "Checking the sign of $zzz..." >&4
15894 cat > try.c <<EOCP
15895 #include <sys/types.h>
15896 #include <stdio.h>
15897 int main() {
15898         $uidtype foo = -1;
15899         if (foo < 0)
15900                 printf("-1\n");
15901         else
15902                 printf("1\n");
15903 }
15904 EOCP
15905 set try
15906 if eval $compile; then
15907         yyy=`$run ./try`
15908         case "$yyy" in
15909         '')     uidsign=1
15910                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15911                 ;;
15912         *)      uidsign=$yyy
15913                 case "$uidsign" in
15914                  1) echo "Your $zzz is unsigned." ;;
15915                 -1) echo "Your $zzz is signed."   ;;
15916                 esac
15917                 ;;
15918         esac
15919 else
15920         uidsign=1
15921         echo "(I can't compile the test program--guessing unsigned.)" >&4
15922 fi
15923
15924
15925
15926 echo " "
15927 $echo "Checking the format string to be used for uids..." >&4
15928
15929 case "$uidsign" in
15930 -1)     if $test X"$uidsize" = X"$ivsize"; then
15931                 uidformat="$ivdformat"
15932         else
15933                 if $test X"$uidsize" = X"$longsize"; then
15934                         uidformat='"ld"'
15935                 else
15936                         if $test X"$uidsize" = X"$intsize"; then
15937                                 uidformat='"d"'
15938                         else
15939                                 if $test X"$uidsize" = X"$shortsize"; then
15940                                         uidformat='"hd"'
15941                                 fi
15942                         fi
15943                 fi
15944         fi
15945         ;;
15946 *)      if $test X"$uidsize" = X"$uvsize"; then
15947                 uidformat="$uvuformat"
15948         else
15949                 if $test X"$uidsize" = X"$longsize"; then
15950                         uidformat='"lu"'
15951                 else
15952                         if $test X"$uidsize" = X"$intsize"; then
15953                                 uidformat='"u"'
15954                         else
15955                                 if $test X"$uidsize" = X"$shortsize"; then
15956                                         uidformat='"hu"'
15957                                 fi
15958                         fi
15959                 fi
15960         fi
15961         ;;
15962 esac
15963
15964 : determine compiler compiler
15965 case "$yacc" in
15966 '')
15967         dflt=yacc;;
15968 *)
15969         dflt="$yacc";;
15970 esac
15971 echo " "
15972 comp='yacc'
15973 if $test -f "$byacc$_exe"; then
15974         dflt="$byacc"
15975         comp="byacc or $comp"
15976 fi
15977 if $test -f "$bison$_exe"; then
15978         comp="$comp or bison -y"
15979 fi
15980 rp="Which compiler compiler ($comp) shall I use?"
15981 . ./myread
15982 yacc="$ans"
15983 case "$yacc" in
15984 *bis*)
15985         case "$yacc" in
15986         *-y*) ;;
15987         *)
15988                 yacc="$yacc -y"
15989                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15990                 ;;
15991         esac
15992         ;;
15993 esac
15994
15995 : see if this is a fp.h system
15996 set fp.h i_fp
15997 eval $inhdr
15998
15999 : see if this is a fp_class.h system
16000 set fp_class.h i_fp_class
16001 eval $inhdr
16002
16003 : see if this is a ieeefp.h system
16004 case "$i_ieeefp" in
16005 '' ) set ieeefp.h i_ieeefp
16006      eval $inhdr
16007      ;;
16008 esac
16009
16010 : see if this is a libutil.h system
16011 set libutil.h i_libutil
16012 eval $inhdr
16013
16014 : see if locale.h is available
16015 set locale.h i_locale
16016 eval $inhdr
16017
16018 : see if mach cthreads are available
16019 if test "X$usethreads" = "X$define"; then
16020         set mach/cthreads.h i_machcthr
16021         eval $inhdr
16022 else
16023         i_machcthr="$undef"
16024 fi
16025
16026
16027
16028 : see if this is a math.h system
16029 set math.h i_math
16030 eval $inhdr
16031
16032 : see if this is a mntent.h system
16033 set mntent.h i_mntent
16034 eval $inhdr
16035
16036 : see if ndbm.h is available
16037 set ndbm.h t_ndbm
16038 eval $inhdr
16039 case "$t_ndbm" in
16040 $define)
16041         : see if dbm_open exists
16042         set dbm_open d_dbm_open
16043         eval $inlibc
16044         case "$d_dbm_open" in
16045         $undef)
16046                 t_ndbm="$undef"
16047                 echo "We won't be including <ndbm.h>"
16048                 ;;
16049         esac
16050         ;;
16051 esac
16052 val="$t_ndbm"
16053 set i_ndbm
16054 eval $setvar
16055
16056 : see if net/errno.h is available
16057 val=''
16058 set net/errno.h val
16059 eval $inhdr
16060
16061 : Unfortunately, it causes problems on some systems.  Arrgh.
16062 case "$val" in
16063 $define)
16064         cat > try.c <<'EOM'
16065 #include <stdio.h>
16066 #include <errno.h>
16067 #include <net/errno.h>
16068 int func()
16069 {
16070         return ENOTSOCK;
16071 }
16072 EOM
16073         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16074                 echo "We'll be including <net/errno.h>." >&4
16075         else
16076                 echo "We won't be including <net/errno.h>." >&4
16077                 val="$undef"
16078         fi
16079         $rm -f try.* try
16080         ;;
16081 esac
16082 set i_neterrno
16083 eval $setvar
16084
16085 : see if netinet/tcp.h is available
16086 set netinet/tcp.h i_netinettcp
16087 eval $inhdr
16088
16089 : see if this is a poll.h system
16090 set poll.h i_poll
16091 eval $inhdr
16092
16093 : see if this is a prot.h system
16094 set prot.h i_prot
16095 eval $inhdr
16096
16097 echo " "
16098 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16099 $cat <<'EOSH' > Cppsym.know
16100 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16101 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16102 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16103 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16104 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16105 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16106 bull c cadmus clipper CMU COFF COMPILER_VERSION
16107 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16108 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16109 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16110 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16111 GLIBC GLIBC_MINOR
16112 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16113 H3050R H3050RX hbullx20 hcx host_mips
16114 hp200 hp300 hp700 HP700 hp800 hp9000
16115 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16116 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16117 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16118 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16119 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16120 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16121 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16122 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16123 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16124 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16125 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16126 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16127 MATH_HAS_NO_SIDE_EFFECTS
16128 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16129 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16130 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16131 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16132 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16133 NetBSD news1500 news1700 news1800 news1900 news3700
16134 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16135 ns32016 ns32332 ns32k nsc32000
16136 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16137 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16138 pc532 pdp11 PGC PIC plexus PORTAR posix
16139 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16140 POSIX_C_SOURCE POSIX_SOURCE POWER
16141 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16142 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16143 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16144 sony sony_news sonyrisc sparc sparclite spectrum
16145 stardent stdc STDC_EXT stratos sun sun3 sun386
16146 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16147 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16148 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16149 sysV68 sysV88 Tek4132 Tek4300 titan
16150 TM3200 TM5400 TM5600
16151 tower tower32 tower32_200 tower32_600 tower32_700
16152 tower32_800 tower32_850 tss
16153 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16154 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16155 unix UNIX95 UNIX99 unixpc unos
16156 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16157 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16158 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16159 USGr4 USGr4_2
16160 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16161 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16162 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16163 z8000
16164 EOSH
16165 # Maybe put other stuff here too.
16166 cat <<EOSH >>Cppsym.know
16167 $osname
16168 EOSH
16169 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16170 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16171 $cat Cppsym.know > Cppsym.c
16172 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16173 $rm -f Cppsym.a Cppsym.b Cppsym.c
16174 cat <<EOSH > Cppsym
16175 $startsh
16176 if $test \$# -gt 0; then
16177     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16178     if $test -s Cppsym.got; then
16179         $rm -f Cppsym.got
16180         exit 0
16181     fi
16182     $rm -f Cppsym.got
16183     exit 1
16184 else
16185     $tr " " "$trnl" | ./Cppsym.try
16186     exit 0
16187 fi
16188 EOSH
16189 chmod +x Cppsym
16190 $eunicefix Cppsym
16191 cat <<EOSH > Cppsym.try
16192 $startsh
16193 cat <<'EOCP' > try.c
16194 #include <stdio.h>
16195 int main() {
16196 EOCP
16197 $awk \\
16198 EOSH
16199 cat <<'EOSH' >> Cppsym.try
16200 'length($1) > 0 {
16201     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
16202     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
16203     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
16204     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
16205 }'       >> try.c
16206 echo 'return 0;}' >> try.c
16207 EOSH
16208 cat <<EOSH >> Cppsym.try
16209 ccflags="$ccflags"
16210 case "$osname-$gccversion" in
16211 irix-) ccflags="\$ccflags -woff 1178" ;;
16212 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16213 esac
16214 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16215 EOSH
16216 chmod +x Cppsym.try
16217 $eunicefix Cppsym.try
16218 ./Cppsym < Cppsym.know > Cppsym.true
16219 : now check the C compiler for additional symbols
16220 postprocess_cc_v=''
16221 case "$osname" in
16222 aix) postprocess_cc_v="|$tr , ' '" ;;
16223 esac
16224 $cat >ccsym <<EOS
16225 $startsh
16226 $cat >tmp.c <<EOF
16227 extern int foo;
16228 EOF
16229 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16230 do
16231         case "\$i" in
16232         -D*) echo "\$i" | $sed 's/^-D//';;
16233         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16234         esac
16235 done
16236 $rm -f try.c
16237 EOS
16238 postprocess_cc_v=''
16239 chmod +x ccsym
16240 $eunicefix ccsym
16241 ./ccsym > ccsym1.raw
16242 if $test -s ccsym1.raw; then
16243        $sort ccsym1.raw | $uniq >ccsym.raw
16244 else
16245        mv ccsym1.raw ccsym.raw
16246 fi
16247
16248 $awk '/\=/ { print $0; next }
16249         { print $0"=1" }' ccsym.raw >ccsym.list
16250 $awk '/\=/ { print $0; next }
16251         { print $0"=1" }' Cppsym.true >ccsym.true
16252 $comm -13 ccsym.true ccsym.list >ccsym.own
16253 $comm -12 ccsym.true ccsym.list >ccsym.com
16254 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16255 also=''
16256 if $test -z ccsym.raw; then
16257         echo "Your C compiler doesn't seem to define any symbols!" >&4
16258         echo " "
16259         echo "However, your C preprocessor defines the following symbols:"
16260         $cat Cppsym.true
16261         ccsymbols=''
16262         cppsymbols=`$cat Cppsym.true`
16263         cppsymbols=`echo $cppsymbols`
16264         cppccsymbols="$cppsymbols"
16265 else
16266         if $test -s ccsym.com; then
16267                 echo "Your C compiler and pre-processor define these symbols:"
16268                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16269                 also='also '
16270                 symbols='ones'
16271                 cppccsymbols=`$cat ccsym.com`
16272                 cppccsymbols=`echo $cppccsymbols`
16273                 $test "$silent" || sleep 1
16274         fi
16275         if $test -s ccsym.cpp; then
16276                 $test "$also" && echo " "
16277                 echo "Your C pre-processor ${also}defines the following symbols:"
16278                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16279                 also='further '
16280                 cppsymbols=`$cat ccsym.cpp`
16281                 cppsymbols=`echo $cppsymbols`
16282                 $test "$silent" || sleep 1
16283         fi
16284         if $test -s ccsym.own; then
16285                 $test "$also" && echo " "
16286                 echo "Your C compiler ${also}defines the following cpp symbols:"
16287                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16288                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16289                 ccsymbols=`$cat ccsym.own`
16290                 ccsymbols=`echo $ccsymbols`
16291                 $test "$silent" || sleep 1
16292         fi
16293 fi
16294
16295 : see if this is a termio system
16296 val="$undef"
16297 val2="$undef"
16298 val3="$undef"
16299 if $test `./findhdr termios.h`; then
16300         set tcsetattr i_termios
16301         eval $inlibc
16302         val3="$i_termios"
16303 fi
16304 echo " "
16305 case "$val3" in
16306 "$define") echo "You have POSIX termios.h... good!" >&4;;
16307 *) if ./Cppsym pyr; then
16308                 case "`/bin/universe`" in
16309                 ucb) if $test `./findhdr sgtty.h`; then
16310                                 val2="$define"
16311                                 echo "<sgtty.h> found." >&4
16312                         else
16313                                 echo "System is pyramid with BSD universe."
16314                                 echo "<sgtty.h> not found--you could have problems." >&4
16315                         fi;;
16316                 *) if $test `./findhdr termio.h`; then
16317                                 val="$define"
16318                                 echo "<termio.h> found." >&4
16319                         else
16320                                 echo "System is pyramid with USG universe."
16321                                 echo "<termio.h> not found--you could have problems." >&4
16322                         fi;;
16323                 esac
16324         elif ./usg; then
16325                 if $test `./findhdr termio.h`; then
16326                         echo "<termio.h> found." >&4
16327                         val="$define"
16328                 elif $test `./findhdr sgtty.h`; then
16329                         echo "<sgtty.h> found." >&4
16330                         val2="$define"
16331                 else
16332 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16333                 fi
16334         else
16335                 if $test `./findhdr sgtty.h`; then
16336                         echo "<sgtty.h> found." >&4
16337                         val2="$define"
16338                 elif $test `./findhdr termio.h`; then
16339                         echo "<termio.h> found." >&4
16340                         val="$define"
16341                 else
16342 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16343                 fi
16344         fi;;
16345 esac
16346 set i_termio; eval $setvar
16347 val=$val2; set i_sgtty; eval $setvar
16348 val=$val3; set i_termios; eval $setvar
16349
16350 : see if this is a shadow.h system
16351 set shadow.h i_shadow
16352 eval $inhdr
16353
16354 : see if stddef is available
16355 set stddef.h i_stddef
16356 eval $inhdr
16357
16358 : see if this is a sunmath.h system
16359 set sunmath.h i_sunmath
16360 eval $inhdr
16361
16362 : see if sys/access.h is available
16363 set sys/access.h i_sysaccess
16364 eval $inhdr
16365
16366 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16367 set sys/filio.h i_sysfilio
16368 eval $inhdr
16369 echo " "
16370 if $test `./findhdr sys/ioctl.h`; then
16371         val="$define"
16372         echo '<sys/ioctl.h> found.' >&4
16373 else
16374         val="$undef"
16375         if $test $i_sysfilio = "$define"; then
16376             echo '<sys/ioctl.h> NOT found.' >&4
16377         else
16378                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16379                 $test $i_termio = "$define" && xxx="termio.h"
16380                 $test $i_termios = "$define" && xxx="termios.h"
16381 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16382         fi
16383 fi
16384 set i_sysioctl
16385 eval $setvar
16386
16387 : see if socket ioctl defs are in sys/sockio.h
16388 echo " "
16389 xxx=`./findhdr sys/sockio.h`
16390 if $test "$xxx"; then
16391         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16392                 val="$define"
16393                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16394         else
16395                 val="$undef"
16396                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16397         fi
16398 else
16399         val="$undef"
16400         $cat <<EOM
16401 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16402 EOM
16403 fi
16404 set i_syssockio
16405 eval $setvar
16406
16407
16408 : see if this is a syslog.h system
16409 set syslog.h i_syslog
16410 eval $inhdr
16411
16412
16413 : see if this is a sys/mode.h system
16414 set sys/mode.h i_sysmode
16415 eval $inhdr
16416
16417 : see if sys/resource.h has to be included
16418 set sys/resource.h i_sysresrc
16419 eval $inhdr
16420
16421 : see if sys/security.h is available
16422 set sys/security.h i_syssecrt
16423 eval $inhdr
16424
16425 : see if this is a sys/statvfs.h system
16426 set sys/statvfs.h i_sysstatvfs
16427 eval $inhdr
16428
16429 : see if this is a sys/un.h system
16430 set sys/un.h i_sysun
16431 eval $inhdr
16432
16433
16434 : see if this is a sys/utsname.h system
16435 set sys/utsname.h i_sysutsname
16436 eval $inhdr
16437
16438 : see if this is a syswait system
16439 set sys/wait.h i_syswait
16440 eval $inhdr
16441
16442 : see if this is a ustat.h system
16443 set ustat.h i_ustat
16444 eval $inhdr
16445
16446 : see if this is an utime system
16447 set utime.h i_utime
16448 eval $inhdr
16449
16450 : see if this is a values.h system
16451 set values.h i_values
16452 eval $inhdr
16453
16454 : see if this is a vfork system
16455 case "$d_vfork" in
16456 "$define")
16457         set vfork.h i_vfork
16458         eval $inhdr
16459         ;;
16460 *)
16461         i_vfork="$undef"
16462         ;;
16463 esac
16464
16465 : see if gdbm.h is available
16466 set gdbm.h t_gdbm
16467 eval $inhdr
16468 case "$t_gdbm" in
16469 $define)
16470         : see if gdbm_open exists
16471         set gdbm_open d_gdbm_open
16472         eval $inlibc
16473         case "$d_gdbm_open" in
16474         $undef)
16475                 t_gdbm="$undef"
16476                 echo "We won't be including <gdbm.h>"
16477                 ;;
16478         esac
16479         ;;
16480 esac
16481 val="$t_gdbm"
16482 set i_gdbm
16483 eval $setvar
16484
16485 echo " "
16486 echo "Looking for extensions..." >&4
16487 : If we are using the old config.sh, known_extensions may contain
16488 : old or inaccurate or duplicate values.
16489 known_extensions=''
16490 nonxs_extensions=''
16491 : We do not use find because it might not be available.
16492 : We do not just use MANIFEST because the user may have dropped
16493 : some additional extensions into the source tree and expect them
16494 : to be built.
16495
16496 : Function to recursively find available extensions, ignoring DynaLoader
16497 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16498 find_extensions='
16499     for xxx in *; do
16500        case "$xxx" in
16501            DynaLoader|dynaload) ;;
16502            *)
16503            if $test -f $xxx/$xxx.xs; then
16504                known_extensions="$known_extensions $1$xxx";
16505            elif $test -f $xxx/Makefile.PL; then
16506                nonxs_extensions="$nonxs_extensions $1$xxx";
16507            else
16508                if $test -d $xxx -a $# -lt 10; then
16509                    set $1$xxx/ $*;
16510                    cd $xxx;
16511                    eval $find_extensions;
16512                    cd ..;
16513                    shift;
16514                fi;
16515            fi
16516            ;;
16517        esac;
16518     done'
16519 tdir=`pwd`
16520 cd $rsrc/ext
16521 set X
16522 shift
16523 eval $find_extensions
16524 # Special case:  Add in threads/shared since it is not picked up by the
16525 # recursive find above (and adding in general recursive finding breaks
16526 # SDBM_File/sdbm).  A.D.  10/25/2001.
16527 known_extensions="$known_extensions threads/shared"
16528 set X $nonxs_extensions
16529 shift
16530 nonxs_extensions="$*"
16531 set X $known_extensions
16532 shift
16533 known_extensions="$*"
16534 cd $tdir
16535
16536 : Now see which are supported on this system.
16537 avail_ext=''
16538 for xxx in $known_extensions ; do
16539         case "$xxx" in
16540         DB_File|db_file)
16541                 case "$i_db" in
16542                 $define) avail_ext="$avail_ext $xxx" ;;
16543                 esac
16544                 ;;
16545         GDBM_File|gdbm_fil)
16546                 case "$i_gdbm" in 
16547                 $define) avail_ext="$avail_ext $xxx" ;;
16548                 esac
16549                 ;;
16550         I18N/Langinfo|i18n_lan)
16551                 case "$i_langinfo$d_nl_langinfo" in 
16552                 $define$define) avail_ext="$avail_ext $xxx" ;;
16553                 esac
16554                 ;;
16555         NDBM_File|ndbm_fil)
16556                 case "$i_ndbm" in
16557                 $define)
16558                     case "$osname-$use64bitint" in
16559                     cygwin-*|hpux-define)
16560                         case "$libs" in
16561                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16562                         esac
16563                         ;;
16564                     *) avail_ext="$avail_ext $xxx" ;;
16565                     esac
16566                     ;;
16567                 esac
16568                 ;;
16569         ODBM_File|odbm_fil) 
16570                 case "${i_dbm}${i_rpcsvcdbm}" in
16571                 *"${define}"*)
16572                     case "$osname-$use64bitint" in
16573                     cygwin-*|hpux-define)
16574                         case "$libs" in
16575                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16576                         esac
16577                         ;;
16578                     *) avail_ext="$avail_ext $xxx" ;;
16579                     esac
16580                     ;;
16581                 esac
16582                 ;;
16583         POSIX|posix)
16584                 case "$useposix" in
16585                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16586                 esac
16587                 ;;
16588         Opcode|opcode)
16589                 case "$useopcode" in
16590                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16591                 esac
16592                 ;;
16593         Socket|socket)
16594                 case "$d_socket" in 
16595                 true|$define|y)
16596                     case "$osname" in
16597                     beos) ;; # not unless BONE
16598                     *) avail_ext="$avail_ext $xxx" ;;
16599                     esac
16600                     ;;
16601                 esac
16602                 ;;
16603         Sys/Syslog|sys/syslog)
16604                 : XXX syslog requires socket
16605                 case "$d_socket" in 
16606                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16607                 esac
16608                 ;;
16609         Thread|thread)
16610                 case "$usethreads" in
16611                 true|$define|y)
16612                         case "$useithreads" in
16613                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16614                         esac
16615                 esac
16616                 ;;
16617         threads|threads/shared)
16618                 case "$usethreads" in
16619                 true|$define|y)
16620                         case "$useithreads" in
16621                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16622                         esac
16623                 esac
16624                 ;;
16625         IPC/SysV|ipc/sysv)
16626                 : XXX Do we need a useipcsysv variable here
16627                 case "${d_msg}${d_sem}${d_shm}" in 
16628                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16629                 esac
16630                 ;;
16631         *)      avail_ext="$avail_ext $xxx"
16632                 ;;
16633         esac
16634 done
16635
16636 set X $avail_ext
16637 shift
16638 avail_ext="$*"
16639
16640 : Now see which nonxs extensions are supported on this system.
16641 : For now assume all are.
16642 nonxs_ext=''
16643 for xxx in $nonxs_extensions ; do
16644         case "$xxx" in
16645         *)      nonxs_ext="$nonxs_ext $xxx"
16646                 ;;
16647         esac
16648 done
16649
16650 set X $nonxs_ext
16651 shift
16652 nonxs_ext="$*"
16653
16654 case $usedl in
16655 $define)
16656         $cat <<EOM
16657 A number of extensions are supplied with $package.  You may choose to
16658 compile these extensions for dynamic loading (the default), compile
16659 them into the $package executable (static loading), or not include
16660 them at all.  Answer "none" to include no extensions.
16661 Note that DynaLoader is always built and need not be mentioned here.
16662
16663 EOM
16664         case "$dynamic_ext" in
16665         '') dflt="$avail_ext" ;;
16666         *)      dflt="$dynamic_ext"
16667                 # Perhaps we are reusing an old out-of-date config.sh.
16668                 case "$hint" in
16669                 previous)
16670                         if test X"$dynamic_ext" != X"$avail_ext"; then
16671                                 $cat <<EOM
16672 NOTICE:  Your previous config.sh list may be incorrect. 
16673 The extensions now available to you are 
16674         ${avail_ext}
16675 but the default list from your previous config.sh is
16676         ${dynamic_ext} 
16677
16678 EOM
16679                         fi
16680                         ;;
16681                 esac
16682                 ;;
16683         esac
16684         case "$dflt" in
16685         '')     dflt=none;;
16686         esac
16687         rp="What extensions do you wish to load dynamically?"
16688         . ./myread
16689         case "$ans" in
16690         none) dynamic_ext=' ' ;;
16691         *) dynamic_ext="$ans" ;;
16692         esac
16693
16694         case "$static_ext" in
16695         '')
16696                 : Exclude those already listed in dynamic linking
16697                 dflt=''
16698                 for xxx in $avail_ext; do
16699                         case " $dynamic_ext " in
16700                         *" $xxx "*) ;;
16701                         *) dflt="$dflt $xxx" ;;
16702                         esac
16703                 done
16704                 set X $dflt
16705                 shift
16706                 dflt="$*"
16707                 ;;
16708         *)  dflt="$static_ext" 
16709                 ;;
16710         esac
16711
16712         case "$dflt" in
16713         '')     dflt=none;;
16714         esac
16715         rp="What extensions do you wish to load statically?"
16716         . ./myread
16717         case "$ans" in
16718         none) static_ext=' ' ;;
16719         *) static_ext="$ans" ;;
16720         esac
16721         ;;
16722 *)
16723         $cat <<EOM
16724 A number of extensions are supplied with $package.  Answer "none" 
16725 to include no extensions. 
16726 Note that DynaLoader is always built and need not be mentioned here.
16727
16728 EOM
16729         case "$static_ext" in
16730         '') dflt="$avail_ext" ;;
16731         *)      dflt="$static_ext"
16732                 # Perhaps we are reusing an old out-of-date config.sh.
16733                 case "$hint" in
16734                 previous)
16735                         if test X"$static_ext" != X"$avail_ext"; then
16736                                 $cat <<EOM
16737 NOTICE:  Your previous config.sh list may be incorrect. 
16738 The extensions now available to you are 
16739         ${avail_ext}
16740 but the default list from your previous config.sh is
16741         ${static_ext} 
16742
16743 EOM
16744                         fi
16745                         ;;
16746                 esac
16747                 ;;
16748         esac
16749         : Exclude those that are not xs extensions
16750         case "$dflt" in
16751         '')     dflt=none;;
16752         esac
16753         rp="What extensions do you wish to include?"
16754         . ./myread
16755         case "$ans" in
16756         none) static_ext=' ' ;;
16757         *) static_ext="$ans" ;;
16758         esac
16759         ;;
16760 esac
16761
16762 set X $dynamic_ext $static_ext $nonxs_ext
16763 shift
16764 extensions="$*"
16765
16766 : Remove libraries needed only for extensions
16767 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16768 : The exception is SunOS 4.x, which needs them.
16769 case "${osname}X${osvers}" in
16770 sunos*X4*)
16771     perllibs="$libs"
16772     ;;
16773 *) case "$usedl" in
16774     $define|true|[yY]*)
16775             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16776             shift
16777             perllibs="$*"
16778             ;;
16779     *)  perllibs="$libs"
16780             ;;
16781     esac
16782     ;;
16783 esac
16784
16785 : Remove build directory name from cppstdin so it can be used from
16786 : either the present location or the final installed location.
16787 echo " "
16788 : Get out of the UU directory to get correct path name.
16789 cd ..
16790 case "$cppstdin" in
16791 `pwd`/cppstdin)
16792         echo "Stripping down cppstdin path name"
16793         cppstdin=cppstdin
16794         ;;
16795 esac
16796 cd UU
16797
16798 : end of configuration questions
16799 echo " "
16800 echo "End of configuration questions."
16801 echo " "
16802
16803 : back to where it started
16804 if test -d ../UU; then
16805         cd ..
16806 fi
16807
16808 : configuration may be patched via a 'config.arch' file
16809 if $test -f config.arch; then
16810         echo "I see a config.arch file, loading it."
16811         . ./config.arch
16812 fi
16813
16814 : configuration may be patched via a 'config.over' file
16815 if $test -f config.over; then
16816         echo " "
16817         dflt=y
16818         rp='I see a config.over file.  Do you wish to load it?'
16819         . UU/myread
16820         case "$ans" in
16821         n*) echo "OK, I'll ignore it.";;
16822         *)      . ./config.over
16823                 echo "Configuration override changes have been loaded."
16824                 ;;
16825         esac
16826 fi
16827
16828 : in case they want portability, strip down executable paths
16829 case "$d_portable" in
16830 "$define")
16831         echo " "
16832         echo "Stripping down executable paths..." >&4
16833         for file in $loclist $trylist; do
16834                 eval temp=\$$file
16835                 eval $file=`basename $temp`
16836         done
16837         ;;
16838 esac
16839
16840 : create config.sh file
16841 echo " "
16842 echo "Creating config.sh..." >&4
16843 $spitshell <<EOT >config.sh
16844 $startsh
16845 #
16846 # This file was produced by running the Configure script. It holds all the
16847 # definitions figured out by Configure. Should you modify one of these values,
16848 # do not forget to propagate your changes by running "Configure -der". You may
16849 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16850 #
16851
16852 # Package name      : $package
16853 # Source directory  : $src
16854 # Configuration time: $cf_time
16855 # Configured by     : $cf_by
16856 # Target system     : $myuname
16857
16858 Author='$Author'
16859 Date='$Date'
16860 Header='$Header'
16861 Id='$Id'
16862 Locker='$Locker'
16863 Log='$Log'
16864 Mcc='$Mcc'
16865 RCSfile='$RCSfile'
16866 Revision='$Revision'
16867 Source='$Source'
16868 State='$State'
16869 _a='$_a'
16870 _exe='$_exe'
16871 _o='$_o'
16872 afs='$afs'
16873 afsroot='$afsroot'
16874 alignbytes='$alignbytes'
16875 ansi2knr='$ansi2knr'
16876 aphostname='$aphostname'
16877 api_revision='$api_revision'
16878 api_subversion='$api_subversion'
16879 api_version='$api_version'
16880 api_versionstring='$api_versionstring'
16881 ar='$ar'
16882 archlib='$archlib'
16883 archlibexp='$archlibexp'
16884 archname64='$archname64'
16885 archname='$archname'
16886 archobjs='$archobjs'
16887 awk='$awk'
16888 baserev='$baserev'
16889 bash='$bash'
16890 bin='$bin'
16891 bincompat5005='$bincompat5005'
16892 binexp='$binexp'
16893 bison='$bison'
16894 byacc='$byacc'
16895 byteorder='$byteorder'
16896 c='$c'
16897 castflags='$castflags'
16898 cat='$cat'
16899 cc='$cc'
16900 cccdlflags='$cccdlflags'
16901 ccdlflags='$ccdlflags'
16902 ccflags='$ccflags'
16903 ccflags_uselargefiles='$ccflags_uselargefiles'
16904 ccname='$ccname'
16905 ccsymbols='$ccsymbols'
16906 ccversion='$ccversion'
16907 cf_by='$cf_by'
16908 cf_email='$cf_email'
16909 cf_time='$cf_time'
16910 charsize='$charsize'
16911 chgrp='$chgrp'
16912 chmod='$chmod'
16913 chown='$chown'
16914 clocktype='$clocktype'
16915 comm='$comm'
16916 compress='$compress'
16917 contains='$contains'
16918 cp='$cp'
16919 cpio='$cpio'
16920 cpp='$cpp'
16921 cpp_stuff='$cpp_stuff'
16922 cppccsymbols='$cppccsymbols'
16923 cppflags='$cppflags'
16924 cpplast='$cpplast'
16925 cppminus='$cppminus'
16926 cpprun='$cpprun'
16927 cppstdin='$cppstdin'
16928 cppsymbols='$cppsymbols'
16929 cryptlib='$cryptlib'
16930 csh='$csh'
16931 d_Gconvert='$d_Gconvert'
16932 d_PRIEUldbl='$d_PRIEUldbl'
16933 d_PRIFUldbl='$d_PRIFUldbl'
16934 d_PRIGUldbl='$d_PRIGUldbl'
16935 d_PRIXU64='$d_PRIXU64'
16936 d_PRId64='$d_PRId64'
16937 d_PRIeldbl='$d_PRIeldbl'
16938 d_PRIfldbl='$d_PRIfldbl'
16939 d_PRIgldbl='$d_PRIgldbl'
16940 d_PRIi64='$d_PRIi64'
16941 d_PRIo64='$d_PRIo64'
16942 d_PRIu64='$d_PRIu64'
16943 d_PRIx64='$d_PRIx64'
16944 d_SCNfldbl='$d_SCNfldbl'
16945 d__fwalk='$d__fwalk'
16946 d_access='$d_access'
16947 d_accessx='$d_accessx'
16948 d_alarm='$d_alarm'
16949 d_archlib='$d_archlib'
16950 d_atolf='$d_atolf'
16951 d_atoll='$d_atoll'
16952 d_attribut='$d_attribut'
16953 d_bcmp='$d_bcmp'
16954 d_bcopy='$d_bcopy'
16955 d_bincompat5005='$d_bincompat5005'
16956 d_bsd='$d_bsd'
16957 d_bsdgetpgrp='$d_bsdgetpgrp'
16958 d_bsdsetpgrp='$d_bsdsetpgrp'
16959 d_bzero='$d_bzero'
16960 d_casti32='$d_casti32'
16961 d_castneg='$d_castneg'
16962 d_charvspr='$d_charvspr'
16963 d_chown='$d_chown'
16964 d_chroot='$d_chroot'
16965 d_chsize='$d_chsize'
16966 d_class='$d_class'
16967 d_closedir='$d_closedir'
16968 d_cmsghdr_s='$d_cmsghdr_s'
16969 d_const='$d_const'
16970 d_crypt='$d_crypt'
16971 d_csh='$d_csh'
16972 d_cuserid='$d_cuserid'
16973 d_dbl_dig='$d_dbl_dig'
16974 d_dbminitproto='$d_dbminitproto'
16975 d_difftime='$d_difftime'
16976 d_dirfd='$d_dirfd'
16977 d_dirnamlen='$d_dirnamlen'
16978 d_dlerror='$d_dlerror'
16979 d_dlopen='$d_dlopen'
16980 d_dlsymun='$d_dlsymun'
16981 d_dosuid='$d_dosuid'
16982 d_drand48proto='$d_drand48proto'
16983 d_dup2='$d_dup2'
16984 d_eaccess='$d_eaccess'
16985 d_endgrent='$d_endgrent'
16986 d_endhent='$d_endhent'
16987 d_endnent='$d_endnent'
16988 d_endpent='$d_endpent'
16989 d_endpwent='$d_endpwent'
16990 d_endsent='$d_endsent'
16991 d_eofnblk='$d_eofnblk'
16992 d_eunice='$d_eunice'
16993 d_fchdir='$d_fchdir'
16994 d_fchmod='$d_fchmod'
16995 d_fchown='$d_fchown'
16996 d_fcntl='$d_fcntl'
16997 d_fcntl_can_lock='$d_fcntl_can_lock'
16998 d_fd_macros='$d_fd_macros'
16999 d_fd_set='$d_fd_set'
17000 d_fds_bits='$d_fds_bits'
17001 d_fgetpos='$d_fgetpos'
17002 d_finite='$d_finite'
17003 d_finitel='$d_finitel'
17004 d_flexfnam='$d_flexfnam'
17005 d_flock='$d_flock'
17006 d_flockproto='$d_flockproto'
17007 d_fork='$d_fork'
17008 d_fp_class='$d_fp_class'
17009 d_fpathconf='$d_fpathconf'
17010 d_fpclass='$d_fpclass'
17011 d_fpclassify='$d_fpclassify'
17012 d_fpclassl='$d_fpclassl'
17013 d_fpos64_t='$d_fpos64_t'
17014 d_frexpl='$d_frexpl'
17015 d_fs_data_s='$d_fs_data_s'
17016 d_fseeko='$d_fseeko'
17017 d_fsetpos='$d_fsetpos'
17018 d_fstatfs='$d_fstatfs'
17019 d_fstatvfs='$d_fstatvfs'
17020 d_fsync='$d_fsync'
17021 d_ftello='$d_ftello'
17022 d_ftime='$d_ftime'
17023 d_getcwd='$d_getcwd'
17024 d_getespwnam='$d_getespwnam'
17025 d_getfsstat='$d_getfsstat'
17026 d_getgrent='$d_getgrent'
17027 d_getgrps='$d_getgrps'
17028 d_gethbyaddr='$d_gethbyaddr'
17029 d_gethbyname='$d_gethbyname'
17030 d_gethent='$d_gethent'
17031 d_gethname='$d_gethname'
17032 d_gethostprotos='$d_gethostprotos'
17033 d_getitimer='$d_getitimer'
17034 d_getlogin='$d_getlogin'
17035 d_getmnt='$d_getmnt'
17036 d_getmntent='$d_getmntent'
17037 d_getnbyaddr='$d_getnbyaddr'
17038 d_getnbyname='$d_getnbyname'
17039 d_getnent='$d_getnent'
17040 d_getnetprotos='$d_getnetprotos'
17041 d_getpagsz='$d_getpagsz'
17042 d_getpbyname='$d_getpbyname'
17043 d_getpbynumber='$d_getpbynumber'
17044 d_getpent='$d_getpent'
17045 d_getpgid='$d_getpgid'
17046 d_getpgrp2='$d_getpgrp2'
17047 d_getpgrp='$d_getpgrp'
17048 d_getppid='$d_getppid'
17049 d_getprior='$d_getprior'
17050 d_getprotoprotos='$d_getprotoprotos'
17051 d_getprpwnam='$d_getprpwnam'
17052 d_getpwent='$d_getpwent'
17053 d_getsbyname='$d_getsbyname'
17054 d_getsbyport='$d_getsbyport'
17055 d_getsent='$d_getsent'
17056 d_getservprotos='$d_getservprotos'
17057 d_getspnam='$d_getspnam'
17058 d_gettimeod='$d_gettimeod'
17059 d_gnulibc='$d_gnulibc'
17060 d_grpasswd='$d_grpasswd'
17061 d_hasmntopt='$d_hasmntopt'
17062 d_htonl='$d_htonl'
17063 d_index='$d_index'
17064 d_inetaton='$d_inetaton'
17065 d_int64_t='$d_int64_t'
17066 d_isascii='$d_isascii'
17067 d_isfinite='$d_isfinite'
17068 d_isinf='$d_isinf'
17069 d_isnan='$d_isnan'
17070 d_isnanl='$d_isnanl'
17071 d_killpg='$d_killpg'
17072 d_lchown='$d_lchown'
17073 d_ldbl_dig='$d_ldbl_dig'
17074 d_link='$d_link'
17075 d_locconv='$d_locconv'
17076 d_lockf='$d_lockf'
17077 d_longdbl='$d_longdbl'
17078 d_longlong='$d_longlong'
17079 d_lseekproto='$d_lseekproto'
17080 d_lstat='$d_lstat'
17081 d_madvise='$d_madvise'
17082 d_mblen='$d_mblen'
17083 d_mbstowcs='$d_mbstowcs'
17084 d_mbtowc='$d_mbtowc'
17085 d_memchr='$d_memchr'
17086 d_memcmp='$d_memcmp'
17087 d_memcpy='$d_memcpy'
17088 d_memmove='$d_memmove'
17089 d_memset='$d_memset'
17090 d_mkdir='$d_mkdir'
17091 d_mkdtemp='$d_mkdtemp'
17092 d_mkfifo='$d_mkfifo'
17093 d_mkstemp='$d_mkstemp'
17094 d_mkstemps='$d_mkstemps'
17095 d_mktime='$d_mktime'
17096 d_mmap='$d_mmap'
17097 d_modfl='$d_modfl'
17098 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17099 d_mprotect='$d_mprotect'
17100 d_msg='$d_msg'
17101 d_msg_ctrunc='$d_msg_ctrunc'
17102 d_msg_dontroute='$d_msg_dontroute'
17103 d_msg_oob='$d_msg_oob'
17104 d_msg_peek='$d_msg_peek'
17105 d_msg_proxy='$d_msg_proxy'
17106 d_msgctl='$d_msgctl'
17107 d_msgget='$d_msgget'
17108 d_msghdr_s='$d_msghdr_s'
17109 d_msgrcv='$d_msgrcv'
17110 d_msgsnd='$d_msgsnd'
17111 d_msync='$d_msync'
17112 d_munmap='$d_munmap'
17113 d_mymalloc='$d_mymalloc'
17114 d_nice='$d_nice'
17115 d_nl_langinfo='$d_nl_langinfo'
17116 d_nv_preserves_uv='$d_nv_preserves_uv'
17117 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17118 d_off64_t='$d_off64_t'
17119 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17120 d_oldpthreads='$d_oldpthreads'
17121 d_oldsock='$d_oldsock'
17122 d_open3='$d_open3'
17123 d_pathconf='$d_pathconf'
17124 d_pause='$d_pause'
17125 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17126 d_phostname='$d_phostname'
17127 d_pipe='$d_pipe'
17128 d_poll='$d_poll'
17129 d_portable='$d_portable'
17130 d_procselfexe='$d_procselfexe'
17131 d_pthread_atfork='$d_pthread_atfork'
17132 d_pthread_yield='$d_pthread_yield'
17133 d_pwage='$d_pwage'
17134 d_pwchange='$d_pwchange'
17135 d_pwclass='$d_pwclass'
17136 d_pwcomment='$d_pwcomment'
17137 d_pwexpire='$d_pwexpire'
17138 d_pwgecos='$d_pwgecos'
17139 d_pwpasswd='$d_pwpasswd'
17140 d_pwquota='$d_pwquota'
17141 d_qgcvt='$d_qgcvt'
17142 d_quad='$d_quad'
17143 d_readdir='$d_readdir'
17144 d_readlink='$d_readlink'
17145 d_readv='$d_readv'
17146 d_recvmsg='$d_recvmsg'
17147 d_rename='$d_rename'
17148 d_rewinddir='$d_rewinddir'
17149 d_rmdir='$d_rmdir'
17150 d_safebcpy='$d_safebcpy'
17151 d_safemcpy='$d_safemcpy'
17152 d_sanemcmp='$d_sanemcmp'
17153 d_sbrkproto='$d_sbrkproto'
17154 d_sched_yield='$d_sched_yield'
17155 d_scm_rights='$d_scm_rights'
17156 d_seekdir='$d_seekdir'
17157 d_select='$d_select'
17158 d_sem='$d_sem'
17159 d_semctl='$d_semctl'
17160 d_semctl_semid_ds='$d_semctl_semid_ds'
17161 d_semctl_semun='$d_semctl_semun'
17162 d_semget='$d_semget'
17163 d_semop='$d_semop'
17164 d_sendmsg='$d_sendmsg'
17165 d_setegid='$d_setegid'
17166 d_seteuid='$d_seteuid'
17167 d_setgrent='$d_setgrent'
17168 d_setgrps='$d_setgrps'
17169 d_sethent='$d_sethent'
17170 d_setitimer='$d_setitimer'
17171 d_setlinebuf='$d_setlinebuf'
17172 d_setlocale='$d_setlocale'
17173 d_setnent='$d_setnent'
17174 d_setpent='$d_setpent'
17175 d_setpgid='$d_setpgid'
17176 d_setpgrp2='$d_setpgrp2'
17177 d_setpgrp='$d_setpgrp'
17178 d_setprior='$d_setprior'
17179 d_setproctitle='$d_setproctitle'
17180 d_setpwent='$d_setpwent'
17181 d_setregid='$d_setregid'
17182 d_setresgid='$d_setresgid'
17183 d_setresuid='$d_setresuid'
17184 d_setreuid='$d_setreuid'
17185 d_setrgid='$d_setrgid'
17186 d_setruid='$d_setruid'
17187 d_setsent='$d_setsent'
17188 d_setsid='$d_setsid'
17189 d_setvbuf='$d_setvbuf'
17190 d_sfio='$d_sfio'
17191 d_shm='$d_shm'
17192 d_shmat='$d_shmat'
17193 d_shmatprototype='$d_shmatprototype'
17194 d_shmctl='$d_shmctl'
17195 d_shmdt='$d_shmdt'
17196 d_shmget='$d_shmget'
17197 d_sigaction='$d_sigaction'
17198 d_sigprocmask='$d_sigprocmask'
17199 d_sigsetjmp='$d_sigsetjmp'
17200 d_sockatmark='$d_sockatmark'
17201 d_sockatmarkproto='$d_sockatmarkproto'
17202 d_socket='$d_socket'
17203 d_socklen_t='$d_socklen_t'
17204 d_sockpair='$d_sockpair'
17205 d_socks5_init='$d_socks5_init'
17206 d_sqrtl='$d_sqrtl'
17207 d_sresgproto='$d_sresgproto'
17208 d_sresuproto='$d_sresuproto'
17209 d_statblks='$d_statblks'
17210 d_statfs_f_flags='$d_statfs_f_flags'
17211 d_statfs_s='$d_statfs_s'
17212 d_statvfs='$d_statvfs'
17213 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17214 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17215 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17216 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17217 d_stdio_stream_array='$d_stdio_stream_array'
17218 d_stdiobase='$d_stdiobase'
17219 d_stdstdio='$d_stdstdio'
17220 d_strchr='$d_strchr'
17221 d_strcoll='$d_strcoll'
17222 d_strctcpy='$d_strctcpy'
17223 d_strerrm='$d_strerrm'
17224 d_strerror='$d_strerror'
17225 d_strftime='$d_strftime'
17226 d_strtod='$d_strtod'
17227 d_strtol='$d_strtol'
17228 d_strtold='$d_strtold'
17229 d_strtoll='$d_strtoll'
17230 d_strtoq='$d_strtoq'
17231 d_strtoul='$d_strtoul'
17232 d_strtoull='$d_strtoull'
17233 d_strtouq='$d_strtouq'
17234 d_strxfrm='$d_strxfrm'
17235 d_suidsafe='$d_suidsafe'
17236 d_symlink='$d_symlink'
17237 d_syscall='$d_syscall'
17238 d_syscallproto='$d_syscallproto'
17239 d_sysconf='$d_sysconf'
17240 d_sysernlst='$d_sysernlst'
17241 d_syserrlst='$d_syserrlst'
17242 d_system='$d_system'
17243 d_tcgetpgrp='$d_tcgetpgrp'
17244 d_tcsetpgrp='$d_tcsetpgrp'
17245 d_telldir='$d_telldir'
17246 d_telldirproto='$d_telldirproto'
17247 d_time='$d_time'
17248 d_times='$d_times'
17249 d_truncate='$d_truncate'
17250 d_tzname='$d_tzname'
17251 d_u32align='$d_u32align'
17252 d_ualarm='$d_ualarm'
17253 d_umask='$d_umask'
17254 d_uname='$d_uname'
17255 d_union_semun='$d_union_semun'
17256 d_unordered='$d_unordered'
17257 d_usleep='$d_usleep'
17258 d_usleepproto='$d_usleepproto'
17259 d_ustat='$d_ustat'
17260 d_vendorarch='$d_vendorarch'
17261 d_vendorbin='$d_vendorbin'
17262 d_vendorlib='$d_vendorlib'
17263 d_vfork='$d_vfork'
17264 d_void_closedir='$d_void_closedir'
17265 d_voidsig='$d_voidsig'
17266 d_voidtty='$d_voidtty'
17267 d_volatile='$d_volatile'
17268 d_vprintf='$d_vprintf'
17269 d_wait4='$d_wait4'
17270 d_waitpid='$d_waitpid'
17271 d_wcstombs='$d_wcstombs'
17272 d_wctomb='$d_wctomb'
17273 d_writev='$d_writev'
17274 d_xenix='$d_xenix'
17275 date='$date'
17276 db_hashtype='$db_hashtype'
17277 db_prefixtype='$db_prefixtype'
17278 db_version_major='$db_version_major'
17279 db_version_minor='$db_version_minor'
17280 db_version_patch='$db_version_patch'
17281 defvoidused='$defvoidused'
17282 direntrytype='$direntrytype'
17283 dlext='$dlext'
17284 dlsrc='$dlsrc'
17285 doublesize='$doublesize'
17286 drand01='$drand01'
17287 dynamic_ext='$dynamic_ext'
17288 eagain='$eagain'
17289 ebcdic='$ebcdic'
17290 echo='$echo'
17291 egrep='$egrep'
17292 emacs='$emacs'
17293 eunicefix='$eunicefix'
17294 exe_ext='$exe_ext'
17295 expr='$expr'
17296 extensions='$extensions'
17297 extras='$extras'
17298 fflushNULL='$fflushNULL'
17299 fflushall='$fflushall'
17300 find='$find'
17301 firstmakefile='$firstmakefile'
17302 flex='$flex'
17303 fpossize='$fpossize'
17304 fpostype='$fpostype'
17305 freetype='$freetype'
17306 from='$from'
17307 full_ar='$full_ar'
17308 full_csh='$full_csh'
17309 full_sed='$full_sed'
17310 gccosandvers='$gccosandvers'
17311 gccversion='$gccversion'
17312 gidformat='$gidformat'
17313 gidsign='$gidsign'
17314 gidsize='$gidsize'
17315 gidtype='$gidtype'
17316 glibpth='$glibpth'
17317 gmake='$gmake'
17318 grep='$grep'
17319 groupcat='$groupcat'
17320 groupstype='$groupstype'
17321 gzip='$gzip'
17322 h_fcntl='$h_fcntl'
17323 h_sysfile='$h_sysfile'
17324 hint='$hint'
17325 hostcat='$hostcat'
17326 i16size='$i16size'
17327 i16type='$i16type'
17328 i32size='$i32size'
17329 i32type='$i32type'
17330 i64size='$i64size'
17331 i64type='$i64type'
17332 i8size='$i8size'
17333 i8type='$i8type'
17334 i_arpainet='$i_arpainet'
17335 i_bsdioctl='$i_bsdioctl'
17336 i_db='$i_db'
17337 i_dbm='$i_dbm'
17338 i_dirent='$i_dirent'
17339 i_dld='$i_dld'
17340 i_dlfcn='$i_dlfcn'
17341 i_fcntl='$i_fcntl'
17342 i_float='$i_float'
17343 i_fp='$i_fp'
17344 i_fp_class='$i_fp_class'
17345 i_gdbm='$i_gdbm'
17346 i_grp='$i_grp'
17347 i_ieeefp='$i_ieeefp'
17348 i_inttypes='$i_inttypes'
17349 i_langinfo='$i_langinfo'
17350 i_libutil='$i_libutil'
17351 i_limits='$i_limits'
17352 i_locale='$i_locale'
17353 i_machcthr='$i_machcthr'
17354 i_malloc='$i_malloc'
17355 i_math='$i_math'
17356 i_memory='$i_memory'
17357 i_mntent='$i_mntent'
17358 i_ndbm='$i_ndbm'
17359 i_netdb='$i_netdb'
17360 i_neterrno='$i_neterrno'
17361 i_netinettcp='$i_netinettcp'
17362 i_niin='$i_niin'
17363 i_poll='$i_poll'
17364 i_prot='$i_prot'
17365 i_pthread='$i_pthread'
17366 i_pwd='$i_pwd'
17367 i_rpcsvcdbm='$i_rpcsvcdbm'
17368 i_sfio='$i_sfio'
17369 i_sgtty='$i_sgtty'
17370 i_shadow='$i_shadow'
17371 i_socks='$i_socks'
17372 i_stdarg='$i_stdarg'
17373 i_stddef='$i_stddef'
17374 i_stdlib='$i_stdlib'
17375 i_string='$i_string'
17376 i_sunmath='$i_sunmath'
17377 i_sysaccess='$i_sysaccess'
17378 i_sysdir='$i_sysdir'
17379 i_sysfile='$i_sysfile'
17380 i_sysfilio='$i_sysfilio'
17381 i_sysin='$i_sysin'
17382 i_sysioctl='$i_sysioctl'
17383 i_syslog='$i_syslog'
17384 i_sysmman='$i_sysmman'
17385 i_sysmode='$i_sysmode'
17386 i_sysmount='$i_sysmount'
17387 i_sysndir='$i_sysndir'
17388 i_sysparam='$i_sysparam'
17389 i_sysresrc='$i_sysresrc'
17390 i_syssecrt='$i_syssecrt'
17391 i_sysselct='$i_sysselct'
17392 i_syssockio='$i_syssockio'
17393 i_sysstat='$i_sysstat'
17394 i_sysstatfs='$i_sysstatfs'
17395 i_sysstatvfs='$i_sysstatvfs'
17396 i_systime='$i_systime'
17397 i_systimek='$i_systimek'
17398 i_systimes='$i_systimes'
17399 i_systypes='$i_systypes'
17400 i_sysuio='$i_sysuio'
17401 i_sysun='$i_sysun'
17402 i_sysutsname='$i_sysutsname'
17403 i_sysvfs='$i_sysvfs'
17404 i_syswait='$i_syswait'
17405 i_termio='$i_termio'
17406 i_termios='$i_termios'
17407 i_time='$i_time'
17408 i_unistd='$i_unistd'
17409 i_ustat='$i_ustat'
17410 i_utime='$i_utime'
17411 i_values='$i_values'
17412 i_varargs='$i_varargs'
17413 i_varhdr='$i_varhdr'
17414 i_vfork='$i_vfork'
17415 ignore_versioned_solibs='$ignore_versioned_solibs'
17416 inc_version_list='$inc_version_list'
17417 inc_version_list_init='$inc_version_list_init'
17418 incpath='$incpath'
17419 inews='$inews'
17420 installarchlib='$installarchlib'
17421 installbin='$installbin'
17422 installman1dir='$installman1dir'
17423 installman3dir='$installman3dir'
17424 installprefix='$installprefix'
17425 installprefixexp='$installprefixexp'
17426 installprivlib='$installprivlib'
17427 installscript='$installscript'
17428 installsitearch='$installsitearch'
17429 installsitebin='$installsitebin'
17430 installsitelib='$installsitelib'
17431 installstyle='$installstyle'
17432 installusrbinperl='$installusrbinperl'
17433 installvendorarch='$installvendorarch'
17434 installvendorbin='$installvendorbin'
17435 installvendorlib='$installvendorlib'
17436 intsize='$intsize'
17437 issymlink='$issymlink'
17438 ivdformat='$ivdformat'
17439 ivsize='$ivsize'
17440 ivtype='$ivtype'
17441 known_extensions='$known_extensions'
17442 ksh='$ksh'
17443 ld='$ld'
17444 lddlflags='$lddlflags'
17445 ldflags='$ldflags'
17446 ldflags_uselargefiles='$ldflags_uselargefiles'
17447 ldlibpthname='$ldlibpthname'
17448 less='$less'
17449 lib_ext='$lib_ext'
17450 libc='$libc'
17451 libperl='$libperl'
17452 libpth='$libpth'
17453 libs='$libs'
17454 libsdirs='$libsdirs'
17455 libsfiles='$libsfiles'
17456 libsfound='$libsfound'
17457 libspath='$libspath'
17458 libswanted='$libswanted'
17459 libswanted_uselargefiles='$libswanted_uselargefiles'
17460 line='$line'
17461 lint='$lint'
17462 lkflags='$lkflags'
17463 ln='$ln'
17464 lns='$lns'
17465 locincpth='$locincpth'
17466 loclibpth='$loclibpth'
17467 longdblsize='$longdblsize'
17468 longlongsize='$longlongsize'
17469 longsize='$longsize'
17470 lp='$lp'
17471 lpr='$lpr'
17472 ls='$ls'
17473 lseeksize='$lseeksize'
17474 lseektype='$lseektype'
17475 mail='$mail'
17476 mailx='$mailx'
17477 make='$make'
17478 make_set_make='$make_set_make'
17479 mallocobj='$mallocobj'
17480 mallocsrc='$mallocsrc'
17481 malloctype='$malloctype'
17482 man1dir='$man1dir'
17483 man1direxp='$man1direxp'
17484 man1ext='$man1ext'
17485 man3dir='$man3dir'
17486 man3direxp='$man3direxp'
17487 man3ext='$man3ext'
17488 mips_type='$mips_type'
17489 mkdir='$mkdir'
17490 mmaptype='$mmaptype'
17491 modetype='$modetype'
17492 more='$more'
17493 multiarch='$multiarch'
17494 mv='$mv'
17495 myarchname='$myarchname'
17496 mydomain='$mydomain'
17497 myhostname='$myhostname'
17498 myuname='$myuname'
17499 n='$n'
17500 need_va_copy='$need_va_copy'
17501 netdb_hlen_type='$netdb_hlen_type'
17502 netdb_host_type='$netdb_host_type'
17503 netdb_name_type='$netdb_name_type'
17504 netdb_net_type='$netdb_net_type'
17505 nm='$nm'
17506 nm_opt='$nm_opt'
17507 nm_so_opt='$nm_so_opt'
17508 nonxs_ext='$nonxs_ext'
17509 nroff='$nroff'
17510 nvEUformat='$nvEUformat'
17511 nvFUformat='$nvFUformat'
17512 nvGUformat='$nvGUformat'
17513 nveformat='$nveformat'
17514 nvfformat='$nvfformat'
17515 nvgformat='$nvgformat'
17516 nvsize='$nvsize'
17517 nvtype='$nvtype'
17518 o_nonblock='$o_nonblock'
17519 obj_ext='$obj_ext'
17520 old_pthread_create_joinable='$old_pthread_create_joinable'
17521 optimize='$optimize'
17522 orderlib='$orderlib'
17523 osname='$osname'
17524 osvers='$osvers'
17525 otherlibdirs='$otherlibdirs'
17526 package='$package'
17527 pager='$pager'
17528 passcat='$passcat'
17529 patchlevel='$patchlevel'
17530 path_sep='$path_sep'
17531 perl5='$perl5'
17532 perl='$perl'
17533 perl_patchlevel='$perl_patchlevel'
17534 perladmin='$perladmin'
17535 perllibs='$perllibs'
17536 perlpath='$perlpath'
17537 pg='$pg'
17538 phostname='$phostname'
17539 pidtype='$pidtype'
17540 plibpth='$plibpth'
17541 pm_apiversion='$pm_apiversion'
17542 pmake='$pmake'
17543 pr='$pr'
17544 prefix='$prefix'
17545 prefixexp='$prefixexp'
17546 privlib='$privlib'
17547 privlibexp='$privlibexp'
17548 procselfexe='$procselfexe'
17549 prototype='$prototype'
17550 ptrsize='$ptrsize'
17551 quadkind='$quadkind'
17552 quadtype='$quadtype'
17553 randbits='$randbits'
17554 randfunc='$randfunc'
17555 randseedtype='$randseedtype'
17556 ranlib='$ranlib'
17557 rd_nodata='$rd_nodata'
17558 revision='$revision'
17559 rm='$rm'
17560 rmail='$rmail'
17561 run='$run'
17562 runnm='$runnm'
17563 sPRIEUldbl='$sPRIEUldbl'
17564 sPRIFUldbl='$sPRIFUldbl'
17565 sPRIGUldbl='$sPRIGUldbl'
17566 sPRIXU64='$sPRIXU64'
17567 sPRId64='$sPRId64'
17568 sPRIeldbl='$sPRIeldbl'
17569 sPRIfldbl='$sPRIfldbl'
17570 sPRIgldbl='$sPRIgldbl'
17571 sPRIi64='$sPRIi64'
17572 sPRIo64='$sPRIo64'
17573 sPRIu64='$sPRIu64'
17574 sPRIx64='$sPRIx64'
17575 sSCNfldbl='$sSCNfldbl'
17576 sched_yield='$sched_yield'
17577 scriptdir='$scriptdir'
17578 scriptdirexp='$scriptdirexp'
17579 sed='$sed'
17580 seedfunc='$seedfunc'
17581 selectminbits='$selectminbits'
17582 selecttype='$selecttype'
17583 sendmail='$sendmail'
17584 sh='$sh'
17585 shar='$shar'
17586 sharpbang='$sharpbang'
17587 shmattype='$shmattype'
17588 shortsize='$shortsize'
17589 shrpenv='$shrpenv'
17590 shsharp='$shsharp'
17591 sig_count='$sig_count'
17592 sig_name='$sig_name'
17593 sig_name_init='$sig_name_init'
17594 sig_num='$sig_num'
17595 sig_num_init='$sig_num_init'
17596 sig_size='$sig_size'
17597 signal_t='$signal_t'
17598 sitearch='$sitearch'
17599 sitearchexp='$sitearchexp'
17600 sitebin='$sitebin'
17601 sitebinexp='$sitebinexp'
17602 sitelib='$sitelib'
17603 sitelib_stem='$sitelib_stem'
17604 sitelibexp='$sitelibexp'
17605 siteprefix='$siteprefix'
17606 siteprefixexp='$siteprefixexp'
17607 sizesize='$sizesize'
17608 sizetype='$sizetype'
17609 sleep='$sleep'
17610 smail='$smail'
17611 so='$so'
17612 sockethdr='$sockethdr'
17613 socketlib='$socketlib'
17614 socksizetype='$socksizetype'
17615 sort='$sort'
17616 spackage='$spackage'
17617 spitshell='$spitshell'
17618 src='$src'
17619 ssizetype='$ssizetype'
17620 startperl='$startperl'
17621 startsh='$startsh'
17622 static_ext='$static_ext'
17623 stdchar='$stdchar'
17624 stdio_base='$stdio_base'
17625 stdio_bufsiz='$stdio_bufsiz'
17626 stdio_cnt='$stdio_cnt'
17627 stdio_filbuf='$stdio_filbuf'
17628 stdio_ptr='$stdio_ptr'
17629 stdio_stream_array='$stdio_stream_array'
17630 strings='$strings'
17631 submit='$submit'
17632 subversion='$subversion'
17633 sysman='$sysman'
17634 tail='$tail'
17635 tar='$tar'
17636 targetarch='$targetarch'
17637 tbl='$tbl'
17638 tee='$tee'
17639 test='$test'
17640 timeincl='$timeincl'
17641 timetype='$timetype'
17642 to='$to'
17643 touch='$touch'
17644 tr='$tr'
17645 trnl='$trnl'
17646 troff='$troff'
17647 u16size='$u16size'
17648 u16type='$u16type'
17649 u32size='$u32size'
17650 u32type='$u32type'
17651 u64size='$u64size'
17652 u64type='$u64type'
17653 u8size='$u8size'
17654 u8type='$u8type'
17655 uidformat='$uidformat'
17656 uidsign='$uidsign'
17657 uidsize='$uidsize'
17658 uidtype='$uidtype'
17659 uname='$uname'
17660 uniq='$uniq'
17661 uquadtype='$uquadtype'
17662 use5005threads='$use5005threads'
17663 use64bitall='$use64bitall'
17664 use64bitint='$use64bitint'
17665 usecrosscompile='$usecrosscompile'
17666 usedl='$usedl'
17667 useithreads='$useithreads'
17668 uselargefiles='$uselargefiles'
17669 uselongdouble='$uselongdouble'
17670 usemorebits='$usemorebits'
17671 usemultiplicity='$usemultiplicity'
17672 usemymalloc='$usemymalloc'
17673 usenm='$usenm'
17674 useopcode='$useopcode'
17675 useperlio='$useperlio'
17676 useposix='$useposix'
17677 usereentrant='$usereentrant'
17678 usesfio='$usesfio'
17679 useshrplib='$useshrplib'
17680 usesocks='$usesocks'
17681 usethreads='$usethreads'
17682 usevendorprefix='$usevendorprefix'
17683 usevfork='$usevfork'
17684 usrinc='$usrinc'
17685 uuname='$uuname'
17686 uvXUformat='$uvXUformat'
17687 uvoformat='$uvoformat'
17688 uvsize='$uvsize'
17689 uvtype='$uvtype'
17690 uvuformat='$uvuformat'
17691 uvxformat='$uvxformat'
17692 vendorarch='$vendorarch'
17693 vendorarchexp='$vendorarchexp'
17694 vendorbin='$vendorbin'
17695 vendorbinexp='$vendorbinexp'
17696 vendorlib='$vendorlib'
17697 vendorlib_stem='$vendorlib_stem'
17698 vendorlibexp='$vendorlibexp'
17699 vendorprefix='$vendorprefix'
17700 vendorprefixexp='$vendorprefixexp'
17701 version='$version'
17702 version_patchlevel_string='$version_patchlevel_string'
17703 versiononly='$versiononly'
17704 vi='$vi'
17705 voidflags='$voidflags'
17706 xlibpth='$xlibpth'
17707 xs_apiversion='$xs_apiversion'
17708 yacc='$yacc'
17709 yaccflags='$yaccflags'
17710 zcat='$zcat'
17711 zip='$zip'
17712 EOT
17713
17714 : Add in command line options if available
17715 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17716
17717 : add special variables
17718 $test -f $src/patchlevel.h && \
17719 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17720 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17721 echo "PERL_CONFIG_SH=true" >>config.sh
17722
17723 : propagate old symbols
17724 if $test -f UU/config.sh; then
17725         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17726         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17727         $sort | $uniq -u >UU/oldsyms
17728         set X `cat UU/oldsyms`
17729         shift
17730         case $# in
17731         0) ;;
17732         *)
17733                 cat <<EOM
17734 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17735 EOM
17736                 echo "# Variables propagated from previous config.sh file." >>config.sh
17737                 for sym in `cat UU/oldsyms`; do
17738                         echo "    Propagating $hint variable "'$'"$sym..."
17739                         eval 'tmp="$'"${sym}"'"'
17740                         echo "$tmp" | \
17741                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17742                 done
17743                 ;;
17744         esac
17745 fi
17746
17747 : Finish up by extracting the .SH files
17748 case "$alldone" in
17749 exit)
17750         $rm -rf UU
17751         echo "Extraction done."
17752         exit 0
17753         ;;
17754 cont)
17755         ;;
17756 '')
17757         dflt=''
17758         nostick=true
17759         $cat <<EOM
17760
17761 If you'd like to make any changes to the config.sh file before I begin
17762 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17763
17764 EOM
17765         rp="Press return or use a shell escape to edit config.sh:"
17766         . UU/myread
17767         nostick=''
17768         case "$ans" in
17769         '') ;;
17770         *) : in case they cannot read
17771                 sh 1>&4 -c "$ans";;
17772         esac
17773         ;;
17774 esac
17775
17776 : if this fails, just run all the .SH files by hand
17777 . ./config.sh
17778
17779 echo " "
17780 exec 1>&4
17781 pwd=`pwd`
17782 . ./UU/extract
17783 cd $pwd
17784
17785 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17786         dflt=y
17787         case "$silent" in
17788         true) ;;
17789         *)
17790                 $cat <<EOM
17791
17792 Now you need to generate make dependencies by running "$make depend".
17793 You might prefer to run it in background: "$make depend > makedepend.out &"
17794 It can take a while, so you might not want to run it right now.
17795
17796 EOM
17797                 ;;
17798         esac
17799         rp="Run $make depend now?"
17800         . UU/myread
17801         case "$ans" in
17802         y*)
17803                 $make depend && echo "Now you must run '$make'."
17804                 ;;
17805         *)
17806                 echo "You must run '$make depend' then '$make'."
17807                 ;;
17808         esac
17809 elif test -f [Mm]akefile; then
17810         echo " "
17811         echo "Now you must run a $make."
17812 else
17813         echo "Configure done."
17814 fi
17815
17816 if $test -f Policy.sh; then
17817     $cat <<EOM
17818
17819 If you compile $package on a different machine or from a different object
17820 directory, copy the Policy.sh file from this object directory to the
17821 new one before you run Configure -- this will help you with most of
17822 the policy defaults.
17823
17824 EOM
17825 fi
17826 if $test -f config.msg; then
17827     echo "Hmm.  I also noted the following information while running:"
17828     echo " "
17829     $cat config.msg >&4
17830     $rm -f config.msg
17831 fi
17832 $rm -f kit*isdone ark*isdone
17833 $rm -rf UU
17834
17835 : End of Configure
17836