This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: Cygwin: one down one to go
[perl5.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 Sun Dec 30 19:31:52 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
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 if test -f "/system/gnu_library/bin/ar.pm"; then
1040      _exe=".pm"
1041 fi
1042
1043 i_whoami=''
1044 ccname=''
1045 ccversion=''
1046 perllibs=''
1047 : set useposix=false in your hint file to disable the POSIX extension.
1048 useposix=true
1049 : set useopcode=false in your hint file to disable the Opcode extension.
1050 useopcode=true
1051 : Trailing extension.  Override this in a hint file, if needed.
1052 : Extra object files, if any, needed on this platform.
1053 archobjs=''
1054 archname=''
1055 : Possible local include directories to search.
1056 : Set locincpth to "" in a hint file to defeat local include searches.
1057 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1058 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1059 :
1060 : no include file wanted by default
1061 inclwanted=''
1062
1063 groupstype=''
1064 libnames=''
1065 : change the next line if compiling for Xenix/286 on Xenix/386
1066 xlibpth='/usr/lib/386 /lib/386'
1067 : Possible local library directories to search.
1068 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1069 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1070
1071 : general looking path for locating libraries
1072 glibpth="/lib /usr/lib $xlibpth"
1073 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1074 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1075 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1076
1077 : Private path used by Configure to find libraries.  Its value
1078 : is prepended to libpth. This variable takes care of special
1079 : machines, like the mips.  Usually, it should be empty.
1080 plibpth=''
1081
1082 : default library list
1083 libswanted=''
1084 : some systems want to use only the non-versioned libso:s
1085 ignore_versioned_solibs=''
1086 archname64=''
1087 ccflags_uselargefiles=''
1088 ldflags_uselargefiles=''
1089 libswanted_uselargefiles=''
1090 : set usemultiplicity on the Configure command line to enable multiplicity.
1091 : set usesocks on the Configure command line to enable socks.
1092 : set usethreads on the Configure command line to enable threads.
1093 usereentrant='undef'
1094 : full support for void wanted by default
1095 defvoidused=15
1096
1097 : List of libraries we want.
1098 : If anyone needs -lnet, put it in a hint file.
1099 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1100 libswanted="$libswanted dld ld sun m c cposix posix"
1101 libswanted="$libswanted ndir dir crypt sec"
1102 libswanted="$libswanted ucb bsd BSD PW x util"
1103 : We probably want to search /usr/shlib before most other libraries.
1104 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1105 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1106 glibpth="/usr/shlib $glibpth"
1107 : Do not use vfork unless overridden by a hint file.
1108 usevfork=false
1109
1110 : Find the basic shell for Bourne shell scripts
1111 case "$sh" in
1112 '')
1113         case "$SYSTYPE" in
1114         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1115         *) xxx='/bin/sh';;
1116         esac
1117         if test -f "$xxx"; then
1118                 sh="$xxx"
1119         else
1120                 : Build up a list and do a single loop so we can 'break' out.
1121                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1122                 for xxx in sh bash ksh pdksh ash; do
1123                         for p in $pth; do
1124                                 try="$try ${p}/${xxx}"
1125                         done
1126                 done
1127                 for xxx in $try; do
1128                         if test -f "$xxx"; then
1129                                 sh="$xxx";
1130                                 break
1131                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1132                                 sh="$xxx";
1133                                 break
1134                         elif test -f "$xxx.exe"; then
1135                                 sh="$xxx";
1136                                 break
1137                         fi
1138                 done
1139         fi
1140         ;;
1141 esac
1142
1143 case "$sh" in
1144 '')     cat >&2 <<EOM
1145 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1146
1147 Usually it's in /bin/sh.  How did you even get this far?
1148 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1149 we'll try to straighten this all out.
1150 EOM
1151         exit 1
1152         ;;
1153 esac
1154
1155 : see if sh knows # comments
1156 if `$sh -c '#' >/dev/null 2>&1`; then
1157         shsharp=true
1158         spitshell=cat
1159         xcat=/bin/cat
1160         test -f $xcat$_exe || xcat=/usr/bin/cat
1161         if test ! -f $xcat$_exe; then
1162                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1163                         if test -f $p/cat$_exe; then
1164                                 xcat=$p/cat
1165                                 break
1166                         fi
1167                 done
1168                 if test ! -f $xcat$_exe; then
1169                         echo "Can't find cat anywhere!"
1170                         exit 1
1171                 fi
1172         fi
1173         echo "#!$xcat" >sharp
1174         $eunicefix sharp
1175         chmod +x sharp
1176         ./sharp > today
1177         if test -s today; then
1178                 sharpbang='#!'
1179         else
1180                 echo "#! $xcat" > sharp
1181                 $eunicefix sharp
1182                 chmod +x sharp
1183                 ./sharp > today
1184                 if test -s today; then
1185                         sharpbang='#! '
1186                 else
1187                         sharpbang=': use '
1188                 fi
1189         fi
1190 else
1191         echo " "
1192         echo "Your $sh doesn't grok # comments--I will strip them later on."
1193         shsharp=false
1194         cd ..
1195         echo "exec grep -v '^[  ]*#'" >spitshell
1196         chmod +x spitshell
1197         $eunicefix spitshell
1198         spitshell=`pwd`/spitshell
1199         cd UU
1200         echo "I presume that if # doesn't work, #! won't work either!"
1201         sharpbang=': use '
1202 fi
1203 rm -f sharp today
1204
1205 : figure out how to guarantee sh startup
1206 case "$startsh" in
1207 '') startsh=${sharpbang}${sh} ;;
1208 *)
1209 esac
1210 cat >sharp <<EOSS
1211 $startsh
1212 set abc
1213 test "$?abc" != 1
1214 EOSS
1215
1216 chmod +x sharp
1217 $eunicefix sharp
1218 if ./sharp; then
1219         : echo "Yup, it does."
1220 else
1221         echo "Hmm... '$startsh' does not guarantee sh startup..."
1222         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1223 fi
1224 rm -f sharp
1225
1226
1227 : Save command line options in file UU/cmdline.opt for later use in
1228 : generating config.sh.
1229 cat > cmdline.opt <<EOSH
1230 # Configure command line arguments.
1231 config_arg0='$0'
1232 config_args='$*'
1233 config_argc=$#
1234 EOSH
1235 argn=1
1236 args_exp=''
1237 args_sep=''
1238 for arg in "$@"; do
1239         cat >>cmdline.opt <<EOSH
1240 config_arg$argn='$arg'
1241 EOSH
1242         # Extreme backslashitis: replace each ' by '"'"'
1243         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1244 $arg
1245 EOC
1246         arg_exp=`cat cmdl.opt`
1247         args_exp="$args_exp$args_sep'$arg_exp'"
1248         argn=`expr $argn + 1`
1249         args_sep=' '
1250 done
1251 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1252 # used by ./hints/os2.sh
1253 rm -f cmdl.opt
1254
1255 : produce awk script to parse command line options
1256 cat >options.awk <<'EOF'
1257 BEGIN {
1258         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1259
1260         len = length(optstr);
1261         for (i = 1; i <= len; i++) {
1262                 c = substr(optstr, i, 1);
1263                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1264                 if (a == ":") {
1265                         arg[c] = 1;
1266                         i++;
1267                 }
1268                 opt[c] = 1;
1269         }
1270 }
1271 {
1272         expect = 0;
1273         str = $0;
1274         if (substr(str, 1, 1) != "-") {
1275                 printf("'%s'\n", str);
1276                 next;
1277         }
1278         len = length($0);
1279         for (i = 2; i <= len; i++) {
1280                 c = substr(str, i, 1);
1281                 if (!opt[c]) {
1282                         printf("-%s\n", substr(str, i));
1283                         next;
1284                 }
1285                 printf("-%s\n", c);
1286                 if (arg[c]) {
1287                         if (i < len)
1288                                 printf("'%s'\n", substr(str, i + 1));
1289                         else
1290                                 expect = 1;
1291                         next;
1292                 }
1293         }
1294 }
1295 END {
1296         if (expect)
1297                 print "?";
1298 }
1299 EOF
1300
1301 : process the command line options
1302 set X `for arg in "$@"; do echo "X$arg"; done |
1303         sed -e s/X// | awk -f options.awk`
1304 eval "set $*"
1305 shift
1306 rm -f options.awk
1307
1308 : set up default values
1309 fastread=''
1310 reuseval=false
1311 config_sh=''
1312 alldone=''
1313 error=''
1314 silent=''
1315 extractsh=''
1316 override=''
1317 knowitall=''
1318 rm -f optdef.sh posthint.sh
1319 cat >optdef.sh <<EOS
1320 $startsh
1321 EOS
1322
1323
1324 : option parsing
1325 while test $# -gt 0; do
1326         case "$1" in
1327         -d) shift; fastread=yes;;
1328         -e) shift; alldone=cont;;
1329         -f)
1330                 shift
1331                 cd ..
1332                 if test -r "$1"; then
1333                         config_sh="$1"
1334                 else
1335                         echo "$me: cannot read config file $1." >&2
1336                         error=true
1337                 fi
1338                 cd UU
1339                 shift;;
1340         -h) shift; error=true;;
1341         -r) shift; reuseval=true;;
1342         -s) shift; silent=true; realsilent=true;;
1343         -E) shift; alldone=exit;;
1344         -K) shift; knowitall=true;;
1345         -O) shift; override=true;;
1346         -S) shift; silent=true; extractsh=true;;
1347         -D)
1348                 shift
1349                 case "$1" in
1350                 *=)
1351                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1352                         echo "$me: ignoring -D $1" >&2
1353                         ;;
1354                 *=*) echo "$1" | \
1355                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1356                 *) echo "$1='define'" >> optdef.sh;;
1357                 esac
1358                 shift
1359                 ;;
1360         -U)
1361                 shift
1362                 case "$1" in
1363                 *=) echo "$1" >> optdef.sh;;
1364                 *=*)
1365                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1366                         echo "$me: ignoring -U $1" >&2
1367                         ;;
1368                 *) echo "$1='undef'" >> optdef.sh;;
1369                 esac
1370                 shift
1371                 ;;
1372         -A)
1373             shift
1374             xxx=''
1375             yyy="$1"
1376             zzz=''
1377             uuu=undef
1378             case "$yyy" in
1379             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1380                  case "$zzz" in
1381                  *:*) zzz='' ;;
1382                  *)   xxx=append
1383                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1384                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1385                  esac
1386                  ;;
1387             esac
1388             case "$xxx" in
1389             '')  case "$yyy" in
1390                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1391                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1392                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1393                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1394                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1395                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1396                  esac
1397                  ;;       
1398             esac
1399             case "$xxx" in
1400             append)
1401                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1402             clear)
1403                 echo "$yyy=''"                  >> posthint.sh ;;
1404             define)
1405                 case "$zzz" in
1406                 '') zzz=define ;;
1407                 esac
1408                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1409             eval)
1410                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1411             prepend)
1412                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1413             undef)
1414                 case "$zzz" in
1415                 '') zzz="$uuu" ;;
1416                 esac
1417                 echo "$yyy=$zzz"                >> posthint.sh ;;
1418             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1419             esac
1420             shift
1421             ;;
1422         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1423             exit 0;;
1424         --) break;;
1425         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1426         *) break;;
1427         esac
1428 done
1429
1430 case "$error" in
1431 true)
1432         cat >&2 <<EOM
1433 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1434                  [-U symbol] [-U symbol=] [-A command:symbol...]
1435   -d : use defaults for all answers.
1436   -e : go on without questioning past the production of config.sh.
1437   -f : specify an alternate default configuration file.
1438   -h : print this help message and exit (with an error status).
1439   -r : reuse C symbols value if possible (skips costly nm extraction).
1440   -s : silent mode, only echoes questions and essential information.
1441   -D : define symbol to have some value:
1442          -D symbol         symbol gets the value 'define'
1443          -D symbol=value   symbol gets the value 'value'
1444   -E : stop at the end of questions, after having produced config.sh.
1445   -K : do not use unless you know what you are doing.
1446   -O : let -D and -U override definitions from loaded configuration file.
1447   -S : perform variable substitutions on all .SH files (can mix with -f)
1448   -U : undefine symbol:
1449          -U symbol    symbol gets the value 'undef'
1450          -U symbol=   symbol gets completely empty
1451   -A : manipulate symbol after the platform specific hints have been applied:
1452          -A symbol=value                append " "value to symbol
1453          -A append:symbol=value         append value to symbol
1454          -A define:symbol=value         define symbol to have value
1455          -A clear:symbol                define symbol to be ''
1456          -A define:symbol               define symbol to be 'define'
1457          -A eval:symbol=value           define symbol to be eval of value
1458          -A prepend:symbol=value        prepend value to symbol
1459          -A undef:symbol                define symbol to be 'undef'
1460          -A undef:symbol=               define symbol to be ''
1461   -V : print version number and exit (with a zero status).
1462 EOM
1463         exit 1
1464         ;;
1465 esac
1466
1467 : Sanity checks
1468 case "$fastread$alldone" in
1469 yescont|yesexit) ;;
1470 *)
1471         case "$extractsh" in
1472         true) ;;
1473         *)
1474                 if test ! -t 0; then
1475                         echo "Say 'sh Configure', not 'sh <Configure'"
1476                         exit 1
1477                 fi
1478                 ;;
1479         esac
1480         ;;
1481 esac
1482
1483 exec 4>&1
1484 case "$silent" in
1485 true) exec 1>/dev/null;;
1486 esac
1487
1488 : run the defines and the undefines, if any, but leave the file out there...
1489 touch optdef.sh
1490 . ./optdef.sh
1491 : create the posthint manipulation script and leave the file out there...
1492 touch posthint.sh
1493
1494 : set package name
1495 package=perl5
1496 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1497 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1498 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1499 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1500 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1501 esac
1502
1503 : Some greps do not return status, grrr.
1504 echo "grimblepritz" >grimble
1505 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1506         contains=contains
1507 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1508         contains=grep
1509 else
1510         contains=contains
1511 fi
1512 rm -f grimble
1513 : the following should work in any shell
1514 case "$contains" in
1515 contains*)
1516         echo " "
1517         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1518         cat >contains <<'EOSS'
1519 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1520 EOSS
1521 chmod +x contains
1522 esac
1523
1524 : Find the path to the source tree
1525 case "$src" in
1526 '') case "$0" in
1527     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1528          case "$src" in
1529          /*)    ;;
1530          .)     ;;
1531          *)     src=`cd ../$src && pwd` ;;
1532          esac
1533          ;;
1534     *)   src='.';;
1535     esac;;
1536 esac
1537 case "$src" in
1538 '')     src=/
1539         rsrc=/
1540         ;;
1541 /*) rsrc="$src";;
1542 *) rsrc="../$src";;
1543 esac
1544 if test -f $rsrc/Configure && \
1545         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1546 then
1547    : found it, so we are ok.
1548 else
1549         rsrc=''
1550         for src in . .. ../.. ../../.. ../../../..; do
1551                 if test -f ../$src/Configure && \
1552                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1553                 then
1554                         rsrc=../$src
1555                         break
1556                 fi
1557         done
1558 fi
1559 case "$rsrc" in
1560 '')
1561         cat <<EOM >&4
1562
1563 Sorry, I can't seem to locate the source dir for $package.  Please start
1564 Configure with an explicit path -- i.e. /some/path/Configure.
1565
1566 EOM
1567         exit 1
1568         ;;
1569 ../.)   rsrc='..';;
1570 *)
1571         echo " "
1572         echo "Sources for $package found in \"$src\"." >&4
1573         ;;
1574 esac
1575
1576 : script used to extract .SH files with variable substitutions
1577 cat >extract <<'EOS'
1578 PERL_CONFIG_SH=true
1579 echo "Doing variable substitutions on .SH files..."
1580 if test -f MANIFEST; then
1581         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1582 else
1583         echo "(Looking for .SH files under the source directory.)"
1584         set x `(cd $src; find . -name "*.SH" -print)`
1585 fi
1586 shift
1587 case $# in
1588 0) set x `(cd $src; echo *.SH)`; shift;;
1589 esac
1590 if test ! -f $src/$1; then
1591         shift
1592 fi
1593 mkdir_p='
1594 name=$1;
1595 create="";
1596 while test $name; do
1597         if test ! -d "$name"; then
1598                 create="$name $create";
1599                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1600                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1601         else
1602                 name="";
1603         fi;
1604 done;
1605 for file in $create; do
1606         mkdir $file;
1607 done
1608 '
1609 for file in $*; do
1610         case "$src" in
1611         ".")
1612                 case "$file" in
1613                 */*)
1614                         dir=`expr X$file : 'X\(.*\)/'`
1615                         file=`expr X$file : 'X.*/\(.*\)'`
1616                         (cd $dir && . ./$file)
1617                         ;;
1618                 *)
1619                         . ./$file
1620                         ;;
1621                 esac
1622                 ;;
1623         *)
1624                 case "$file" in
1625                 */*)
1626                         dir=`expr X$file : 'X\(.*\)/'`
1627                         file=`expr X$file : 'X.*/\(.*\)'`
1628                         (set x $dir; shift; eval $mkdir_p)
1629                         sh <$src/$dir/$file
1630                         ;;
1631                 *)
1632                         sh <$src/$file
1633                         ;;
1634                 esac
1635                 ;;
1636         esac
1637 done
1638 if test -f $src/config_h.SH; then
1639         if test ! -f config.h; then
1640         : oops, they left it out of MANIFEST, probably, so do it anyway.
1641         . $src/config_h.SH
1642         fi
1643 fi
1644 EOS
1645
1646 : extract files and exit if asked to do so
1647 case "$extractsh" in
1648 true)
1649         case "$realsilent" in
1650         true) ;;
1651         *) exec 1>&4;;
1652         esac
1653         case "$config_sh" in
1654         '') config_sh='config.sh';;
1655         esac
1656         echo " "
1657         echo "Fetching answers from $config_sh..."
1658         cd ..
1659         . $config_sh
1660         test "$override" && . ./optdef.sh
1661         echo " "
1662         . UU/extract
1663         rm -rf UU
1664         echo "Extraction done."
1665         exit 0
1666         ;;
1667 esac
1668
1669 : Eunice requires " " instead of "", can you believe it
1670 echo " "
1671 : Here we go...
1672 echo "Beginning of configuration questions for $package."
1673
1674 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1675
1676 : first determine how to suppress newline on echo command
1677 echo " "
1678 echo "Checking echo to see how to suppress newlines..."
1679 (echo "hi there\c" ; echo " ") >.echotmp
1680 if $contains c .echotmp >/dev/null 2>&1 ; then
1681         echo "...using -n."
1682         n='-n'
1683         c=''
1684 else
1685         cat <<'EOM'
1686 ...using \c
1687 EOM
1688         n=''
1689         c='\c'
1690 fi
1691 echo $n "The star should be here-->$c"
1692 echo '*'
1693 rm -f .echotmp
1694
1695 : Now test for existence of everything in MANIFEST
1696 echo " "
1697 if test -f $rsrc/MANIFEST; then
1698         echo "First let's make sure your kit is complete.  Checking..." >&4
1699         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1700         rm -f missing
1701         tmppwd=`pwd`
1702         for filelist in x??; do
1703                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1704         done
1705         if test -s missing; then
1706                 cat missing >&4
1707                 cat >&4 <<'EOM'
1708
1709 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1710
1711 You have the option of continuing the configuration process, despite the
1712 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1713 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1714 and contact the author (perlbug@perl.org).
1715
1716 EOM
1717                 echo $n "Continue? [n] $c" >&4
1718                 read ans
1719                 case "$ans" in
1720                 y*)
1721                         echo "Continuing..." >&4
1722                         rm -f missing
1723                         ;;
1724                 *)
1725                         echo "ABORTING..." >&4
1726                         kill $$
1727                         ;;
1728                 esac
1729         else
1730                 echo "Looks good..."
1731         fi
1732 else
1733         echo "There is no MANIFEST file.  I hope your kit is complete !"
1734 fi
1735 rm -f missing x??
1736
1737 echo " "
1738 : Find the appropriate value for a newline for tr
1739 if test -n "$DJGPP"; then
1740        trnl='\012'
1741 fi
1742 if test X"$trnl" = X; then
1743         case "`echo foo|tr '\n' x 2>/dev/null`" in
1744         foox) trnl='\n' ;;
1745         esac
1746 fi
1747 if test X"$trnl" = X; then
1748         case "`echo foo|tr '\012' x 2>/dev/null`" in
1749         foox) trnl='\012' ;;
1750         esac
1751 fi
1752 if test X"$trnl" = X; then
1753         cat <<EOM >&2
1754
1755 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1756
1757 EOM
1758         exit 1
1759 fi
1760
1761 : compute the number of columns on the terminal for proper question formatting
1762 case "$COLUMNS" in
1763 '') COLUMNS='80';;
1764 esac
1765
1766 : set up the echo used in my read
1767 myecho="case \"\$xxxm\" in
1768 '') echo $n \"\$rp $c\" >&4;;
1769 *) case \"\$rp\" in
1770         '') echo $n \"[\$xxxm] $c\";;
1771         *)
1772                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1773                         echo \"\$rp\" >&4
1774                         echo $n \"[\$xxxm] $c\" >&4
1775                 else
1776                         echo $n \"\$rp [\$xxxm] $c\" >&4
1777                 fi
1778                 ;;
1779         esac;;
1780 esac"
1781
1782 : now set up to do reads with possible shell escape and default assignment
1783 cat <<EOSC >myread
1784 $startsh
1785 xxxm=\$dflt
1786 $myecho
1787 ans='!'
1788 case "\$fastread" in
1789 yes) case "\$dflt" in
1790         '') ;;
1791         *) ans='';
1792                 case "\$silent-\$rp" in
1793                 true-) ;;
1794                 *) echo " " >&4;;
1795                 esac;;
1796         esac;;
1797 *) case "\$silent" in
1798         true) case "\$rp" in
1799                 '') ans='';;
1800                 esac;;
1801         esac;;
1802 esac
1803 while expr "X\$ans" : "X!" >/dev/null; do
1804         read answ
1805         set x \$xxxm
1806         shift
1807         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1808         case  "\$answ" in
1809         "!")
1810                 sh 1>&4
1811                 echo " "
1812                 $myecho
1813                 ;;
1814         !*)
1815                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1816                 shift
1817                 sh 1>&4 -c "\$*"
1818                 echo " "
1819                 $myecho
1820                 ;;
1821         "\$ans")
1822                 case "\$ans" in
1823                 \\&*)
1824                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1825                         shift
1826                         case "\$1" in
1827                         -d)
1828                                 fastread=yes
1829                                 echo "(OK, I'll run with -d after this question.)" >&4
1830                                 ;;
1831                         -*)
1832                                 echo "*** Sorry, \$1 not supported yet." >&4
1833                                 ;;
1834                         esac
1835                         $myecho
1836                         ans=!
1837                         ;;
1838                 esac;;
1839         *)
1840                 case "\$aok" in
1841                 y)
1842                         echo "*** Substitution done -- please confirm."
1843                         xxxm="\$ans"
1844                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1845                         xxxm="\$ans"
1846                         ans=!
1847                         ;;
1848                 *)
1849                         echo "*** Error -- try again."
1850                         ans=!
1851                         ;;
1852                 esac
1853                 $myecho
1854                 ;;
1855         esac
1856         case "\$ans\$xxxm\$nostick" in
1857         '')
1858                 ans=!
1859                 $myecho
1860                 ;;
1861         esac
1862 done
1863 case "\$ans" in
1864 '') ans="\$xxxm";;
1865 esac
1866 EOSC
1867
1868 : create .config dir to save info across Configure sessions
1869 test -d ../.config || mkdir ../.config
1870 cat >../.config/README <<EOF
1871 This directory created by Configure to save information that should
1872 persist across sessions for $package.
1873
1874 You may safely delete it if you wish.
1875 EOF
1876
1877 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1878 case "$usedevel" in
1879 $define|true|[yY]*) ;;
1880 *) case "$xversion" in
1881    *[13579])
1882         cat >&4 <<EOH
1883 *** WHOA THERE!!! ***
1884
1885     This is an UNSTABLE DEVELOPMENT release.
1886     The version of this $package distribution is $xversion, that is, odd,
1887     (as opposed to even) and that signifies a development release.
1888     If you want a maintenance release, you want an even-numbered version.
1889
1890     Do ***NOT*** install this into production use.
1891     Data corruption and crashes are possible.
1892
1893     It is most seriously suggested that you do not continue any further
1894     unless you want to help in developing and debugging Perl.
1895
1896     If you *still* want to build perl, you can answer 'y' now,
1897     or pass -Dusedevel to Configure.
1898
1899 EOH
1900         rp='Do you really want to continue?'
1901         dflt='n'
1902         . ./myread
1903         case "$ans" in
1904         [yY]) echo >&4 "Okay, continuing."
1905               usedevel="$define" ;;
1906         *) echo >&4 "Okay, bye."
1907            exit 1
1908            ;;
1909         esac
1910         ;;
1911     esac
1912     ;;
1913 esac
1914 case "$usedevel" in
1915 $define|true|[yY]*)
1916         case "$versiononly" in
1917         '') versiononly="$define" ;;
1918         esac
1919         case "$installusrbinperl" in
1920         '') installusrbinperl="$undef" ;;
1921         esac
1922         ;;
1923 esac
1924
1925 : general instructions
1926 needman=true
1927 firsttime=true
1928 user=`(logname) 2>/dev/null`
1929 case "$user" in
1930 '') user=`whoami 2>&1`;;
1931 esac
1932 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1933         firsttime=false
1934         echo " "
1935         rp='Would you like to see the instructions?'
1936         dflt=n
1937         . ./myread
1938         case "$ans" in
1939         [yY]*) ;;
1940         *) needman=false;;
1941         esac
1942 fi
1943 if $needman; then
1944         cat <<EOH
1945
1946 This installation shell script will examine your system and ask you questions
1947 to determine how the perl5 package should be installed. If you get
1948 stuck on a question, you may use a ! shell escape to start a subshell or
1949 execute a command.  Many of the questions will have default answers in square
1950 brackets; typing carriage return will give you the default.
1951
1952 On some of the questions which ask for file or directory names you are allowed
1953 to use the ~name construct to specify the login directory belonging to "name",
1954 even if you don't have a shell which knows about that.  Questions where this is
1955 allowed will be marked "(~name ok)".
1956
1957 EOH
1958         rp=''
1959         dflt='Type carriage return to continue'
1960         . ./myread
1961         cat <<'EOH'
1962
1963 The prompter used in this script allows you to use shell variables and
1964 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1965 in the default answer, as if the default line was a set of arguments given to a
1966 script shell.  This means you may also use $* to repeat the whole default line,
1967 so you do not have to re-type everything to add something to the default.
1968
1969 Everytime there is a substitution, you will have to confirm.  If there is an
1970 error (e.g. an unmatched backtick), the default answer will remain unchanged
1971 and you will be prompted again.
1972
1973 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1974 the questions and use the computed defaults (or the previous answers if there
1975 was already a config.sh file). Type 'Configure -h' for a list of options.
1976 You may also start interactively and then answer '& -d' at any prompt to turn
1977 on the non-interactive behaviour for the remainder of the execution.
1978
1979 EOH
1980         . ./myread
1981         cat <<EOH
1982
1983 Much effort has been expended to ensure that this shell script will run on any
1984 Unix system.  If despite that it blows up on yours, your best bet is to edit
1985 Configure and run it again.  If you can't run Configure for some reason,
1986 you'll have to generate a config.sh file by hand.  Whatever problems you
1987 have, let me (perlbug@perl.org) know how I blew it.
1988
1989 This installation script affects things in two ways:
1990
1991 1) it may do direct variable substitutions on some of the files included
1992    in this kit.
1993 2) it builds a config.h file for inclusion in C programs.  You may edit
1994    any of these files as the need arises after running this script.
1995
1996 If you make a mistake on a question, there is no easy way to back up to it
1997 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1998 files.  Configure will offer to let you do this before it runs the SH files.
1999
2000 EOH
2001         dflt='Type carriage return to continue'
2002         . ./myread
2003         case "$firsttime" in
2004         true) echo $user >>../.config/instruct;;
2005         esac
2006 fi
2007
2008 : find out where common programs are
2009 echo " "
2010 echo "Locating common programs..." >&4
2011 cat <<EOSC >loc
2012 $startsh
2013 case \$# in
2014 0) exit 1;;
2015 esac
2016 thing=\$1
2017 shift
2018 dflt=\$1
2019 shift
2020 for dir in \$*; do
2021         case "\$thing" in
2022         .)
2023         if test -d \$dir/\$thing; then
2024                 echo \$dir
2025                 exit 0
2026         fi
2027         ;;
2028         *)
2029         for thisthing in \$dir/\$thing; do
2030                 : just loop through to pick last item
2031         done
2032         if test -f \$thisthing; then
2033                 echo \$thisthing
2034                 exit 0
2035         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2036                 echo \$thisthing
2037                 exit 0
2038         elif test -f \$dir/\$thing.exe; then
2039                 if test -n "$DJGPP"; then
2040                         echo \$dir/\$thing.exe
2041                 else
2042                         : on Eunice apparently
2043                         echo \$dir/\$thing
2044                 fi
2045                 exit 0
2046         fi
2047         ;;
2048         esac
2049 done
2050 echo \$dflt
2051 exit 1
2052 EOSC
2053 chmod +x loc
2054 $eunicefix loc
2055 loclist="
2056 awk
2057 cat
2058 chmod
2059 comm
2060 cp
2061 echo
2062 expr
2063 grep
2064 ls
2065 mkdir
2066 rm
2067 sed
2068 sort
2069 touch
2070 tr
2071 uniq
2072 "
2073 trylist="
2074 Mcc
2075 ar
2076 bison
2077 byacc
2078 cpp
2079 csh
2080 date
2081 egrep
2082 gmake
2083 gzip
2084 less
2085 ln
2086 make
2087 more
2088 nm
2089 nroff
2090 pg
2091 test
2092 uname
2093 zip
2094 "
2095 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2096 pth="$pth /lib /usr/lib"
2097 for file in $loclist; do
2098         eval xxx=\$$file
2099         case "$xxx" in
2100         /*|?:[\\/]*)
2101                 if test -f "$xxx"; then
2102                         : ok
2103                 else
2104                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2105                         xxx=`./loc $file $file $pth`
2106                 fi
2107                 ;;
2108         '') xxx=`./loc $file $file $pth`;;
2109         *) xxx=`./loc $xxx $xxx $pth`;;
2110         esac
2111         eval $file=$xxx$_exe
2112         eval _$file=$xxx
2113         case "$xxx" in
2114         /*)
2115                 echo $file is in $xxx.
2116                 ;;
2117         ?:[\\/]*)
2118                 echo $file is in $xxx.
2119                 ;;
2120         *)
2121                 echo "I don't know where '$file' is, and my life depends on it." >&4
2122                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2123                 exit 1
2124                 ;;
2125         esac
2126 done
2127 echo " "
2128 echo "Don't worry if any of the following aren't found..."
2129 say=offhand
2130 for file in $trylist; do
2131         eval xxx=\$$file
2132         case "$xxx" in
2133         /*|?:[\\/]*)
2134                 if test -f "$xxx"; then
2135                         : ok
2136                 else
2137                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2138                         xxx=`./loc $file $file $pth`
2139                 fi
2140                 ;;
2141         '') xxx=`./loc $file $file $pth`;;
2142         *) xxx=`./loc $xxx $xxx $pth`;;
2143         esac
2144         eval $file=$xxx
2145         eval _$file=$xxx
2146         case "$xxx" in
2147         /*)
2148                 echo $file is in $xxx.
2149                 ;;
2150         ?:[\\/]*)
2151                 echo $file is in $xxx.
2152                 ;;
2153         *)
2154                 echo "I don't see $file out there, $say."
2155                 say=either
2156                 ;;
2157         esac
2158 done
2159 case "$egrep" in
2160 egrep)
2161         echo "Substituting grep for egrep."
2162         egrep=$grep
2163         _egrep=$grep
2164         ;;
2165 esac
2166 case "$ln" in
2167 ln)
2168         echo "Substituting cp for ln."
2169         ln=$cp
2170         _ln=$cp
2171         ;;
2172 esac
2173 case "$make" in
2174 make)   
2175         case "$gmake" in
2176         gmake)
2177         echo "I can't find make or gmake, and my life depends on it." >&4
2178         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2179         exit 1
2180         ;;
2181         esac
2182         ;;
2183 esac    
2184 case "$gmake" in
2185 gmake)  ;;
2186 *)      # We can't have osname yet.
2187         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2188                 # Assume that gmake, if found, is definitely GNU make
2189                 # and prefer it over the system make.
2190                 echo "Substituting gmake for make."
2191                 make=$gmake
2192                 _make=$gmake
2193         fi
2194         ;;
2195 esac
2196 case "$test" in
2197 test)
2198         echo "Hopefully test is built into your sh."
2199         ;;
2200 *)
2201         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2202                 echo "Using the test built into your sh."
2203                 test=test
2204                 _test=test
2205         fi
2206         ;;
2207 esac
2208 case "$echo" in
2209 echo)
2210         echo "Hopefully echo is built into your sh."
2211         ;;
2212 '') ;;
2213 *)
2214         echo " "
2215 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2216         $echo $n "hi there$c" >foo1
2217         echo $n "hi there$c" >foo2
2218         if cmp foo1 foo2 >/dev/null 2>&1; then
2219                 echo "They are compatible.  In fact, they may be identical."
2220         else
2221                 case "$n" in
2222                 '-n') n='' c='\c';;
2223                 *) n='-n' c='';;
2224                 esac
2225                 cat <<FOO
2226 They are not compatible!  You are probably running ksh on a non-USG system.
2227 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2228 have echo built in and we may have to run some Bourne shell scripts.  That
2229 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2230
2231 FOO
2232                 $echo $n "The star should be here-->$c"
2233                 $echo "*"
2234         fi
2235         $rm -f foo1 foo2
2236         ;;
2237 esac
2238
2239 cat <<EOS >checkcc
2240 $startsh
2241 EOS
2242 cat <<'EOSC' >>checkcc
2243 case "$cc" in
2244 '') ;;
2245 *)  $rm -f try try.*
2246     $cat >try.c <<EOM
2247 int main(int argc, char *argv[]) {
2248   return 0;
2249 }
2250 EOM
2251     if $cc -o try $ccflags $ldflags try.c; then
2252        :
2253     else
2254         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2255         despair=yes
2256         trygcc=yes
2257         case "$cc" in
2258         *gcc*) trygcc=no ;;
2259         esac
2260         case "`$cc -v -c try.c 2>&1`" in
2261         *gcc*) trygcc=no ;;
2262         esac
2263         if $test X"$trygcc" = Xyes; then
2264             if gcc -o try -c try.c; then
2265                 echo " "
2266                 echo "You seem to have a working gcc, though." >&4
2267                 rp="Would you like to use it?"
2268                 dflt=y
2269                 if $test -f myread; then
2270                     . ./myread
2271                 else
2272                     if $test -f UU/myread; then
2273                         . ./UU/myread
2274                     else
2275                         echo "Cannot find myread, sorry.  Aborting." >&2
2276                         exit 1
2277                     fi
2278                 fi  
2279                 case "$ans" in
2280                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2281                 esac
2282             fi
2283         fi
2284         if $test X"$despair" = Xyes; then
2285             $cat >&4 <<EOM
2286 You need to find a working C compiler.
2287 Either (purchase and) install the C compiler supplied by your OS vendor,
2288 or for a free C compiler try http://gcc.gnu.org/
2289 I cannot continue any further, aborting.
2290 EOM
2291             exit 1
2292         fi
2293     fi
2294     $rm -f try try.*
2295     ;;
2296 esac
2297 EOSC
2298
2299 : determine whether symbolic links are supported
2300 echo " "
2301 $touch blurfl
2302 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2303         echo "Symbolic links are supported." >&4
2304         lns="$ln -s"
2305 else
2306         echo "Symbolic links are NOT supported." >&4
2307         lns="$ln"
2308 fi
2309 $rm -f blurfl sym
2310
2311 : determine whether symbolic links are supported
2312 echo " "
2313 case "$lns" in
2314 *"ln -s")
2315         echo "Checking how to test for symbolic links..." >&4
2316         $lns blurfl sym
2317         if $test "X$issymlink" = X; then
2318                 case "$newsh" in
2319                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2320                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2321                 esac
2322                 if test $? = 0; then
2323                         issymlink="test -h"
2324                 else
2325                         echo "Your builtin 'test -h' may be broken." >&4
2326                         case "$test" in
2327                         /*)     ;;
2328                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2329                                 for p in $pth
2330                                 do
2331                                         if test -f "$p/$test"; then
2332                                                 test="$p/$test"
2333                                                 break
2334                                         fi
2335                                 done
2336                                 ;;
2337                         esac
2338                         case "$test" in
2339                         /*)
2340                                 echo "Trying external '$test -h'." >&4
2341                                 issymlink="$test -h"
2342                                 if $test ! -h sym >/dev/null 2>&1; then
2343                                         echo "External '$test -h' is broken, too." >&4
2344                                         issymlink=''
2345                                 fi
2346                                 ;;
2347                         *)      issymlink='' ;;
2348                         esac
2349                 fi              
2350         fi
2351         if $test "X$issymlink" = X; then
2352                 if $test -L sym 2>/dev/null; then
2353                         issymlink="$test -L"
2354                         echo "The builtin '$test -L' worked." >&4
2355                 fi
2356         fi
2357         if $test "X$issymlink" != X; then
2358                 echo "You can test for symbolic links with '$issymlink'." >&4
2359         else
2360                 echo "I do not know how you can test for symbolic links." >&4
2361         fi
2362         $rm -f blurfl sym
2363         ;;
2364 *)      echo "No symbolic links, so not testing for their testing..." >&4
2365         ;;
2366 esac
2367 echo " "
2368
2369
2370 case "$mksymlinks" in
2371 $define|true|[yY]*)
2372         case "$src" in
2373         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2374                 exit 1
2375                 ;;
2376         *)      case "$lns:$issymlink" in
2377                 *"ln -s:"*"test -"?)
2378                         echo "Creating the symbolic links..." >&4
2379                         echo "(First creating the subdirectories...)" >&4
2380                         cd ..
2381                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2382                                 read directory
2383                                 test -z "$directory" && break
2384                                 mkdir -p $directory
2385                         done
2386                         # Sanity check 1.
2387                         if test ! -d t/base; then
2388                                 echo "Failed to create the subdirectories.  Aborting." >&4
2389                                 exit 1
2390                         fi
2391                         echo "(Then creating the symlinks...)" >&4
2392                         awk '{print $1}' $src/MANIFEST | while true; do
2393                                 read filename
2394                                 test -z "$filename" && break
2395                                 if test -f $filename; then
2396                                         if $issymlink $filename; then
2397                                                 rm -f $filename
2398                                         fi
2399                                 fi
2400                                 if test -f $filename; then
2401                                         echo "$filename already exists, not symlinking."
2402                                 else
2403                                         ln -s $src/$filename $filename
2404                                 fi
2405                         done
2406                         # Sanity check 2.
2407                         if test ! -f t/base/lex.t; then
2408                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2409                                 exit 1
2410                         fi
2411                         cd UU
2412                         ;;
2413                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2414                         ;;
2415                 esac
2416                 ;;
2417         esac
2418         ;;
2419 esac
2420
2421
2422 case "$usecrosscompile" in
2423 $define|true|[yY]*)
2424         $echo "Cross-compiling..."
2425         croak=''
2426         case "$cc" in
2427         *-*-gcc) # A cross-compiling gcc, probably.
2428             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2429             ar=$targetarch-ar
2430             # leave out ld, choosing it is more complex
2431             nm=$targetarch-nm
2432             ranlib=$targetarch-ranlib
2433             $echo 'extern int foo;' > try.c
2434             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2435             shift
2436             if $test $# -gt 0; then
2437                 incpth="$incpth $*"
2438                 incpth="`$echo $incpth|$sed 's/^ //'`"
2439                 echo "Guessing incpth '$incpth'." >&4
2440                 for i in $*; do
2441                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2442                     if $test -d $j; then
2443                         libpth="$libpth $j"
2444                     fi
2445                 done   
2446                 libpth="`$echo $libpth|$sed 's/^ //'`"
2447                 echo "Guessing libpth '$libpth'." >&4
2448             fi
2449             $rm -f try.c
2450             ;;
2451         esac
2452         case "$targetarch" in
2453         '') echo "Targetarch not defined." >&4; croak=y ;;
2454         *)  echo "Using targetarch $targetarch." >&4 ;;
2455         esac
2456         case "$incpth" in
2457         '') echo "Incpth not defined." >&4; croak=y ;;
2458         *)  echo "Using incpth '$incpth'." >&4 ;;
2459         esac
2460         case "$libpth" in
2461         '') echo "Libpth not defined." >&4; croak=y ;;
2462         *)  echo "Using libpth '$libpth'." >&4 ;;
2463         esac
2464         case "$usrinc" in
2465         '') for i in $incpth; do
2466                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2467                     usrinc=$i
2468                     echo "Guessing usrinc $usrinc." >&4
2469                     break
2470                 fi
2471             done
2472             case "$usrinc" in
2473             '') echo "Usrinc not defined." >&4; croak=y ;;
2474             esac
2475             ;;
2476         *)  echo "Using usrinc $usrinc." >&4 ;;
2477         esac
2478         case "$targethost" in
2479         '') echo "Targethost not defined." >&4; croak=y ;;
2480         *)  echo "Using targethost $targethost." >&4
2481         esac
2482         locincpth=' '
2483         loclibpth=' '
2484         case "$croak" in
2485         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2486         esac
2487         case "$src" in
2488         /*) run=$src/Cross/run
2489             targetmkdir=$src/Cross/mkdir
2490             to=$src/Cross/to
2491             from=$src/Cross/from
2492             ;;
2493         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2494             run=$pwd/Cross/run
2495             targetmkdir=$pwd/Cross/mkdir
2496             to=$pwd/Cross/to
2497             from=$pwd/Cross/from
2498             ;;
2499         esac
2500         case "$targetrun" in
2501         '') targetrun=ssh ;;
2502         esac
2503         case "$targetto" in
2504         '') targetto=scp ;;
2505         esac
2506         case "$targetfrom" in
2507         '') targetfrom=scp ;;
2508         esac
2509         run=$run-$targetrun
2510         to=$to-$targetto
2511         from=$from-$targetfrom
2512         case "$targetdir" in
2513         '')  targetdir=/tmp
2514              echo "Guessing targetdir $targetdir." >&4
2515              ;;
2516         esac
2517         case "$targetuser" in
2518         '')  targetuser=root
2519              echo "Guessing targetuser $targetuser." >&4
2520              ;;
2521         esac
2522         case "$targetfrom" in
2523         scp)    q=-q ;;
2524         *)      q='' ;;
2525         esac
2526         case "$targetrun" in
2527         ssh|rsh)
2528             cat >$run <<EOF
2529 #!/bin/sh
2530 case "\$1" in
2531 -cwd)
2532   shift
2533   cwd=\$1
2534   shift
2535   ;;
2536 esac
2537 case "\$cwd" in
2538 '') cwd=$targetdir ;;
2539 esac
2540 exe=\$1
2541 shift
2542 if $test ! -f \$exe.xok; then
2543   $to \$exe
2544   $touch \$exe.xok
2545 fi
2546 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2547 EOF
2548             ;;
2549         *)  echo "Unknown targetrun '$targetrun'" >&4
2550             exit 1
2551             ;;
2552         esac
2553         case "$targetmkdir" in
2554         */Cross/mkdir)
2555             cat >$targetmkdir <<EOF
2556 #!/bin/sh
2557 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2558 EOF
2559             $chmod a+rx $targetmkdir
2560             ;;
2561         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2562             exit 1
2563             ;;
2564         esac
2565         case "$targetto" in
2566         scp|rcp)
2567             cat >$to <<EOF
2568 #!/bin/sh
2569 for f in \$@
2570 do
2571   case "\$f" in
2572   /*)
2573     $targetmkdir \`dirname \$f\`
2574     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2575     ;;
2576   *)
2577     $targetmkdir $targetdir/\`dirname \$f\`
2578     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2579     ;;
2580   esac
2581 done
2582 exit 0
2583 EOF
2584             ;;
2585         cp) cat >$to <<EOF
2586 #!/bin/sh
2587 for f in \$@
2588 do
2589   case "\$f" in
2590   /*)
2591     $mkdir -p $targetdir/\`dirname \$f\`
2592     $cp \$f $targetdir/\$f || exit 1
2593     ;;
2594   *)
2595     $targetmkdir $targetdir/\`dirname \$f\`
2596     $cp \$f $targetdir/\$f || exit 1
2597     ;;
2598   esac
2599 done
2600 exit 0
2601 EOF
2602             ;;
2603         *)  echo "Unknown targetto '$targetto'" >&4
2604             exit 1
2605             ;;
2606         esac
2607         case "$targetfrom" in
2608         scp|rcp)
2609           cat >$from <<EOF
2610 #!/bin/sh
2611 for f in \$@
2612 do
2613   $rm -f \$f
2614   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2615 done
2616 exit 0
2617 EOF
2618             ;;
2619         cp) cat >$from <<EOF
2620 #!/bin/sh
2621 for f in \$@
2622 do
2623   $rm -f \$f
2624   cp $targetdir/\$f . || exit 1
2625 done
2626 exit 0
2627 EOF
2628             ;;
2629         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2630             exit 1
2631             ;;
2632         esac
2633         if $test ! -f $run; then
2634             echo "Target 'run' script '$run' not found." >&4
2635         else
2636             $chmod a+rx $run
2637         fi
2638         if $test ! -f $to; then
2639             echo "Target 'to' script '$to' not found." >&4
2640         else
2641             $chmod a+rx $to
2642         fi
2643         if $test ! -f $from; then
2644             echo "Target 'from' script '$from' not found." >&4
2645         else
2646             $chmod a+rx $from
2647         fi
2648         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2649             exit 1
2650         fi
2651         cat >&4 <<EOF
2652 Using '$run' for remote execution,
2653 and '$from' and '$to'
2654 for remote file transfer.
2655 EOF
2656         ;;
2657 *)      run=''
2658         to=:
2659         from=:
2660         usecrosscompile='undef'
2661         targetarch=''
2662         ;;
2663 esac
2664
2665 : see whether [:lower:] and [:upper:] are supported character classes
2666 echo " "
2667 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2668 ABYZ)
2669         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2670         up='[:upper:]'
2671         low='[:lower:]'
2672         ;;
2673 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2674         # (0xc9 and 0xd1), therefore that is a nice testing point.
2675         if test "X$up" = X -o "X$low" = X; then
2676             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2677             ij) up='[A-Z]'
2678                 low='[a-z]'
2679                 ;;
2680             esac
2681         fi
2682         if test "X$up" = X -o "X$low" = X; then
2683             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2684             ij) up='A-Z'
2685                 low='a-z'
2686                 ;;
2687             esac
2688         fi
2689         if test "X$up" = X -o "X$low" = X; then
2690             case "`echo IJ | od -x 2>/dev/null`" in
2691             *C9D1*|*c9d1*)
2692                 echo "Hey, this might be EBCDIC." >&4
2693                 if test "X$up" = X -o "X$low" = X; then
2694                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2695                     ij) up='[A-IJ-RS-Z]'
2696                         low='[a-ij-rs-z]'
2697                         ;;
2698                     esac
2699                 fi
2700                 if test "X$up" = X -o "X$low" = X; then
2701                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2702                     ij) up='A-IJ-RS-Z'
2703                         low='a-ij-rs-z'
2704                         ;;
2705                     esac
2706                 fi
2707                 ;;
2708             esac
2709         fi
2710 esac
2711 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2712 ij)
2713     echo "Using $up and $low to convert case." >&4
2714     ;;
2715 *)
2716     echo "I don't know how to translate letters from upper to lower case." >&4
2717     echo "Your tr is not acting any way I know of." >&4
2718     exit 1
2719     ;;
2720 esac
2721 : set up the translation script tr, must be called with ./tr of course
2722 cat >tr <<EOSC
2723 $startsh
2724 case "\$1\$2" in
2725 '[A-Z][a-z]') exec $tr '$up' '$low';;
2726 '[a-z][A-Z]') exec $tr '$low' '$up';;
2727 esac
2728 exec $tr "\$@"
2729 EOSC
2730 chmod +x tr
2731 $eunicefix tr
2732
2733 : Try to determine whether config.sh was made on this system
2734 case "$config_sh" in
2735 '')
2736 myuname=`$uname -a 2>/dev/null`
2737 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2738 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2739 # because the A-Z/a-z are not consecutive.
2740 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2741         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2742 newmyuname="$myuname"
2743 dflt=n
2744 case "$knowitall" in
2745 '')
2746         if test -f ../config.sh; then
2747                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2748                         eval "`grep myuname= ../config.sh`"
2749                 fi
2750                 if test "X$myuname" = "X$newmyuname"; then
2751                         dflt=y
2752                 fi
2753         fi
2754         ;;
2755 *) dflt=y;;
2756 esac
2757
2758 : Get old answers from old config file if Configure was run on the
2759 : same system, otherwise use the hints.
2760 hint=default
2761 cd ..
2762 if test -f config.sh; then
2763         echo " "
2764         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2765         . UU/myread
2766         case "$ans" in
2767         n*|N*) echo "OK, I'll ignore it."
2768                 mv config.sh config.sh.old
2769                 myuname="$newmyuname"
2770                 ;;
2771         *)  echo "Fetching default answers from your old config.sh file..." >&4
2772                 tmp_n="$n"
2773                 tmp_c="$c"
2774                 tmp_sh="$sh"
2775                 . ./config.sh
2776                 cp config.sh UU
2777                 n="$tmp_n"
2778                 c="$tmp_c"
2779                 : Older versions did not always set $sh.  Catch re-use of such
2780                 : an old config.sh.
2781                 case "$sh" in
2782                 '') sh="$tmp_sh" ;;
2783                 esac
2784                 hint=previous
2785                 ;;
2786         esac
2787 fi
2788 . ./UU/checkcc
2789 if test ! -f config.sh; then
2790         $cat <<EOM
2791
2792 First time through, eh?  I have some defaults handy for some systems
2793 that need some extra help getting the Configure answers right:
2794
2795 EOM
2796         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2797         dflt=''
2798         : Half the following guesses are probably wrong... If you have better
2799         : tests or hints, please send them to perlbug@perl.org
2800         : The metaconfig authors would also appreciate a copy...
2801         $test -f /irix && osname=irix
2802         $test -f /xenix && osname=sco_xenix
2803         $test -f /dynix && osname=dynix
2804         $test -f /dnix && osname=dnix
2805         $test -f /lynx.os && osname=lynxos
2806         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2807         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2808         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2809         $test -f /bin/mips && /bin/mips && osname=mips
2810         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2811                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2812         $test -d /usr/apollo/bin && osname=apollo
2813         $test -f /etc/saf/_sactab && osname=svr4
2814         $test -d /usr/include/minix && osname=minix
2815         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2816         if $test -d /MachTen -o -d /MachTen_Folder; then
2817                 osname=machten
2818                 if $test -x /sbin/version; then
2819                         osvers=`/sbin/version | $awk '{print $2}' |
2820                         $sed -e 's/[A-Za-z]$//'`
2821                 elif $test -x /usr/etc/version; then
2822                         osvers=`/usr/etc/version | $awk '{print $2}' |
2823                         $sed -e 's/[A-Za-z]$//'`
2824                 else
2825                         osvers="$2.$3"
2826                 fi
2827         fi
2828
2829         $test -f /sys/posix.dll &&
2830                 $test -f /usr/bin/what &&
2831                 set X `/usr/bin/what /sys/posix.dll` &&
2832                 $test "$3" = UWIN &&
2833                 osname=uwin &&
2834                 osvers="$5"
2835
2836         if $test -f $uname; then
2837                 set X $myuname
2838                 shift
2839
2840                 case "$5" in
2841                 fps*) osname=fps ;;
2842                 mips*)
2843                         case "$4" in
2844                         umips) osname=umips ;;
2845                         *) osname=mips ;;
2846                         esac;;
2847                 [23]100) osname=mips ;;
2848                 next*) osname=next ;;
2849                 i386*)
2850                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2851                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2852                                 osname='sco'
2853                                 osvers=$tmp
2854                         elif $test -f /etc/kconfig; then
2855                                 osname=isc
2856                                 if test "$lns" = "$ln -s"; then
2857                                         osvers=4
2858                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2859                                         osvers=3
2860                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2861                                         osvers=2
2862                                 fi
2863                         fi
2864                         tmp=''
2865                         ;;
2866                 pc*)
2867                         if test -n "$DJGPP"; then
2868                                 osname=dos
2869                                 osvers=djgpp
2870                         fi
2871                         ;;
2872                 esac
2873
2874                 case "$1" in
2875                 aix) osname=aix
2876                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2877                         case "$tmp" in
2878                         'not found') osvers="$4"."$3" ;;
2879                         '<3240'|'<>3240') osvers=3.2.0 ;;
2880                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2881                         '=3250'|'>3250') osvers=3.2.5 ;;
2882                         *) osvers=$tmp;;
2883                         esac
2884                         ;;
2885                 bsd386) osname=bsd386
2886                         osvers=`$uname -r`
2887                         ;;
2888                 cygwin*) osname=cygwin
2889                         osvers="$3"
2890                         ;;
2891                 *dc.osx) osname=dcosx
2892                         osvers="$3"
2893                         ;;
2894                 dnix) osname=dnix
2895                         osvers="$3"
2896                         ;;
2897                 domainos) osname=apollo
2898                         osvers="$3"
2899                         ;;
2900                 dgux) osname=dgux 
2901                         osvers="$3"
2902                         ;;
2903                 dynixptx*) osname=dynixptx
2904                         osvers=`echo "$4"|sed 's/^v//'`
2905                         ;;
2906                 freebsd) osname=freebsd 
2907                         osvers="$3" ;;
2908                 genix) osname=genix ;;
2909                 hp*) osname=hpux 
2910                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2911                         ;;
2912                 irix*) osname=irix
2913                         case "$3" in
2914                         4*) osvers=4 ;;
2915                         5*) osvers=5 ;;
2916                         *)      osvers="$3" ;;
2917                         esac
2918                         ;;
2919                 linux) osname=linux
2920                         case "$3" in
2921                         *)      osvers="$3" ;;
2922                         esac
2923                         ;;
2924                 MiNT) osname=mint
2925                         ;;
2926                 netbsd*) osname=netbsd
2927                         osvers="$3"
2928                         ;;
2929                 news-os) osvers="$3"
2930                         case "$3" in
2931                         4*) osname=newsos4 ;;
2932                         *) osname=newsos ;;
2933                         esac
2934                         ;;
2935                 next*) osname=next ;;
2936                 nonstop-ux) osname=nonstopux ;;
2937                 POSIX-BC | posix-bc ) osname=posix-bc
2938                         osvers="$3"
2939                         ;;
2940                 powerux | power_ux | powermax_os | powermaxos | \
2941                 powerunix | power_unix) osname=powerux
2942                         osvers="$3"
2943                         ;;
2944                 qnx) osname=qnx
2945                         osvers="$4"
2946                         ;;
2947                 solaris) osname=solaris
2948                         case "$3" in
2949                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2950                         *)      osvers="$3" ;;
2951                         esac
2952                         ;;
2953                 sunos) osname=sunos
2954                         case "$3" in
2955                         5*) osname=solaris
2956                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2957                         *)      osvers="$3" ;;
2958                         esac
2959                         ;;
2960                 titanos) osname=titanos
2961                         case "$3" in
2962                         1*) osvers=1 ;;
2963                         2*) osvers=2 ;;
2964                         3*) osvers=3 ;;
2965                         4*) osvers=4 ;;
2966                         *)      osvers="$3" ;;
2967                         esac
2968                         ;;
2969                 ultrix) osname=ultrix
2970                         osvers="$3"
2971                         ;;
2972                 osf1|mls+)      case "$5" in
2973                                 alpha)
2974                                         osname=dec_osf
2975                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2976                                         case "$osvers" in
2977                                         [1-9].[0-9]*) ;;
2978                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2979                                         esac
2980                                         ;;
2981                         hp*)    osname=hp_osf1  ;;
2982                         mips)   osname=mips_osf1 ;;
2983                         esac
2984                         ;;
2985                 unixware) osname=svr5
2986                         osvers="$4"
2987                         ;;
2988                 uts)    osname=uts
2989                         osvers="$3"
2990                         ;;
2991                 vos) osvers="$3"
2992                         ;;
2993                 $2) case "$osname" in
2994                         *isc*) ;;
2995                         *freebsd*) ;;
2996                         svr*)
2997                                 : svr4.x or possibly later
2998                                 case "svr$3" in 
2999                                 ${osname}*)
3000                                         osname=svr$3
3001                                         osvers=$4
3002                                         ;;
3003                                 esac
3004                                 case "$osname" in
3005                                 svr4.0)
3006                                         : Check for ESIX
3007                                         if test -f /stand/boot ; then
3008                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3009                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3010                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3011                                                         if test -n "$isesix"; then
3012                                                                 osname=esix4
3013                                                         fi
3014                                                 fi
3015                                         fi
3016                                         ;;
3017                                 esac
3018                                 ;;
3019                         *)      if test -f /etc/systemid; then
3020                                         osname=sco
3021                                         set `echo $3 | $sed 's/\./ /g'` $4
3022                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3023                                                 osvers=$1.$2.$3
3024                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3025                                                 osvers=$1.$2
3026                                         elif $test -f $src/hints/sco_$1.sh; then
3027                                                 osvers=$1
3028                                         fi
3029                                 else
3030                                         case "$osname" in
3031                                         '') : Still unknown.  Probably a generic Sys V.
3032                                                 osname="sysv"
3033                                                 osvers="$3"
3034                                                 ;;
3035                                         esac
3036                                 fi
3037                                 ;;
3038                         esac
3039                         ;;
3040                 *)      case "$osname" in
3041                         '') : Still unknown.  Probably a generic BSD.
3042                                 osname="$1"
3043                                 osvers="$3"
3044                                 ;;
3045                         esac
3046                         ;;
3047                 esac
3048         else
3049                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3050                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3051                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3052                                 osname=news_os
3053                         fi
3054                         $rm -f UU/kernel.what
3055                 elif test -d c:/.; then
3056                         set X $myuname
3057                         osname=os2
3058                         osvers="$5"
3059                 fi
3060         fi
3061         
3062         case "$targetarch" in
3063         '') ;;
3064         *)  hostarch=$osname
3065             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3066             osvers=''
3067             ;;
3068         esac
3069
3070         : Now look for a hint file osname_osvers, unless one has been
3071         : specified already.
3072         case "$hintfile" in
3073         ''|' ')
3074                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3075                 : Also try without trailing minor version numbers.
3076                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3077                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3078                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3079                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3080                 case "$file" in
3081                 '') dflt=none ;;
3082                 *)  case "$osvers" in
3083                         '') dflt=$file
3084                                 ;;
3085                         *)  if $test -f $src/hints/$file.sh ; then
3086                                         dflt=$file
3087                                 elif $test -f $src/hints/$xfile.sh ; then
3088                                         dflt=$xfile
3089                                 elif $test -f $src/hints/$xxfile.sh ; then
3090                                         dflt=$xxfile
3091                                 elif $test -f $src/hints/$xxxfile.sh ; then
3092                                         dflt=$xxxfile
3093                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3094                                         dflt=$xxxxfile
3095                                 elif $test -f "$src/hints/${osname}.sh" ; then
3096                                         dflt="${osname}"
3097                                 else
3098                                         dflt=none
3099                                 fi
3100                                 ;;
3101                         esac
3102                         ;;
3103                 esac
3104                 if $test -f Policy.sh ; then
3105                         case "$dflt" in
3106                         *Policy*) ;;
3107                         none) dflt="Policy" ;;
3108                         *) dflt="Policy $dflt" ;;
3109                         esac
3110                 fi
3111                 ;;
3112         *)
3113                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3114                 ;;
3115         esac
3116
3117         if $test -f Policy.sh ; then
3118                 $cat <<EOM
3119
3120 There's also a Policy hint file available, which should make the
3121 site-specific (policy) questions easier to answer.
3122 EOM
3123
3124         fi
3125
3126         $cat <<EOM
3127
3128 You may give one or more space-separated answers, or "none" if appropriate.
3129 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3130 is a good thing.  DO NOT give a wrong version or a wrong OS.
3131
3132 EOM
3133
3134         rp="Which of these apply, if any?"
3135         . UU/myread
3136         tans=$ans
3137         for file in $tans; do
3138                 if $test X$file = XPolicy -a -f Policy.sh; then
3139                         . Policy.sh
3140                         $cat Policy.sh >> UU/config.sh
3141                 elif $test -f $src/hints/$file.sh; then
3142                         . $src/hints/$file.sh
3143                         $cat $src/hints/$file.sh >> UU/config.sh
3144                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3145                         : nothing
3146                 else
3147                         : Give one chance to correct a possible typo.
3148                         echo "$file.sh does not exist"
3149                         dflt=$file
3150                         rp="hint to use instead?"
3151                         . UU/myread
3152                         for file in $ans; do
3153                                 if $test -f "$src/hints/$file.sh"; then
3154                                         . $src/hints/$file.sh
3155                                         $cat $src/hints/$file.sh >> UU/config.sh
3156                                 elif $test X$ans = X -o X$ans = Xnone ; then
3157                                         : nothing
3158                                 else
3159                                         echo "$file.sh does not exist -- ignored."
3160                                 fi
3161                         done
3162                 fi
3163         done
3164
3165         hint=recommended
3166         : Remember our hint file for later.
3167         if $test -f "$src/hints/$file.sh" ; then
3168                 hintfile="$file"
3169         else
3170                 hintfile=''
3171         fi
3172 fi
3173 cd UU
3174 ;;
3175 *)
3176         echo " "
3177         echo "Fetching default answers from $config_sh..." >&4
3178         tmp_n="$n"
3179         tmp_c="$c"
3180         cd ..
3181         cp $config_sh config.sh 2>/dev/null
3182         chmod +w config.sh
3183         . ./config.sh
3184         cd UU
3185         cp ../config.sh .
3186         n="$tmp_n"
3187         c="$tmp_c"
3188         hint=previous
3189         ;;
3190 esac
3191 test "$override" && . ./optdef.sh
3192
3193 : Restore computed paths
3194 for file in $loclist $trylist; do
3195         eval $file="\$_$file"
3196 done
3197
3198 cat << EOM
3199
3200 Configure uses the operating system name and version to set some defaults.
3201 The default value is probably right if the name rings a bell. Otherwise,
3202 since spelling matters for me, either accept the default or answer "none"
3203 to leave it blank.
3204
3205 EOM
3206 case "$osname" in
3207         ''|' ')
3208                 case "$hintfile" in
3209                 ''|' '|none) dflt=none ;;
3210                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3211                 esac
3212                 ;;
3213         *) dflt="$osname" ;;
3214 esac
3215 rp="Operating system name?"
3216 . ./myread
3217 case "$ans" in
3218 none)  osname='' ;;
3219 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3220 esac
3221 echo " "
3222 case "$osvers" in
3223         ''|' ')
3224                 case "$hintfile" in
3225                 ''|' '|none) dflt=none ;;
3226                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3227                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3228                         case "$dflt" in
3229                         ''|' ') dflt=none ;;
3230                         esac
3231                         ;;
3232                 esac
3233                 ;;
3234         *) dflt="$osvers" ;;
3235 esac
3236 rp="Operating system version?"
3237 . ./myread
3238 case "$ans" in
3239 none)  osvers='' ;;
3240 *) osvers="$ans" ;;
3241 esac
3242
3243
3244 . ./posthint.sh
3245
3246 : who configured the system
3247 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3248 cf_by=`(logname) 2>/dev/null`
3249 case "$cf_by" in
3250 "")
3251         cf_by=`(whoami) 2>/dev/null`
3252         case "$cf_by" in
3253         "") cf_by=unknown ;;
3254         esac ;;
3255 esac
3256
3257 : set up the script used to warn in case of inconsistency
3258 cat <<EOS >whoa
3259 $startsh
3260 EOS
3261 cat <<'EOSC' >>whoa
3262 dflt=y
3263 echo " "
3264 echo "*** WHOA THERE!!! ***" >&4
3265 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3266 rp="    Keep the $hint value?"
3267 . ./myread
3268 case "$ans" in
3269 y) td=$was; tu=$was;;
3270 esac
3271 EOSC
3272
3273 : function used to set $1 to $val
3274 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3275 case "$val$was" in
3276 $define$undef) . ./whoa; eval "$var=\$td";;
3277 $undef$define) . ./whoa; eval "$var=\$tu";;
3278 *) eval "$var=$val";;
3279 esac'
3280
3281 case "$usethreads" in
3282 $define|true|[yY]*)     dflt='y';;
3283 *) dflt='n';;
3284 esac
3285 cat <<EOM
3286
3287 Perl can be built to take advantage of threads on some systems.
3288 To do so, Configure can be run with -Dusethreads.
3289
3290 Note that threading is a highly experimental feature, and
3291 some known race conditions still remain.  If you choose to try
3292 it, be very sure to not actually deploy it for production
3293 purposes.  README.threads has more details, and is required
3294 reading if you enable threads.
3295
3296 If this doesn't make any sense to you, just accept the default '$dflt'.
3297 EOM
3298 rp='Build a threading Perl?'
3299 . ./myread
3300 case "$ans" in
3301 y|Y)    val="$define" ;;
3302 *)      val="$undef" ;;
3303 esac
3304 set usethreads
3305 eval $setvar
3306
3307 case "$usethreads" in
3308 $define)
3309         $cat <<EOM
3310
3311 As of 5.5.640, Perl has two different internal threading implementations,
3312 the 5.005 version (5005threads) and an interpreter-based version
3313 (ithreads) that has one interpreter per thread.  Both are very 
3314 experimental.  This arrangement exists to help developers work out
3315 which one is better.
3316
3317 If you're a casual user, you probably don't want interpreter-threads
3318 at this time.  But if you do, the 'threads' module allows their use,
3319 and the 'Thread' module offers an interface to both 5005threads and
3320 ithreads (whichever has been configured).
3321 EOM
3322         : Default to ithreads unless overridden on command line or with
3323         : old config.sh
3324         dflt='y'
3325         case "$use5005threads" in
3326                 $define|true|[yY]*) dflt='n';;
3327         esac
3328         case "$useithreads" in
3329                 $undef|false|[nN]*) dflt='n';;
3330         esac
3331         rp='Use interpreter-based ithreads?'
3332         . ./myread
3333         case "$ans" in
3334         y|Y)    val="$define" ;;
3335         *)      val="$undef" ;;
3336         esac
3337         set useithreads
3338         eval $setvar
3339         : Now set use5005threads to the opposite value.
3340         case "$useithreads" in
3341         $define) val="$undef" ;;
3342         *) val="$define" ;;
3343         esac
3344         set use5005threads
3345         eval $setvar
3346         ;;
3347 *)
3348         useithreads="$undef"
3349         use5005threads="$undef"
3350         ;;
3351 esac
3352
3353 case "$useithreads$use5005threads" in
3354 "$define$define")
3355         $cat >&4 <<EOM
3356
3357 You cannot have both the ithreads and the 5.005 threads enabled
3358 at the same time.  Disabling the 5.005 threads since they are
3359 much less stable than the ithreads.
3360
3361 EOM
3362         use5005threads="$undef"
3363         ;;
3364 esac
3365
3366 case "$d_oldpthreads" in
3367 '')     : Configure tests would be welcome here.  For now, assume undef.
3368         val="$undef" ;;
3369 *)      val="$d_oldpthreads" ;;
3370 esac
3371 set d_oldpthreads
3372 eval $setvar
3373
3374
3375 case "$usethreads" in
3376 "$define"|true|[yY]*)
3377 : Look for a hint-file generated 'call-back-unit'.  If the
3378 : user has specified that a threading perl is to be built,
3379 : we may need to set or change some other defaults.
3380         if $test -f usethreads.cbu; then
3381                 echo "Your platform has some specific hints for threaded builds, using them..."
3382                 . ./usethreads.cbu
3383         else
3384                 $cat <<EOM
3385 (Your platform doesn't have any specific hints for threaded builds.
3386  Assuming POSIX threads, then.)
3387 EOM
3388         fi
3389         ;;
3390 esac
3391
3392 cat <<EOM
3393
3394 Perl can be built so that multiple Perl interpreters can coexist
3395 within the same Perl executable.
3396 EOM
3397
3398 case "$useithreads" in
3399 $define)
3400         cat <<EOM
3401 This multiple interpreter support is required for interpreter-based threads.
3402 EOM
3403         val="$define"
3404         ;;
3405 *)      case "$usemultiplicity" in
3406         $define|true|[yY]*)     dflt='y';;
3407         *) dflt='n';;
3408         esac
3409         echo " "
3410         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3411         rp='Build Perl for multiplicity?'
3412         . ./myread
3413         case "$ans" in
3414         y|Y)    val="$define" ;;
3415         *)      val="$undef" ;;
3416         esac
3417         ;;
3418 esac
3419 set usemultiplicity
3420 eval $setvar
3421
3422
3423 case "$usemorebits" in
3424 "$define"|true|[yY]*)
3425         use64bitint="$define"
3426         uselongdouble="$define"
3427         usemorebits="$define"
3428         ;;
3429 *)      usemorebits="$undef"
3430         ;;
3431 esac
3432
3433 : make some quick guesses about what we are up against
3434 echo " "
3435 $echo $n "Hmm...  $c"
3436 echo exit 1 >bsd
3437 echo exit 1 >usg
3438 echo exit 1 >v7
3439 echo exit 1 >osf1
3440 echo exit 1 >eunice
3441 echo exit 1 >xenix
3442 echo exit 1 >venix
3443 echo exit 1 >os2
3444 d_bsd="$undef"
3445 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3446 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3447 then
3448         echo "Looks kind of like an OSF/1 system, but we'll see..."
3449         echo exit 0 >osf1
3450 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3451         xxx=`./loc addbib blurfl $pth`
3452         if $test -f $xxx; then
3453         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3454                 echo exit 0 >bsd
3455                 echo exit 0 >usg
3456         else
3457                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3458                         echo "Looks kind of like an extended USG system, but we'll see..."
3459                 else
3460                         echo "Looks kind of like a USG system, but we'll see..."
3461                 fi
3462                 echo exit 0 >usg
3463         fi
3464 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3465         echo "Looks kind of like a BSD system, but we'll see..."
3466         d_bsd="$define"
3467         echo exit 0 >bsd
3468 else
3469         echo "Looks kind of like a Version 7 system, but we'll see..."
3470         echo exit 0 >v7
3471 fi
3472 case "$eunicefix" in
3473 *unixtovms*)
3474         $cat <<'EOI'
3475 There is, however, a strange, musty smell in the air that reminds me of
3476 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3477 EOI
3478         echo exit 0 >eunice
3479         d_eunice="$define"
3480 : it so happens the Eunice I know will not run shell scripts in Unix format
3481         ;;
3482 *)
3483         echo " "
3484         echo "Congratulations.  You aren't running Eunice."
3485         d_eunice="$undef"
3486         ;;
3487 esac
3488 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3489 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3490 : semicolon as a patch separator
3491 case "$p_" in
3492 :) ;;
3493 *)
3494         $cat <<'EOI'
3495 I have the feeling something is not exactly right, however...don't tell me...
3496 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3497 (Or you may be running DOS with DJGPP.)
3498 EOI
3499         echo exit 0 >os2
3500         ;;
3501 esac
3502 if test -f /xenix; then
3503         echo "Actually, this looks more like a XENIX system..."
3504         echo exit 0 >xenix
3505         d_xenix="$define"
3506 else
3507         echo " "
3508         echo "It's not Xenix..."
3509         d_xenix="$undef"
3510 fi
3511 chmod +x xenix
3512 $eunicefix xenix
3513 if test -f /venix; then
3514         echo "Actually, this looks more like a VENIX system..."
3515         echo exit 0 >venix
3516 else
3517         echo " "
3518         if ./xenix; then
3519                 : null
3520         else
3521                 echo "Nor is it Venix..."
3522         fi
3523 fi
3524 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3525 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3526 $rm -f foo
3527
3528 case "$cc" in
3529 '') dflt=cc;;
3530 *) dflt="$cc";;
3531 esac
3532 rp="Use which C compiler?"
3533 . ./myread
3534 cc="$ans"
3535 : Look for a hint-file generated 'call-back-unit'.  Now that the
3536 : user has specified the compiler, we may need to set or change some
3537 : other defaults.
3538 if $test -f cc.cbu; then
3539     . ./cc.cbu
3540 fi
3541 . ./checkcc
3542
3543 echo " "
3544 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3545 $cat >try.c <<EOM
3546 #include <stdio.h>
3547 int main() {
3548 #ifdef __GNUC__
3549 #ifdef __VERSION__
3550         printf("%s\n", __VERSION__);
3551 #else
3552         printf("%s\n", "1");
3553 #endif
3554 #endif
3555         exit(0);
3556 }
3557 EOM
3558 if $cc -o try $ccflags $ldflags try.c; then
3559         gccversion=`$run ./try`
3560         case "$gccversion" in
3561         '') echo "You are not using GNU cc." ;;
3562         *)  echo "You are using GNU cc $gccversion."
3563             ccname=gcc  
3564             ;;
3565         esac
3566 else
3567         echo " "
3568         echo "*** WHOA THERE!!! ***" >&4
3569         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3570         case "$knowitall" in
3571         '')
3572         echo "    You'd better start hunting for one and let me know about it." >&4
3573                 exit 1
3574                 ;;
3575         esac
3576 fi
3577 $rm -f try try.*
3578 case "$gccversion" in
3579 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3580 esac
3581 case "$gccversion" in
3582 '') gccosandvers='' ;;
3583 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3584    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3585    gccshortvers=''
3586    case "$gccosandvers" in
3587    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3588    $osname$osvers) ;; # looking good
3589    $osname*) cat <<EOM >&4
3590
3591 *** WHOA THERE!!! ***
3592
3593     Your gcc has not been compiled for the exact release of
3594     your operating system ($gccosandvers versus $osname$osvers).
3595
3596     In general it is a good idea to keep gcc synchronized with
3597     the operating system because otherwise serious problems
3598     may ensue when trying to compile software, like Perl.
3599
3600     I'm trying to be optimistic here, though, and will continue.
3601     If later during the configuration and build icky compilation
3602     problems appear (headerfile conflicts being the most common
3603     manifestation), I suggest reinstalling the gcc to match
3604     your operating system release.
3605
3606 EOM
3607       ;;
3608    *) gccosandvers='' ;; # failed to parse, better be silent
3609    esac
3610    ;;
3611 esac
3612 case "$ccname" in
3613 '') ccname="$cc" ;;
3614 esac
3615
3616
3617 : decide how portable to be.  Allow command line overrides.
3618 case "$d_portable" in
3619 "$undef") ;;
3620 *)      d_portable="$define" ;;
3621 esac
3622
3623 : set up shell script to do ~ expansion
3624 cat >filexp <<EOSS
3625 $startsh
3626 : expand filename
3627 case "\$1" in
3628  ~/*|~)
3629         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3630         ;;
3631  ~*)
3632         if $test -f /bin/csh; then
3633                 /bin/csh -f -c "glob \$1"
3634                 failed=\$?
3635                 echo ""
3636                 exit \$failed
3637         else
3638                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3639                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3640                 if $test ! -d "\$dir"; then
3641                         me=\`basename \$0\`
3642                         echo "\$me: can't locate home directory for: \$name" >&2
3643                         exit 1
3644                 fi
3645                 case "\$1" in
3646                 */*)
3647                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3648                         ;;
3649                 *)
3650                         echo \$dir
3651                         ;;
3652                 esac
3653         fi
3654         ;;
3655 *)
3656         echo \$1
3657         ;;
3658 esac
3659 EOSS
3660 chmod +x filexp
3661 $eunicefix filexp
3662
3663 : now set up to get a file name
3664 cat <<EOS >getfile
3665 $startsh
3666 EOS
3667 cat <<'EOSC' >>getfile
3668 tilde=''
3669 fullpath=''
3670 already=''
3671 skip=''
3672 none_ok=''
3673 exp_file=''
3674 nopath_ok=''
3675 orig_rp="$rp"
3676 orig_dflt="$dflt"
3677 case "$gfpth" in
3678 '') gfpth='.' ;;
3679 esac
3680
3681 case "$fn" in
3682 *\(*)
3683         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3684         fn=`echo $fn | sed 's/(.*)//'`
3685         ;;
3686 esac
3687
3688 case "$fn" in
3689 *:*)
3690         loc_file=`expr $fn : '.*:\(.*\)'`
3691         fn=`expr $fn : '\(.*\):.*'`
3692         ;;
3693 esac
3694
3695 case "$fn" in
3696 *~*) tilde=true;;
3697 esac
3698 case "$fn" in
3699 */*) fullpath=true;;
3700 esac
3701 case "$fn" in
3702 *+*) skip=true;;
3703 esac
3704 case "$fn" in
3705 *n*) none_ok=true;;
3706 esac
3707 case "$fn" in
3708 *e*) exp_file=true;;
3709 esac
3710 case "$fn" in
3711 *p*) nopath_ok=true;;
3712 esac
3713
3714 case "$fn" in
3715 *f*) type='File';;
3716 *d*) type='Directory';;
3717 *l*) type='Locate';;
3718 esac
3719
3720 what="$type"
3721 case "$what" in
3722 Locate) what='File';;
3723 esac
3724
3725 case "$exp_file" in
3726 '')
3727         case "$d_portable" in
3728         "$define") ;;
3729         *) exp_file=true;;
3730         esac
3731         ;;
3732 esac
3733
3734 cd ..
3735 while test "$type"; do
3736         redo=''
3737         rp="$orig_rp"
3738         dflt="$orig_dflt"
3739         case "$tilde" in
3740         true) rp="$rp (~name ok)";;
3741         esac
3742         . UU/myread
3743         if test -f UU/getfile.ok && \
3744                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3745         then
3746                 value="$ans"
3747                 ansexp="$ans"
3748                 break
3749         fi
3750         case "$ans" in
3751         none)
3752                 value=''
3753                 ansexp=''
3754                 case "$none_ok" in
3755                 true) type='';;
3756                 esac
3757                 ;;
3758         *)
3759                 case "$tilde" in
3760                 '') value="$ans"
3761                         ansexp="$ans";;
3762                 *)
3763                         value=`UU/filexp $ans`
3764                         case $? in
3765                         0)
3766                                 if test "$ans" != "$value"; then
3767                                         echo "(That expands to $value on this system.)"
3768                                 fi
3769                                 ;;
3770                         *) value="$ans";;
3771                         esac
3772                         ansexp="$value"
3773                         case "$exp_file" in
3774                         '') value="$ans";;
3775                         esac
3776                         ;;
3777                 esac
3778                 case "$fullpath" in
3779                 true)
3780                         case "$ansexp" in
3781                         /*) value="$ansexp" ;;
3782                         [a-zA-Z]:/*) value="$ansexp" ;;
3783                         *)
3784                                 redo=true
3785                                 case "$already" in
3786                                 true)
3787                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3788                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3789                                         ;;
3790                                 *)
3791                                 echo "Please give a full path name, starting with slash." >&4
3792                                         case "$tilde" in
3793                                         true)
3794                                 echo "Note that using ~name is ok provided it expands well." >&4
3795                                                 already=true
3796                                                 ;;
3797                                         esac
3798                                 esac
3799                                 ;;
3800                         esac
3801                         ;;
3802                 esac
3803                 case "$redo" in
3804                 '')
3805                         case "$type" in
3806                         File)
3807                                 for fp in $gfpth; do
3808                                         if test "X$fp" = X.; then
3809                                             pf="$ansexp"
3810                                         else    
3811                                             pf="$fp/$ansexp"
3812                                         fi
3813                                         if test -f "$pf"; then
3814                                                 type=''
3815                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3816                                         then
3817                                                 echo "($value is not a plain file, but that's ok.)"
3818                                                 type=''
3819                                         fi
3820                                         if test X"$type" = X; then
3821                                             value="$pf"
3822                                             break
3823                                         fi
3824                                 done
3825                                 ;;
3826                         Directory)
3827                                 for fp in $gfpth; do
3828                                         if test "X$fp" = X.; then
3829                                             dir="$ans"
3830                                             direxp="$ansexp"
3831                                         else    
3832                                             dir="$fp/$ansexp"
3833                                             direxp="$fp/$ansexp"
3834                                         fi
3835                                         if test -d "$direxp"; then
3836                                                 type=''
3837                                                 value="$dir"
3838                                                 break
3839                                         fi
3840                                 done
3841                                 ;;
3842                         Locate)
3843                                 if test -d "$ansexp"; then
3844                                         echo "(Looking for $loc_file in directory $value.)"
3845                                         value="$value/$loc_file"
3846                                         ansexp="$ansexp/$loc_file"
3847                                 fi
3848                                 if test -f "$ansexp"; then
3849                                         type=''
3850                                 fi
3851                                 case "$nopath_ok" in
3852                                 true)   case "$value" in
3853                                         */*) ;;
3854                                         *)      echo "Assuming $value will be in people's path."
3855                                                 type=''
3856                                                 ;;
3857                                         esac
3858                                         ;;
3859                                 esac
3860                                 ;;
3861                         esac
3862
3863                         case "$skip" in
3864                         true) type='';
3865                         esac
3866
3867                         case "$type" in
3868                         '') ;;
3869                         *)
3870                                 if test "$fastread" = yes; then
3871                                         dflt=y
3872                                 else
3873                                         dflt=n
3874                                 fi
3875                                 rp="$what $value doesn't exist.  Use that name anyway?"
3876                                 . UU/myread
3877                                 dflt=''
3878                                 case "$ans" in
3879                                 y*) type='';;
3880                                 *) echo " ";;
3881                                 esac
3882                                 ;;
3883                         esac
3884                         ;;
3885                 esac
3886                 ;;
3887         esac
3888 done
3889 cd UU
3890 ans="$value"
3891 rp="$orig_rp"
3892 dflt="$orig_dflt"
3893 rm -f getfile.ok
3894 test "X$gfpthkeep" != Xy && gfpth=""
3895 EOSC
3896
3897 : What should the include directory be ?
3898 echo " "
3899 $echo $n "Hmm...  $c"
3900 dflt='/usr/include'
3901 incpath=''
3902 mips_type=''
3903 if $test -f /bin/mips && /bin/mips; then
3904         echo "Looks like a MIPS system..."
3905         $cat >usr.c <<'EOCP'
3906 #ifdef SYSTYPE_BSD43
3907 /bsd43
3908 #endif
3909 EOCP
3910         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3911                 dflt='/bsd43/usr/include'
3912                 incpath='/bsd43'
3913                 mips_type='BSD 4.3'
3914         else
3915                 mips_type='System V'
3916         fi
3917         $rm -f usr.c usr.out
3918         echo "and you're compiling with the $mips_type compiler and libraries."
3919         xxx_prompt=y
3920         echo "exit 0" >mips
3921 else
3922         echo "Doesn't look like a MIPS system."
3923         xxx_prompt=n
3924         echo "exit 1" >mips
3925 fi
3926 chmod +x mips
3927 $eunicefix mips
3928 case "$usrinc" in
3929 '') ;;
3930 *) dflt="$usrinc";;
3931 esac
3932 case "$xxx_prompt" in
3933 y)      fn=d/
3934         echo " "
3935         rp='Where are the include files you want to use?'
3936         . ./getfile
3937         usrinc="$ans"
3938         ;;
3939 *)      usrinc="$dflt"
3940         ;;
3941 esac
3942
3943 : see how we invoke the C preprocessor
3944 echo " "
3945 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3946 cat <<'EOT' >testcpp.c
3947 #define ABC abc
3948 #define XYZ xyz
3949 ABC.XYZ
3950 EOT
3951 cd ..
3952 if test ! -f cppstdin; then
3953         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3954                 # AIX cc -E doesn't show the absolute headerfile
3955                 # locations but we'll cheat by using the -M flag.
3956                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3957         else
3958                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3959         fi
3960 else
3961         echo "Keeping your $hint cppstdin wrapper."
3962 fi
3963 chmod 755 cppstdin
3964 wrapper=`pwd`/cppstdin
3965 ok='false'
3966 cd UU
3967
3968 if $test "X$cppstdin" != "X" && \
3969         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3970         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3971 then
3972         echo "You used to use $cppstdin $cppminus so we'll use that again."
3973         case "$cpprun" in
3974         '') echo "But let's see if we can live without a wrapper..." ;;
3975         *)
3976                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3977                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3978                 then
3979                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3980                         ok='true'
3981                 else
3982                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3983                 fi
3984                 ;;
3985         esac
3986 else
3987         case "$cppstdin" in
3988         '') ;;
3989         *)
3990                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3991                 ;;
3992         esac
3993 fi
3994
3995 if $ok; then
3996         : nothing
3997 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3998         $cc -E <testcpp.c >testcpp.out 2>&1; \
3999         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4000         echo "Yup, it does."
4001         x_cpp="$cc -E"
4002         x_minus='';
4003 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4004         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4005         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4006         echo "Yup, it does."
4007         x_cpp="$cc -E"
4008         x_minus='-';
4009 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4010         $cc -P <testcpp.c >testcpp.out 2>&1; \
4011         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4012         echo "Yipee, that works!"
4013         x_cpp="$cc -P"
4014         x_minus='';
4015 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4016         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4017         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4018         echo "At long last!"
4019         x_cpp="$cc -P"
4020         x_minus='-';
4021 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4022         $cpp <testcpp.c >testcpp.out 2>&1; \
4023         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024         echo "It works!"
4025         x_cpp="$cpp"
4026         x_minus='';
4027 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4028         $cpp - <testcpp.c >testcpp.out 2>&1; \
4029         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4030         echo "Hooray, it works!  I was beginning to wonder."
4031         x_cpp="$cpp"
4032         x_minus='-';
4033 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4034         $wrapper <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         x_cpp="$wrapper"
4037         x_minus=''
4038         echo "Eureka!"
4039 else
4040         dflt=''
4041         rp="No dice.  I can't find a C preprocessor.  Name one:"
4042         . ./myread
4043         x_cpp="$ans"
4044         x_minus=''
4045         $x_cpp <testcpp.c >testcpp.out 2>&1
4046         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4047                 echo "OK, that will do." >&4
4048         else
4049 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4050                 exit 1
4051         fi
4052 fi
4053
4054 case "$ok" in
4055 false)
4056         cppstdin="$x_cpp"
4057         cppminus="$x_minus"
4058         cpprun="$x_cpp"
4059         cpplast="$x_minus"
4060         set X $x_cpp
4061         shift
4062         case "$1" in
4063         "$cpp")
4064                 echo "Perhaps can we force $cc -E using a wrapper..."
4065                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4066                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4067                 then
4068                         echo "Yup, we can."
4069                         cppstdin="$wrapper"
4070                         cppminus='';
4071                 else
4072                         echo "Nope, we'll have to live without it..."
4073                 fi
4074                 ;;
4075         esac
4076         case "$cpprun" in
4077         "$wrapper")
4078                 cpprun=''
4079                 cpplast=''
4080                 ;;
4081         esac
4082         ;;
4083 esac
4084
4085 case "$cppstdin" in
4086 "$wrapper"|'cppstdin') ;;
4087 *) $rm -f $wrapper;;
4088 esac
4089 $rm -f testcpp.c testcpp.out
4090
4091 : Set private lib path
4092 case "$plibpth" in
4093 '') if ./mips; then
4094                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4095         fi;;
4096 esac
4097 case "$libpth" in
4098 ' ') dlist='';;
4099 '') dlist="$loclibpth $plibpth $glibpth";;
4100 *) dlist="$libpth";;
4101 esac
4102
4103 : Now check and see which directories actually exist, avoiding duplicates
4104 libpth=''
4105 for xxx in $dlist
4106 do
4107     if $test -d $xxx; then
4108                 case " $libpth " in
4109                 *" $xxx "*) ;;
4110                 *) libpth="$libpth $xxx";;
4111                 esac
4112     fi
4113 done
4114 $cat <<'EOM'
4115
4116 Some systems have incompatible or broken versions of libraries.  Among
4117 the directories listed in the question below, please remove any you
4118 know not to be holding relevant libraries, and add any that are needed.
4119 Say "none" for none.
4120
4121 EOM
4122 case "$libpth" in
4123 '') dflt='none';;
4124 *)
4125         set X $libpth
4126         shift
4127         dflt=${1+"$@"}
4128         ;;
4129 esac
4130 rp="Directories to use for library searches?"
4131 . ./myread
4132 case "$ans" in
4133 none) libpth=' ';;
4134 *) libpth="$ans";;
4135 esac
4136
4137 : compute shared library extension
4138 case "$so" in
4139 '')
4140         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4141                 dflt='sl'
4142         else
4143                 dflt='so'
4144         fi
4145         ;;
4146 *) dflt="$so";;
4147 esac
4148 $cat <<EOM
4149
4150 On some systems, shared libraries may be available.  Answer 'none' if
4151 you want to suppress searching of shared libraries for the remainder
4152 of this configuration.
4153
4154 EOM
4155 rp='What is the file extension used for shared libraries?'
4156 . ./myread
4157 so="$ans"
4158
4159 : Define several unixisms.
4160 : Hints files or command line option can be used to override them.
4161 : The convoluted testing is in case hints files set either the old
4162 : or the new name.
4163 case "$_exe" in
4164 '')     case "$exe_ext" in
4165         '')     ;;
4166         *)      _exe="$exe_ext" ;;
4167         esac
4168         ;;
4169 esac
4170 case "$_a" in
4171 '')     case "$lib_ext" in
4172     '') _a='.a';;
4173         *)      _a="$lib_ext" ;;
4174         esac
4175         ;;
4176 esac
4177 case "$_o" in
4178 '') case "$obj_ext" in
4179         '')     _o='.o';;
4180         *)      _o="$obj_ext";;
4181         esac
4182         ;;
4183 esac
4184 case "$p_" in
4185 '') case "$path_sep" in
4186         '')     p_=':';;
4187         *)      p_="$path_sep";;
4188         esac
4189         ;;
4190 esac
4191 exe_ext=$_exe
4192 lib_ext=$_a
4193 obj_ext=$_o
4194 path_sep=$p_
4195
4196 : Which makefile gets called first.  This is used by make depend.
4197 case "$firstmakefile" in
4198 '') firstmakefile='makefile';;
4199 esac
4200
4201 case "$usesocks" in
4202 $define|true|[yY]*)     dflt='y';;
4203 *) dflt='n';;
4204 esac
4205 cat <<EOM
4206
4207 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4208 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4209 to use the PerlIO abstraction layer, this will be implicitly selected.
4210
4211 If this doesn't make any sense to you, just accept the default '$dflt'.
4212 EOM
4213 rp='Build Perl for SOCKS?'
4214 . ./myread
4215 case "$ans" in
4216 y|Y)    val="$define" ;;     
4217 *)      val="$undef" ;;
4218 esac
4219 set usesocks
4220 eval $setvar
4221
4222 case "$usesocks" in
4223 $define|true|[yY]*) useperlio="$define";;
4224 esac
4225
4226 : Looking for optional libraries
4227 echo " "
4228 echo "Checking for optional libraries..." >&4
4229 case "$libs" in
4230 ' '|'') dflt='';;
4231 *) dflt="$libs";;
4232 esac
4233 case "$libswanted" in
4234 '') libswanted='c_s';;
4235 esac
4236 case "$usesocks" in
4237 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4238 esac
4239 libsfound=''
4240 libsfiles=''
4241 libsdirs=''
4242 libspath=''
4243 for thisdir in $libpth $xlibpth; do
4244   test -d $thisdir && libspath="$libspath $thisdir"
4245 done
4246 for thislib in $libswanted; do
4247         for thisdir in $libspath; do
4248             xxx=''
4249             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4250                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4251                 $test -f "$xxx" && eval $libscheck
4252                 $test -f "$xxx" && libstyle=shared
4253             fi
4254             if test ! -f "$xxx"; then
4255                 xxx=$thisdir/lib$thislib.$so
4256                 $test -f "$xxx" && eval $libscheck
4257                 $test -f "$xxx" && libstyle=shared
4258             fi  
4259             if test ! -f "$xxx"; then
4260                 xxx=$thisdir/lib$thislib$_a
4261                 $test -f "$xxx" && eval $libscheck
4262                 $test -f "$xxx" && libstyle=static
4263             fi
4264             if test ! -f "$xxx"; then
4265                 xxx=$thisdir/$thislib$_a
4266                 $test -f "$xxx" && eval $libscheck
4267                 $test -f "$xxx" && libstyle=static
4268             fi
4269             if test ! -f "$xxx"; then
4270                 xxx=$thisdir/lib${thislib}_s$_a
4271                 $test -f "$xxx" && eval $libscheck
4272                 $test -f "$xxx" && libstyle=static
4273                 $test -f "$xxx" && thislib=${thislib}_s
4274             fi
4275             if test ! -f "$xxx"; then
4276                 xxx=$thisdir/Slib$thislib$_a
4277                 $test -f "$xxx" && eval $libscheck
4278                 $test -f "$xxx" && libstyle=static
4279             fi
4280             if $test -f "$xxx"; then
4281                 case "$libstyle" in
4282                 shared) echo "Found -l$thislib (shared)." ;;
4283                 static) echo "Found -l$thislib." ;;
4284                 *)      echo "Found -l$thislib ($libstyle)." ;;
4285                 esac
4286                 case " $dflt " in
4287                 *"-l$thislib "*);;
4288                 *) dflt="$dflt -l$thislib"
4289                    libsfound="$libsfound $xxx"
4290                    yyy=`basename $xxx`
4291                    libsfiles="$libsfiles $yyy"
4292                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4293                    case " $libsdirs " in
4294                    *" $yyy "*) ;;
4295                    *) libsdirs="$libsdirs $yyy" ;;
4296                    esac
4297                    ;;
4298                 esac
4299                 break
4300             fi  
4301         done
4302         if $test ! -f "$xxx"; then
4303             echo "No -l$thislib."
4304         fi
4305 done
4306 set X $dflt
4307 shift
4308 dflt="$*"
4309 case "$libs" in
4310 '') dflt="$dflt";;
4311 *) dflt="$libs";;
4312 esac
4313 case "$dflt" in
4314 ' '|'') dflt='none';;
4315 esac
4316
4317 $cat <<EOM
4318
4319 In order to compile $package on your machine, a number of libraries
4320 are usually needed.  Include any other special libraries here as well.
4321 Say "none" for none.  The default list is almost always right.
4322 EOM
4323
4324 echo " "
4325 rp="What libraries to use?"
4326 . ./myread
4327 case "$ans" in
4328 none) libs=' ';;
4329 *) libs="$ans";;
4330 esac
4331
4332 : determine optimization, if desired, or use for debug flag also
4333 case "$optimize" in
4334 ' '|$undef) dflt='none';;
4335 '') dflt='-O';;
4336 *) dflt="$optimize";;
4337 esac
4338 $cat <<EOH
4339
4340 By default, $package compiles with the -O flag to use the optimizer.
4341 Alternately, you might want to use the symbolic debugger, which uses
4342 the -g flag (on traditional Unix systems).  Either flag can be
4343 specified here.  To use neither flag, specify the word "none".
4344
4345 EOH
4346 rp="What optimizer/debugger flag should be used?"
4347 . ./myread
4348 optimize="$ans"
4349 case "$optimize" in
4350 'none') optimize=" ";;
4351 esac
4352
4353 dflt=''
4354 : We will not override a previous value, but we might want to
4355 : augment a hint file
4356 case "$hint" in
4357 default|recommended)
4358         case "$gccversion" in
4359         1*) dflt='-fpcc-struct-return' ;;
4360         esac
4361         case "$optimize" in
4362         *-g*) dflt="$dflt -DDEBUGGING";;
4363         esac
4364         case "$gccversion" in
4365         2*) if test -d /etc/conf/kconfig.d &&
4366                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4367                 then
4368                         dflt="$dflt -posix"
4369                 fi
4370                 ;;
4371         esac
4372         case "$gccversion" in
4373         1*) ;;
4374         2.[0-8]*) ;;
4375         ?*)     echo " "
4376                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4377                 echo 'int main(void) { return 0; }' > gcctest.c
4378                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4379                         echo "Yes, it does." 2>&1
4380                         case "$ccflags" in
4381                         *strict-aliasing*) 
4382                                 echo "Leaving current flags $ccflags alone." 2>&1
4383                                 ;;
4384                         *) dflt="$dflt -fno-strict-aliasing" ;;
4385                         esac
4386                 else
4387                         echo "Nope, it doesn't, but that's ok." 2>&1
4388                 fi
4389                 ;;
4390         esac
4391         ;;
4392 esac
4393
4394 case "$mips_type" in
4395 *BSD*|'') inclwanted="$locincpth $usrinc";;
4396 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4397 esac
4398 for thisincl in $inclwanted; do
4399         if $test -d $thisincl; then
4400                 if $test x$thisincl != x$usrinc; then
4401                         case "$dflt" in
4402                         *" -I$thisincl "*);;
4403                         *) dflt="$dflt -I$thisincl ";;
4404                         esac
4405                 fi
4406         fi
4407 done
4408
4409 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4410         xxx=true;
4411 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4412         xxx=true;
4413 else
4414         xxx=false;
4415 fi;
4416 if $xxx; then
4417         case "$dflt" in
4418         *$2*);;
4419         *) dflt="$dflt -D$2";;
4420         esac;
4421 fi'
4422
4423 set signal.h LANGUAGE_C; eval $inctest
4424
4425 case "$usesocks" in
4426 $define)
4427         ccflags="$ccflags -DSOCKS"
4428         ;;
4429 esac
4430
4431 case "$hint" in
4432 default|recommended) dflt="$ccflags $dflt" ;;
4433 *) dflt="$ccflags";;
4434 esac
4435
4436 case "$dflt" in
4437 ''|' ') dflt=none;;
4438 esac
4439
4440 $cat <<EOH
4441
4442 Your C compiler may want other flags.  For this question you should include
4443 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4444 but you should NOT include libraries or ld flags like -lwhatever.  If you
4445 want $package to honor its debug switch, you should include -DDEBUGGING here.
4446 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4447
4448 To use no flags, specify the word "none".
4449
4450 EOH
4451 set X $dflt
4452 shift
4453 dflt=${1+"$@"}
4454 rp="Any additional cc flags?"
4455 . ./myread
4456 case "$ans" in
4457 none) ccflags='';;
4458 *) ccflags="$ans";;
4459 esac
4460
4461 : the following weeds options from ccflags that are of no interest to cpp
4462 case "$cppflags" in
4463 '') cppflags="$ccflags" ;;
4464 *)  cppflags="$cppflags $ccflags" ;;
4465 esac
4466 case "$gccversion" in
4467 1*) cppflags="$cppflags -D__GNUC__"
4468 esac
4469 case "$mips_type" in
4470 '');;
4471 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4472 esac
4473 case "$cppflags" in
4474 '');;
4475 *)
4476         echo " "
4477         echo "Let me guess what the preprocessor flags are..." >&4
4478         set X $cppflags
4479         shift
4480         cppflags=''
4481         $cat >cpp.c <<'EOM'
4482 #define BLURFL foo
4483
4484 BLURFL xx LFRULB
4485 EOM
4486         previous=''
4487         for flag in $*
4488         do
4489                 case "$flag" in
4490                 -*) ftry="$flag";;
4491                 *) ftry="$previous $flag";;
4492                 esac
4493                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4494                         >cpp1.out 2>/dev/null && \
4495                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4496                         >cpp2.out 2>/dev/null && \
4497                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4498                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4499                 then
4500                         cppflags="$cppflags $ftry"
4501                         previous=''
4502                 else
4503                         previous="$flag"
4504                 fi
4505         done
4506         set X $cppflags
4507         shift
4508         cppflags=${1+"$@"}
4509         case "$cppflags" in
4510         *-*)  echo "They appear to be: $cppflags";;
4511         esac
4512         $rm -f cpp.c cpp?.out
4513         ;;
4514 esac
4515
4516 : flags used in final linking phase
4517 case "$ldflags" in
4518 '') if ./venix; then
4519                 dflt='-i -z'
4520         else
4521                 dflt=''
4522         fi
4523         case "$ccflags" in
4524         *-posix*) dflt="$dflt -posix" ;;
4525         esac
4526         ;;
4527 *) dflt="$ldflags";;
4528 esac
4529
4530 : Try to guess additional flags to pick up local libraries.
4531 for thislibdir in $libpth; do
4532         case " $loclibpth " in
4533         *" $thislibdir "*)
4534                 case "$dflt " in 
4535                 *"-L$thislibdir "*) ;;
4536                 *)  dflt="$dflt -L$thislibdir" ;;
4537                 esac
4538                 ;;
4539         esac
4540 done
4541
4542 case "$dflt" in
4543 '') dflt='none' ;;
4544 esac
4545
4546 $cat <<EOH
4547
4548 Your C linker may need flags.  For this question you should
4549 include -L/whatever and any other flags used by the C linker, but you
4550 should NOT include libraries like -lwhatever.
4551
4552 Make sure you include the appropriate -L/path flags if your C linker
4553 does not normally search all of the directories you specified above,
4554 namely
4555         $libpth
4556 To use no flags, specify the word "none".
4557
4558 EOH
4559
4560 rp="Any additional ld flags (NOT including libraries)?"
4561 . ./myread
4562 case "$ans" in
4563 none) ldflags='';;
4564 *) ldflags="$ans";;
4565 esac
4566 rmlist="$rmlist pdp11"
4567
4568 : coherency check
4569 echo " "
4570 echo "Checking your choice of C compiler and flags for coherency..." >&4
4571 $cat > try.c <<'EOF'
4572 #include <stdio.h>
4573 int main() { printf("Ok\n"); exit(0); }
4574 EOF
4575 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4576 shift
4577 $cat >try.msg <<'EOM'
4578 I've tried to compile and run the following simple program:
4579
4580 EOM
4581 $cat try.c >> try.msg
4582
4583 $cat >> try.msg <<EOM
4584
4585 I used the command:
4586
4587         $*
4588         $run ./try
4589
4590 and I got the following output:
4591
4592 EOM
4593 dflt=y
4594 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4595         if $sh -c "$run ./try" >>try.msg 2>&1; then
4596                 xxx=`$run ./try`
4597                 case "$xxx" in
4598                 "Ok") dflt=n ;;
4599                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4600                         case " $libs " in
4601                         *" -lsfio "*)
4602                                 cat >> try.msg <<'EOQS'
4603 If $libs contains -lsfio, and sfio is mis-configured, then it
4604 sometimes (apparently) runs and exits with a 0 status, but with no
4605 output!  It may have to do with sfio's use of _exit vs. exit.
4606
4607 EOQS
4608                                 rp="You have a big problem.  Shall I abort Configure"
4609                                 dflt=y
4610                                 ;;
4611                         esac
4612                         ;;
4613                 esac
4614         else
4615                 echo "The program compiled OK, but exited with status $?." >>try.msg
4616                 rp="You have a problem.  Shall I abort Configure"
4617                 dflt=y
4618         fi
4619 else
4620         echo "I can't compile the test program." >>try.msg
4621         rp="You have a BIG problem.  Shall I abort Configure"
4622         dflt=y
4623 fi
4624 case "$dflt" in
4625 y)
4626         $cat try.msg >&4
4627         case "$knowitall" in
4628         '')
4629                 echo "(The supplied flags or libraries might be incorrect.)"
4630                 ;;
4631         *) dflt=n;;
4632         esac
4633         echo " "
4634         . ./myread
4635         case "$ans" in
4636         n*|N*) ;;
4637         *)      echo "Ok.  Stopping Configure." >&4
4638                 exit 1
4639                 ;;
4640         esac
4641         ;;
4642 n) echo "OK, that should do.";;
4643 esac
4644 $rm -f try try.* core
4645
4646 : define a shorthand compile call
4647 compile='
4648 mc_file=$1;
4649 shift;
4650 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4651 : define a shorthand compile call for compilations that should be ok.
4652 compile_ok='
4653 mc_file=$1;
4654 shift;
4655 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4656
4657 : check for lengths of integral types
4658 echo " "
4659 case "$intsize" in
4660 '')
4661         echo "Checking to see how big your integers are..." >&4
4662         $cat >try.c <<'EOCP'
4663 #include <stdio.h>
4664 int main()
4665 {
4666         printf("intsize=%d;\n", (int)sizeof(int));
4667         printf("longsize=%d;\n", (int)sizeof(long));
4668         printf("shortsize=%d;\n", (int)sizeof(short));
4669         exit(0);
4670 }
4671 EOCP
4672         set try
4673         if eval $compile_ok && $run ./try > /dev/null; then
4674                 eval `$run ./try`
4675                 echo "Your integers are $intsize bytes long."
4676                 echo "Your long integers are $longsize bytes long."
4677                 echo "Your short integers are $shortsize bytes long."
4678         else
4679                 $cat >&4 <<EOM
4680 !
4681 Help! I can't compile and run the intsize test program: please enlighten me!
4682 (This is probably a misconfiguration in your system or libraries, and
4683 you really ought to fix it.  Still, I'll try anyway.)
4684 !
4685 EOM
4686                 dflt=4
4687                 rp="What is the size of an integer (in bytes)?"
4688                 . ./myread
4689                 intsize="$ans"
4690                 dflt=$intsize
4691                 rp="What is the size of a long integer (in bytes)?"
4692                 . ./myread
4693                 longsize="$ans"
4694                 dflt=2
4695                 rp="What is the size of a short integer (in bytes)?"
4696                 . ./myread
4697                 shortsize="$ans"
4698         fi
4699         ;;
4700 esac
4701 $rm -f try try.*
4702
4703 : check for void type
4704 echo " "
4705 echo "Checking to see how well your C compiler groks the void type..." >&4
4706 case "$voidflags" in
4707 '')
4708         $cat >try.c <<'EOCP'
4709 #if TRY & 1
4710 void sub() {
4711 #else
4712 sub() {
4713 #endif
4714         extern void moo();      /* function returning void */
4715         void (*goo)();          /* ptr to func returning void */
4716 #if TRY & 8
4717         void *hue;              /* generic ptr */
4718 #endif
4719 #if TRY & 2
4720         void (*foo[10])();
4721 #endif
4722
4723 #if TRY & 4
4724         if(goo == moo) {
4725                 exit(0);
4726         }
4727 #endif
4728         exit(0);
4729 }
4730 int main() { sub(); }
4731 EOCP
4732         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4733                 voidflags=$defvoidused
4734         echo "Good.  It appears to support void to the level $package wants.">&4
4735                 if $contains warning .out >/dev/null 2>&1; then
4736                         echo "However, you might get some warnings that look like this:"
4737                         $cat .out
4738                 fi
4739         else
4740 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4741                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4742                         echo "It supports 1..."
4743                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4744                                 echo "It also supports 2..."
4745                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4746                                         voidflags=7
4747                                         echo "And it supports 4 but not 8 definitely."
4748                                 else
4749                                         echo "It doesn't support 4..."
4750                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4751                                                 voidflags=11
4752                                                 echo "But it supports 8."
4753                                         else
4754                                                 voidflags=3
4755                                                 echo "Neither does it support 8."
4756                                         fi
4757                                 fi
4758                         else
4759                                 echo "It does not support 2..."
4760                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4761                                         voidflags=13
4762                                         echo "But it supports 4 and 8."
4763                                 else
4764                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4765                                                 voidflags=5
4766                                                 echo "And it supports 4 but has not heard about 8."
4767                                         else
4768                                                 echo "However it supports 8 but not 4."
4769                                         fi
4770                                 fi
4771                         fi
4772                 else
4773                         echo "There is no support at all for void."
4774                         voidflags=0
4775                 fi
4776         fi
4777 esac
4778 case "$voidflags" in
4779 "$defvoidused") ;;
4780 *)      $cat >&4 <<'EOM'
4781   Support flag bits are:
4782     1: basic void declarations.
4783     2: arrays of pointers to functions returning void.
4784     4: operations between pointers to and addresses of void functions.
4785     8: generic void pointers.
4786 EOM
4787         dflt="$voidflags";
4788         rp="Your void support flags add up to what?"
4789         . ./myread
4790         voidflags="$ans"
4791         ;;
4792 esac
4793 $rm -f try.* .out
4794
4795 : check for length of pointer
4796 echo " "
4797 case "$ptrsize" in
4798 '')
4799         echo "Checking to see how big your pointers are..." >&4
4800         if test "$voidflags" -gt 7; then
4801                 echo '#define VOID_PTR char *' > try.c
4802         else
4803                 echo '#define VOID_PTR void *' > try.c
4804         fi
4805         $cat >>try.c <<'EOCP'
4806 #include <stdio.h>
4807 int main()
4808 {
4809     printf("%d\n", (int)sizeof(VOID_PTR));
4810     exit(0);
4811 }
4812 EOCP
4813         set try
4814         if eval $compile_ok; then
4815                 ptrsize=`$run ./try`
4816                 echo "Your pointers are $ptrsize bytes long."
4817         else
4818                 dflt='4'
4819                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4820                 rp="What is the size of a pointer (in bytes)?"
4821                 . ./myread
4822                 ptrsize="$ans"
4823         fi
4824         ;;
4825 esac
4826 $rm -f try.c try
4827
4828 : check for long long
4829 echo " "
4830 echo "Checking to see if you have long long..." >&4
4831 echo 'int main() { long long x = 7; return 0; }' > try.c
4832 set try
4833 if eval $compile; then
4834         val="$define"
4835         echo "You have long long."
4836 else
4837         val="$undef"
4838         echo "You do not have long long."
4839 fi
4840 $rm try.*
4841 set d_longlong
4842 eval $setvar
4843
4844 : check for length of long long
4845 case "${d_longlong}${longlongsize}" in
4846 $define)
4847         echo " "
4848         echo "Checking to see how big your long longs are..." >&4
4849         $cat >try.c <<'EOCP'
4850 #include <stdio.h>
4851 int main()
4852 {
4853     printf("%d\n", (int)sizeof(long long));
4854     return(0);
4855 }
4856 EOCP
4857         set try
4858         if eval $compile_ok; then
4859                 longlongsize=`$run ./try`
4860                 echo "Your long longs are $longlongsize bytes long."
4861         else
4862                 dflt='8'
4863                 echo " "
4864                 echo "(I can't seem to compile the test program.  Guessing...)"
4865                 rp="What is the size of a long long (in bytes)?"
4866                 . ./myread
4867                 longlongsize="$ans"
4868         fi
4869         if $test "X$longsize" = "X$longlongsize"; then
4870                 echo "(That isn't any different from an ordinary long.)"
4871         fi      
4872         ;;
4873 esac
4874 $rm -f try.* try
4875
4876 : determine filename position in cpp output
4877 echo " "
4878 echo "Computing filename position in cpp output for #include directives..." >&4
4879 case "$osname" in
4880 vos) testaccess=-e ;;
4881 *)   testaccess=-r ;;
4882 esac
4883 echo '#include <stdio.h>' > foo.c
4884 $cat >fieldn <<EOF
4885 $startsh
4886 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4887 $grep '^[       ]*#.*stdio\.h' | \
4888 while read cline; do
4889         pos=1
4890         set \$cline
4891         while $test \$# -gt 0; do
4892                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4893                         echo "\$pos"
4894                         exit 0
4895                 fi
4896                 shift
4897                 pos=\`expr \$pos + 1\`
4898         done
4899 done
4900 EOF
4901 chmod +x fieldn
4902 fieldn=`./fieldn`
4903 $rm -f foo.c fieldn
4904 case $fieldn in
4905 '') pos='???';;
4906 1) pos=first;;
4907 2) pos=second;;
4908 3) pos=third;;
4909 *) pos="${fieldn}th";;
4910 esac
4911 echo "Your cpp writes the filename in the $pos field of the line."
4912
4913 case "$osname" in
4914 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4915 *)   cppfilter='' ;;
4916 esac
4917 : locate header file
4918 $cat >findhdr <<EOF
4919 $startsh
4920 wanted=\$1
4921 name=''
4922 for usrincdir in $usrinc
4923 do
4924         if test -f \$usrincdir/\$wanted; then
4925                 echo "\$usrincdir/\$wanted"
4926                 exit 0
4927         fi
4928 done
4929 awkprg='{ print \$$fieldn }'
4930 echo "#include <\$wanted>" > foo\$\$.c
4931 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4932 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4933 while read cline; do
4934         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4935         case "\$name" in
4936         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4937         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4938         *) exit 2;;
4939         esac;
4940 done;
4941 #
4942 # status = 0: grep returned 0 lines, case statement not executed
4943 # status = 1: headerfile found
4944 # status = 2: while loop executed, no headerfile found
4945 #
4946 status=\$?
4947 $rm -f foo\$\$.c;
4948 if test \$status -eq 1; then
4949         exit 0;
4950 fi
4951 exit 1
4952 EOF
4953 chmod +x findhdr
4954
4955 : define an alternate in-header-list? function
4956 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4957 cont=true; xxf="echo \"<\$1> found.\" >&4";
4958 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4959 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4960 esac;
4961 case $# in 4) instead=instead;; *) instead="at last";; esac;
4962 while $test "$cont"; do
4963         xxx=`./findhdr $1`
4964         var=$2; eval "was=\$$2";
4965         if $test "$xxx" && $test -r "$xxx";
4966         then eval $xxf;
4967         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4968                 cont="";
4969         else eval $xxnf;
4970         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4971         set $yyy; shift; shift; yyy=$@;
4972         case $# in 0) cont="";;
4973         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4974                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4975         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4976                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4977         esac;
4978 done;
4979 while $test "$yyy";
4980 do set $yyy; var=$2; eval "was=\$$2";
4981         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4982         set $yyy; shift; shift; yyy=$@;
4983 done'
4984
4985 : see if inttypes.h is available
4986 : we want a real compile instead of Inhdr because some systems
4987 : have an inttypes.h which includes non-existent headers
4988 echo " "
4989 $cat >try.c <<EOCP
4990 #include <inttypes.h>
4991 int main() {
4992         static int32_t foo32 = 0x12345678;
4993 }
4994 EOCP
4995 set try
4996 if eval $compile; then
4997         echo "<inttypes.h> found." >&4
4998         val="$define"
4999 else
5000         echo "<inttypes.h> NOT found." >&4
5001         val="$undef"
5002 fi
5003 $rm -f try.c try
5004 set i_inttypes
5005 eval $setvar
5006
5007 : check for int64_t
5008 echo " "
5009 echo "Checking to see if you have int64_t..." >&4
5010 $cat >try.c <<EOCP
5011 #include <sys/types.h>
5012 #$i_inttypes I_INTTYPES
5013 #ifdef I_INTTYPES
5014 #include <inttypes.h>
5015 #endif
5016 int main() { int64_t x = 7; }
5017 EOCP
5018 set try
5019 if eval $compile; then
5020         val="$define"
5021         echo "You have int64_t."
5022 else
5023         val="$undef"
5024         echo "You do not have int64_t."
5025 fi
5026 $rm -f try try.*
5027 set d_int64_t
5028 eval $setvar
5029
5030
5031 echo " "
5032 echo "Checking which 64-bit integer type we could use..." >&4
5033
5034 case "$intsize" in
5035 8) val=int
5036    set quadtype
5037    eval $setvar
5038    val='"unsigned int"'
5039    set uquadtype
5040    eval $setvar
5041    quadkind=1
5042    ;;
5043 *) case "$longsize" in
5044    8) val=long
5045       set quadtype
5046       eval $setvar
5047       val='"unsigned long"'
5048       set uquadtype
5049       eval $setvar
5050       quadkind=2
5051       ;;
5052    *) case "$d_longlong:$longlongsize" in
5053       define:8)
5054         val='"long long"'
5055         set quadtype
5056         eval $setvar
5057         val='"unsigned long long"'
5058         set uquadtype
5059         eval $setvar
5060         quadkind=3
5061         ;;
5062       *) case "$d_int64_t" in
5063          define)
5064            val=int64_t
5065            set quadtype
5066            eval $setvar
5067            val=uint64_t
5068            set uquadtype
5069            eval $setvar
5070            quadkind=4
5071            ;;
5072          esac
5073          ;;
5074       esac
5075       ;;
5076    esac
5077    ;;
5078 esac
5079
5080 case "$quadtype" in
5081 '')     echo "Alas, no 64-bit integer types in sight." >&4
5082         d_quad="$undef"
5083         ;;
5084 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5085         d_quad="$define"
5086         ;;
5087 esac
5088
5089
5090 case "$uselonglong" in
5091 "$define"|true|[yY]*)
5092         cat <<EOM >&4
5093
5094 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5095 EOM
5096         use64bitint="$define"
5097         ;;
5098 esac                          
5099 case "$use64bits" in
5100 "$define"|true|[yY]*)
5101         cat <<EOM >&4
5102
5103 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5104 EOM
5105         use64bitint="$define"
5106         ;;
5107 esac                          
5108 case "$use64bitints" in
5109 "$define"|true|[yY]*)
5110         cat <<EOM >&4
5111
5112 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5113 EOM
5114         use64bitint="$define"
5115         ;;
5116 esac                          
5117 case "$use64bitsint" in
5118 "$define"|true|[yY]*)
5119         cat <<EOM >&4
5120
5121 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5122 EOM
5123         use64bitint="$define"
5124         ;;
5125 esac                          
5126 case "$uselonglongs" in
5127 "$define"|true|[yY]*)
5128         cat <<EOM >&4
5129
5130 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5131 EOM
5132         use64bitint="$define"
5133         ;;
5134 esac                          
5135 case "$use64bitsall" in
5136 "$define"|true|[yY]*)
5137         cat <<EOM >&4
5138
5139 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5140 EOM
5141         use64bitall="$define"
5142         ;;
5143 esac                          
5144
5145 case "$ccflags" in
5146 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5147 esac
5148 case "$use64bitall" in
5149 "$define"|true|[yY]*) use64bitint="$define" ;;
5150 esac
5151
5152 case "$longsize" in
5153 8) cat <<EOM
5154
5155 You have natively 64-bit long integers.
5156 EOM
5157    val="$define"
5158    ;;
5159 *) case "$use64bitint" in
5160    "$define"|true|[yY]*) dflt='y';;
5161    *) dflt='n';;
5162    esac
5163    case "$d_quad" in
5164    "$define") ;;
5165    *) dflt='n' ;;
5166    esac
5167    cat <<EOM
5168
5169 Perl can be built to take advantage of 64-bit integer types
5170 on some systems.  To do so, Configure can be run with -Duse64bitint.
5171 Choosing this option will most probably introduce binary incompatibilities.
5172
5173 If this doesn't make any sense to you, just accept the default '$dflt'.
5174 (The default has been chosen based on your configuration.)
5175 EOM
5176    rp='Try to use 64-bit integers, if available?'
5177    . ./myread
5178    case "$ans" in
5179    [yY]*) val="$define" ;;
5180    *)     val="$undef"  ;;
5181    esac
5182    ;;
5183 esac
5184 set use64bitint
5185 eval $setvar
5186
5187 case "$use64bitall" in
5188 "$define"|true|[yY]*) dflt='y' ;;
5189 *) case "$longsize" in
5190    8) dflt='y' ;;
5191    *) dflt='n' ;;
5192    esac
5193    ;;
5194 esac    
5195 cat <<EOM
5196
5197 You may also choose to try maximal 64-bitness.  It means using as much
5198 64-bitness as possible on the platform.  This in turn means even more
5199 binary incompatibilities.  On the other hand, your platform may not
5200 have any more 64-bitness available than what you already have chosen.
5201
5202 If this doesn't make any sense to you, just accept the default '$dflt'.
5203 (The default has been chosen based on your configuration.)
5204 EOM
5205 rp='Try to use maximal 64-bit support, if available?'
5206 . ./myread
5207 case "$ans" in
5208 [yY]*) val="$define" ;;
5209 *)     val="$undef"  ;;
5210 esac
5211 set use64bitall
5212 eval $setvar
5213 case "$use64bitall" in
5214 "$define")
5215         case "$use64bitint" in
5216         "$undef")
5217                 cat <<EOM
5218
5219 Since you have chosen a maximally 64-bit build, I'm also turning on
5220 the use of 64-bit integers.
5221 EOM
5222                 use64bitint="$define" ;;
5223         esac
5224         ;;
5225 esac
5226
5227 case "$use64bitall" in
5228 "$define"|true|[yY]*)
5229         case "$ptrsize" in
5230         4)      cat <<EOM >&4
5231
5232 *** You have chosen a maximally 64-bit build, but your pointers
5233 *** are only 4 bytes wide, disabling maximal 64-bitness.
5234
5235 EOM
5236                 use64bitall="$undef"
5237                 case "$use64bitint" in
5238                 "$define"|true|[yY]*) ;;
5239                 *)      cat <<EOM >&4
5240
5241 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5242
5243 EOM
5244                         use64bitint="$define"
5245                         ;;
5246                 esac
5247                 ;;
5248         esac
5249         ;;
5250 esac
5251
5252 case "$use64bitint" in
5253 "$define"|true|[yY]*)
5254 : Look for a hint-file generated 'call-back-unit'.  If the
5255 : user has specified that a 64-bit perl is to be built,
5256 : we may need to set or change some other defaults.
5257         if $test -f use64bitint.cbu; then
5258                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5259                 . ./use64bitint.cbu
5260         fi
5261         case "$longsize" in
5262         4) case "$archname64" in
5263            '') archname64=64int ;;
5264            esac
5265            ;;
5266         esac
5267         ;;
5268 esac
5269
5270 case "$use64bitall" in
5271 "$define"|true|[yY]*)
5272 : Look for a hint-file generated 'call-back-unit'.  If the
5273 : user has specified that a maximally 64-bit perl is to be built,
5274 : we may need to set or change some other defaults.
5275         if $test -f use64bitall.cbu; then
5276                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5277                 . ./use64bitall.cbu
5278         fi
5279         case "$longsize" in
5280         4) case "$archname64" in
5281            ''|64int) archname64=64all ;;
5282            esac
5283            ;;
5284         esac
5285         ;;
5286 esac
5287
5288 echo " "
5289 echo "Checking for GNU C Library..." >&4
5290 cat >try.c <<EOM
5291 #include <stdio.h>
5292 int main()
5293 {
5294 #ifdef __GLIBC__
5295     exit(0);
5296 #else
5297     exit(1);
5298 #endif
5299 }
5300 EOM
5301 set try
5302 if eval $compile_ok && $run ./try; then
5303         val="$define"
5304         echo "You are using the GNU C Library"
5305 else
5306         val="$undef"
5307         echo "You are not using the GNU C Library"
5308 fi
5309 $rm -f try try.*
5310 set d_gnulibc
5311 eval $setvar
5312
5313 : see if nm is to be used to determine whether a symbol is defined or not
5314 case "$usenm" in
5315 '')
5316         dflt=''
5317         case "$d_gnulibc" in
5318         "$define")
5319                 echo " "
5320                 echo "nm probably won't work on the GNU C Library." >&4
5321                 dflt=n
5322                 ;;
5323         esac
5324         case "$dflt" in
5325         '') 
5326                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5327                         echo " "
5328                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5329                         echo "'nm' won't be sufficient on this sytem." >&4
5330                         dflt=n
5331                 fi
5332                 ;;
5333         esac
5334         case "$dflt" in
5335         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5336                 if $test $dflt -gt 20; then
5337                         dflt=y
5338                 else
5339                         dflt=n
5340                 fi
5341                 ;;
5342         esac
5343         ;;
5344 *)
5345         case "$usenm" in
5346         true|$define) dflt=y;;
5347         *) dflt=n;;
5348         esac
5349         ;;
5350 esac
5351 $cat <<EOM
5352
5353 I can use $nm to extract the symbols from your C libraries. This
5354 is a time consuming task which may generate huge output on the disk (up
5355 to 3 megabytes) but that should make the symbols extraction faster. The
5356 alternative is to skip the 'nm' extraction part and to compile a small
5357 test program instead to determine whether each symbol is present. If
5358 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5359 this may be the best solution.
5360
5361 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5362
5363 EOM
5364 rp="Shall I use $nm to extract C symbols from the libraries?"
5365 . ./myread
5366 case "$ans" in
5367 [Nn]*) usenm=false;;
5368 *) usenm=true;;
5369 esac
5370
5371 runnm=$usenm
5372 case "$reuseval" in
5373 true) runnm=false;;
5374 esac
5375
5376 : nm options which may be necessary
5377 case "$nm_opt" in
5378 '') if $test -f /mach_boot; then
5379                 nm_opt=''       # Mach
5380         elif $test -d /usr/ccs/lib; then
5381                 nm_opt='-p'     # Solaris (and SunOS?)
5382         elif $test -f /dgux; then
5383                 nm_opt='-p'     # DG-UX
5384         elif $test -f /lib64/rld; then
5385                 nm_opt='-p'     # 64-bit Irix
5386         else
5387                 nm_opt=''
5388         fi;;
5389 esac
5390
5391 : nm options which may be necessary for shared libraries but illegal
5392 : for archive libraries.  Thank you, Linux.
5393 case "$nm_so_opt" in
5394 '')     case "$myuname" in
5395         *linux*)
5396                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5397                         nm_so_opt='--dynamic'
5398                 fi
5399                 ;;
5400         esac
5401         ;;
5402 esac
5403
5404 case "$runnm" in
5405 true)
5406 : get list of predefined functions in a handy place
5407 echo " "
5408 case "$libc" in
5409 '') libc=unknown
5410         case "$libs" in
5411         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5412         esac
5413         ;;
5414 esac
5415 case "$libs" in
5416 '') ;;
5417 *)  for thislib in $libs; do
5418         case "$thislib" in
5419         -lc|-lc_s)
5420                 : Handle C library specially below.
5421                 ;;
5422         -l*)
5423                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5424                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5425                         :
5426                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5427                         :
5428                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5429                         :
5430                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5435                         :
5436                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5437                         :
5438                 else
5439                         try=''
5440                 fi
5441                 libnames="$libnames $try"
5442                 ;;
5443         *) libnames="$libnames $thislib" ;;
5444         esac
5445         done
5446         ;;
5447 esac
5448 xxx=normal
5449 case "$libc" in
5450 unknown)
5451         set /lib/libc.$so
5452         for xxx in $libpth; do
5453                 $test -r $1 || set $xxx/libc.$so
5454                 : The messy sed command sorts on library version numbers.
5455                 $test -r $1 || \
5456                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5457                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5458                                 h
5459                                 s/[0-9][0-9]*/0000&/g
5460                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5461                                 G
5462                                 s/\n/ /' | \
5463                          $sort | $sed -e 's/^.* //'`
5464                 eval set \$$#
5465         done
5466         $test -r $1 || set /usr/ccs/lib/libc.$so
5467         $test -r $1 || set /lib/libsys_s$_a
5468         ;;
5469 *)
5470         set blurfl
5471         ;;
5472 esac
5473 if $test -r "$1"; then
5474         echo "Your (shared) C library seems to be in $1."
5475         libc="$1"
5476 elif $test -r /lib/libc && $test -r /lib/clib; then
5477         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5478         xxx=apollo
5479         libc='/lib/clib /lib/libc'
5480         if $test -r /lib/syslib; then
5481                 echo "(Your math library is in /lib/syslib.)"
5482                 libc="$libc /lib/syslib"
5483         fi
5484 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5485         echo "Your C library seems to be in $libc, as you said before."
5486 elif $test -r $incpath/usr/lib/libc$_a; then
5487         libc=$incpath/usr/lib/libc$_a;
5488         echo "Your C library seems to be in $libc.  That's fine."
5489 elif $test -r /lib/libc$_a; then
5490         libc=/lib/libc$_a;
5491         echo "Your C library seems to be in $libc.  You're normal."
5492 else
5493         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5494                 :
5495         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5496                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5497         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5498                 :
5499         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5500                 :
5501         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5502                 :
5503         else
5504                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5505         fi
5506         if $test -r "$tans"; then
5507                 echo "Your C library seems to be in $tans, of all places."
5508                 libc=$tans
5509         else
5510                 libc='blurfl'
5511         fi
5512 fi
5513 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5514         dflt="$libc"
5515         cat <<EOM
5516
5517 If the guess above is wrong (which it might be if you're using a strange
5518 compiler, or your machine supports multiple models), you can override it here.
5519
5520 EOM
5521 else
5522         dflt=''
5523         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5524         cat >&4 <<EOM
5525 I can't seem to find your C library.  I've looked in the following places:
5526
5527 EOM
5528         $sed 's/^/      /' libpath
5529         cat <<EOM
5530
5531 None of these seems to contain your C library. I need to get its name...
5532
5533 EOM
5534 fi
5535 fn=f
5536 rp='Where is your C library?'
5537 . ./getfile
5538 libc="$ans"
5539
5540 echo " "
5541 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5542 set X `cat libnames`
5543 shift
5544 xxx=files
5545 case $# in 1) xxx=file; esac
5546 echo "Extracting names from the following $xxx for later perusal:" >&4
5547 echo " "
5548 $sed 's/^/      /' libnames >&4
5549 echo " "
5550 $echo $n "This may take a while...$c" >&4
5551
5552 for file in $*; do
5553         case $file in
5554         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5555         *) $nm $nm_opt $file 2>/dev/null;;
5556         esac
5557 done >libc.tmp
5558
5559 $echo $n ".$c"
5560 $grep fprintf libc.tmp > libc.ptf
5561 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5562 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5563 xxx='[ADTSIW]'
5564 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5565         eval $xscan;\
5566         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5567                 eval $xrun
5568 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5569         eval $xscan;\
5570         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5571                 eval $xrun
5572 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5573         eval $xscan;\
5574         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5575                 eval $xrun
5576 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5577         eval $xscan;\
5578         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5579                 eval $xrun
5580 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5581         eval $xscan;\
5582         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5583                 eval $xrun
5584 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5585         eval $xscan;\
5586         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5587                 eval $xrun
5588 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5589                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5590         eval $xscan;\
5591         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5592                 eval $xrun
5593 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5594         eval $xscan;\
5595         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5596                 eval $xrun
5597 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5598         eval $xscan;\
5599         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5600                 eval $xrun
5601 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5602         eval $xscan;\
5603         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5604                 eval $xrun
5605 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5606         eval $xscan;\
5607         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5608                 eval $xrun
5609 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5610         eval $xscan;\
5611         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5612                 eval $xrun
5613 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5614         eval $xscan;\
5615         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5616                 eval $xrun
5617 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5618         eval $xscan;\
5619         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5620                 eval $xrun
5621 else
5622         $nm -p $* 2>/dev/null >libc.tmp
5623         $grep fprintf libc.tmp > libc.ptf
5624         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5625                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5626         then
5627                 nm_opt='-p'
5628                 eval $xrun
5629         else
5630                 echo " "
5631                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5632                 com=''
5633                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5634                         for thisname in $libnames $libc; do
5635                                 $ar t $thisname >>libc.tmp
5636                         done
5637                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5638                         echo "Ok." >&4
5639                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5640                         # Repeat libc to extract forwarders to DLL entries too
5641                         for thisname in $libnames $libc; do
5642                                 $ar tv $thisname >>libc.tmp
5643                                 # Revision 50 of EMX has bug in $ar.
5644                                 # it will not extract forwarders to DLL entries
5645                                 # Use emximp which will extract exactly them.
5646                                 emximp -o tmp.imp $thisname \
5647                                     2>/dev/null && \
5648                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5649                                     < tmp.imp >>libc.tmp
5650                                 $rm tmp.imp
5651                         done
5652                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5653                         echo "Ok." >&4
5654                 else
5655                         echo "$ar didn't seem to work right." >&4
5656                         echo "Maybe this is a Cray...trying bld instead..." >&4
5657                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5658                         then
5659                                 for thisname in $libnames; do
5660                                         bld t $libnames | \
5661                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5662                                         $ar t $thisname >>libc.tmp
5663                                 done
5664                                 echo "Ok." >&4
5665                         else
5666                                 echo "That didn't work either.  Giving up." >&4
5667                                 exit 1
5668                         fi
5669                 fi
5670         fi
5671 fi
5672 nm_extract="$com"
5673 if $test -f /lib/syscalls.exp; then
5674         echo " "
5675         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5676         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5677 fi
5678 ;;
5679 esac
5680 $rm -f libnames libpath
5681
5682 : is a C symbol defined?
5683 csym='tlook=$1;
5684 case "$3" in
5685 -v) tf=libc.tmp; tc=""; tdc="";;
5686 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5687 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5688 esac;
5689 tx=yes;
5690 case "$reuseval-$4" in
5691 true-) ;;
5692 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5693 esac;
5694 case "$tx" in
5695 yes)
5696         case "$runnm" in
5697         true)
5698                 if $contains $tlook $tf >/dev/null 2>&1;
5699                 then tval=true;
5700                 else tval=false;
5701                 fi;;
5702         *)
5703                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5704                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5705                 then tval=true;
5706                 else tval=false;
5707                 fi;
5708                 $rm -f t t.c;;
5709         esac;;
5710 *)
5711         case "$tval" in
5712         $define) tval=true;;
5713         *) tval=false;;
5714         esac;;
5715 esac;
5716 eval "$2=$tval"'
5717
5718 : define an is-in-libc? function
5719 inlibc='echo " "; td=$define; tu=$undef;
5720 sym=$1; var=$2; eval "was=\$$2";
5721 tx=yes;
5722 case "$reuseval$was" in
5723 true) ;;
5724 true*) tx=no;;
5725 esac;
5726 case "$tx" in
5727 yes)
5728         set $sym tres -f;
5729         eval $csym;
5730         case "$tres" in
5731         true)
5732                 echo "$sym() found." >&4;
5733                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5734         *)
5735                 echo "$sym() NOT found." >&4;
5736                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5737         esac;;
5738 *)
5739         case "$was" in
5740         $define) echo "$sym() found." >&4;;
5741         *) echo "$sym() NOT found." >&4;;
5742         esac;;
5743 esac'
5744
5745 : see if sqrtl exists
5746 set sqrtl d_sqrtl
5747 eval $inlibc
5748
5749 case "$ccflags" in
5750 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5751 esac
5752
5753 case "$uselongdouble" in
5754 $define|true|[yY]*)     dflt='y';;
5755 *) dflt='n';;
5756 esac
5757 cat <<EOM
5758
5759 Perl can be built to take advantage of long doubles which
5760 (if available) may give more accuracy and range for floating point numbers.
5761
5762 If this doesn't make any sense to you, just accept the default '$dflt'.
5763 EOM
5764 rp='Try to use long doubles if available?'
5765 . ./myread
5766 case "$ans" in
5767 y|Y)    val="$define"   ;;
5768 *)      val="$undef"    ;;
5769 esac
5770 set uselongdouble
5771 eval $setvar
5772
5773 case "$uselongdouble" in
5774 true|[yY]*) uselongdouble="$define" ;;
5775 esac
5776
5777 case "$uselongdouble" in
5778 $define)
5779 : Look for a hint-file generated 'call-back-unit'.  If the
5780 : user has specified that long doubles should be used,
5781 : we may need to set or change some other defaults.
5782         if $test -f uselongdouble.cbu; then
5783                 echo "Your platform has some specific hints for long doubles, using them..."
5784                 . ./uselongdouble.cbu
5785         else
5786                 $cat <<EOM
5787 (Your platform doesn't have any specific hints for long doubles.)
5788 EOM
5789         fi
5790         ;;
5791 esac
5792
5793 case "$uselongdouble:$d_sqrtl" in
5794 $define:$undef)
5795                 $cat <<EOM >&4
5796
5797 *** You requested the use of long doubles but you do not seem to have
5798 *** the mathematic functions for long doubles.  I'm disabling the use
5799 *** of long doubles.
5800
5801 EOM
5802         uselongdouble=$undef
5803         ;;
5804 esac
5805
5806 : check for length of double
5807 echo " "
5808 case "$doublesize" in
5809 '')
5810         echo "Checking to see how big your double precision numbers are..." >&4
5811         $cat >try.c <<'EOCP'
5812 #include <stdio.h>
5813 int main()
5814 {
5815     printf("%d\n", (int)sizeof(double));
5816     exit(0);
5817 }
5818 EOCP
5819         set try
5820         if eval $compile_ok; then
5821                 doublesize=`$run ./try`
5822                 echo "Your double is $doublesize bytes long."
5823         else
5824                 dflt='8'
5825                 echo "(I can't seem to compile the test program.  Guessing...)"
5826                 rp="What is the size of a double precision number (in bytes)?"
5827                 . ./myread
5828                 doublesize="$ans"
5829         fi
5830         ;;
5831 esac
5832 $rm -f try.c try
5833
5834 : check for long doubles
5835 echo " "
5836 echo "Checking to see if you have long double..." >&4
5837 echo 'int main() { long double x = 7.0; }' > try.c
5838 set try
5839 if eval $compile; then
5840         val="$define"
5841         echo "You have long double."
5842 else
5843         val="$undef"
5844         echo "You do not have long double."
5845 fi
5846 $rm try.*
5847 set d_longdbl
5848 eval $setvar
5849
5850 : check for length of long double
5851 case "${d_longdbl}${longdblsize}" in
5852 $define)
5853         echo " "
5854         echo "Checking to see how big your long doubles are..." >&4
5855         $cat >try.c <<'EOCP'
5856 #include <stdio.h>
5857 int main()
5858 {
5859         printf("%d\n", sizeof(long double));
5860 }
5861 EOCP
5862         set try
5863         set try
5864         if eval $compile; then
5865                 longdblsize=`$run ./try`
5866                 echo "Your long doubles are $longdblsize bytes long."
5867         else
5868                 dflt='8'
5869                 echo " "
5870                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5871                 rp="What is the size of a long double (in bytes)?"
5872                 . ./myread
5873                 longdblsize="$ans"
5874         fi
5875         if $test "X$doublesize" = "X$longdblsize"; then
5876                 echo "(That isn't any different from an ordinary double.)"
5877         fi      
5878         ;;
5879 esac
5880 $rm -f try.* try
5881
5882 case "$useperlio" in
5883 $define|true|[yY]*|'')  dflt='y';;
5884 *) dflt='n';;
5885 esac
5886 cat <<EOM
5887
5888 Previous version of $package used the standard IO mechanisms as
5889 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5890 alternate IO mechanisms via the PerlIO abstraction layer, but the
5891 stdio mechanism is still available if needed.  The abstraction layer
5892 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5893 Using PerlIO with sfio may cause problems with some extension modules.
5894
5895 If this doesn't make any sense to you, just accept the default '$dflt'.
5896 EOM
5897 rp='Use the PerlIO abstraction layer?'
5898 . ./myread
5899 case "$ans" in
5900 y|Y) 
5901         val="$define"
5902         ;;
5903 *)      
5904         echo "Ok, doing things the stdio way."
5905         val="$undef"
5906         ;;
5907 esac
5908 set useperlio
5909 eval $setvar 
5910
5911 case "$usesocks" in
5912 $define|true|[yY]*)
5913         case "$useperlio" in
5914         $define|true|[yY]*) ;;
5915         *)      cat >&4 <<EOM
5916
5917 You are using the SOCKS proxy protocol library which means that you
5918 should also use the PerlIO layer.  You may be headed for trouble.
5919
5920 EOM
5921                 ;;
5922         esac
5923         ;;
5924 esac
5925
5926         
5927 : determine the architecture name
5928 echo " "
5929 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5930         tarch=`arch`"-$osname"
5931 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5932         if uname -m > tmparch 2>&1 ; then
5933                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5934                         -e 's/$/'"-$osname/" tmparch`
5935         else
5936                 tarch="$osname"
5937         fi
5938         $rm -f tmparch
5939 else
5940         tarch="$osname"
5941 fi
5942 case "$myarchname" in
5943 ''|"$tarch") ;;
5944 *)
5945         echo "(Your architecture name used to be $myarchname.)"
5946         archname=''
5947         ;;
5948 esac
5949 case "$targetarch" in
5950 '') ;;
5951 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5952 esac
5953 myarchname="$tarch"
5954 case "$archname" in
5955 '') dflt="$tarch";;
5956 *) dflt="$archname";;
5957 esac
5958 rp='What is your architecture name'
5959 . ./myread
5960 archname="$ans"
5961 case "$usethreads" in
5962 $define)
5963         echo "Threads selected." >&4
5964         case "$archname" in
5965         *-thread*) echo "...and architecture name already has -thread." >&4
5966                 ;;
5967         *)      archname="$archname-thread"
5968                 echo "...setting architecture name to $archname." >&4
5969                 ;;
5970         esac
5971         ;;
5972 esac
5973 case "$usemultiplicity" in
5974 $define)
5975         echo "Multiplicity selected." >&4
5976         case "$archname" in
5977         *-multi*) echo "...and architecture name already has -multi." >&4
5978                 ;;
5979         *)      archname="$archname-multi"
5980                 echo "...setting architecture name to $archname." >&4
5981                 ;;
5982         esac
5983         ;;
5984 esac
5985 case "$use64bitint$use64bitall" in
5986 *"$define"*)
5987         case "$archname64" in
5988         '')
5989                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5990                 ;;
5991         *)
5992                 case "$use64bitint" in
5993                 "$define") echo "64 bit integers selected." >&4 ;;
5994                 esac
5995                 case "$use64bitall" in
5996                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5997                 esac
5998                 case "$archname" in
5999                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6000                         ;;
6001                 *)      archname="$archname-$archname64"
6002                         echo "...setting architecture name to $archname." >&4
6003                         ;;
6004                 esac
6005                 ;;
6006         esac
6007 esac
6008 case "$uselongdouble" in
6009 $define)
6010         echo "Long doubles selected." >&4
6011         case "$longdblsize" in
6012         $doublesize)
6013                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6014                 ;;
6015         *)
6016                 case "$archname" in
6017                 *-ld*) echo "...and architecture name already has -ld." >&4
6018                         ;;
6019                 *)      archname="$archname-ld"
6020                         echo "...setting architecture name to $archname." >&4
6021                         ;;
6022                 esac
6023                 ;;
6024         esac
6025         ;;
6026 esac
6027 case "$useperlio" in
6028 $define)
6029         echo "Perlio selected." >&4
6030         ;;
6031 *)
6032         echo "Perlio not selected, using stdio." >&4
6033         case "$archname" in
6034         *-stdio*) echo "...and architecture name already has -stdio." >&4
6035                 ;;
6036         *)      archname="$archname-stdio"
6037                 echo "...setting architecture name to $archname." >&4
6038                 ;;
6039         esac
6040         ;;
6041 esac
6042
6043 : determine root of directory hierarchy where package will be installed.
6044 case "$prefix" in
6045 '')
6046         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6047         ;;
6048 *)
6049         dflt="$prefix"
6050         ;;
6051 esac
6052 $cat <<EOM
6053
6054 By default, $package will be installed in $dflt/bin, manual pages
6055 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6056 installation directories. Typically this is something like /usr/local.
6057 If you wish to have binaries under /usr/bin but other parts of the
6058 installation under /usr/local, that's ok: you will be prompted
6059 separately for each of the installation directories, the prefix being
6060 only used to set the defaults.
6061
6062 EOM
6063 fn=d~
6064 rp='Installation prefix to use?'
6065 . ./getfile
6066 oldprefix=''
6067 case "$prefix" in
6068 '') ;;
6069 *)
6070         case "$ans" in
6071         "$prefix") ;;
6072         *) oldprefix="$prefix";;
6073         esac
6074         ;;
6075 esac
6076 prefix="$ans"
6077 prefixexp="$ansexp"
6078
6079 case "$afsroot" in
6080 '')     afsroot=/afs ;;
6081 *)      afsroot=$afsroot ;;
6082 esac
6083
6084 : is AFS running?
6085 echo " "
6086 case "$afs" in
6087 $define|true)   afs=true ;;
6088 $undef|false)   afs=false ;;
6089 *)      if test -d $afsroot; then
6090                 afs=true
6091         else
6092                 afs=false
6093         fi
6094         ;;
6095 esac
6096 if $afs; then
6097         echo "AFS may be running... I'll be extra cautious then..." >&4
6098 else
6099         echo "AFS does not seem to be running..." >&4
6100 fi
6101
6102 : determine installation prefix for where package is to be installed.
6103 if $afs; then 
6104 $cat <<EOM
6105
6106 Since you are running AFS, I need to distinguish the directory in which
6107 files will reside from the directory in which they are installed (and from
6108 which they are presumably copied to the former directory by occult means).
6109
6110 EOM
6111         case "$installprefix" in
6112         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6113         *) dflt="$installprefix";;
6114         esac
6115 else
6116 $cat <<EOM
6117
6118 In some special cases, particularly when building $package for distribution,
6119 it is convenient to distinguish between the directory in which files should 
6120 be installed from the directory ($prefix) in which they 
6121 will eventually reside.  For most users, these two directories are the same.
6122
6123 EOM
6124         case "$installprefix" in
6125         '') dflt=$prefix ;;
6126         *) dflt=$installprefix;;
6127         esac
6128 fi
6129 fn=d~
6130 rp='What installation prefix should I use for installing files?'
6131 . ./getfile
6132 installprefix="$ans"
6133 installprefixexp="$ansexp"
6134
6135 : set the prefixit variable, to compute a suitable default value
6136 prefixit='case "$3" in
6137 ""|none)
6138         case "$oldprefix" in
6139         "") eval "$1=\"\$$2\"";;
6140         *)
6141                 case "$3" in
6142                 "") eval "$1=";;
6143                 none)
6144                         eval "tp=\"\$$2\"";
6145                         case "$tp" in
6146                         ""|" ") eval "$1=\"\$$2\"";;
6147                         *) eval "$1=";;
6148                         esac;;
6149                 esac;;
6150         esac;;
6151 *)
6152         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6153         case "$tp" in
6154         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6155         /*-$oldprefix/*|\~*-$oldprefix/*)
6156                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6157         *) eval "$1=\"\$$2\"";;
6158         esac;;
6159 esac'
6160
6161 : get the patchlevel
6162 echo " "
6163 echo "Getting the current patchlevel..." >&4
6164 if $test -r $rsrc/patchlevel.h;then
6165         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6166         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6167         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6168         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6169         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6170         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6171        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6172 else
6173         revision=0
6174         patchlevel=0
6175         subversion=0
6176         api_revision=0
6177         api_version=0
6178         api_subversion=0
6179         perl_patchlevel=0
6180         $echo "(You do not have patchlevel.h.  Eek.)"
6181 fi
6182 if $test -r $rsrc/.patch ; then  
6183         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6184                 perl_patchlevel=`cat $rsrc/.patch`
6185         fi
6186 fi
6187 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6188 version_patchlevel_string="version $patchlevel subversion $subversion"
6189 case "$perl_patchlevel" in
6190 0|'') ;;
6191 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6192 esac
6193
6194 $echo "(You have $package $version_patchlevel_string.)"
6195
6196 case "$osname" in
6197 dos|vms)
6198         : XXX Should be a Configure test for double-dots in filenames.
6199         version=`echo $revision $patchlevel $subversion | \
6200                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6201         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6202                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6203         ;;
6204 *)
6205         version=`echo $revision $patchlevel $subversion | \
6206                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6207         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6208                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6209         ;;
6210 esac
6211 : Special case the 5.005_xx maintenance series, which used 5.005
6212 : without any subversion label as a subdirectory in $sitelib
6213 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6214         api_versionstring='5.005'
6215 fi
6216
6217 : determine installation style
6218 : For now, try to deduce it from prefix unless it is already set.
6219 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6220 case "$installstyle" in
6221 '')     case "$prefix" in
6222                 *perl*) dflt='lib';;
6223                 *) dflt='lib/perl5' ;;
6224         esac
6225         ;;
6226 *)      dflt="$installstyle" ;;
6227 esac
6228 : Probably not worth prompting for this since we prompt for all
6229 : the directories individually, and the prompt would be too long and
6230 : confusing anyway.
6231 installstyle=$dflt
6232
6233 : determine where private library files go
6234 : Usual default is /usr/local/lib/perl5/$version.
6235 : Also allow things like /opt/perl/lib/$version, since 
6236 : /opt/perl/lib/perl5... would be redundant.
6237 : The default "style" setting is made in installstyle.U
6238 case "$installstyle" in
6239 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6240 *)       set dflt privlib lib/$version ;;
6241 esac
6242 eval $prefixit
6243 $cat <<EOM
6244
6245 There are some auxiliary files for $package that need to be put into a
6246 private library directory that is accessible by everyone.
6247
6248 EOM
6249 fn=d~+
6250 rp='Pathname where the private library files will reside?'
6251 . ./getfile
6252 privlib="$ans"
6253 privlibexp="$ansexp"
6254 : Change installation prefix, if necessary.
6255 if $test X"$prefix" != X"$installprefix"; then
6256         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6257 else
6258         installprivlib="$privlibexp"
6259 fi
6260
6261 : set the prefixup variable, to restore leading tilda escape
6262 prefixup='case "$prefixexp" in
6263 "$prefix") ;;
6264 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6265 esac'
6266
6267 : determine where public architecture dependent libraries go
6268 set archlib archlib
6269 eval $prefixit
6270 : privlib default is /usr/local/lib/$package/$version
6271 : archlib default is /usr/local/lib/$package/$version/$archname
6272 : privlib may have an optional trailing /share.
6273 tdflt=`echo $privlib | $sed 's,/share$,,'`
6274 tdflt=$tdflt/$archname
6275 case "$archlib" in
6276 '')     dflt=$tdflt
6277         ;;
6278 *)      dflt="$archlib"
6279     ;;
6280 esac
6281 $cat <<EOM
6282
6283 $spackage contains architecture-dependent library files.  If you are
6284 sharing libraries in a heterogeneous environment, you might store
6285 these files in a separate location.  Otherwise, you can just include
6286 them with the rest of the public library files.
6287
6288 EOM
6289 fn=d+~
6290 rp='Where do you want to put the public architecture-dependent libraries?'
6291 . ./getfile
6292 archlib="$ans"
6293 archlibexp="$ansexp"
6294 if $test X"$archlib" = X"$privlib"; then
6295         d_archlib="$undef"
6296 else
6297         d_archlib="$define"
6298 fi
6299 : Change installation prefix, if necessary.
6300 if $test X"$prefix" != X"$installprefix"; then
6301         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6302 else
6303         installarchlib="$archlibexp"
6304 fi
6305
6306
6307 : Binary compatibility with 5.005 is not possible for builds
6308 : with advanced features
6309 case "$usethreads$usemultiplicity" in
6310 *define*)
6311         bincompat5005="$undef"
6312         d_bincompat5005="$undef"
6313         ;;
6314 *)      $cat <<EOM
6315
6316 This version of Perl can be compiled for binary compatibility with 5.005.
6317 If you decide to do so, you will be able to continue using most of the
6318 extensions that were compiled for Perl 5.005.
6319
6320 EOM
6321         case "$bincompat5005$d_bincompat5005" in
6322         *"$undef"*) dflt=n ;;
6323         *) dflt=y ;;
6324         esac
6325         rp='Binary compatibility with Perl 5.005?'
6326         . ./myread
6327         case "$ans" in
6328         y*) val="$define" ;;
6329         *)  val="$undef" ;;
6330         esac
6331         set d_bincompat5005
6332         eval $setvar
6333         case "$d_bincompat5005" in
6334         "$define")
6335                 bincompat5005="$define"
6336                 ;;
6337         *)      bincompat5005="$undef"
6338                 d_bincompat5005="$undef"
6339                 ;;
6340         esac
6341         ;;
6342 esac
6343
6344
6345 : see if setuid scripts can be secure
6346 $cat <<EOM
6347
6348 Some kernels have a bug that prevents setuid #! scripts from being
6349 secure.  Some sites have disabled setuid #! scripts because of this.
6350
6351 First let's decide if your kernel supports secure setuid #! scripts.
6352 (If setuid #! scripts would be secure but have been disabled anyway,
6353 don't say that they are secure if asked.)
6354
6355 EOM
6356
6357 val="$undef"
6358 if $test -d /dev/fd; then
6359         echo "#!$ls" >reflect
6360         chmod +x,u+s reflect
6361         ./reflect >flect 2>&1
6362         if $contains "/dev/fd" flect >/dev/null; then
6363                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6364                 val="$define"
6365         else
6366                 $cat <<EOM
6367 If you are not sure if they are secure, I can check but I'll need a
6368 username and password different from the one you are using right now.
6369 If you don't have such a username or don't want me to test, simply
6370 enter 'none'.
6371
6372 EOM
6373                 rp='Other username to test security of setuid scripts with?'
6374                 dflt='none'
6375                 . ./myread
6376                 case "$ans" in
6377                 n|none)
6378                         case "$d_suidsafe" in
6379                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6380                                 dflt=n;;
6381                         "$undef")
6382                                 echo "Well, the $hint value is *not* secure." >&4
6383                                 dflt=n;;
6384                         *)      echo "Well, the $hint value *is* secure." >&4
6385                                 dflt=y;;
6386                         esac
6387                         ;;
6388                 *)
6389                         $rm -f reflect flect
6390                         echo "#!$ls" >reflect
6391                         chmod +x,u+s reflect
6392                         echo >flect
6393                         chmod a+w flect
6394                         echo '"su" will (probably) prompt you for '"$ans's password."
6395                         su $ans -c './reflect >flect'
6396                         if $contains "/dev/fd" flect >/dev/null; then
6397                                 echo "Okay, it looks like setuid scripts are secure." >&4
6398                                 dflt=y
6399                         else
6400                                 echo "I don't think setuid scripts are secure." >&4
6401                                 dflt=n
6402                         fi
6403                         ;;
6404                 esac
6405                 rp='Does your kernel have *secure* setuid scripts?'
6406                 . ./myread
6407                 case "$ans" in
6408                 [yY]*)  val="$define";;
6409                 *)      val="$undef";;
6410                 esac
6411         fi
6412 else
6413         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6414         echo "(That's for file descriptors, not floppy disks.)"
6415         val="$undef"
6416 fi
6417 set d_suidsafe
6418 eval $setvar
6419
6420 $rm -f reflect flect
6421
6422 : now see if they want to do setuid emulation
6423 echo " "
6424 val="$undef"
6425 case "$d_suidsafe" in
6426 "$define")
6427         val="$undef"
6428         echo "No need to emulate SUID scripts since they are secure here." >&4
6429         ;;
6430 *)
6431         $cat <<EOM
6432 Some systems have disabled setuid scripts, especially systems where
6433 setuid scripts cannot be secure.  On systems where setuid scripts have
6434 been disabled, the setuid/setgid bits on scripts are currently
6435 useless.  It is possible for $package to detect those bits and emulate
6436 setuid/setgid in a secure fashion.  This emulation will only work if
6437 setuid scripts have been disabled in your kernel.
6438
6439 EOM
6440         case "$d_dosuid" in
6441         "$define") dflt=y ;;
6442         *) dflt=n ;;
6443         esac
6444         rp="Do you want to do setuid/setgid emulation?"
6445         . ./myread
6446         case "$ans" in
6447         [yY]*)  val="$define";;
6448         *)      val="$undef";;
6449         esac
6450         ;;
6451 esac
6452 set d_dosuid
6453 eval $setvar
6454
6455 : see if this is a malloc.h system
6456 set malloc.h i_malloc
6457 eval $inhdr
6458
6459 : see if stdlib is available
6460 set stdlib.h i_stdlib
6461 eval $inhdr
6462
6463 : determine which malloc to compile in
6464 echo " "
6465 case "$usemymalloc" in
6466 [yY]*|true|$define)     dflt='y' ;;
6467 [nN]*|false|$undef)     dflt='n' ;;
6468 *)      case "$ptrsize" in
6469         4) dflt='y' ;;
6470         *) dflt='n' ;;
6471         esac
6472         ;;
6473 esac
6474 rp="Do you wish to attempt to use the malloc that comes with $package?"
6475 . ./myread
6476 usemymalloc="$ans"
6477 case "$ans" in
6478 y*|true)
6479         usemymalloc='y'
6480         mallocsrc='malloc.c'
6481         mallocobj="malloc$_o"
6482         d_mymalloc="$define"
6483         case "$libs" in
6484         *-lmalloc*)
6485                 : Remove malloc from list of libraries to use
6486                 echo "Removing unneeded -lmalloc from library list" >&4
6487                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6488                 shift
6489                 libs="$*"
6490                 echo "libs = $libs" >&4
6491                 ;;
6492         esac
6493         ;;
6494 *)
6495         usemymalloc='n'
6496         mallocsrc=''
6497         mallocobj=''
6498         d_mymalloc="$undef"
6499         ;;
6500 esac
6501
6502 : compute the return types of malloc and free
6503 echo " "
6504 $cat >malloc.c <<END
6505 #$i_malloc I_MALLOC
6506 #$i_stdlib I_STDLIB
6507 #include <stdio.h>
6508 #include <sys/types.h>
6509 #ifdef I_MALLOC
6510 #include <malloc.h>
6511 #endif
6512 #ifdef I_STDLIB
6513 #include <stdlib.h>
6514 #endif
6515 #ifdef TRY_MALLOC
6516 void *malloc();
6517 #endif
6518 #ifdef TRY_FREE
6519 void free();
6520 #endif
6521 END
6522 case "$malloctype" in
6523 '')
6524         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6525                 malloctype='void *'
6526         else
6527                 malloctype='char *'
6528         fi
6529         ;;
6530 esac
6531 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6532
6533 case "$freetype" in
6534 '')
6535         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6536                 freetype='void'
6537         else
6538                 freetype='int'
6539         fi
6540         ;;
6541 esac
6542 echo "Your system uses $freetype free(), it would seem." >&4
6543 $rm -f malloc.[co]
6544 $cat <<EOM
6545
6546 After $package is installed, you may wish to install various
6547 add-on modules and utilities.  Typically, these add-ons will
6548 be installed under $prefix with the rest
6549 of this package.  However, you may wish to install such add-ons
6550 elsewhere under a different prefix.
6551
6552 If you do not wish to put everything under a single prefix, that's
6553 ok.  You will be prompted for the individual locations; this siteprefix
6554 is only used to suggest the defaults.
6555
6556 The default should be fine for most people.
6557
6558 EOM
6559 fn=d~+
6560 rp='Installation prefix to use for add-on modules and utilities?'
6561 : XXX Here might be another good place for an installstyle setting.
6562 case "$siteprefix" in
6563 '') dflt=$prefix ;;
6564 *)  dflt=$siteprefix ;;
6565 esac
6566 . ./getfile
6567 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6568 oldsiteprefix=''
6569 case "$siteprefix" in
6570 '') ;;
6571 *)      case "$ans" in
6572         "$prefix") ;;
6573         *) oldsiteprefix="$prefix";;
6574         esac
6575         ;;
6576 esac
6577 siteprefix="$ans"
6578 siteprefixexp="$ansexp"
6579
6580 : determine where site specific libraries go.
6581 : Usual default is /usr/local/lib/perl5/site_perl/$version
6582 : The default "style" setting is made in installstyle.U
6583 : XXX No longer works with Prefixit stuff.
6584 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6585 case "$sitelib" in
6586 '') case "$installstyle" in
6587         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6588         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6589         esac
6590         ;;
6591 *)      dflt="$sitelib"
6592         ;;
6593 esac
6594 $cat <<EOM
6595
6596 The installation process will create a directory for
6597 site-specific extensions and modules.  Most users find it convenient
6598 to place all site-specific files in this directory rather than in the
6599 main distribution directory.
6600
6601 EOM
6602 fn=d~+
6603 rp='Pathname for the site-specific library files?'
6604 . ./getfile
6605 sitelib="$ans"
6606 sitelibexp="$ansexp"
6607 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6608 : Change installation prefix, if necessary.
6609 if $test X"$prefix" != X"$installprefix"; then
6610         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6611 else
6612         installsitelib="$sitelibexp"
6613 fi
6614
6615 : determine where site specific architecture-dependent libraries go.
6616 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6617 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6618 : sitelib may have an optional trailing /share.
6619 case "$sitearch" in
6620 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6621         dflt="$dflt/$archname"
6622         ;;
6623 *)      dflt="$sitearch"
6624         ;;
6625 esac
6626 set sitearch sitearch none
6627 eval $prefixit
6628 $cat <<EOM
6629
6630 The installation process will also create a directory for
6631 architecture-dependent site-specific extensions and modules.
6632
6633 EOM
6634 fn=d~+
6635 rp='Pathname for the site-specific architecture-dependent library files?'
6636 . ./getfile
6637 sitearch="$ans"
6638 sitearchexp="$ansexp"
6639 : Change installation prefix, if necessary.
6640 if $test X"$prefix" != X"$installprefix"; then
6641         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6642 else
6643         installsitearch="$sitearchexp"
6644 fi
6645
6646 $cat <<EOM
6647
6648 The installation process will also create a directory for
6649 vendor-supplied add-ons.  Vendors who supply perl with their system
6650 may find it convenient to place all vendor-supplied files in this
6651 directory rather than in the main distribution directory.  This will
6652 ease upgrades between binary-compatible maintenance versions of perl.
6653
6654 Of course you may also use these directories in whatever way you see
6655 fit.  For example, you might use them to access modules shared over a
6656 company-wide network.
6657
6658 The default answer should be fine for most people.
6659 This causes further questions about vendor add-ons to be skipped
6660 and no vendor-specific directories will be configured for perl.
6661
6662 EOM
6663 rp='Do you want to configure vendor-specific add-on directories?'
6664 case "$usevendorprefix" in
6665 define|true|[yY]*) dflt=y ;;
6666 *)      : User may have set vendorprefix directly on Configure command line.
6667         case "$vendorprefix" in
6668         ''|' ') dflt=n ;;
6669         *)      dflt=y ;;
6670         esac
6671         ;;
6672 esac
6673 . ./myread
6674 case "$ans" in
6675 [yY]*)  fn=d~+
6676         rp='Installation prefix to use for vendor-supplied add-ons?'
6677         case "$vendorprefix" in
6678         '') dflt='' ;;
6679         *)  dflt=$vendorprefix ;;
6680         esac
6681         . ./getfile
6682         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6683         oldvendorprefix=''
6684         case "$vendorprefix" in
6685         '') ;;
6686         *)      case "$ans" in
6687                 "$prefix") ;;
6688                 *) oldvendorprefix="$prefix";;
6689                 esac
6690                 ;;
6691         esac
6692         usevendorprefix="$define"
6693         vendorprefix="$ans"
6694         vendorprefixexp="$ansexp"
6695         ;;
6696 *)      usevendorprefix="$undef"
6697         vendorprefix=''
6698         vendorprefixexp=''
6699         ;;
6700 esac
6701
6702 case "$vendorprefix" in
6703 '')     d_vendorlib="$undef"
6704         vendorlib=''
6705         vendorlibexp=''
6706         ;;
6707 *)      d_vendorlib="$define"
6708         : determine where vendor-supplied modules go.
6709         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6710         case "$vendorlib" in
6711         '')
6712                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6713                 case "$installstyle" in
6714                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6715                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6716                 esac
6717                 ;;
6718         *)      dflt="$vendorlib"
6719                 ;;
6720         esac
6721         fn=d~+
6722         rp='Pathname for the vendor-supplied library files?'
6723         . ./getfile
6724         vendorlib="$ans"
6725         vendorlibexp="$ansexp"
6726         ;;
6727 esac
6728 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6729 : Change installation prefix, if necessary.
6730 if $test X"$prefix" != X"$installprefix"; then
6731         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6732 else
6733         installvendorlib="$vendorlibexp"
6734 fi
6735
6736 case "$vendorprefix" in
6737 '')     d_vendorarch="$undef"
6738         vendorarch=''
6739         vendorarchexp=''
6740         ;;
6741 *)      d_vendorarch="$define"
6742         : determine where vendor-supplied architecture-dependent libraries go.
6743         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6744         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6745         : vendorlib may have an optional trailing /share.
6746         case "$vendorarch" in
6747         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6748                 dflt="$dflt/$archname"
6749                 ;;
6750         *)      dflt="$vendorarch" ;;
6751         esac
6752         fn=d~+
6753         rp='Pathname for vendor-supplied architecture-dependent files?'
6754         . ./getfile
6755         vendorarch="$ans"
6756         vendorarchexp="$ansexp"
6757         ;;
6758 esac
6759 : Change installation prefix, if necessary.
6760 if $test X"$prefix" != X"$installprefix"; then
6761         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6762 else
6763         installvendorarch="$vendorarchexp"
6764 fi
6765
6766 : Final catch-all directories to search
6767 $cat <<EOM
6768
6769 Lastly, you can have perl look in other directories for extensions and
6770 modules in addition to those already specified.
6771 These directories will be searched after 
6772         $sitearch 
6773         $sitelib 
6774 EOM
6775 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6776 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6777 echo ' '
6778 case "$otherlibdirs" in
6779 ''|' ') dflt='none' ;;
6780 *)      dflt="$otherlibdirs" ;;
6781 esac
6782 $cat <<EOM
6783 Enter a colon-separated set of extra paths to include in perl's @INC
6784 search path, or enter 'none' for no extra paths.
6785
6786 EOM
6787
6788 rp='Colon-separated list of additional directories for perl to search?'
6789 . ./myread
6790 case "$ans" in
6791 ' '|''|none)    otherlibdirs=' ' ;;     
6792 *)      otherlibdirs="$ans" ;;
6793 esac
6794 case "$otherlibdirs" in
6795 ' ') val=$undef ;;
6796 *)      val=$define ;;
6797 esac
6798 set d_perl_otherlibdirs
6799 eval $setvar
6800
6801 : Cruising for prototypes
6802 echo " "
6803 echo "Checking out function prototypes..." >&4
6804 $cat >prototype.c <<'EOCP'
6805 int main(int argc, char *argv[]) {
6806         exit(0);}
6807 EOCP
6808 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6809         echo "Your C compiler appears to support function prototypes."
6810         val="$define"
6811 else
6812         echo "Your C compiler doesn't seem to understand function prototypes."
6813         val="$undef"
6814 fi
6815 set prototype
6816 eval $setvar
6817 $rm -f prototype*
6818
6819 case "$prototype" in
6820 "$define") ;;
6821 *)      ansi2knr='ansi2knr'
6822         echo " "
6823         cat <<EOM >&4
6824
6825 $me:  FATAL ERROR:
6826 This version of $package can only be compiled by a compiler that 
6827 understands function prototypes.  Unfortunately, your C compiler 
6828         $cc $ccflags
6829 doesn't seem to understand them.  Sorry about that.
6830
6831 If GNU cc is available for your system, perhaps you could try that instead.  
6832
6833 Eventually, we hope to support building Perl with pre-ANSI compilers.
6834 If you would like to help in that effort, please contact <perlbug@perl.org>.
6835
6836 Aborting Configure now.
6837 EOM
6838         exit 2
6839         ;;
6840 esac
6841
6842 : determine where public executables go
6843 echo " "
6844 set dflt bin bin
6845 eval $prefixit
6846 fn=d~
6847 rp='Pathname where the public executables will reside?'
6848 . ./getfile
6849 if $test "X$ansexp" != "X$binexp"; then
6850         installbin=''
6851 fi
6852 bin="$ans"
6853 binexp="$ansexp"
6854 : Change installation prefix, if necessary.
6855 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6856 if $test X"$prefix" != X"$installprefix"; then
6857         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6858 else
6859         installbin="$binexp"
6860 fi
6861
6862 echo " "
6863 case "$extras" in
6864 '') dflt='n';;
6865 *) dflt='y';;
6866 esac
6867 cat <<EOM
6868 Perl can be built with extra modules or bundles of modules which
6869 will be fetched from the CPAN and installed alongside Perl.
6870
6871 Notice that you will need access to the CPAN; either via the Internet,
6872 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6873 be asked later to configure the CPAN.pm module which will in turn do
6874 the installation of the rest of the extra modules or bundles.)
6875
6876 Notice also that if the modules require any external software such as
6877 libraries and headers (the libz library and the zlib.h header for the
6878 Compress::Zlib module, for example) you MUST have any such software
6879 already installed, this configuration process will NOT install such
6880 things for you.
6881
6882 If this doesn't make any sense to you, just accept the default '$dflt'.
6883 EOM
6884 rp='Install any extra modules (y or n)?'
6885 . ./myread
6886 case "$ans" in
6887 y|Y)
6888         cat <<EOM
6889
6890 Please list any extra modules or bundles to be installed from CPAN,
6891 with spaces between the names.  The names can be in any format the
6892 'install' command of CPAN.pm will understand.  (Answer 'none',
6893 without the quotes, to install no extra modules or bundles.)
6894 EOM
6895         rp='Extras?'
6896         dflt="$extras"
6897         . ./myread
6898         extras="$ans"
6899 esac
6900 case "$extras" in
6901 ''|'none')
6902         val=''
6903         $rm -f ../extras.lst
6904         ;;
6905 *)      echo "(Saving the list of extras for later...)"
6906         echo "$extras" > ../extras.lst
6907         val="'$extras'"
6908         ;;
6909 esac
6910 set extras
6911 eval $setvar
6912 echo " "
6913
6914 : Find perl5.005 or later.
6915 echo "Looking for a previously installed perl5.005 or later... "
6916 case "$perl5" in
6917 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6918                 : Check if this perl is recent and can load a simple module
6919                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6920                         perl5=$tdir/perl
6921                         break;
6922                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6923                         perl5=$tdir/perl5
6924                         break;
6925                 fi
6926         done
6927         ;;
6928 *)      perl5="$perl5"
6929         ;;
6930 esac
6931 case "$perl5" in
6932 '')     echo "None found.  That's ok.";;
6933 *)      echo "Using $perl5." ;;
6934 esac
6935
6936 : Determine list of previous versions to include in @INC
6937 $cat > getverlist <<EOPL
6938 #!$perl5 -w
6939 use File::Basename;
6940 \$api_versionstring = "$api_versionstring";
6941 \$version = "$version";
6942 \$stem = "$sitelib_stem";
6943 \$archname = "$archname";
6944 EOPL
6945         $cat >> getverlist <<'EOPL'
6946 # Can't have leading @ because metaconfig interprets it as a command!
6947 ;@inc_version_list=();
6948 # XXX Redo to do opendir/readdir? 
6949 if (-d $stem) {
6950     chdir($stem);
6951     ;@candidates = glob("5.*");
6952 }
6953 else {
6954     ;@candidates = ();
6955 }
6956
6957 # XXX ToDo:  These comparisons must be reworked when two-digit
6958 # subversions come along, so that 5.7.10 compares as greater than
6959 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6960 # widespread that we can use the built-in version vectors rather
6961 # than reinventing them here.  For 5.6.0, however, we must
6962 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6963 foreach $d (@candidates) {
6964     if ($d lt $version) {
6965         if ($d ge $api_versionstring) {
6966             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6967         }
6968         elsif ($d ge "5.005") {
6969             unshift(@inc_version_list, grep { -d } $d);
6970         }
6971     }
6972     else {
6973         # Skip newer version.  I.e. don't look in
6974         # 5.7.0 if we're installing 5.6.1.
6975     }
6976 }
6977
6978 if (@inc_version_list) {
6979     print join(' ', @inc_version_list);
6980 }
6981 else {
6982     # Blank space to preserve value for next Configure run.
6983     print " ";
6984 }
6985 EOPL
6986 chmod +x getverlist
6987 case "$inc_version_list" in
6988 '')     if test -x "$perl5$exe_ext"; then
6989                 dflt=`$perl5 getverlist`
6990         else
6991                 dflt='none'
6992         fi
6993         ;;
6994 $undef) dflt='none' ;;
6995 *)  eval dflt=\"$inc_version_list\" ;;
6996 esac
6997 case "$dflt" in
6998 ''|' ') dflt=none ;;
6999 esac
7000 case "$dflt" in
7001 5.005) case "$bincompat5005" in
7002        $define|true|[yY]*) ;;
7003        *) dflt=none ;;
7004        esac
7005        ;;
7006 esac
7007 $cat <<'EOM'
7008
7009 In order to ease the process of upgrading, this version of perl 
7010 can be configured to use modules built and installed with earlier 
7011 versions of perl that were installed under $prefix.  Specify here
7012 the list of earlier versions that this version of perl should check.
7013 If Configure detected no earlier versions of perl installed under
7014 $prefix, then the list will be empty.  Answer 'none' to tell perl
7015 to not search earlier versions.
7016
7017 The default should almost always be sensible, so if you're not sure,
7018 just accept the default.
7019 EOM
7020
7021 rp='List of earlier versions to include in @INC?'
7022 . ./myread
7023 case "$ans" in
7024 [Nn]one|''|' ') inc_version_list=' ' ;;
7025 *) inc_version_list="$ans" ;;
7026 esac
7027 case "$inc_version_list" in
7028 ''|' ') 
7029         inc_version_list_init='0';;
7030 *)      inc_version_list_init=`echo $inc_version_list |
7031                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7032         ;;
7033 esac
7034 $rm -f getverlist
7035
7036 : determine whether to install perl also as /usr/bin/perl
7037
7038 echo " "
7039 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7040         $cat <<EOM
7041 Many scripts expect perl to be installed as /usr/bin/perl.
7042 I can install the perl you are about to compile also as /usr/bin/perl
7043 (in addition to $installbin/perl).
7044 EOM
7045         case "$installusrbinperl" in
7046         "$undef"|[nN]*) dflt='n';;
7047         *)              dflt='y';;
7048         esac
7049         rp="Do you want to install perl as /usr/bin/perl?"
7050         . ./myread
7051         case "$ans" in
7052         [yY]*)  val="$define";;
7053         *)      val="$undef" ;;
7054         esac
7055 else
7056         val="$undef"
7057 fi
7058 set installusrbinperl
7059 eval $setvar
7060
7061 : see if dld is available
7062 set dld.h i_dld
7063 eval $inhdr
7064
7065 : see if dlopen exists
7066 xxx_runnm="$runnm"
7067 runnm=false
7068 set dlopen d_dlopen
7069 eval $inlibc
7070 runnm="$xxx_runnm"
7071
7072 : determine which dynamic loading, if any, to compile in
7073 echo " "
7074 dldir="ext/DynaLoader"
7075 case "$usedl" in
7076 $define|y|true)
7077         dflt='y'
7078         usedl="$define"
7079         ;;
7080 $undef|n|false)
7081         dflt='n'
7082         usedl="$undef"
7083         ;;
7084 *) 
7085         dflt='n'
7086         case "$d_dlopen" in
7087             $define) dflt='y' ;;
7088         esac
7089         case "$i_dld" in
7090             $define) dflt='y' ;;
7091         esac
7092         : Does a dl_xxx.xs file exist for this operating system
7093         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7094         ;;
7095 esac
7096 rp="Do you wish to use dynamic loading?"
7097 . ./myread
7098 usedl="$ans"
7099 case "$ans" in
7100 y*) usedl="$define"
7101         case "$dlsrc" in
7102         '')
7103                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7104                         dflt="$dldir/dl_${osname}.xs"
7105                 elif $test "$d_dlopen" = "$define" ; then
7106                         dflt="$dldir/dl_dlopen.xs"
7107                 elif $test "$i_dld" = "$define" ; then
7108                         dflt="$dldir/dl_dld.xs"
7109                 else
7110                         dflt=''
7111                 fi
7112                 ;;
7113         *)      dflt="$dldir/$dlsrc"
7114                 ;;
7115         esac
7116     echo "The following dynamic loading files are available:"
7117         : Can not go over to $dldir because getfile has path hard-coded in.
7118         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7119         rp="Source file to use for dynamic loading"
7120         fn="fne"
7121         gfpth="$src"
7122         . ./getfile
7123         usedl="$define"
7124         : emulate basename
7125         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7126
7127         $cat << EOM
7128
7129 Some systems may require passing special flags to $cc -c to
7130 compile modules that will be used to create a shared library.
7131 To use no flags, say "none".
7132
7133 EOM
7134     case "$cccdlflags" in
7135     '') case "$gccversion" in
7136                 '') case "$osname" in
7137                         hpux)   dflt='+z' ;;
7138                         next)   dflt='none' ;;
7139                         irix*)  dflt='-KPIC' ;;
7140                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7141                         sunos)  dflt='-pic' ;;
7142                         *)      dflt='none' ;;
7143                     esac
7144                         ;;
7145                 *)  case "$osname" in
7146                         darwin) dflt='none' ;;
7147                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7148                         *)      dflt='-fpic' ;;
7149                     esac ;;
7150             esac ;;
7151         ' ') dflt='none' ;;
7152     *)  dflt="$cccdlflags" ;;
7153     esac
7154     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7155     . ./myread
7156     case "$ans" in
7157     none) cccdlflags=' ' ;;
7158     *) cccdlflags="$ans" ;;
7159     esac
7160
7161     cat << EOM
7162
7163 Some systems use ld to create libraries that can be dynamically loaded,
7164 while other systems (such as those using ELF) use $cc.
7165
7166 EOM
7167         case "$ld" in
7168         '')     $cat >try.c <<'EOM'
7169 /* Test for whether ELF binaries are produced */
7170 #include <fcntl.h>
7171 #include <stdlib.h>
7172 int main() {
7173         char b[4];
7174         int i = open("a.out",O_RDONLY);
7175         if(i == -1) 
7176                 exit(1); /* fail */
7177         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7178                 exit(0); /* succeed (yes, it's ELF) */
7179         else
7180                 exit(1); /* fail */
7181 }
7182 EOM
7183                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7184                         cat <<EOM
7185 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7186 EOM
7187                         dflt="$cc"
7188                 else
7189                         echo "I'll use ld to build dynamic libraries."
7190                         dflt='ld'
7191                 fi
7192                 rm -f try.c a.out
7193                 ;;
7194         *)      dflt="$ld"
7195                 ;;
7196         esac
7197
7198     rp="What command should be used to create dynamic libraries?"
7199     . ./myread
7200         ld="$ans"
7201
7202     cat << EOM
7203
7204 Some systems may require passing special flags to $ld to create a
7205 library that can be dynamically loaded.  If your ld flags include
7206 -L/other/path options to locate libraries outside your loader's normal
7207 search path, you may need to specify those -L options here as well.  To
7208 use no flags, say "none".
7209
7210 EOM
7211     case "$lddlflags" in
7212     '') case "$osname" in
7213                         beos) dflt='-nostart' ;;
7214                         hpux) dflt='-b';
7215                               case "$gccversion" in
7216                               '') dflt="$dflt +vnocompatwarnings" ;;
7217                               esac
7218                               ;;        
7219                         linux|irix*)    dflt='-shared' ;;
7220                         next)  dflt='none' ;;
7221                         solaris) dflt='-G' ;;
7222                         sunos) dflt='-assert nodefinitions' ;;
7223                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7224                 *)     dflt='none' ;;
7225                         esac
7226                         ;;
7227     *) dflt="$lddlflags" ;;
7228     esac
7229
7230         : Try to guess additional flags to pick up local libraries.
7231         : Be careful not to append to a plain 'none'
7232         case "$dflt" in
7233         none) dflt='' ;;
7234         esac
7235         for thisflag in $ldflags; do
7236                 case "$thisflag" in
7237                 -L*|-R*|-Wl,-R*)
7238                         case " $dflt " in
7239                         *" $thisflag "*) ;;
7240                         *) dflt="$dflt $thisflag" ;;
7241                         esac
7242                         ;;
7243                 esac
7244         done
7245
7246         case "$dflt" in
7247         ''|' ') dflt='none' ;;
7248         esac
7249
7250     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7251     . ./myread
7252     case "$ans" in
7253     none) lddlflags=' ' ;;
7254     *) lddlflags="$ans" ;;
7255     esac
7256
7257         cat <<EOM
7258
7259 Some systems may require passing special flags to $cc to indicate that
7260 the resulting executable will use dynamic linking.  To use no flags,
7261 say "none".
7262
7263 EOM
7264     case "$ccdlflags" in
7265     '') case "$osname" in
7266                 hpux)   dflt='-Wl,-E' ;;
7267                 linux)  dflt='-rdynamic' ;;
7268                 next)   dflt='none' ;;
7269                 sunos)  dflt='none' ;;
7270                 *)      dflt='none' ;;
7271             esac ;;
7272     ' ')  dflt='none' ;;
7273     *)  dflt="$ccdlflags" ;;
7274     esac
7275     rp="Any special flags to pass to $cc to use dynamic linking?"
7276     . ./myread
7277     case "$ans" in
7278     none) ccdlflags=' ' ;;
7279     *) ccdlflags="$ans" ;;
7280     esac
7281     ;;
7282 *)  usedl="$undef"
7283         ld='ld'
7284     dlsrc='dl_none.xs'
7285     lddlflags=''
7286     ccdlflags=''
7287     ;;
7288 esac
7289
7290 also=''
7291 case "$usedl" in
7292 $undef)
7293         # No dynamic loading being used, so don't bother even to prompt.
7294         useshrplib='false'
7295         ;;
7296 *)      case "$useshrplib" in
7297         '')     case "$osname" in
7298                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7299                         dflt=y
7300                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7301                         ;;
7302                 next*)
7303                         case "$osvers" in
7304                         4*)     dflt=y
7305                                 also='Building a shared libperl is needed for MAB support.'
7306                                 ;;
7307                         *)      dflt=n
7308                                 ;;
7309                         esac
7310                         ;;
7311                 *)      dflt=n
7312                         ;;
7313                 esac
7314                 ;;
7315         $define|true|[Yy]*)
7316                 dflt=y
7317                 ;;
7318         *)      dflt=n
7319                 ;;
7320         esac
7321         $cat << EOM
7322
7323 The perl executable is normally obtained by linking perlmain.c with
7324 libperl${_a}, any static extensions (usually just DynaLoader), and
7325 any other libraries needed on this system (such as -lm, etc.).  Since
7326 your system supports dynamic loading, it is probably possible to build
7327 a shared libperl.$so.  If you will have more than one executable linked
7328 to libperl.$so, this will significantly reduce the size of each
7329 executable, but it may have a noticeable affect on performance.  The
7330 default is probably sensible for your system.
7331 $also
7332
7333 EOM
7334         rp="Build a shared libperl.$so (y/n)"
7335         . ./myread
7336         case "$ans" in
7337         true|$define|[Yy]*)
7338                 useshrplib='true'  ;;
7339         *)      useshrplib='false' ;;
7340         esac
7341         ;;
7342 esac
7343
7344 case "$useshrplib" in
7345 true)
7346         case "$libperl" in
7347         '')
7348                 # Figure out a good name for libperl.so.  Since it gets stored in
7349                 # a version-specific architecture-dependent library, the version
7350                 # number isn't really that important, except for making cc/ld happy.
7351                 #
7352                 # A name such as libperl.so.3.1
7353                 majmin="libperl.$so.$patchlevel.$subversion"
7354                 # A name such as libperl.so.301
7355                 majonly=`echo $patchlevel $subversion |
7356                         $awk '{printf "%d%02d", $1, $2}'`
7357                 majonly=libperl.$so.$majonly
7358                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7359                 # rely on figuring it out from the naming of libc.
7360                 case "${osname}${osvers}" in
7361                 next4*)
7362                         dflt=libperl.5.$so
7363                         # XXX How handle the --version stuff for MAB?
7364                         ;;
7365                 linux*)  # ld won't link with a bare -lperl otherwise.
7366                         dflt=libperl.$so
7367                         ;;
7368                 cygwin*) # include version
7369                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7370                         ;;
7371                 *)      # Try to guess based on whether libc has major.minor.
7372                         case "$libc" in
7373                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7374                         *libc.$so.[0-9]*) dflt=$majonly ;;
7375                         *)      dflt=libperl.$so ;;
7376                         esac
7377                         ;;
7378                 esac
7379                 ;;
7380         *)      dflt=$libperl
7381                 ;;
7382         esac
7383         cat << EOM
7384
7385 I need to select a good name for the shared libperl.  If your system uses
7386 library names with major and minor numbers, then you might want something
7387 like $majmin.  Alternatively, if your system uses a single version
7388 number for shared libraries, then you might want to use $majonly.
7389 Or, your system might be quite happy with a simple libperl.$so.
7390
7391 Since the shared libperl will get installed into a version-specific
7392 architecture-dependent directory, the version number of the shared perl
7393 library probably isn't important, so the default should be o.k.
7394
7395 EOM
7396         rp='What name do you want to give to the shared libperl?'
7397         . ./myread
7398         libperl=$ans
7399         echo "Ok, I'll use $libperl"
7400         ;;
7401 *)
7402         libperl="libperl${_a}"
7403         ;;
7404 esac
7405
7406 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7407 case "$shrpdir" in
7408 '') ;;
7409 *)      $cat >&4 <<EOM
7410 WARNING:  Use of the shrpdir variable for the installation location of
7411 the shared $libperl is not supported.  It was never documented and
7412 will not work in this version.  Let me (perlbug@perl.org)
7413 know of any problems this may cause.
7414
7415 EOM
7416         case "$shrpdir" in
7417         "$archlibexp/CORE")
7418                 $cat >&4 <<EOM
7419 But your current setting of $shrpdir is
7420 the default anyway, so it's harmless.
7421 EOM
7422                 ;;
7423         *)
7424                 $cat >&4 <<EOM
7425 Further, your current attempted setting of $shrpdir
7426 conflicts with the value of $archlibexp/CORE
7427 that installperl will use.
7428 EOM
7429                 ;;
7430         esac
7431         ;;
7432 esac
7433
7434 # How will the perl executable find the installed shared $libperl?
7435 # Add $xxx to ccdlflags.
7436 # If we can't figure out a command-line option, use $shrpenv to
7437 # set env LD_RUN_PATH.  The main perl makefile uses this.
7438 shrpdir=$archlibexp/CORE
7439 xxx=''
7440 tmp_shrpenv=''
7441 if "$useshrplib"; then
7442     case "$osname" in 
7443         aix)
7444                 # We'll set it in Makefile.SH...
7445                 ;;
7446         solaris)
7447                 xxx="-R $shrpdir"
7448                 ;;
7449         freebsd|netbsd)
7450                 xxx="-Wl,-R$shrpdir"
7451                 ;;
7452         linux|irix*|dec_osf)
7453                 xxx="-Wl,-rpath,$shrpdir"
7454                 ;;
7455         next)
7456                 # next doesn't like the default...
7457                 ;;
7458         beos)
7459                 # beos doesn't like the default, either.
7460                 ;;
7461         hpux*)
7462                 # hpux doesn't like the default, either.
7463                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7464                 ;;
7465         *)
7466                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7467                 ;;
7468         esac
7469         case "$xxx" in
7470         '') ;;
7471         *)      
7472                 # Only add $xxx if it isn't already in ccdlflags.
7473                 case " $ccdlflags " in
7474                 *" $xxx "*)     ;;
7475                 *)      ccdlflags="$ccdlflags $xxx"
7476                         cat <<EOM >&4
7477
7478 Adding $xxx to the flags
7479 passed to $ld so that the perl executable will find the 
7480 installed shared $libperl.
7481
7482 EOM
7483                         ;;
7484                 esac
7485                 ;;
7486         esac
7487 fi
7488 # Fix ccdlflags in AIX for building external extensions.
7489 # (For building Perl itself bare -bE:perl.exp is needed,
7490 #  Makefile.SH takes care of this.)
7491 case "$osname" in
7492 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7493 esac
7494 # Respect a hint or command-line value.
7495 case "$shrpenv" in
7496 '') shrpenv="$tmp_shrpenv" ;;
7497 esac
7498 case "$ldlibpthname" in
7499 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7500 none)   ldlibpthname='' ;;
7501 esac
7502
7503 : determine where manual pages are on this system
7504 echo " "
7505 case "$sysman" in
7506 '') 
7507         syspath='/usr/share/man/man1 /usr/man/man1'
7508         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7509         syspath="$syspath /usr/man/u_man/man1"
7510         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7511         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7512         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7513         sysman=`./loc . /usr/man/man1 $syspath`
7514         ;;
7515 esac
7516 if $test -d "$sysman"; then
7517         echo "System manual is in $sysman." >&4
7518 else
7519         echo "Could not find manual pages in source form." >&4
7520 fi
7521
7522 : determine where manual pages go
7523 set man1dir man1dir none
7524 eval $prefixit
7525 $cat <<EOM
7526
7527 $spackage has manual pages available in source form.
7528 EOM
7529 case "$nroff" in
7530 nroff)
7531         echo "However, you don't have nroff, so they're probably useless to you."
7532         case "$man1dir" in
7533         '') man1dir="none";;
7534         esac;;
7535 esac
7536 echo "If you don't want the manual sources installed, answer 'none'."
7537 case "$man1dir" in
7538 ' ') dflt=none
7539         ;;
7540 '')
7541         lookpath="$prefixexp/share/man/man1"
7542         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7543         lookpath="$lookpath $prefixexp/man/p_man/man1"
7544         lookpath="$lookpath $prefixexp/man/u_man/man1"
7545         lookpath="$lookpath $prefixexp/man/man.1"
7546         case "$sysman" in
7547         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7548         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7549         esac
7550         set dflt
7551         eval $prefixup
7552         ;;
7553 *)  dflt="$man1dir"
7554         ;;
7555 esac
7556 echo " "
7557 fn=dn+~
7558 rp="Where do the main $spackage manual pages (source) go?"
7559 . ./getfile
7560 if $test "X$man1direxp" != "X$ansexp"; then
7561         installman1dir=''
7562 fi
7563 man1dir="$ans"
7564 man1direxp="$ansexp"
7565 case "$man1dir" in
7566 '')     man1dir=' '
7567         installman1dir='';;
7568 esac
7569
7570 : Change installation prefix, if necessary.
7571 if $test X"$prefix" != X"$installprefix"; then
7572         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7573 else
7574         installman1dir="$man1direxp"
7575 fi
7576
7577 : What suffix to use on installed man pages
7578
7579 case "$man1dir" in
7580 ' ')
7581         man1ext='0'
7582         ;;
7583 *)
7584         rp="What suffix should be used for the main $spackage man pages?"
7585         case "$man1ext" in
7586         '')     case "$man1dir" in
7587                 *1)  dflt=1 ;;
7588                 *1p) dflt=1p ;;
7589                 *1pm) dflt=1pm ;;
7590                 *l) dflt=l;;
7591                 *n) dflt=n;;
7592                 *o) dflt=o;;
7593                 *p) dflt=p;;
7594                 *C) dflt=C;;
7595                 *L) dflt=L;;
7596                 *L1) dflt=L1;;
7597                 *) dflt=1;;
7598                 esac
7599                 ;;
7600         *)      dflt="$man1ext";;
7601         esac
7602         . ./myread
7603         man1ext="$ans"
7604         ;;
7605 esac
7606
7607 : see if we can have long filenames
7608 echo " "
7609 first=123456789abcdef
7610 $rm -f $first
7611 if (echo hi >$first) 2>/dev/null; then
7612         if $test -f 123456789abcde; then
7613                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7614                 val="$undef"
7615         else
7616                 echo 'You can have filenames longer than 14 characters.'>&4
7617                 val="$define"
7618         fi
7619 else
7620         $cat <<'EOM'
7621 You can't have filenames longer than 14 chars.
7622 You can't even think about them!
7623 EOM
7624         val="$undef"
7625 fi 
7626 set d_flexfnam
7627 eval $setvar
7628 $rm -rf 123456789abcde*
7629
7630 : determine where library module manual pages go
7631 set man3dir man3dir none
7632 eval $prefixit
7633 $cat <<EOM
7634
7635 $spackage has manual pages for many of the library modules.
7636 EOM
7637
7638 case "$nroff" in
7639 nroff)
7640         $cat <<'EOM'
7641 However, you don't have nroff, so they're probably useless to you.
7642 EOM
7643         case "$man3dir" in
7644         '') man3dir="none";;
7645         esac;;
7646 esac
7647
7648 case "$d_flexfnam" in
7649 undef)
7650         $cat <<'EOM'
7651 However, your system can't handle the long file names like File::Basename.3. 
7652 EOM
7653         case "$man3dir" in
7654         '') man3dir="none";;
7655         esac;;
7656 esac
7657
7658 echo "If you don't want the manual sources installed, answer 'none'."
7659 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7660 case "$man3dir" in
7661 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7662         if $test -d "$privlib/man/man3"; then
7663                 cat <<EOM >&4
7664
7665 WARNING:  Previous versions of perl installed man3 pages into
7666 $privlib/man/man3.  This version will suggest a 
7667 new default of $dflt.  
7668 EOM
7669                 tdflt=$dflt
7670                 dflt='n'
7671                 rp='Do you wish to preserve the old behavior?(y/n)'
7672                 . ./myread
7673                 case "$ans" in
7674                 y*) dflt="$privlib/man/man3" ;;
7675                 *)  dflt=$tdflt ;;
7676                 esac
7677     fi
7678         ;;
7679 *)      dflt="$man3dir" ;;
7680 esac
7681 case "$dflt" in
7682 ' ') dflt=none ;;
7683 esac
7684 echo " "
7685 fn=dn+~
7686 rp="Where do the $package library man pages (source) go?"
7687 . ./getfile
7688 man3dir="$ans"
7689 man3direxp="$ansexp"
7690 case "$man3dir" in
7691 '')     man3dir=' '
7692         installman3dir='';;
7693 esac
7694
7695 : Change installation prefix, if necessary.
7696 if $test X"$prefix" != X"$installprefix"; then
7697         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7698 else
7699         installman3dir="$man3direxp"
7700 fi
7701
7702 : What suffix to use on installed man pages
7703 case "$man3dir" in
7704 ' ')
7705         man3ext='0'
7706         ;;
7707 *)
7708         rp="What suffix should be used for the $package library man pages?"
7709         case "$man3ext" in
7710         '')     case "$man3dir" in
7711                 *3)  dflt=3 ;;
7712                 *3p) dflt=3p ;;
7713                 *3pm) dflt=3pm ;;
7714                 *l) dflt=l;;
7715                 *n) dflt=n;;
7716                 *o) dflt=o;;
7717                 *p) dflt=p;;
7718                 *C) dflt=C;;
7719                 *L) dflt=L;;
7720                 *L3) dflt=L3;;
7721                 *) dflt=3;;
7722                 esac
7723                 ;;
7724         *)      dflt="$man3ext";;
7725         esac
7726         . ./myread
7727         man3ext="$ans"
7728         ;;
7729 esac
7730
7731 : see if we have to deal with yellow pages, now NIS.
7732 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7733         if $test -f /usr/etc/nibindd; then
7734                 echo " "
7735                 echo "I'm fairly confident you're on a NeXT."
7736                 echo " "
7737                 rp='Do you get the hosts file via NetInfo?'
7738                 dflt=y
7739                 case "$hostcat" in
7740                 nidump*) ;;
7741                 '') ;;
7742                 *) dflt=n;;
7743                 esac
7744                 . ./myread
7745                 case "$ans" in
7746                 y*) hostcat='nidump hosts .';;
7747                 *)      case "$hostcat" in
7748                         nidump*) hostcat='';;
7749                         esac
7750                         ;;
7751                 esac
7752         fi
7753         case "$hostcat" in
7754         nidump*) ;;
7755         *)
7756                 case "$hostcat" in
7757                 *ypcat*) dflt=y;;
7758                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7759                                 dflt=y
7760                         else
7761                                 dflt=n
7762                         fi;;
7763                 *) dflt=n;;
7764                 esac
7765                 echo " "
7766                 rp='Are you getting the hosts file via yellow pages?'
7767                 . ./myread
7768                 case "$ans" in
7769                 y*) hostcat='ypcat hosts';;
7770                 *) hostcat='cat /etc/hosts';;
7771                 esac
7772                 ;;
7773         esac
7774 fi
7775 case "$hostcat" in
7776 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7777 esac
7778 case "$groupcat" in
7779 '') test -f /etc/group && groupcat='cat /etc/group';;
7780 esac
7781 case "$passcat" in
7782 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7783 esac
7784
7785 : now get the host name
7786 echo " "
7787 echo "Figuring out host name..." >&4
7788 case "$myhostname" in
7789 '') cont=true
7790         echo 'Maybe "hostname" will work...'
7791         if tans=`sh -c hostname 2>&1` ; then
7792                 myhostname=$tans
7793                 phostname=hostname
7794                 cont=''
7795         fi
7796         ;;
7797 *) cont='';;
7798 esac
7799 if $test "$cont"; then
7800         if ./xenix; then
7801                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7802                 if tans=`cat /etc/systemid 2>&1` ; then
7803                         myhostname=$tans
7804                         phostname='cat /etc/systemid'
7805                         echo "Whadyaknow.  Xenix always was a bit strange..."
7806                         cont=''
7807                 fi
7808         elif $test -r /etc/systemid; then
7809                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7810         fi
7811 fi
7812 if $test "$cont"; then
7813         echo 'No, maybe "uuname -l" will work...'
7814         if tans=`sh -c 'uuname -l' 2>&1` ; then
7815                 myhostname=$tans
7816                 phostname='uuname -l'
7817         else
7818                 echo 'Strange.  Maybe "uname -n" will work...'
7819                 if tans=`sh -c 'uname -n' 2>&1` ; then
7820                         myhostname=$tans
7821                         phostname='uname -n'
7822                 else
7823                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7824                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7825                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7826                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7827                         else
7828                                 case "$myhostname" in
7829                                 '') echo "Does this machine have an identity crisis or something?"
7830                                         phostname='';;
7831                                 *)
7832                                         echo "Well, you said $myhostname before..."
7833                                         phostname='echo $myhostname';;
7834                                 esac
7835                         fi
7836                 fi
7837         fi
7838 fi
7839 : you do not want to know about this
7840 set $myhostname
7841 myhostname=$1
7842
7843 : verify guess
7844 if $test "$myhostname" ; then
7845         dflt=y
7846         rp='Your host name appears to be "'$myhostname'".'" Right?"
7847         . ./myread
7848         case "$ans" in
7849         y*) ;;
7850         *) myhostname='';;
7851         esac
7852 fi
7853
7854 : bad guess or no guess
7855 while $test "X$myhostname" = X ; do
7856         dflt=''
7857         rp="Please type the (one word) name of your host:"
7858         . ./myread
7859         myhostname="$ans"
7860 done
7861
7862 : translate upper to lower if necessary
7863 case "$myhostname" in
7864 *[A-Z]*)
7865         echo "(Normalizing case in your host name)"
7866         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7867         ;;
7868 esac
7869
7870 case "$myhostname" in
7871 *.*)
7872         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7873         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7874         echo "(Trimming domain name from host name--host name is now $myhostname)"
7875         ;;
7876 *) case "$mydomain" in
7877         '')
7878                 {
7879                         test "X$hostcat" = "Xypcat hosts" &&
7880                         ypmatch "$myhostname" hosts 2>/dev/null |\
7881                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7882                         $test -s hosts
7883                 } || {
7884                         test "X$hostcat" != "X" &&
7885                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7886                                         /[       ]$myhostname[  . ]/p" > hosts
7887                 }
7888                 tmp_re="[       . ]"
7889                 if $test -f hosts; then
7890                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7891                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7892                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7893                                 hosts | $sort | $uniq | \
7894                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7895                         case `$echo X$dflt` in
7896                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7897                                 dflt=.
7898                                 ;;
7899                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7900                                 ;;
7901                         esac
7902                 else
7903                         echo "(I cannot locate a hosts database anywhere)"
7904                         dflt=.
7905                 fi
7906                 case "$dflt" in
7907                 .)
7908                         tans=`./loc resolv.conf X /etc /usr/etc`
7909                         if $test -f "$tans"; then
7910                                 echo "(Attempting domain name extraction from $tans)"
7911                                 dflt=.`$sed -n -e 's/   / /g' \
7912                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7913                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7914                                 case "$dflt" in
7915                                 .) dflt=.`$sed -n -e 's/        / /g' \
7916                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7917                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7918                                         ;;
7919                                 esac
7920                         fi
7921                         ;;
7922                 esac
7923                 case "$dflt" in
7924                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7925                         dflt=.`sh -c domainname 2>/dev/null`
7926                         case "$dflt" in
7927                         '') dflt='.';;
7928                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7929                         esac
7930                         ;;
7931                 esac
7932                 case "$dflt$osname" in
7933                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7934                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7935                         ;;
7936                 esac
7937                 case "$dflt" in
7938                 .) echo "(Lost all hope -- silly guess then)"
7939                         dflt='.uucp'
7940                         ;;
7941                 esac
7942                 $rm -f hosts
7943                 ;;
7944         *) dflt="$mydomain";;
7945         esac;;
7946 esac
7947 echo " "
7948 rp="What is your domain name?"
7949 . ./myread
7950 tans="$ans"
7951 case "$ans" in
7952 '') ;;
7953 .*) ;;
7954 *) tans=".$tans";;
7955 esac
7956 mydomain="$tans"
7957
7958 : translate upper to lower if necessary
7959 case "$mydomain" in
7960 *[A-Z]*)
7961         echo "(Normalizing case in your domain name)"
7962         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7963         ;;
7964 esac
7965
7966 : a little sanity check here
7967 case "$phostname" in
7968 '') ;;
7969 *)
7970         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7971         $myhostname$mydomain|$myhostname) ;;
7972         *)
7973                 case "$phostname" in
7974                 sed*)
7975                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7976                         ;;
7977                 *)
7978                         echo "(That doesn't agree with your $phostname command, by the way.)"
7979                         ;;
7980                 esac
7981         ;;
7982         esac
7983         ;;
7984 esac
7985
7986 $cat <<EOM
7987
7988 I need to get your e-mail address in Internet format if possible, i.e.
7989 something like user@host.domain. Please answer accurately since I have
7990 no easy means to double check it. The default value provided below
7991 is most probably close to reality but may not be valid from outside
7992 your organization...
7993
7994 EOM
7995 cont=x
7996 while test "$cont"; do
7997         case "$cf_email" in
7998         '') dflt="$cf_by@$myhostname$mydomain";;
7999         *) dflt="$cf_email";;
8000         esac
8001         rp='What is your e-mail address?'
8002         . ./myread
8003         cf_email="$ans"
8004         case "$cf_email" in
8005         *@*.*) cont='' ;;
8006         *)
8007                 rp='Address does not look like an Internet one.  Use it anyway?'
8008                 case "$fastread" in
8009                 yes) dflt=y ;;
8010                 *) dflt=n ;;
8011                 esac
8012                 . ./myread
8013                 case "$ans" in
8014                 y*) cont='' ;;
8015                 *) echo " " ;;
8016                 esac
8017                 ;;
8018         esac
8019 done
8020
8021 $cat <<EOM
8022
8023 If you or somebody else will be maintaining perl at your site, please
8024 fill in the correct e-mail address here so that they may be contacted
8025 if necessary. Currently, the "perlbug" program included with perl
8026 will send mail to this address in addition to perlbug@perl.org. You may
8027 enter "none" for no administrator.
8028
8029 EOM
8030 case "$perladmin" in
8031 '') dflt="$cf_email";;
8032 *) dflt="$perladmin";;
8033 esac
8034 rp='Perl administrator e-mail address'
8035 . ./myread
8036 perladmin="$ans"
8037
8038 : determine whether to only install version-specific parts.
8039 echo " "
8040 $cat <<EOM
8041 Do you want to install only the version-specific parts of the perl
8042 distribution?  Usually you do *not* want to do this.
8043 EOM
8044 case "$versiononly" in
8045 "$define"|[Yy]*|true) dflt='y' ;;
8046 *) dflt='n';
8047 esac
8048 rp="Do you want to install only the version-specific parts of perl?"
8049 . ./myread
8050 case "$ans" in
8051 [yY]*)  val="$define";;
8052 *)      val="$undef" ;;
8053 esac
8054 set versiononly
8055 eval $setvar
8056
8057 : figure out how to guarantee perl startup
8058 case "$startperl" in
8059 '')
8060         case "$sharpbang" in
8061         *!)
8062                 $cat <<EOH
8063
8064 I can use the #! construct to start perl on your system. This will
8065 make startup of perl scripts faster, but may cause problems if you
8066 want to share those scripts and perl is not in a standard place
8067 ($binexp/perl) on all your platforms. The alternative is to force
8068 a shell by starting the script with a single ':' character.
8069
8070 EOH
8071                 case "$versiononly" in
8072                 "$define")      dflt="$binexp/perl$version";;  
8073                 *)              dflt="$binexp/perl";;
8074                 esac
8075                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8076                 . ./myread
8077                 case "$ans" in
8078                 none)   startperl=": # use perl";;
8079                 *)      startperl="#!$ans"
8080                         if $test 30 -lt `echo "$ans" | wc -c`; then
8081                                 $cat >&4 <<EOM
8082
8083 WARNING:  Some systems limit the #! command to 32 characters.
8084 If you experience difficulty running Perl scripts with #!, try
8085 installing Perl in a directory with a shorter pathname.
8086
8087 EOM
8088                         fi ;;
8089                 esac
8090                 ;;
8091         *) startperl=": # use perl"
8092                 ;;
8093         esac
8094         ;;
8095 esac
8096 echo "I'll use $startperl to start perl scripts."
8097
8098 : figure best path for perl in scripts
8099 case "$perlpath" in
8100 '')
8101         case "$versiononly" in
8102         "$define")      perlpath="$binexp/perl$version";;
8103         *)              perlpath="$binexp/perl";;
8104         esac
8105         case "$startperl" in
8106         *!*) ;;
8107         *)
8108                 $cat <<EOH
8109
8110 I will use the "eval 'exec'" idiom to start Perl on your system.
8111 I can use the full path of your Perl binary for this purpose, but
8112 doing so may cause problems if you want to share those scripts and
8113 Perl is not always in a standard place ($binexp/perl).
8114
8115 EOH
8116                 dflt="$binexp/perl"
8117                 rp="What path shall I use in \"eval 'exec'\"?"
8118                 . ./myread
8119                 perlpath="$ans"
8120                 ;;
8121         esac
8122         ;;
8123 esac
8124 case "$startperl" in
8125 *!*)    ;;
8126 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8127 esac
8128
8129 : determine where public executable scripts go
8130 set scriptdir scriptdir
8131 eval $prefixit
8132 case "$scriptdir" in
8133 '')
8134         dflt="$bin"
8135         : guess some guesses
8136         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8137         $test -d /usr/share/bin     && dflt=/usr/share/bin
8138         $test -d /usr/local/script  && dflt=/usr/local/script
8139         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8140         $test -d $prefixexp/script  && dflt=$prefixexp/script
8141         set dflt
8142         eval $prefixup
8143         ;;
8144 *)  dflt="$scriptdir"
8145         ;;
8146 esac
8147 $cat <<EOM
8148  
8149 Some installations have a separate directory just for executable scripts so
8150 that they can mount it across multiple architectures but keep the scripts in
8151 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8152 Or you might just lump your scripts in with all your other executables.
8153  
8154 EOM
8155 fn=d~
8156 rp='Where do you keep publicly executable scripts?'
8157 . ./getfile
8158 if $test "X$ansexp" != "X$scriptdirexp"; then
8159         installscript=''
8160 fi
8161 scriptdir="$ans"
8162 scriptdirexp="$ansexp"
8163 : Change installation prefix, if necessary.
8164 if $test X"$prefix" != X"$installprefix"; then
8165         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8166 else
8167         installscript="$scriptdirexp"
8168 fi
8169
8170 : determine where add-on public executables go
8171 case "$sitebin" in
8172 '')     dflt=$siteprefix/bin ;;
8173 *)      dflt=$sitebin ;;
8174 esac
8175 fn=d~
8176 rp='Pathname where the add-on public executables should be installed?'
8177 . ./getfile
8178 sitebin="$ans"
8179 sitebinexp="$ansexp"
8180 : Change installation prefix, if necessary.
8181 if $test X"$prefix" != X"$installprefix"; then
8182         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8183 else
8184         installsitebin="$sitebinexp"
8185 fi
8186
8187 : define an is-a-typedef? function
8188 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8189 case "$inclist" in
8190 "") inclist="sys/types.h";;
8191 esac;
8192 eval "varval=\$$var";
8193 case "$varval" in
8194 "")
8195         $rm -f temp.c;
8196         for inc in $inclist; do
8197                 echo "#include <$inc>" >>temp.c;
8198         done;
8199         echo "#ifdef $type" >> temp.c;
8200         echo "printf(\"We have $type\");" >> temp.c;
8201         echo "#endif" >> temp.c;
8202         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8203         if $contains $type temp.E >/dev/null 2>&1; then
8204                 eval "$var=\$type";
8205         else
8206                 eval "$var=\$def";
8207         fi;
8208         $rm -f temp.?;;
8209 *) eval "$var=\$varval";;
8210 esac'
8211
8212 : define an is-a-typedef? function that prompts if the type is not available.
8213 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8214 case "$inclist" in
8215 "") inclist="sys/types.h";;
8216 esac;
8217 eval "varval=\$$var";
8218 case "$varval" in
8219 "")
8220         $rm -f temp.c;
8221         for inc in $inclist; do
8222                 echo "#include <$inc>" >>temp.c;
8223         done;
8224         echo "#ifdef $type" >> temp.c;
8225         echo "printf(\"We have $type\");" >> temp.c;
8226         echo "#endif" >> temp.c;
8227         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8228         echo " " ;
8229         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8230         if $contains $type temp.E >/dev/null 2>&1; then
8231                 echo "$type found." >&4;
8232                 eval "$var=\$type";
8233         else
8234                 echo "$type NOT found." >&4;
8235                 dflt="$def";
8236                 . ./myread ;
8237                 eval "$var=\$ans";
8238         fi;
8239         $rm -f temp.?;;
8240 *) eval "$var=\$varval";;
8241 esac'
8242
8243 : see what type lseek is declared as in the kernel
8244 rp="What is the type used for lseek's offset on this system?"
8245 set off_t lseektype long stdio.h sys/types.h
8246 eval $typedef_ask
8247
8248 echo " "
8249 echo "Checking to see how big your file offsets are..." >&4
8250 $cat >try.c <<EOCP
8251 #include <sys/types.h>
8252 #include <stdio.h>
8253 int main()
8254 {
8255     printf("%d\n", (int)sizeof($lseektype));
8256     return(0); 
8257 }
8258 EOCP
8259 set try
8260 if eval $compile_ok; then
8261         lseeksize=`$run ./try`
8262         echo "Your file offsets are $lseeksize bytes long."
8263 else
8264         dflt=$longsize
8265         echo " "
8266         echo "(I can't seem to compile the test program.  Guessing...)"
8267         rp="What is the size of your file offsets (in bytes)?"
8268         . ./myread
8269         lseeksize="$ans"
8270 fi
8271 $rm -f try.c try
8272
8273 : see what type file positions are declared as in the library
8274 rp="What is the type for file position used by fsetpos()?"
8275 set fpos_t fpostype long stdio.h sys/types.h
8276 eval $typedef_ask
8277
8278 echo " "
8279 case "$fpostype" in
8280 *_t) zzz="$fpostype"    ;;
8281 *)   zzz="fpos_t"       ;;
8282 esac
8283 echo "Checking the size of $zzz..." >&4 
8284 cat > try.c <<EOCP
8285 #include <sys/types.h>
8286 #include <stdio.h>
8287 int main() {
8288     printf("%d\n", (int)sizeof($fpostype));
8289     exit(0);
8290 }
8291 EOCP
8292 set try
8293 if eval $compile_ok; then
8294         yyy=`$run ./try`
8295         case "$yyy" in
8296         '')     fpossize=4
8297                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8298                 ;;
8299         *)      fpossize=$yyy
8300                 echo "Your $zzz is $fpossize bytes long."
8301                 ;;
8302         esac
8303 else
8304         dflt="$longsize"
8305         echo " " >&4
8306         echo "(I can't compile the test program.  Guessing...)" >&4
8307         rp="What is the size of your file positions (in bytes)?"
8308         . ./myread
8309         fpossize="$ans"
8310 fi
8311
8312
8313
8314 # Backward compatibility (uselfs is deprecated).
8315 case "$uselfs" in
8316 "$define"|true|[yY]*)
8317         cat <<EOM >&4
8318
8319 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8320 EOM
8321         uselargefiles="$define"
8322         ;;
8323 esac                          
8324
8325 case "$lseeksize:$fpossize" in
8326 8:8) cat <<EOM
8327
8328 You can have files larger than 2 gigabytes.
8329 EOM
8330    val="$define" ;;
8331 *)    case "$uselargefiles" in
8332    "$undef"|false|[nN]*) dflt='n' ;;
8333    *)   dflt='y' ;;
8334    esac
8335    cat <<EOM
8336
8337 Perl can be built to understand large files (files larger than 2 gigabytes)
8338 on some systems.  To do so, Configure can be run with -Duselargefiles.
8339
8340 If this doesn't make any sense to you, just accept the default '$dflt'.
8341 EOM
8342    rp='Try to understand large files, if available?'
8343    . ./myread
8344    case "$ans" in
8345    y|Y)         val="$define" ;;
8346    *)           val="$undef"  ;;
8347    esac
8348    ;;
8349 esac
8350 set uselargefiles
8351 eval $setvar
8352 case "$uselargefiles" in
8353 "$define")
8354 : Look for a hint-file generated 'call-back-unit'.  If the
8355 : user has specified that a large files perl is to be built,
8356 : we may need to set or change some other defaults.
8357         if $test -f uselargefiles.cbu; then
8358                 echo "Your platform has some specific hints for large file builds, using them..."
8359                 . ./uselargefiles.cbu
8360                 echo " "
8361                 echo "Rechecking to see how big your file offsets are..." >&4
8362                 $cat >try.c <<EOCP
8363 #include <sys/types.h>
8364 #include <stdio.h>
8365 int main()
8366 {
8367     printf("%d\n", (int)sizeof($lseektype));
8368     return(0); 
8369 }
8370 EOCP
8371                 set try
8372                 if eval $compile_ok; then
8373                         lseeksize=`$run ./try`
8374                         $echo "Your file offsets are now $lseeksize bytes long."
8375                 else
8376                         dflt="$lseeksize"
8377                         echo " "
8378                         echo "(I can't seem to compile the test program.  Guessing...)"
8379                         rp="What is the size of your file offsets (in bytes)?"
8380                         . ./myread
8381                         lseeksize="$ans"
8382                 fi
8383                 case "$fpostype" in
8384                 *_t) zzz="$fpostype"    ;;
8385                 *)   zzz="fpos_t"       ;;
8386                 esac
8387                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8388                 $cat > try.c <<EOCP
8389 #include <sys/types.h>
8390 #include <stdio.h>
8391 int main() {
8392     printf("%d\n", (int)sizeof($fpostype));
8393     exit(0);
8394 }
8395 EOCP
8396                 set try
8397                 if eval $compile_ok; then
8398                         yyy=`$run ./try`
8399                         dflt="$lseeksize"
8400                         case "$yyy" in
8401                         '')     echo " "
8402                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8403                                 ;;
8404                         *)      fpossize=$yyy
8405                                 echo " $fpossize bytes." >&4
8406                                 ;;
8407                         esac
8408                 else
8409                         dflt="$fpossize"
8410                         echo " "
8411                         echo "(I can't compile the test program.  Guessing...)" >&4
8412                         rp="What is the size of your file positions (in bytes)?"
8413                         . ./myread
8414                         fpossize="$ans"
8415                 fi
8416                 $rm -f try.c try
8417         fi
8418         ;;
8419 esac
8420
8421 case "$vendorprefix" in
8422 '')     d_vendorbin="$undef"
8423         vendorbin=''
8424         vendorbinexp=''
8425         ;;
8426 *)      d_vendorbin="$define"
8427         : determine where vendor-supplied executables go.
8428         case "$vendorbin" in
8429         '') dflt=$vendorprefix/bin ;;
8430         *)      dflt="$vendorbin" ;;
8431         esac
8432         fn=d~+
8433         rp='Pathname for the vendor-supplied executables directory?'
8434         . ./getfile
8435         vendorbin="$ans"
8436         vendorbinexp="$ansexp"
8437         ;;
8438 esac
8439 : Change installation prefix, if necessary.
8440 if $test X"$prefix" != X"$installprefix"; then
8441         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8442 else
8443         installvendorbin="$vendorbinexp"
8444 fi
8445
8446 : see if qgcvt exists
8447 set qgcvt d_qgcvt
8448 eval $inlibc
8449
8450 echo " "
8451
8452 if $test X"$d_longdbl" = X"$define"; then
8453
8454 echo "Checking how to print long doubles..." >&4
8455
8456 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8457         $cat >try.c <<'EOCP'
8458 #include <sys/types.h>
8459 #include <stdio.h>
8460 int main() {
8461   double d = 123.456;
8462   printf("%.3f\n", d);
8463 }
8464 EOCP
8465         set try
8466         if eval $compile; then
8467                 yyy=`$run ./try`
8468                 case "$yyy" in
8469                 123.456)
8470                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8471                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8472                         echo "We will use %f."
8473                         ;;
8474                 esac
8475         fi
8476 fi
8477
8478 if $test X"$sPRIfldbl" = X; then
8479         $cat >try.c <<'EOCP'
8480 #include <sys/types.h>
8481 #include <stdio.h>
8482 int main() {
8483   long double d = 123.456;
8484   printf("%.3Lf\n", d);
8485 }
8486 EOCP
8487         set try
8488         if eval $compile; then
8489                 yyy=`$run ./try`
8490                 case "$yyy" in
8491                 123.456)
8492                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8493                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8494                         echo "We will use %Lf."
8495                         ;;
8496                 esac
8497         fi
8498 fi
8499
8500 if $test X"$sPRIfldbl" = X; then
8501         $cat >try.c <<'EOCP'
8502 #include <sys/types.h>
8503 #include <stdio.h>
8504 int main() {
8505   long double d = 123.456;
8506   printf("%.3llf\n", d);
8507 }
8508 EOCP
8509         set try
8510         if eval $compile; then
8511                 yyy=`$run ./try`
8512                 case "$yyy" in
8513                 123.456)
8514                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8515                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8516                         echo "We will use %llf."
8517                         ;;
8518                 esac
8519         fi
8520 fi
8521
8522 if $test X"$sPRIfldbl" = X; then
8523         $cat >try.c <<'EOCP'
8524 #include <sys/types.h>
8525 #include <stdio.h>
8526 int main() {
8527   long double d = 123.456;
8528   printf("%.3lf\n", d);
8529 }
8530 EOCP
8531         set try
8532         if eval $compile; then
8533                 yyy=`$run ./try`
8534                 case "$yyy" in
8535                 123.456)
8536                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8537                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8538                         echo "We will use %lf."
8539                         ;;
8540                 esac
8541         fi
8542 fi
8543
8544 if $test X"$sPRIfldbl" = X; then
8545         echo "Cannot figure out how to print long doubles." >&4
8546 else
8547         sSCNfldbl=$sPRIfldbl    # expect consistency
8548 fi
8549
8550 $rm -f try try.*
8551
8552 fi # d_longdbl
8553
8554 case "$sPRIfldbl" in
8555 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8556         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8557         d_SCNfldbl="$undef";
8558         ;;
8559 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8560         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8561         d_SCNfldbl="$define";
8562         ;;
8563 esac
8564
8565 : Check how to convert floats to strings.
8566 echo " "
8567 echo "Checking for an efficient way to convert floats to strings."
8568 echo " " > try.c
8569 case "$uselongdouble" in
8570 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8571 esac
8572 case "$d_longdbl" in
8573 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8574 esac
8575 case "$d_PRIgldbl" in
8576 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8577 esac
8578 $cat >>try.c <<EOP
8579 #ifdef TRY_gconvert
8580 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8581 char *myname = "gconvert";
8582 #endif
8583 #ifdef TRY_gcvt
8584 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8585 char *myname = "gcvt";
8586 #endif
8587 #ifdef TRY_qgcvt
8588 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8589 char *myname = "qgcvt";
8590 #define DOUBLETYPE long double
8591 #endif
8592 #ifdef TRY_sprintf
8593 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8594 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8595 #else
8596 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8597 #endif
8598 char *myname = "sprintf";
8599 #endif
8600
8601 #ifndef DOUBLETYPE
8602 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8603 #define DOUBLETYPE long double
8604 #else
8605 #define DOUBLETYPE double
8606 #endif
8607 #endif
8608
8609 #include <stdio.h>
8610
8611 #define I_STDLIB $i_stdlib
8612 #ifdef I_STDLIB
8613 #include <stdlib.h>
8614 #endif
8615
8616 int
8617 checkit(expect, got)
8618 char *expect;
8619 char *got;
8620 {
8621     if (strcmp(expect, got)) {
8622                 printf("%s oddity:  Expected %s, got %s\n",
8623                         myname, expect, got);
8624                 exit(1);
8625         }
8626 }
8627
8628 int main()
8629
8630         char buf[64]; 
8631         buf[63] = '\0';
8632
8633         /* This must be 1st test on (which?) platform */
8634         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8635         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8636         checkit("0.1", buf);
8637
8638         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8639         checkit("1", buf);
8640
8641         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8642         checkit("1.1", buf);
8643
8644         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8645         checkit("1.01", buf);
8646
8647         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8648         checkit("1.001", buf);
8649
8650         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8651         checkit("1.0001", buf);
8652
8653         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8654         checkit("1.00001", buf);
8655
8656         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8657         checkit("1.000001", buf);
8658
8659         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8660         checkit("0", buf);
8661
8662         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8663         checkit("-1", buf);
8664
8665         /* Some Linux gcvt's give 1.e+5 here. */
8666         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8667         checkit("100000", buf);
8668         
8669         /* Some Linux gcvt's give -1.e+5 here. */
8670         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8671         checkit("-100000", buf);
8672
8673         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8674         checkit("123.456", buf);
8675
8676         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8677         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8678         if (strlen(buf) > 5)
8679             checkit("1e+030", buf); /* for Microsoft */
8680         else
8681             checkit("1e+30", buf);
8682
8683         exit(0);
8684 }
8685 EOP
8686 case "$d_Gconvert" in
8687 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8688 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8689 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8690 *) xxx_list='gconvert gcvt sprintf' ;;
8691 esac
8692
8693 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8694 "$define$define$define")
8695     # for long doubles prefer first qgcvt, then sprintf
8696     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8697     xxx_list="sprintf $xxx_list"
8698     case "$d_qgcvt" in
8699     "$define") xxx_list="qgcvt $xxx_list" ;;
8700     esac
8701     ;;
8702 esac
8703
8704 for xxx_convert in $xxx_list; do
8705         echo "Trying $xxx_convert..."
8706         $rm -f try try$_o
8707         set try -DTRY_$xxx_convert
8708         if eval $compile; then
8709                 echo "$xxx_convert() found." >&4
8710                 if $run ./try; then
8711                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8712                         break;
8713                 else
8714                         echo "...But $xxx_convert didn't work as I expected."
8715                 fi
8716         else
8717                 echo "$xxx_convert NOT found." >&4
8718         fi
8719 done
8720         
8721 case "$xxx_convert" in
8722 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8723 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8724 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8725 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8726    "$define$define$define")
8727       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8728    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8729    esac
8730    ;;  
8731 esac
8732
8733 : see if _fwalk exists
8734 set fwalk d__fwalk
8735 eval $inlibc
8736
8737 : Initialize h_fcntl
8738 h_fcntl=false
8739
8740 : Initialize h_sysfile
8741 h_sysfile=false
8742
8743 : access call always available on UNIX
8744 set access d_access
8745 eval $inlibc
8746
8747 : locate the flags for 'access()'
8748 case "$d_access" in
8749 "$define")
8750         echo " "
8751         $cat >access.c <<'EOCP'
8752 #include <sys/types.h>
8753 #ifdef I_FCNTL
8754 #include <fcntl.h>
8755 #endif
8756 #ifdef I_SYS_FILE
8757 #include <sys/file.h>
8758 #endif
8759 #ifdef I_UNISTD
8760 #include <unistd.h>
8761 #endif
8762 int main() {
8763         exit(R_OK);
8764 }
8765 EOCP
8766         : check sys/file.h first, no particular reason here
8767         if $test `./findhdr sys/file.h` && \
8768                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8769                 h_sysfile=true;
8770                 echo "<sys/file.h> defines the *_OK access constants." >&4
8771         elif $test `./findhdr fcntl.h` && \
8772                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8773                 h_fcntl=true;
8774                 echo "<fcntl.h> defines the *_OK access constants." >&4
8775         elif $test `./findhdr unistd.h` && \
8776                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8777                 echo "<unistd.h> defines the *_OK access constants." >&4
8778         else
8779                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8780         fi
8781         ;;
8782 esac
8783 $rm -f access*
8784
8785 : see if accessx exists
8786 set accessx d_accessx
8787 eval $inlibc
8788
8789 : see if alarm exists
8790 set alarm d_alarm
8791 eval $inlibc
8792
8793 : see if atolf exists
8794 set atolf d_atolf
8795 eval $inlibc
8796
8797 : see if atoll exists
8798 set atoll d_atoll
8799 eval $inlibc
8800
8801 : Look for GNU-cc style attribute checking
8802 echo " "
8803 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8804 $cat >attrib.c <<'EOCP'
8805 #include <stdio.h>
8806 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8807 EOCP
8808 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8809         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8810                 echo "Your C compiler doesn't fully support __attribute__."
8811                 val="$undef"
8812         else
8813                 echo "Your C compiler supports __attribute__."
8814                 val="$define"
8815         fi
8816 else
8817         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8818         val="$undef"
8819 fi
8820 set d_attribut
8821 eval $setvar
8822 $rm -f attrib*
8823
8824 : see if bcmp exists
8825 set bcmp d_bcmp
8826 eval $inlibc
8827
8828 : see if bcopy exists
8829 set bcopy d_bcopy
8830 eval $inlibc
8831
8832 : see if this is a unistd.h system
8833 set unistd.h i_unistd
8834 eval $inhdr
8835
8836 : see if getpgrp exists
8837 set getpgrp d_getpgrp
8838 eval $inlibc
8839
8840 case "$d_getpgrp" in
8841 "$define")
8842         echo " "
8843         echo "Checking to see which flavor of getpgrp is in use..."
8844         $cat >try.c <<EOP
8845 #$i_unistd I_UNISTD
8846 #include <sys/types.h>
8847 #ifdef I_UNISTD
8848 #  include <unistd.h>
8849 #endif
8850 int main()
8851 {
8852         if (getuid() == 0) {
8853                 printf("(I see you are running Configure as super-user...)\n");
8854                 setuid(1);
8855         }
8856 #ifdef TRY_BSD_PGRP
8857         if (getpgrp(1) == 0)
8858                 exit(0);
8859 #else
8860         if (getpgrp() > 0)
8861                 exit(0);
8862 #endif
8863         exit(1);
8864 }
8865 EOP
8866         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8867                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8868                 val="$define"
8869         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8870                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8871                 val="$undef"
8872         else
8873                 echo "I can't seem to compile and run the test program."
8874                 if ./usg; then
8875                         xxx="a USG one, i.e. you use getpgrp()."
8876                 else
8877                         # SVR4 systems can appear rather BSD-ish.
8878                         case "$i_unistd" in
8879                         $undef)
8880                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8881                                 val="$define"
8882                                 ;;
8883                         $define)
8884                                 xxx="probably a USG one, i.e. you use getpgrp()."
8885                                 val="$undef"
8886                                 ;;
8887                         esac
8888                 fi
8889                 echo "Assuming your getpgrp is $xxx" >&4
8890         fi
8891         ;;
8892 *) val="$undef";;
8893 esac
8894 set d_bsdgetpgrp
8895 eval $setvar
8896 $rm -f try try.*
8897
8898 : see if setpgrp exists
8899 set setpgrp d_setpgrp
8900 eval $inlibc
8901
8902 case "$d_setpgrp" in
8903 "$define")
8904         echo " "
8905         echo "Checking to see which flavor of setpgrp is in use..."
8906         $cat >try.c <<EOP
8907 #$i_unistd I_UNISTD
8908 #include <sys/types.h>
8909 #ifdef I_UNISTD
8910 #  include <unistd.h>
8911 #endif
8912 int main()
8913 {
8914         if (getuid() == 0) {
8915                 printf("(I see you are running Configure as super-user...)\n");
8916                 setuid(1);
8917         }
8918 #ifdef TRY_BSD_PGRP
8919         if (-1 == setpgrp(1, 1))
8920                 exit(0);
8921 #else
8922         if (setpgrp() != -1)
8923                 exit(0);
8924 #endif
8925         exit(1);
8926 }
8927 EOP
8928         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8929                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8930                 val="$define"
8931         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8932                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8933                 val="$undef"
8934         else
8935                 echo "(I can't seem to compile and run the test program.)"
8936                 if ./usg; then
8937                         xxx="a USG one, i.e. you use setpgrp()."
8938                 else
8939                         # SVR4 systems can appear rather BSD-ish.
8940                         case "$i_unistd" in
8941                         $undef)
8942                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8943                                 val="$define"
8944                                 ;;
8945                         $define)
8946                                 xxx="probably a USG one, i.e. you use setpgrp()."
8947                                 val="$undef"
8948                                 ;;
8949                         esac
8950                 fi
8951                 echo "Assuming your setpgrp is $xxx" >&4
8952         fi
8953         ;;
8954 *) val="$undef";;
8955 esac
8956 set d_bsdsetpgrp
8957 eval $setvar
8958 $rm -f try try.*
8959 : see if bzero exists
8960 set bzero d_bzero
8961 eval $inlibc
8962
8963 : see if signal is declared as pointer to function returning int or void
8964 echo " "
8965 xxx=`./findhdr signal.h`
8966 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8967 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8968         echo "You have int (*signal())() instead of void." >&4
8969         val="$undef"
8970 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8971         echo "You have void (*signal())()." >&4
8972         val="$define"
8973 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8974         echo "You have int (*signal())() instead of void." >&4
8975         val="$undef"
8976 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8977         echo "You have void (*signal())()." >&4
8978         val="$define"
8979 else
8980         case "$d_voidsig" in
8981         '')
8982         echo "I can't determine whether signal handler returns void or int..." >&4
8983                 dflt=void
8984                 rp="What type does your signal handler return?"
8985                 . ./myread
8986                 case "$ans" in
8987                 v*) val="$define";;
8988                 *) val="$undef";;
8989                 esac;;
8990         "$define")
8991                 echo "As you already told me, signal handler returns void." >&4
8992                 val="$define"
8993                 ;;
8994         *)      echo "As you already told me, signal handler returns int." >&4
8995                 val="$undef"
8996                 ;;
8997         esac
8998 fi
8999 set d_voidsig
9000 eval $setvar
9001 case "$d_voidsig" in
9002 "$define") signal_t="void";;
9003 *) signal_t="int";;
9004 esac
9005 $rm -f $$.tmp
9006
9007 : check for ability to cast large floats to 32-bit ints.
9008 echo " "
9009 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9010 if $test "$intsize" -ge 4; then
9011         xxx=int
9012 else
9013         xxx=long
9014 fi
9015 $cat >try.c <<EOCP
9016 #include <stdio.h>
9017 #include <sys/types.h>
9018 #include <signal.h>
9019 $signal_t blech(s) int s; { exit(3); }
9020 int main()
9021 {
9022         $xxx i32;
9023         double f, g;
9024         int result = 0;
9025         char str[16];
9026         signal(SIGFPE, blech);
9027
9028         /* Don't let compiler optimize the test away.  Store the number 
9029            in a writable string for gcc to pass to sscanf under HP/UX.
9030         */
9031         sprintf(str, "2147483647");
9032         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9033         g = 10 * f;
9034         i32  = ($xxx) g;
9035
9036         /* x86 processors will probably give 0x8000 0000, which is a
9037        sign change.  We don't want that.  We want to mimic SPARC
9038            behavior here, which is to preserve the sign and give
9039            back 0x7fff ffff.
9040         */
9041         if (i32 != ($xxx) f)
9042                 result |= 1;
9043         exit(result);
9044 }
9045 EOCP
9046 set try
9047 if eval $compile_ok; then
9048         $run ./try
9049         yyy=$?
9050 else
9051         echo "(I can't seem to compile the test program--assuming it can't)"
9052         yyy=1
9053 fi
9054 case "$yyy" in
9055 0)      val="$define"
9056         echo "Yup, it can."
9057         ;;
9058 *)      val="$undef"
9059         echo "Nope, it can't."
9060         ;;
9061 esac
9062 set d_casti32
9063 eval $setvar
9064 $rm -f try try.*
9065
9066 : check for ability to cast negative floats to unsigned
9067 echo " "
9068 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9069 $cat >try.c <<EOCP
9070 #include <stdio.h>
9071 #include <sys/types.h>
9072 #include <signal.h>
9073 $signal_t blech(s) int s; { exit(7); }
9074 $signal_t blech_in_list(s) int s; { exit(4); }
9075 unsigned long dummy_long(p) unsigned long p; { return p; }
9076 unsigned int dummy_int(p) unsigned int p; { return p; }
9077 unsigned short dummy_short(p) unsigned short p; { return p; }
9078 int main()
9079 {
9080         double f;
9081         unsigned long along;
9082         unsigned int aint;
9083         unsigned short ashort;
9084         int result = 0;
9085         char str[16];
9086         
9087         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9088            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9089            optimized the whole file away
9090         */
9091         /* Store the number in a writable string for gcc to pass to 
9092            sscanf under HP/UX.
9093         */
9094         sprintf(str, "-123");
9095         sscanf(str, "%lf", &f);  /* f = -123.; */
9096
9097         signal(SIGFPE, blech);
9098         along = (unsigned long)f;
9099         aint = (unsigned int)f;
9100         ashort = (unsigned short)f;
9101         if (along != (unsigned long)-123)
9102                 result |= 1;
9103         if (aint != (unsigned int)-123)
9104                 result |= 1;
9105         if (ashort != (unsigned short)-123)
9106                 result |= 1;
9107         sprintf(str, "1073741824.");
9108         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9109         f = f + f;
9110         along = 0;
9111         along = (unsigned long)f;
9112         if (along != 0x80000000)
9113                 result |= 2;
9114         f -= 1.;
9115         along = 0;
9116         along = (unsigned long)f;
9117         if (along != 0x7fffffff)
9118                 result |= 1;
9119         f += 2.;
9120         along = 0;
9121         along = (unsigned long)f;
9122         if (along != 0x80000001)
9123                 result |= 2;
9124         if (result)
9125                 exit(result);
9126         signal(SIGFPE, blech_in_list);
9127         sprintf(str, "123.");
9128         sscanf(str, "%lf", &f);  /* f = 123.; */
9129         along = dummy_long((unsigned long)f);
9130         aint = dummy_int((unsigned int)f);
9131         ashort = dummy_short((unsigned short)f);
9132         if (along != (unsigned long)123)
9133                 result |= 4;
9134         if (aint != (unsigned int)123)
9135                 result |= 4;
9136         if (ashort != (unsigned short)123)
9137                 result |= 4;
9138         exit(result);
9139
9140 }
9141 EOCP
9142 set try
9143 if eval $compile_ok; then
9144         $run ./try
9145         castflags=$?
9146 else
9147         echo "(I can't seem to compile the test program--assuming it can't)"
9148         castflags=7
9149 fi
9150 case "$castflags" in
9151 0)      val="$define"
9152         echo "Yup, it can."
9153         ;;
9154 *)      val="$undef"
9155         echo "Nope, it can't."
9156         ;;
9157 esac
9158 set d_castneg
9159 eval $setvar
9160 $rm -f try.*
9161
9162 : see if vprintf exists
9163 echo " "
9164 if set vprintf val -f d_vprintf; eval $csym; $val; then
9165         echo 'vprintf() found.' >&4
9166         val="$define"
9167         $cat >try.c <<'EOF'
9168 #include <varargs.h>
9169
9170 int main() { xxx("foo"); }
9171
9172 xxx(va_alist)
9173 va_dcl
9174 {
9175         va_list args;
9176         char buf[10];
9177
9178         va_start(args);
9179         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9180 }
9181 EOF
9182         set try
9183         if eval $compile && $run ./try; then
9184                 echo "Your vsprintf() returns (int)." >&4
9185                 val2="$undef"
9186         else
9187                 echo "Your vsprintf() returns (char*)." >&4
9188                 val2="$define"
9189         fi
9190 else
9191         echo 'vprintf() NOT found.' >&4
9192                 val="$undef"
9193                 val2="$undef"
9194 fi
9195 $rm -f try try.*
9196 set d_vprintf
9197 eval $setvar
9198 val=$val2
9199 set d_charvspr
9200 eval $setvar
9201
9202 : see if chown exists
9203 set chown d_chown
9204 eval $inlibc
9205
9206 : see if chroot exists
9207 set chroot d_chroot
9208 eval $inlibc
9209
9210 : see if chsize exists
9211 set chsize d_chsize
9212 eval $inlibc
9213
9214 : see if class exists
9215 set class d_class
9216 eval $inlibc
9217
9218 hasstruct='varname=$1; struct=$2; shift; shift;
9219 while $test $# -ge 2; do
9220         case "$1" in
9221         $define) echo "#include <$2>";;
9222         esac ;
9223     shift 2;
9224 done > try.c;
9225 echo "int main () { struct $struct foo; }" >> try.c;
9226 set try;
9227 if eval $compile; then
9228         val="$define";
9229 else
9230         val="$undef";
9231 fi;
9232 set $varname;
9233 eval $setvar;
9234 $rm -f try.c try.o'
9235
9236 : see if sys/types.h has to be included
9237 set sys/types.h i_systypes
9238 eval $inhdr
9239
9240 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9241 while $test $# -ge 2; do
9242         case "$1" in
9243         $define) echo "#include <$2>";;
9244         esac ;
9245     shift 2;
9246 done > try.c;
9247 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9248 set try;
9249 if eval $compile; then
9250         val="$define";
9251 else
9252         val="$undef";
9253 fi;
9254 set $varname;
9255 eval $setvar;
9256 $rm -f try.c try.o'
9257
9258 socketlib=''
9259 sockethdr=''
9260 : see whether socket exists
9261 echo " "
9262 $echo $n "Hmm... $c" >&4
9263 if set socket val -f d_socket; eval $csym; $val; then
9264         echo "Looks like you have Berkeley networking support." >&4
9265         d_socket="$define"
9266         if set setsockopt val -f; eval $csym; $val; then
9267                 d_oldsock="$undef"
9268         else
9269                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9270                 d_oldsock="$define"
9271         fi
9272 else
9273         if $contains socklib libc.list >/dev/null 2>&1; then
9274                 echo "Looks like you have Berkeley networking support." >&4
9275                 d_socket="$define"
9276                 : we will have to assume that it supports the 4.2 BSD interface
9277                 d_oldsock="$undef"
9278         else
9279                 echo "You don't have Berkeley networking in libc$_a..." >&4
9280                 if test "X$d_socket" = "X$define"; then
9281                    echo "...but you seem to believe that you have sockets." >&4
9282                 else
9283                         for net in net socket
9284                         do
9285                                 if test -f /usr/lib/lib$net$_a; then
9286                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9287                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9288                                         if $contains socket libc.list >/dev/null 2>&1; then
9289                                                 d_socket="$define"
9290                                                 socketlib="-l$net"
9291                                                 case "$net" in
9292                                                 net)
9293                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9294                                                         sockethdr="-I/usr/netinclude"
9295                                                         ;;
9296                                                 esac
9297                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9298                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9299                                                         d_oldsock="$undef"
9300                                                 else
9301                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9302                                                         d_oldsock="$define"
9303                                                 fi
9304                                                 break
9305                                         fi
9306                                 fi
9307                         done
9308                         if test "X$d_socket" != "X$define"; then
9309                            echo "or anywhere else I see." >&4
9310                            d_socket="$undef"
9311                            d_oldsock="$undef"
9312                         fi
9313                 fi
9314         fi
9315 fi
9316
9317 : see if socketpair exists
9318 set socketpair d_sockpair
9319 eval $inlibc
9320
9321
9322 echo " "
9323 echo "Checking the availability of certain socket constants..." >&4
9324 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9325         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9326         $cat >try.c <<EOF
9327 #include <sys/types.h>
9328 #include <sys/socket.h>
9329 int main() {
9330     int i = $ENUM;
9331 }
9332 EOF
9333         val="$undef"
9334         set try; if eval $compile; then
9335                 val="$define"
9336         fi
9337         set d_${enum}; eval $setvar
9338         $rm -f try.c try
9339 done
9340
9341 : see if this is a sys/uio.h system
9342 set sys/uio.h i_sysuio
9343 eval $inhdr
9344
9345
9346 echo " "
9347 echo "Checking to see if your system supports struct cmsghdr..." >&4
9348 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9349 eval $hasstruct
9350 case "$d_cmsghdr_s" in
9351 "$define")      echo "Yes, it does."   ;;
9352 *)              echo "No, it doesn't." ;;
9353 esac
9354
9355
9356 : check for const keyword
9357 echo " "
9358 echo 'Checking to see if your C compiler knows about "const"...' >&4
9359 $cat >const.c <<'EOCP'
9360 typedef struct spug { int drokk; } spug;
9361 int main()
9362 {
9363         const char *foo;
9364         const spug y;
9365 }
9366 EOCP
9367 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9368         val="$define"
9369         echo "Yup, it does."
9370 else
9371         val="$undef"
9372         echo "Nope, it doesn't."
9373 fi
9374 set d_const
9375 eval $setvar
9376
9377 : see if crypt exists
9378 echo " "
9379 set crypt d_crypt
9380 eval $inlibc
9381 case "$d_crypt" in
9382 $define) cryptlib='' ;;
9383 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9384                 echo 'crypt() found.' >&4
9385                 val="$define"
9386                 cryptlib=''
9387         else
9388                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9389                 if $test -z "$cryptlib"; then
9390                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9391                 else
9392                         cryptlib=-lcrypt
9393                 fi
9394                 if $test -z "$cryptlib"; then
9395                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9396                 else
9397                         cryptlib=-lcrypt
9398                 fi
9399                 if $test -z "$cryptlib"; then
9400                         cryptlib=`./loc libcrypt$_a "" $libpth`
9401                 else
9402                         cryptlib=-lcrypt
9403                 fi
9404                 if $test -z "$cryptlib"; then
9405                         echo 'crypt() NOT found.' >&4
9406                         val="$undef"
9407                 else
9408                         val="$define"
9409                 fi
9410         fi
9411         set d_crypt
9412         eval $setvar
9413         ;;
9414 esac
9415
9416 : get csh whereabouts
9417 case "$csh" in
9418 'csh') val="$undef" ;;
9419 *) val="$define" ;;
9420 esac
9421 set d_csh
9422 eval $setvar
9423 : Respect a hint or command line value for full_csh.
9424 case "$full_csh" in
9425 '') full_csh=$csh ;;
9426 esac
9427
9428 : see if cuserid exists
9429 set cuserid d_cuserid
9430 eval $inlibc
9431
9432 : see if this is a limits.h system
9433 set limits.h i_limits
9434 eval $inhdr
9435
9436 : see if this is a float.h system
9437 set float.h i_float
9438 eval $inhdr
9439
9440 : See if number of significant digits in a double precision number is known
9441 echo " "
9442 $cat >dbl_dig.c <<EOM
9443 #$i_limits I_LIMITS
9444 #$i_float I_FLOAT
9445 #ifdef I_LIMITS
9446 #include <limits.h>
9447 #endif
9448 #ifdef I_FLOAT
9449 #include <float.h>
9450 #endif
9451 #ifdef DBL_DIG
9452 printf("Contains DBL_DIG");
9453 #endif
9454 EOM
9455 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9456 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9457         echo "DBL_DIG found." >&4
9458         val="$define"
9459 else
9460         echo "DBL_DIG NOT found." >&4
9461         val="$undef"
9462 fi
9463 $rm -f dbl_dig.?
9464 set d_dbl_dig
9465 eval $setvar
9466
9467 hasproto='varname=$1; func=$2; shift; shift;
9468 while $test $# -ge 2; do
9469         case "$1" in
9470         $define) echo "#include <$2>";;
9471         esac ;
9472     shift 2;
9473 done > try.c;
9474 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9475 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9476         echo "$func() prototype found.";
9477         val="$define";
9478 else
9479         echo "$func() prototype NOT found.";
9480         val="$undef";
9481 fi;
9482 set $varname;
9483 eval $setvar;
9484 $rm -f try.c tryout.c'
9485
9486 : see if dbm.h is available
9487 : see if dbmclose exists
9488 set dbmclose d_dbmclose
9489 eval $inlibc
9490
9491 case "$d_dbmclose" in
9492 $define)
9493         set dbm.h i_dbm
9494         eval $inhdr
9495         case "$i_dbm" in
9496         $define)
9497                 val="$undef"
9498                 set i_rpcsvcdbm
9499                 eval $setvar
9500                 ;;
9501         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9502                 eval $inhdr
9503                 ;;
9504         esac
9505         ;;
9506 *)      echo "We won't be including <dbm.h>"
9507         val="$undef"
9508         set i_dbm
9509         eval $setvar
9510         val="$undef"
9511         set i_rpcsvcdbm
9512         eval $setvar
9513         ;;
9514 esac
9515
9516 : see if prototype for dbminit is available
9517 echo " "
9518 set d_dbminitproto dbminit $i_dbm dbm.h
9519 eval $hasproto
9520
9521 : see if difftime exists
9522 set difftime d_difftime
9523 eval $inlibc
9524
9525 : see if this is a dirent system
9526 echo " "
9527 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9528         val="$define"
9529         echo "<dirent.h> found." >&4
9530 else
9531         val="$undef"
9532         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9533                 echo "<sys/dir.h> found." >&4
9534                 echo " "
9535         else
9536                 xinc=`./findhdr sys/ndir.h`
9537         fi
9538         echo "<dirent.h> NOT found." >&4
9539 fi
9540 set i_dirent
9541 eval $setvar
9542
9543 : Look for type of directory structure.
9544 echo " "
9545 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9546
9547 case "$direntrytype" in
9548 ''|' ')
9549         case "$i_dirent" in
9550         $define) guess1='struct dirent' ;;
9551         *) guess1='struct direct'  ;;
9552         esac
9553         ;;
9554 *)      guess1="$direntrytype"
9555         ;;
9556 esac
9557
9558 case "$guess1" in
9559 'struct dirent') guess2='struct direct' ;;
9560 *) guess2='struct dirent' ;;
9561 esac
9562                 
9563 if $contains "$guess1" try.c >/dev/null 2>&1; then
9564         direntrytype="$guess1"
9565         echo "Your directory entries are $direntrytype." >&4
9566 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9567         direntrytype="$guess2"
9568         echo "Your directory entries seem to be $direntrytype." >&4
9569 else
9570         echo "I don't recognize your system's directory entries." >&4
9571         rp="What type is used for directory entries on this system?"
9572         dflt="$guess1"
9573         . ./myread
9574         direntrytype="$ans"
9575 fi
9576 $rm -f try.c
9577
9578
9579 : see if the directory entry stores field length
9580 echo " "
9581 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9582 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9583         echo "Good, your directory entry keeps length information in d_namlen." >&4
9584         val="$define"
9585 else
9586         echo "Your directory entry does not know about the d_namlen field." >&4
9587         val="$undef"
9588 fi
9589 set d_dirnamlen
9590 eval $setvar
9591 $rm -f try.c
9592
9593 : see if this is an sysdir system
9594 set sys/dir.h i_sysdir
9595 eval $inhdr
9596
9597 : see if this is an sysndir system
9598 set sys/ndir.h i_sysndir
9599 eval $inhdr
9600
9601 : Look for dirfd
9602 echo " "
9603 $cat >dirfd.c <<EOM
9604 #include <stdio.h>
9605 #$i_dirent I_DIRENT             /**/
9606 #$i_sysdir I_SYS_DIR            /**/
9607 #$i_sysndir I_SYS_NDIR          /**/
9608 #$i_systypes I_SYS_TYPES        /**/
9609 #if defined(I_SYS_TYPES)
9610 #include <sys/types.h>
9611 #endif
9612 #if defined(I_DIRENT)
9613 #include <dirent.h>
9614 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9615 #include <sys/dir.h>
9616 #endif
9617 #else
9618 #ifdef I_SYS_NDIR
9619 #include <sys/ndir.h>
9620 #else
9621 #ifdef I_SYS_DIR
9622 #ifdef hp9000s500
9623 #include <ndir.h>       /* may be wrong in the future */
9624 #else
9625 #include <sys/dir.h>
9626 #endif
9627 #endif
9628 #endif
9629 #endif 
9630 int main() {
9631         DIR *dirp = opendir(".");
9632         if (dirfd(dirp) >= 0)
9633                 exit(0);
9634         else
9635                 exit(1);
9636 }
9637 EOM
9638 set dirfd
9639 if eval $compile; then
9640         val="$define"
9641 fi
9642 case "$val" in
9643 $define)        echo "dirfd() found." >&4       ;;
9644 *)              echo "dirfd() NOT found." >&4   ;;
9645 esac
9646 set d_dirfd
9647 eval $setvar
9648 $rm -f dirfd*
9649
9650 : see if dlerror exists
9651 xxx_runnm="$runnm"
9652 runnm=false
9653 set dlerror d_dlerror
9654 eval $inlibc
9655 runnm="$xxx_runnm"
9656
9657 : see if dlfcn is available
9658 set dlfcn.h i_dlfcn
9659 eval $inhdr
9660
9661 case "$usedl" in
9662 $define|y|true)
9663         $cat << EOM
9664
9665 On a few systems, the dynamically loaded modules that perl generates and uses
9666 will need a different extension than shared libs. The default will probably
9667 be appropriate.
9668
9669 EOM
9670         case "$dlext" in
9671         '')     dflt="$so" ;;
9672         *)      dflt="$dlext" ;;
9673         esac
9674         rp='What is the extension of dynamically loaded modules'
9675         . ./myread
9676         dlext="$ans"
9677         ;;
9678 *)
9679         dlext="none"
9680         ;;
9681 esac
9682
9683 : Check if dlsym need a leading underscore
9684 echo " "
9685 val="$undef"
9686
9687 case "$dlsrc" in
9688 dl_dlopen.xs)
9689         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9690         $cat >dyna.c <<'EOM'
9691 fred () { }
9692 EOM
9693
9694 $cat >fred.c<<EOM
9695
9696 #include <stdio.h>
9697 #$i_dlfcn I_DLFCN
9698 #ifdef I_DLFCN
9699 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9700 #else
9701 #include <sys/types.h>
9702 #include <nlist.h>
9703 #include <link.h>
9704 #endif
9705
9706 extern int fred() ;
9707
9708 int main()
9709 {
9710     void * handle ;
9711     void * symbol ;
9712 #ifndef RTLD_LAZY
9713     int mode = 1 ;
9714 #else
9715     int mode = RTLD_LAZY ;
9716 #endif
9717     handle = dlopen("./dyna.$dlext", mode) ;
9718     if (handle == NULL) {
9719         printf ("1\n") ;
9720         fflush (stdout) ;
9721         exit(0);
9722     }
9723     symbol = dlsym(handle, "fred") ;
9724     if (symbol == NULL) {
9725         /* try putting a leading underscore */
9726         symbol = dlsym(handle, "_fred") ;
9727         if (symbol == NULL) {
9728             printf ("2\n") ;
9729             fflush (stdout) ;
9730             exit(0);
9731         }
9732         printf ("3\n") ;
9733     }
9734     else
9735         printf ("4\n") ;
9736     fflush (stdout) ;
9737     exit(0);
9738 }
9739 EOM
9740         : Call the object file tmp-dyna.o in case dlext=o.
9741         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9742                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9743                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9744                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9745                 xxx=`$run ./fred`
9746                 case $xxx in
9747                 1)      echo "Test program failed using dlopen." >&4
9748                         echo "Perhaps you should not use dynamic loading." >&4;;
9749                 2)      echo "Test program failed using dlsym." >&4
9750                         echo "Perhaps you should not use dynamic loading." >&4;;
9751                 3)      echo "dlsym needs a leading underscore" >&4
9752                         val="$define" ;;
9753                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9754                 esac
9755         else
9756                 echo "I can't compile and run the test program." >&4
9757                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9758         fi
9759         ;;
9760 esac
9761                 
9762 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9763
9764 set d_dlsymun
9765 eval $setvar
9766
9767 : see if prototype for drand48 is available
9768 echo " "
9769 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9770 eval $hasproto
9771
9772 : see if dup2 exists
9773 set dup2 d_dup2
9774 eval $inlibc
9775
9776 : see if eaccess exists
9777 set eaccess d_eaccess
9778 eval $inlibc
9779
9780 : see if endgrent exists
9781 set endgrent d_endgrent
9782 eval $inlibc
9783
9784 : see if endhostent exists
9785 set endhostent d_endhent
9786 eval $inlibc
9787
9788 : see if endnetent exists
9789 set endnetent d_endnent
9790 eval $inlibc
9791
9792 : see if endprotoent exists
9793 set endprotoent d_endpent
9794 eval $inlibc
9795
9796 : see if endpwent exists
9797 set endpwent d_endpwent
9798 eval $inlibc
9799
9800 : see if endservent exists
9801 set endservent d_endsent
9802 eval $inlibc
9803
9804 : Locate the flags for 'open()'
9805 echo " "
9806 $cat >try.c <<'EOCP'
9807 #include <sys/types.h>
9808 #ifdef I_FCNTL
9809 #include <fcntl.h>
9810 #endif
9811 #ifdef I_SYS_FILE
9812 #include <sys/file.h>
9813 #endif
9814 int main() {
9815         if(O_RDONLY);
9816 #ifdef O_TRUNC
9817         exit(0);
9818 #else
9819         exit(1);
9820 #endif
9821 }
9822 EOCP
9823 : check sys/file.h first to get FREAD on Sun
9824 if $test `./findhdr sys/file.h` && \
9825                 set try -DI_SYS_FILE && eval $compile; then
9826         h_sysfile=true;
9827         echo "<sys/file.h> defines the O_* constants..." >&4
9828         if $run ./try; then
9829                 echo "and you have the 3 argument form of open()." >&4
9830                 val="$define"
9831         else
9832                 echo "but not the 3 argument form of open().  Oh, well." >&4
9833                 val="$undef"
9834         fi
9835 elif $test `./findhdr fcntl.h` && \
9836                 set try -DI_FCNTL && eval $compile; then
9837         h_fcntl=true;
9838         echo "<fcntl.h> defines the O_* constants..." >&4
9839         if $run ./try; then
9840                 echo "and you have the 3 argument form of open()." >&4
9841                 val="$define"
9842         else
9843                 echo "but not the 3 argument form of open().  Oh, well." >&4
9844                 val="$undef"
9845         fi
9846 else
9847         val="$undef"
9848         echo "I can't find the O_* constant definitions!  You got problems." >&4
9849 fi
9850 set d_open3
9851 eval $setvar
9852 $rm -f try try.*
9853
9854 : see which of string.h or strings.h is needed
9855 echo " "
9856 strings=`./findhdr string.h`
9857 if $test "$strings" && $test -r "$strings"; then
9858         echo "Using <string.h> instead of <strings.h>." >&4
9859         val="$define"
9860 else
9861         val="$undef"
9862         strings=`./findhdr strings.h`
9863         if $test "$strings" && $test -r "$strings"; then
9864                 echo "Using <strings.h> instead of <string.h>." >&4
9865         else
9866                 echo "No string header found -- You'll surely have problems." >&4
9867         fi
9868 fi
9869 set i_string
9870 eval $setvar
9871 case "$i_string" in
9872 "$undef") strings=`./findhdr strings.h`;;
9873 *)        strings=`./findhdr string.h`;;
9874 esac
9875
9876 : see if this is a sys/file.h system
9877 val=''
9878 set sys/file.h val
9879 eval $inhdr
9880
9881 : do we need to include sys/file.h ?
9882 case "$val" in
9883 "$define")
9884         echo " "
9885         if $h_sysfile; then
9886                 val="$define"
9887                 echo "We'll be including <sys/file.h>." >&4
9888         else
9889                 val="$undef"
9890                 echo "We won't be including <sys/file.h>." >&4
9891         fi
9892         ;;
9893 *)
9894         h_sysfile=false
9895         ;;
9896 esac
9897 set i_sysfile
9898 eval $setvar
9899
9900 : see if fcntl.h is there
9901 val=''
9902 set fcntl.h val
9903 eval $inhdr
9904
9905 : see if we can include fcntl.h
9906 case "$val" in
9907 "$define")
9908         echo " "
9909         if $h_fcntl; then
9910                 val="$define"
9911                 echo "We'll be including <fcntl.h>." >&4
9912         else
9913                 val="$undef"
9914                 if $h_sysfile; then
9915         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9916                 else
9917                         echo "We won't be including <fcntl.h>." >&4
9918                 fi
9919         fi
9920         ;;
9921 *)
9922         h_fcntl=false
9923         val="$undef"
9924         ;;
9925 esac
9926 set i_fcntl
9927 eval $setvar
9928
9929 : check for non-blocking I/O stuff
9930 case "$h_sysfile" in
9931 true) echo "#include <sys/file.h>" > head.c;;
9932 *)
9933        case "$h_fcntl" in
9934        true) echo "#include <fcntl.h>" > head.c;;
9935        *) echo "#include <sys/fcntl.h>" > head.c;;
9936        esac
9937        ;;
9938 esac
9939 echo " "
9940 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9941 case "$o_nonblock" in
9942 '')
9943         $cat head.c > try.c
9944         $cat >>try.c <<EOCP
9945 #include <stdio.h>
9946 #include <stdlib.h>
9947 #$i_fcntl I_FCNTL
9948 #ifdef I_FCNTL
9949 #include <fcntl.h>
9950 #endif
9951 int main() {
9952 #ifdef O_NONBLOCK
9953         printf("O_NONBLOCK\n");
9954         exit(0);
9955 #endif
9956 #ifdef O_NDELAY
9957         printf("O_NDELAY\n");
9958         exit(0);
9959 #endif
9960 #ifdef FNDELAY
9961         printf("FNDELAY\n");
9962         exit(0);
9963 #endif
9964         exit(0);
9965 }
9966 EOCP
9967         set try
9968         if eval $compile_ok; then
9969                 o_nonblock=`$run ./try`
9970                 case "$o_nonblock" in
9971                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9972                 *) echo "Seems like we can use $o_nonblock.";;
9973                 esac
9974         else
9975                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9976         fi
9977         ;;
9978 *) echo "Using $hint value $o_nonblock.";;
9979 esac
9980 $rm -f try try.* .out core
9981
9982 echo " "
9983 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9984 case "$eagain" in
9985 '')
9986         $cat head.c > try.c
9987         $cat >>try.c <<EOCP
9988 #include <errno.h>
9989 #include <sys/types.h>
9990 #include <signal.h>
9991 #include <stdio.h> 
9992 #include <stdlib.h> 
9993 #$i_fcntl I_FCNTL
9994 #ifdef I_FCNTL
9995 #include <fcntl.h>
9996 #endif
9997 #define MY_O_NONBLOCK $o_nonblock
9998 #ifndef errno  /* XXX need better Configure test */
9999 extern int errno;
10000 #endif
10001 #$i_unistd I_UNISTD
10002 #ifdef I_UNISTD
10003 #include <unistd.h>
10004 #endif
10005 #$i_string I_STRING
10006 #ifdef I_STRING
10007 #include <string.h>
10008 #else
10009 #include <strings.h>
10010 #endif
10011 $signal_t blech(x) int x; { exit(3); }
10012 EOCP
10013         $cat >> try.c <<'EOCP'
10014 int main()
10015 {
10016         int pd[2];
10017         int pu[2];
10018         char buf[1];
10019         char string[100];
10020
10021         pipe(pd);       /* Down: child -> parent */
10022         pipe(pu);       /* Up: parent -> child */
10023         if (0 != fork()) {
10024                 int ret;
10025                 close(pd[1]);   /* Parent reads from pd[0] */
10026                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10027 #ifdef F_SETFL
10028                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10029                         exit(1);
10030 #else
10031                 exit(4);
10032 #endif
10033                 signal(SIGALRM, blech);
10034                 alarm(5);
10035                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10036                         exit(2);
10037                 sprintf(string, "%d\n", ret);
10038                 write(2, string, strlen(string));
10039                 alarm(0);
10040 #ifdef EAGAIN
10041                 if (errno == EAGAIN) {
10042                         printf("EAGAIN\n");
10043                         goto ok;
10044                 }
10045 #endif
10046 #ifdef EWOULDBLOCK
10047                 if (errno == EWOULDBLOCK)
10048                         printf("EWOULDBLOCK\n");
10049 #endif
10050         ok:
10051                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10052                 sleep(2);                               /* Give it time to close our pipe */
10053                 alarm(5);
10054                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10055                 alarm(0);
10056                 sprintf(string, "%d\n", ret);
10057                 write(4, string, strlen(string));
10058                 exit(0);
10059         }
10060
10061         close(pd[0]);                   /* We write to pd[1] */
10062         close(pu[1]);                   /* We read from pu[0] */
10063         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10064         close(pd[1]);                   /* Pipe pd is now fully closed! */
10065         exit(0);                                /* Bye bye, thank you for playing! */
10066 }
10067 EOCP
10068         set try
10069         if eval $compile_ok; then
10070                 echo "$startsh" >mtry
10071                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10072                 chmod +x mtry
10073                 ./mtry >/dev/null 2>&1
10074                 case $? in
10075                 0) eagain=`$cat try.out`;;
10076                 1) echo "Could not perform non-blocking setting!";;
10077                 2) echo "I did a successful read() for something that was not there!";;
10078                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10079                 4) echo "Could not find F_SETFL!";;
10080                 *) echo "Something terribly wrong happened during testing.";;
10081                 esac
10082                 rd_nodata=`$cat try.ret`
10083                 echo "A read() system call with no data present returns $rd_nodata."
10084                 case "$rd_nodata" in
10085                 0|-1) ;;
10086                 *)
10087                         echo "(That's peculiar, fixing that to be -1.)"
10088                         rd_nodata=-1
10089                         ;;
10090                 esac
10091                 case "$eagain" in
10092                 '')
10093                         echo "Forcing errno EAGAIN on read() with no data available."
10094                         eagain=EAGAIN
10095                         ;;
10096                 *)
10097                         echo "Your read() sets errno to $eagain when no data is available."
10098                         ;;
10099                 esac
10100                 status=`$cat try.err`
10101                 case "$status" in
10102                 0) echo "And it correctly returns 0 to signal EOF.";;
10103                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10104                 *) echo "However, your read() returns '$status' on EOF??";;
10105                 esac
10106                 val="$define"
10107                 if test "$status" = "$rd_nodata"; then
10108                         echo "WARNING: you can't distinguish between EOF and no data!"
10109                         val="$undef"
10110                 fi
10111         else
10112                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10113                 eagain=EAGAIN
10114         fi
10115         set d_eofnblk
10116         eval $setvar
10117         ;;
10118 *)
10119         echo "Using $hint value $eagain."
10120         echo "Your read() returns $rd_nodata when no data is present."
10121         case "$d_eofnblk" in
10122         "$define") echo "And you can see EOF because read() returns 0.";;
10123         "$undef") echo "But you can't see EOF status from read() returned value.";;
10124         *)
10125                 echo "(Assuming you can't see EOF status from read anyway.)"
10126                 d_eofnblk=$undef
10127                 ;;
10128         esac
10129         ;;
10130 esac
10131 $rm -f try try.* .out core head.c mtry
10132
10133 : see if fchdir exists
10134 set fchdir d_fchdir
10135 eval $inlibc
10136
10137 : see if fchmod exists
10138 set fchmod d_fchmod
10139 eval $inlibc
10140
10141 : see if fchown exists
10142 set fchown d_fchown
10143 eval $inlibc
10144
10145 : see if this is an fcntl system
10146 set fcntl d_fcntl
10147 eval $inlibc
10148
10149 echo " "
10150 : See if fcntl-based locking works.
10151 $cat >try.c <<EOCP
10152 #include <stdlib.h>
10153 #include <unistd.h>
10154 #include <fcntl.h>
10155 #include <signal.h>
10156 $signal_t blech(x) int x; { exit(3); }
10157 int main() {
10158 #if defined(F_SETLK) && defined(F_SETLKW)
10159      struct flock flock;
10160      int retval, fd;
10161      fd = open("try.c", O_RDONLY);
10162      flock.l_type = F_RDLCK;
10163      flock.l_whence = SEEK_SET;
10164      flock.l_start = flock.l_len = 0;
10165      signal(SIGALRM, blech);
10166      alarm(10);
10167      retval = fcntl(fd, F_SETLK, &flock);
10168      close(fd);
10169      (retval < 0 ? exit(2) : exit(0));
10170 #else
10171      exit(2);
10172 #endif
10173 }
10174 EOCP
10175 echo "Checking if fcntl-based file locking works... "
10176 case "$d_fcntl" in
10177 "$define")
10178         set try
10179         if eval $compile_ok; then
10180                 if $run ./try; then
10181                         echo "Yes, it seems to work."
10182                         val="$define"
10183                 else
10184                         echo "Nope, it didn't work."
10185                         val="$undef"
10186                         case "$?" in
10187                         3) $cat >&4 <<EOM
10188 ***
10189 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10190 *** This is (almost) impossible.
10191 *** If your NFS lock daemons are not feeling well, something like
10192 *** this may happen, please investigate.  Cannot continue, aborting.
10193 ***
10194 EOM
10195                                 exit 1
10196                                 ;;
10197                         esac
10198                 fi
10199         else
10200                 echo "I'm unable to compile the test program, so I'll assume not."
10201                 val="$undef"
10202         fi
10203         ;;
10204 *) val="$undef";
10205         echo "Nope, since you don't even have fcntl()."
10206         ;;
10207 esac
10208 set d_fcntl_can_lock
10209 eval $setvar
10210 $rm -f try*
10211
10212
10213 : see if sys/select.h has to be included
10214 set sys/select.h i_sysselct
10215 eval $inhdr
10216
10217 : see if we should include time.h, sys/time.h, or both
10218 echo " "
10219 if test "X$timeincl" = X; then
10220         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10221         $echo $n "I'm now running the test program...$c"
10222         $cat >try.c <<'EOCP'
10223 #include <sys/types.h>
10224 #ifdef I_TIME
10225 #include <time.h>
10226 #endif
10227 #ifdef I_SYSTIME
10228 #ifdef SYSTIMEKERNEL
10229 #define KERNEL
10230 #endif
10231 #include <sys/time.h>
10232 #endif
10233 #ifdef I_SYSSELECT
10234 #include <sys/select.h>
10235 #endif
10236 int main()
10237 {
10238         struct tm foo;
10239 #ifdef S_TIMEVAL
10240         struct timeval bar;
10241 #endif
10242 #ifdef S_TIMEZONE
10243         struct timezone tzp;
10244 #endif
10245         if (foo.tm_sec == foo.tm_sec)
10246                 exit(0);
10247 #ifdef S_TIMEVAL
10248         if (bar.tv_sec == bar.tv_sec)
10249                 exit(0);
10250 #endif
10251         exit(1);
10252 }
10253 EOCP
10254         flags=''
10255         for s_timezone in '-DS_TIMEZONE' ''; do
10256         sysselect=''
10257         for s_timeval in '-DS_TIMEVAL' ''; do
10258         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10259         for i_time in '' '-DI_TIME'; do
10260         for i_systime in '-DI_SYSTIME' ''; do
10261                 case "$flags" in
10262                 '') $echo $n ".$c"
10263                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10264                         if eval $compile; then
10265                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10266                                 shift
10267                                 flags="$*"
10268                                 echo " "
10269                                 $echo $n "Succeeded with $flags$c"
10270                         fi
10271                         ;;
10272                 esac
10273         done
10274         done
10275         done
10276         done
10277         done
10278         timeincl=''
10279         echo " "
10280         case "$flags" in
10281         *SYSTIMEKERNEL*) i_systimek="$define"
10282                 timeincl=`./findhdr sys/time.h`
10283                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10284         *) i_systimek="$undef";;
10285         esac
10286         case "$flags" in
10287         *I_TIME*) i_time="$define"
10288                 timeincl=`./findhdr time.h`" $timeincl"
10289                 echo "We'll include <time.h>." >&4;;
10290         *) i_time="$undef";;
10291         esac
10292         case "$flags" in
10293         *I_SYSTIME*) i_systime="$define"
10294                 timeincl=`./findhdr sys/time.h`" $timeincl"
10295                 echo "We'll include <sys/time.h>." >&4;;
10296         *) i_systime="$undef";;
10297         esac
10298         $rm -f try.c try
10299 fi
10300
10301 : check for fd_set items
10302 $cat <<EOM
10303
10304 Checking to see how well your C compiler handles fd_set and friends ...
10305 EOM
10306 $cat >try.c <<EOCP
10307 #$i_systime I_SYS_TIME
10308 #$i_sysselct I_SYS_SELECT
10309 #$d_socket HAS_SOCKET
10310 #include <sys/types.h>
10311 #ifdef HAS_SOCKET
10312 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10313 #endif
10314 #ifdef I_SYS_TIME
10315 #include <sys/time.h>
10316 #endif
10317 #ifdef I_SYS_SELECT
10318 #include <sys/select.h>
10319 #endif
10320 int main() {
10321         fd_set fds;
10322
10323 #ifdef TRYBITS
10324         if(fds.fds_bits);
10325 #endif
10326
10327 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10328         exit(0);
10329 #else
10330         exit(1);
10331 #endif
10332 }
10333 EOCP
10334 set try -DTRYBITS
10335 if eval $compile; then
10336         d_fds_bits="$define"
10337         d_fd_set="$define"
10338         echo "Well, your system knows about the normal fd_set typedef..." >&4
10339         if $run ./try; then
10340                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10341                 d_fd_macros="$define"
10342         else
10343                 $cat >&4 <<'EOM'
10344 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10345 EOM
10346                 d_fd_macros="$undef"
10347         fi
10348 else
10349         $cat <<'EOM'
10350 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10351 EOM
10352         set try
10353         if eval $compile; then
10354                 d_fds_bits="$undef"
10355                 d_fd_set="$define"
10356                 echo "Well, your system has some sort of fd_set available..." >&4
10357                 if $run ./try; then
10358                         echo "and you have the normal fd_set macros." >&4
10359                         d_fd_macros="$define"
10360                 else
10361                         $cat <<'EOM'
10362 but not the normal fd_set macros!  Gross!  More work for me...
10363 EOM
10364                         d_fd_macros="$undef"
10365                 fi
10366         else
10367         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10368                 d_fd_set="$undef"
10369                 d_fds_bits="$undef"
10370                 d_fd_macros="$undef"
10371         fi
10372 fi
10373 $rm -f try try.*
10374
10375 : see if fgetpos exists
10376 set fgetpos d_fgetpos
10377 eval $inlibc
10378
10379 : see if finite exists
10380 set finite d_finite
10381 eval $inlibc
10382
10383 : see if finitel exists
10384 set finitel d_finitel
10385 eval $inlibc
10386
10387 : see if flock exists
10388 set flock d_flock
10389 eval $inlibc
10390
10391 : see if prototype for flock is available
10392 echo " "
10393 set d_flockproto flock $i_sysfile sys/file.h
10394 eval $hasproto
10395
10396 : see if fork exists
10397 set fork d_fork
10398 eval $inlibc
10399
10400 : see if fp_class exists
10401 set fp_class d_fp_class
10402 eval $inlibc
10403
10404 : see if pathconf exists
10405 set pathconf d_pathconf
10406 eval $inlibc
10407
10408 : see if fpathconf exists
10409 set fpathconf d_fpathconf
10410 eval $inlibc
10411
10412 : see if fpclass exists
10413 set fpclass d_fpclass
10414 eval $inlibc
10415
10416 : see if fpclassify exists
10417 set fpclassify d_fpclassify
10418 eval $inlibc
10419
10420 : see if fpclassl exists
10421 set fpclassl d_fpclassl
10422 eval $inlibc
10423
10424
10425 : check for fpos64_t
10426 echo " "
10427 echo "Checking to see if you have fpos64_t..." >&4
10428 $cat >try.c <<EOCP
10429 #include <stdio.h>
10430 int main() { fpos64_t x = 7; }
10431 EOCP
10432 set try
10433 if eval $compile; then
10434         val="$define"
10435         echo "You have fpos64_t."
10436 else
10437         val="$undef"
10438         echo "You do not have fpos64_t."
10439         case "$fpossize" in
10440         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10441         esac
10442 fi
10443 $rm -f try.* try
10444 set d_fpos64_t
10445 eval $setvar
10446
10447 : see if frexpl exists
10448 set frexpl d_frexpl
10449 eval $inlibc
10450
10451 : see if this is a sys/param system
10452 set sys/param.h i_sysparam
10453 eval $inhdr
10454
10455 : see if this is a sys/mount.h system
10456 set sys/mount.h i_sysmount
10457 eval $inhdr
10458
10459
10460 echo " "
10461 echo "Checking to see if your system supports struct fs_data..." >&4
10462 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10463 eval $hasstruct
10464 case "$d_fs_data_s" in
10465 "$define")      echo "Yes, it does."   ;;
10466 *)              echo "No, it doesn't." ;;
10467 esac
10468
10469 : see if fseeko exists
10470 set fseeko d_fseeko
10471 eval $inlibc
10472 case "$longsize" in
10473 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10474 esac
10475
10476 : see if fsetpos exists
10477 set fsetpos d_fsetpos
10478 eval $inlibc
10479
10480
10481 : see if fstatfs exists
10482 set fstatfs d_fstatfs
10483 eval $inlibc
10484
10485
10486 : see if statvfs exists
10487 set statvfs d_statvfs
10488 eval $inlibc
10489
10490 : see if fstatvfs exists
10491 set fstatvfs d_fstatvfs
10492 eval $inlibc
10493
10494
10495 : see if fsync exists
10496 set fsync d_fsync
10497 eval $inlibc
10498
10499 : see if ftello exists
10500 set ftello d_ftello
10501 eval $inlibc
10502 case "$longsize" in
10503 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10504 esac
10505
10506 : see if getcwd exists
10507 set getcwd d_getcwd
10508 eval $inlibc
10509
10510 : see if getespwnam exists
10511 set getespwnam d_getespwnam
10512 eval $inlibc
10513
10514
10515 : see if getfsstat exists
10516 set getfsstat d_getfsstat
10517 eval $inlibc
10518
10519 : see if getgrent exists
10520 set getgrent d_getgrent
10521 eval $inlibc
10522
10523 : see if gethostbyaddr exists
10524 set gethostbyaddr d_gethbyaddr
10525 eval $inlibc
10526
10527 : see if gethostbyname exists
10528 set gethostbyname d_gethbyname
10529 eval $inlibc
10530
10531 : see if gethostent exists
10532 set gethostent d_gethent
10533 eval $inlibc
10534
10535 : see how we will look up host name
10536 echo " "
10537 call=''
10538 if set gethostname val -f d_gethname; eval $csym; $val; then
10539         echo 'gethostname() found.' >&4
10540         d_gethname="$define"
10541         call=gethostname
10542 fi
10543 if set uname val -f d_uname; eval $csym; $val; then
10544         if ./xenix; then
10545                 $cat <<'EOM'
10546 uname() was found, but you're running xenix, and older versions of xenix
10547 have a broken uname(). If you don't really know whether your xenix is old
10548 enough to have a broken system call, use the default answer.
10549
10550 EOM
10551                 dflt=y
10552                 case "$d_uname" in
10553                 "$define") dflt=n;;
10554                 esac
10555                 rp='Is your uname() broken?'
10556                 . ./myread
10557                 case "$ans" in
10558                 n*) d_uname="$define"; call=uname;;
10559                 esac
10560         else
10561                 echo 'uname() found.' >&4
10562                 d_uname="$define"
10563                 case "$call" in
10564                 '') call=uname ;;
10565                 esac
10566         fi
10567 fi
10568 case "$d_gethname" in
10569 '') d_gethname="$undef";;
10570 esac
10571 case "$d_uname" in
10572 '') d_uname="$undef";;
10573 esac
10574 case "$d_uname$d_gethname" in
10575 *define*)
10576         dflt=n
10577         cat <<EOM
10578  
10579 Every now and then someone has a $call() that lies about the hostname
10580 but can't be fixed for political or economic reasons.  If you wish, I can
10581 pretend $call() isn't there and maybe compute hostname at run-time
10582 thanks to the '$phostname' command.
10583
10584 EOM
10585         rp="Shall I ignore $call() from now on?"
10586         . ./myread
10587         case "$ans" in
10588         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10589         esac;;
10590 esac
10591 case "$phostname" in
10592 '') aphostname='';;
10593 *) case "$aphostname" in
10594         /*) ;;
10595         *) set X $phostname
10596                 shift
10597                 file=$1
10598                 shift
10599                 file=`./loc $file $file $pth`
10600                 aphostname=`echo $file $*`
10601                 ;;
10602         esac
10603         ;;
10604 esac
10605 case "$d_uname$d_gethname" in
10606 *define*) ;;
10607 *)
10608         case "$phostname" in
10609         '')
10610                 echo "There will be no way for $package to get your hostname." >&4;;
10611         *)
10612         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10613                 ;;
10614         esac;;
10615 esac
10616 case "$d_phostname" in
10617 '') d_phostname="$undef";;
10618 esac
10619
10620 : see if this is a netdb.h system
10621 set netdb.h i_netdb
10622 eval $inhdr
10623
10624 : see if prototypes for various gethostxxx netdb.h functions are available
10625 echo " "
10626 set d_gethostprotos gethostent $i_netdb netdb.h
10627 eval $hasproto
10628
10629 : see if getitimer exists
10630 set getitimer d_getitimer
10631 eval $inlibc
10632
10633 : see if getlogin exists
10634 set getlogin d_getlogin
10635 eval $inlibc
10636
10637 : see if getmnt exists
10638 set getmnt d_getmnt
10639 eval $inlibc
10640
10641 : see if getmntent exists
10642 set getmntent d_getmntent
10643 eval $inlibc
10644
10645 : see if getnetbyaddr exists
10646 set getnetbyaddr d_getnbyaddr
10647 eval $inlibc
10648
10649 : see if getnetbyname exists
10650 set getnetbyname d_getnbyname
10651 eval $inlibc
10652
10653 : see if getnetent exists
10654 set getnetent d_getnent
10655 eval $inlibc
10656
10657 : see if prototypes for various getnetxxx netdb.h functions are available
10658 echo " "
10659 set d_getnetprotos getnetent $i_netdb netdb.h
10660 eval $hasproto
10661
10662 : see if getpagesize exists
10663 set getpagesize d_getpagsz
10664 eval $inlibc
10665
10666
10667 : see if getprotobyname exists
10668 set getprotobyname d_getpbyname
10669 eval $inlibc
10670
10671 : see if getprotobynumber exists
10672 set getprotobynumber d_getpbynumber
10673 eval $inlibc
10674
10675 : see if getprotoent exists
10676 set getprotoent d_getpent
10677 eval $inlibc
10678
10679 : see if getpgid exists
10680 set getpgid d_getpgid
10681 eval $inlibc
10682
10683 : see if getpgrp2 exists
10684 set getpgrp2 d_getpgrp2
10685 eval $inlibc
10686
10687 : see if getppid exists
10688 set getppid d_getppid
10689 eval $inlibc
10690
10691 : see if getpriority exists
10692 set getpriority d_getprior
10693 eval $inlibc
10694
10695 : see if prototypes for various getprotoxxx netdb.h functions are available
10696 echo " "
10697 set d_getprotoprotos getprotoent $i_netdb netdb.h
10698 eval $hasproto
10699
10700 : see if getprpwnam exists
10701 set getprpwnam d_getprpwnam
10702 eval $inlibc
10703
10704 : see if getpwent exists
10705 set getpwent d_getpwent
10706 eval $inlibc
10707
10708
10709 : see if getservbyname exists
10710 set getservbyname d_getsbyname
10711 eval $inlibc
10712
10713 : see if getservbyport exists
10714 set getservbyport d_getsbyport
10715 eval $inlibc
10716
10717 : see if getservent exists
10718 set getservent d_getsent
10719 eval $inlibc
10720
10721 : see if prototypes for various getservxxx netdb.h functions are available
10722 echo " "
10723 set d_getservprotos getservent $i_netdb netdb.h
10724 eval $hasproto
10725
10726 : see if getspnam exists
10727 set getspnam d_getspnam
10728 eval $inlibc
10729
10730 : see if gettimeofday or ftime exists
10731 set gettimeofday d_gettimeod
10732 eval $inlibc
10733 case "$d_gettimeod" in
10734 "$undef")
10735         set ftime d_ftime 
10736         eval $inlibc
10737         ;;
10738 *)
10739         val="$undef"; set d_ftime; eval $setvar
10740         ;;
10741 esac
10742 case "$d_gettimeod$d_ftime" in
10743 "$undef$undef")
10744         echo " "
10745         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10746         ;;
10747 esac
10748
10749 : see if this is an grp system
10750 set grp.h i_grp
10751 eval $inhdr
10752
10753 case "$i_grp" in
10754 $define)
10755         xxx=`./findhdr grp.h`
10756         $cppstdin $cppflags $cppminus < $xxx >$$.h
10757
10758         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10759                 val="$define"
10760         else
10761                 val="$undef"
10762         fi
10763         set d_grpasswd
10764         eval $setvar
10765
10766         $rm -f $$.h
10767         ;;
10768 *)
10769         val="$undef";
10770         set d_grpasswd; eval $setvar
10771         ;;
10772 esac
10773
10774 : see if hasmntopt exists
10775 set hasmntopt d_hasmntopt
10776 eval $inlibc
10777
10778 : see if this is a netinet/in.h or sys/in.h system
10779 set netinet/in.h i_niin sys/in.h i_sysin
10780 eval $inhdr
10781
10782 : see if arpa/inet.h has to be included
10783 set arpa/inet.h i_arpainet
10784 eval $inhdr
10785
10786 : see if htonl --and friends-- exists
10787 val=''
10788 set htonl val
10789 eval $inlibc
10790
10791 : Maybe they are macros.
10792 case "$val" in
10793 $undef)
10794         $cat >htonl.c <<EOM
10795 #include <stdio.h>
10796 #include <sys/types.h>
10797 #$i_niin I_NETINET_IN
10798 #$i_sysin I_SYS_IN
10799 #$i_arpainet I_ARPA_INET
10800 #ifdef I_NETINET_IN
10801 #include <netinet/in.h>
10802 #endif
10803 #ifdef I_SYS_IN
10804 #include <sys/in.h>
10805 #endif
10806 #ifdef I_ARPA_INET
10807 #include <arpa/inet.h>
10808 #endif
10809 #ifdef htonl
10810 printf("Defined as a macro.");
10811 #endif
10812 EOM
10813         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10814         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10815                 val="$define"
10816                 echo "But it seems to be defined as a macro." >&4
10817         fi
10818         $rm -f htonl.?
10819         ;;
10820 esac
10821 set d_htonl
10822 eval $setvar
10823
10824 : index or strchr
10825 echo " "
10826 if set index val -f; eval $csym; $val; then
10827         if set strchr val -f d_strchr; eval $csym; $val; then
10828                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10829                         val="$define"
10830                         vali="$undef"
10831                         echo "strchr() found." >&4
10832                 else
10833                         val="$undef"
10834                         vali="$define"
10835                         echo "index() found." >&4
10836                 fi
10837         else
10838                 val="$undef"
10839                 vali="$define"
10840                 echo "index() found." >&4
10841         fi
10842 else
10843         if set strchr val -f d_strchr; eval $csym; $val; then
10844                 val="$define"
10845                 vali="$undef"
10846                 echo "strchr() found." >&4
10847         else
10848                 echo "No index() or strchr() found!" >&4
10849                 val="$undef"
10850                 vali="$undef"
10851         fi
10852 fi
10853 set d_strchr; eval $setvar
10854 val="$vali"
10855 set d_index; eval $setvar
10856
10857 : check whether inet_aton exists
10858 set inet_aton d_inetaton
10859 eval $inlibc
10860
10861 : Look for isascii
10862 echo " "
10863 $cat >isascii.c <<'EOCP'
10864 #include <stdio.h>
10865 #include <ctype.h>
10866 int main() {
10867         int c = 'A';
10868         if (isascii(c))
10869                 exit(0);
10870         else
10871                 exit(1);
10872 }
10873 EOCP
10874 set isascii
10875 if eval $compile; then
10876         echo "isascii() found." >&4
10877         val="$define"
10878 else
10879         echo "isascii() NOT found." >&4
10880         val="$undef"
10881 fi
10882 set d_isascii
10883 eval $setvar
10884 $rm -f isascii*
10885
10886 : see if isfinite exists
10887 set isfinite d_isfinite
10888 eval $inlibc
10889
10890 : see if isinf exists
10891 set isinf d_isinf
10892 eval $inlibc
10893
10894 : see if isnan exists
10895 set isnan d_isnan
10896 eval $inlibc
10897
10898 : see if isnanl exists
10899 set isnanl d_isnanl
10900 eval $inlibc
10901
10902 : see if killpg exists
10903 set killpg d_killpg
10904 eval $inlibc
10905
10906 : see if lchown exists
10907 echo " "
10908 $cat > try.c <<'EOCP'
10909 /* System header to define __stub macros and hopefully few prototypes,
10910     which can conflict with char lchown(); below.  */
10911 #include <assert.h>
10912 /* Override any gcc2 internal prototype to avoid an error.  */
10913 /* We use char because int might match the return type of a gcc2
10914    builtin and then its argument prototype would still apply.  */
10915 char lchown();
10916 int main() {
10917     /*  The GNU C library defines this for functions which it implements
10918         to always fail with ENOSYS.  Some functions are actually named
10919         something starting with __ and the normal name is an alias.  */
10920 #if defined (__stub_lchown) || defined (__stub___lchown)
10921 choke me
10922 #else
10923 lchown();
10924 #endif
10925 ; return 0; }
10926 EOCP
10927 set try
10928 if eval $compile; then
10929     $echo "lchown() found." >&4
10930     val="$define"
10931 else
10932     $echo "lchown() NOT found." >&4
10933     val="$undef"
10934 fi
10935 set d_lchown
10936 eval $setvar
10937
10938 : See if number of significant digits in a double precision number is known
10939 echo " "
10940 $cat >ldbl_dig.c <<EOM
10941 #$i_limits I_LIMITS
10942 #$i_float I_FLOAT
10943 #ifdef I_LIMITS
10944 #include <limits.h>
10945 #endif
10946 #ifdef I_FLOAT
10947 #include <float.h>
10948 #endif
10949 #ifdef LDBL_DIG
10950 printf("Contains LDBL_DIG");
10951 #endif
10952 EOM
10953 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10954 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10955         echo "LDBL_DIG found." >&4
10956         val="$define"
10957 else
10958         echo "LDBL_DIG NOT found." >&4
10959         val="$undef"
10960 fi
10961 $rm -f ldbl_dig.?
10962 set d_ldbl_dig
10963 eval $setvar
10964
10965 : see if link exists
10966 set link d_link
10967 eval $inlibc
10968
10969 : see if localeconv exists
10970 set localeconv d_locconv
10971 eval $inlibc
10972
10973 : see if lockf exists
10974 set lockf d_lockf
10975 eval $inlibc
10976
10977 : see if prototype for lseek is available
10978 echo " "
10979 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10980 eval $hasproto
10981
10982 : see if lstat exists
10983 set lstat d_lstat
10984 eval $inlibc
10985
10986 : see if madvise exists
10987 set madvise d_madvise
10988 eval $inlibc
10989
10990 : see if mblen exists
10991 set mblen d_mblen
10992 eval $inlibc
10993
10994 : see if mbstowcs exists
10995 set mbstowcs d_mbstowcs
10996 eval $inlibc
10997
10998 : see if mbtowc exists
10999 set mbtowc d_mbtowc
11000 eval $inlibc
11001
11002 : see if memchr exists
11003 set memchr d_memchr
11004 eval $inlibc
11005
11006 : see if memcmp exists
11007 set memcmp d_memcmp
11008 eval $inlibc
11009
11010 : see if memcpy exists
11011 set memcpy d_memcpy
11012 eval $inlibc
11013
11014 : see if memmove exists
11015 set memmove d_memmove
11016 eval $inlibc
11017
11018 : see if memset exists
11019 set memset d_memset
11020 eval $inlibc
11021
11022 : see if mkdir exists
11023 set mkdir d_mkdir
11024 eval $inlibc
11025
11026 : see if mkdtemp exists
11027 set mkdtemp d_mkdtemp
11028 eval $inlibc
11029
11030 : see if mkfifo exists
11031 set mkfifo d_mkfifo
11032 eval $inlibc
11033
11034 : see if mkstemp exists
11035 set mkstemp d_mkstemp
11036 eval $inlibc
11037
11038 : see if mkstemps exists
11039 set mkstemps d_mkstemps
11040 eval $inlibc
11041
11042 : see if mktime exists
11043 set mktime d_mktime
11044 eval $inlibc
11045
11046 : see if this is a sys/mman.h system
11047 set sys/mman.h i_sysmman
11048 eval $inhdr
11049
11050 : see if mmap exists
11051 set mmap d_mmap
11052 eval $inlibc
11053 : see what shmat returns
11054 : default to something harmless
11055 mmaptype='void *'
11056 case "$i_sysmman$d_mmap" in
11057 "$define$define")
11058         $cat >mmap.c <<'END'
11059 #include <sys/mman.h>
11060 void *mmap();
11061 END
11062         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11063                 mmaptype='void *'
11064         else
11065                 mmaptype='caddr_t'
11066         fi
11067         echo "and it returns ($mmaptype)." >&4
11068         ;;
11069 esac
11070
11071
11072
11073 : see if modfl exists
11074 set modfl d_modfl
11075 eval $inlibc
11076
11077 d_modfl_pow32_bug="$undef"
11078
11079 case "$d_longdbl$d_modfl" in
11080 $define$define)
11081         $cat <<EOM
11082 Checking to see whether your modfl() is okay for large values...
11083 EOM
11084 $cat >try.c <<EOCP
11085 #include <math.h> 
11086 #include <stdio.h>
11087 int main() {
11088     long double nv = 4294967303.15;
11089     long double v, w;
11090     v = modfl(nv, &w);         
11091 #ifdef __GLIBC__
11092     printf("glibc");
11093 #endif
11094     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
11095     return 0;
11096 }
11097 EOCP
11098         case "$osname:$gccversion" in
11099         aix:)   saveccflags="$ccflags"
11100                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
11101         esac
11102         set try
11103         if eval $compile; then
11104                 foo=`$run ./try`
11105                 case "$foo" in
11106                 *" 4294967303.150000 1.150000 4294967302.000000")
11107                         echo >&4 "Your modfl() is broken for large values."
11108                         d_modfl_pow32_bug="$define"
11109                         case "$foo" in
11110                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11111                         ;;
11112                         esac
11113                         ;;
11114                 *" 4294967303.150000 0.150000 4294967303.000000")
11115                         echo >&4 "Your modfl() seems okay for large values."
11116                         ;;
11117                 *)      echo >&4 "I don't understand your modfl() at all."
11118                         d_modfl="$undef"
11119                         ;;
11120                 esac
11121                 $rm -f try.* try core core.try.*
11122         else
11123                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11124                 d_modfl="$undef"
11125         fi
11126         case "$osname:$gccversion" in
11127         aix:)   ccflags="$saveccflags" ;; # restore
11128         esac
11129         ;;
11130 esac
11131
11132 : see if mprotect exists
11133 set mprotect d_mprotect
11134 eval $inlibc
11135
11136 : see if msgctl exists
11137 set msgctl d_msgctl
11138 eval $inlibc
11139
11140 : see if msgget exists
11141 set msgget d_msgget
11142 eval $inlibc
11143
11144 : see if msgsnd exists
11145 set msgsnd d_msgsnd
11146 eval $inlibc
11147
11148 : see if msgrcv exists
11149 set msgrcv d_msgrcv
11150 eval $inlibc
11151
11152 : see how much of the 'msg*(2)' library is present.
11153 h_msg=true
11154 echo " "
11155 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11156 *"$undef"*) h_msg=false;;
11157 esac
11158 case "$osname" in
11159 freebsd)
11160     case "`ipcs 2>&1`" in
11161     "SVID messages"*"not configured"*)
11162         echo "Your $osname does not have the msg*(2) configured." >&4
11163         h_msg=false
11164         val="$undef"
11165         set msgctl d_msgctl
11166         eval $setvar
11167         set msgget d_msgget
11168         eval $setvar
11169         set msgsnd d_msgsnd
11170         eval $setvar
11171         set msgrcv d_msgrcv
11172         eval $setvar
11173         ;;
11174     esac
11175     ;;
11176 esac
11177 : we could also check for sys/ipc.h ...
11178 if $h_msg && $test `./findhdr sys/msg.h`; then
11179         echo "You have the full msg*(2) library." >&4
11180         val="$define"
11181 else
11182         echo "You don't have the full msg*(2) library." >&4
11183         val="$undef"
11184 fi
11185 set d_msg
11186 eval $setvar
11187
11188
11189 echo " "
11190 echo "Checking to see if your system supports struct msghdr..." >&4
11191 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11192 eval $hasstruct
11193 case "$d_msghdr_s" in
11194 "$define")      echo "Yes, it does."   ;;
11195 *)              echo "No, it doesn't." ;;
11196 esac
11197
11198
11199 : see if msync exists
11200 set msync d_msync
11201 eval $inlibc
11202
11203 : see if munmap exists
11204 set munmap d_munmap
11205 eval $inlibc
11206
11207 : see if nice exists
11208 set nice d_nice
11209 eval $inlibc
11210
11211 : see if this is a langinfo.h system
11212 set langinfo.h i_langinfo
11213 eval $inhdr
11214
11215 : see if nl_langinfo exists
11216 set nl_langinfo d_nl_langinfo
11217 eval $inlibc
11218
11219 : check for length of character
11220 echo " "
11221 case "$charsize" in
11222 '')
11223         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11224         $cat >try.c <<'EOCP'
11225 #include <stdio.h>
11226 int main()
11227 {
11228     printf("%d\n", (int)sizeof(char));
11229     exit(0);
11230 }
11231 EOCP
11232         set try
11233         if eval $compile_ok; then
11234                 dflt=`$run ./try`
11235         else
11236                 dflt='1'
11237                 echo "(I can't seem to compile the test program.  Guessing...)"
11238         fi
11239         ;;
11240 *)
11241         dflt="$charsize"
11242         ;;
11243 esac
11244 rp="What is the size of a character (in bytes)?"
11245 . ./myread
11246 charsize="$ans"
11247 $rm -f try.c try
11248
11249 : check for volatile keyword
11250 echo " "
11251 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11252 $cat >try.c <<'EOCP'
11253 int main()
11254 {
11255         typedef struct _goo_struct goo_struct;
11256         goo_struct * volatile goo = ((goo_struct *)0);
11257         struct _goo_struct {
11258                 long long_int;
11259                 int reg_int;
11260                 char char_var;
11261         };
11262         typedef unsigned short foo_t;
11263         char *volatile foo;
11264         volatile int bar;
11265         volatile foo_t blech;
11266         foo = foo;
11267 }
11268 EOCP
11269 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11270         val="$define"
11271         echo "Yup, it does."
11272 else
11273         val="$undef"
11274         echo "Nope, it doesn't."
11275 fi
11276 set d_volatile
11277 eval $setvar
11278 $rm -f try.*
11279
11280
11281 echo " "
11282 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11283
11284 case "$use64bitint:$d_quad:$quadtype" in
11285 define:define:?*)
11286         ivtype="$quadtype"
11287         uvtype="$uquadtype"
11288         ivsize=8
11289         uvsize=8
11290         ;;
11291 *)      ivtype="long"
11292         uvtype="unsigned long"
11293         ivsize=$longsize
11294         uvsize=$longsize
11295         ;;
11296 esac
11297
11298 case "$uselongdouble:$d_longdbl" in
11299 define:define)
11300         nvtype="long double"
11301         nvsize=$longdblsize
11302         ;;
11303 *)      nvtype=double
11304         nvsize=$doublesize
11305         ;;
11306 esac
11307
11308 $echo "(IV will be "$ivtype", $ivsize bytes)"
11309 $echo "(UV will be "$uvtype", $uvsize bytes)"
11310 $echo "(NV will be "$nvtype", $nvsize bytes)"
11311
11312 $cat >try.c <<EOCP
11313 #$i_inttypes I_INTTYPES
11314 #ifdef I_INTTYPES
11315 #include <inttypes.h>
11316 #endif
11317 #include <stdio.h>
11318 int main() {
11319 #ifdef INT8
11320    int8_t i =  INT8_MAX;
11321   uint8_t u = UINT8_MAX;
11322   printf("int8_t\n");
11323 #endif
11324 #ifdef INT16
11325    int16_t i =  INT16_MAX;
11326   uint16_t i = UINT16_MAX;
11327   printf("int16_t\n");
11328 #endif
11329 #ifdef INT32
11330    int32_t i =  INT32_MAX;
11331   uint32_t u = UINT32_MAX;
11332   printf("int32_t\n");
11333 #endif
11334 }
11335 EOCP
11336
11337 case "$i8type" in
11338 '')     case "$charsize" in
11339         1)      i8type=char
11340                 u8type="unsigned char"
11341                 i8size=$charsize
11342                 u8size=$charsize
11343                 ;;
11344         esac
11345         ;;
11346 esac
11347 case "$i8type" in
11348 '')     set try -DINT8
11349         if eval $compile; then
11350                 case "`$run ./try`" in
11351                 int8_t) i8type=int8_t
11352                         u8type=uint8_t
11353                         i8size=1
11354                         u8size=1
11355                         ;;
11356                 esac
11357         fi
11358         ;;
11359 esac
11360 case "$i8type" in
11361 '')     if $test $charsize -ge 1; then
11362                 i8type=char
11363                 u8type="unsigned char"
11364                 i8size=$charsize
11365                 u8size=$charsize
11366         fi
11367         ;;
11368 esac
11369
11370 case "$i16type" in
11371 '')     case "$shortsize" in
11372         2)      i16type=short
11373                 u16type="unsigned short"
11374                 i16size=$shortsize
11375                 u16size=$shortsize
11376                 ;;
11377         esac
11378         ;;
11379 esac
11380 case "$i16type" in
11381 '')     set try -DINT16
11382         if eval $compile; then
11383                 case "`$run ./try`" in
11384                 int16_t)
11385                         i16type=int16_t
11386                         u16type=uint16_t
11387                         i16size=2
11388                         u16size=2
11389                         ;;
11390                 esac
11391         fi
11392         ;;
11393 esac
11394 case "$i16type" in
11395 '')     if $test $shortsize -ge 2; then
11396                 i16type=short
11397                 u16type="unsigned short"
11398                 i16size=$shortsize
11399                 u16size=$shortsize
11400         fi
11401         ;;
11402 esac
11403
11404 case "$i32type" in
11405 '')     case "$longsize" in
11406         4)      i32type=long
11407                 u32type="unsigned long"
11408                 i32size=$longsize
11409                 u32size=$longsize
11410                 ;;
11411         *)      case "$intsize" in
11412                 4)      i32type=int
11413                         u32type="unsigned int"
11414                         i32size=$intsize
11415                         u32size=$intsize
11416                         ;;
11417                 esac
11418                 ;;
11419         esac
11420         ;;
11421 esac
11422 case "$i32type" in
11423 '')     set try -DINT32
11424         if eval $compile; then
11425                 case "`$run ./try`" in
11426                 int32_t)
11427                         i32type=int32_t
11428                         u32type=uint32_t
11429                         i32size=4
11430                         u32size=4
11431                         ;;
11432                 esac
11433         fi
11434         ;;
11435 esac
11436 case "$i32type" in
11437 '')     if $test $intsize -ge 4; then
11438                 i32type=int
11439                 u32type="unsigned int"
11440                 i32size=$intsize
11441                 u32size=$intsize
11442         fi
11443         ;;
11444 esac
11445
11446 case "$i64type" in
11447 '')     case "$d_quad:$quadtype" in
11448         define:?*)
11449                 i64type="$quadtype"
11450                 u64type="$uquadtype"
11451                 i64size=8
11452                 u64size=8
11453                 ;;
11454         esac
11455         ;;
11456 esac
11457
11458 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11459 : volatile so that the compiler has to store it out to memory.
11460 if test X"$d_volatile" = X"$define"; then
11461         volatile=volatile
11462 fi
11463 $cat <<EOP >try.c
11464 #include <stdio.h>
11465 #include <sys/types.h>
11466 #include <signal.h>
11467 #ifdef SIGFPE
11468 $volatile int bletched = 0;
11469 $signal_t blech(s) int s; { bletched = 1; }
11470 #endif
11471 int main() {
11472     $uvtype u = 0;
11473     $nvtype d;
11474     int     n = 8 * $uvsize;
11475     int     i;
11476 #ifdef SIGFPE
11477     signal(SIGFPE, blech);
11478 #endif
11479
11480     for (i = 0; i < n; i++) {
11481       u = u << 1 | ($uvtype)1;
11482       d = ($nvtype)u;
11483       if (($uvtype)d != u)
11484         break;
11485       if (d <= 0)
11486         break;
11487       d = ($nvtype)(u - 1);
11488       if (($uvtype)d != (u - 1))
11489         break;
11490 #ifdef SIGFPE
11491       if (bletched) {
11492         break;
11493 #endif
11494       } 
11495     }
11496     printf("%d\n", ((i == n) ? -n : i));
11497     exit(0);
11498 }
11499 EOP
11500 set try
11501
11502 d_nv_preserves_uv="$undef"
11503 if eval $compile; then
11504         d_nv_preserves_uv_bits="`$run ./try`"
11505 fi
11506 case "$d_nv_preserves_uv_bits" in
11507 \-[1-9]*)       
11508         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11509         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11510         d_nv_preserves_uv="$define"
11511         ;;
11512 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11513         d_nv_preserves_uv="$undef" ;;
11514 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11515         d_nv_preserves_uv_bits="$undef" ;;
11516 esac
11517
11518 $rm -f try.* try
11519
11520
11521 : check for off64_t
11522 echo " "
11523 echo "Checking to see if you have off64_t..." >&4
11524 $cat >try.c <<EOCP
11525 #include <sys/types.h>
11526 #include <unistd.h>
11527 int main() { off64_t x = 7; }
11528 EOCP
11529 set try
11530 if eval $compile; then
11531         val="$define"
11532         echo "You have off64_t."
11533 else
11534         val="$undef"
11535         echo "You do not have off64_t."
11536         case "$lseeksize" in
11537         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11538         esac
11539 fi
11540 $rm -f try.* try
11541 set d_off64_t
11542 eval $setvar
11543
11544 : see if POSIX threads are available
11545 set pthread.h i_pthread
11546 eval $inhdr
11547
11548
11549
11550
11551 : how to create joinable pthreads
11552 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11553         echo " "
11554         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11555         $cat >try.c <<'EOCP'
11556 #include <pthread.h>
11557 int main() {
11558     int detachstate = JOINABLE;
11559 }
11560 EOCP
11561         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11562         if eval $compile; then
11563                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11564                 val="$undef" # Yes, undef.
11565                 set d_old_pthread_create_joinable
11566                 eval $setvar
11567                 val=""
11568                 set old_pthread_create_joinable
11569                 eval $setvar
11570         else
11571                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11572                 if eval $compile; then
11573                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11574                         val="$define"
11575                         set d_old_pthread_create_joinable
11576                         eval $setvar
11577                         val=PTHREAD_CREATE_UNDETACHED
11578                         set old_pthread_create_joinable
11579                         eval $setvar
11580                 else            
11581                         set try -DJOINABLE=__UNDETACHED
11582                         if eval $compile; then
11583                                 echo "You seem to use __UNDETACHED." >&4
11584                                 val="$define"
11585                                 set d_old_pthread_create_joinable
11586                                 eval $setvar
11587                                 val=__UNDETACHED
11588                                 set old_pthread_create_joinable
11589                                 eval $setvar
11590                         else
11591                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11592                                 val="$define"
11593                                 set d_old_pthread_create_joinable
11594                                 eval $setvar
11595                                 val=0
11596                                 set old_pthread_create_joinable
11597                                 eval $setvar
11598                         fi
11599                 fi
11600         fi
11601         $rm -f try try.*
11602 else
11603     d_old_pthread_create_joinable="$undef"
11604     old_pthread_create_joinable=""
11605 fi
11606
11607 : see if pause exists
11608 set pause d_pause
11609 eval $inlibc
11610
11611 : see if pipe exists
11612 set pipe d_pipe
11613 eval $inlibc
11614
11615 : see if poll exists
11616 set poll d_poll
11617 eval $inlibc
11618
11619 : see if readlink exists
11620 set readlink d_readlink
11621 eval $inlibc
11622
11623 echo " "
11624 procselfexe=''
11625 val="$undef"
11626 case "$d_readlink" in
11627 "$define")
11628         if $issymlink /proc/self/exe ; then
11629                 $ls -l /proc/self/exe > reflect
11630                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11631                         echo "You have Linux-like /proc/self/exe."
11632                         procselfexe='"/proc/self/exe"'
11633                         val="$define"
11634                 fi
11635         fi
11636         if $issymlink /proc/curproc/file ; then
11637                 $ls -l /proc/curproc/file > reflect
11638                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11639                         echo "You have BSD-like /proc/curproc/file."
11640                         procselfexe='"/proc/curproc/file"'
11641                         val="$define"
11642                 fi
11643         fi
11644         ;;
11645 esac
11646 $rm -f reflect
11647 set d_procselfexe
11648 eval $setvar
11649
11650 : see if pthread_atfork exists
11651 set pthread_atfork d_pthread_atfork
11652 eval $inlibc
11653
11654
11655 : see whether the various POSIXish _yields exist
11656 $cat >try.c <<EOP
11657 #include <pthread.h>
11658 #include <stdio.h>
11659 int main() {
11660 #ifdef SCHED_YIELD
11661         sched_yield();
11662 #else
11663 #ifdef PTHREAD_YIELD
11664         pthread_yield();
11665 #else
11666 #ifdef PTHREAD_YIELD_NULL
11667         pthread_yield(NULL);
11668 #endif
11669 #endif
11670 #endif
11671 }
11672 EOP
11673 : see if sched_yield exists
11674 set try -DSCHED_YIELD
11675 if eval $compile; then
11676     val="$define"
11677     sched_yield='sched_yield()'
11678 else
11679     val="$undef"
11680 fi
11681 case "$usethreads" in
11682 $define)
11683         case "$val" in
11684         $define) echo 'sched_yield() found.' >&4        ;;
11685         *)       echo 'sched_yield() NOT found.' >&4    ;;
11686         esac
11687 esac
11688 set d_sched_yield
11689 eval $setvar
11690
11691 : see if pthread_yield exists
11692 set try -DPTHREAD_YIELD
11693 if eval $compile; then
11694     val="$define"
11695     case "$sched_yield" in
11696     '') sched_yield='pthread_yield()' ;;
11697     esac
11698 else
11699     set try -DPTHREAD_YIELD_NULL
11700     if eval $compile; then
11701         val="$define"
11702         case "$sched_yield" in
11703         '') sched_yield='pthread_yield(NULL)' ;;
11704         esac
11705     else
11706         val="$undef"
11707     fi
11708 fi
11709 case "$usethreads" in
11710 $define)
11711         case "$val" in
11712         $define) echo 'pthread_yield() found.' >&4      ;;
11713         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11714         esac
11715         ;;
11716 esac
11717 set d_pthread_yield
11718 eval $setvar
11719
11720 case "$sched_yield" in
11721 '') sched_yield=undef ;;
11722 esac
11723
11724 $rm -f try try.*
11725
11726 : see if this is a pwd.h system
11727 set pwd.h i_pwd
11728 eval $inhdr
11729
11730 case "$i_pwd" in
11731 $define)
11732         xxx=`./findhdr pwd.h`
11733         $cppstdin $cppflags $cppminus < $xxx >$$.h
11734
11735         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11736                 val="$define"
11737         else
11738                 val="$undef"
11739         fi
11740         set d_pwquota
11741         eval $setvar
11742
11743         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11744                 val="$define"
11745         else
11746                 val="$undef"
11747         fi
11748         set d_pwage
11749         eval $setvar
11750
11751         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11752                 val="$define"
11753         else
11754                 val="$undef"
11755         fi
11756         set d_pwchange
11757         eval $setvar
11758
11759         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11760                 val="$define"
11761         else
11762                 val="$undef"
11763         fi
11764         set d_pwclass
11765         eval $setvar
11766
11767         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11768                 val="$define"
11769         else
11770                 val="$undef"
11771         fi
11772         set d_pwexpire
11773         eval $setvar
11774
11775         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11776                 val="$define"
11777         else
11778                 val="$undef"
11779         fi
11780         set d_pwcomment
11781         eval $setvar
11782
11783         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11784                 val="$define"
11785         else
11786                 val="$undef"
11787         fi
11788         set d_pwgecos
11789         eval $setvar
11790
11791         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11792                 val="$define"
11793         else
11794                 val="$undef"
11795         fi
11796         set d_pwpasswd
11797         eval $setvar
11798
11799         $rm -f $$.h
11800         ;;
11801 *)
11802         val="$undef"; 
11803         set d_pwquota; eval $setvar
11804         set d_pwage; eval $setvar
11805         set d_pwchange; eval $setvar
11806         set d_pwclass; eval $setvar
11807         set d_pwexpire; eval $setvar
11808         set d_pwcomment; eval $setvar
11809         set d_pwgecos; eval $setvar
11810         set d_pwpasswd; eval $setvar
11811         ;;
11812 esac
11813
11814 : see if readdir and friends exist
11815 set readdir d_readdir
11816 eval $inlibc
11817 set seekdir d_seekdir
11818 eval $inlibc
11819 set telldir d_telldir
11820 eval $inlibc
11821 set rewinddir d_rewinddir
11822 eval $inlibc
11823
11824 : see if readv exists
11825 set readv d_readv
11826 eval $inlibc
11827
11828 : see if recvmsg exists
11829 set recvmsg d_recvmsg
11830 eval $inlibc
11831
11832 : see if rename exists
11833 set rename d_rename
11834 eval $inlibc
11835
11836 : see if rmdir exists
11837 set rmdir d_rmdir
11838 eval $inlibc
11839
11840 : see if memory.h is available.
11841 val=''
11842 set memory.h val
11843 eval $inhdr
11844
11845 : See if it conflicts with string.h
11846 case "$val" in
11847 $define)
11848         case "$strings" in
11849         '') ;;
11850         *)
11851                 $cppstdin $cppflags $cppminus < $strings > mem.h
11852                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11853                         echo " "
11854                         echo "We won't be including <memory.h>."
11855                         val="$undef"
11856                 fi
11857                 $rm -f mem.h
11858                 ;;
11859         esac
11860 esac
11861 set i_memory
11862 eval $setvar
11863
11864 : can bcopy handle overlapping blocks?
11865 echo " "
11866 val="$undef"
11867 case "$d_memmove" in
11868 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11869 *)      case "$d_bcopy" in
11870         "$define")
11871                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11872                 $cat >try.c <<EOCP
11873 #$i_memory I_MEMORY
11874 #$i_stdlib I_STDLIB
11875 #$i_string I_STRING
11876 #$i_unistd I_UNISTD
11877 EOCP
11878         $cat >>try.c <<'EOCP'
11879 #include <stdio.h>
11880 #ifdef I_MEMORY
11881 #  include <memory.h>
11882 #endif
11883 #ifdef I_STDLIB
11884 #  include <stdlib.h>
11885 #endif
11886 #ifdef I_STRING
11887 #  include <string.h>
11888 #else
11889 #  include <strings.h>
11890 #endif
11891 #ifdef I_UNISTD
11892 #  include <unistd.h>  /* Needed for NetBSD */
11893 #endif
11894 int main()
11895 {
11896 char buf[128], abc[128];
11897 char *b;
11898 int len;
11899 int off;
11900 int align;
11901
11902 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11903    try to store the string in read-only memory. */
11904 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11905
11906 for (align = 7; align >= 0; align--) {
11907         for (len = 36; len; len--) {
11908                 b = buf+align;
11909                 bcopy(abc, b, len);
11910                 for (off = 1; off <= len; off++) {
11911                         bcopy(b, b+off, len);
11912                         bcopy(b+off, b, len);
11913                         if (bcmp(b, abc, len))
11914                                 exit(1);
11915                 }
11916         }
11917 }
11918 exit(0);
11919 }
11920 EOCP
11921                 set try
11922                 if eval $compile_ok; then
11923                         if ./try 2>/dev/null; then
11924                                 echo "Yes, it can."
11925                                 val="$define"
11926                         else
11927                                 echo "It can't, sorry."
11928                         fi
11929                 else
11930                         echo "(I can't compile the test program, so we'll assume not...)"
11931                 fi
11932                 ;;
11933         esac
11934         $rm -f try.* try core
11935         ;;
11936 esac
11937 set d_safebcpy
11938 eval $setvar
11939
11940 : can memcpy handle overlapping blocks?
11941 echo " "
11942 val="$undef"
11943 case "$d_memmove" in
11944 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11945 *)      case "$d_memcpy" in
11946         "$define")
11947                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11948                 $cat >try.c <<EOCP
11949 #$i_memory I_MEMORY
11950 #$i_stdlib I_STDLIB
11951 #$i_string I_STRING
11952 #$i_unistd I_UNISTD
11953 EOCP
11954         $cat >>try.c <<'EOCP'
11955 #include <stdio.h>
11956 #ifdef I_MEMORY
11957 #  include <memory.h>
11958 #endif
11959 #ifdef I_STDLIB
11960 #  include <stdlib.h>
11961 #endif
11962 #ifdef I_STRING
11963 #  include <string.h>
11964 #else
11965 #  include <strings.h>
11966 #endif
11967 #ifdef I_UNISTD
11968 #  include <unistd.h>  /* Needed for NetBSD */
11969 #endif
11970 int main()
11971 {
11972 char buf[128], abc[128];
11973 char *b;
11974 int len;
11975 int off;
11976 int align;
11977
11978 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11979    try to store the string in read-only memory. */
11980 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11981
11982 for (align = 7; align >= 0; align--) {
11983         for (len = 36; len; len--) {
11984                 b = buf+align;
11985                 memcpy(b, abc, len);
11986                 for (off = 1; off <= len; off++) {
11987                         memcpy(b+off, b, len);
11988                         memcpy(b, b+off, len);
11989                         if (memcmp(b, abc, len))
11990                                 exit(1);
11991                 }
11992         }
11993 }
11994 exit(0);
11995 }
11996 EOCP
11997                 set try
11998                 if eval $compile_ok; then
11999                         if ./try 2>/dev/null; then
12000                                 echo "Yes, it can."
12001                                 val="$define"
12002                         else
12003                                 echo "It can't, sorry."
12004                         fi
12005                 else
12006                         echo "(I can't compile the test program, so we'll assume not...)"
12007                 fi
12008                 ;;
12009         esac
12010         $rm -f try.* try core
12011         ;;
12012 esac
12013 set d_safemcpy
12014 eval $setvar
12015
12016 : can memcmp be trusted to compare relative magnitude?
12017 val="$undef"
12018 case "$d_memcmp" in
12019 "$define")
12020         echo " "
12021         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12022         $cat >try.c <<EOCP
12023 #$i_memory I_MEMORY
12024 #$i_stdlib I_STDLIB
12025 #$i_string I_STRING
12026 #$i_unistd I_UNISTD
12027 EOCP
12028         $cat >>try.c <<'EOCP'
12029 #include <stdio.h>
12030 #ifdef I_MEMORY
12031 #  include <memory.h>
12032 #endif
12033 #ifdef I_STDLIB
12034 #  include <stdlib.h>
12035 #endif
12036 #ifdef I_STRING
12037 #  include <string.h>
12038 #else
12039 #  include <strings.h>
12040 #endif
12041 #ifdef I_UNISTD
12042 #  include <unistd.h>  /* Needed for NetBSD */
12043 #endif
12044 int main()
12045 {
12046 char a = -1;
12047 char b = 0;
12048 if ((a < b) && memcmp(&a, &b, 1) < 0)
12049         exit(1);
12050 exit(0);
12051 }
12052 EOCP
12053         set try
12054         if eval $compile_ok; then
12055                 if $run ./try 2>/dev/null; then
12056                         echo "Yes, it can."
12057                         val="$define"
12058                 else
12059                         echo "No, it can't (it uses signed chars)."
12060                 fi
12061         else
12062                 echo "(I can't compile the test program, so we'll assume not...)"
12063         fi
12064         ;;
12065 esac
12066 $rm -f try.* try core
12067 set d_sanemcmp
12068 eval $setvar
12069
12070 : see if prototype for sbrk is available
12071 echo " "
12072 set d_sbrkproto sbrk $i_unistd unistd.h
12073 eval $hasproto
12074
12075 : see if select exists
12076 set select d_select
12077 eval $inlibc
12078
12079 : see if semctl exists
12080 set semctl d_semctl
12081 eval $inlibc
12082
12083 : see if semget exists
12084 set semget d_semget
12085 eval $inlibc
12086
12087 : see if semop exists
12088 set semop d_semop
12089 eval $inlibc
12090
12091 : see how much of the 'sem*(2)' library is present.
12092 h_sem=true
12093 echo " "
12094 case "$d_semctl$d_semget$d_semop" in
12095 *"$undef"*) h_sem=false;;
12096 esac
12097 case "$osname" in
12098 freebsd)
12099     case "`ipcs 2>&1`" in
12100     "SVID messages"*"not configured"*)
12101         echo "Your $osname does not have the sem*(2) configured." >&4
12102         h_sem=false
12103         val="$undef"
12104         set semctl d_semctl
12105         eval $setvar
12106         set semget d_semget
12107         eval $setvar
12108         set semop d_semop
12109         eval $setvar
12110         ;;
12111     esac
12112     ;;
12113 esac
12114 : we could also check for sys/ipc.h ...
12115 if $h_sem && $test `./findhdr sys/sem.h`; then
12116         echo "You have the full sem*(2) library." >&4
12117         val="$define"
12118 else
12119         echo "You don't have the full sem*(2) library." >&4
12120         val="$undef"
12121 fi
12122 set d_sem
12123 eval $setvar
12124
12125 : see whether sys/sem.h defines union semun
12126 echo " "
12127 $cat > try.c <<'END'
12128 #include <sys/types.h>
12129 #include <sys/ipc.h>
12130 #include <sys/sem.h>
12131 int main () { union semun semun; semun.buf = 0; }
12132 END
12133 set try
12134 if eval $compile; then
12135     echo "You have union semun in <sys/sem.h>." >&4
12136     val="$define"
12137 else
12138     echo "You do not have union semun in <sys/sem.h>." >&4
12139     val="$undef"
12140 fi
12141 $rm -f try try.c try.h
12142 set d_union_semun
12143 eval $setvar
12144
12145 : see how to do semctl IPC_STAT
12146 case "$d_sem" in
12147 $define)
12148     : see whether semctl IPC_STAT can use union semun
12149     echo " "
12150     $cat > try.h <<END
12151 #ifndef S_IRUSR
12152 #   ifdef S_IREAD
12153 #       define S_IRUSR S_IREAD
12154 #       define S_IWUSR S_IWRITE
12155 #       define S_IXUSR S_IEXEC
12156 #   else
12157 #       define S_IRUSR 0400
12158 #       define S_IWUSR 0200
12159 #       define S_IXUSR 0100
12160 #   endif
12161 #   define S_IRGRP (S_IRUSR>>3)
12162 #   define S_IWGRP (S_IWUSR>>3)
12163 #   define S_IXGRP (S_IXUSR>>3)
12164 #   define S_IROTH (S_IRUSR>>6)
12165 #   define S_IWOTH (S_IWUSR>>6)
12166 #   define S_IXOTH (S_IXUSR>>6)
12167 #endif
12168 #ifndef S_IRWXU
12169 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12170 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12171 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12172 #endif
12173 END
12174
12175     $cat > try.c <<END
12176 #include <sys/types.h>
12177 #include <sys/ipc.h>
12178 #include <sys/sem.h>
12179 #include <sys/stat.h>
12180 #include <stdio.h>
12181 #include <errno.h>
12182 #include "try.h"
12183 #ifndef errno
12184 extern int errno;
12185 #endif
12186 #$d_union_semun HAS_UNION_SEMUN
12187 int main() {
12188     union semun
12189 #ifndef HAS_UNION_SEMUN
12190     {
12191         int val;
12192         struct semid_ds *buf;
12193         unsigned short *array;
12194     }
12195 #endif
12196     arg;
12197     int sem, st;
12198
12199 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12200     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12201     if (sem > -1) {
12202         struct semid_ds argbuf;
12203         arg.buf = &argbuf;
12204 #       ifdef IPC_STAT
12205         st = semctl(sem, 0, IPC_STAT, arg);
12206         if (st == 0)
12207             printf("semun\n");
12208         else
12209 #       endif /* IPC_STAT */
12210             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12211 #       ifdef IPC_RMID
12212         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12213 #       endif /* IPC_RMID */
12214             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12215     } else
12216 #endif /* IPC_PRIVATE && ... */
12217         printf("semget failed: errno = %d\n", errno);
12218   return 0;
12219 }
12220 END
12221     val="$undef"
12222     set try
12223     if eval $compile; then
12224         xxx=`$run ./try`
12225         case "$xxx" in
12226         semun) val="$define" ;;
12227         esac
12228     fi
12229     $rm -f try try.c
12230     set d_semctl_semun
12231     eval $setvar
12232     case "$d_semctl_semun" in
12233     $define)
12234         echo "You can use union semun for semctl IPC_STAT." >&4
12235         also='also'
12236         ;;
12237     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12238         also=''
12239         ;;
12240     esac
12241
12242     : see whether semctl IPC_STAT can use struct semid_ds pointer
12243     $cat > try.c <<'END'
12244 #include <sys/types.h>
12245 #include <sys/ipc.h>
12246 #include <sys/sem.h>
12247 #include <sys/stat.h>
12248 #include "try.h"
12249 #include <stdio.h>
12250 #include <errno.h>
12251 #ifndef errno
12252 extern int errno;
12253 #endif
12254 int main() {
12255     struct semid_ds arg;
12256     int sem, st;
12257
12258 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12259     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12260     if (sem > -1) {
12261 #       ifdef IPC_STAT
12262         st = semctl(sem, 0, IPC_STAT, &arg);
12263         if (st == 0)
12264             printf("semid_ds\n");
12265         else
12266 #       endif /* IPC_STAT */
12267             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12268 #       ifdef IPC_RMID
12269         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12270 #       endif /* IPC_RMID */
12271             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12272     } else
12273 #endif /* IPC_PRIVATE && ... */
12274         printf("semget failed: errno = %d\n", errno);
12275
12276     return 0;
12277 }
12278 END
12279     val="$undef"
12280     set try
12281     if eval $compile; then
12282         xxx=`$run ./try`
12283         case "$xxx" in
12284         semid_ds) val="$define" ;;
12285         esac
12286     fi
12287     $rm -f try try.c
12288     set d_semctl_semid_ds
12289     eval $setvar
12290     case "$d_semctl_semid_ds" in
12291     $define)
12292         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12293         ;;
12294     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12295         ;;
12296     esac
12297     $rm -f try.h
12298     ;;
12299 *)  val="$undef"
12300
12301     # We do not have the full sem*(2) library, so assume we can not
12302     # use either.
12303
12304     set d_semctl_semun
12305     eval $setvar
12306
12307     set d_semctl_semid_ds
12308     eval $setvar
12309     ;;
12310 esac
12311
12312 : see if sendmsg exists
12313 set sendmsg d_sendmsg
12314 eval $inlibc
12315
12316 : see if setegid exists
12317 set setegid d_setegid
12318 eval $inlibc
12319
12320 : see if seteuid exists
12321 set seteuid d_seteuid
12322 eval $inlibc
12323
12324 : see if setgrent exists
12325 set setgrent d_setgrent
12326 eval $inlibc
12327
12328 : see if sethostent exists
12329 set sethostent d_sethent
12330 eval $inlibc
12331
12332 : see if setitimer exists
12333 set setitimer d_setitimer
12334 eval $inlibc
12335
12336 : see if setlinebuf exists
12337 set setlinebuf d_setlinebuf
12338 eval $inlibc
12339
12340 : see if setlocale exists
12341 set setlocale d_setlocale
12342 eval $inlibc
12343
12344 : see if setnetent exists
12345 set setnetent d_setnent
12346 eval $inlibc
12347
12348 : see if setprotoent exists
12349 set setprotoent d_setpent
12350 eval $inlibc
12351
12352 : see if setpgid exists
12353 set setpgid d_setpgid
12354 eval $inlibc
12355
12356 : see if setpgrp2 exists
12357 set setpgrp2 d_setpgrp2
12358 eval $inlibc
12359
12360 : see if setpriority exists
12361 set setpriority d_setprior
12362 eval $inlibc
12363
12364 : see if setproctitle exists
12365 set setproctitle d_setproctitle
12366 eval $inlibc
12367
12368 : see if setpwent exists
12369 set setpwent d_setpwent
12370 eval $inlibc
12371
12372 : see if setregid exists
12373 set setregid d_setregid
12374 eval $inlibc
12375 set setresgid d_setresgid
12376 eval $inlibc
12377
12378 : see if setreuid exists
12379 set setreuid d_setreuid
12380 eval $inlibc
12381 set setresuid d_setresuid
12382 eval $inlibc
12383
12384 : see if setrgid exists
12385 set setrgid d_setrgid
12386 eval $inlibc
12387
12388 : see if setruid exists
12389 set setruid d_setruid
12390 eval $inlibc
12391
12392 : see if setservent exists
12393 set setservent d_setsent
12394 eval $inlibc
12395
12396 : see if setsid exists
12397 set setsid d_setsid
12398 eval $inlibc
12399
12400 : see if setvbuf exists
12401 set setvbuf d_setvbuf
12402 eval $inlibc
12403
12404 : see if sfio.h is available
12405 set sfio.h i_sfio
12406 eval $inhdr
12407
12408
12409 : see if sfio library is available
12410 case "$i_sfio" in
12411 $define)
12412         val=''
12413         set sfreserve val
12414         eval $inlibc
12415         ;;
12416 *)
12417         val="$undef"
12418         ;;
12419 esac
12420 : Ok, but do we want to use it.
12421 case "$val" in
12422 $define)
12423         case "$usesfio" in
12424         true|$define|[yY]*) dflt='y';;
12425         *) dflt='n';;
12426         esac
12427         echo "$package can use the sfio library, but it is experimental."
12428         case "$useperlio" in
12429         "$undef")
12430             echo "For sfio also the PerlIO abstraction layer is needed."
12431             echo "Earlier you said you wouldn't want that."
12432             ;;
12433         esac
12434         rp="You seem to have sfio available, do you want to try using it?"
12435         . ./myread
12436         case "$ans" in
12437         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12438                 useperlio="$define"
12439                 val="$define"
12440                 ;;
12441         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12442                 val="$undef"
12443                 ;;
12444         esac
12445         ;;
12446 *)      case "$usesfio" in
12447         true|$define|[yY]*)
12448                 echo "Sorry, cannot find sfio on this machine." >&4
12449                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12450                 val="$undef"
12451                 ;;
12452         esac
12453         ;;
12454 esac
12455 set d_sfio
12456 eval $setvar
12457 case "$d_sfio" in
12458 $define) usesfio='true';;
12459 *) usesfio='false';;
12460 esac
12461 case "$d_sfio" in
12462 $define) ;;
12463 *)      : Remove sfio from list of libraries to use
12464         case "$libs" in
12465         *-lsfio*)
12466                 echo "Removing unneeded -lsfio from library list" >&4
12467                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12468                 shift
12469                 libs="$*"
12470                 echo "libs = $libs" >&4
12471                 ;;
12472         esac
12473 ;;
12474 esac
12475
12476
12477 : see if shmctl exists
12478 set shmctl d_shmctl
12479 eval $inlibc
12480
12481 : see if shmget exists
12482 set shmget d_shmget
12483 eval $inlibc
12484
12485 : see if shmat exists
12486 set shmat d_shmat
12487 eval $inlibc
12488 : see what shmat returns
12489 case "$d_shmat" in
12490 "$define")
12491         $cat >shmat.c <<'END'
12492 #include <sys/shm.h>
12493 void *shmat();
12494 END
12495         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12496                 shmattype='void *'
12497         else
12498                 shmattype='char *'
12499         fi
12500         echo "and it returns ($shmattype)." >&4
12501         : see if a prototype for shmat is available
12502         xxx=`./findhdr sys/shm.h`
12503         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12504         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12505                 val="$define"
12506         else
12507                 val="$undef"
12508         fi
12509         $rm -f shmat.[co]
12510         ;;
12511 *)
12512         val="$undef"
12513         ;;
12514 esac
12515 set d_shmatprototype
12516 eval $setvar
12517
12518 : see if shmdt exists
12519 set shmdt d_shmdt
12520 eval $inlibc
12521
12522 : see how much of the 'shm*(2)' library is present.
12523 h_shm=true
12524 echo " "
12525 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12526 *"$undef"*) h_shm=false;;
12527 esac
12528 case "$osname" in
12529 freebsd)
12530     case "`ipcs 2>&1`" in
12531     "SVID shared memory"*"not configured"*)
12532         echo "Your $osname does not have the shm*(2) configured." >&4
12533         h_shm=false
12534         val="$undef"
12535         set shmctl d_shmctl
12536         evat $setvar
12537         set shmget d_shmget
12538         evat $setvar
12539         set shmat d_shmat
12540         evat $setvar
12541         set shmdt d_shmdt
12542         evat $setvar
12543         ;;
12544     esac
12545     ;;
12546 esac
12547 : we could also check for sys/ipc.h ...
12548 if $h_shm && $test `./findhdr sys/shm.h`; then
12549         echo "You have the full shm*(2) library." >&4
12550         val="$define"
12551 else
12552         echo "You don't have the full shm*(2) library." >&4
12553         val="$undef"
12554 fi
12555 set d_shm
12556 eval $setvar
12557
12558 echo " "
12559 : see if we have sigaction
12560 if set sigaction val -f d_sigaction; eval $csym; $val; then
12561         echo 'sigaction() found.' >&4
12562         $cat > try.c <<'EOP'
12563 #include <stdio.h>
12564 #include <sys/types.h>
12565 #include <signal.h>
12566 int main()
12567 {
12568     struct sigaction act, oact;
12569     act.sa_flags = 0;
12570     oact.sa_handler = 0;
12571     /* so that act and oact are used */
12572     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12573 }
12574 EOP
12575         set try
12576         if eval $compile_ok; then
12577                 val="$define"
12578         else
12579                 echo "But you don't seem to have a useable struct sigaction." >&4
12580                 val="$undef"
12581         fi
12582 else
12583         echo 'sigaction NOT found.' >&4
12584         val="$undef"
12585 fi
12586 set d_sigaction; eval $setvar
12587 $rm -f try try$_o try.c
12588
12589 : see if sigprocmask exists
12590 set sigprocmask d_sigprocmask
12591 eval $inlibc
12592
12593 : see if sigsetjmp exists
12594 echo " "
12595 case "$d_sigsetjmp" in
12596 '')
12597         $cat >try.c <<'EOP'
12598 #include <setjmp.h>
12599 sigjmp_buf env;
12600 int set = 1;
12601 int main()
12602 {
12603         if (sigsetjmp(env,1))
12604                 exit(set);
12605         set = 0;
12606         siglongjmp(env, 1);
12607         exit(1);
12608 }
12609 EOP
12610         set try
12611         if eval $compile; then
12612                 if $run ./try >/dev/null 2>&1; then
12613                         echo "POSIX sigsetjmp found." >&4
12614                         val="$define"
12615                 else
12616                         $cat >&4 <<EOM
12617 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12618 I'll ignore them.
12619 EOM
12620                         val="$undef"
12621                 fi
12622         else
12623                 echo "sigsetjmp not found." >&4
12624                 val="$undef"
12625         fi
12626         ;;
12627 *) val="$d_sigsetjmp"
12628         case "$d_sigsetjmp" in
12629         $define) echo "POSIX sigsetjmp found." >&4;;
12630         $undef) echo "sigsetjmp not found." >&4;;
12631         esac
12632         ;;
12633 esac
12634 set d_sigsetjmp
12635 eval $setvar
12636 $rm -f try.c try
12637
12638 : see if sockatmark exists
12639 set sockatmark d_sockatmark
12640 eval $inlibc
12641
12642 : see if prototype for sockatmark is available
12643 echo " "
12644 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12645 eval $hasproto
12646
12647 : see if socks5_init exists
12648 set socks5_init d_socks5_init
12649 eval $inlibc
12650
12651 : see if prototype for setresgid is available
12652 echo " "
12653 set d_sresgproto setresgid $i_unistd unistd.h
12654 eval $hasproto
12655
12656 : see if prototype for setresuid is available
12657 echo " "
12658 set d_sresuproto setresuid $i_unistd unistd.h
12659 eval $hasproto
12660
12661 : see if sys/stat.h is available
12662 set sys/stat.h i_sysstat
12663 eval $inhdr
12664
12665
12666 : see if stat knows about block sizes
12667 echo " "
12668 echo "Checking to see if your struct stat has st_blocks field..." >&4
12669 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12670 eval $hasfield
12671
12672
12673 : see if this is a sys/vfs.h system
12674 set sys/vfs.h i_sysvfs
12675 eval $inhdr
12676
12677
12678 : see if this is a sys/statfs.h system
12679 set sys/statfs.h i_sysstatfs
12680 eval $inhdr
12681
12682
12683 echo " "
12684 echo "Checking to see if your system supports struct statfs..." >&4
12685 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
12686 eval $hasstruct
12687 case "$d_statfs_s" in
12688 "$define")      echo "Yes, it does."   ;;
12689 *)              echo "No, it doesn't." ;;
12690 esac
12691
12692
12693
12694 : see if struct statfs knows about f_flags
12695 case "$d_statfs_s" in
12696 define) 
12697         echo " "
12698         echo "Checking to see if your struct statfs has f_flags field..." >&4
12699         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
12700         eval $hasfield
12701         ;;
12702 *)      val="$undef"
12703         set d_statfs_f_flags
12704         eval $setvar
12705         ;;
12706 esac
12707 case "$d_statfs_f_flags" in
12708 "$define")      echo "Yes, it does."   ;;
12709 *)              echo "No, it doesn't." ;;
12710 esac
12711
12712 : see if _ptr and _cnt from stdio act std
12713 echo " "
12714
12715 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12716         echo "(Looks like you have stdio.h from BSD.)"
12717         case "$stdio_ptr" in
12718         '') stdio_ptr='((fp)->_p)'
12719                 ptr_lval=$define
12720                 ;;
12721         *)      ptr_lval=$d_stdio_ptr_lval;;
12722         esac
12723         case "$stdio_cnt" in
12724         '') stdio_cnt='((fp)->_r)'
12725                 cnt_lval=$define
12726                 ;;
12727         *)      cnt_lval=$d_stdio_cnt_lval;;
12728         esac
12729         case "$stdio_base" in
12730         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12731         esac
12732         case "$stdio_bufsiz" in
12733         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12734         esac
12735 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12736         echo "(Looks like you have stdio.h from Linux.)"
12737         case "$stdio_ptr" in
12738         '') stdio_ptr='((fp)->_IO_read_ptr)'
12739                 ptr_lval=$define
12740                 ;;
12741         *)      ptr_lval=$d_stdio_ptr_lval;;
12742         esac
12743         case "$stdio_cnt" in
12744         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12745                 cnt_lval=$undef
12746                 ;;
12747         *)      cnt_lval=$d_stdio_cnt_lval;;
12748         esac
12749         case "$stdio_base" in
12750         '') stdio_base='((fp)->_IO_read_base)';;
12751         esac
12752         case "$stdio_bufsiz" in
12753         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12754         esac
12755 else
12756         case "$stdio_ptr" in
12757         '') stdio_ptr='((fp)->_ptr)'
12758                 ptr_lval=$define
12759                 ;;
12760         *)      ptr_lval=$d_stdio_ptr_lval;;
12761         esac
12762         case "$stdio_cnt" in
12763         '') stdio_cnt='((fp)->_cnt)'
12764                 cnt_lval=$define
12765                 ;;
12766         *)      cnt_lval=$d_stdio_cnt_lval;;
12767         esac
12768         case "$stdio_base" in
12769         '') stdio_base='((fp)->_base)';;
12770         esac
12771         case "$stdio_bufsiz" in
12772         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12773         esac
12774 fi
12775
12776 : test whether _ptr and _cnt really work
12777 echo "Checking how std your stdio is..." >&4
12778 $cat >try.c <<EOP
12779 #include <stdio.h>
12780 #define FILE_ptr(fp)    $stdio_ptr
12781 #define FILE_cnt(fp)    $stdio_cnt
12782 int main() {
12783         FILE *fp = fopen("try.c", "r");
12784         char c = getc(fp);
12785         if (
12786                 18 <= FILE_cnt(fp) &&
12787                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12788         )
12789                 exit(0);
12790         exit(1);
12791 }
12792 EOP
12793 val="$undef"
12794 set try
12795 if eval $compile && $to try.c; then
12796         if $run ./try; then
12797                 echo "Your stdio acts pretty std."
12798                 val="$define"
12799         else
12800                 echo "Your stdio isn't very std."
12801         fi
12802 else
12803         echo "Your stdio doesn't appear very std."
12804 fi
12805 $rm -f try.c try
12806 set d_stdstdio
12807 eval $setvar
12808
12809 : Can _ptr be used as an lvalue?
12810 case "$d_stdstdio$ptr_lval" in
12811 $define$define) val=$define ;;
12812 *) val=$undef ;;
12813 esac
12814 set d_stdio_ptr_lval
12815 eval $setvar
12816
12817 : Can _cnt be used as an lvalue?
12818 case "$d_stdstdio$cnt_lval" in
12819 $define$define) val=$define ;;
12820 *) val=$undef ;;
12821 esac
12822 set d_stdio_cnt_lval
12823 eval $setvar
12824
12825
12826 : test whether setting _ptr sets _cnt as a side effect
12827 d_stdio_ptr_lval_sets_cnt="$undef"
12828 d_stdio_ptr_lval_nochange_cnt="$undef"
12829 case "$d_stdio_ptr_lval$d_stdstdio" in
12830 $define$define)
12831         echo "Checking to see what happens if we set the stdio ptr..." >&4
12832 $cat >try.c <<EOP
12833 #include <stdio.h>
12834 /* Can we scream? */
12835 /* Eat dust sed :-) */
12836 /* In the buffer space, no one can hear you scream. */
12837 #define FILE_ptr(fp)    $stdio_ptr
12838 #define FILE_cnt(fp)    $stdio_cnt
12839 #include <sys/types.h>
12840 int main() {
12841         FILE *fp = fopen("try.c", "r");
12842         int c;
12843         char *ptr;
12844         size_t cnt;
12845         if (!fp) {
12846             puts("Fail even to read");
12847             exit(1);
12848         }
12849         c = getc(fp); /* Read away the first # */
12850         if (c == EOF) {
12851             puts("Fail even to read");
12852             exit(1);
12853         }
12854         if (!(
12855                 18 <= FILE_cnt(fp) &&
12856                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12857         )) {
12858                 puts("Fail even to read");
12859                 exit (1);
12860         }
12861         ptr = (char*) FILE_ptr(fp);
12862         cnt = (size_t)FILE_cnt(fp);
12863
12864         FILE_ptr(fp) += 42;
12865
12866         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12867                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12868                 exit (1);
12869         }
12870         if (FILE_cnt(fp) <= 20) {
12871                 printf ("Fail (<20 chars to test)");
12872                 exit (1);
12873         }
12874         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12875                 puts("Fail compare");
12876                 exit (1);
12877         }
12878         if (cnt == FILE_cnt(fp)) {
12879                 puts("Pass_unchanged");
12880                 exit (0);
12881         }       
12882         if (FILE_cnt(fp) == (cnt - 42)) {
12883                 puts("Pass_changed");
12884                 exit (0);
12885         }
12886         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12887         return 1;
12888
12889 }
12890 EOP
12891         set try
12892         if eval $compile && $to try.c; then
12893                 case `$run ./try` in
12894                 Pass_changed)
12895                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12896                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12897                 Pass_unchanged)
12898                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12899                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12900                 Fail*)
12901                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12902                 *)
12903                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12904         esac
12905         else
12906                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12907         fi
12908         $rm -f try.c try
12909         ;;
12910 esac
12911
12912 : see if _base is also standard
12913 val="$undef"
12914 case "$d_stdstdio" in
12915 $define)
12916         $cat >try.c <<EOP
12917 #include <stdio.h>
12918 #define FILE_base(fp)   $stdio_base
12919 #define FILE_bufsiz(fp) $stdio_bufsiz
12920 int main() {
12921         FILE *fp = fopen("try.c", "r");
12922         char c = getc(fp);
12923         if (
12924                 19 <= FILE_bufsiz(fp) &&
12925                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12926         )
12927                 exit(0);
12928         exit(1);
12929 }
12930 EOP
12931         set try
12932         if eval $compile && $to try.c; then
12933                 if $run ./try; then
12934                         echo "And its _base field acts std."
12935                         val="$define"
12936                 else
12937                         echo "But its _base field isn't std."
12938                 fi
12939         else
12940                 echo "However, it seems to be lacking the _base field."
12941         fi
12942         $rm -f try.c try
12943         ;;
12944 esac
12945 set d_stdiobase
12946 eval $setvar
12947
12948 $cat >&4 <<EOM
12949 Checking how to access stdio streams by file descriptor number...
12950 EOM
12951 case "$stdio_stream_array" in
12952 '')     $cat >try.c <<EOCP
12953 #include <stdio.h>
12954 int main() {
12955   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12956     printf("yes\n");
12957 }
12958 EOCP
12959         for s in _iob __iob __sF
12960         do
12961                 set try -DSTDIO_STREAM_ARRAY=$s
12962                 if eval $compile; then
12963                         case "`$run ./try`" in
12964                         yes)    stdio_stream_array=$s; break ;;
12965                         esac
12966                 fi
12967         done
12968         $rm -f try.* try$exe_ext
12969 esac
12970 case "$stdio_stream_array" in
12971 '')     $cat >&4 <<EOM
12972 I can't figure out how to access stdio streams by file descriptor number.
12973 EOM
12974         d_stdio_stream_array="$undef"
12975         ;;
12976 *)      $cat >&4 <<EOM
12977 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12978 EOM
12979         d_stdio_stream_array="$define"
12980         ;;
12981 esac
12982
12983 : see if strcoll exists
12984 set strcoll d_strcoll
12985 eval $inlibc
12986
12987 : check for structure copying
12988 echo " "
12989 echo "Checking to see if your C compiler can copy structs..." >&4
12990 $cat >try.c <<'EOCP'
12991 int main()
12992 {
12993         struct blurfl {
12994                 int dyick;
12995         } foo, bar;
12996
12997         foo = bar;
12998 }
12999 EOCP
13000 if $cc -c try.c >/dev/null 2>&1 ; then
13001         val="$define"
13002         echo "Yup, it can."
13003 else
13004         val="$undef"
13005         echo "Nope, it can't."
13006 fi
13007 set d_strctcpy
13008 eval $setvar
13009 $rm -f try.*
13010
13011 : see if strerror and/or sys_errlist[] exist
13012 echo " "
13013 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13014     if set strerror val -f d_strerror; eval $csym; $val; then
13015                 echo 'strerror() found.' >&4
13016                 d_strerror="$define"
13017                 d_strerrm='strerror(e)'
13018                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13019                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13020                         d_syserrlst="$define"
13021                 else
13022                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13023                         d_syserrlst="$undef"
13024                 fi
13025     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13026                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13027                 echo 'strerror() found in string header.' >&4
13028                 d_strerror="$define"
13029                 d_strerrm='strerror(e)'
13030                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13031                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13032                                 d_syserrlst="$define"
13033                 else
13034                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13035                         d_syserrlst="$undef"
13036                 fi
13037     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13038                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13039                 d_strerror="$undef"
13040                 d_syserrlst="$define"
13041                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13042     else
13043                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13044                 d_strerror="$undef"
13045                 d_syserrlst="$undef"
13046                 d_strerrm='"unknown"'
13047     fi
13048 fi
13049
13050 : see if strftime exists
13051 set strftime d_strftime
13052 eval $inlibc
13053
13054 : see if strtod exists
13055 set strtod d_strtod
13056 eval $inlibc
13057
13058 : see if strtol exists
13059 set strtol d_strtol
13060 eval $inlibc
13061
13062 : see if strtold exists
13063 set strtold d_strtold
13064 eval $inlibc
13065
13066 : see if strtoll exists
13067 set strtoll d_strtoll
13068 eval $inlibc
13069
13070 case "$d_longlong-$d_strtoll" in
13071 "$define-$define")
13072         $cat <<EOM
13073 Checking whether your strtoll() works okay...
13074 EOM
13075         $cat >try.c <<'EOCP'
13076 #include <errno.h>
13077 #ifdef __hpux
13078 #define strtoll __strtoll
13079 #endif
13080 #ifdef __EMX__
13081 #define strtoll _strtoll
13082 #endif
13083 #include <stdio.h>
13084 extern long long int strtoll(char *s, char **, int); 
13085 static int bad = 0;
13086 int check(char *s, long long ell, int een) {
13087         long long gll;
13088         errno = 0;
13089         gll = strtoll(s, 0, 10);
13090         if (!((gll == ell) && (errno == een)))
13091                 bad++;
13092 }
13093 int main() {
13094         check(" 1",                                      1LL, 0);
13095         check(" 0",                                      0LL, 0);
13096         check("-1",                                     -1LL, 0);
13097         check("-9223372036854775808", -9223372036854775808LL, 0);
13098         check("-9223372036854775808", -9223372036854775808LL, 0);
13099         check(" 9223372036854775807",  9223372036854775807LL, 0);
13100         check("-9223372036854775808", -9223372036854775808LL, 0);
13101         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13102         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13103         if (!bad)
13104                 printf("ok\n");
13105 }
13106 EOCP
13107         set try
13108         if eval $compile; then
13109                 yyy=`$run ./try`
13110                 case "$yyy" in
13111                 ok) echo "Your strtoll() seems to be working okay." ;;
13112                 *) cat <<EOM >&4
13113 Your strtoll() doesn't seem to be working okay.
13114 EOM
13115                    d_strtoll="$undef"
13116                    ;;
13117                 esac
13118         else
13119                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13120                 d_strtoll="$undef"
13121         fi
13122         ;;
13123 esac
13124
13125 : see if strtoq exists
13126 set strtoq d_strtoq
13127 eval $inlibc
13128
13129 : see if strtoul exists
13130 set strtoul d_strtoul
13131 eval $inlibc
13132
13133 case "$d_strtoul" in
13134 "$define")
13135         $cat <<EOM
13136 Checking whether your strtoul() works okay...
13137 EOM
13138         $cat >try.c <<'EOCP'
13139 #include <errno.h>
13140 #include <stdio.h>
13141 extern unsigned long int strtoul(char *s, char **, int); 
13142 static int bad = 0;
13143 void check(char *s, unsigned long eul, int een) {
13144         unsigned long gul;
13145         errno = 0;
13146         gul = strtoul(s, 0, 10);
13147         if (!((gul == eul) && (errno == een)))
13148                 bad++;
13149 }
13150 int main() {
13151         check(" 1", 1L, 0);
13152         check(" 0", 0L, 0);
13153 EOCP
13154         case "$longsize" in
13155         8)
13156             $cat >>try.c <<'EOCP'
13157         check("18446744073709551615", 18446744073709551615UL, 0);
13158         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13159 #if 0 /* strtoul() for /^-/ strings is undefined. */
13160         check("-1", 18446744073709551615UL, 0);
13161         check("-18446744073709551614", 2, 0);
13162         check("-18446744073709551615", 1, 0);
13163         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13164         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13165 #endif
13166 EOCP
13167                 ;;
13168         4)
13169                     $cat >>try.c <<'EOCP'
13170         check("4294967295", 4294967295UL, 0);
13171         check("4294967296", 4294967295UL, ERANGE);
13172 #if 0 /* strtoul() for /^-/ strings is undefined. */
13173         check("-1", 4294967295UL, 0);
13174         check("-4294967294", 2, 0);
13175         check("-4294967295", 1, 0);
13176         check("-4294967296", 4294967295UL, ERANGE);
13177         check("-4294967297", 4294967295UL, ERANGE);
13178 #endif
13179 EOCP
13180                 ;;
13181         *)
13182 : Should we write these tests to be more portable by sprintf-ing
13183 : ~0 and then manipulating that char string as input for strtol?
13184                 ;;
13185         esac
13186         $cat >>try.c <<'EOCP'
13187         if (!bad)
13188                 printf("ok\n");
13189         return 0;
13190 }
13191 EOCP
13192         set try
13193         if eval $compile; then
13194                 case "`$run ./try`" in
13195                 ok) echo "Your strtoul() seems to be working okay." ;;
13196                 *) cat <<EOM >&4
13197 Your strtoul() doesn't seem to be working okay.
13198 EOM
13199                    d_strtoul="$undef"
13200                    ;;
13201                 esac
13202         fi
13203         ;;
13204 esac
13205
13206 : see if strtoull exists
13207 set strtoull d_strtoull
13208 eval $inlibc
13209
13210 case "$d_longlong-$d_strtoull" in
13211 "$define-$define")
13212         $cat <<EOM
13213 Checking whether your strtoull() works okay...
13214 EOM
13215         $cat >try.c <<'EOCP'
13216 #include <errno.h>
13217 #ifdef __hpux
13218 #define strtoull __strtoull
13219 #endif
13220 #include <stdio.h>
13221 extern unsigned long long int strtoull(char *s, char **, int); 
13222 static int bad = 0;
13223 int check(char *s, long long eull, int een) {
13224         long long gull;
13225         errno = 0;
13226         gull = strtoull(s, 0, 10);
13227         if (!((gull == eull) && (errno == een)))
13228                 bad++;
13229 }
13230 int main() {
13231         check(" 1",                                        1LL, 0);
13232         check(" 0",                                        0LL, 0);
13233         check("18446744073709551615",  18446744073709551615ULL, 0);
13234         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13235 #if 0 /* strtoull() for /^-/ strings is undefined. */
13236         check("-1",                    18446744073709551615ULL, 0);
13237         check("-18446744073709551614",                     2LL, 0);
13238         check("-18446744073709551615",                     1LL, 0);
13239         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13240         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13241 #endif
13242         if (!bad)
13243                 printf("ok\n");
13244 }
13245 EOCP
13246         set try
13247         if eval $compile; then
13248                 case "`$run ./try`" in
13249                 ok) echo "Your strtoull() seems to be working okay." ;;
13250                 *) cat <<EOM >&4
13251 Your strtoull() doesn't seem to be working okay.
13252 EOM
13253                    d_strtoull="$undef"
13254                    ;;
13255                 esac
13256         fi
13257         ;;
13258 esac
13259
13260 : see if strtouq exists
13261 set strtouq d_strtouq
13262 eval $inlibc
13263
13264 case "$d_strtouq" in
13265 "$define")
13266         $cat <<EOM
13267 Checking whether your strtouq() works okay...
13268 EOM
13269         $cat >try.c <<'EOCP'
13270 #include <errno.h>
13271 #include <stdio.h>
13272 extern unsigned long long int strtouq(char *s, char **, int); 
13273 static int bad = 0;
13274 void check(char *s, unsigned long long eull, int een) {
13275         unsigned long long gull;
13276         errno = 0;
13277         gull = strtouq(s, 0, 10);
13278         if (!((gull == eull) && (errno == een)))
13279                 bad++;
13280 }
13281 int main() {
13282         check(" 1",                                        1LL, 0);
13283         check(" 0",                                        0LL, 0);
13284         check("18446744073709551615",  18446744073709551615ULL, 0);
13285         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13286 #if 0 /* strtouq() for /^-/ strings is undefined. */
13287         check("-1",                    18446744073709551615ULL, 0);
13288         check("-18446744073709551614",                     2LL, 0);
13289         check("-18446744073709551615",                     1LL, 0);
13290         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13291         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13292 #endif
13293         if (!bad)
13294                 printf("ok\n");
13295         return 0;
13296 }
13297 EOCP
13298         set try
13299         if eval $compile; then
13300                 case "`$run ./try`" in
13301                 ok) echo "Your strtouq() seems to be working okay." ;;
13302                 *) cat <<EOM >&4
13303 Your strtouq() doesn't seem to be working okay.
13304 EOM
13305                    d_strtouq="$undef"
13306                    ;;
13307                 esac
13308         fi
13309         ;;
13310 esac
13311
13312 : see if strxfrm exists
13313 set strxfrm d_strxfrm
13314 eval $inlibc
13315
13316 : see if symlink exists
13317 set symlink d_symlink
13318 eval $inlibc
13319
13320 : see if syscall exists
13321 set syscall d_syscall
13322 eval $inlibc
13323
13324 : see if prototype for syscall is available
13325 echo " "
13326 set d_syscallproto syscall $i_unistd unistd.h
13327 eval $hasproto
13328
13329 : see if sysconf exists
13330 set sysconf d_sysconf
13331 eval $inlibc
13332
13333 : see if system exists
13334 set system d_system
13335 eval $inlibc
13336
13337 : see if tcgetpgrp exists
13338 set tcgetpgrp d_tcgetpgrp
13339 eval $inlibc
13340
13341 : see if tcsetpgrp exists
13342 set tcsetpgrp d_tcsetpgrp
13343 eval $inlibc
13344
13345 : see if prototype for telldir is available
13346 echo " "
13347 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13348 eval $hasproto
13349
13350 : see if this is a sys/times.h system
13351 set sys/times.h i_systimes
13352 eval $inhdr
13353
13354 : see if times exists
13355 echo " "
13356 if set times val -f d_times; eval $csym; $val; then
13357         echo 'times() found.' >&4
13358         d_times="$define"
13359         inc=''
13360         case "$i_systimes" in
13361         "$define") inc='sys/times.h';;
13362         esac
13363         rp="What is the type returned by times() on this system?"
13364         set clock_t clocktype long stdio.h sys/types.h $inc
13365         eval $typedef_ask
13366 else
13367         echo 'times() NOT found, hope that will do.' >&4
13368         d_times="$undef"
13369         clocktype='int'
13370 fi
13371
13372 : see if truncate exists
13373 set truncate d_truncate
13374 eval $inlibc
13375
13376 : see if tzname[] exists
13377 echo " "
13378 if set tzname val -a d_tzname; eval $csym; $val; then
13379         val="$define"
13380         echo 'tzname[] found.' >&4
13381 else
13382         val="$undef"
13383         echo 'tzname[] NOT found.' >&4
13384 fi
13385 set d_tzname
13386 eval $setvar
13387
13388 case "$osname" in
13389 next|rhapsody|darwin) multiarch="$define" ;;
13390 esac
13391 case "$multiarch" in
13392 ''|[nN]*) multiarch="$undef" ;;
13393 esac
13394
13395 : check for ordering of bytes in a long
13396 echo " "
13397 case "$usecrosscompile$multiarch" in
13398 *$define*)
13399         $cat <<EOM
13400 You seem to be either cross-compiling or doing a multiarchitecture build,
13401 skipping the byteorder check.
13402
13403 EOM
13404         byteorder='ffff'
13405         ;;
13406 *)
13407         case "$byteorder" in
13408         '')
13409                 $cat <<'EOM'
13410 In the following, larger digits indicate more significance.  A big-endian
13411 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13412 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13413 machines may have weird orders like 3412.  A Cray will report 87654321,
13414 an Alpha will report 12345678. If the test program works the default is
13415 probably right.
13416 I'm now running the test program...
13417 EOM
13418                 $cat >try.c <<'EOCP'
13419 #include <stdio.h>
13420 int main()
13421 {
13422         int i;
13423         union {
13424                 unsigned long l;
13425                 char c[sizeof(long)];
13426         } u;
13427
13428         if (sizeof(long) > 4)
13429                 u.l = (0x08070605L << 32) | 0x04030201L;
13430         else
13431                 u.l = 0x04030201L;
13432         for (i = 0; i < sizeof(long); i++)
13433                 printf("%c", u.c[i]+'0');
13434         printf("\n");
13435         exit(0);
13436 }
13437 EOCP
13438                 xxx_prompt=y
13439                 set try
13440                 if eval $compile && ./try > /dev/null; then
13441                         dflt=`$run ./try`
13442                         case "$dflt" in
13443                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13444                                 echo "(The test program ran ok.)"
13445                                 echo "byteorder=$dflt"
13446                                 xxx_prompt=n
13447                         ;;
13448                         ????|????????) echo "(The test program ran ok.)" ;;
13449                         *) echo "(The test program didn't run right for some reason.)" ;;
13450                         esac
13451                 else
13452                         dflt='4321'
13453                         cat <<'EOM'
13454 (I can't seem to compile the test program.  Guessing big-endian...)
13455 EOM
13456                 fi
13457                 case "$xxx_prompt" in
13458                 y)
13459                         rp="What is the order of bytes in a long?"
13460                         . ./myread
13461                         byteorder="$ans"
13462                         ;;
13463                 *)      byteorder=$dflt
13464                         ;;
13465                 esac
13466                 ;;
13467         esac
13468         $rm -f try.c try
13469         ;;
13470 esac
13471
13472
13473 $cat <<EOM
13474
13475 Checking to see whether you can access character data unalignedly...
13476 EOM
13477 $cat >try.c <<EOCP
13478 #include <stdio.h>
13479 #define U32 $u32type
13480 #define BYTEORDER 0x$byteorder
13481 #define U8 $u8type
13482 #include <signal.h>
13483 #ifdef SIGBUS
13484 $signal_t bletch(s) int s; { exit(4); }
13485 #endif
13486 int main() {
13487 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13488     U8 buf[] = "\0\0\0\1\0\0\0\0";
13489     U32 *up;
13490     int i;
13491
13492     if (sizeof(U32) != 4) {
13493         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13494         exit(1);
13495     }
13496
13497     fflush(stdout);
13498
13499 #ifdef SIGBUS
13500     signal(SIGBUS, bletch);
13501 #endif
13502
13503     for (i = 0; i < 4; i++) {
13504         up = (U32*)(buf + i);
13505         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13506                (*up == 1 << (8*(3-i)))  /* little-endian */
13507               )
13508            )
13509         {
13510             printf("read failed (%x)\n", *up);
13511             exit(2);
13512         }
13513     }
13514
13515     /* write test */
13516     for (i = 0; i < 4; i++) {
13517         up = (U32*)(buf + i);
13518         *up = 0xBeef;
13519         if (*up != 0xBeef) {
13520             printf("write failed (%x)\n", *up);
13521             exit(3);
13522         }
13523     }
13524
13525     exit(0);
13526 #else
13527     printf("1\n");
13528     exit(1);
13529 #endif
13530     return 0;
13531 }
13532 EOCP
13533 set try
13534 if eval $compile_ok; then
13535         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13536         $run ./try 2>&1 >/dev/null
13537         case "$?" in
13538         0)      cat >&4 <<EOM
13539 You can access character data pretty unalignedly.
13540 EOM
13541                 d_u32align="$undef"
13542                 ;;
13543         *)      cat >&4 <<EOM
13544 It seems that you must access character data in an aligned manner.
13545 EOM
13546                 d_u32align="$define"
13547                 ;;
13548         esac
13549 else
13550         rp='Can you access character data at unaligned addresses?'
13551         dflt='n'
13552         . ./myread
13553         case "$ans" in
13554         [yY]*)  d_u32align="$undef"  ;;
13555         *)      d_u32align="$define" ;;
13556         esac
13557 fi
13558 $rm -f core core.try.* try.core
13559
13560 : see if ualarm exists
13561 set ualarm d_ualarm
13562 eval $inlibc
13563
13564 : see if umask exists
13565 set umask d_umask
13566 eval $inlibc
13567
13568 : see if unordered exists
13569 set unordered d_unordered
13570 eval $inlibc
13571
13572 : see if usleep exists
13573 set usleep d_usleep
13574 eval $inlibc
13575
13576 : see if prototype for usleep is available
13577 echo " "
13578 set d_usleepproto usleep $i_unistd unistd.h
13579 eval $hasproto
13580
13581 : see if ustat exists
13582 set ustat d_ustat
13583 eval $inlibc
13584
13585 : backward compatibility for d_hvfork
13586 if test X$d_hvfork != X; then
13587         d_vfork="$d_hvfork"
13588         d_hvfork=''
13589 fi
13590 : see if there is a vfork
13591 val=''
13592 set vfork val
13593 eval $inlibc
13594
13595 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13596 : perl on Solaris 2.x, and probably elsewhere.
13597 case "$val" in
13598 $define)
13599         echo " "
13600         case "$usevfork" in
13601         false) dflt='n';;
13602         *) dflt='y';;
13603         esac
13604         cat <<'EOM'
13605  
13606 Perl can only use a vfork() that doesn't suffer from strict
13607 restrictions on calling functions or modifying global data in
13608 the child.  For example, glibc-2.1 contains such a vfork()
13609 that is unsuitable.  If your system provides a proper fork()
13610 call, chances are that you do NOT want perl to use vfork().
13611
13612 EOM
13613         rp="Do you still want to use vfork()?"
13614         . ./myread
13615         case "$ans" in
13616         y|Y) ;;
13617         *)
13618                 echo "Ok, we won't use vfork()."
13619                 val="$undef"
13620                 ;;
13621         esac
13622         ;;
13623 esac
13624 set d_vfork
13625 eval $setvar
13626 case "$d_vfork" in
13627 $define) usevfork='true';;
13628 *) usevfork='false';;
13629 esac
13630
13631 : see if closedir exists
13632 set closedir d_closedir
13633 eval $inlibc
13634
13635 case "$d_closedir" in
13636 "$define")
13637         echo " "
13638         echo "Checking whether closedir() returns a status..." >&4
13639         cat > try.c <<EOM
13640 #$i_dirent I_DIRENT             /**/
13641 #$i_sysdir I_SYS_DIR            /**/
13642 #$i_sysndir I_SYS_NDIR          /**/
13643 #$i_systypes I_SYS_TYPES        /**/
13644
13645 #if defined(I_SYS_TYPES)
13646 #include <sys/types.h>
13647 #endif
13648 #if defined(I_DIRENT)
13649 #include <dirent.h>
13650 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13651 #include <sys/dir.h>
13652 #endif
13653 #else
13654 #ifdef I_SYS_NDIR
13655 #include <sys/ndir.h>
13656 #else
13657 #ifdef I_SYS_DIR
13658 #ifdef hp9000s500
13659 #include <ndir.h>       /* may be wrong in the future */
13660 #else
13661 #include <sys/dir.h>
13662 #endif
13663 #endif
13664 #endif
13665 #endif 
13666 int main() { return closedir(opendir(".")); }
13667 EOM
13668         set try
13669         if eval $compile_ok; then
13670                 if $run ./try > /dev/null 2>&1 ; then
13671                         echo "Yes, it does."
13672                         val="$undef"
13673                 else
13674                         echo "No, it doesn't."
13675                         val="$define"
13676                 fi
13677         else
13678                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13679                 val="$define"
13680         fi
13681         ;;
13682 *)
13683         val="$undef";
13684         ;;
13685 esac
13686 set d_void_closedir
13687 eval $setvar
13688 $rm -f try try.*
13689 : see if there is a wait4
13690 set wait4 d_wait4
13691 eval $inlibc
13692
13693 : see if waitpid exists
13694 set waitpid d_waitpid
13695 eval $inlibc
13696
13697 : see if wcstombs exists
13698 set wcstombs d_wcstombs
13699 eval $inlibc
13700
13701 : see if wctomb exists
13702 set wctomb d_wctomb
13703 eval $inlibc
13704
13705 : see if writev exists
13706 set writev d_writev
13707 eval $inlibc
13708
13709 : preserve RCS keywords in files with variable substitution, grrr
13710 Date='$Date'
13711 Id='$Id'
13712 Log='$Log'
13713 RCSfile='$RCSfile'
13714 Revision='$Revision'
13715
13716 : check for alignment requirements
13717 echo " "
13718 case "$usecrosscompile$multiarch" in
13719 *$define*)
13720         $cat <<EOM
13721 You seem to be either cross-compiling or doing a multiarchitecture build,
13722 skipping the memory alignment check.
13723
13724 EOM
13725         case "$alignbytes" in
13726         '') alignbytes=8 ;;
13727         esac
13728         ;;
13729 *)
13730         case "$alignbytes" in
13731         '') echo "Checking alignment constraints..." >&4
13732                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13733                         $cat >try.c <<'EOCP'
13734 typedef long double NV;
13735 EOCP
13736                 else
13737                         $cat >try.c <<'EOCP'
13738 typedef double NV;
13739 EOCP
13740                 fi
13741                 $cat >>try.c <<'EOCP'
13742 #include <stdio.h>
13743 struct foobar {
13744         char foo;
13745         NV bar;
13746 } try_algn;
13747 int main()
13748 {
13749     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13750     return(0);
13751 }
13752 EOCP
13753                 set try
13754                 if eval $compile_ok; then
13755                         dflt=`$run ./try`
13756                 else
13757                         dflt='8'
13758                         echo "(I can't seem to compile the test program...)"
13759                 fi
13760                 ;;
13761         *) dflt="$alignbytes"
13762                 ;;
13763         esac
13764         rp="Doubles must be aligned on a how-many-byte boundary?"
13765         . ./myread
13766         alignbytes="$ans"
13767         $rm -f try.c try
13768         ;;
13769 esac
13770
13771
13772 : set the base revision
13773 baserev=5.0
13774
13775 : how do we catenate cpp tokens here?
13776 echo " "
13777 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13778 $cat >cpp_stuff.c <<'EOCP'
13779 #define RCAT(a,b)a/**/b
13780 #define ACAT(a,b)a ## b
13781 RCAT(Rei,ser)
13782 ACAT(Cir,cus)
13783 EOCP
13784 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13785 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13786         echo "Oh!  Smells like ANSI's been here." >&4
13787         echo "We can catify or stringify, separately or together!"
13788         cpp_stuff=42
13789 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13790         echo "Ah, yes!  The good old days!" >&4
13791         echo "However, in the good old days we don't know how to stringify and"
13792         echo "catify at the same time."
13793         cpp_stuff=1
13794 else
13795         $cat >&4 <<EOM
13796 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13797 to have to edit the values of CAT[2-5] in config.h...
13798 EOM
13799         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13800 fi
13801 $rm -f cpp_stuff.*
13802
13803 : see if this is a db.h system
13804 set db.h i_db
13805 eval $inhdr
13806
13807 case "$i_db" in
13808 $define)
13809         : Check db version.
13810         echo " "
13811         echo "Checking Berkeley DB version ..." >&4
13812         $cat >try.c <<EOCP
13813 #$d_const HASCONST
13814 #ifndef HASCONST
13815 #define const
13816 #endif
13817 #include <sys/types.h>
13818 #include <stdio.h>
13819 #include <db.h>
13820 int main(int argc, char *argv[])
13821 {
13822 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13823     int Major, Minor, Patch ;
13824     unsigned long Version ;
13825     (void)db_version(&Major, &Minor, &Patch) ;
13826     if (argc == 2) {
13827         printf("%d %d %d %d %d %d\n",
13828                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13829                Major, Minor, Patch);
13830         exit(0);
13831     }
13832     printf("You have Berkeley DB Version 2 or greater.\n");
13833
13834     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13835                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13836     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13837                 Major, Minor, Patch) ;
13838
13839     /* check that db.h & libdb are compatible */
13840     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13841         printf("db.h and libdb are incompatible.\n") ;
13842         exit(3);        
13843     }
13844
13845     printf("db.h and libdb are compatible.\n") ;
13846
13847     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13848                 + DB_VERSION_PATCH ;
13849
13850     /* needs to be >= 2.3.4 */
13851     if (Version < 2003004) {
13852     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13853         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13854         exit(2);        
13855     }
13856
13857     exit(0);
13858 #else
13859 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13860     if (argc == 2) {
13861         printf("1 0 0\n");
13862         exit(0);
13863     }
13864     printf("You have Berkeley DB Version 1.\n");
13865     exit(0);    /* DB version < 2: the coast is clear. */
13866 #else
13867     exit(1);    /* <db.h> not Berkeley DB? */
13868 #endif
13869 #endif
13870 }
13871 EOCP
13872         set try
13873         if eval $compile_ok && $run ./try; then
13874                 echo 'Looks OK.' >&4
13875                 set `$run ./try 1`
13876                 db_version_major=$1
13877                 db_version_minor=$2
13878                 db_version_patch=$3
13879         else
13880                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13881                 i_db=$undef
13882                 case " $libs " in
13883                 *"-ldb "*)
13884                         : Remove db from list of libraries to use
13885                         echo "Removing unusable -ldb from library list" >&4
13886                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13887                         shift
13888                         libs="$*"
13889                         echo "libs = $libs" >&4
13890                         ;;
13891                 esac
13892         fi
13893         $rm -f try.*
13894         ;;
13895 esac
13896
13897 case "$i_db" in
13898 define)
13899         : Check the return type needed for hash 
13900         echo " "
13901         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13902         $cat >try.c <<EOCP
13903 #$d_const HASCONST
13904 #ifndef HASCONST
13905 #define const
13906 #endif
13907 #include <sys/types.h>
13908 #include <db.h>
13909
13910 #ifndef DB_VERSION_MAJOR
13911 u_int32_t hash_cb (ptr, size)
13912 const void *ptr;
13913 size_t size;
13914 {
13915 }
13916 HASHINFO info;
13917 int main()
13918 {
13919         info.hash = hash_cb;
13920 }
13921 #endif
13922 EOCP
13923         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13924                 if $contains warning try.out >>/dev/null 2>&1 ; then
13925                         db_hashtype='int'
13926                 else
13927                         db_hashtype='u_int32_t'
13928                 fi
13929         else
13930                 : XXX Maybe we should just give up here.
13931                 db_hashtype=u_int32_t
13932                 $cat try.out >&4
13933                 echo "Help:  I can't seem to compile the db test program." >&4
13934                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13935         fi
13936         $rm -f try.*
13937         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13938         ;;
13939 *)      db_hashtype=u_int32_t
13940         ;;
13941 esac
13942 case "$i_db" in
13943 define)
13944         : Check the return type needed for prefix 
13945         echo " "
13946         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13947         cat >try.c <<EOCP
13948 #$d_const HASCONST
13949 #ifndef HASCONST
13950 #define const
13951 #endif
13952 #include <sys/types.h>
13953 #include <db.h>
13954
13955 #ifndef DB_VERSION_MAJOR
13956 size_t prefix_cb (key1, key2)
13957 const DBT *key1;
13958 const DBT *key2;
13959 {
13960 }
13961 BTREEINFO info;
13962 int main()
13963 {
13964         info.prefix = prefix_cb;
13965 }
13966 #endif
13967 EOCP
13968         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13969                 if $contains warning try.out >>/dev/null 2>&1 ; then
13970                         db_prefixtype='int'
13971                 else
13972                         db_prefixtype='size_t'
13973                 fi
13974         else
13975                 db_prefixtype='size_t'
13976                 : XXX Maybe we should just give up here.
13977                 $cat try.out >&4
13978                 echo "Help:  I can't seem to compile the db test program." >&4
13979                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13980         fi
13981         $rm -f try.*
13982         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13983         ;;
13984 *)      db_prefixtype='size_t'
13985         ;;
13986 esac
13987
13988
13989 : How can we generate normalized random numbers ?
13990 echo " "
13991 echo "Looking for a random number function..." >&4
13992 case "$randfunc" in
13993 '')
13994         if set drand48 val -f; eval $csym; $val; then
13995                 dflt="drand48"
13996                 echo "Good, found drand48()." >&4
13997         elif set random val -f; eval $csym; $val; then
13998                 dflt="random"
13999                 echo "OK, found random()." >&4
14000         else
14001                 dflt="rand"
14002                 echo "Yick, looks like I have to use rand()." >&4
14003         fi
14004         echo " "
14005         ;;
14006 *)
14007         dflt="$randfunc"
14008         ;;
14009 esac
14010 cont=true
14011
14012 case "$ccflags" in
14013 *-Dmy_rand=*|*-Dmy_srand=*)
14014         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14015         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14016         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14017         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14018         ;;
14019 esac
14020
14021 while $test "$cont"; do
14022         rp="Use which function to generate random numbers?"
14023         . ./myread
14024         if $test "$ans" = "$dflt"; then
14025                 : null
14026         else
14027                 randbits=''
14028         fi
14029         randfunc="$ans"
14030         if set $ans val -f; eval $csym; $val; then
14031                 cont=''
14032         else
14033                 dflt=y
14034                 rp="I cannot find function $ans. Use that name anyway?"
14035                 . ./myread
14036                 dflt=rand
14037                 case "$ans" in
14038                         [yY]*) cont='';;
14039                 esac
14040         fi
14041         case "$cont" in
14042         '')
14043                 case "$randfunc" in
14044                 drand48)
14045                         drand01="drand48()"
14046                         seedfunc="srand48"
14047                         randbits=48
14048                         randseedtype=long
14049                         ;;
14050                 rand|random)
14051                         case "$randbits" in
14052                         '')
14053 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14054                                 $cat >try.c <<EOCP
14055 #$i_unistd I_UNISTD
14056 #$i_stdlib I_STDLIB
14057 #include <stdio.h>
14058 #ifdef I_UNISTD
14059 #  include <unistd.h>
14060 #endif
14061 #ifdef I_STDLIB
14062 #  include <stdlib.h>
14063 #endif
14064 int main()
14065 {
14066         register int i;
14067         register unsigned long tmp;
14068         register unsigned long max = 0L;
14069
14070         for (i = 1000; i; i--) {
14071                 tmp = (unsigned long) $randfunc();
14072                 if (tmp > max) max = tmp;
14073         }
14074         for (i = 0; max; i++)
14075                 max /= 2;
14076         printf("%d\n",i);
14077 }
14078 EOCP
14079                                 set try
14080                                 if eval $compile_ok; then
14081                                         dflt=`try`
14082                                 else
14083                                         dflt='?'
14084                                         echo "(I can't seem to compile the test program...)"
14085                                 fi
14086                                 ;;
14087                         *)
14088                                 dflt="$randbits"
14089                                 ;;
14090                         esac
14091                         rp="How many bits does your $randfunc() function produce?"
14092                         . ./myread
14093                         randbits="$ans"
14094                         $rm -f try.c try
14095                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14096                         seedfunc="s$randfunc"
14097                         randseedtype=unsigned
14098                         ;;
14099                 *)
14100                         dflt="31"
14101                         rp="How many bits does your $randfunc() function produce?"
14102                         . ./myread
14103                         randbits="$ans"
14104                         seedfunc="s$randfunc"
14105                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14106                         if set $seedfunc val -f; eval $csym; $val; then
14107                                 echo "(Using $seedfunc() to seed random generator)"
14108                         else
14109                                 echo "(Warning: no $seedfunc() to seed random generator)"
14110                                 seedfunc=rand
14111                         fi
14112                         randseedtype=unsigned
14113                         ;;
14114                 esac
14115                 ;;
14116         esac
14117 done
14118
14119 echo " "
14120 echo "Determining whether or not we are on an EBCDIC system..." >&4
14121 $cat >try.c <<'EOM'
14122 int main()
14123 {
14124   if ('M'==0xd4) return 0;
14125   return 1;
14126 }
14127 EOM
14128
14129 val=$undef
14130 set try
14131 if eval $compile_ok; then
14132         if $run ./try; then
14133                 echo "You seem to speak EBCDIC." >&4
14134                 val="$define"
14135         else
14136                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14137         fi
14138 else
14139         echo "I'm unable to compile the test program." >&4
14140         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14141 fi
14142 $rm -f try try.*
14143 set ebcdic
14144 eval $setvar
14145
14146 echo " "
14147 $cat >&4 <<EOM
14148 Checking how to flush all pending stdio output...
14149 EOM
14150 # I only know how to find the first 32 possibly open files on SunOS.
14151 # See also hints/sunos_4_1.sh and util.c  --AD
14152 case "$osname" in
14153 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14154 esac
14155 $cat >>try.c <<EOCP
14156 #include <stdio.h>
14157 #$i_unistd I_UNISTD
14158 #ifdef I_UNISTD
14159 # include <unistd.h>
14160 #endif
14161 #$d_sysconf HAS_SYSCONF
14162 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14163 #ifdef HAS_STDIO_STREAM_ARRAY
14164 # define STDIO_STREAM_ARRAY $stdio_stream_array
14165 #endif
14166 int main() {
14167   FILE* p;
14168   unlink("try.out");
14169   p = fopen("try.out", "w");
14170 #ifdef TRY_FPUTC
14171   fputc('x', p);
14172 #else
14173 # ifdef TRY_FPRINTF
14174   fprintf(p, "x");
14175 # endif
14176 #endif
14177 #ifdef TRY_FFLUSH_NULL
14178   fflush(NULL);
14179 #endif
14180 #ifdef TRY_FFLUSH_ALL
14181   {
14182     long open_max = -1;
14183 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14184     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14185 # else
14186 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14187     open_max = sysconf(_SC_OPEN_MAX);
14188 #  else
14189 #   ifdef FOPEN_MAX
14190     open_max = FOPEN_MAX;
14191 #   else
14192 #    ifdef OPEN_MAX
14193     open_max = OPEN_MAX;
14194 #    else
14195 #     ifdef _NFILE
14196     open_max = _NFILE;
14197 #     endif
14198 #    endif
14199 #   endif
14200 #  endif
14201 # endif 
14202 # ifdef HAS_STDIO_STREAM_ARRAY
14203     if (open_max > 0) {
14204       long i;
14205       for (i = 0; i < open_max; i++)
14206             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14207                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14208                 STDIO_STREAM_ARRAY[i]._flag)
14209                 fflush(&STDIO_STREAM_ARRAY[i]);
14210     }   
14211   }
14212 # endif
14213 #endif
14214   _exit(42);
14215 }
14216 EOCP
14217 : first we have to find out how _not_ to flush
14218 $to try.c
14219 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14220     output=''
14221     set try -DTRY_FPUTC
14222     if eval $compile; then
14223             $run ./try 2>/dev/null
14224             code="$?"
14225             $from try.out
14226             if $test ! -s try.out -a "X$code" = X42; then
14227                 output=-DTRY_FPUTC
14228             fi
14229     fi
14230     case "$output" in
14231     '')
14232             set try -DTRY_FPRINTF
14233             if eval $compile; then
14234                     $run ./try 2>/dev/null
14235                     code="$?"
14236                     $from try.out
14237                     if $test ! -s try.out -a "X$code" = X42; then
14238                         output=-DTRY_FPRINTF
14239                     fi
14240             fi
14241         ;;
14242     esac
14243 fi
14244 : check for fflush NULL behaviour
14245 case "$fflushNULL" in
14246 '')     set try -DTRY_FFLUSH_NULL $output
14247         if eval $compile; then
14248                 $run ./try 2>/dev/null
14249                 code="$?"
14250                 $from try.out
14251                 if $test -s try.out -a "X$code" = X42; then
14252                         fflushNULL="`$cat try.out`"
14253                 else
14254                         if $test "X$code" != X42; then
14255                                 $cat >&4 <<EOM
14256 (If this test failed, don't worry, we'll try another method shortly.)
14257 EOM
14258                         fi
14259                 fi
14260         fi
14261         $rm -f core try.core core.try.*
14262         case "$fflushNULL" in
14263         x)      $cat >&4 <<EOM
14264 Your fflush(NULL) works okay for output streams.
14265 Let's see if it clobbers input pipes...
14266 EOM
14267 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14268 # bug that improperly flushes the input end of pipes.  So we avoid the
14269 # autoflush on fork/system/exec support for now. :-(
14270 $cat >tryp.c <<EOCP
14271 #include <stdio.h>
14272 int
14273 main(int argc, char **argv)
14274 {
14275     char buf[1024];
14276     int i;
14277     char *bp = buf;
14278     while (1) {
14279         while ((i = getc(stdin)) != -1
14280                && (*bp++ = i) != '\n'
14281                && bp < &buf[1024])
14282         /* DO NOTHING */ ;
14283         *bp = '\0';
14284         fprintf(stdout, "%s", buf);
14285         fflush(NULL);
14286         if (i == -1)
14287             return 0;
14288         bp = buf;
14289     }
14290 }
14291 EOCP
14292                 fflushNULL="$define"
14293                 set tryp
14294                 if eval $compile; then
14295                     $rm -f tryp.out
14296                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14297                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14298                        $cat >&4 <<EOM
14299 fflush(NULL) seems to behave okay with input streams.
14300 EOM
14301                         fflushNULL="$define"
14302                     else
14303                         $cat >&4 <<EOM
14304 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14305 EOM
14306                         fflushNULL="$undef"
14307                     fi
14308                 fi
14309                 $rm -f core tryp.c tryp.core core.tryp.*
14310                 ;;
14311         '')     $cat >&4 <<EOM
14312 Your fflush(NULL) isn't working (contrary to ANSI C).
14313 EOM
14314                 fflushNULL="$undef"
14315                 ;;
14316         *)      $cat >&4 <<EOM
14317 Cannot figure out whether your fflush(NULL) works or not.
14318 I'm assuming it doesn't (contrary to ANSI C).
14319 EOM
14320                 fflushNULL="$undef"
14321                 ;;
14322         esac
14323         ;;
14324 $define|true|[yY]*)
14325         fflushNULL="$define"
14326         ;;
14327 *)
14328         fflushNULL="$undef"
14329         ;;
14330 esac
14331 : check explicit looping only if NULL did not work, and if the pipe
14332 : bug does not show up on an explicit flush too
14333 case "$fflushNULL" in
14334 "$undef")
14335         $cat >tryp.c <<EOCP
14336 #include <stdio.h>
14337 int
14338 main(int argc, char **argv)
14339 {
14340     char buf[1024];
14341     int i;
14342     char *bp = buf;
14343     while (1) {
14344         while ((i = getc(stdin)) != -1
14345                && (*bp++ = i) != '\n'
14346                && bp < &buf[1024])
14347         /* DO NOTHING */ ;
14348         *bp = '\0';
14349         fprintf(stdout, "%s", buf);
14350         fflush(stdin);
14351         if (i == -1)
14352             return 0;
14353         bp = buf;
14354     }
14355 }
14356 EOCP
14357         set tryp
14358         if eval $compile; then
14359             $rm -f tryp.out
14360             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14361             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14362                $cat >&4 <<EOM
14363 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14364 EOM
14365                 : now check for fflushall behaviour
14366                 case "$fflushall" in
14367                 '')     set try -DTRY_FFLUSH_ALL $output
14368                         if eval $compile; then
14369                                 $cat >&4 <<EOM
14370 (Now testing the other method--but note that this also may fail.)
14371 EOM
14372                                 $run ./try 2>/dev/null
14373                                 code=$?
14374                                 $from try.out
14375                                 if $test -s try.out -a "X$code" = X42; then
14376                                         fflushall="`$cat try.out`"
14377                                 fi
14378                         fi
14379                         $rm -f core try.core core.try.*
14380                         case "$fflushall" in
14381                         x)      $cat >&4 <<EOM
14382 Whew. Flushing explicitly all the stdio streams works.
14383 EOM
14384                                 fflushall="$define"
14385                                 ;;
14386                         '')     $cat >&4 <<EOM
14387 Sigh. Flushing explicitly all the stdio streams doesn't work.
14388 EOM
14389                                 fflushall="$undef"
14390                                 ;;
14391                         *)      $cat >&4 <<EOM
14392 Cannot figure out whether flushing stdio streams explicitly works or not.
14393 I'm assuming it doesn't.
14394 EOM
14395                                 fflushall="$undef"
14396                                 ;;
14397                         esac
14398                         ;;
14399                 "$define"|true|[yY]*)
14400                         fflushall="$define"
14401                         ;;
14402                 *)
14403                         fflushall="$undef"
14404                         ;;
14405                 esac
14406             else
14407                 $cat >&4 <<EOM
14408 All is futile.  Even fflush(stdin) clobbers input pipes!
14409 EOM
14410                 fflushall="$undef"
14411             fi
14412         else
14413             fflushall="$undef"
14414         fi
14415         $rm -f core tryp.c tryp.core core.tryp.*
14416         ;;
14417 *)      fflushall="$undef"
14418         ;;
14419 esac
14420
14421 case "$fflushNULL$fflushall" in
14422 undefundef)
14423         $cat <<EOM
14424 OK, I give up.  I cannot figure out how to flush pending stdio output.
14425 We won't be flushing handles at all before fork/exec/popen.
14426 EOM
14427         ;;
14428 esac
14429 $rm -f try.* try$exe_ext
14430
14431 : Store the full pathname to the ar program for use in the C program
14432 : Respect a hint or command line value for full_ar.
14433 case "$full_ar" in
14434 '') full_ar=$ar ;;
14435 esac
14436
14437 : Store the full pathname to the sed program for use in the C program
14438 full_sed=$sed
14439
14440 : see what type gids are declared as in the kernel
14441 echo " "
14442 echo "Looking for the type for group ids returned by getgid()."
14443 set gid_t gidtype xxx stdio.h sys/types.h
14444 eval $typedef
14445 case "$gidtype" in
14446 xxx)
14447         xxx=`./findhdr sys/user.h`
14448         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14449         case $1 in
14450         unsigned) dflt="$1 $2" ;;
14451         *) dflt="$1" ;;
14452         esac
14453         ;;
14454 *) dflt="$gidtype";;
14455 esac
14456 case "$gidtype" in
14457 gid_t) echo "gid_t found." ;;
14458 *)      rp="What is the type for group ids returned by getgid()?"
14459         . ./myread
14460         gidtype="$ans"
14461         ;;
14462 esac
14463
14464 echo " "
14465 case "$gidtype" in
14466 *_t) zzz="$gidtype"     ;;
14467 *)   zzz="gid"          ;;
14468 esac
14469 echo "Checking the size of $zzz..." >&4 
14470 cat > try.c <<EOCP
14471 #include <sys/types.h>
14472 #include <stdio.h>
14473 int main() {
14474     printf("%d\n", (int)sizeof($gidtype));
14475     exit(0);
14476 }
14477 EOCP
14478 set try
14479 if eval $compile_ok; then
14480         yyy=`$run ./try`
14481         case "$yyy" in
14482         '')     gidsize=4
14483                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14484                 ;;
14485         *)      gidsize=$yyy
14486                 echo "Your $zzz is $gidsize bytes long."
14487                 ;;
14488         esac
14489 else
14490         gidsize=4
14491         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14492 fi
14493
14494
14495 echo " "
14496 case "$gidtype" in
14497 *_t) zzz="$gidtype"     ;;
14498 *)   zzz="gid"          ;;
14499 esac
14500 echo "Checking the sign of $zzz..." >&4 
14501 cat > try.c <<EOCP
14502 #include <sys/types.h>
14503 #include <stdio.h>
14504 int main() {
14505         $gidtype foo = -1;
14506         if (foo < 0)
14507                 printf("-1\n");
14508         else
14509                 printf("1\n");
14510 }
14511 EOCP
14512 set try
14513 if eval $compile; then
14514         yyy=`$run ./try`
14515         case "$yyy" in
14516         '')     gidsign=1
14517                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14518                 ;;
14519         *)      gidsign=$yyy
14520                 case "$gidsign" in
14521                  1) echo "Your $zzz is unsigned." ;;
14522                 -1) echo "Your $zzz is signed."   ;;
14523                 esac
14524                 ;;
14525         esac
14526 else
14527         gidsign=1
14528         echo "(I can't compile the test program--guessing unsigned.)" >&4
14529 fi
14530
14531
14532 echo " "
14533
14534 if $test X"$quadtype" != X; then
14535
14536 echo "Checking how to print 64-bit integers..." >&4
14537
14538 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14539         $cat >try.c <<'EOCP'
14540 #include <sys/types.h>
14541 #include <stdio.h>
14542 int main() {
14543   int q = 12345678901;
14544   printf("%ld\n", q);
14545 }
14546 EOCP
14547         set try
14548         if eval $compile; then
14549                 yyy=`$run ./try`
14550                 case "$yyy" in
14551                 12345678901)
14552                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14553                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14554                         echo "We will use %d."
14555                         ;;
14556                 esac
14557         fi
14558 fi
14559
14560 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14561         $cat >try.c <<'EOCP'
14562 #include <sys/types.h>
14563 #include <stdio.h>
14564 int main() {
14565   long q = 12345678901;
14566   printf("%ld\n", q);
14567 }
14568 EOCP
14569         set try
14570         if eval $compile; then
14571                 yyy=`$run ./try`
14572                 case "$yyy" in
14573                 12345678901)
14574                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14575                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14576                         echo "We will use %ld."
14577                         ;;
14578                 esac
14579         fi
14580 fi
14581
14582 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14583         $cat >try.c <<'EOCP'
14584 #include <sys/types.h>
14585 #include <inttypes.h>
14586 #include <stdio.h>
14587 int main() {
14588   int64_t q = 12345678901;
14589   printf("%" PRId64 "\n", q);
14590 }
14591 EOCP
14592         set try
14593         if eval $compile; then
14594                 yyy=`$run ./try`
14595                 case "$yyy" in
14596                 12345678901)
14597                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14598                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14599                         echo "We will use the C9X style."
14600                         ;;
14601                 esac
14602         fi
14603 fi
14604
14605 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14606         $cat >try.c <<EOCP
14607 #include <sys/types.h>
14608 #include <stdio.h>
14609 int main() {
14610   $quadtype q = 12345678901;
14611   printf("%Ld\n", q);
14612 }
14613 EOCP
14614         set try
14615         if eval $compile; then
14616                 yyy=`$run ./try`
14617                 case "$yyy" in
14618                 12345678901)
14619                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14620                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14621                         echo "We will use %Ld."
14622                         ;;
14623                 esac
14624         fi
14625 fi
14626
14627 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14628         $cat >try.c <<'EOCP'
14629 #include <sys/types.h>
14630 #include <stdio.h>
14631 int main() {
14632   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14633   printf("%lld\n", q);
14634 }
14635 EOCP
14636         set try
14637         if eval $compile; then
14638                 yyy=`$run ./try`
14639                 case "$yyy" in
14640                 12345678901)
14641                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14642                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14643                         echo "We will use the %lld style."
14644                         ;;
14645                 esac
14646         fi
14647 fi
14648
14649 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14650         $cat >try.c <<EOCP
14651 #include <sys/types.h>
14652 #include <stdio.h>
14653 int main() {
14654   $quadtype q = 12345678901;
14655   printf("%qd\n", q);
14656 }
14657 EOCP
14658         set try
14659         if eval $compile; then
14660                 yyy=`$run ./try`
14661                 case "$yyy" in
14662                 12345678901)
14663                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14664                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14665                         echo "We will use %qd."
14666                         ;;
14667                 esac
14668         fi
14669 fi
14670
14671 if $test X"$sPRId64" = X; then
14672         echo "Cannot figure out how to print 64-bit integers." >&4
14673 fi
14674
14675 $rm -f try try.*
14676
14677 fi
14678
14679 case "$sPRId64" in
14680 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14681         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14682         ;;
14683 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14684         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14685         ;;
14686 esac
14687
14688
14689 echo " "
14690 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14691
14692 if $test X"$ivsize" = X8; then
14693         ivdformat="$sPRId64"
14694         uvuformat="$sPRIu64"
14695         uvoformat="$sPRIo64"
14696         uvxformat="$sPRIx64"
14697         uvXUformat="$sPRIXU64"
14698 else
14699         if $test X"$ivsize" = X"$longsize"; then
14700                 ivdformat='"ld"'
14701                 uvuformat='"lu"'
14702                 uvoformat='"lo"'
14703                 uvxformat='"lx"'
14704                 uvXUformat='"lX"'
14705         else
14706                 if $test X"$ivsize" = X"$intsize"; then
14707                         ivdformat='"d"'
14708                         uvuformat='"u"'
14709                         uvoformat='"o"'
14710                         uvxformat='"x"'
14711                         uvXUformat='"X"'
14712                 else
14713                         : far out
14714                         if $test X"$ivsize" = X"$shortsize"; then
14715                                 ivdformat='"hd"'
14716                                 uvuformat='"hu"'
14717                                 uvoformat='"ho"'
14718                                 uvxformat='"hx"'
14719                                 uvXUformat='"hX"'
14720                         fi
14721                 fi
14722         fi
14723 fi
14724
14725 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14726         nveformat="$sPRIeldbl"
14727         nvfformat="$sPRIfldbl"
14728         nvgformat="$sPRIgldbl"
14729         nvEUformat="$sPRIEUldbl"
14730         nvFUformat="$sPRIFUldbl"
14731         nvGUformat="$sPRIGUldbl"
14732 else
14733         nveformat='"e"'
14734         nvfformat='"f"'
14735         nvgformat='"g"'
14736         nvEUformat='"E"'
14737         nvFUformat='"F"'
14738         nvGUformat='"G"'
14739 fi
14740
14741 case "$ivdformat" in
14742 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14743     exit 1
14744     ;;
14745 esac
14746
14747
14748 echo " "
14749 $echo "Checking the format string to be used for gids..." >&4
14750
14751 case "$gidsign" in
14752 -1)     if $test X"$gidsize" = X"$ivsize"; then
14753                 gidformat="$ivdformat"
14754         else
14755                 if $test X"$gidsize" = X"$longsize"; then
14756                         gidformat='"ld"'
14757                 else
14758                         if $test X"$gidsize" = X"$intsize"; then
14759                                 gidformat='"d"'
14760                         else
14761                                 if $test X"$gidsize" = X"$shortsize"; then
14762                                         gidformat='"hd"'
14763                                 fi
14764                         fi
14765                 fi
14766         fi
14767         ;;
14768 *)      if $test X"$gidsize" = X"$uvsize"; then
14769                 gidformat="$uvuformat"
14770         else
14771                 if $test X"$gidsize" = X"$longsize"; then
14772                         gidformat='"lu"'
14773                 else
14774                         if $test X"$gidsize" = X"$intsize"; then
14775                                 gidformat='"u"'
14776                         else
14777                                 if $test X"$gidsize" = X"$shortsize"; then
14778                                         gidformat='"hu"'
14779                                 fi
14780                         fi
14781                 fi
14782         fi
14783         ;;
14784 esac
14785
14786 : see if getgroups exists
14787 set getgroups d_getgrps
14788 eval $inlibc
14789
14790 : see if setgroups exists
14791 set setgroups d_setgrps
14792 eval $inlibc
14793
14794
14795 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14796 echo " "
14797 case "$d_getgrps$d_setgrps" in
14798 *define*)
14799         case "$groupstype" in
14800         '') dflt="$gidtype" ;;
14801         *)  dflt="$groupstype" ;;
14802         esac
14803         $cat <<EOM
14804 What type of pointer is the second argument to getgroups() and setgroups()?
14805 Usually this is the same as group ids, $gidtype, but not always.
14806
14807 EOM
14808         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14809         . ./myread
14810         groupstype="$ans"
14811         ;;
14812 *)  groupstype="$gidtype";;
14813 esac
14814
14815 echo " "
14816 echo "Checking if your $make program sets \$(MAKE)..." >&4
14817 case "$make_set_make" in
14818 '')
14819         $sed 's/^X //' > testmake.mak << 'EOF'
14820 Xall:
14821 X       @echo 'maketemp="$(MAKE)"'
14822 EOF
14823         case "`$make -f testmake.mak 2>/dev/null`" in
14824         *maketemp=*) make_set_make='#' ;;
14825         *)      make_set_make="MAKE=$make" ;;
14826         esac
14827         $rm -f testmake.mak
14828         ;;
14829 esac
14830 case "$make_set_make" in
14831 '#') echo "Yup, it does.";;
14832 *) echo "Nope, it doesn't.";;
14833 esac
14834
14835 : see what type is used for mode_t
14836 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14837 set mode_t modetype int stdio.h sys/types.h
14838 eval $typedef_ask
14839
14840 : see if stdarg is available
14841 echo " "
14842 if $test `./findhdr stdarg.h`; then
14843         echo "<stdarg.h> found." >&4
14844         valstd="$define"
14845 else
14846         echo "<stdarg.h> NOT found." >&4
14847         valstd="$undef"
14848 fi
14849
14850 : see if varags is available
14851 echo " "
14852 if $test `./findhdr varargs.h`; then
14853         echo "<varargs.h> found." >&4
14854 else
14855         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14856 fi
14857
14858 : set up the varargs testing programs
14859 $cat > varargs.c <<EOP
14860 #ifdef I_STDARG
14861 #include <stdarg.h>
14862 #endif
14863 #ifdef I_VARARGS
14864 #include <varargs.h>
14865 #endif
14866
14867 #ifdef I_STDARG
14868 int f(char *p, ...)
14869 #else
14870 int f(va_alist)
14871 va_dcl
14872 #endif
14873 {
14874         va_list ap;
14875 #ifndef I_STDARG
14876         char *p;
14877 #endif
14878 #ifdef I_STDARG
14879         va_start(ap,p);
14880 #else
14881         va_start(ap);
14882         p = va_arg(ap, char *);
14883 #endif
14884         va_end(ap);
14885 }
14886 EOP
14887 $cat > varargs <<EOP
14888 $startsh
14889 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14890         echo "true"
14891 else
14892         echo "false"
14893 fi
14894 $rm -f varargs$_o
14895 EOP
14896 chmod +x varargs
14897
14898 : now check which varargs header should be included
14899 echo " "
14900 i_varhdr=''
14901 case "$valstd" in
14902 "$define")
14903         if `./varargs I_STDARG`; then
14904                 val='stdarg.h'
14905         elif `./varargs I_VARARGS`; then
14906                 val='varargs.h'
14907         fi
14908         ;;
14909 *)
14910         if `./varargs I_VARARGS`; then
14911                 val='varargs.h'
14912         fi
14913         ;;
14914 esac
14915 case "$val" in
14916 '')
14917 echo "I could not find the definition for va_dcl... You have problems..." >&4
14918         val="$undef"; set i_stdarg; eval $setvar
14919         val="$undef"; set i_varargs; eval $setvar
14920         ;;
14921 *) 
14922         set i_varhdr
14923         eval $setvar
14924         case "$i_varhdr" in
14925         stdarg.h)
14926                 val="$define"; set i_stdarg; eval $setvar
14927                 val="$undef"; set i_varargs; eval $setvar
14928                 ;;
14929         varargs.h)
14930                 val="$undef"; set i_stdarg; eval $setvar
14931                 val="$define"; set i_varargs; eval $setvar
14932                 ;;
14933         esac
14934         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14935 esac
14936 $rm -f varargs*
14937
14938 : see if we need va_copy
14939 echo " "
14940 case "$i_stdarg" in
14941 "$define")
14942         $cat >try.c <<EOCP
14943 #include <stdarg.h>
14944 #include <stdio.h>
14945 #$i_stdlib I_STDLIB
14946 #ifdef I_STDLIB
14947 #include <stdlib.h>
14948 #endif
14949 #include <signal.h>
14950
14951 int
14952 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14953 {
14954   return vfprintf(f, fmt, *valp);
14955 }
14956  
14957 int    
14958 myvfprintf(FILE *f, const  char *fmt, va_list val)
14959 {
14960   return ivfprintf(f, fmt, &val);
14961 }
14962       
14963 int
14964 myprintf(char *fmt, ...) 
14965 {
14966   va_list val;
14967   va_start(val, fmt);
14968   return myvfprintf(stdout, fmt, val); 
14969 }         
14970
14971 int
14972 main(int ac, char **av)
14973 {
14974   signal(SIGSEGV, exit);
14975
14976   myprintf("%s%cs all right, then\n", "that", '\'');                            
14977   exit(0);      
14978 }
14979 EOCP
14980         set try
14981         if eval $compile && $run ./try 2>&1 >/dev/null; then
14982                 case "`$run ./try`" in
14983                 "that's all right, then")
14984                         okay=yes
14985                         ;;
14986                 esac
14987         fi
14988         case "$okay" in
14989         yes)    echo "It seems that you don't need va_copy()." >&4
14990                 need_va_copy="$undef"
14991                 ;;
14992         *)      echo "It seems that va_copy() or similar will be needed." >&4
14993                 need_va_copy="$define"
14994                 ;;
14995         esac
14996         $rm -f try.* core core.* *.core *.core.*
14997         ;;
14998 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14999         ;;
15000 esac
15001
15002 : define a fucntion to check prototypes
15003 $cat > protochk <<EOSH
15004 $startsh
15005 cc="$cc"
15006 optimize="$optimize"
15007 ccflags="$ccflags"
15008 prototype="$prototype"
15009 define="$define"
15010 rm=$rm
15011 EOSH
15012
15013 $cat >> protochk <<'EOSH'
15014
15015 $rm -f try.c
15016 foo="$1"
15017 shift
15018 while test $# -ge 2; do
15019         case "$1" in
15020                 $define) echo "#include <$2>" >> try.c ;;
15021                 literal) echo "$2" >> try.c ;;
15022         esac
15023     shift 2
15024 done
15025 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15026 cat >> try.c <<'EOCP'
15027 #ifdef CAN_PROTOTYPE
15028 #define _(args) args
15029 #else
15030 #define _(args) ()
15031 #endif
15032 EOCP
15033 echo "$foo" >> try.c
15034 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15035 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15036 status=$?
15037 $rm -f try.[co]
15038 exit $status
15039 EOSH
15040 chmod +x protochk
15041 $eunicefix protochk
15042
15043 : see what type is used for size_t
15044 rp="What is the type used for the length parameter for string functions?"
15045 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15046 eval $typedef_ask
15047
15048 : check for type of arguments to gethostbyaddr. 
15049 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15050         case "$d_gethbyaddr" in
15051         $define)
15052                 $cat <<EOM
15053
15054 Checking to see what type of arguments are accepted by gethostbyaddr().
15055 EOM
15056                 hdrs="$define sys/types.h
15057                         $d_socket sys/socket.h 
15058                         $i_niin netinet/in.h 
15059                         $i_netdb netdb.h
15060                         $i_unistd unistd.h"
15061                 : The first arg can 'char *' or 'void *'
15062                 : The second arg is some of integral type
15063                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15064                         for yyy in size_t long int; do
15065                                 case "$netdb_host_type" in
15066                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15067                                         if ./protochk "$try" $hdrs; then
15068                                                 echo "Your system accepts $xxx for the first arg."
15069                                                 echo "...and $yyy for the second arg."
15070                                                 netdb_host_type="$xxx"
15071                                                 netdb_hlen_type="$yyy"
15072                                         fi
15073                                         ;;
15074                                 esac
15075                         done
15076                 done
15077                 : In case none of those worked, prompt the user.
15078                 case "$netdb_host_type" in
15079                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15080                         dflt='char *'
15081                         . ./myread
15082                         netdb_host_type=$ans
15083                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15084                         dflt="$sizetype"
15085                         . ./myread
15086                         netdb_hlen_type=$ans
15087                         ;;
15088                 esac
15089                 ;;
15090         *)      : no gethostbyaddr, so pick harmless defaults
15091                 netdb_host_type='char *'
15092                 netdb_hlen_type="$sizetype"
15093                 ;;
15094         esac
15095         # Remove the "const" if needed. -- but then we'll have a 
15096         # prototype clash!
15097         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15098 fi
15099
15100 : check for type of argument to gethostbyname. 
15101 if test "X$netdb_name_type" = X ; then
15102         case "$d_gethbyname" in
15103         $define)
15104                 $cat <<EOM
15105
15106 Checking to see what type of argument is accepted by gethostbyname().
15107 EOM
15108                 hdrs="$define sys/types.h
15109                         $d_socket sys/socket.h 
15110                         $i_niin netinet/in.h 
15111                         $i_netdb netdb.h
15112                         $i_unistd unistd.h"
15113                 for xxx in "const char *" "char *"; do
15114                         case "$netdb_name_type" in
15115                         '')     try="extern struct hostent *gethostbyname($xxx);"
15116                                 if ./protochk "$try" $hdrs; then
15117                                         echo "Your system accepts $xxx."
15118                                         netdb_name_type="$xxx"
15119                                 fi
15120                                 ;;
15121                         esac
15122                 done
15123                 : In case none of those worked, prompt the user.
15124                 case "$netdb_name_type" in
15125                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15126                         dflt='char *'
15127                         . ./myread
15128                         netdb_name_type=$ans
15129                         ;;
15130                 esac
15131                 ;;
15132         *)      : no gethostbyname, so pick harmless default
15133                 netdb_name_type='char *'
15134                 ;;
15135         esac
15136 fi
15137
15138 : check for type of 1st argument to getnetbyaddr. 
15139 if test "X$netdb_net_type" = X ; then
15140         case "$d_getnbyaddr" in
15141         $define)
15142                 $cat <<EOM
15143
15144 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15145 EOM
15146                 hdrs="$define sys/types.h
15147                         $d_socket sys/socket.h 
15148                         $i_niin netinet/in.h 
15149                         $i_netdb netdb.h
15150                         $i_unistd unistd.h"
15151                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15152                         case "$netdb_net_type" in
15153                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15154                                 if ./protochk "$try" $hdrs; then
15155                                         echo "Your system accepts $xxx."
15156                                         netdb_net_type="$xxx"
15157                                 fi
15158                                 ;;
15159                         esac
15160                 done
15161                 : In case none of those worked, prompt the user.
15162                 case "$netdb_net_type" in
15163                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15164                         dflt='long'
15165                         . ./myread
15166                         netdb_net_type=$ans
15167                         ;;
15168                 esac
15169                 ;;
15170         *)      : no getnetbyaddr, so pick harmless default
15171                 netdb_net_type='long'
15172                 ;;
15173         esac
15174 fi
15175 : locate the preferred pager for this system
15176 case "$pager" in
15177 '')
15178         dflt=''
15179         case "$pg" in
15180         /*) dflt=$pg;;
15181         [a-zA-Z]:/*) dflt=$pg;;
15182         esac
15183         case "$more" in
15184         /*) dflt=$more;;
15185         [a-zA-Z]:/*) dflt=$more;;
15186         esac
15187         case "$less" in
15188         /*) dflt=$less;;
15189         [a-zA-Z]:/*) dflt=$less;;
15190         esac
15191         case "$dflt" in
15192         '') dflt=/usr/ucb/more;;
15193         esac
15194         ;;
15195 *) dflt="$pager";;
15196 esac
15197 echo " "
15198 fn=f/
15199 rp='What pager is used on your system?'
15200 . ./getfile
15201 pager="$ans"
15202
15203 : see what type pids are declared as in the kernel
15204 rp="What is the type of process ids on this system?"
15205 set pid_t pidtype int stdio.h sys/types.h
15206 eval $typedef_ask
15207
15208 : Find earliest binary compatible site_perl subdirectory perl can use.
15209 case "$bincompat5005" in
15210 "$define") xs_apiversion='5.005' ;;
15211 *) xs_apiversion=$version ;;   # The current site_perl version.
15212 esac
15213 : Find earliest pure perl site_perl subdirectory perl can use.
15214 : The versioned directories started at 5.005.
15215 pm_apiversion='5.005'
15216
15217 : see if ar generates random libraries by itself
15218 echo " "
15219 echo "Checking how to generate random libraries on your machine..." >&4
15220 echo 'int bar1() { return bar2(); }' > bar1.c
15221 echo 'int bar2() { return 2; }' > bar2.c
15222 $cat > foo.c <<'EOP'
15223 int main() { printf("%d\n", bar1()); exit(0); }
15224 EOP
15225 $cc $ccflags -c bar1.c >/dev/null 2>&1
15226 $cc $ccflags -c bar2.c >/dev/null 2>&1
15227 $cc $ccflags -c foo.c >/dev/null 2>&1
15228 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15229 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15230         $run ./foobar >/dev/null 2>&1; then
15231         echo "$ar appears to generate random libraries itself."
15232         orderlib=false
15233         ranlib=":"
15234 elif $ar ts bar$_a >/dev/null 2>&1 &&
15235         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15236         $run ./foobar >/dev/null 2>&1; then
15237                 echo "a table of contents needs to be added with '$ar ts'."
15238                 orderlib=false
15239                 ranlib="$ar ts"
15240 else
15241         case "$ranlib" in
15242         :) ranlib='';;
15243         '')
15244                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15245                 $test -f $ranlib || ranlib=''
15246                 ;;
15247         esac
15248         if $test -n "$ranlib"; then
15249                 echo "your system has '$ranlib'; we'll use that."
15250                 orderlib=false
15251         else
15252                 echo "your system doesn't seem to support random libraries"
15253                 echo "so we'll use lorder and tsort to order the libraries."
15254                 orderlib=true
15255                 ranlib=":"
15256         fi
15257 fi
15258 $rm -f foo* bar* 
15259
15260 : check for type of arguments to select. 
15261 case "$selecttype" in
15262 '') case "$d_select" in
15263         $define)
15264                 echo " "
15265                 $cat <<EOM
15266 Checking to see what type of arguments are accepted by select().
15267 EOM
15268                 hdrs="$define sys/types.h
15269                         $i_systime sys/time.h 
15270                         $i_sysselct sys/select.h
15271                         $d_socket sys/socket.h"
15272                 : The first arg can be int, unsigned, or size_t
15273                 : The last arg may or may not be 'const'
15274                 val=''
15275                 : void pointer has been seen but using that
15276                 : breaks the selectminbits test
15277                 for xxx in 'fd_set *' 'int *'; do
15278                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15279                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15280                                         case "$val" in
15281                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15282                                                 if ./protochk "$try" $hdrs; then
15283                                                         echo "Your system accepts $xxx."
15284                                                         val="$xxx"
15285                                                 fi
15286                                                 ;;
15287                                         esac
15288                                 done
15289                         done
15290                 done
15291                 case "$val" in
15292                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15293                         case "$d_fd_set" in
15294                                 $define) dflt="fd_set *" ;;
15295                                 *)              dflt="int *" ;;
15296                         esac
15297                         . ./myread
15298                         val=$ans
15299                         ;;
15300                 esac
15301                 selecttype="$val"
15302                 ;;
15303         *)      : no select, so pick a harmless default
15304                 selecttype='int *'
15305                 ;;
15306         esac
15307         ;;
15308 esac
15309
15310 : check for the select 'width'
15311 case "$selectminbits" in
15312 '') case "$d_select" in
15313         $define)
15314                 $cat <<EOM
15315
15316 Checking to see on how many bits at a time your select() operates...
15317 EOM
15318                 $cat >try.c <<EOCP
15319 #include <sys/types.h>
15320 #$i_time I_TIME
15321 #$i_systime I_SYS_TIME
15322 #$i_systimek I_SYS_TIME_KERNEL
15323 #ifdef I_TIME
15324 #   include <time.h>
15325 #endif
15326 #ifdef I_SYS_TIME
15327 #   ifdef I_SYS_TIME_KERNEL
15328 #       define KERNEL
15329 #   endif
15330 #   include <sys/time.h>
15331 #   ifdef I_SYS_TIME_KERNEL
15332 #       undef KERNEL
15333 #   endif
15334 #endif
15335 #$i_sysselct I_SYS_SELECT
15336 #ifdef I_SYS_SELECT
15337 #include <sys/select.h>
15338 #endif
15339 #$d_socket HAS_SOCKET
15340 #ifdef HAS_SOCKET
15341 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15342 #endif
15343 #include <stdio.h>
15344 $selecttype b;
15345 #define S sizeof(*(b))
15346 #define MINBITS 64
15347 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15348 #define NBITS  (NBYTES * 8)
15349 int main() {
15350     char s[NBYTES];
15351     struct timeval t;
15352     int i;
15353     FILE* fp;
15354     int fd;
15355
15356     fclose(stdin);
15357     fp = fopen("try.c", "r");
15358     if (fp == 0)
15359       exit(1);
15360     fd = fileno(fp);
15361     if (fd < 0)
15362       exit(2);
15363     b = ($selecttype)s;
15364     for (i = 0; i < NBITS; i++)
15365         FD_SET(i, b);
15366     t.tv_sec  = 0;
15367     t.tv_usec = 0;
15368     select(fd + 1, b, 0, 0, &t);
15369     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15370     printf("%d\n", i + 1);
15371     return 0;
15372 }
15373 EOCP
15374                 set try
15375                 if eval $compile_ok; then
15376                         selectminbits=`$run ./try`
15377                         case "$selectminbits" in
15378                         '')     cat >&4 <<EOM
15379 Cannot figure out on how many bits at a time your select() operates.
15380 I'll play safe and guess it is 32 bits.
15381 EOM
15382                                 selectminbits=32
15383                                 bits="32 bits"
15384                                 ;;
15385                         1)      bits="1 bit" ;;
15386                         *)      bits="$selectminbits bits" ;;
15387                         esac
15388                         echo "Your select() operates on $bits at a time." >&4
15389                 else
15390                         rp='What is the minimum number of bits your select() operates on?'
15391                         case "$byteorder" in
15392                         1234|12345678)  dflt=32 ;;
15393                         *)              dflt=1  ;;
15394                         esac
15395                         . ./myread
15396                         val=$ans
15397                         selectminbits="$val"
15398                 fi
15399                 $rm -f try.* try
15400                 ;;
15401         *)      : no select, so pick a harmless default
15402                 selectminbits='32'
15403                 ;;
15404         esac
15405         ;;
15406 esac
15407
15408 : Trace out the files included by signal.h, then look for SIGxxx names.
15409 : Remove SIGARRAYSIZE used by HPUX.
15410 : Remove SIGSTKSIZE used by Linux.
15411 : Remove SIGSTKSZ used by Posix.
15412 : Remove SIGTYP void lines used by OS2.
15413 : Some cpps, like os390, dont give the file name anywhere
15414 if [ "X$fieldn" = X ]; then
15415         : Just make some guesses.  We check them later.
15416         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15417 else
15418         xxx=`echo '#include <signal.h>' |
15419         $cppstdin $cppminus $cppflags 2>/dev/null |
15420         $grep '^[       ]*#.*include' | 
15421         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15422 fi
15423 : Check this list of files to be sure we have parsed the cpp output ok.
15424 : This will also avoid potentially non-existent files, such 
15425 : as ../foo/bar.h
15426 xxxfiles=''
15427 for xx in $xxx /dev/null ; do
15428         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15429 done
15430 : If we have found no files, at least try signal.h
15431 case "$xxxfiles" in
15432 '')     xxxfiles=`./findhdr signal.h` ;;
15433 esac
15434 xxx=`awk '
15435 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15436         print substr($2, 4, 20)
15437 }
15438 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15439         print substr($3, 4, 20)
15440 }' $xxxfiles`
15441 : Append some common names just in case the awk scan failed.
15442 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15443 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15444 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15445 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15446 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15447
15448 : generate a few handy files for later
15449 $cat > signal.c <<'EOCP'
15450 #include <sys/types.h>
15451 #include <signal.h>
15452 #include <stdio.h>
15453 int main() {
15454
15455 /* Strange style to avoid deeply-nested #if/#else/#endif */
15456 #ifndef NSIG
15457 #  ifdef _NSIG
15458 #    define NSIG (_NSIG)
15459 #  endif
15460 #endif
15461
15462 #ifndef NSIG
15463 #  ifdef SIGMAX
15464 #    define NSIG (SIGMAX+1)
15465 #  endif
15466 #endif
15467
15468 #ifndef NSIG
15469 #  ifdef SIG_MAX
15470 #    define NSIG (SIG_MAX+1)
15471 #  endif
15472 #endif
15473
15474 #ifndef NSIG
15475 #  ifdef MAXSIG
15476 #    define NSIG (MAXSIG+1)
15477 #  endif
15478 #endif
15479
15480 #ifndef NSIG
15481 #  ifdef MAX_SIG
15482 #    define NSIG (MAX_SIG+1)
15483 #  endif
15484 #endif
15485
15486 #ifndef NSIG
15487 #  ifdef SIGARRAYSIZE
15488 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15489 #  endif
15490 #endif
15491
15492 #ifndef NSIG
15493 #  ifdef _sys_nsig
15494 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15495 #  endif
15496 #endif
15497
15498 /* Default to some arbitrary number that's big enough to get most
15499    of the common signals.
15500 */
15501 #ifndef NSIG
15502 #    define NSIG 50
15503 #endif
15504
15505 printf("NSIG %d\n", NSIG);
15506
15507 #ifndef JUST_NSIG
15508
15509 EOCP
15510
15511 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15512 {
15513         printf "#ifdef SIG"; printf $1; printf "\n"
15514         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15515         printf $1; printf ");\n"
15516         printf "#endif\n"
15517 }
15518 END {
15519         printf "#endif /* JUST_NSIG */\n";
15520         printf "exit(0);\n}\n";
15521 }
15522 ' >>signal.c
15523 $cat >signal.awk <<'EOP'
15524 BEGIN { ndups = 0 }
15525 $1 ~ /^NSIG$/ { nsig = $2 }
15526 ($1 !~ /^NSIG$/) && (NF == 2) {
15527     if ($2 > maxsig) { maxsig = $2 }
15528     if (sig_name[$2]) {
15529         dup_name[ndups] = $1
15530         dup_num[ndups] = $2
15531         ndups++ 
15532     }
15533     else {
15534         sig_name[$2] = $1
15535         sig_num[$2] = $2
15536     }
15537 }
15538 END { 
15539     if (nsig == 0) {
15540         nsig = maxsig + 1
15541     }
15542     printf("NSIG %d\n", nsig);
15543     for (n = 1; n < nsig; n++) {
15544         if (sig_name[n]) {
15545             printf("%s %d\n", sig_name[n], sig_num[n])
15546         }
15547         else {
15548             printf("NUM%d %d\n", n, n) 
15549         }
15550     }
15551     for (n = 0; n < ndups; n++) {
15552         printf("%s %d\n", dup_name[n], dup_num[n])
15553     }
15554 }
15555 EOP
15556 $cat >signal_cmd <<EOS
15557 $startsh
15558 if $test -s signal.lst; then
15559     echo "Using your existing signal.lst file"
15560         exit 0
15561 fi
15562 xxx="$xxx"
15563 EOS
15564 $cat >>signal_cmd <<'EOS'
15565
15566 set signal
15567 if eval $compile_ok; then
15568         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15569 else
15570         echo "(I can't seem be able to compile the whole test program)" >&4
15571         echo "(I'll try it in little pieces.)" >&4
15572         set signal -DJUST_NSIG
15573         if eval $compile_ok; then
15574                 $run ./signal$_exe > signal.nsg
15575                 $cat signal.nsg
15576         else
15577                 echo "I can't seem to figure out how many signals you have." >&4
15578                 echo "Guessing 50." >&4
15579                 echo 'NSIG 50' > signal.nsg
15580         fi
15581         : Now look at all the signal names, one at a time.
15582         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15583                 $cat > signal.c <<EOCP
15584 #include <sys/types.h>
15585 #include <signal.h>
15586 #include <stdio.h>
15587 int main() {
15588 printf("$xx %d\n", SIG${xx});
15589 return 0;
15590 }
15591 EOCP
15592                 set signal
15593                 if eval $compile; then
15594                         echo "SIG${xx} found."
15595                         $run ./signal$_exe  >> signal.ls1
15596                 else
15597                         echo "SIG${xx} NOT found."
15598                 fi
15599         done
15600         if $test -s signal.ls1; then
15601                 $cat signal.nsg signal.ls1 |
15602                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15603         fi
15604
15605 fi
15606 if $test -s signal.lst; then
15607         :
15608 else
15609         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15610         echo 'kill -l' >signal
15611         set X `csh -f <signal`
15612         $rm -f signal
15613         shift
15614         case $# in
15615         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15616         esac
15617         echo $@ | $tr ' ' $trnl | \
15618             $awk '{ printf "%s %d\n", $1, ++s; }
15619                   END { printf "NSIG %d\n", ++s }' >signal.lst
15620 fi
15621 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15622 EOS
15623 chmod a+x signal_cmd
15624 $eunicefix signal_cmd
15625
15626 : generate list of signal names
15627 echo " "
15628 case "$sig_name_init" in
15629 '') doinit=yes ;;
15630 *)  case "$sig_num_init" in
15631     ''|*,*) doinit=yes ;;
15632     esac ;;
15633 esac
15634 case "$doinit" in
15635 yes)
15636         echo "Generating a list of signal names and numbers..." >&4
15637         . ./signal_cmd
15638         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15639         sig_name=`$awk 'BEGIN { printf "ZERO " }
15640                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15641         sig_num=`$awk  'BEGIN { printf "0 " }
15642                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15643         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15644                              !/^NSIG/   { printf "\"%s\", ", $1 }
15645                              END        { printf "0\n" }' signal.lst`
15646         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15647                              !/^NSIG/   { printf "%d, ", $2}
15648                              END        { printf "0\n"}' signal.lst`
15649         ;;
15650 esac
15651 echo "The following $sig_count signals are available:"
15652 echo " "
15653 echo $sig_name | $awk \
15654 'BEGIN { linelen = 0 }
15655 {
15656         for (i = 1; i <= NF; i++) {
15657                 name = "SIG" $i " "
15658                 linelen = linelen + length(name)
15659                 if (linelen > 70) {
15660                         printf "\n"
15661                         linelen = length(name)
15662                 }
15663                 printf "%s", name
15664         }
15665         printf "\n"
15666 }'
15667 sig_size=`echo $sig_name | awk '{print NF}'`
15668 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15669
15670 echo " "
15671 case "$sizetype" in
15672 *_t) zzz="$sizetype"    ;;
15673 *)   zzz="filesize"     ;;
15674 esac
15675 echo "Checking the size of $zzz..." >&4 
15676 cat > try.c <<EOCP
15677 #include <sys/types.h>
15678 #include <stdio.h>
15679 int main() {
15680     printf("%d\n", (int)sizeof($sizetype));
15681     exit(0);
15682 }
15683 EOCP
15684 set try
15685 if eval $compile_ok; then
15686         yyy=`$run ./try`
15687         case "$yyy" in
15688         '')     sizesize=4
15689                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15690                 ;;
15691         *)      sizesize=$yyy
15692                 echo "Your $zzz size is $sizesize bytes."
15693                 ;;
15694         esac
15695 else
15696         sizesize=4
15697         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15698 fi
15699
15700
15701 : check for socklen_t
15702 echo " "
15703 echo "Checking to see if you have socklen_t..." >&4
15704 $cat >try.c <<EOCP
15705 #include <sys/types.h>
15706 #$d_socket HAS_SOCKET
15707 #ifdef HAS_SOCKET
15708 #include <sys/socket.h>
15709 #endif
15710 int main() { socklen_t x = 16; }
15711 EOCP
15712 set try
15713 if eval $compile; then
15714         val="$define"
15715         echo "You have socklen_t."
15716 else
15717         val="$undef"
15718         echo "You do not have socklen_t."
15719         case "$sizetype" in
15720         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15721         esac
15722 fi
15723 $rm -f try try.*
15724 set d_socklen_t
15725 eval $setvar
15726
15727 : see if this is a socks.h system
15728 set socks.h i_socks
15729 eval $inhdr
15730
15731 : check for type of the size argument to socket calls
15732 case "$d_socket" in
15733 "$define")
15734         $cat <<EOM
15735
15736 Checking to see what type is the last argument of accept().
15737 EOM
15738         yyy=''
15739         case "$d_socklen_t" in
15740         "$define") yyy="$yyy socklen_t"
15741         esac
15742         yyy="$yyy $sizetype int long unsigned"
15743         for xxx in $yyy; do
15744                 case "$socksizetype" in
15745                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15746                         case "$usesocks" in
15747                         "$define")
15748                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15749                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15750                                         socksizetype="$xxx"
15751                                 fi
15752                                 ;;
15753                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15754                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15755                                         socksizetype="$xxx"
15756                                 fi
15757                                 ;;
15758                         esac
15759                         ;;
15760                 esac
15761         done
15762 : In case none of those worked, prompt the user.
15763         case "$socksizetype" in
15764         '')     rp='What is the type for socket address structure sizes?'
15765                 dflt='int'
15766                 . ./myread
15767                 socksizetype=$ans
15768                 ;;
15769         esac
15770         ;;
15771 *)      : no sockets, so pick relatively harmless default
15772         socksizetype='int'
15773         ;;
15774 esac
15775
15776 : see what type is used for signed size_t
15777 set ssize_t ssizetype int stdio.h sys/types.h
15778 eval $typedef
15779 dflt="$ssizetype"
15780 $cat > try.c <<EOM
15781 #include <stdio.h>
15782 #include <sys/types.h>
15783 #define Size_t $sizetype
15784 #define SSize_t $dflt
15785 int main()
15786 {
15787         if (sizeof(Size_t) == sizeof(SSize_t))
15788                 printf("$dflt\n");
15789         else if (sizeof(Size_t) == sizeof(int))
15790                 printf("int\n");
15791         else 
15792                 printf("long\n");
15793         exit(0);
15794 }
15795 EOM
15796 echo " "
15797 set try
15798 if eval $compile_ok && $run ./try > /dev/null; then
15799         ssizetype=`$run ./try`
15800         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15801 else
15802         $cat >&4 <<EOM
15803 Help! I can't compile and run the ssize_t test program: please enlighten me!
15804 (This is probably a misconfiguration in your system or libraries, and
15805 you really ought to fix it.  Still, I'll try anyway.)
15806
15807 I need a type that is the same size as $sizetype, but is guaranteed to
15808 be signed.  Common values are ssize_t, int and long.
15809
15810 EOM
15811         rp="What signed type is the same size as $sizetype?"
15812         . ./myread
15813         ssizetype="$ans"
15814 fi
15815 $rm -f try try.*
15816
15817 : see what type of char stdio uses.
15818 echo " "
15819 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15820 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15821         echo "Your stdio uses unsigned chars." >&4
15822         stdchar="unsigned char"
15823 else
15824         echo "Your stdio uses signed chars." >&4
15825         stdchar="char"
15826 fi
15827 $rm -f stdioh
15828
15829
15830
15831 : see if time exists
15832 echo " "
15833 if test "X$d_time" = X -o X"$timetype" = X; then
15834     if set time val -f d_time; eval $csym; $val; then
15835                 echo 'time() found.' >&4
15836                 val="$define"
15837                 rp="What is the type returned by time() on this system?"
15838                 set time_t timetype long stdio.h sys/types.h
15839                 eval $typedef_ask
15840     else
15841                 echo 'time() not found, hope that will do.' >&4
15842                 val="$undef"
15843                 timetype='int';
15844     fi
15845     set d_time
15846     eval $setvar
15847 fi
15848
15849 : see what type uids are declared as in the kernel
15850 echo " "
15851 echo "Looking for the type for user ids returned by getuid()."
15852 set uid_t uidtype xxx stdio.h sys/types.h
15853 eval $typedef
15854 case "$uidtype" in
15855 xxx)
15856         xxx=`./findhdr sys/user.h`
15857         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15858         case $1 in
15859         unsigned) dflt="$1 $2" ;;
15860         *) dflt="$1" ;;
15861         esac
15862         ;;
15863 *) dflt="$uidtype";;
15864 esac
15865 case "$uidtype" in
15866 uid_t)  echo "uid_t found." ;;
15867 *)      rp="What is the type for user ids returned by getuid()?"
15868         . ./myread
15869         uidtype="$ans"
15870         ;;
15871 esac
15872
15873 echo " "
15874 case "$uidtype" in
15875 *_t) zzz="$uidtype"     ;;
15876 *)   zzz="uid"          ;;
15877 esac
15878 echo "Checking the size of $zzz..." >&4 
15879 cat > try.c <<EOCP
15880 #include <sys/types.h>
15881 #include <stdio.h>
15882 int main() {
15883     printf("%d\n", (int)sizeof($uidtype));
15884     exit(0);
15885 }
15886 EOCP
15887 set try
15888 if eval $compile_ok; then
15889         yyy=`$run ./try`
15890         case "$yyy" in
15891         '')     uidsize=4
15892                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15893                 ;;
15894         *)      uidsize=$yyy
15895                 echo "Your $zzz is $uidsize bytes long."
15896                 ;;
15897         esac
15898 else
15899         uidsize=4
15900         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15901 fi
15902
15903 echo " "
15904 case "$uidtype" in
15905 *_t) zzz="$uidtype"     ;;
15906 *)   zzz="uid"          ;;
15907 esac
15908 echo "Checking the sign of $zzz..." >&4
15909 cat > try.c <<EOCP
15910 #include <sys/types.h>
15911 #include <stdio.h>
15912 int main() {
15913         $uidtype foo = -1;
15914         if (foo < 0)
15915                 printf("-1\n");
15916         else
15917                 printf("1\n");
15918 }
15919 EOCP
15920 set try
15921 if eval $compile; then
15922         yyy=`$run ./try`
15923         case "$yyy" in
15924         '')     uidsign=1
15925                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15926                 ;;
15927         *)      uidsign=$yyy
15928                 case "$uidsign" in
15929                  1) echo "Your $zzz is unsigned." ;;
15930                 -1) echo "Your $zzz is signed."   ;;
15931                 esac
15932                 ;;
15933         esac
15934 else
15935         uidsign=1
15936         echo "(I can't compile the test program--guessing unsigned.)" >&4
15937 fi
15938
15939
15940
15941 echo " "
15942 $echo "Checking the format string to be used for uids..." >&4
15943
15944 case "$uidsign" in
15945 -1)     if $test X"$uidsize" = X"$ivsize"; then
15946                 uidformat="$ivdformat"
15947         else
15948                 if $test X"$uidsize" = X"$longsize"; then
15949                         uidformat='"ld"'
15950                 else
15951                         if $test X"$uidsize" = X"$intsize"; then
15952                                 uidformat='"d"'
15953                         else
15954                                 if $test X"$uidsize" = X"$shortsize"; then
15955                                         uidformat='"hd"'
15956                                 fi
15957                         fi
15958                 fi
15959         fi
15960         ;;
15961 *)      if $test X"$uidsize" = X"$uvsize"; then
15962                 uidformat="$uvuformat"
15963         else
15964                 if $test X"$uidsize" = X"$longsize"; then
15965                         uidformat='"lu"'
15966                 else
15967                         if $test X"$uidsize" = X"$intsize"; then
15968                                 uidformat='"u"'
15969                         else
15970                                 if $test X"$uidsize" = X"$shortsize"; then
15971                                         uidformat='"hu"'
15972                                 fi
15973                         fi
15974                 fi
15975         fi
15976         ;;
15977 esac
15978
15979 : determine compiler compiler
15980 case "$yacc" in
15981 '')
15982         dflt=yacc;;
15983 *)
15984         dflt="$yacc";;
15985 esac
15986 echo " "
15987 comp='yacc'
15988 if $test -f "$byacc$_exe"; then
15989         dflt="$byacc"
15990         comp="byacc or $comp"
15991 fi
15992 if $test -f "$bison$_exe"; then
15993         comp="$comp or bison -y"
15994 fi
15995 rp="Which compiler compiler ($comp) shall I use?"
15996 . ./myread
15997 yacc="$ans"
15998 case "$yacc" in
15999 *bis*)
16000         case "$yacc" in
16001         *-y*) ;;
16002         *)
16003                 yacc="$yacc -y"
16004                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16005                 ;;
16006         esac
16007         ;;
16008 esac
16009
16010 : see if this is a fp.h system
16011 set fp.h i_fp
16012 eval $inhdr
16013
16014 : see if this is a fp_class.h system
16015 set fp_class.h i_fp_class
16016 eval $inhdr
16017
16018 : see if this is a ieeefp.h system
16019 case "$i_ieeefp" in
16020 '' ) set ieeefp.h i_ieeefp
16021      eval $inhdr
16022      ;;
16023 esac
16024
16025 : see if this is a libutil.h system
16026 set libutil.h i_libutil
16027 eval $inhdr
16028
16029 : see if locale.h is available
16030 set locale.h i_locale
16031 eval $inhdr
16032
16033 : see if mach cthreads are available
16034 if test "X$usethreads" = "X$define"; then
16035         set mach/cthreads.h i_machcthr
16036         eval $inhdr
16037 else
16038         i_machcthr="$undef"
16039 fi
16040
16041
16042
16043 : see if this is a math.h system
16044 set math.h i_math
16045 eval $inhdr
16046
16047 : see if this is a mntent.h system
16048 set mntent.h i_mntent
16049 eval $inhdr
16050
16051 : see if ndbm.h is available
16052 set ndbm.h t_ndbm
16053 eval $inhdr
16054 case "$t_ndbm" in
16055 $define)
16056         : see if dbm_open exists
16057         set dbm_open d_dbm_open
16058         eval $inlibc
16059         case "$d_dbm_open" in
16060         $undef)
16061                 t_ndbm="$undef"
16062                 echo "We won't be including <ndbm.h>"
16063                 ;;
16064         esac
16065         ;;
16066 esac
16067 val="$t_ndbm"
16068 set i_ndbm
16069 eval $setvar
16070
16071 : see if net/errno.h is available
16072 val=''
16073 set net/errno.h val
16074 eval $inhdr
16075
16076 : Unfortunately, it causes problems on some systems.  Arrgh.
16077 case "$val" in
16078 $define)
16079         cat > try.c <<'EOM'
16080 #include <stdio.h>
16081 #include <errno.h>
16082 #include <net/errno.h>
16083 int func()
16084 {
16085         return ENOTSOCK;
16086 }
16087 EOM
16088         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16089                 echo "We'll be including <net/errno.h>." >&4
16090         else
16091                 echo "We won't be including <net/errno.h>." >&4
16092                 val="$undef"
16093         fi
16094         $rm -f try.* try
16095         ;;
16096 esac
16097 set i_neterrno
16098 eval $setvar
16099
16100 : see if netinet/tcp.h is available
16101 set netinet/tcp.h i_netinettcp
16102 eval $inhdr
16103
16104 : see if this is a poll.h system
16105 set poll.h i_poll
16106 eval $inhdr
16107
16108 : see if this is a prot.h system
16109 set prot.h i_prot
16110 eval $inhdr
16111
16112 echo " "
16113 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16114 $cat <<'EOSH' > Cppsym.know
16115 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16116 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16117 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16118 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16119 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16120 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16121 bull c cadmus clipper CMU COFF COMPILER_VERSION
16122 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16123 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16124 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16125 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16126 GLIBC GLIBC_MINOR
16127 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16128 H3050R H3050RX hbullx20 hcx host_mips
16129 hp200 hp300 hp700 HP700 hp800 hp9000
16130 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16131 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16132 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16133 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16134 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16135 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16136 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16137 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16138 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16139 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16140 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16141 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16142 MATH_HAS_NO_SIDE_EFFECTS
16143 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16144 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16145 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16146 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16147 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16148 NetBSD news1500 news1700 news1800 news1900 news3700
16149 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16150 ns32016 ns32332 ns32k nsc32000
16151 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16152 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16153 pc532 pdp11 PGC PIC plexus PORTAR posix
16154 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16155 POSIX_C_SOURCE POSIX_SOURCE POWER
16156 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16157 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16158 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16159 sony sony_news sonyrisc sparc sparclite spectrum
16160 stardent stdc STDC_EXT stratos sun sun3 sun386
16161 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16162 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16163 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16164 sysV68 sysV88 Tek4132 Tek4300 titan
16165 TM3200 TM5400 TM5600
16166 tower tower32 tower32_200 tower32_600 tower32_700
16167 tower32_800 tower32_850 tss
16168 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16169 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16170 unix UNIX95 UNIX99 unixpc unos
16171 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16172 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16173 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16174 USGr4 USGr4_2
16175 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16176 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16177 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16178 z8000
16179 EOSH
16180 # Maybe put other stuff here too.
16181 cat <<EOSH >>Cppsym.know
16182 $osname
16183 EOSH
16184 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16185 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16186 $cat Cppsym.know > Cppsym.c
16187 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16188 $rm -f Cppsym.a Cppsym.b Cppsym.c
16189 cat <<EOSH > Cppsym
16190 $startsh
16191 if $test \$# -gt 0; then
16192     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16193     if $test -s Cppsym.got; then
16194         $rm -f Cppsym.got
16195         exit 0
16196     fi
16197     $rm -f Cppsym.got
16198     exit 1
16199 else
16200     $tr " " "$trnl" | ./Cppsym.try
16201     exit 0
16202 fi
16203 EOSH
16204 chmod +x Cppsym
16205 $eunicefix Cppsym
16206 cat <<EOSH > Cppsym.try
16207 $startsh
16208 cat <<'EOCP' > try.c
16209 #include <stdio.h>
16210 int main() {
16211 EOCP
16212 $awk \\
16213 EOSH
16214 cat <<'EOSH' >> Cppsym.try
16215 'length($1) > 0 {
16216     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
16217     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
16218     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
16219     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
16220 }'       >> try.c
16221 echo 'return 0;}' >> try.c
16222 EOSH
16223 cat <<EOSH >> Cppsym.try
16224 ccflags="$ccflags"
16225 case "$osname-$gccversion" in
16226 irix-) ccflags="\$ccflags -woff 1178" ;;
16227 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16228 esac
16229 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16230 EOSH
16231 chmod +x Cppsym.try
16232 $eunicefix Cppsym.try
16233 ./Cppsym < Cppsym.know > Cppsym.true
16234 : now check the C compiler for additional symbols
16235 postprocess_cc_v=''
16236 case "$osname" in
16237 aix) postprocess_cc_v="|$tr , ' '" ;;
16238 esac
16239 $cat >ccsym <<EOS
16240 $startsh
16241 $cat >tmp.c <<EOF
16242 extern int foo;
16243 EOF
16244 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16245 do
16246         case "\$i" in
16247         -D*) echo "\$i" | $sed 's/^-D//';;
16248         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16249         esac
16250 done
16251 $rm -f try.c
16252 EOS
16253 postprocess_cc_v=''
16254 chmod +x ccsym
16255 $eunicefix ccsym
16256 ./ccsym > ccsym1.raw
16257 if $test -s ccsym1.raw; then
16258        $sort ccsym1.raw | $uniq >ccsym.raw
16259 else
16260        mv ccsym1.raw ccsym.raw
16261 fi
16262
16263 $awk '/\=/ { print $0; next }
16264         { print $0"=1" }' ccsym.raw >ccsym.list
16265 $awk '/\=/ { print $0; next }
16266         { print $0"=1" }' Cppsym.true >ccsym.true
16267 $comm -13 ccsym.true ccsym.list >ccsym.own
16268 $comm -12 ccsym.true ccsym.list >ccsym.com
16269 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16270 also=''
16271 if $test -z ccsym.raw; then
16272         echo "Your C compiler doesn't seem to define any symbols!" >&4
16273         echo " "
16274         echo "However, your C preprocessor defines the following symbols:"
16275         $cat Cppsym.true
16276         ccsymbols=''
16277         cppsymbols=`$cat Cppsym.true`
16278         cppsymbols=`echo $cppsymbols`
16279         cppccsymbols="$cppsymbols"
16280 else
16281         if $test -s ccsym.com; then
16282                 echo "Your C compiler and pre-processor define these symbols:"
16283                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16284                 also='also '
16285                 symbols='ones'
16286                 cppccsymbols=`$cat ccsym.com`
16287                 cppccsymbols=`echo $cppccsymbols`
16288                 $test "$silent" || sleep 1
16289         fi
16290         if $test -s ccsym.cpp; then
16291                 $test "$also" && echo " "
16292                 echo "Your C pre-processor ${also}defines the following symbols:"
16293                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16294                 also='further '
16295                 cppsymbols=`$cat ccsym.cpp`
16296                 cppsymbols=`echo $cppsymbols`
16297                 $test "$silent" || sleep 1
16298         fi
16299         if $test -s ccsym.own; then
16300                 $test "$also" && echo " "
16301                 echo "Your C compiler ${also}defines the following cpp symbols:"
16302                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16303                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16304                 ccsymbols=`$cat ccsym.own`
16305                 ccsymbols=`echo $ccsymbols`
16306                 $test "$silent" || sleep 1
16307         fi
16308 fi
16309
16310 : see if this is a termio system
16311 val="$undef"
16312 val2="$undef"
16313 val3="$undef"
16314 if $test `./findhdr termios.h`; then
16315         set tcsetattr i_termios
16316         eval $inlibc
16317         val3="$i_termios"
16318 fi
16319 echo " "
16320 case "$val3" in
16321 "$define") echo "You have POSIX termios.h... good!" >&4;;
16322 *) if ./Cppsym pyr; then
16323                 case "`/bin/universe`" in
16324                 ucb) if $test `./findhdr sgtty.h`; then
16325                                 val2="$define"
16326                                 echo "<sgtty.h> found." >&4
16327                         else
16328                                 echo "System is pyramid with BSD universe."
16329                                 echo "<sgtty.h> not found--you could have problems." >&4
16330                         fi;;
16331                 *) if $test `./findhdr termio.h`; then
16332                                 val="$define"
16333                                 echo "<termio.h> found." >&4
16334                         else
16335                                 echo "System is pyramid with USG universe."
16336                                 echo "<termio.h> not found--you could have problems." >&4
16337                         fi;;
16338                 esac
16339         elif ./usg; then
16340                 if $test `./findhdr termio.h`; then
16341                         echo "<termio.h> found." >&4
16342                         val="$define"
16343                 elif $test `./findhdr sgtty.h`; then
16344                         echo "<sgtty.h> found." >&4
16345                         val2="$define"
16346                 else
16347 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16348                 fi
16349         else
16350                 if $test `./findhdr sgtty.h`; then
16351                         echo "<sgtty.h> found." >&4
16352                         val2="$define"
16353                 elif $test `./findhdr termio.h`; then
16354                         echo "<termio.h> found." >&4
16355                         val="$define"
16356                 else
16357 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16358                 fi
16359         fi;;
16360 esac
16361 set i_termio; eval $setvar
16362 val=$val2; set i_sgtty; eval $setvar
16363 val=$val3; set i_termios; eval $setvar
16364
16365 : see if this is a shadow.h system
16366 set shadow.h i_shadow
16367 eval $inhdr
16368
16369 : see if stddef is available
16370 set stddef.h i_stddef
16371 eval $inhdr
16372
16373 : see if this is a sunmath.h system
16374 set sunmath.h i_sunmath
16375 eval $inhdr
16376
16377 : see if sys/access.h is available
16378 set sys/access.h i_sysaccess
16379 eval $inhdr
16380
16381 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16382 set sys/filio.h i_sysfilio
16383 eval $inhdr
16384 echo " "
16385 if $test `./findhdr sys/ioctl.h`; then
16386         val="$define"
16387         echo '<sys/ioctl.h> found.' >&4
16388 else
16389         val="$undef"
16390         if $test $i_sysfilio = "$define"; then
16391             echo '<sys/ioctl.h> NOT found.' >&4
16392         else
16393                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16394                 $test $i_termio = "$define" && xxx="termio.h"
16395                 $test $i_termios = "$define" && xxx="termios.h"
16396 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16397         fi
16398 fi
16399 set i_sysioctl
16400 eval $setvar
16401
16402 : see if socket ioctl defs are in sys/sockio.h
16403 echo " "
16404 xxx=`./findhdr sys/sockio.h`
16405 if $test "$xxx"; then
16406         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16407                 val="$define"
16408                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16409         else
16410                 val="$undef"
16411                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16412         fi
16413 else
16414         val="$undef"
16415         $cat <<EOM
16416 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16417 EOM
16418 fi
16419 set i_syssockio
16420 eval $setvar
16421
16422
16423 : see if this is a syslog.h system
16424 set syslog.h i_syslog
16425 eval $inhdr
16426
16427
16428 : see if this is a sys/mode.h system
16429 set sys/mode.h i_sysmode
16430 eval $inhdr
16431
16432 : see if sys/resource.h has to be included
16433 set sys/resource.h i_sysresrc
16434 eval $inhdr
16435
16436 : see if sys/security.h is available
16437 set sys/security.h i_syssecrt
16438 eval $inhdr
16439
16440 : see if this is a sys/statvfs.h system
16441 set sys/statvfs.h i_sysstatvfs
16442 eval $inhdr
16443
16444 : see if this is a sys/un.h system
16445 set sys/un.h i_sysun
16446 eval $inhdr
16447
16448
16449 : see if this is a sys/utsname.h system
16450 set sys/utsname.h i_sysutsname
16451 eval $inhdr
16452
16453 : see if this is a syswait system
16454 set sys/wait.h i_syswait
16455 eval $inhdr
16456
16457 : see if this is a ustat.h system
16458 set ustat.h i_ustat
16459 eval $inhdr
16460
16461 : see if this is an utime system
16462 set utime.h i_utime
16463 eval $inhdr
16464
16465 : see if this is a values.h system
16466 set values.h i_values
16467 eval $inhdr
16468
16469 : see if this is a vfork system
16470 case "$d_vfork" in
16471 "$define")
16472         set vfork.h i_vfork
16473         eval $inhdr
16474         ;;
16475 *)
16476         i_vfork="$undef"
16477         ;;
16478 esac
16479
16480 : see if gdbm.h is available
16481 set gdbm.h t_gdbm
16482 eval $inhdr
16483 case "$t_gdbm" in
16484 $define)
16485         : see if gdbm_open exists
16486         set gdbm_open d_gdbm_open
16487         eval $inlibc
16488         case "$d_gdbm_open" in
16489         $undef)
16490                 t_gdbm="$undef"
16491                 echo "We won't be including <gdbm.h>"
16492                 ;;
16493         esac
16494         ;;
16495 esac
16496 val="$t_gdbm"
16497 set i_gdbm
16498 eval $setvar
16499
16500 echo " "
16501 echo "Looking for extensions..." >&4
16502 : If we are using the old config.sh, known_extensions may contain
16503 : old or inaccurate or duplicate values.
16504 known_extensions=''
16505 nonxs_extensions=''
16506 : We do not use find because it might not be available.
16507 : We do not just use MANIFEST because the user may have dropped
16508 : some additional extensions into the source tree and expect them
16509 : to be built.
16510
16511 : Function to recursively find available extensions, ignoring DynaLoader
16512 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16513 find_extensions='
16514     for xxx in *; do
16515        case "$xxx" in
16516            DynaLoader|dynaload) ;;
16517            *)
16518            if $test -f $xxx/$xxx.xs; then
16519                known_extensions="$known_extensions $1$xxx";
16520            elif $test -f $xxx/Makefile.PL; then
16521                nonxs_extensions="$nonxs_extensions $1$xxx";
16522            else
16523                if $test -d $xxx -a $# -lt 10; then
16524                    set $1$xxx/ $*;
16525                    cd $xxx;
16526                    eval $find_extensions;
16527                    cd ..;
16528                    shift;
16529                fi;
16530            fi
16531            ;;
16532        esac;
16533     done'
16534 tdir=`pwd`
16535 cd $rsrc/ext
16536 set X
16537 shift
16538 eval $find_extensions
16539 # Special case:  Add in threads/shared since it is not picked up by the
16540 # recursive find above (and adding in general recursive finding breaks
16541 # SDBM_File/sdbm).  A.D.  10/25/2001.
16542 known_extensions="$known_extensions threads/shared"
16543 set X $nonxs_extensions
16544 shift
16545 nonxs_extensions="$*"
16546 set X $known_extensions
16547 shift
16548 known_extensions="$*"
16549 cd $tdir
16550
16551 : Now see which are supported on this system.
16552 avail_ext=''
16553 for xxx in $known_extensions ; do
16554         case "$xxx" in
16555         DB_File|db_file)
16556                 case "$i_db" in
16557                 $define) avail_ext="$avail_ext $xxx" ;;
16558                 esac
16559                 ;;
16560         GDBM_File|gdbm_fil)
16561                 case "$i_gdbm" in 
16562                 $define) avail_ext="$avail_ext $xxx" ;;
16563                 esac
16564                 ;;
16565         I18N/Langinfo|i18n_lan)
16566                 case "$i_langinfo$d_nl_langinfo" in 
16567                 $define$define) avail_ext="$avail_ext $xxx" ;;
16568                 esac
16569                 ;;
16570         NDBM_File|ndbm_fil)
16571                 case "$i_ndbm" in
16572                 $define)
16573                     case "$osname-$use64bitint" in
16574                     cygwin-*|hpux-define)
16575                         case "$libs" in
16576                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16577                         esac
16578                         ;;
16579                     *) avail_ext="$avail_ext $xxx" ;;
16580                     esac
16581                     ;;
16582                 esac
16583                 ;;
16584         ODBM_File|odbm_fil) 
16585                 case "${i_dbm}${i_rpcsvcdbm}" in
16586                 *"${define}"*)
16587                     case "$osname-$use64bitint" in
16588                     cygwin-*|hpux-define)
16589                         case "$libs" in
16590                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16591                         esac
16592                         ;;
16593                     *) avail_ext="$avail_ext $xxx" ;;
16594                     esac
16595                     ;;
16596                 esac
16597                 ;;
16598         POSIX|posix)
16599                 case "$useposix" in
16600                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16601                 esac
16602                 ;;
16603         Opcode|opcode)
16604                 case "$useopcode" in
16605                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16606                 esac
16607                 ;;
16608         Socket|socket)
16609                 case "$d_socket" in 
16610                 true|$define|y)
16611                     case "$osname" in
16612                     beos) ;; # not unless BONE
16613                     *) avail_ext="$avail_ext $xxx" ;;
16614                     esac
16615                     ;;
16616                 esac
16617                 ;;
16618         Sys/Syslog|sys/syslog)
16619                 : XXX syslog requires socket
16620                 case "$d_socket" in 
16621                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16622                 esac
16623                 ;;
16624         Thread|thread)
16625                 case "$usethreads" in
16626                 true|$define|y)
16627                         case "$useithreads" in
16628                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16629                         esac
16630                 esac
16631                 ;;
16632         threads|threads/shared)
16633                 case "$usethreads" in
16634                 true|$define|y)
16635                         case "$useithreads" in
16636                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16637                         esac
16638                 esac
16639                 ;;
16640         IPC/SysV|ipc/sysv)
16641                 : XXX Do we need a useipcsysv variable here
16642                 case "${d_msg}${d_sem}${d_shm}" in 
16643                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16644                 esac
16645                 ;;
16646         *)      avail_ext="$avail_ext $xxx"
16647                 ;;
16648         esac
16649 done
16650
16651 set X $avail_ext
16652 shift
16653 avail_ext="$*"
16654
16655 : Now see which nonxs extensions are supported on this system.
16656 : For now assume all are.
16657 nonxs_ext=''
16658 for xxx in $nonxs_extensions ; do
16659         case "$xxx" in
16660         *)      nonxs_ext="$nonxs_ext $xxx"
16661                 ;;
16662         esac
16663 done
16664
16665 set X $nonxs_ext
16666 shift
16667 nonxs_ext="$*"
16668
16669 case $usedl in
16670 $define)
16671         $cat <<EOM
16672 A number of extensions are supplied with $package.  You may choose to
16673 compile these extensions for dynamic loading (the default), compile
16674 them into the $package executable (static loading), or not include
16675 them at all.  Answer "none" to include no extensions.
16676 Note that DynaLoader is always built and need not be mentioned here.
16677
16678 EOM
16679         case "$dynamic_ext" in
16680         '') dflt="$avail_ext" ;;
16681         *)      dflt="$dynamic_ext"
16682                 # Perhaps we are reusing an old out-of-date config.sh.
16683                 case "$hint" in
16684                 previous)
16685                         if test X"$dynamic_ext" != X"$avail_ext"; then
16686                                 $cat <<EOM
16687 NOTICE:  Your previous config.sh list may be incorrect. 
16688 The extensions now available to you are 
16689         ${avail_ext}
16690 but the default list from your previous config.sh is
16691         ${dynamic_ext} 
16692
16693 EOM
16694                         fi
16695                         ;;
16696                 esac
16697                 ;;
16698         esac
16699         case "$dflt" in
16700         '')     dflt=none;;
16701         esac
16702         rp="What extensions do you wish to load dynamically?"
16703         . ./myread
16704         case "$ans" in
16705         none) dynamic_ext=' ' ;;
16706         *) dynamic_ext="$ans" ;;
16707         esac
16708
16709         case "$static_ext" in
16710         '')
16711                 : Exclude those already listed in dynamic linking
16712                 dflt=''
16713                 for xxx in $avail_ext; do
16714                         case " $dynamic_ext " in
16715                         *" $xxx "*) ;;
16716                         *) dflt="$dflt $xxx" ;;
16717                         esac
16718                 done
16719                 set X $dflt
16720                 shift
16721                 dflt="$*"
16722                 ;;
16723         *)  dflt="$static_ext" 
16724                 ;;
16725         esac
16726
16727         case "$dflt" in
16728         '')     dflt=none;;
16729         esac
16730         rp="What extensions do you wish to load statically?"
16731         . ./myread
16732         case "$ans" in
16733         none) static_ext=' ' ;;
16734         *) static_ext="$ans" ;;
16735         esac
16736         ;;
16737 *)
16738         $cat <<EOM
16739 A number of extensions are supplied with $package.  Answer "none" 
16740 to include no extensions. 
16741 Note that DynaLoader is always built and need not be mentioned here.
16742
16743 EOM
16744         case "$static_ext" in
16745         '') dflt="$avail_ext" ;;
16746         *)      dflt="$static_ext"
16747                 # Perhaps we are reusing an old out-of-date config.sh.
16748                 case "$hint" in
16749                 previous)
16750                         if test X"$static_ext" != X"$avail_ext"; then
16751                                 $cat <<EOM
16752 NOTICE:  Your previous config.sh list may be incorrect. 
16753 The extensions now available to you are 
16754         ${avail_ext}
16755 but the default list from your previous config.sh is
16756         ${static_ext} 
16757
16758 EOM
16759                         fi
16760                         ;;
16761                 esac
16762                 ;;
16763         esac
16764         : Exclude those that are not xs extensions
16765         case "$dflt" in
16766         '')     dflt=none;;
16767         esac
16768         rp="What extensions do you wish to include?"
16769         . ./myread
16770         case "$ans" in
16771         none) static_ext=' ' ;;
16772         *) static_ext="$ans" ;;
16773         esac
16774         ;;
16775 esac
16776
16777 set X $dynamic_ext $static_ext $nonxs_ext
16778 shift
16779 extensions="$*"
16780
16781 : Remove libraries needed only for extensions
16782 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16783 : The exception is SunOS 4.x, which needs them.
16784 case "${osname}X${osvers}" in
16785 sunos*X4*)
16786     perllibs="$libs"
16787     ;;
16788 *) case "$usedl" in
16789     $define|true|[yY]*)
16790             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16791             shift
16792             perllibs="$*"
16793             ;;
16794     *)  perllibs="$libs"
16795             ;;
16796     esac
16797     ;;
16798 esac
16799
16800 : Remove build directory name from cppstdin so it can be used from
16801 : either the present location or the final installed location.
16802 echo " "
16803 : Get out of the UU directory to get correct path name.
16804 cd ..
16805 case "$cppstdin" in
16806 `pwd`/cppstdin)
16807         echo "Stripping down cppstdin path name"
16808         cppstdin=cppstdin
16809         ;;
16810 esac
16811 cd UU
16812
16813 : end of configuration questions
16814 echo " "
16815 echo "End of configuration questions."
16816 echo " "
16817
16818 : back to where it started
16819 if test -d ../UU; then
16820         cd ..
16821 fi
16822
16823 : configuration may be patched via a 'config.arch' file
16824 if $test -f config.arch; then
16825         echo "I see a config.arch file, loading it."
16826         . ./config.arch
16827 fi
16828
16829 : configuration may be patched via a 'config.over' file
16830 if $test -f config.over; then
16831         echo " "
16832         dflt=y
16833         rp='I see a config.over file.  Do you wish to load it?'
16834         . UU/myread
16835         case "$ans" in
16836         n*) echo "OK, I'll ignore it.";;
16837         *)      . ./config.over
16838                 echo "Configuration override changes have been loaded."
16839                 ;;
16840         esac
16841 fi
16842
16843 : in case they want portability, strip down executable paths
16844 case "$d_portable" in
16845 "$define")
16846         echo " "
16847         echo "Stripping down executable paths..." >&4
16848         for file in $loclist $trylist; do
16849                 eval temp=\$$file
16850                 eval $file=`basename $temp`
16851         done
16852         ;;
16853 esac
16854
16855 : create config.sh file
16856 echo " "
16857 echo "Creating config.sh..." >&4
16858 $spitshell <<EOT >config.sh
16859 $startsh
16860 #
16861 # This file was produced by running the Configure script. It holds all the
16862 # definitions figured out by Configure. Should you modify one of these values,
16863 # do not forget to propagate your changes by running "Configure -der". You may
16864 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16865 #
16866
16867 # Package name      : $package
16868 # Source directory  : $src
16869 # Configuration time: $cf_time
16870 # Configured by     : $cf_by
16871 # Target system     : $myuname
16872
16873 Author='$Author'
16874 Date='$Date'
16875 Header='$Header'
16876 Id='$Id'
16877 Locker='$Locker'
16878 Log='$Log'
16879 Mcc='$Mcc'
16880 RCSfile='$RCSfile'
16881 Revision='$Revision'
16882 Source='$Source'
16883 State='$State'
16884 _a='$_a'
16885 _exe='$_exe'
16886 _o='$_o'
16887 afs='$afs'
16888 afsroot='$afsroot'
16889 alignbytes='$alignbytes'
16890 ansi2knr='$ansi2knr'
16891 aphostname='$aphostname'
16892 api_revision='$api_revision'
16893 api_subversion='$api_subversion'
16894 api_version='$api_version'
16895 api_versionstring='$api_versionstring'
16896 ar='$ar'
16897 archlib='$archlib'
16898 archlibexp='$archlibexp'
16899 archname64='$archname64'
16900 archname='$archname'
16901 archobjs='$archobjs'
16902 awk='$awk'
16903 baserev='$baserev'
16904 bash='$bash'
16905 bin='$bin'
16906 bincompat5005='$bincompat5005'
16907 binexp='$binexp'
16908 bison='$bison'
16909 byacc='$byacc'
16910 byteorder='$byteorder'
16911 c='$c'
16912 castflags='$castflags'
16913 cat='$cat'
16914 cc='$cc'
16915 cccdlflags='$cccdlflags'
16916 ccdlflags='$ccdlflags'
16917 ccflags='$ccflags'
16918 ccflags_uselargefiles='$ccflags_uselargefiles'
16919 ccname='$ccname'
16920 ccsymbols='$ccsymbols'
16921 ccversion='$ccversion'
16922 cf_by='$cf_by'
16923 cf_email='$cf_email'
16924 cf_time='$cf_time'
16925 charsize='$charsize'
16926 chgrp='$chgrp'
16927 chmod='$chmod'
16928 chown='$chown'
16929 clocktype='$clocktype'
16930 comm='$comm'
16931 compress='$compress'
16932 contains='$contains'
16933 cp='$cp'
16934 cpio='$cpio'
16935 cpp='$cpp'
16936 cpp_stuff='$cpp_stuff'
16937 cppccsymbols='$cppccsymbols'
16938 cppflags='$cppflags'
16939 cpplast='$cpplast'
16940 cppminus='$cppminus'
16941 cpprun='$cpprun'
16942 cppstdin='$cppstdin'
16943 cppsymbols='$cppsymbols'
16944 cryptlib='$cryptlib'
16945 csh='$csh'
16946 d_Gconvert='$d_Gconvert'
16947 d_PRIEUldbl='$d_PRIEUldbl'
16948 d_PRIFUldbl='$d_PRIFUldbl'
16949 d_PRIGUldbl='$d_PRIGUldbl'
16950 d_PRIXU64='$d_PRIXU64'
16951 d_PRId64='$d_PRId64'
16952 d_PRIeldbl='$d_PRIeldbl'
16953 d_PRIfldbl='$d_PRIfldbl'
16954 d_PRIgldbl='$d_PRIgldbl'
16955 d_PRIi64='$d_PRIi64'
16956 d_PRIo64='$d_PRIo64'
16957 d_PRIu64='$d_PRIu64'
16958 d_PRIx64='$d_PRIx64'
16959 d_SCNfldbl='$d_SCNfldbl'
16960 d__fwalk='$d__fwalk'
16961 d_access='$d_access'
16962 d_accessx='$d_accessx'
16963 d_alarm='$d_alarm'
16964 d_archlib='$d_archlib'
16965 d_atolf='$d_atolf'
16966 d_atoll='$d_atoll'
16967 d_attribut='$d_attribut'
16968 d_bcmp='$d_bcmp'
16969 d_bcopy='$d_bcopy'
16970 d_bincompat5005='$d_bincompat5005'
16971 d_bsd='$d_bsd'
16972 d_bsdgetpgrp='$d_bsdgetpgrp'
16973 d_bsdsetpgrp='$d_bsdsetpgrp'
16974 d_bzero='$d_bzero'
16975 d_casti32='$d_casti32'
16976 d_castneg='$d_castneg'
16977 d_charvspr='$d_charvspr'
16978 d_chown='$d_chown'
16979 d_chroot='$d_chroot'
16980 d_chsize='$d_chsize'
16981 d_class='$d_class'
16982 d_closedir='$d_closedir'
16983 d_cmsghdr_s='$d_cmsghdr_s'
16984 d_const='$d_const'
16985 d_crypt='$d_crypt'
16986 d_csh='$d_csh'
16987 d_cuserid='$d_cuserid'
16988 d_dbl_dig='$d_dbl_dig'
16989 d_dbminitproto='$d_dbminitproto'
16990 d_difftime='$d_difftime'
16991 d_dirfd='$d_dirfd'
16992 d_dirnamlen='$d_dirnamlen'
16993 d_dlerror='$d_dlerror'
16994 d_dlopen='$d_dlopen'
16995 d_dlsymun='$d_dlsymun'
16996 d_dosuid='$d_dosuid'
16997 d_drand48proto='$d_drand48proto'
16998 d_dup2='$d_dup2'
16999 d_eaccess='$d_eaccess'
17000 d_endgrent='$d_endgrent'
17001 d_endhent='$d_endhent'
17002 d_endnent='$d_endnent'
17003 d_endpent='$d_endpent'
17004 d_endpwent='$d_endpwent'
17005 d_endsent='$d_endsent'
17006 d_eofnblk='$d_eofnblk'
17007 d_eunice='$d_eunice'
17008 d_fchdir='$d_fchdir'
17009 d_fchmod='$d_fchmod'
17010 d_fchown='$d_fchown'
17011 d_fcntl='$d_fcntl'
17012 d_fcntl_can_lock='$d_fcntl_can_lock'
17013 d_fd_macros='$d_fd_macros'
17014 d_fd_set='$d_fd_set'
17015 d_fds_bits='$d_fds_bits'
17016 d_fgetpos='$d_fgetpos'
17017 d_finite='$d_finite'
17018 d_finitel='$d_finitel'
17019 d_flexfnam='$d_flexfnam'
17020 d_flock='$d_flock'
17021 d_flockproto='$d_flockproto'
17022 d_fork='$d_fork'
17023 d_fp_class='$d_fp_class'
17024 d_fpathconf='$d_fpathconf'
17025 d_fpclass='$d_fpclass'
17026 d_fpclassify='$d_fpclassify'
17027 d_fpclassl='$d_fpclassl'
17028 d_fpos64_t='$d_fpos64_t'
17029 d_frexpl='$d_frexpl'
17030 d_fs_data_s='$d_fs_data_s'
17031 d_fseeko='$d_fseeko'
17032 d_fsetpos='$d_fsetpos'
17033 d_fstatfs='$d_fstatfs'
17034 d_fstatvfs='$d_fstatvfs'
17035 d_fsync='$d_fsync'
17036 d_ftello='$d_ftello'
17037 d_ftime='$d_ftime'
17038 d_getcwd='$d_getcwd'
17039 d_getespwnam='$d_getespwnam'
17040 d_getfsstat='$d_getfsstat'
17041 d_getgrent='$d_getgrent'
17042 d_getgrps='$d_getgrps'
17043 d_gethbyaddr='$d_gethbyaddr'
17044 d_gethbyname='$d_gethbyname'
17045 d_gethent='$d_gethent'
17046 d_gethname='$d_gethname'
17047 d_gethostprotos='$d_gethostprotos'
17048 d_getitimer='$d_getitimer'
17049 d_getlogin='$d_getlogin'
17050 d_getmnt='$d_getmnt'
17051 d_getmntent='$d_getmntent'
17052 d_getnbyaddr='$d_getnbyaddr'
17053 d_getnbyname='$d_getnbyname'
17054 d_getnent='$d_getnent'
17055 d_getnetprotos='$d_getnetprotos'
17056 d_getpagsz='$d_getpagsz'
17057 d_getpbyname='$d_getpbyname'
17058 d_getpbynumber='$d_getpbynumber'
17059 d_getpent='$d_getpent'
17060 d_getpgid='$d_getpgid'
17061 d_getpgrp2='$d_getpgrp2'
17062 d_getpgrp='$d_getpgrp'
17063 d_getppid='$d_getppid'
17064 d_getprior='$d_getprior'
17065 d_getprotoprotos='$d_getprotoprotos'
17066 d_getprpwnam='$d_getprpwnam'
17067 d_getpwent='$d_getpwent'
17068 d_getsbyname='$d_getsbyname'
17069 d_getsbyport='$d_getsbyport'
17070 d_getsent='$d_getsent'
17071 d_getservprotos='$d_getservprotos'
17072 d_getspnam='$d_getspnam'
17073 d_gettimeod='$d_gettimeod'
17074 d_gnulibc='$d_gnulibc'
17075 d_grpasswd='$d_grpasswd'
17076 d_hasmntopt='$d_hasmntopt'
17077 d_htonl='$d_htonl'
17078 d_index='$d_index'
17079 d_inetaton='$d_inetaton'
17080 d_int64_t='$d_int64_t'
17081 d_isascii='$d_isascii'
17082 d_isfinite='$d_isfinite'
17083 d_isinf='$d_isinf'
17084 d_isnan='$d_isnan'
17085 d_isnanl='$d_isnanl'
17086 d_killpg='$d_killpg'
17087 d_lchown='$d_lchown'
17088 d_ldbl_dig='$d_ldbl_dig'
17089 d_link='$d_link'
17090 d_locconv='$d_locconv'
17091 d_lockf='$d_lockf'
17092 d_longdbl='$d_longdbl'
17093 d_longlong='$d_longlong'
17094 d_lseekproto='$d_lseekproto'
17095 d_lstat='$d_lstat'
17096 d_madvise='$d_madvise'
17097 d_mblen='$d_mblen'
17098 d_mbstowcs='$d_mbstowcs'
17099 d_mbtowc='$d_mbtowc'
17100 d_memchr='$d_memchr'
17101 d_memcmp='$d_memcmp'
17102 d_memcpy='$d_memcpy'
17103 d_memmove='$d_memmove'
17104 d_memset='$d_memset'
17105 d_mkdir='$d_mkdir'
17106 d_mkdtemp='$d_mkdtemp'
17107 d_mkfifo='$d_mkfifo'
17108 d_mkstemp='$d_mkstemp'
17109 d_mkstemps='$d_mkstemps'
17110 d_mktime='$d_mktime'
17111 d_mmap='$d_mmap'
17112 d_modfl='$d_modfl'
17113 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17114 d_mprotect='$d_mprotect'
17115 d_msg='$d_msg'
17116 d_msg_ctrunc='$d_msg_ctrunc'
17117 d_msg_dontroute='$d_msg_dontroute'
17118 d_msg_oob='$d_msg_oob'
17119 d_msg_peek='$d_msg_peek'
17120 d_msg_proxy='$d_msg_proxy'
17121 d_msgctl='$d_msgctl'
17122 d_msgget='$d_msgget'
17123 d_msghdr_s='$d_msghdr_s'
17124 d_msgrcv='$d_msgrcv'
17125 d_msgsnd='$d_msgsnd'
17126 d_msync='$d_msync'
17127 d_munmap='$d_munmap'
17128 d_mymalloc='$d_mymalloc'
17129 d_nice='$d_nice'
17130 d_nl_langinfo='$d_nl_langinfo'
17131 d_nv_preserves_uv='$d_nv_preserves_uv'
17132 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17133 d_off64_t='$d_off64_t'
17134 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17135 d_oldpthreads='$d_oldpthreads'
17136 d_oldsock='$d_oldsock'
17137 d_open3='$d_open3'
17138 d_pathconf='$d_pathconf'
17139 d_pause='$d_pause'
17140 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17141 d_phostname='$d_phostname'
17142 d_pipe='$d_pipe'
17143 d_poll='$d_poll'
17144 d_portable='$d_portable'
17145 d_procselfexe='$d_procselfexe'
17146 d_pthread_atfork='$d_pthread_atfork'
17147 d_pthread_yield='$d_pthread_yield'
17148 d_pwage='$d_pwage'
17149 d_pwchange='$d_pwchange'
17150 d_pwclass='$d_pwclass'
17151 d_pwcomment='$d_pwcomment'
17152 d_pwexpire='$d_pwexpire'
17153 d_pwgecos='$d_pwgecos'
17154 d_pwpasswd='$d_pwpasswd'
17155 d_pwquota='$d_pwquota'
17156 d_qgcvt='$d_qgcvt'
17157 d_quad='$d_quad'
17158 d_readdir='$d_readdir'
17159 d_readlink='$d_readlink'
17160 d_readv='$d_readv'
17161 d_recvmsg='$d_recvmsg'
17162 d_rename='$d_rename'
17163 d_rewinddir='$d_rewinddir'
17164 d_rmdir='$d_rmdir'
17165 d_safebcpy='$d_safebcpy'
17166 d_safemcpy='$d_safemcpy'
17167 d_sanemcmp='$d_sanemcmp'
17168 d_sbrkproto='$d_sbrkproto'
17169 d_sched_yield='$d_sched_yield'
17170 d_scm_rights='$d_scm_rights'
17171 d_seekdir='$d_seekdir'
17172 d_select='$d_select'
17173 d_sem='$d_sem'
17174 d_semctl='$d_semctl'
17175 d_semctl_semid_ds='$d_semctl_semid_ds'
17176 d_semctl_semun='$d_semctl_semun'
17177 d_semget='$d_semget'
17178 d_semop='$d_semop'
17179 d_sendmsg='$d_sendmsg'
17180 d_setegid='$d_setegid'
17181 d_seteuid='$d_seteuid'
17182 d_setgrent='$d_setgrent'
17183 d_setgrps='$d_setgrps'
17184 d_sethent='$d_sethent'
17185 d_setitimer='$d_setitimer'
17186 d_setlinebuf='$d_setlinebuf'
17187 d_setlocale='$d_setlocale'
17188 d_setnent='$d_setnent'
17189 d_setpent='$d_setpent'
17190 d_setpgid='$d_setpgid'
17191 d_setpgrp2='$d_setpgrp2'
17192 d_setpgrp='$d_setpgrp'
17193 d_setprior='$d_setprior'
17194 d_setproctitle='$d_setproctitle'
17195 d_setpwent='$d_setpwent'
17196 d_setregid='$d_setregid'
17197 d_setresgid='$d_setresgid'
17198 d_setresuid='$d_setresuid'
17199 d_setreuid='$d_setreuid'
17200 d_setrgid='$d_setrgid'
17201 d_setruid='$d_setruid'
17202 d_setsent='$d_setsent'
17203 d_setsid='$d_setsid'
17204 d_setvbuf='$d_setvbuf'
17205 d_sfio='$d_sfio'
17206 d_shm='$d_shm'
17207 d_shmat='$d_shmat'
17208 d_shmatprototype='$d_shmatprototype'
17209 d_shmctl='$d_shmctl'
17210 d_shmdt='$d_shmdt'
17211 d_shmget='$d_shmget'
17212 d_sigaction='$d_sigaction'
17213 d_sigprocmask='$d_sigprocmask'
17214 d_sigsetjmp='$d_sigsetjmp'
17215 d_sockatmark='$d_sockatmark'
17216 d_sockatmarkproto='$d_sockatmarkproto'
17217 d_socket='$d_socket'
17218 d_socklen_t='$d_socklen_t'
17219 d_sockpair='$d_sockpair'
17220 d_socks5_init='$d_socks5_init'
17221 d_sqrtl='$d_sqrtl'
17222 d_sresgproto='$d_sresgproto'
17223 d_sresuproto='$d_sresuproto'
17224 d_statblks='$d_statblks'
17225 d_statfs_f_flags='$d_statfs_f_flags'
17226 d_statfs_s='$d_statfs_s'
17227 d_statvfs='$d_statvfs'
17228 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17229 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17230 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17231 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17232 d_stdio_stream_array='$d_stdio_stream_array'
17233 d_stdiobase='$d_stdiobase'
17234 d_stdstdio='$d_stdstdio'
17235 d_strchr='$d_strchr'
17236 d_strcoll='$d_strcoll'
17237 d_strctcpy='$d_strctcpy'
17238 d_strerrm='$d_strerrm'
17239 d_strerror='$d_strerror'
17240 d_strftime='$d_strftime'
17241 d_strtod='$d_strtod'
17242 d_strtol='$d_strtol'
17243 d_strtold='$d_strtold'
17244 d_strtoll='$d_strtoll'
17245 d_strtoq='$d_strtoq'
17246 d_strtoul='$d_strtoul'
17247 d_strtoull='$d_strtoull'
17248 d_strtouq='$d_strtouq'
17249 d_strxfrm='$d_strxfrm'
17250 d_suidsafe='$d_suidsafe'
17251 d_symlink='$d_symlink'
17252 d_syscall='$d_syscall'
17253 d_syscallproto='$d_syscallproto'
17254 d_sysconf='$d_sysconf'
17255 d_sysernlst='$d_sysernlst'
17256 d_syserrlst='$d_syserrlst'
17257 d_system='$d_system'
17258 d_tcgetpgrp='$d_tcgetpgrp'
17259 d_tcsetpgrp='$d_tcsetpgrp'
17260 d_telldir='$d_telldir'
17261 d_telldirproto='$d_telldirproto'
17262 d_time='$d_time'
17263 d_times='$d_times'
17264 d_truncate='$d_truncate'
17265 d_tzname='$d_tzname'
17266 d_u32align='$d_u32align'
17267 d_ualarm='$d_ualarm'
17268 d_umask='$d_umask'
17269 d_uname='$d_uname'
17270 d_union_semun='$d_union_semun'
17271 d_unordered='$d_unordered'
17272 d_usleep='$d_usleep'
17273 d_usleepproto='$d_usleepproto'
17274 d_ustat='$d_ustat'
17275 d_vendorarch='$d_vendorarch'
17276 d_vendorbin='$d_vendorbin'
17277 d_vendorlib='$d_vendorlib'
17278 d_vfork='$d_vfork'
17279 d_void_closedir='$d_void_closedir'
17280 d_voidsig='$d_voidsig'
17281 d_voidtty='$d_voidtty'
17282 d_volatile='$d_volatile'
17283 d_vprintf='$d_vprintf'
17284 d_wait4='$d_wait4'
17285 d_waitpid='$d_waitpid'
17286 d_wcstombs='$d_wcstombs'
17287 d_wctomb='$d_wctomb'
17288 d_writev='$d_writev'
17289 d_xenix='$d_xenix'
17290 date='$date'
17291 db_hashtype='$db_hashtype'
17292 db_prefixtype='$db_prefixtype'
17293 db_version_major='$db_version_major'
17294 db_version_minor='$db_version_minor'
17295 db_version_patch='$db_version_patch'
17296 defvoidused='$defvoidused'
17297 direntrytype='$direntrytype'
17298 dlext='$dlext'
17299 dlsrc='$dlsrc'
17300 doublesize='$doublesize'
17301 drand01='$drand01'
17302 dynamic_ext='$dynamic_ext'
17303 eagain='$eagain'
17304 ebcdic='$ebcdic'
17305 echo='$echo'
17306 egrep='$egrep'
17307 emacs='$emacs'
17308 eunicefix='$eunicefix'
17309 exe_ext='$exe_ext'
17310 expr='$expr'
17311 extensions='$extensions'
17312 extras='$extras'
17313 fflushNULL='$fflushNULL'
17314 fflushall='$fflushall'
17315 find='$find'
17316 firstmakefile='$firstmakefile'
17317 flex='$flex'
17318 fpossize='$fpossize'
17319 fpostype='$fpostype'
17320 freetype='$freetype'
17321 from='$from'
17322 full_ar='$full_ar'
17323 full_csh='$full_csh'
17324 full_sed='$full_sed'
17325 gccosandvers='$gccosandvers'
17326 gccversion='$gccversion'
17327 gidformat='$gidformat'
17328 gidsign='$gidsign'
17329 gidsize='$gidsize'
17330 gidtype='$gidtype'
17331 glibpth='$glibpth'
17332 gmake='$gmake'
17333 grep='$grep'
17334 groupcat='$groupcat'
17335 groupstype='$groupstype'
17336 gzip='$gzip'
17337 h_fcntl='$h_fcntl'
17338 h_sysfile='$h_sysfile'
17339 hint='$hint'
17340 hostcat='$hostcat'
17341 i16size='$i16size'
17342 i16type='$i16type'
17343 i32size='$i32size'
17344 i32type='$i32type'
17345 i64size='$i64size'
17346 i64type='$i64type'
17347 i8size='$i8size'
17348 i8type='$i8type'
17349 i_arpainet='$i_arpainet'
17350 i_bsdioctl='$i_bsdioctl'
17351 i_db='$i_db'
17352 i_dbm='$i_dbm'
17353 i_dirent='$i_dirent'
17354 i_dld='$i_dld'
17355 i_dlfcn='$i_dlfcn'
17356 i_fcntl='$i_fcntl'
17357 i_float='$i_float'
17358 i_fp='$i_fp'
17359 i_fp_class='$i_fp_class'
17360 i_gdbm='$i_gdbm'
17361 i_grp='$i_grp'
17362 i_ieeefp='$i_ieeefp'
17363 i_inttypes='$i_inttypes'
17364 i_langinfo='$i_langinfo'
17365 i_libutil='$i_libutil'
17366 i_limits='$i_limits'
17367 i_locale='$i_locale'
17368 i_machcthr='$i_machcthr'
17369 i_malloc='$i_malloc'
17370 i_math='$i_math'
17371 i_memory='$i_memory'
17372 i_mntent='$i_mntent'
17373 i_ndbm='$i_ndbm'
17374 i_netdb='$i_netdb'
17375 i_neterrno='$i_neterrno'
17376 i_netinettcp='$i_netinettcp'
17377 i_niin='$i_niin'
17378 i_poll='$i_poll'
17379 i_prot='$i_prot'
17380 i_pthread='$i_pthread'
17381 i_pwd='$i_pwd'
17382 i_rpcsvcdbm='$i_rpcsvcdbm'
17383 i_sfio='$i_sfio'
17384 i_sgtty='$i_sgtty'
17385 i_shadow='$i_shadow'
17386 i_socks='$i_socks'
17387 i_stdarg='$i_stdarg'
17388 i_stddef='$i_stddef'
17389 i_stdlib='$i_stdlib'
17390 i_string='$i_string'
17391 i_sunmath='$i_sunmath'
17392 i_sysaccess='$i_sysaccess'
17393 i_sysdir='$i_sysdir'
17394 i_sysfile='$i_sysfile'
17395 i_sysfilio='$i_sysfilio'
17396 i_sysin='$i_sysin'
17397 i_sysioctl='$i_sysioctl'
17398 i_syslog='$i_syslog'
17399 i_sysmman='$i_sysmman'
17400 i_sysmode='$i_sysmode'
17401 i_sysmount='$i_sysmount'
17402 i_sysndir='$i_sysndir'
17403 i_sysparam='$i_sysparam'
17404 i_sysresrc='$i_sysresrc'
17405 i_syssecrt='$i_syssecrt'
17406 i_sysselct='$i_sysselct'
17407 i_syssockio='$i_syssockio'
17408 i_sysstat='$i_sysstat'
17409 i_sysstatfs='$i_sysstatfs'
17410 i_sysstatvfs='$i_sysstatvfs'
17411 i_systime='$i_systime'
17412 i_systimek='$i_systimek'
17413 i_systimes='$i_systimes'
17414 i_systypes='$i_systypes'
17415 i_sysuio='$i_sysuio'
17416 i_sysun='$i_sysun'
17417 i_sysutsname='$i_sysutsname'
17418 i_sysvfs='$i_sysvfs'
17419 i_syswait='$i_syswait'
17420 i_termio='$i_termio'
17421 i_termios='$i_termios'
17422 i_time='$i_time'
17423 i_unistd='$i_unistd'
17424 i_ustat='$i_ustat'
17425 i_utime='$i_utime'
17426 i_values='$i_values'
17427 i_varargs='$i_varargs'
17428 i_varhdr='$i_varhdr'
17429 i_vfork='$i_vfork'
17430 ignore_versioned_solibs='$ignore_versioned_solibs'
17431 inc_version_list='$inc_version_list'
17432 inc_version_list_init='$inc_version_list_init'
17433 incpath='$incpath'
17434 inews='$inews'
17435 installarchlib='$installarchlib'
17436 installbin='$installbin'
17437 installman1dir='$installman1dir'
17438 installman3dir='$installman3dir'
17439 installprefix='$installprefix'
17440 installprefixexp='$installprefixexp'
17441 installprivlib='$installprivlib'
17442 installscript='$installscript'
17443 installsitearch='$installsitearch'
17444 installsitebin='$installsitebin'
17445 installsitelib='$installsitelib'
17446 installstyle='$installstyle'
17447 installusrbinperl='$installusrbinperl'
17448 installvendorarch='$installvendorarch'
17449 installvendorbin='$installvendorbin'
17450 installvendorlib='$installvendorlib'
17451 intsize='$intsize'
17452 issymlink='$issymlink'
17453 ivdformat='$ivdformat'
17454 ivsize='$ivsize'
17455 ivtype='$ivtype'
17456 known_extensions='$known_extensions'
17457 ksh='$ksh'
17458 ld='$ld'
17459 lddlflags='$lddlflags'
17460 ldflags='$ldflags'
17461 ldflags_uselargefiles='$ldflags_uselargefiles'
17462 ldlibpthname='$ldlibpthname'
17463 less='$less'
17464 lib_ext='$lib_ext'
17465 libc='$libc'
17466 libperl='$libperl'
17467 libpth='$libpth'
17468 libs='$libs'
17469 libsdirs='$libsdirs'
17470 libsfiles='$libsfiles'
17471 libsfound='$libsfound'
17472 libspath='$libspath'
17473 libswanted='$libswanted'
17474 libswanted_uselargefiles='$libswanted_uselargefiles'
17475 line='$line'
17476 lint='$lint'
17477 lkflags='$lkflags'
17478 ln='$ln'
17479 lns='$lns'
17480 locincpth='$locincpth'
17481 loclibpth='$loclibpth'
17482 longdblsize='$longdblsize'
17483 longlongsize='$longlongsize'
17484 longsize='$longsize'
17485 lp='$lp'
17486 lpr='$lpr'
17487 ls='$ls'
17488 lseeksize='$lseeksize'
17489 lseektype='$lseektype'
17490 mail='$mail'
17491 mailx='$mailx'
17492 make='$make'
17493 make_set_make='$make_set_make'
17494 mallocobj='$mallocobj'
17495 mallocsrc='$mallocsrc'
17496 malloctype='$malloctype'
17497 man1dir='$man1dir'
17498 man1direxp='$man1direxp'
17499 man1ext='$man1ext'
17500 man3dir='$man3dir'
17501 man3direxp='$man3direxp'
17502 man3ext='$man3ext'
17503 mips_type='$mips_type'
17504 mkdir='$mkdir'
17505 mmaptype='$mmaptype'
17506 modetype='$modetype'
17507 more='$more'
17508 multiarch='$multiarch'
17509 mv='$mv'
17510 myarchname='$myarchname'
17511 mydomain='$mydomain'
17512 myhostname='$myhostname'
17513 myuname='$myuname'
17514 n='$n'
17515 need_va_copy='$need_va_copy'
17516 netdb_hlen_type='$netdb_hlen_type'
17517 netdb_host_type='$netdb_host_type'
17518 netdb_name_type='$netdb_name_type'
17519 netdb_net_type='$netdb_net_type'
17520 nm='$nm'
17521 nm_opt='$nm_opt'
17522 nm_so_opt='$nm_so_opt'
17523 nonxs_ext='$nonxs_ext'
17524 nroff='$nroff'
17525 nvEUformat='$nvEUformat'
17526 nvFUformat='$nvFUformat'
17527 nvGUformat='$nvGUformat'
17528 nveformat='$nveformat'
17529 nvfformat='$nvfformat'
17530 nvgformat='$nvgformat'
17531 nvsize='$nvsize'
17532 nvtype='$nvtype'
17533 o_nonblock='$o_nonblock'
17534 obj_ext='$obj_ext'
17535 old_pthread_create_joinable='$old_pthread_create_joinable'
17536 optimize='$optimize'
17537 orderlib='$orderlib'
17538 osname='$osname'
17539 osvers='$osvers'
17540 otherlibdirs='$otherlibdirs'
17541 package='$package'
17542 pager='$pager'
17543 passcat='$passcat'
17544 patchlevel='$patchlevel'
17545 path_sep='$path_sep'
17546 perl5='$perl5'
17547 perl='$perl'
17548 perl_patchlevel='$perl_patchlevel'
17549 perladmin='$perladmin'
17550 perllibs='$perllibs'
17551 perlpath='$perlpath'
17552 pg='$pg'
17553 phostname='$phostname'
17554 pidtype='$pidtype'
17555 plibpth='$plibpth'
17556 pm_apiversion='$pm_apiversion'
17557 pmake='$pmake'
17558 pr='$pr'
17559 prefix='$prefix'
17560 prefixexp='$prefixexp'
17561 privlib='$privlib'
17562 privlibexp='$privlibexp'
17563 procselfexe='$procselfexe'
17564 prototype='$prototype'
17565 ptrsize='$ptrsize'
17566 quadkind='$quadkind'
17567 quadtype='$quadtype'
17568 randbits='$randbits'
17569 randfunc='$randfunc'
17570 randseedtype='$randseedtype'
17571 ranlib='$ranlib'
17572 rd_nodata='$rd_nodata'
17573 revision='$revision'
17574 rm='$rm'
17575 rmail='$rmail'
17576 run='$run'
17577 runnm='$runnm'
17578 sPRIEUldbl='$sPRIEUldbl'
17579 sPRIFUldbl='$sPRIFUldbl'
17580 sPRIGUldbl='$sPRIGUldbl'
17581 sPRIXU64='$sPRIXU64'
17582 sPRId64='$sPRId64'
17583 sPRIeldbl='$sPRIeldbl'
17584 sPRIfldbl='$sPRIfldbl'
17585 sPRIgldbl='$sPRIgldbl'
17586 sPRIi64='$sPRIi64'
17587 sPRIo64='$sPRIo64'
17588 sPRIu64='$sPRIu64'
17589 sPRIx64='$sPRIx64'
17590 sSCNfldbl='$sSCNfldbl'
17591 sched_yield='$sched_yield'
17592 scriptdir='$scriptdir'
17593 scriptdirexp='$scriptdirexp'
17594 sed='$sed'
17595 seedfunc='$seedfunc'
17596 selectminbits='$selectminbits'
17597 selecttype='$selecttype'
17598 sendmail='$sendmail'
17599 sh='$sh'
17600 shar='$shar'
17601 sharpbang='$sharpbang'
17602 shmattype='$shmattype'
17603 shortsize='$shortsize'
17604 shrpenv='$shrpenv'
17605 shsharp='$shsharp'
17606 sig_count='$sig_count'
17607 sig_name='$sig_name'
17608 sig_name_init='$sig_name_init'
17609 sig_num='$sig_num'
17610 sig_num_init='$sig_num_init'
17611 sig_size='$sig_size'
17612 signal_t='$signal_t'
17613 sitearch='$sitearch'
17614 sitearchexp='$sitearchexp'
17615 sitebin='$sitebin'
17616 sitebinexp='$sitebinexp'
17617 sitelib='$sitelib'
17618 sitelib_stem='$sitelib_stem'
17619 sitelibexp='$sitelibexp'
17620 siteprefix='$siteprefix'
17621 siteprefixexp='$siteprefixexp'
17622 sizesize='$sizesize'
17623 sizetype='$sizetype'
17624 sleep='$sleep'
17625 smail='$smail'
17626 so='$so'
17627 sockethdr='$sockethdr'
17628 socketlib='$socketlib'
17629 socksizetype='$socksizetype'
17630 sort='$sort'
17631 spackage='$spackage'
17632 spitshell='$spitshell'
17633 src='$src'
17634 ssizetype='$ssizetype'
17635 startperl='$startperl'
17636 startsh='$startsh'
17637 static_ext='$static_ext'
17638 stdchar='$stdchar'
17639 stdio_base='$stdio_base'
17640 stdio_bufsiz='$stdio_bufsiz'
17641 stdio_cnt='$stdio_cnt'
17642 stdio_filbuf='$stdio_filbuf'
17643 stdio_ptr='$stdio_ptr'
17644 stdio_stream_array='$stdio_stream_array'
17645 strings='$strings'
17646 submit='$submit'
17647 subversion='$subversion'
17648 sysman='$sysman'
17649 tail='$tail'
17650 tar='$tar'
17651 targetarch='$targetarch'
17652 tbl='$tbl'
17653 tee='$tee'
17654 test='$test'
17655 timeincl='$timeincl'
17656 timetype='$timetype'
17657 to='$to'
17658 touch='$touch'
17659 tr='$tr'
17660 trnl='$trnl'
17661 troff='$troff'
17662 u16size='$u16size'
17663 u16type='$u16type'
17664 u32size='$u32size'
17665 u32type='$u32type'
17666 u64size='$u64size'
17667 u64type='$u64type'
17668 u8size='$u8size'
17669 u8type='$u8type'
17670 uidformat='$uidformat'
17671 uidsign='$uidsign'
17672 uidsize='$uidsize'
17673 uidtype='$uidtype'
17674 uname='$uname'
17675 uniq='$uniq'
17676 uquadtype='$uquadtype'
17677 use5005threads='$use5005threads'
17678 use64bitall='$use64bitall'
17679 use64bitint='$use64bitint'
17680 usecrosscompile='$usecrosscompile'
17681 usedl='$usedl'
17682 useithreads='$useithreads'
17683 uselargefiles='$uselargefiles'
17684 uselongdouble='$uselongdouble'
17685 usemorebits='$usemorebits'
17686 usemultiplicity='$usemultiplicity'
17687 usemymalloc='$usemymalloc'
17688 usenm='$usenm'
17689 useopcode='$useopcode'
17690 useperlio='$useperlio'
17691 useposix='$useposix'
17692 usereentrant='$usereentrant'
17693 usesfio='$usesfio'
17694 useshrplib='$useshrplib'
17695 usesocks='$usesocks'
17696 usethreads='$usethreads'
17697 usevendorprefix='$usevendorprefix'
17698 usevfork='$usevfork'
17699 usrinc='$usrinc'
17700 uuname='$uuname'
17701 uvXUformat='$uvXUformat'
17702 uvoformat='$uvoformat'
17703 uvsize='$uvsize'
17704 uvtype='$uvtype'
17705 uvuformat='$uvuformat'
17706 uvxformat='$uvxformat'
17707 vendorarch='$vendorarch'
17708 vendorarchexp='$vendorarchexp'
17709 vendorbin='$vendorbin'
17710 vendorbinexp='$vendorbinexp'
17711 vendorlib='$vendorlib'
17712 vendorlib_stem='$vendorlib_stem'
17713 vendorlibexp='$vendorlibexp'
17714 vendorprefix='$vendorprefix'
17715 vendorprefixexp='$vendorprefixexp'
17716 version='$version'
17717 version_patchlevel_string='$version_patchlevel_string'
17718 versiononly='$versiononly'
17719 vi='$vi'
17720 voidflags='$voidflags'
17721 xlibpth='$xlibpth'
17722 xs_apiversion='$xs_apiversion'
17723 yacc='$yacc'
17724 yaccflags='$yaccflags'
17725 zcat='$zcat'
17726 zip='$zip'
17727 EOT
17728
17729 : Add in command line options if available
17730 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17731
17732 : add special variables
17733 $test -f $src/patchlevel.h && \
17734 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17735 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17736 echo "PERL_CONFIG_SH=true" >>config.sh
17737
17738 : propagate old symbols
17739 if $test -f UU/config.sh; then
17740         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17741         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17742         $sort | $uniq -u >UU/oldsyms
17743         set X `cat UU/oldsyms`
17744         shift
17745         case $# in
17746         0) ;;
17747         *)
17748                 cat <<EOM
17749 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17750 EOM
17751                 echo "# Variables propagated from previous config.sh file." >>config.sh
17752                 for sym in `cat UU/oldsyms`; do
17753                         echo "    Propagating $hint variable "'$'"$sym..."
17754                         eval 'tmp="$'"${sym}"'"'
17755                         echo "$tmp" | \
17756                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17757                 done
17758                 ;;
17759         esac
17760 fi
17761
17762 : Finish up by extracting the .SH files
17763 case "$alldone" in
17764 exit)
17765         $rm -rf UU
17766         echo "Extraction done."
17767         exit 0
17768         ;;
17769 cont)
17770         ;;
17771 '')
17772         dflt=''
17773         nostick=true
17774         $cat <<EOM
17775
17776 If you'd like to make any changes to the config.sh file before I begin
17777 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17778
17779 EOM
17780         rp="Press return or use a shell escape to edit config.sh:"
17781         . UU/myread
17782         nostick=''
17783         case "$ans" in
17784         '') ;;
17785         *) : in case they cannot read
17786                 sh 1>&4 -c "$ans";;
17787         esac
17788         ;;
17789 esac
17790
17791 : if this fails, just run all the .SH files by hand
17792 . ./config.sh
17793
17794 echo " "
17795 exec 1>&4
17796 pwd=`pwd`
17797 . ./UU/extract
17798 cd $pwd
17799
17800 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17801         dflt=y
17802         case "$silent" in
17803         true) ;;
17804         *)
17805                 $cat <<EOM
17806
17807 Now you need to generate make dependencies by running "$make depend".
17808 You might prefer to run it in background: "$make depend > makedepend.out &"
17809 It can take a while, so you might not want to run it right now.
17810
17811 EOM
17812                 ;;
17813         esac
17814         rp="Run $make depend now?"
17815         . UU/myread
17816         case "$ans" in
17817         y*)
17818                 $make depend && echo "Now you must run '$make'."
17819                 ;;
17820         *)
17821                 echo "You must run '$make depend' then '$make'."
17822                 ;;
17823         esac
17824 elif test -f [Mm]akefile; then
17825         echo " "
17826         echo "Now you must run a $make."
17827 else
17828         echo "Configure done."
17829 fi
17830
17831 if $test -f Policy.sh; then
17832     $cat <<EOM
17833
17834 If you compile $package on a different machine or from a different object
17835 directory, copy the Policy.sh file from this object directory to the
17836 new one before you run Configure -- this will help you with most of
17837 the policy defaults.
17838
17839 EOM
17840 fi
17841 if $test -f config.msg; then
17842     echo "Hmm.  I also noted the following information while running:"
17843     echo " "
17844     $cat config.msg >&4
17845     $rm -f config.msg
17846 fi
17847 $rm -f kit*isdone ark*isdone
17848 $rm -rf UU
17849
17850 : End of Configure
17851