Fudge Config.pm so File::Spec does not croak.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Dec 28 04:17:47 EET 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168 if test -f "/system/gnu_library/bin/ar.pm"; then
169      _exe=".pm"
170 else
171      _exe=""
172 fi
173
174 ccname=''
175 ccversion=''
176 ccsymbols=''
177 cppccsymbols=''
178 cppsymbols=''
179 from=''
180 run=''
181 targetarch=''
182 to=''
183 usecrosscompile=''
184 perllibs=''
185 dynamic_ext=''
186 extensions=''
187 known_extensions=''
188 nonxs_ext=''
189 static_ext=''
190 useopcode=''
191 useposix=''
192 extras=''
193 d_bsd=''
194 d_eunice=''
195 d_xenix=''
196 eunicefix=''
197 Mcc=''
198 ar=''
199 awk=''
200 bash=''
201 bison=''
202 byacc=''
203 cat=''
204 chgrp=''
205 chmod=''
206 chown=''
207 comm=''
208 compress=''
209 cp=''
210 cpio=''
211 cpp=''
212 csh=''
213 date=''
214 echo=''
215 egrep=''
216 emacs=''
217 expr=''
218 find=''
219 flex=''
220 gmake=''
221 grep=''
222 gzip=''
223 inews=''
224 ksh=''
225 less=''
226 line=''
227 lint=''
228 ln=''
229 lp=''
230 lpr=''
231 ls=''
232 mail=''
233 mailx=''
234 make=''
235 mkdir=''
236 more=''
237 mv=''
238 nm=''
239 nroff=''
240 perl=''
241 pg=''
242 pmake=''
243 pr=''
244 rm=''
245 rmail=''
246 sed=''
247 sendmail=''
248 shar=''
249 sleep=''
250 smail=''
251 sort=''
252 submit=''
253 tail=''
254 tar=''
255 tbl=''
256 tee=''
257 test=''
258 touch=''
259 tr=''
260 troff=''
261 uname=''
262 uniq=''
263 uuname=''
264 vi=''
265 zcat=''
266 zip=''
267 full_ar=''
268 full_sed=''
269 libswanted=''
270 hint=''
271 myuname=''
272 osname=''
273 osvers=''
274 Author=''
275 Date=''
276 Header=''
277 Id=''
278 Locker=''
279 Log=''
280 RCSfile=''
281 Revision=''
282 Source=''
283 State=''
284 _a=''
285 _exe=''
286 _o=''
287 archobjs=''
288 exe_ext=''
289 firstmakefile=''
290 lib_ext=''
291 obj_ext=''
292 path_sep=''
293 afs=''
294 afsroot=''
295 alignbytes=''
296 ansi2knr=''
297 archlib=''
298 archlibexp=''
299 d_archlib=''
300 installarchlib=''
301 archname=''
302 myarchname=''
303 d_atolf=''
304 d_atoll=''
305 baserev=''
306 bin=''
307 binexp=''
308 installbin=''
309 bincompat5005=''
310 d_bincompat5005=''
311 byteorder=''
312 cc=''
313 ccflags=''
314 cppflags=''
315 ldflags=''
316 lkflags=''
317 locincpth=''
318 optimize=''
319 cf_email=''
320 cf_by=''
321 cf_time=''
322 charsize=''
323 contains=''
324 cpp_stuff=''
325 cpplast=''
326 cppminus=''
327 cpprun=''
328 cppstdin=''
329 d__fwalk=''
330 d_access=''
331 d_accessx=''
332 d_alarm=''
333 d_attribut=''
334 d_bcmp=''
335 d_bcopy=''
336 d_bzero=''
337 d_casti32=''
338 castflags=''
339 d_castneg=''
340 d_chown=''
341 d_chroot=''
342 d_chsize=''
343 d_class=''
344 d_closedir=''
345 d_void_closedir=''
346 d_cmsghdr_s=''
347 d_const=''
348 cryptlib=''
349 d_crypt=''
350 d_csh=''
351 full_csh=''
352 d_cuserid=''
353 d_dbl_dig=''
354 d_dbminitproto=''
355 d_difftime=''
356 d_dirfd=''
357 d_dlerror=''
358 d_dlopen=''
359 d_dlsymun=''
360 d_dosuid=''
361 d_suidsafe=''
362 d_drand48proto=''
363 d_dup2=''
364 d_eaccess=''
365 d_endgrent=''
366 d_endhent=''
367 d_endnent=''
368 d_endpent=''
369 d_endpwent=''
370 d_endsent=''
371 d_fchdir=''
372 d_fchmod=''
373 d_fchown=''
374 d_fcntl=''
375 d_fcntl_can_lock=''
376 d_fd_macros=''
377 d_fd_set=''
378 d_fds_bits=''
379 d_fgetpos=''
380 d_finite=''
381 d_finitel=''
382 d_flexfnam=''
383 d_flock=''
384 d_flockproto=''
385 d_fork=''
386 d_fp_class=''
387 d_fpclass=''
388 d_fpclassify=''
389 d_fpclassl=''
390 d_fpos64_t=''
391 d_frexpl=''
392 d_fs_data_s=''
393 d_fseeko=''
394 d_fsetpos=''
395 d_fstatfs=''
396 d_fsync=''
397 d_ftello=''
398 d_ftime=''
399 d_gettimeod=''
400 d_Gconvert=''
401 d_getcwd=''
402 d_getespwnam=''
403 d_getfsstat=''
404 d_getgrent=''
405 d_getgrps=''
406 d_gethbyaddr=''
407 d_gethbyname=''
408 d_gethent=''
409 aphostname=''
410 d_gethname=''
411 d_phostname=''
412 d_uname=''
413 d_gethostprotos=''
414 d_getitimer=''
415 d_getlogin=''
416 d_getmnt=''
417 d_getmntent=''
418 d_getnbyaddr=''
419 d_getnbyname=''
420 d_getnent=''
421 d_getnetprotos=''
422 d_getpagsz=''
423 d_getpent=''
424 d_getpgid=''
425 d_getpgrp2=''
426 d_bsdgetpgrp=''
427 d_getpgrp=''
428 d_getppid=''
429 d_getprior=''
430 d_getpbyname=''
431 d_getpbynumber=''
432 d_getprotoprotos=''
433 d_getprpwnam=''
434 d_getpwent=''
435 d_getsent=''
436 d_getservprotos=''
437 d_getspnam=''
438 d_getsbyname=''
439 d_getsbyport=''
440 d_gnulibc=''
441 d_hasmntopt=''
442 d_htonl=''
443 d_inetaton=''
444 d_int64_t=''
445 d_isascii=''
446 d_isfinite=''
447 d_isinf=''
448 d_isnan=''
449 d_isnanl=''
450 d_killpg=''
451 d_lchown=''
452 d_ldbl_dig=''
453 d_link=''
454 d_locconv=''
455 d_lockf=''
456 d_longdbl=''
457 longdblsize=''
458 d_longlong=''
459 longlongsize=''
460 d_lseekproto=''
461 d_lstat=''
462 d_madvise=''
463 d_mblen=''
464 d_mbstowcs=''
465 d_mbtowc=''
466 d_memchr=''
467 d_memcmp=''
468 d_memcpy=''
469 d_memmove=''
470 d_memset=''
471 d_mkdir=''
472 d_mkdtemp=''
473 d_mkfifo=''
474 d_mkstemp=''
475 d_mkstemps=''
476 d_mktime=''
477 d_mmap=''
478 mmaptype=''
479 d_modfl=''
480 d_modfl_pow32_bug=''
481 d_mprotect=''
482 d_msg=''
483 d_msgctl=''
484 d_msgget=''
485 d_msghdr_s=''
486 d_msgrcv=''
487 d_msgsnd=''
488 d_msync=''
489 d_munmap=''
490 d_nice=''
491 d_nl_langinfo=''
492 d_off64_t=''
493 d_open3=''
494 d_fpathconf=''
495 d_pathconf=''
496 d_pause=''
497 d_pipe=''
498 d_poll=''
499 d_portable=''
500 d_procselfexe=''
501 procselfexe=''
502 d_old_pthread_create_joinable=''
503 old_pthread_create_joinable=''
504 d_pthread_atfork=''
505 d_pthread_yield=''
506 d_sched_yield=''
507 sched_yield=''
508 d_qgcvt=''
509 d_readdir=''
510 d_rewinddir=''
511 d_seekdir=''
512 d_telldir=''
513 d_readlink=''
514 d_readv=''
515 d_recvmsg=''
516 d_rename=''
517 d_rmdir=''
518 d_safebcpy=''
519 d_safemcpy=''
520 d_sanemcmp=''
521 d_sbrkproto=''
522 d_select=''
523 d_sem=''
524 d_semctl=''
525 d_semget=''
526 d_semop=''
527 d_sendmsg=''
528 d_setegid=''
529 d_seteuid=''
530 d_setgrent=''
531 d_setgrps=''
532 d_sethent=''
533 d_setitimer=''
534 d_setlinebuf=''
535 d_setlocale=''
536 d_setnent=''
537 d_setpent=''
538 d_setpgid=''
539 d_setpgrp2=''
540 d_bsdsetpgrp=''
541 d_setpgrp=''
542 d_setprior=''
543 d_setproctitle=''
544 d_setpwent=''
545 d_setregid=''
546 d_setresgid=''
547 d_setresuid=''
548 d_setreuid=''
549 d_setrgid=''
550 d_setruid=''
551 d_setsent=''
552 d_setsid=''
553 d_setvbuf=''
554 d_sfio=''
555 usesfio=''
556 d_shm=''
557 d_shmat=''
558 d_shmatprototype=''
559 shmattype=''
560 d_shmctl=''
561 d_shmdt=''
562 d_shmget=''
563 d_sigaction=''
564 d_sigprocmask=''
565 d_sigsetjmp=''
566 d_sockatmark=''
567 d_sockatmarkproto=''
568 d_msg_ctrunc=''
569 d_msg_dontroute=''
570 d_msg_oob=''
571 d_msg_peek=''
572 d_msg_proxy=''
573 d_oldsock=''
574 d_scm_rights=''
575 d_socket=''
576 d_sockpair=''
577 sockethdr=''
578 socketlib=''
579 d_socklen_t=''
580 d_socks5_init=''
581 d_sqrtl=''
582 d_sresgproto=''
583 d_sresuproto=''
584 d_statblks=''
585 d_statfs_f_flags=''
586 d_statfs_s=''
587 d_fstatvfs=''
588 d_statvfs=''
589 d_stdio_cnt_lval=''
590 d_stdio_ptr_lval=''
591 d_stdio_ptr_lval_nochange_cnt=''
592 d_stdio_ptr_lval_sets_cnt=''
593 d_stdiobase=''
594 d_stdstdio=''
595 stdio_base=''
596 stdio_bufsiz=''
597 stdio_cnt=''
598 stdio_filbuf=''
599 stdio_ptr=''
600 d_index=''
601 d_strchr=''
602 d_strcoll=''
603 d_strctcpy=''
604 d_strerrm=''
605 d_strerror=''
606 d_sysernlst=''
607 d_syserrlst=''
608 d_strftime=''
609 d_strtod=''
610 d_strtol=''
611 d_strtold=''
612 d_strtoll=''
613 d_strtoq=''
614 d_strtoul=''
615 d_strtoull=''
616 d_strtouq=''
617 d_strxfrm=''
618 d_symlink=''
619 d_syscall=''
620 d_syscallproto=''
621 d_sysconf=''
622 d_system=''
623 d_tcgetpgrp=''
624 d_tcsetpgrp=''
625 d_telldirproto=''
626 d_time=''
627 timetype=''
628 clocktype=''
629 d_times=''
630 d_truncate=''
631 d_tzname=''
632 d_u32align=''
633 d_ualarm=''
634 d_umask=''
635 d_semctl_semid_ds=''
636 d_semctl_semun=''
637 d_union_semun=''
638 d_unordered=''
639 d_usleep=''
640 d_usleepproto=''
641 d_ustat=''
642 d_vfork=''
643 usevfork=''
644 d_voidsig=''
645 signal_t=''
646 d_volatile=''
647 d_charvspr=''
648 d_vprintf=''
649 d_wait4=''
650 d_waitpid=''
651 d_wcstombs=''
652 d_wctomb=''
653 d_writev=''
654 dlext=''
655 cccdlflags=''
656 ccdlflags=''
657 dlsrc=''
658 ld=''
659 lddlflags=''
660 usedl=''
661 doublesize=''
662 ebcdic=''
663 fflushNULL=''
664 fflushall=''
665 fpossize=''
666 fpostype=''
667 gccosandvers=''
668 gccversion=''
669 gidformat=''
670 gidsign=''
671 gidsize=''
672 gidtype=''
673 groupstype=''
674 h_fcntl=''
675 h_sysfile=''
676 i_arpainet=''
677 db_hashtype=''
678 db_prefixtype=''
679 db_version_major=''
680 db_version_minor=''
681 db_version_patch=''
682 i_db=''
683 i_dbm=''
684 i_rpcsvcdbm=''
685 d_dirnamlen=''
686 direntrytype=''
687 i_dirent=''
688 i_dld=''
689 i_dlfcn=''
690 i_fcntl=''
691 i_float=''
692 i_fp=''
693 i_fp_class=''
694 i_gdbm=''
695 d_grpasswd=''
696 i_grp=''
697 i_ieeefp=''
698 i_inttypes=''
699 i_langinfo=''
700 i_libutil=''
701 i_limits=''
702 i_locale=''
703 i_machcthr=''
704 i_malloc=''
705 i_math=''
706 i_memory=''
707 i_mntent=''
708 i_ndbm=''
709 i_netdb=''
710 i_neterrno=''
711 i_netinettcp=''
712 i_niin=''
713 i_sysin=''
714 i_poll=''
715 i_prot=''
716 i_pthread=''
717 d_pwage=''
718 d_pwchange=''
719 d_pwclass=''
720 d_pwcomment=''
721 d_pwexpire=''
722 d_pwgecos=''
723 d_pwpasswd=''
724 d_pwquota=''
725 i_pwd=''
726 i_sfio=''
727 i_shadow=''
728 i_socks=''
729 i_stddef=''
730 i_stdlib=''
731 i_string=''
732 strings=''
733 i_sunmath=''
734 i_sysaccess=''
735 i_sysdir=''
736 i_sysfile=''
737 d_voidtty=''
738 i_bsdioctl=''
739 i_sysfilio=''
740 i_sysioctl=''
741 i_syssockio=''
742 i_syslog=''
743 i_sysmman=''
744 i_sysmode=''
745 i_sysmount=''
746 i_sysndir=''
747 i_sysparam=''
748 i_sysresrc=''
749 i_syssecrt=''
750 i_sysselct=''
751 i_sysstat=''
752 i_sysstatfs=''
753 i_sysstatvfs=''
754 i_systimes=''
755 i_systypes=''
756 i_sysuio=''
757 i_sysun=''
758 i_sysutsname=''
759 i_sysvfs=''
760 i_syswait=''
761 i_sgtty=''
762 i_termio=''
763 i_termios=''
764 i_systime=''
765 i_systimek=''
766 i_time=''
767 timeincl=''
768 i_unistd=''
769 i_ustat=''
770 i_utime=''
771 i_values=''
772 i_stdarg=''
773 i_varargs=''
774 i_varhdr=''
775 i_vfork=''
776 inc_version_list=''
777 inc_version_list_init=''
778 installprefix=''
779 installprefixexp=''
780 installstyle=''
781 installusrbinperl=''
782 intsize=''
783 longsize=''
784 shortsize=''
785 issymlink=''
786 libc=''
787 ldlibpthname=''
788 libperl=''
789 shrpenv=''
790 useshrplib=''
791 glibpth=''
792 libpth=''
793 loclibpth=''
794 plibpth=''
795 xlibpth=''
796 ignore_versioned_solibs=''
797 libs=''
798 libsdirs=''
799 libsfiles=''
800 libsfound=''
801 libspath=''
802 lns=''
803 d_PRIEUldbl=''
804 d_PRIFUldbl=''
805 d_PRIGUldbl=''
806 d_PRIeldbl=''
807 d_PRIfldbl=''
808 d_PRIgldbl=''
809 d_SCNfldbl=''
810 sPRIEUldbl=''
811 sPRIFUldbl=''
812 sPRIGUldbl=''
813 sPRIeldbl=''
814 sPRIfldbl=''
815 sPRIgldbl=''
816 sSCNfldbl=''
817 lseeksize=''
818 lseektype=''
819 make_set_make=''
820 d_mymalloc=''
821 freetype=''
822 mallocobj=''
823 mallocsrc=''
824 malloctype=''
825 usemymalloc=''
826 installman1dir=''
827 man1dir=''
828 man1direxp=''
829 man1ext=''
830 installman3dir=''
831 man3dir=''
832 man3direxp=''
833 man3ext=''
834 modetype=''
835 multiarch=''
836 mydomain=''
837 myhostname=''
838 phostname=''
839 c=''
840 n=''
841 d_eofnblk=''
842 eagain=''
843 o_nonblock=''
844 rd_nodata=''
845 need_va_copy=''
846 netdb_hlen_type=''
847 netdb_host_type=''
848 netdb_name_type=''
849 netdb_net_type=''
850 groupcat=''
851 hostcat=''
852 passcat=''
853 orderlib=''
854 ranlib=''
855 d_perl_otherlibdirs=''
856 otherlibdirs=''
857 package=''
858 spackage=''
859 pager=''
860 api_revision=''
861 api_subversion=''
862 api_version=''
863 api_versionstring=''
864 patchlevel=''
865 perl_patchlevel=''
866 revision=''
867 subversion=''
868 version=''
869 version_patchlevel_string=''
870 perl5=''
871 perladmin=''
872 perlpath=''
873 d_nv_preserves_uv=''
874 d_nv_preserves_uv_bits=''
875 i16size=''
876 i16type=''
877 i32size=''
878 i32type=''
879 i64size=''
880 i64type=''
881 i8size=''
882 i8type=''
883 ivsize=''
884 ivtype=''
885 nvsize=''
886 nvtype=''
887 u16size=''
888 u16type=''
889 u32size=''
890 u32type=''
891 u64size=''
892 u64type=''
893 u8size=''
894 u8type=''
895 uvsize=''
896 uvtype=''
897 ivdformat=''
898 nvEUformat=''
899 nvFUformat=''
900 nvGUformat=''
901 nveformat=''
902 nvfformat=''
903 nvgformat=''
904 uvXUformat=''
905 uvoformat=''
906 uvuformat=''
907 uvxformat=''
908 pidtype=''
909 prefix=''
910 prefixexp=''
911 installprivlib=''
912 privlib=''
913 privlibexp=''
914 prototype=''
915 ptrsize=''
916 d_PRIXU64=''
917 d_PRId64=''
918 d_PRIi64=''
919 d_PRIo64=''
920 d_PRIu64=''
921 d_PRIx64=''
922 sPRIXU64=''
923 sPRId64=''
924 sPRIi64=''
925 sPRIo64=''
926 sPRIu64=''
927 sPRIx64=''
928 d_quad=''
929 quadkind=''
930 quadtype=''
931 uquadtype=''
932 drand01=''
933 randbits=''
934 randfunc=''
935 randseedtype=''
936 seedfunc=''
937 installscript=''
938 scriptdir=''
939 scriptdirexp=''
940 selectminbits=''
941 selecttype=''
942 sh=''
943 sig_count=''
944 sig_name=''
945 sig_name_init=''
946 sig_num=''
947 sig_num_init=''
948 sig_size=''
949 installsitearch=''
950 sitearch=''
951 sitearchexp=''
952 installsitebin=''
953 sitebin=''
954 sitebinexp=''
955 installsitelib=''
956 sitelib=''
957 sitelib_stem=''
958 sitelibexp=''
959 siteprefix=''
960 siteprefixexp=''
961 sizesize=''
962 sizetype=''
963 so=''
964 socksizetype=''
965 sharpbang=''
966 shsharp=''
967 spitshell=''
968 src=''
969 ssizetype=''
970 startperl=''
971 startsh=''
972 stdchar=''
973 d_stdio_stream_array=''
974 stdio_stream_array=''
975 sysman=''
976 trnl=''
977 uidformat=''
978 uidsign=''
979 uidsize=''
980 uidtype=''
981 archname64=''
982 use64bitall=''
983 use64bitint=''
984 ccflags_uselargefiles=''
985 ldflags_uselargefiles=''
986 libswanted_uselargefiles=''
987 uselargefiles=''
988 uselongdouble=''
989 usemorebits=''
990 usemultiplicity=''
991 nm_opt=''
992 nm_so_opt=''
993 runnm=''
994 usenm=''
995 useperlio=''
996 usesocks=''
997 d_oldpthreads=''
998 use5005threads=''
999 useithreads=''
1000 usereentrant=''
1001 usethreads=''
1002 incpath=''
1003 mips_type=''
1004 usrinc=''
1005 d_vendorarch=''
1006 installvendorarch=''
1007 vendorarch=''
1008 vendorarchexp=''
1009 d_vendorbin=''
1010 installvendorbin=''
1011 vendorbin=''
1012 vendorbinexp=''
1013 d_vendorlib=''
1014 installvendorlib=''
1015 vendorlib=''
1016 vendorlib_stem=''
1017 vendorlibexp=''
1018 usevendorprefix=''
1019 vendorprefix=''
1020 vendorprefixexp=''
1021 versiononly=''
1022 defvoidused=''
1023 voidflags=''
1024 pm_apiversion=''
1025 xs_apiversion=''
1026 yacc=''
1027 yaccflags=''
1028 CONFIG=''
1029
1030 define='define'
1031 undef='undef'
1032 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1033 rmlist=''
1034
1035 : We must find out about Eunice early
1036 eunicefix=':'
1037 if test -f /etc/unixtovms; then
1038         eunicefix=/etc/unixtovms
1039 fi
1040 if test -f /etc/unixtovms.exe; then
1041         eunicefix=/etc/unixtovms.exe
1042 fi
1043
1044 i_whoami=''
1045 ccname=''
1046 ccversion=''
1047 perllibs=''
1048 : set useposix=false in your hint file to disable the POSIX extension.
1049 useposix=true
1050 : set useopcode=false in your hint file to disable the Opcode extension.
1051 useopcode=true
1052 : Trailing extension.  Override this in a hint file, if needed.
1053 : Extra object files, if any, needed on this platform.
1054 archobjs=''
1055 archname=''
1056 : Possible local include directories to search.
1057 : Set locincpth to "" in a hint file to defeat local include searches.
1058 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1059 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1060 :
1061 : no include file wanted by default
1062 inclwanted=''
1063
1064 groupstype=''
1065 libnames=''
1066 : change the next line if compiling for Xenix/286 on Xenix/386
1067 xlibpth='/usr/lib/386 /lib/386'
1068 : Possible local library directories to search.
1069 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1070 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1071
1072 : general looking path for locating libraries
1073 glibpth="/lib /usr/lib $xlibpth"
1074 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1075 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1076 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1077
1078 : Private path used by Configure to find libraries.  Its value
1079 : is prepended to libpth. This variable takes care of special
1080 : machines, like the mips.  Usually, it should be empty.
1081 plibpth=''
1082
1083 : default library list
1084 libswanted=''
1085 : some systems want to use only the non-versioned libso:s
1086 ignore_versioned_solibs=''
1087 archname64=''
1088 ccflags_uselargefiles=''
1089 ldflags_uselargefiles=''
1090 libswanted_uselargefiles=''
1091 : set usemultiplicity on the Configure command line to enable multiplicity.
1092 : set usesocks on the Configure command line to enable socks.
1093 : set usethreads on the Configure command line to enable threads.
1094 usereentrant='undef'
1095 : full support for void wanted by default
1096 defvoidused=15
1097
1098 : List of libraries we want.
1099 : If anyone needs -lnet, put it in a hint file.
1100 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1101 libswanted="$libswanted dld ld sun m c cposix posix"
1102 libswanted="$libswanted ndir dir crypt sec"
1103 libswanted="$libswanted ucb bsd BSD PW x util"
1104 : We probably want to search /usr/shlib before most other libraries.
1105 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1106 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1107 glibpth="/usr/shlib $glibpth"
1108 : Do not use vfork unless overridden by a hint file.
1109 usevfork=false
1110
1111 : Find the basic shell for Bourne shell scripts
1112 case "$sh" in
1113 '')
1114         case "$SYSTYPE" in
1115         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1116         *) xxx='/bin/sh';;
1117         esac
1118         if test -f "$xxx"; then
1119                 sh="$xxx"
1120         else
1121                 : Build up a list and do a single loop so we can 'break' out.
1122                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1123                 for xxx in sh bash ksh pdksh ash; do
1124                         for p in $pth; do
1125                                 try="$try ${p}/${xxx}"
1126                         done
1127                 done
1128                 for xxx in $try; do
1129                         if test -f "$xxx"; then
1130                                 sh="$xxx";
1131                                 break
1132                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1133                                 sh="$xxx";
1134                                 break
1135                         elif test -f "$xxx.exe"; then
1136                                 sh="$xxx";
1137                                 break
1138                         fi
1139                 done
1140         fi
1141         ;;
1142 esac
1143
1144 case "$sh" in
1145 '')     cat >&2 <<EOM
1146 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1147
1148 Usually it's in /bin/sh.  How did you even get this far?
1149 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1150 we'll try to straighten this all out.
1151 EOM
1152         exit 1
1153         ;;
1154 esac
1155
1156 : see if sh knows # comments
1157 if `$sh -c '#' >/dev/null 2>&1`; then
1158         shsharp=true
1159         spitshell=cat
1160         xcat=/bin/cat
1161         test -f $xcat$_exe || xcat=/usr/bin/cat
1162         if test ! -f $xcat$_exe; then
1163                 for p in $paths; do
1164                         if test -f $p/cat$_exe; then
1165                                 xcat=$p/cat
1166                                 break
1167                         fi
1168                 done
1169                 if test ! -f $xcat$_exe; then
1170                         echo "Can't find cat anywhere!"
1171                         exit 1
1172                 fi
1173         fi
1174         echo "#!$xcat" >sharp
1175         $eunicefix sharp
1176         chmod +x sharp
1177         ./sharp > today
1178         if test -s today; then
1179                 sharpbang='#!'
1180         else
1181                 echo "#! $xcat" > sharp
1182                 $eunicefix sharp
1183                 chmod +x sharp
1184                 ./sharp > today
1185                 if test -s today; then
1186                         sharpbang='#! '
1187                 else
1188                         sharpbang=': use '
1189                 fi
1190         fi
1191 else
1192         echo " "
1193         echo "Your $sh doesn't grok # comments--I will strip them later on."
1194         shsharp=false
1195         cd ..
1196         echo "exec grep -v '^[  ]*#'" >spitshell
1197         chmod +x spitshell
1198         $eunicefix spitshell
1199         spitshell=`pwd`/spitshell
1200         cd UU
1201         echo "I presume that if # doesn't work, #! won't work either!"
1202         sharpbang=': use '
1203 fi
1204 rm -f sharp today
1205
1206 : figure out how to guarantee sh startup
1207 case "$startsh" in
1208 '') startsh=${sharpbang}${sh} ;;
1209 *)
1210 esac
1211 cat >sharp <<EOSS
1212 $startsh
1213 set abc
1214 test "$?abc" != 1
1215 EOSS
1216
1217 chmod +x sharp
1218 $eunicefix sharp
1219 if ./sharp; then
1220         : echo "Yup, it does."
1221 else
1222         echo "Hmm... '$startsh' does not guarantee sh startup..."
1223         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1224 fi
1225 rm -f sharp
1226
1227
1228 : Save command line options in file UU/cmdline.opt for later use in
1229 : generating config.sh.
1230 cat > cmdline.opt <<EOSH
1231 # Configure command line arguments.
1232 config_arg0='$0'
1233 config_args='$*'
1234 config_argc=$#
1235 EOSH
1236 argn=1
1237 args_exp=''
1238 args_sep=''
1239 for arg in "$@"; do
1240         cat >>cmdline.opt <<EOSH
1241 config_arg$argn='$arg'
1242 EOSH
1243         # Extreme backslashitis: replace each ' by '"'"'
1244         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1245 $arg
1246 EOC
1247         arg_exp=`cat cmdl.opt`
1248         args_exp="$args_exp$args_sep'$arg_exp'"
1249         argn=`expr $argn + 1`
1250         args_sep=' '
1251 done
1252 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1253 # used by ./hints/os2.sh
1254 rm -f cmdl.opt
1255
1256 : produce awk script to parse command line options
1257 cat >options.awk <<'EOF'
1258 BEGIN {
1259         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1260
1261         len = length(optstr);
1262         for (i = 1; i <= len; i++) {
1263                 c = substr(optstr, i, 1);
1264                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1265                 if (a == ":") {
1266                         arg[c] = 1;
1267                         i++;
1268                 }
1269                 opt[c] = 1;
1270         }
1271 }
1272 {
1273         expect = 0;
1274         str = $0;
1275         if (substr(str, 1, 1) != "-") {
1276                 printf("'%s'\n", str);
1277                 next;
1278         }
1279         len = length($0);
1280         for (i = 2; i <= len; i++) {
1281                 c = substr(str, i, 1);
1282                 if (!opt[c]) {
1283                         printf("-%s\n", substr(str, i));
1284                         next;
1285                 }
1286                 printf("-%s\n", c);
1287                 if (arg[c]) {
1288                         if (i < len)
1289                                 printf("'%s'\n", substr(str, i + 1));
1290                         else
1291                                 expect = 1;
1292                         next;
1293                 }
1294         }
1295 }
1296 END {
1297         if (expect)
1298                 print "?";
1299 }
1300 EOF
1301
1302 : process the command line options
1303 set X `for arg in "$@"; do echo "X$arg"; done |
1304         sed -e s/X// | awk -f options.awk`
1305 eval "set $*"
1306 shift
1307 rm -f options.awk
1308
1309 : set up default values
1310 fastread=''
1311 reuseval=false
1312 config_sh=''
1313 alldone=''
1314 error=''
1315 silent=''
1316 extractsh=''
1317 override=''
1318 knowitall=''
1319 rm -f optdef.sh posthint.sh
1320 cat >optdef.sh <<EOS
1321 $startsh
1322 EOS
1323
1324
1325 : option parsing
1326 while test $# -gt 0; do
1327         case "$1" in
1328         -d) shift; fastread=yes;;
1329         -e) shift; alldone=cont;;
1330         -f)
1331                 shift
1332                 cd ..
1333                 if test -r "$1"; then
1334                         config_sh="$1"
1335                 else
1336                         echo "$me: cannot read config file $1." >&2
1337                         error=true
1338                 fi
1339                 cd UU
1340                 shift;;
1341         -h) shift; error=true;;
1342         -r) shift; reuseval=true;;
1343         -s) shift; silent=true; realsilent=true;;
1344         -E) shift; alldone=exit;;
1345         -K) shift; knowitall=true;;
1346         -O) shift; override=true;;
1347         -S) shift; silent=true; extractsh=true;;
1348         -D)
1349                 shift
1350                 case "$1" in
1351                 *=)
1352                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1353                         echo "$me: ignoring -D $1" >&2
1354                         ;;
1355                 *=*) echo "$1" | \
1356                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1357                 *) echo "$1='define'" >> optdef.sh;;
1358                 esac
1359                 shift
1360                 ;;
1361         -U)
1362                 shift
1363                 case "$1" in
1364                 *=) echo "$1" >> optdef.sh;;
1365                 *=*)
1366                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1367                         echo "$me: ignoring -U $1" >&2
1368                         ;;
1369                 *) echo "$1='undef'" >> optdef.sh;;
1370                 esac
1371                 shift
1372                 ;;
1373         -A)
1374             shift
1375             xxx=''
1376             yyy="$1"
1377             zzz=''
1378             uuu=undef
1379             case "$yyy" in
1380             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1381                  case "$zzz" in
1382                  *:*) zzz='' ;;
1383                  *)   xxx=append
1384                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1385                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1386                  esac
1387                  ;;
1388             esac
1389             case "$xxx" in
1390             '')  case "$yyy" in
1391                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1392                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1393                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1394                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1395                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1396                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1397                  esac
1398                  ;;       
1399             esac
1400             case "$xxx" in
1401             append)
1402                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1403             clear)
1404                 echo "$yyy=''"                  >> posthint.sh ;;
1405             define)
1406                 case "$zzz" in
1407                 '') zzz=define ;;
1408                 esac
1409                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1410             eval)
1411                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1412             prepend)
1413                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1414             undef)
1415                 case "$zzz" in
1416                 '') zzz="$uuu" ;;
1417                 esac
1418                 echo "$yyy=$zzz"                >> posthint.sh ;;
1419             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1420             esac
1421             shift
1422             ;;
1423         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1424             exit 0;;
1425         --) break;;
1426         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1427         *) break;;
1428         esac
1429 done
1430
1431 case "$error" in
1432 true)
1433         cat >&2 <<EOM
1434 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1435                  [-U symbol] [-U symbol=] [-A command:symbol...]
1436   -d : use defaults for all answers.
1437   -e : go on without questioning past the production of config.sh.
1438   -f : specify an alternate default configuration file.
1439   -h : print this help message and exit (with an error status).
1440   -r : reuse C symbols value if possible (skips costly nm extraction).
1441   -s : silent mode, only echoes questions and essential information.
1442   -D : define symbol to have some value:
1443          -D symbol         symbol gets the value 'define'
1444          -D symbol=value   symbol gets the value 'value'
1445   -E : stop at the end of questions, after having produced config.sh.
1446   -K : do not use unless you know what you are doing.
1447   -O : let -D and -U override definitions from loaded configuration file.
1448   -S : perform variable substitutions on all .SH files (can mix with -f)
1449   -U : undefine symbol:
1450          -U symbol    symbol gets the value 'undef'
1451          -U symbol=   symbol gets completely empty
1452   -A : manipulate symbol after the platform specific hints have been applied:
1453          -A symbol=value                append " "value to symbol
1454          -A append:symbol=value         append value to symbol
1455          -A define:symbol=value         define symbol to have value
1456          -A clear:symbol                define symbol to be ''
1457          -A define:symbol               define symbol to be 'define'
1458          -A eval:symbol=value           define symbol to be eval of value
1459          -A prepend:symbol=value        prepend value to symbol
1460          -A undef:symbol                define symbol to be 'undef'
1461          -A undef:symbol=               define symbol to be ''
1462   -V : print version number and exit (with a zero status).
1463 EOM
1464         exit 1
1465         ;;
1466 esac
1467
1468 : Sanity checks
1469 case "$fastread$alldone" in
1470 yescont|yesexit) ;;
1471 *)
1472         case "$extractsh" in
1473         true) ;;
1474         *)
1475                 if test ! -t 0; then
1476                         echo "Say 'sh Configure', not 'sh <Configure'"
1477                         exit 1
1478                 fi
1479                 ;;
1480         esac
1481         ;;
1482 esac
1483
1484 exec 4>&1
1485 case "$silent" in
1486 true) exec 1>/dev/null;;
1487 esac
1488
1489 : run the defines and the undefines, if any, but leave the file out there...
1490 touch optdef.sh
1491 . ./optdef.sh
1492 : create the posthint manipulation script and leave the file out there...
1493 touch posthint.sh
1494
1495 : set package name
1496 package=perl5
1497 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1498 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1499 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1500 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1501 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1502 esac
1503
1504 : Some greps do not return status, grrr.
1505 echo "grimblepritz" >grimble
1506 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1507         contains=contains
1508 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1509         contains=grep
1510 else
1511         contains=contains
1512 fi
1513 rm -f grimble
1514 : the following should work in any shell
1515 case "$contains" in
1516 contains*)
1517         echo " "
1518         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1519         cat >contains <<'EOSS'
1520 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1521 EOSS
1522 chmod +x contains
1523 esac
1524
1525 : Find the path to the source tree
1526 case "$src" in
1527 '') case "$0" in
1528     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1529          case "$src" in
1530          /*)    ;;
1531          .)     ;;
1532          *)     src=`cd ../$src && pwd` ;;
1533          esac
1534          ;;
1535     *)   src='.';;
1536     esac;;
1537 esac
1538 case "$src" in
1539 '')     src=/
1540         rsrc=/
1541         ;;
1542 /*) rsrc="$src";;
1543 *) rsrc="../$src";;
1544 esac
1545 if test -f $rsrc/Configure && \
1546         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1547 then
1548    : found it, so we are ok.
1549 else
1550         rsrc=''
1551         for src in . .. ../.. ../../.. ../../../..; do
1552                 if test -f ../$src/Configure && \
1553                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1554                 then
1555                         rsrc=../$src
1556                         break
1557                 fi
1558         done
1559 fi
1560 case "$rsrc" in
1561 '')
1562         cat <<EOM >&4
1563
1564 Sorry, I can't seem to locate the source dir for $package.  Please start
1565 Configure with an explicit path -- i.e. /some/path/Configure.
1566
1567 EOM
1568         exit 1
1569         ;;
1570 ../.)   rsrc='..';;
1571 *)
1572         echo " "
1573         echo "Sources for $package found in \"$src\"." >&4
1574         ;;
1575 esac
1576
1577 : script used to extract .SH files with variable substitutions
1578 cat >extract <<'EOS'
1579 PERL_CONFIG_SH=true
1580 echo "Doing variable substitutions on .SH files..."
1581 if test -f MANIFEST; then
1582         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1583 else
1584         echo "(Looking for .SH files under the source directory.)"
1585         set x `(cd $src; find . -name "*.SH" -print)`
1586 fi
1587 shift
1588 case $# in
1589 0) set x `(cd $src; echo *.SH)`; shift;;
1590 esac
1591 if test ! -f $src/$1; then
1592         shift
1593 fi
1594 mkdir_p='
1595 name=$1;
1596 create="";
1597 while test $name; do
1598         if test ! -d "$name"; then
1599                 create="$name $create";
1600                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1601                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1602         else
1603                 name="";
1604         fi;
1605 done;
1606 for file in $create; do
1607         mkdir $file;
1608 done
1609 '
1610 for file in $*; do
1611         case "$src" in
1612         ".")
1613                 case "$file" in
1614                 */*)
1615                         dir=`expr X$file : 'X\(.*\)/'`
1616                         file=`expr X$file : 'X.*/\(.*\)'`
1617                         (cd $dir && . ./$file)
1618                         ;;
1619                 *)
1620                         . ./$file
1621                         ;;
1622                 esac
1623                 ;;
1624         *)
1625                 case "$file" in
1626                 */*)
1627                         dir=`expr X$file : 'X\(.*\)/'`
1628                         file=`expr X$file : 'X.*/\(.*\)'`
1629                         (set x $dir; shift; eval $mkdir_p)
1630                         sh <$src/$dir/$file
1631                         ;;
1632                 *)
1633                         sh <$src/$file
1634                         ;;
1635                 esac
1636                 ;;
1637         esac
1638 done
1639 if test -f $src/config_h.SH; then
1640         if test ! -f config.h; then
1641         : oops, they left it out of MANIFEST, probably, so do it anyway.
1642         . $src/config_h.SH
1643         fi
1644 fi
1645 EOS
1646
1647 : extract files and exit if asked to do so
1648 case "$extractsh" in
1649 true)
1650         case "$realsilent" in
1651         true) ;;
1652         *) exec 1>&4;;
1653         esac
1654         case "$config_sh" in
1655         '') config_sh='config.sh';;
1656         esac
1657         echo " "
1658         echo "Fetching answers from $config_sh..."
1659         cd ..
1660         . $config_sh
1661         test "$override" && . ./optdef.sh
1662         echo " "
1663         . UU/extract
1664         rm -rf UU
1665         echo "Extraction done."
1666         exit 0
1667         ;;
1668 esac
1669
1670 : Eunice requires " " instead of "", can you believe it
1671 echo " "
1672 : Here we go...
1673 echo "Beginning of configuration questions for $package."
1674
1675 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1676
1677 : first determine how to suppress newline on echo command
1678 echo " "
1679 echo "Checking echo to see how to suppress newlines..."
1680 (echo "hi there\c" ; echo " ") >.echotmp
1681 if $contains c .echotmp >/dev/null 2>&1 ; then
1682         echo "...using -n."
1683         n='-n'
1684         c=''
1685 else
1686         cat <<'EOM'
1687 ...using \c
1688 EOM
1689         n=''
1690         c='\c'
1691 fi
1692 echo $n "The star should be here-->$c"
1693 echo '*'
1694 rm -f .echotmp
1695
1696 : Now test for existence of everything in MANIFEST
1697 echo " "
1698 if test -f $rsrc/MANIFEST; then
1699         echo "First let's make sure your kit is complete.  Checking..." >&4
1700         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1701         rm -f missing
1702         tmppwd=`pwd`
1703         for filelist in x??; do
1704                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1705         done
1706         if test -s missing; then
1707                 cat missing >&4
1708                 cat >&4 <<'EOM'
1709
1710 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1711
1712 You have the option of continuing the configuration process, despite the
1713 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1714 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1715 and contact the author (perlbug@perl.org).
1716
1717 EOM
1718                 echo $n "Continue? [n] $c" >&4
1719                 read ans
1720                 case "$ans" in
1721                 y*)
1722                         echo "Continuing..." >&4
1723                         rm -f missing
1724                         ;;
1725                 *)
1726                         echo "ABORTING..." >&4
1727                         kill $$
1728                         ;;
1729                 esac
1730         else
1731                 echo "Looks good..."
1732         fi
1733 else
1734         echo "There is no MANIFEST file.  I hope your kit is complete !"
1735 fi
1736 rm -f missing x??
1737
1738 echo " "
1739 : Find the appropriate value for a newline for tr
1740 if test -n "$DJGPP"; then
1741        trnl='\012'
1742 fi
1743 if test X"$trnl" = X; then
1744         case "`echo foo|tr '\n' x 2>/dev/null`" in
1745         foox) trnl='\n' ;;
1746         esac
1747 fi
1748 if test X"$trnl" = X; then
1749         case "`echo foo|tr '\012' x 2>/dev/null`" in
1750         foox) trnl='\012' ;;
1751         esac
1752 fi
1753 if test X"$trnl" = X; then
1754         cat <<EOM >&2
1755
1756 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1757
1758 EOM
1759         exit 1
1760 fi
1761
1762 : compute the number of columns on the terminal for proper question formatting
1763 case "$COLUMNS" in
1764 '') COLUMNS='80';;
1765 esac
1766
1767 : set up the echo used in my read
1768 myecho="case \"\$xxxm\" in
1769 '') echo $n \"\$rp $c\" >&4;;
1770 *) case \"\$rp\" in
1771         '') echo $n \"[\$xxxm] $c\";;
1772         *)
1773                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1774                         echo \"\$rp\" >&4
1775                         echo $n \"[\$xxxm] $c\" >&4
1776                 else
1777                         echo $n \"\$rp [\$xxxm] $c\" >&4
1778                 fi
1779                 ;;
1780         esac;;
1781 esac"
1782
1783 : now set up to do reads with possible shell escape and default assignment
1784 cat <<EOSC >myread
1785 $startsh
1786 xxxm=\$dflt
1787 $myecho
1788 ans='!'
1789 case "\$fastread" in
1790 yes) case "\$dflt" in
1791         '') ;;
1792         *) ans='';
1793                 case "\$silent-\$rp" in
1794                 true-) ;;
1795                 *) echo " " >&4;;
1796                 esac;;
1797         esac;;
1798 *) case "\$silent" in
1799         true) case "\$rp" in
1800                 '') ans='';;
1801                 esac;;
1802         esac;;
1803 esac
1804 while expr "X\$ans" : "X!" >/dev/null; do
1805         read answ
1806         set x \$xxxm
1807         shift
1808         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1809         case  "\$answ" in
1810         "!")
1811                 sh 1>&4
1812                 echo " "
1813                 $myecho
1814                 ;;
1815         !*)
1816                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1817                 shift
1818                 sh 1>&4 -c "\$*"
1819                 echo " "
1820                 $myecho
1821                 ;;
1822         "\$ans")
1823                 case "\$ans" in
1824                 \\&*)
1825                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1826                         shift
1827                         case "\$1" in
1828                         -d)
1829                                 fastread=yes
1830                                 echo "(OK, I'll run with -d after this question.)" >&4
1831                                 ;;
1832                         -*)
1833                                 echo "*** Sorry, \$1 not supported yet." >&4
1834                                 ;;
1835                         esac
1836                         $myecho
1837                         ans=!
1838                         ;;
1839                 esac;;
1840         *)
1841                 case "\$aok" in
1842                 y)
1843                         echo "*** Substitution done -- please confirm."
1844                         xxxm="\$ans"
1845                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1846                         xxxm="\$ans"
1847                         ans=!
1848                         ;;
1849                 *)
1850                         echo "*** Error -- try again."
1851                         ans=!
1852                         ;;
1853                 esac
1854                 $myecho
1855                 ;;
1856         esac
1857         case "\$ans\$xxxm\$nostick" in
1858         '')
1859                 ans=!
1860                 $myecho
1861                 ;;
1862         esac
1863 done
1864 case "\$ans" in
1865 '') ans="\$xxxm";;
1866 esac
1867 EOSC
1868
1869 : create .config dir to save info across Configure sessions
1870 test -d ../.config || mkdir ../.config
1871 cat >../.config/README <<EOF
1872 This directory created by Configure to save information that should
1873 persist across sessions for $package.
1874
1875 You may safely delete it if you wish.
1876 EOF
1877
1878 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1879 case "$usedevel" in
1880 $define|true|[yY]*) ;;
1881 *) case "$xversion" in
1882    *[13579])
1883         cat >&4 <<EOH
1884 *** WHOA THERE!!! ***
1885
1886     This is an UNSTABLE DEVELOPMENT release.
1887     The version of this $package distribution is $xversion, that is, odd,
1888     (as opposed to even) and that signifies a development release.
1889     If you want a maintenance release, you want an even-numbered version.
1890
1891     Do ***NOT*** install this into production use.
1892     Data corruption and crashes are possible.
1893
1894     It is most seriously suggested that you do not continue any further
1895     unless you want to help in developing and debugging Perl.
1896
1897     If you *still* want to build perl, you can answer 'y' now,
1898     or pass -Dusedevel to Configure.
1899
1900 EOH
1901         rp='Do you really want to continue?'
1902         dflt='n'
1903         . ./myread
1904         case "$ans" in
1905         [yY]) echo >&4 "Okay, continuing."
1906               usedevel="$define" ;;
1907         *) echo >&4 "Okay, bye."
1908            exit 1
1909            ;;
1910         esac
1911         ;;
1912     esac
1913     ;;
1914 esac
1915 case "$usedevel" in
1916 $define|true|[yY]*)
1917         case "$versiononly" in
1918         '') versiononly="$define" ;;
1919         esac
1920         case "$installusrbinperl" in
1921         '') installusrbinperl="$undef" ;;
1922         esac
1923         ;;
1924 esac
1925
1926 : general instructions
1927 needman=true
1928 firsttime=true
1929 user=`(logname) 2>/dev/null`
1930 case "$user" in
1931 '') user=`whoami 2>&1`;;
1932 esac
1933 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1934         firsttime=false
1935         echo " "
1936         rp='Would you like to see the instructions?'
1937         dflt=n
1938         . ./myread
1939         case "$ans" in
1940         [yY]*) ;;
1941         *) needman=false;;
1942         esac
1943 fi
1944 if $needman; then
1945         cat <<EOH
1946
1947 This installation shell script will examine your system and ask you questions
1948 to determine how the perl5 package should be installed. If you get
1949 stuck on a question, you may use a ! shell escape to start a subshell or
1950 execute a command.  Many of the questions will have default answers in square
1951 brackets; typing carriage return will give you the default.
1952
1953 On some of the questions which ask for file or directory names you are allowed
1954 to use the ~name construct to specify the login directory belonging to "name",
1955 even if you don't have a shell which knows about that.  Questions where this is
1956 allowed will be marked "(~name ok)".
1957
1958 EOH
1959         rp=''
1960         dflt='Type carriage return to continue'
1961         . ./myread
1962         cat <<'EOH'
1963
1964 The prompter used in this script allows you to use shell variables and
1965 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1966 in the default answer, as if the default line was a set of arguments given to a
1967 script shell.  This means you may also use $* to repeat the whole default line,
1968 so you do not have to re-type everything to add something to the default.
1969
1970 Everytime there is a substitution, you will have to confirm.  If there is an
1971 error (e.g. an unmatched backtick), the default answer will remain unchanged
1972 and you will be prompted again.
1973
1974 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1975 the questions and use the computed defaults (or the previous answers if there
1976 was already a config.sh file). Type 'Configure -h' for a list of options.
1977 You may also start interactively and then answer '& -d' at any prompt to turn
1978 on the non-interactive behaviour for the remainder of the execution.
1979
1980 EOH
1981         . ./myread
1982         cat <<EOH
1983
1984 Much effort has been expended to ensure that this shell script will run on any
1985 Unix system.  If despite that it blows up on yours, your best bet is to edit
1986 Configure and run it again.  If you can't run Configure for some reason,
1987 you'll have to generate a config.sh file by hand.  Whatever problems you
1988 have, let me (perlbug@perl.org) know how I blew it.
1989
1990 This installation script affects things in two ways:
1991
1992 1) it may do direct variable substitutions on some of the files included
1993    in this kit.
1994 2) it builds a config.h file for inclusion in C programs.  You may edit
1995    any of these files as the need arises after running this script.
1996
1997 If you make a mistake on a question, there is no easy way to back up to it
1998 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1999 files.  Configure will offer to let you do this before it runs the SH files.
2000
2001 EOH
2002         dflt='Type carriage return to continue'
2003         . ./myread
2004         case "$firsttime" in
2005         true) echo $user >>../.config/instruct;;
2006         esac
2007 fi
2008
2009 : find out where common programs are
2010 echo " "
2011 echo "Locating common programs..." >&4
2012 cat <<EOSC >loc
2013 $startsh
2014 case \$# in
2015 0) exit 1;;
2016 esac
2017 thing=\$1
2018 shift
2019 dflt=\$1
2020 shift
2021 for dir in \$*; do
2022         case "\$thing" in
2023         .)
2024         if test -d \$dir/\$thing; then
2025                 echo \$dir
2026                 exit 0
2027         fi
2028         ;;
2029         *)
2030         for thisthing in \$dir/\$thing; do
2031                 : just loop through to pick last item
2032         done
2033         if test -f \$thisthing; then
2034                 echo \$thisthing
2035                 exit 0
2036         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2037                 echo \$thisthing
2038                 exit 0
2039         elif test -f \$dir/\$thing.exe; then
2040                 if test -n "$DJGPP"; then
2041                         echo \$dir/\$thing.exe
2042                 else
2043                         : on Eunice apparently
2044                         echo \$dir/\$thing
2045                 fi
2046                 exit 0
2047         fi
2048         ;;
2049         esac
2050 done
2051 echo \$dflt
2052 exit 1
2053 EOSC
2054 chmod +x loc
2055 $eunicefix loc
2056 loclist="
2057 awk
2058 cat
2059 chmod
2060 comm
2061 cp
2062 echo
2063 expr
2064 grep
2065 ls
2066 mkdir
2067 rm
2068 sed
2069 sort
2070 touch
2071 tr
2072 uniq
2073 "
2074 trylist="
2075 Mcc
2076 ar
2077 bison
2078 byacc
2079 cpp
2080 csh
2081 date
2082 egrep
2083 gmake
2084 gzip
2085 less
2086 ln
2087 make
2088 more
2089 nm
2090 nroff
2091 pg
2092 test
2093 uname
2094 zip
2095 "
2096 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2097 pth="$pth /lib /usr/lib"
2098 for file in $loclist; do
2099         eval xxx=\$$file
2100         case "$xxx" in
2101         /*|?:[\\/]*)
2102                 if test -f "$xxx"; then
2103                         : ok
2104                 else
2105                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2106                         xxx=`./loc $file $file $pth`
2107                 fi
2108                 ;;
2109         '') xxx=`./loc $file $file $pth`;;
2110         *) xxx=`./loc $xxx $xxx $pth`;;
2111         esac
2112         eval $file=$xxx$_exe
2113         eval _$file=$xxx
2114         case "$xxx" in
2115         /*)
2116                 echo $file is in $xxx.
2117                 ;;
2118         ?:[\\/]*)
2119                 echo $file is in $xxx.
2120                 ;;
2121         *)
2122                 echo "I don't know where '$file' is, and my life depends on it." >&4
2123                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2124                 exit 1
2125                 ;;
2126         esac
2127 done
2128 echo " "
2129 echo "Don't worry if any of the following aren't found..."
2130 say=offhand
2131 for file in $trylist; do
2132         eval xxx=\$$file
2133         case "$xxx" in
2134         /*|?:[\\/]*)
2135                 if test -f "$xxx"; then
2136                         : ok
2137                 else
2138                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2139                         xxx=`./loc $file $file $pth`
2140                 fi
2141                 ;;
2142         '') xxx=`./loc $file $file $pth`;;
2143         *) xxx=`./loc $xxx $xxx $pth`;;
2144         esac
2145         eval $file=$xxx
2146         eval _$file=$xxx
2147         case "$xxx" in
2148         /*)
2149                 echo $file is in $xxx.
2150                 ;;
2151         ?:[\\/]*)
2152                 echo $file is in $xxx.
2153                 ;;
2154         *)
2155                 echo "I don't see $file out there, $say."
2156                 say=either
2157                 ;;
2158         esac
2159 done
2160 case "$egrep" in
2161 egrep)
2162         echo "Substituting grep for egrep."
2163         egrep=$grep
2164         ;;
2165 esac
2166 case "$ln" in
2167 ln)
2168         echo "Substituting cp for ln."
2169         ln=$cp
2170         ;;
2171 esac
2172 case "$make" in
2173 make)   
2174         case "$gmake" in
2175         gmake)
2176         echo "I can't find make or gmake, and my life depends on it." >&4
2177         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2178         exit 1
2179         ;;
2180         esac
2181         ;;
2182 esac    
2183 case "$gmake" in
2184 gmake)  ;;
2185 *)      # We can't have osname yet.
2186         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2187                 # Assume that gmake, if found, is definitely GNU make
2188                 # and prefer it over the system make.
2189                 echo "Substituting gmake for make."
2190                 make=$gmake
2191         fi
2192         ;;
2193 esac
2194 case "$test" in
2195 test)
2196         echo "Hopefully test is built into your sh."
2197         ;;
2198 *)
2199         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2200                 echo "Using the test built into your sh."
2201                 test=test
2202                 _test=test
2203         fi
2204         ;;
2205 esac
2206 case "$echo" in
2207 echo)
2208         echo "Hopefully echo is built into your sh."
2209         ;;
2210 '') ;;
2211 *)
2212         echo " "
2213 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2214         $echo $n "hi there$c" >foo1
2215         echo $n "hi there$c" >foo2
2216         if cmp foo1 foo2 >/dev/null 2>&1; then
2217                 echo "They are compatible.  In fact, they may be identical."
2218         else
2219                 case "$n" in
2220                 '-n') n='' c='\c';;
2221                 *) n='-n' c='';;
2222                 esac
2223                 cat <<FOO
2224 They are not compatible!  You are probably running ksh on a non-USG system.
2225 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2226 have echo built in and we may have to run some Bourne shell scripts.  That
2227 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2228
2229 FOO
2230                 $echo $n "The star should be here-->$c"
2231                 $echo "*"
2232         fi
2233         $rm -f foo1 foo2
2234         ;;
2235 esac
2236
2237 cat <<EOS >checkcc
2238 $startsh
2239 EOS
2240 cat <<'EOSC' >>checkcc
2241 case "$cc" in
2242 '') ;;
2243 *)  $rm -f try try.*
2244     $cat >try.c <<EOM
2245 int main(int argc, char *argv[]) {
2246   return 0;
2247 }
2248 EOM
2249     if $cc -o try $ccflags $ldflags try.c; then
2250        :
2251     else
2252         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2253         despair=yes
2254         trygcc=yes
2255         case "$cc" in
2256         *gcc*) trygcc=no ;;
2257         esac
2258         case "`$cc -v -c try.c 2>&1`" in
2259         *gcc*) trygcc=no ;;
2260         esac
2261         if $test X"$trygcc" = Xyes; then
2262             if gcc -o try -c try.c; then
2263                 echo " "
2264                 echo "You seem to have a working gcc, though." >&4
2265                 rp="Would you like to use it?"
2266                 dflt=y
2267                 if $test -f myread; then
2268                     . ./myread
2269                 else
2270                     if $test -f UU/myread; then
2271                         . ./UU/myread
2272                     else
2273                         echo "Cannot find myread, sorry.  Aborting." >&2
2274                         exit 1
2275                     fi
2276                 fi  
2277                 case "$ans" in
2278                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2279                 esac
2280             fi
2281         fi
2282         if $test X"$despair" = Xyes; then
2283             $cat >&4 <<EOM
2284 You need to find a working C compiler.
2285 Either (purchase and) install the C compiler supplied by your OS vendor,
2286 or for a free C compiler try http://gcc.gnu.org/
2287 I cannot continue any further, aborting.
2288 EOM
2289             exit 1
2290         fi
2291     fi
2292     $rm -f try try.*
2293     ;;
2294 esac
2295 EOSC
2296
2297 : determine whether symbolic links are supported
2298 echo " "
2299 $touch blurfl
2300 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2301         echo "Symbolic links are supported." >&4
2302         lns="$ln -s"
2303 else
2304         echo "Symbolic links are NOT supported." >&4
2305         lns="$ln"
2306 fi
2307 $rm -f blurfl sym
2308
2309 : determine whether symbolic links are supported
2310 echo " "
2311 case "$lns" in
2312 *"ln -s")
2313         echo "Checking how to test for symbolic links..." >&4
2314         $lns blurfl sym
2315         if $test "X$issymlink" = X; then
2316                 case "$newsh" in
2317                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2318                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2319                 esac
2320                 if test $? = 0; then
2321                         issymlink="test -h"
2322                 else
2323                         echo "Your builtin 'test -h' may be broken." >&4
2324                         case "$test" in
2325                         /*)     ;;
2326                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2327                                 for p in $pth
2328                                 do
2329                                         if test -f "$p/$test"; then
2330                                                 test="$p/$test"
2331                                                 break
2332                                         fi
2333                                 done
2334                                 ;;
2335                         esac
2336                         case "$test" in
2337                         /*)
2338                                 echo "Trying external '$test -h'." >&4
2339                                 issymlink="$test -h"
2340                                 if $test ! -h sym >/dev/null 2>&1; then
2341                                         echo "External '$test -h' is broken, too." >&4
2342                                         issymlink=''
2343                                 fi
2344                                 ;;
2345                         *)      issymlink='' ;;
2346                         esac
2347                 fi              
2348         fi
2349         if $test "X$issymlink" = X; then
2350                 if $test -L sym 2>/dev/null; then
2351                         issymlink="$test -L"
2352                         echo "The builtin '$test -L' worked." >&4
2353                 fi
2354         fi
2355         if $test "X$issymlink" != X; then
2356                 echo "You can test for symbolic links with '$issymlink'." >&4
2357         else
2358                 echo "I do not know how you can test for symbolic links." >&4
2359         fi
2360         $rm -f blurfl sym
2361         ;;
2362 *)      echo "No symbolic links, so not testing for their testing..." >&4
2363         ;;
2364 esac
2365 echo " "
2366
2367
2368 case "$mksymlinks" in
2369 $define|true|[yY]*)
2370         case "$src" in
2371         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2372                 exit 1
2373                 ;;
2374         *)      case "$lns:$issymlink" in
2375                 *"ln -s:"*"test -"?)
2376                         echo "Creating the symbolic links..." >&4
2377                         echo "(First creating the subdirectories...)" >&4
2378                         cd ..
2379                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2380                                 read directory
2381                                 test -z "$directory" && break
2382                                 mkdir -p $directory
2383                         done
2384                         # Sanity check 1.
2385                         if test ! -d t/base; then
2386                                 echo "Failed to create the subdirectories.  Aborting." >&4
2387                                 exit 1
2388                         fi
2389                         echo "(Then creating the symlinks...)" >&4
2390                         awk '{print $1}' $src/MANIFEST | while true; do
2391                                 read filename
2392                                 test -z "$filename" && break
2393                                 if test -f $filename; then
2394                                         if $issymlink $filename; then
2395                                                 rm -f $filename
2396                                         fi
2397                                 fi
2398                                 if test -f $filename; then
2399                                         echo "$filename already exists, not symlinking."
2400                                 else
2401                                         ln -s $src/$filename $filename
2402                                 fi
2403                         done
2404                         # Sanity check 2.
2405                         if test ! -f t/base/lex.t; then
2406                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2407                                 exit 1
2408                         fi
2409                         cd UU
2410                         ;;
2411                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2412                         ;;
2413                 esac
2414                 ;;
2415         esac
2416         ;;
2417 esac
2418
2419
2420 case "$usecrosscompile" in
2421 $define|true|[yY]*)
2422         $echo "Cross-compiling..."
2423         croak=''
2424         case "$cc" in
2425         *-*-gcc) # A cross-compiling gcc, probably.
2426             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2427             ar=$targetarch-ar
2428             # leave out ld, choosing it is more complex
2429             nm=$targetarch-nm
2430             ranlib=$targetarch-ranlib
2431             $echo 'extern int foo;' > try.c
2432             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2433             shift
2434             if $test $# -gt 0; then
2435                 incpth="$incpth $*"
2436                 incpth="`$echo $incpth|$sed 's/^ //'`"
2437                 echo "Guessing incpth '$incpth'." >&4
2438                 for i in $*; do
2439                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2440                     if $test -d $j; then
2441                         libpth="$libpth $j"
2442                     fi
2443                 done   
2444                 libpth="`$echo $libpth|$sed 's/^ //'`"
2445                 echo "Guessing libpth '$libpth'." >&4
2446             fi
2447             $rm -f try.c
2448             ;;
2449         esac
2450         case "$targetarch" in
2451         '') echo "Targetarch not defined." >&4; croak=y ;;
2452         *)  echo "Using targetarch $targetarch." >&4 ;;
2453         esac
2454         case "$incpth" in
2455         '') echo "Incpth not defined." >&4; croak=y ;;
2456         *)  echo "Using incpth '$incpth'." >&4 ;;
2457         esac
2458         case "$libpth" in
2459         '') echo "Libpth not defined." >&4; croak=y ;;
2460         *)  echo "Using libpth '$libpth'." >&4 ;;
2461         esac
2462         case "$usrinc" in
2463         '') for i in $incpth; do
2464                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2465                     usrinc=$i
2466                     echo "Guessing usrinc $usrinc." >&4
2467                     break
2468                 fi
2469             done
2470             case "$usrinc" in
2471             '') echo "Usrinc not defined." >&4; croak=y ;;
2472             esac
2473             ;;
2474         *)  echo "Using usrinc $usrinc." >&4 ;;
2475         esac
2476         case "$targethost" in
2477         '') echo "Targethost not defined." >&4; croak=y ;;
2478         *)  echo "Using targethost $targethost." >&4
2479         esac
2480         locincpth=' '
2481         loclibpth=' '
2482         case "$croak" in
2483         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2484         esac
2485         case "$src" in
2486         /*) run=$src/Cross/run
2487             targetmkdir=$src/Cross/mkdir
2488             to=$src/Cross/to
2489             from=$src/Cross/from
2490             ;;
2491         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2492             run=$pwd/Cross/run
2493             targetmkdir=$pwd/Cross/mkdir
2494             to=$pwd/Cross/to
2495             from=$pwd/Cross/from
2496             ;;
2497         esac
2498         case "$targetrun" in
2499         '') targetrun=ssh ;;
2500         esac
2501         case "$targetto" in
2502         '') targetto=scp ;;
2503         esac
2504         case "$targetfrom" in
2505         '') targetfrom=scp ;;
2506         esac
2507         run=$run-$targetrun
2508         to=$to-$targetto
2509         from=$from-$targetfrom
2510         case "$targetdir" in
2511         '')  targetdir=/tmp
2512              echo "Guessing targetdir $targetdir." >&4
2513              ;;
2514         esac
2515         case "$targetuser" in
2516         '')  targetuser=root
2517              echo "Guessing targetuser $targetuser." >&4
2518              ;;
2519         esac
2520         case "$targetfrom" in
2521         scp)    q=-q ;;
2522         *)      q='' ;;
2523         esac
2524         case "$targetrun" in
2525         ssh|rsh)
2526             cat >$run <<EOF
2527 #!/bin/sh
2528 case "\$1" in
2529 -cwd)
2530   shift
2531   cwd=\$1
2532   shift
2533   ;;
2534 esac
2535 case "\$cwd" in
2536 '') cwd=$targetdir ;;
2537 esac
2538 exe=\$1
2539 shift
2540 if $test ! -f \$exe.xok; then
2541   $to \$exe
2542   $touch \$exe.xok
2543 fi
2544 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2545 EOF
2546             ;;
2547         *)  echo "Unknown targetrun '$targetrun'" >&4
2548             exit 1
2549             ;;
2550         esac
2551         case "$targetmkdir" in
2552         */Cross/mkdir)
2553             cat >$targetmkdir <<EOF
2554 #!/bin/sh
2555 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2556 EOF
2557             $chmod a+rx $targetmkdir
2558             ;;
2559         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2560             exit 1
2561             ;;
2562         esac
2563         case "$targetto" in
2564         scp|rcp)
2565             cat >$to <<EOF
2566 #!/bin/sh
2567 for f in \$@
2568 do
2569   case "\$f" in
2570   /*)
2571     $targetmkdir \`dirname \$f\`
2572     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2573     ;;
2574   *)
2575     $targetmkdir $targetdir/\`dirname \$f\`
2576     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2577     ;;
2578   esac
2579 done
2580 exit 0
2581 EOF
2582             ;;
2583         cp) cat >$to <<EOF
2584 #!/bin/sh
2585 for f in \$@
2586 do
2587   case "\$f" in
2588   /*)
2589     $mkdir -p $targetdir/\`dirname \$f\`
2590     $cp \$f $targetdir/\$f || exit 1
2591     ;;
2592   *)
2593     $targetmkdir $targetdir/\`dirname \$f\`
2594     $cp \$f $targetdir/\$f || exit 1
2595     ;;
2596   esac
2597 done
2598 exit 0
2599 EOF
2600             ;;
2601         *)  echo "Unknown targetto '$targetto'" >&4
2602             exit 1
2603             ;;
2604         esac
2605         case "$targetfrom" in
2606         scp|rcp)
2607           cat >$from <<EOF
2608 #!/bin/sh
2609 for f in \$@
2610 do
2611   $rm -f \$f
2612   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2613 done
2614 exit 0
2615 EOF
2616             ;;
2617         cp) cat >$from <<EOF
2618 #!/bin/sh
2619 for f in \$@
2620 do
2621   $rm -f \$f
2622   cp $targetdir/\$f . || exit 1
2623 done
2624 exit 0
2625 EOF
2626             ;;
2627         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2628             exit 1
2629             ;;
2630         esac
2631         if $test ! -f $run; then
2632             echo "Target 'run' script '$run' not found." >&4
2633         else
2634             $chmod a+rx $run
2635         fi
2636         if $test ! -f $to; then
2637             echo "Target 'to' script '$to' not found." >&4
2638         else
2639             $chmod a+rx $to
2640         fi
2641         if $test ! -f $from; then
2642             echo "Target 'from' script '$from' not found." >&4
2643         else
2644             $chmod a+rx $from
2645         fi
2646         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2647             exit 1
2648         fi
2649         cat >&4 <<EOF
2650 Using '$run' for remote execution,
2651 and '$from' and '$to'
2652 for remote file transfer.
2653 EOF
2654         ;;
2655 *)      run=''
2656         to=:
2657         from=:
2658         usecrosscompile='undef'
2659         targetarch=''
2660         ;;
2661 esac
2662
2663 : see whether [:lower:] and [:upper:] are supported character classes
2664 echo " "
2665 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2666 ABYZ)
2667         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2668         up='[:upper:]'
2669         low='[:lower:]'
2670         ;;
2671 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2672         # (0xc9 and 0xd1), therefore that is a nice testing point.
2673         if test "X$up" = X -o "X$low" = X; then
2674             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2675             ij) up='[A-Z]'
2676                 low='[a-z]'
2677                 ;;
2678             esac
2679         fi
2680         if test "X$up" = X -o "X$low" = X; then
2681             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2682             ij) up='A-Z'
2683                 low='a-z'
2684                 ;;
2685             esac
2686         fi
2687         if test "X$up" = X -o "X$low" = X; then
2688             case "`echo IJ | od -x 2>/dev/null`" in
2689             *C9D1*|*c9d1*)
2690                 echo "Hey, this might be EBCDIC." >&4
2691                 if test "X$up" = X -o "X$low" = X; then
2692                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2693                     ij) up='[A-IJ-RS-Z]'
2694                         low='[a-ij-rs-z]'
2695                         ;;
2696                     esac
2697                 fi
2698                 if test "X$up" = X -o "X$low" = X; then
2699                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2700                     ij) up='A-IJ-RS-Z'
2701                         low='a-ij-rs-z'
2702                         ;;
2703                     esac
2704                 fi
2705                 ;;
2706             esac
2707         fi
2708 esac
2709 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2710 ij)
2711     echo "Using $up and $low to convert case." >&4
2712     ;;
2713 *)
2714     echo "I don't know how to translate letters from upper to lower case." >&4
2715     echo "Your tr is not acting any way I know of." >&4
2716     exit 1
2717     ;;
2718 esac
2719 : set up the translation script tr, must be called with ./tr of course
2720 cat >tr <<EOSC
2721 $startsh
2722 case "\$1\$2" in
2723 '[A-Z][a-z]') exec $tr '$up' '$low';;
2724 '[a-z][A-Z]') exec $tr '$low' '$up';;
2725 esac
2726 exec $tr "\$@"
2727 EOSC
2728 chmod +x tr
2729 $eunicefix tr
2730
2731 : Try to determine whether config.sh was made on this system
2732 case "$config_sh" in
2733 '')
2734 myuname=`$uname -a 2>/dev/null`
2735 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2736 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2737 # because the A-Z/a-z are not consecutive.
2738 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2739         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2740 newmyuname="$myuname"
2741 dflt=n
2742 case "$knowitall" in
2743 '')
2744         if test -f ../config.sh; then
2745                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2746                         eval "`grep myuname= ../config.sh`"
2747                 fi
2748                 if test "X$myuname" = "X$newmyuname"; then
2749                         dflt=y
2750                 fi
2751         fi
2752         ;;
2753 *) dflt=y;;
2754 esac
2755
2756 : Get old answers from old config file if Configure was run on the
2757 : same system, otherwise use the hints.
2758 hint=default
2759 cd ..
2760 if test -f config.sh; then
2761         echo " "
2762         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2763         . UU/myread
2764         case "$ans" in
2765         n*|N*) echo "OK, I'll ignore it."
2766                 mv config.sh config.sh.old
2767                 myuname="$newmyuname"
2768                 ;;
2769         *)  echo "Fetching default answers from your old config.sh file..." >&4
2770                 tmp_n="$n"
2771                 tmp_c="$c"
2772                 tmp_sh="$sh"
2773                 . ./config.sh
2774                 cp config.sh UU
2775                 n="$tmp_n"
2776                 c="$tmp_c"
2777                 : Older versions did not always set $sh.  Catch re-use of such
2778                 : an old config.sh.
2779                 case "$sh" in
2780                 '') sh="$tmp_sh" ;;
2781                 esac
2782                 hint=previous
2783                 ;;
2784         esac
2785 fi
2786 . ./UU/checkcc
2787 if test ! -f config.sh; then
2788         $cat <<EOM
2789
2790 First time through, eh?  I have some defaults handy for some systems
2791 that need some extra help getting the Configure answers right:
2792
2793 EOM
2794         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2795         dflt=''
2796         : Half the following guesses are probably wrong... If you have better
2797         : tests or hints, please send them to perlbug@perl.org
2798         : The metaconfig authors would also appreciate a copy...
2799         $test -f /irix && osname=irix
2800         $test -f /xenix && osname=sco_xenix
2801         $test -f /dynix && osname=dynix
2802         $test -f /dnix && osname=dnix
2803         $test -f /lynx.os && osname=lynxos
2804         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2805         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2806         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2807         $test -f /bin/mips && /bin/mips && osname=mips
2808         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2809                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2810         $test -d /usr/apollo/bin && osname=apollo
2811         $test -f /etc/saf/_sactab && osname=svr4
2812         $test -d /usr/include/minix && osname=minix
2813         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2814         if $test -d /MachTen -o -d /MachTen_Folder; then
2815                 osname=machten
2816                 if $test -x /sbin/version; then
2817                         osvers=`/sbin/version | $awk '{print $2}' |
2818                         $sed -e 's/[A-Za-z]$//'`
2819                 elif $test -x /usr/etc/version; then
2820                         osvers=`/usr/etc/version | $awk '{print $2}' |
2821                         $sed -e 's/[A-Za-z]$//'`
2822                 else
2823                         osvers="$2.$3"
2824                 fi
2825         fi
2826
2827         $test -f /sys/posix.dll &&
2828                 $test -f /usr/bin/what &&
2829                 set X `/usr/bin/what /sys/posix.dll` &&
2830                 $test "$3" = UWIN &&
2831                 osname=uwin &&
2832                 osvers="$5"
2833
2834         if $test -f $uname; then
2835                 set X $myuname
2836                 shift
2837
2838                 case "$5" in
2839                 fps*) osname=fps ;;
2840                 mips*)
2841                         case "$4" in
2842                         umips) osname=umips ;;
2843                         *) osname=mips ;;
2844                         esac;;
2845                 [23]100) osname=mips ;;
2846                 next*) osname=next ;;
2847                 i386*)
2848                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2849                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2850                                 osname='sco'
2851                                 osvers=$tmp
2852                         elif $test -f /etc/kconfig; then
2853                                 osname=isc
2854                                 if test "$lns" = "$ln -s"; then
2855                                         osvers=4
2856                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2857                                         osvers=3
2858                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2859                                         osvers=2
2860                                 fi
2861                         fi
2862                         tmp=''
2863                         ;;
2864                 pc*)
2865                         if test -n "$DJGPP"; then
2866                                 osname=dos
2867                                 osvers=djgpp
2868                         fi
2869                         ;;
2870                 esac
2871
2872                 case "$1" in
2873                 aix) osname=aix
2874                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2875                         case "$tmp" in
2876                         'not found') osvers="$4"."$3" ;;
2877                         '<3240'|'<>3240') osvers=3.2.0 ;;
2878                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2879                         '=3250'|'>3250') osvers=3.2.5 ;;
2880                         *) osvers=$tmp;;
2881                         esac
2882                         ;;
2883                 bsd386) osname=bsd386
2884                         osvers=`$uname -r`
2885                         ;;
2886                 cygwin*) osname=cygwin
2887                         osvers="$3"
2888                         ;;
2889                 *dc.osx) osname=dcosx
2890                         osvers="$3"
2891                         ;;
2892                 dnix) osname=dnix
2893                         osvers="$3"
2894                         ;;
2895                 domainos) osname=apollo
2896                         osvers="$3"
2897                         ;;
2898                 dgux) osname=dgux 
2899                         osvers="$3"
2900                         ;;
2901                 dynixptx*) osname=dynixptx
2902                         osvers=`echo "$4"|sed 's/^v//'`
2903                         ;;
2904                 freebsd) osname=freebsd 
2905                         osvers="$3" ;;
2906                 genix) osname=genix ;;
2907                 hp*) osname=hpux 
2908                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2909                         ;;
2910                 irix*) osname=irix
2911                         case "$3" in
2912                         4*) osvers=4 ;;
2913                         5*) osvers=5 ;;
2914                         *)      osvers="$3" ;;
2915                         esac
2916                         ;;
2917                 linux) osname=linux
2918                         case "$3" in
2919                         *)      osvers="$3" ;;
2920                         esac
2921                         ;;
2922                 MiNT) osname=mint
2923                         ;;
2924                 netbsd*) osname=netbsd
2925                         osvers="$3"
2926                         ;;
2927                 news-os) osvers="$3"
2928                         case "$3" in
2929                         4*) osname=newsos4 ;;
2930                         *) osname=newsos ;;
2931                         esac
2932                         ;;
2933                 next*) osname=next ;;
2934                 nonstop-ux) osname=nonstopux ;;
2935                 POSIX-BC | posix-bc ) osname=posix-bc
2936                         osvers="$3"
2937                         ;;
2938                 powerux | power_ux | powermax_os | powermaxos | \
2939                 powerunix | power_unix) osname=powerux
2940                         osvers="$3"
2941                         ;;
2942                 qnx) osname=qnx
2943                         osvers="$4"
2944                         ;;
2945                 solaris) osname=solaris
2946                         case "$3" in
2947                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2948                         *)      osvers="$3" ;;
2949                         esac
2950                         ;;
2951                 sunos) osname=sunos
2952                         case "$3" in
2953                         5*) osname=solaris
2954                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2955                         *)      osvers="$3" ;;
2956                         esac
2957                         ;;
2958                 titanos) osname=titanos
2959                         case "$3" in
2960                         1*) osvers=1 ;;
2961                         2*) osvers=2 ;;
2962                         3*) osvers=3 ;;
2963                         4*) osvers=4 ;;
2964                         *)      osvers="$3" ;;
2965                         esac
2966                         ;;
2967                 ultrix) osname=ultrix
2968                         osvers="$3"
2969                         ;;
2970                 osf1|mls+)      case "$5" in
2971                                 alpha)
2972                                         osname=dec_osf
2973                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2974                                         case "$osvers" in
2975                                         [1-9].[0-9]*) ;;
2976                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2977                                         esac
2978                                         ;;
2979                         hp*)    osname=hp_osf1  ;;
2980                         mips)   osname=mips_osf1 ;;
2981                         esac
2982                         ;;
2983                 unixware) osname=svr5
2984                         osvers="$4"
2985                         ;;
2986                 uts)    osname=uts
2987                         osvers="$3"
2988                         ;;
2989                 vos) osvers="$3"
2990                         ;;
2991                 $2) case "$osname" in
2992                         *isc*) ;;
2993                         *freebsd*) ;;
2994                         svr*)
2995                                 : svr4.x or possibly later
2996                                 case "svr$3" in 
2997                                 ${osname}*)
2998                                         osname=svr$3
2999                                         osvers=$4
3000                                         ;;
3001                                 esac
3002                                 case "$osname" in
3003                                 svr4.0)
3004                                         : Check for ESIX
3005                                         if test -f /stand/boot ; then
3006                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3007                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3008                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3009                                                         if test -n "$isesix"; then
3010                                                                 osname=esix4
3011                                                         fi
3012                                                 fi
3013                                         fi
3014                                         ;;
3015                                 esac
3016                                 ;;
3017                         *)      if test -f /etc/systemid; then
3018                                         osname=sco
3019                                         set `echo $3 | $sed 's/\./ /g'` $4
3020                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3021                                                 osvers=$1.$2.$3
3022                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3023                                                 osvers=$1.$2
3024                                         elif $test -f $src/hints/sco_$1.sh; then
3025                                                 osvers=$1
3026                                         fi
3027                                 else
3028                                         case "$osname" in
3029                                         '') : Still unknown.  Probably a generic Sys V.
3030                                                 osname="sysv"
3031                                                 osvers="$3"
3032                                                 ;;
3033                                         esac
3034                                 fi
3035                                 ;;
3036                         esac
3037                         ;;
3038                 *)      case "$osname" in
3039                         '') : Still unknown.  Probably a generic BSD.
3040                                 osname="$1"
3041                                 osvers="$3"
3042                                 ;;
3043                         esac
3044                         ;;
3045                 esac
3046         else
3047                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3048                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3049                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3050                                 osname=news_os
3051                         fi
3052                         $rm -f UU/kernel.what
3053                 elif test -d c:/.; then
3054                         set X $myuname
3055                         osname=os2
3056                         osvers="$5"
3057                 fi
3058         fi
3059         
3060         case "$targetarch" in
3061         '') ;;
3062         *)  hostarch=$osname
3063             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3064             osvers=''
3065             ;;
3066         esac
3067
3068         : Now look for a hint file osname_osvers, unless one has been
3069         : specified already.
3070         case "$hintfile" in
3071         ''|' ')
3072                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3073                 : Also try without trailing minor version numbers.
3074                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3075                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3076                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3077                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3078                 case "$file" in
3079                 '') dflt=none ;;
3080                 *)  case "$osvers" in
3081                         '') dflt=$file
3082                                 ;;
3083                         *)  if $test -f $src/hints/$file.sh ; then
3084                                         dflt=$file
3085                                 elif $test -f $src/hints/$xfile.sh ; then
3086                                         dflt=$xfile
3087                                 elif $test -f $src/hints/$xxfile.sh ; then
3088                                         dflt=$xxfile
3089                                 elif $test -f $src/hints/$xxxfile.sh ; then
3090                                         dflt=$xxxfile
3091                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3092                                         dflt=$xxxxfile
3093                                 elif $test -f "$src/hints/${osname}.sh" ; then
3094                                         dflt="${osname}"
3095                                 else
3096                                         dflt=none
3097                                 fi
3098                                 ;;
3099                         esac
3100                         ;;
3101                 esac
3102                 if $test -f Policy.sh ; then
3103                         case "$dflt" in
3104                         *Policy*) ;;
3105                         none) dflt="Policy" ;;
3106                         *) dflt="Policy $dflt" ;;
3107                         esac
3108                 fi
3109                 ;;
3110         *)
3111                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3112                 ;;
3113         esac
3114
3115         if $test -f Policy.sh ; then
3116                 $cat <<EOM
3117
3118 There's also a Policy hint file available, which should make the
3119 site-specific (policy) questions easier to answer.
3120 EOM
3121
3122         fi
3123
3124         $cat <<EOM
3125
3126 You may give one or more space-separated answers, or "none" if appropriate.
3127 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3128 is a good thing.  DO NOT give a wrong version or a wrong OS.
3129
3130 EOM
3131
3132         rp="Which of these apply, if any?"
3133         . UU/myread
3134         tans=$ans
3135         for file in $tans; do
3136                 if $test X$file = XPolicy -a -f Policy.sh; then
3137                         . Policy.sh
3138                         $cat Policy.sh >> UU/config.sh
3139                 elif $test -f $src/hints/$file.sh; then
3140                         . $src/hints/$file.sh
3141                         $cat $src/hints/$file.sh >> UU/config.sh
3142                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3143                         : nothing
3144                 else
3145                         : Give one chance to correct a possible typo.
3146                         echo "$file.sh does not exist"
3147                         dflt=$file
3148                         rp="hint to use instead?"
3149                         . UU/myread
3150                         for file in $ans; do
3151                                 if $test -f "$src/hints/$file.sh"; then
3152                                         . $src/hints/$file.sh
3153                                         $cat $src/hints/$file.sh >> UU/config.sh
3154                                 elif $test X$ans = X -o X$ans = Xnone ; then
3155                                         : nothing
3156                                 else
3157                                         echo "$file.sh does not exist -- ignored."
3158                                 fi
3159                         done
3160                 fi
3161         done
3162
3163         hint=recommended
3164         : Remember our hint file for later.
3165         if $test -f "$src/hints/$file.sh" ; then
3166                 hintfile="$file"
3167         else
3168                 hintfile=''
3169         fi
3170 fi
3171 cd UU
3172 ;;
3173 *)
3174         echo " "
3175         echo "Fetching default answers from $config_sh..." >&4
3176         tmp_n="$n"
3177         tmp_c="$c"
3178         cd ..
3179         cp $config_sh config.sh 2>/dev/null
3180         chmod +w config.sh
3181         . ./config.sh
3182         cd UU
3183         cp ../config.sh .
3184         n="$tmp_n"
3185         c="$tmp_c"
3186         hint=previous
3187         ;;
3188 esac
3189 test "$override" && . ./optdef.sh
3190
3191 : Restore computed paths
3192 for file in $loclist $trylist; do
3193         eval $file="\$_$file"
3194 done
3195
3196 cat << EOM
3197
3198 Configure uses the operating system name and version to set some defaults.
3199 The default value is probably right if the name rings a bell. Otherwise,
3200 since spelling matters for me, either accept the default or answer "none"
3201 to leave it blank.
3202
3203 EOM
3204 case "$osname" in
3205         ''|' ')
3206                 case "$hintfile" in
3207                 ''|' '|none) dflt=none ;;
3208                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3209                 esac
3210                 ;;
3211         *) dflt="$osname" ;;
3212 esac
3213 rp="Operating system name?"
3214 . ./myread
3215 case "$ans" in
3216 none)  osname='' ;;
3217 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3218 esac
3219 echo " "
3220 case "$osvers" in
3221         ''|' ')
3222                 case "$hintfile" in
3223                 ''|' '|none) dflt=none ;;
3224                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3225                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3226                         case "$dflt" in
3227                         ''|' ') dflt=none ;;
3228                         esac
3229                         ;;
3230                 esac
3231                 ;;
3232         *) dflt="$osvers" ;;
3233 esac
3234 rp="Operating system version?"
3235 . ./myread
3236 case "$ans" in
3237 none)  osvers='' ;;
3238 *) osvers="$ans" ;;
3239 esac
3240
3241
3242 . ./posthint.sh
3243
3244 : who configured the system
3245 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3246 cf_by=`(logname) 2>/dev/null`
3247 case "$cf_by" in
3248 "")
3249         cf_by=`(whoami) 2>/dev/null`
3250         case "$cf_by" in
3251         "") cf_by=unknown ;;
3252         esac ;;
3253 esac
3254
3255 : set up the script used to warn in case of inconsistency
3256 cat <<EOS >whoa
3257 $startsh
3258 EOS
3259 cat <<'EOSC' >>whoa
3260 dflt=y
3261 echo " "
3262 echo "*** WHOA THERE!!! ***" >&4
3263 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3264 rp="    Keep the $hint value?"
3265 . ./myread
3266 case "$ans" in
3267 y) td=$was; tu=$was;;
3268 esac
3269 EOSC
3270
3271 : function used to set $1 to $val
3272 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3273 case "$val$was" in
3274 $define$undef) . ./whoa; eval "$var=\$td";;
3275 $undef$define) . ./whoa; eval "$var=\$tu";;
3276 *) eval "$var=$val";;
3277 esac'
3278
3279 case "$usethreads" in
3280 $define|true|[yY]*)     dflt='y';;
3281 *) dflt='n';;
3282 esac
3283 cat <<EOM
3284
3285 Perl can be built to take advantage of threads on some systems.
3286 To do so, Configure can be run with -Dusethreads.
3287
3288 Note that threading is a highly experimental feature, and
3289 some known race conditions still remain.  If you choose to try
3290 it, be very sure to not actually deploy it for production
3291 purposes.  README.threads has more details, and is required
3292 reading if you enable threads.
3293
3294 If this doesn't make any sense to you, just accept the default '$dflt'.
3295 EOM
3296 rp='Build a threading Perl?'
3297 . ./myread
3298 case "$ans" in
3299 y|Y)    val="$define" ;;
3300 *)      val="$undef" ;;
3301 esac
3302 set usethreads
3303 eval $setvar
3304
3305 case "$usethreads" in
3306 $define)
3307         $cat <<EOM
3308
3309 As of 5.5.640, Perl has two different internal threading implementations,
3310 the 5.005 version (5005threads) and an interpreter-based version
3311 (ithreads) that has one interpreter per thread.  Both are very 
3312 experimental.  This arrangement exists to help developers work out
3313 which one is better.
3314
3315 If you're a casual user, you probably don't want interpreter-threads
3316 at this time.  But if you do, the 'threads' module allows their use,
3317 and the 'Thread' module offers an interface to both 5005threads and
3318 ithreads (whichever has been configured).
3319 EOM
3320         : Default to ithreads unless overridden on command line or with
3321         : old config.sh
3322         dflt='y'
3323         case "$use5005threads" in
3324                 $define|true|[yY]*) dflt='n';;
3325         esac
3326         case "$useithreads" in
3327                 $undef|false|[nN]*) dflt='n';;
3328         esac
3329         rp='Use interpreter-based ithreads?'
3330         . ./myread
3331         case "$ans" in
3332         y|Y)    val="$define" ;;
3333         *)      val="$undef" ;;
3334         esac
3335         set useithreads
3336         eval $setvar
3337         : Now set use5005threads to the opposite value.
3338         case "$useithreads" in
3339         $define) val="$undef" ;;
3340         *) val="$define" ;;
3341         esac
3342         set use5005threads
3343         eval $setvar
3344         ;;
3345 *)
3346         useithreads="$undef"
3347         use5005threads="$undef"
3348         ;;
3349 esac
3350
3351 case "$useithreads$use5005threads" in
3352 "$define$define")
3353         $cat >&4 <<EOM
3354
3355 You cannot have both the ithreads and the 5.005 threads enabled
3356 at the same time.  Disabling the 5.005 threads since they are
3357 much less stable than the ithreads.
3358
3359 EOM
3360         use5005threads="$undef"
3361         ;;
3362 esac
3363
3364 case "$d_oldpthreads" in
3365 '')     : Configure tests would be welcome here.  For now, assume undef.
3366         val="$undef" ;;
3367 *)      val="$d_oldpthreads" ;;
3368 esac
3369 set d_oldpthreads
3370 eval $setvar
3371
3372
3373 case "$usethreads" in
3374 "$define"|true|[yY]*)
3375 : Look for a hint-file generated 'call-back-unit'.  If the
3376 : user has specified that a threading perl is to be built,
3377 : we may need to set or change some other defaults.
3378         if $test -f usethreads.cbu; then
3379                 echo "Your platform has some specific hints for threaded builds, using them..."
3380                 . ./usethreads.cbu
3381         else
3382                 $cat <<EOM
3383 (Your platform doesn't have any specific hints for threaded builds.
3384  Assuming POSIX threads, then.)
3385 EOM
3386         fi
3387         ;;
3388 esac
3389
3390 cat <<EOM
3391
3392 Perl can be built so that multiple Perl interpreters can coexist
3393 within the same Perl executable.
3394 EOM
3395
3396 case "$useithreads" in
3397 $define)
3398         cat <<EOM
3399 This multiple interpreter support is required for interpreter-based threads.
3400 EOM
3401         val="$define"
3402         ;;
3403 *)      case "$usemultiplicity" in
3404         $define|true|[yY]*)     dflt='y';;
3405         *) dflt='n';;
3406         esac
3407         echo " "
3408         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3409         rp='Build Perl for multiplicity?'
3410         . ./myread
3411         case "$ans" in
3412         y|Y)    val="$define" ;;
3413         *)      val="$undef" ;;
3414         esac
3415         ;;
3416 esac
3417 set usemultiplicity
3418 eval $setvar
3419
3420
3421 case "$usemorebits" in
3422 "$define"|true|[yY]*)
3423         use64bitint="$define"
3424         uselongdouble="$define"
3425         usemorebits="$define"
3426         ;;
3427 *)      usemorebits="$undef"
3428         ;;
3429 esac
3430
3431 : make some quick guesses about what we are up against
3432 echo " "
3433 $echo $n "Hmm...  $c"
3434 echo exit 1 >bsd
3435 echo exit 1 >usg
3436 echo exit 1 >v7
3437 echo exit 1 >osf1
3438 echo exit 1 >eunice
3439 echo exit 1 >xenix
3440 echo exit 1 >venix
3441 echo exit 1 >os2
3442 d_bsd="$undef"
3443 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3444 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3445 then
3446         echo "Looks kind of like an OSF/1 system, but we'll see..."
3447         echo exit 0 >osf1
3448 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3449         xxx=`./loc addbib blurfl $pth`
3450         if $test -f $xxx; then
3451         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3452                 echo exit 0 >bsd
3453                 echo exit 0 >usg
3454         else
3455                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3456                         echo "Looks kind of like an extended USG system, but we'll see..."
3457                 else
3458                         echo "Looks kind of like a USG system, but we'll see..."
3459                 fi
3460                 echo exit 0 >usg
3461         fi
3462 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3463         echo "Looks kind of like a BSD system, but we'll see..."
3464         d_bsd="$define"
3465         echo exit 0 >bsd
3466 else
3467         echo "Looks kind of like a Version 7 system, but we'll see..."
3468         echo exit 0 >v7
3469 fi
3470 case "$eunicefix" in
3471 *unixtovms*)
3472         $cat <<'EOI'
3473 There is, however, a strange, musty smell in the air that reminds me of
3474 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3475 EOI
3476         echo exit 0 >eunice
3477         d_eunice="$define"
3478 : it so happens the Eunice I know will not run shell scripts in Unix format
3479         ;;
3480 *)
3481         echo " "
3482         echo "Congratulations.  You aren't running Eunice."
3483         d_eunice="$undef"
3484         ;;
3485 esac
3486 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3487 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3488 : semicolon as a patch separator
3489 case "$p_" in
3490 :) ;;
3491 *)
3492         $cat <<'EOI'
3493 I have the feeling something is not exactly right, however...don't tell me...
3494 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3495 (Or you may be running DOS with DJGPP.)
3496 EOI
3497         echo exit 0 >os2
3498         ;;
3499 esac
3500 if test -f /xenix; then
3501         echo "Actually, this looks more like a XENIX system..."
3502         echo exit 0 >xenix
3503         d_xenix="$define"
3504 else
3505         echo " "
3506         echo "It's not Xenix..."
3507         d_xenix="$undef"
3508 fi
3509 chmod +x xenix
3510 $eunicefix xenix
3511 if test -f /venix; then
3512         echo "Actually, this looks more like a VENIX system..."
3513         echo exit 0 >venix
3514 else
3515         echo " "
3516         if ./xenix; then
3517                 : null
3518         else
3519                 echo "Nor is it Venix..."
3520         fi
3521 fi
3522 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3523 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3524 $rm -f foo
3525
3526 case "$cc" in
3527 '') dflt=cc;;
3528 *) dflt="$cc";;
3529 esac
3530 rp="Use which C compiler?"
3531 . ./myread
3532 cc="$ans"
3533 : Look for a hint-file generated 'call-back-unit'.  Now that the
3534 : user has specified the compiler, we may need to set or change some
3535 : other defaults.
3536 if $test -f cc.cbu; then
3537     . ./cc.cbu
3538 fi
3539 . ./checkcc
3540
3541 echo " "
3542 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3543 $cat >try.c <<EOM
3544 #include <stdio.h>
3545 int main() {
3546 #ifdef __GNUC__
3547 #ifdef __VERSION__
3548         printf("%s\n", __VERSION__);
3549 #else
3550         printf("%s\n", "1");
3551 #endif
3552 #endif
3553         exit(0);
3554 }
3555 EOM
3556 if $cc -o try $ccflags $ldflags try.c; then
3557         gccversion=`$run ./try`
3558         case "$gccversion" in
3559         '') echo "You are not using GNU cc." ;;
3560         *)  echo "You are using GNU cc $gccversion."
3561             ccname=gcc  
3562             ;;
3563         esac
3564 else
3565         echo " "
3566         echo "*** WHOA THERE!!! ***" >&4
3567         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3568         case "$knowitall" in
3569         '')
3570         echo "    You'd better start hunting for one and let me know about it." >&4
3571                 exit 1
3572                 ;;
3573         esac
3574 fi
3575 $rm -f try try.*
3576 case "$gccversion" in
3577 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3578 esac
3579 case "$gccversion" in
3580 '') gccosandvers='' ;;
3581 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3582    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3583    gccshortvers=''
3584    case "$gccosandvers" in
3585    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3586    $osname$osvers) ;; # looking good
3587    $osname*) cat <<EOM >&4
3588
3589 *** WHOA THERE!!! ***
3590
3591     Your gcc has not been compiled for the exact release of
3592     your operating system ($gccosandvers versus $osname$osvers).
3593
3594     In general it is a good idea to keep gcc synchronized with
3595     the operating system because otherwise serious problems
3596     may ensue when trying to compile software, like Perl.
3597
3598     I'm trying to be optimistic here, though, and will continue.
3599     If later during the configuration and build icky compilation
3600     problems appear (headerfile conflicts being the most common
3601     manifestation), I suggest reinstalling the gcc to match
3602     your operating system release.
3603
3604 EOM
3605       ;;
3606    *) gccosandvers='' ;; # failed to parse, better be silent
3607    esac
3608    ;;
3609 esac
3610 case "$ccname" in
3611 '') ccname="$cc" ;;
3612 esac
3613
3614
3615 : decide how portable to be.  Allow command line overrides.
3616 case "$d_portable" in
3617 "$undef") ;;
3618 *)      d_portable="$define" ;;
3619 esac
3620
3621 : set up shell script to do ~ expansion
3622 cat >filexp <<EOSS
3623 $startsh
3624 : expand filename
3625 case "\$1" in
3626  ~/*|~)
3627         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3628         ;;
3629  ~*)
3630         if $test -f /bin/csh; then
3631                 /bin/csh -f -c "glob \$1"
3632                 failed=\$?
3633                 echo ""
3634                 exit \$failed
3635         else
3636                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3637                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3638                 if $test ! -d "\$dir"; then
3639                         me=\`basename \$0\`
3640                         echo "\$me: can't locate home directory for: \$name" >&2
3641                         exit 1
3642                 fi
3643                 case "\$1" in
3644                 */*)
3645                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3646                         ;;
3647                 *)
3648                         echo \$dir
3649                         ;;
3650                 esac
3651         fi
3652         ;;
3653 *)
3654         echo \$1
3655         ;;
3656 esac
3657 EOSS
3658 chmod +x filexp
3659 $eunicefix filexp
3660
3661 : now set up to get a file name
3662 cat <<EOS >getfile
3663 $startsh
3664 EOS
3665 cat <<'EOSC' >>getfile
3666 tilde=''
3667 fullpath=''
3668 already=''
3669 skip=''
3670 none_ok=''
3671 exp_file=''
3672 nopath_ok=''
3673 orig_rp="$rp"
3674 orig_dflt="$dflt"
3675 case "$gfpth" in
3676 '') gfpth='.' ;;
3677 esac
3678
3679 case "$fn" in
3680 *\(*)
3681         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3682         fn=`echo $fn | sed 's/(.*)//'`
3683         ;;
3684 esac
3685
3686 case "$fn" in
3687 *:*)
3688         loc_file=`expr $fn : '.*:\(.*\)'`
3689         fn=`expr $fn : '\(.*\):.*'`
3690         ;;
3691 esac
3692
3693 case "$fn" in
3694 *~*) tilde=true;;
3695 esac
3696 case "$fn" in
3697 */*) fullpath=true;;
3698 esac
3699 case "$fn" in
3700 *+*) skip=true;;
3701 esac
3702 case "$fn" in
3703 *n*) none_ok=true;;
3704 esac
3705 case "$fn" in
3706 *e*) exp_file=true;;
3707 esac
3708 case "$fn" in
3709 *p*) nopath_ok=true;;
3710 esac
3711
3712 case "$fn" in
3713 *f*) type='File';;
3714 *d*) type='Directory';;
3715 *l*) type='Locate';;
3716 esac
3717
3718 what="$type"
3719 case "$what" in
3720 Locate) what='File';;
3721 esac
3722
3723 case "$exp_file" in
3724 '')
3725         case "$d_portable" in
3726         "$define") ;;
3727         *) exp_file=true;;
3728         esac
3729         ;;
3730 esac
3731
3732 cd ..
3733 while test "$type"; do
3734         redo=''
3735         rp="$orig_rp"
3736         dflt="$orig_dflt"
3737         case "$tilde" in
3738         true) rp="$rp (~name ok)";;
3739         esac
3740         . UU/myread
3741         if test -f UU/getfile.ok && \
3742                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3743         then
3744                 value="$ans"
3745                 ansexp="$ans"
3746                 break
3747         fi
3748         case "$ans" in
3749         none)
3750                 value=''
3751                 ansexp=''
3752                 case "$none_ok" in
3753                 true) type='';;
3754                 esac
3755                 ;;
3756         *)
3757                 case "$tilde" in
3758                 '') value="$ans"
3759                         ansexp="$ans";;
3760                 *)
3761                         value=`UU/filexp $ans`
3762                         case $? in
3763                         0)
3764                                 if test "$ans" != "$value"; then
3765                                         echo "(That expands to $value on this system.)"
3766                                 fi
3767                                 ;;
3768                         *) value="$ans";;
3769                         esac
3770                         ansexp="$value"
3771                         case "$exp_file" in
3772                         '') value="$ans";;
3773                         esac
3774                         ;;
3775                 esac
3776                 case "$fullpath" in
3777                 true)
3778                         case "$ansexp" in
3779                         /*) value="$ansexp" ;;
3780                         [a-zA-Z]:/*) value="$ansexp" ;;
3781                         *)
3782                                 redo=true
3783                                 case "$already" in
3784                                 true)
3785                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3786                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3787                                         ;;
3788                                 *)
3789                                 echo "Please give a full path name, starting with slash." >&4
3790                                         case "$tilde" in
3791                                         true)
3792                                 echo "Note that using ~name is ok provided it expands well." >&4
3793                                                 already=true
3794                                                 ;;
3795                                         esac
3796                                 esac
3797                                 ;;
3798                         esac
3799                         ;;
3800                 esac
3801                 case "$redo" in
3802                 '')
3803                         case "$type" in
3804                         File)
3805                                 for fp in $gfpth; do
3806                                         if test "X$fp" = X.; then
3807                                             pf="$ansexp"
3808                                         else    
3809                                             pf="$fp/$ansexp"
3810                                         fi
3811                                         if test -f "$pf"; then
3812                                                 type=''
3813                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3814                                         then
3815                                                 echo "($value is not a plain file, but that's ok.)"
3816                                                 type=''
3817                                         fi
3818                                         if test X"$type" = X; then
3819                                             value="$pf"
3820                                             break
3821                                         fi
3822                                 done
3823                                 ;;
3824                         Directory)
3825                                 for fp in $gfpth; do
3826                                         if test "X$fp" = X.; then
3827                                             dir="$ans"
3828                                             direxp="$ansexp"
3829                                         else    
3830                                             dir="$fp/$ansexp"
3831                                             direxp="$fp/$ansexp"
3832                                         fi
3833                                         if test -d "$direxp"; then
3834                                                 type=''
3835                                                 value="$dir"
3836                                                 break
3837                                         fi
3838                                 done
3839                                 ;;
3840                         Locate)
3841                                 if test -d "$ansexp"; then
3842                                         echo "(Looking for $loc_file in directory $value.)"
3843                                         value="$value/$loc_file"
3844                                         ansexp="$ansexp/$loc_file"
3845                                 fi
3846                                 if test -f "$ansexp"; then
3847                                         type=''
3848                                 fi
3849                                 case "$nopath_ok" in
3850                                 true)   case "$value" in
3851                                         */*) ;;
3852                                         *)      echo "Assuming $value will be in people's path."
3853                                                 type=''
3854                                                 ;;
3855                                         esac
3856                                         ;;
3857                                 esac
3858                                 ;;
3859                         esac
3860
3861                         case "$skip" in
3862                         true) type='';
3863                         esac
3864
3865                         case "$type" in
3866                         '') ;;
3867                         *)
3868                                 if test "$fastread" = yes; then
3869                                         dflt=y
3870                                 else
3871                                         dflt=n
3872                                 fi
3873                                 rp="$what $value doesn't exist.  Use that name anyway?"
3874                                 . UU/myread
3875                                 dflt=''
3876                                 case "$ans" in
3877                                 y*) type='';;
3878                                 *) echo " ";;
3879                                 esac
3880                                 ;;
3881                         esac
3882                         ;;
3883                 esac
3884                 ;;
3885         esac
3886 done
3887 cd UU
3888 ans="$value"
3889 rp="$orig_rp"
3890 dflt="$orig_dflt"
3891 rm -f getfile.ok
3892 test "X$gfpthkeep" != Xy && gfpth=""
3893 EOSC
3894
3895 : What should the include directory be ?
3896 echo " "
3897 $echo $n "Hmm...  $c"
3898 dflt='/usr/include'
3899 incpath=''
3900 mips_type=''
3901 if $test -f /bin/mips && /bin/mips; then
3902         echo "Looks like a MIPS system..."
3903         $cat >usr.c <<'EOCP'
3904 #ifdef SYSTYPE_BSD43
3905 /bsd43
3906 #endif
3907 EOCP
3908         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3909                 dflt='/bsd43/usr/include'
3910                 incpath='/bsd43'
3911                 mips_type='BSD 4.3'
3912         else
3913                 mips_type='System V'
3914         fi
3915         $rm -f usr.c usr.out
3916         echo "and you're compiling with the $mips_type compiler and libraries."
3917         xxx_prompt=y
3918         echo "exit 0" >mips
3919 else
3920         echo "Doesn't look like a MIPS system."
3921         xxx_prompt=n
3922         echo "exit 1" >mips
3923 fi
3924 chmod +x mips
3925 $eunicefix mips
3926 case "$usrinc" in
3927 '') ;;
3928 *) dflt="$usrinc";;
3929 esac
3930 case "$xxx_prompt" in
3931 y)      fn=d/
3932         echo " "
3933         rp='Where are the include files you want to use?'
3934         . ./getfile
3935         usrinc="$ans"
3936         ;;
3937 *)      usrinc="$dflt"
3938         ;;
3939 esac
3940
3941 : see how we invoke the C preprocessor
3942 echo " "
3943 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3944 cat <<'EOT' >testcpp.c
3945 #define ABC abc
3946 #define XYZ xyz
3947 ABC.XYZ
3948 EOT
3949 cd ..
3950 if test ! -f cppstdin; then
3951         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3952                 # AIX cc -E doesn't show the absolute headerfile
3953                 # locations but we'll cheat by using the -M flag.
3954                 echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin
3955         else
3956                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3957         fi
3958 else
3959         echo "Keeping your $hint cppstdin wrapper."
3960 fi
3961 chmod 755 cppstdin
3962 wrapper=`pwd`/cppstdin
3963 ok='false'
3964 cd UU
3965
3966 if $test "X$cppstdin" != "X" && \
3967         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3968         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3969 then
3970         echo "You used to use $cppstdin $cppminus so we'll use that again."
3971         case "$cpprun" in
3972         '') echo "But let's see if we can live without a wrapper..." ;;
3973         *)
3974                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3975                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3976                 then
3977                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3978                         ok='true'
3979                 else
3980                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3981                 fi
3982                 ;;
3983         esac
3984 else
3985         case "$cppstdin" in
3986         '') ;;
3987         *)
3988                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3989                 ;;
3990         esac
3991 fi
3992
3993 if $ok; then
3994         : nothing
3995 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3996         $cc -E <testcpp.c >testcpp.out 2>&1; \
3997         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3998         echo "Yup, it does."
3999         x_cpp="$cc -E"
4000         x_minus='';
4001 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4002         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4003         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4004         echo "Yup, it does."
4005         x_cpp="$cc -E"
4006         x_minus='-';
4007 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4008         $cc -P <testcpp.c >testcpp.out 2>&1; \
4009         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4010         echo "Yipee, that works!"
4011         x_cpp="$cc -P"
4012         x_minus='';
4013 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4014         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4015         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4016         echo "At long last!"
4017         x_cpp="$cc -P"
4018         x_minus='-';
4019 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4020         $cpp <testcpp.c >testcpp.out 2>&1; \
4021         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4022         echo "It works!"
4023         x_cpp="$cpp"
4024         x_minus='';
4025 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4026         $cpp - <testcpp.c >testcpp.out 2>&1; \
4027         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4028         echo "Hooray, it works!  I was beginning to wonder."
4029         x_cpp="$cpp"
4030         x_minus='-';
4031 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4032         $wrapper <testcpp.c >testcpp.out 2>&1; \
4033         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4034         x_cpp="$wrapper"
4035         x_minus=''
4036         echo "Eureka!"
4037 else
4038         dflt=''
4039         rp="No dice.  I can't find a C preprocessor.  Name one:"
4040         . ./myread
4041         x_cpp="$ans"
4042         x_minus=''
4043         $x_cpp <testcpp.c >testcpp.out 2>&1
4044         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4045                 echo "OK, that will do." >&4
4046         else
4047 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4048                 exit 1
4049         fi
4050 fi
4051
4052 case "$ok" in
4053 false)
4054         cppstdin="$x_cpp"
4055         cppminus="$x_minus"
4056         cpprun="$x_cpp"
4057         cpplast="$x_minus"
4058         set X $x_cpp
4059         shift
4060         case "$1" in
4061         "$cpp")
4062                 echo "Perhaps can we force $cc -E using a wrapper..."
4063                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4064                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4065                 then
4066                         echo "Yup, we can."
4067                         cppstdin="$wrapper"
4068                         cppminus='';
4069                 else
4070                         echo "Nope, we'll have to live without it..."
4071                 fi
4072                 ;;
4073         esac
4074         case "$cpprun" in
4075         "$wrapper")
4076                 cpprun=''
4077                 cpplast=''
4078                 ;;
4079         esac
4080         ;;
4081 esac
4082
4083 case "$cppstdin" in
4084 "$wrapper"|'cppstdin') ;;
4085 *) $rm -f $wrapper;;
4086 esac
4087 $rm -f testcpp.c testcpp.out
4088
4089 : Set private lib path
4090 case "$plibpth" in
4091 '') if ./mips; then
4092                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4093         fi;;
4094 esac
4095 case "$libpth" in
4096 ' ') dlist='';;
4097 '') dlist="$loclibpth $plibpth $glibpth";;
4098 *) dlist="$libpth";;
4099 esac
4100
4101 : Now check and see which directories actually exist, avoiding duplicates
4102 libpth=''
4103 for xxx in $dlist
4104 do
4105     if $test -d $xxx; then
4106                 case " $libpth " in
4107                 *" $xxx "*) ;;
4108                 *) libpth="$libpth $xxx";;
4109                 esac
4110     fi
4111 done
4112 $cat <<'EOM'
4113
4114 Some systems have incompatible or broken versions of libraries.  Among
4115 the directories listed in the question below, please remove any you
4116 know not to be holding relevant libraries, and add any that are needed.
4117 Say "none" for none.
4118
4119 EOM
4120 case "$libpth" in
4121 '') dflt='none';;
4122 *)
4123         set X $libpth
4124         shift
4125         dflt=${1+"$@"}
4126         ;;
4127 esac
4128 rp="Directories to use for library searches?"
4129 . ./myread
4130 case "$ans" in
4131 none) libpth=' ';;
4132 *) libpth="$ans";;
4133 esac
4134
4135 : compute shared library extension
4136 case "$so" in
4137 '')
4138         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4139                 dflt='sl'
4140         else
4141                 dflt='so'
4142         fi
4143         ;;
4144 *) dflt="$so";;
4145 esac
4146 $cat <<EOM
4147
4148 On some systems, shared libraries may be available.  Answer 'none' if
4149 you want to suppress searching of shared libraries for the remainder
4150 of this configuration.
4151
4152 EOM
4153 rp='What is the file extension used for shared libraries?'
4154 . ./myread
4155 so="$ans"
4156
4157 : Define several unixisms.
4158 : Hints files or command line option can be used to override them.
4159 : The convoluted testing is in case hints files set either the old
4160 : or the new name.
4161 case "$_exe" in
4162 '')     case "$exe_ext" in
4163         '')     ;;
4164         *)      _exe="$exe_ext" ;;
4165         esac
4166         ;;
4167 esac
4168 case "$_a" in
4169 '')     case "$lib_ext" in
4170     '') _a='.a';;
4171         *)      _a="$lib_ext" ;;
4172         esac
4173         ;;
4174 esac
4175 case "$_o" in
4176 '') case "$obj_ext" in
4177         '')     _o='.o';;
4178         *)      _o="$obj_ext";;
4179         esac
4180         ;;
4181 esac
4182 case "$p_" in
4183 '') case "$path_sep" in
4184         '')     p_=':';;
4185         *)      p_="$path_sep";;
4186         esac
4187         ;;
4188 esac
4189 exe_ext=$_exe
4190 lib_ext=$_a
4191 obj_ext=$_o
4192 path_sep=$p_
4193
4194 : Which makefile gets called first.  This is used by make depend.
4195 case "$firstmakefile" in
4196 '') firstmakefile='makefile';;
4197 esac
4198
4199 case "$usesocks" in
4200 $define|true|[yY]*)     dflt='y';;
4201 *) dflt='n';;
4202 esac
4203 cat <<EOM
4204
4205 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4206 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4207 to use the PerlIO abstraction layer, this will be implicitly selected.
4208
4209 If this doesn't make any sense to you, just accept the default '$dflt'.
4210 EOM
4211 rp='Build Perl for SOCKS?'
4212 . ./myread
4213 case "$ans" in
4214 y|Y)    val="$define" ;;     
4215 *)      val="$undef" ;;
4216 esac
4217 set usesocks
4218 eval $setvar
4219
4220 case "$usesocks" in
4221 $define|true|[yY]*) useperlio="$define";;
4222 esac
4223
4224 : Looking for optional libraries
4225 echo " "
4226 echo "Checking for optional libraries..." >&4
4227 case "$libs" in
4228 ' '|'') dflt='';;
4229 *) dflt="$libs";;
4230 esac
4231 case "$libswanted" in
4232 '') libswanted='c_s';;
4233 esac
4234 case "$usesocks" in
4235 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4236 esac
4237 libsfound=''
4238 libsfiles=''
4239 libsdirs=''
4240 libspath=''
4241 for thisdir in $libpth $xlibpth; do
4242   test -d $thisdir && libspath="$libspath $thisdir"
4243 done
4244 for thislib in $libswanted; do
4245         for thisdir in $libspath; do
4246             xxx=''
4247             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4248                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4249                 $test -f "$xxx" && eval $libscheck
4250                 $test -f "$xxx" && libstyle=shared
4251             fi
4252             if test ! -f "$xxx"; then
4253                 xxx=$thisdir/lib$thislib.$so
4254                 $test -f "$xxx" && eval $libscheck
4255                 $test -f "$xxx" && libstyle=shared
4256             fi  
4257             if test ! -f "$xxx"; then
4258                 xxx=$thisdir/lib$thislib$_a
4259                 $test -f "$xxx" && eval $libscheck
4260                 $test -f "$xxx" && libstyle=static
4261             fi
4262             if test ! -f "$xxx"; then
4263                 xxx=$thisdir/$thislib$_a
4264                 $test -f "$xxx" && eval $libscheck
4265                 $test -f "$xxx" && libstyle=static
4266             fi
4267             if test ! -f "$xxx"; then
4268                 xxx=$thisdir/lib${thislib}_s$_a
4269                 $test -f "$xxx" && eval $libscheck
4270                 $test -f "$xxx" && libstyle=static
4271                 $test -f "$xxx" && thislib=${thislib}_s
4272             fi
4273             if test ! -f "$xxx"; then
4274                 xxx=$thisdir/Slib$thislib$_a
4275                 $test -f "$xxx" && eval $libscheck
4276                 $test -f "$xxx" && libstyle=static
4277             fi
4278             if $test -f "$xxx"; then
4279                 case "$libstyle" in
4280                 shared) echo "Found -l$thislib (shared)." ;;
4281                 static) echo "Found -l$thislib." ;;
4282                 *)      echo "Found -l$thislib ($libstyle)." ;;
4283                 esac
4284                 case " $dflt " in
4285                 *"-l$thislib "*);;
4286                 *) dflt="$dflt -l$thislib"
4287                    libsfound="$libsfound $xxx"
4288                    yyy=`basename $xxx`
4289                    libsfiles="$libsfiles $yyy"
4290                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4291                    case " $libsdirs " in
4292                    *" $yyy "*) ;;
4293                    *) libsdirs="$libsdirs $yyy" ;;
4294                    esac
4295                    ;;
4296                 esac
4297                 break
4298             fi  
4299         done
4300         if $test ! -f "$xxx"; then
4301             echo "No -l$thislib."
4302         fi
4303 done
4304 set X $dflt
4305 shift
4306 dflt="$*"
4307 case "$libs" in
4308 '') dflt="$dflt";;
4309 *) dflt="$libs";;
4310 esac
4311 case "$dflt" in
4312 ' '|'') dflt='none';;
4313 esac
4314
4315 $cat <<EOM
4316
4317 In order to compile $package on your machine, a number of libraries
4318 are usually needed.  Include any other special libraries here as well.
4319 Say "none" for none.  The default list is almost always right.
4320 EOM
4321
4322 echo " "
4323 rp="What libraries to use?"
4324 . ./myread
4325 case "$ans" in
4326 none) libs=' ';;
4327 *) libs="$ans";;
4328 esac
4329
4330 : determine optimization, if desired, or use for debug flag also
4331 case "$optimize" in
4332 ' '|$undef) dflt='none';;
4333 '') dflt='-O';;
4334 *) dflt="$optimize";;
4335 esac
4336 $cat <<EOH
4337
4338 By default, $package compiles with the -O flag to use the optimizer.
4339 Alternately, you might want to use the symbolic debugger, which uses
4340 the -g flag (on traditional Unix systems).  Either flag can be
4341 specified here.  To use neither flag, specify the word "none".
4342
4343 EOH
4344 rp="What optimizer/debugger flag should be used?"
4345 . ./myread
4346 optimize="$ans"
4347 case "$optimize" in
4348 'none') optimize=" ";;
4349 esac
4350
4351 dflt=''
4352 : We will not override a previous value, but we might want to
4353 : augment a hint file
4354 case "$hint" in
4355 default|recommended)
4356         case "$gccversion" in
4357         1*) dflt='-fpcc-struct-return' ;;
4358         esac
4359         case "$optimize" in
4360         *-g*) dflt="$dflt -DDEBUGGING";;
4361         esac
4362         case "$gccversion" in
4363         2*) if test -d /etc/conf/kconfig.d &&
4364                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4365                 then
4366                         dflt="$dflt -posix"
4367                 fi
4368                 ;;
4369         esac
4370         case "$gccversion" in
4371         1*) ;;
4372         2.[0-8]*) ;;
4373         ?*)     echo " "
4374                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4375                 echo 'int main(void) { return 0; }' > gcctest.c
4376                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4377                         echo "Yes, it does." 2>&1
4378                         case "$ccflags" in
4379                         *strict-aliasing*) 
4380                                 echo "Leaving current flags $ccflags alone." 2>&1
4381                                 ;;
4382                         *) dflt="$dflt -fno-strict-aliasing" ;;
4383                         esac
4384                 else
4385                         echo "Nope, it doesn't, but that's ok." 2>&1
4386                 fi
4387                 ;;
4388         esac
4389         ;;
4390 esac
4391
4392 case "$mips_type" in
4393 *BSD*|'') inclwanted="$locincpth $usrinc";;
4394 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4395 esac
4396 for thisincl in $inclwanted; do
4397         if $test -d $thisincl; then
4398                 if $test x$thisincl != x$usrinc; then
4399                         case "$dflt" in
4400                         *" -I$thisincl "*);;
4401                         *) dflt="$dflt -I$thisincl ";;
4402                         esac
4403                 fi
4404         fi
4405 done
4406
4407 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4408         xxx=true;
4409 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4410         xxx=true;
4411 else
4412         xxx=false;
4413 fi;
4414 if $xxx; then
4415         case "$dflt" in
4416         *$2*);;
4417         *) dflt="$dflt -D$2";;
4418         esac;
4419 fi'
4420
4421 set signal.h LANGUAGE_C; eval $inctest
4422
4423 case "$usesocks" in
4424 $define)
4425         ccflags="$ccflags -DSOCKS"
4426         ;;
4427 esac
4428
4429 case "$hint" in
4430 default|recommended) dflt="$ccflags $dflt" ;;
4431 *) dflt="$ccflags";;
4432 esac
4433
4434 case "$dflt" in
4435 ''|' ') dflt=none;;
4436 esac
4437
4438 $cat <<EOH
4439
4440 Your C compiler may want other flags.  For this question you should include
4441 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4442 but you should NOT include libraries or ld flags like -lwhatever.  If you
4443 want $package to honor its debug switch, you should include -DDEBUGGING here.
4444 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4445
4446 To use no flags, specify the word "none".
4447
4448 EOH
4449 set X $dflt
4450 shift
4451 dflt=${1+"$@"}
4452 rp="Any additional cc flags?"
4453 . ./myread
4454 case "$ans" in
4455 none) ccflags='';;
4456 *) ccflags="$ans";;
4457 esac
4458
4459 : the following weeds options from ccflags that are of no interest to cpp
4460 case "$cppflags" in
4461 '') cppflags="$ccflags" ;;
4462 *)  cppflags="$cppflags $ccflags" ;;
4463 esac
4464 case "$gccversion" in
4465 1*) cppflags="$cppflags -D__GNUC__"
4466 esac
4467 case "$mips_type" in
4468 '');;
4469 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4470 esac
4471 case "$cppflags" in
4472 '');;
4473 *)
4474         echo " "
4475         echo "Let me guess what the preprocessor flags are..." >&4
4476         set X $cppflags
4477         shift
4478         cppflags=''
4479         $cat >cpp.c <<'EOM'
4480 #define BLURFL foo
4481
4482 BLURFL xx LFRULB
4483 EOM
4484         previous=''
4485         for flag in $*
4486         do
4487                 case "$flag" in
4488                 -*) ftry="$flag";;
4489                 *) ftry="$previous $flag";;
4490                 esac
4491                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4492                         >cpp1.out 2>/dev/null && \
4493                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4494                         >cpp2.out 2>/dev/null && \
4495                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4496                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4497                 then
4498                         cppflags="$cppflags $ftry"
4499                         previous=''
4500                 else
4501                         previous="$flag"
4502                 fi
4503         done
4504         set X $cppflags
4505         shift
4506         cppflags=${1+"$@"}
4507         case "$cppflags" in
4508         *-*)  echo "They appear to be: $cppflags";;
4509         esac
4510         $rm -f cpp.c cpp?.out
4511         ;;
4512 esac
4513
4514 : flags used in final linking phase
4515 case "$ldflags" in
4516 '') if ./venix; then
4517                 dflt='-i -z'
4518         else
4519                 dflt=''
4520         fi
4521         case "$ccflags" in
4522         *-posix*) dflt="$dflt -posix" ;;
4523         esac
4524         ;;
4525 *) dflt="$ldflags";;
4526 esac
4527
4528 : Try to guess additional flags to pick up local libraries.
4529 for thislibdir in $libpth; do
4530         case " $loclibpth " in
4531         *" $thislibdir "*)
4532                 case "$dflt " in 
4533                 *"-L$thislibdir "*) ;;
4534                 *)  dflt="$dflt -L$thislibdir" ;;
4535                 esac
4536                 ;;
4537         esac
4538 done
4539
4540 case "$dflt" in
4541 '') dflt='none' ;;
4542 esac
4543
4544 $cat <<EOH
4545
4546 Your C linker may need flags.  For this question you should
4547 include -L/whatever and any other flags used by the C linker, but you
4548 should NOT include libraries like -lwhatever.
4549
4550 Make sure you include the appropriate -L/path flags if your C linker
4551 does not normally search all of the directories you specified above,
4552 namely
4553         $libpth
4554 To use no flags, specify the word "none".
4555
4556 EOH
4557
4558 rp="Any additional ld flags (NOT including libraries)?"
4559 . ./myread
4560 case "$ans" in
4561 none) ldflags='';;
4562 *) ldflags="$ans";;
4563 esac
4564 rmlist="$rmlist pdp11"
4565
4566 : coherency check
4567 echo " "
4568 echo "Checking your choice of C compiler and flags for coherency..." >&4
4569 $cat > try.c <<'EOF'
4570 #include <stdio.h>
4571 int main() { printf("Ok\n"); exit(0); }
4572 EOF
4573 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4574 shift
4575 $cat >try.msg <<'EOM'
4576 I've tried to compile and run the following simple program:
4577
4578 EOM
4579 $cat try.c >> try.msg
4580
4581 $cat >> try.msg <<EOM
4582
4583 I used the command:
4584
4585         $*
4586         $run ./try
4587
4588 and I got the following output:
4589
4590 EOM
4591 dflt=y
4592 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4593         if $sh -c "$run ./try" >>try.msg 2>&1; then
4594                 xxx=`$run ./try`
4595                 case "$xxx" in
4596                 "Ok") dflt=n ;;
4597                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4598                         case " $libs " in
4599                         *" -lsfio "*)
4600                                 cat >> try.msg <<'EOQS'
4601 If $libs contains -lsfio, and sfio is mis-configured, then it
4602 sometimes (apparently) runs and exits with a 0 status, but with no
4603 output!  It may have to do with sfio's use of _exit vs. exit.
4604
4605 EOQS
4606                                 rp="You have a big problem.  Shall I abort Configure"
4607                                 dflt=y
4608                                 ;;
4609                         esac
4610                         ;;
4611                 esac
4612         else
4613                 echo "The program compiled OK, but exited with status $?." >>try.msg
4614                 rp="You have a problem.  Shall I abort Configure"
4615                 dflt=y
4616         fi
4617 else
4618         echo "I can't compile the test program." >>try.msg
4619         rp="You have a BIG problem.  Shall I abort Configure"
4620         dflt=y
4621 fi
4622 case "$dflt" in
4623 y)
4624         $cat try.msg >&4
4625         case "$knowitall" in
4626         '')
4627                 echo "(The supplied flags or libraries might be incorrect.)"
4628                 ;;
4629         *) dflt=n;;
4630         esac
4631         echo " "
4632         . ./myread
4633         case "$ans" in
4634         n*|N*) ;;
4635         *)      echo "Ok.  Stopping Configure." >&4
4636                 exit 1
4637                 ;;
4638         esac
4639         ;;
4640 n) echo "OK, that should do.";;
4641 esac
4642 $rm -f try try.* core
4643
4644 : define a shorthand compile call
4645 compile='
4646 mc_file=$1;
4647 shift;
4648 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4649 : define a shorthand compile call for compilations that should be ok.
4650 compile_ok='
4651 mc_file=$1;
4652 shift;
4653 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4654
4655 : check for lengths of integral types
4656 echo " "
4657 case "$intsize" in
4658 '')
4659         echo "Checking to see how big your integers are..." >&4
4660         $cat >try.c <<'EOCP'
4661 #include <stdio.h>
4662 int main()
4663 {
4664         printf("intsize=%d;\n", (int)sizeof(int));
4665         printf("longsize=%d;\n", (int)sizeof(long));
4666         printf("shortsize=%d;\n", (int)sizeof(short));
4667         exit(0);
4668 }
4669 EOCP
4670         set try
4671         if eval $compile_ok && $run ./try > /dev/null; then
4672                 eval `$run ./try`
4673                 echo "Your integers are $intsize bytes long."
4674                 echo "Your long integers are $longsize bytes long."
4675                 echo "Your short integers are $shortsize bytes long."
4676         else
4677                 $cat >&4 <<EOM
4678 !
4679 Help! I can't compile and run the intsize test program: please enlighten me!
4680 (This is probably a misconfiguration in your system or libraries, and
4681 you really ought to fix it.  Still, I'll try anyway.)
4682 !
4683 EOM
4684                 dflt=4
4685                 rp="What is the size of an integer (in bytes)?"
4686                 . ./myread
4687                 intsize="$ans"
4688                 dflt=$intsize
4689                 rp="What is the size of a long integer (in bytes)?"
4690                 . ./myread
4691                 longsize="$ans"
4692                 dflt=2
4693                 rp="What is the size of a short integer (in bytes)?"
4694                 . ./myread
4695                 shortsize="$ans"
4696         fi
4697         ;;
4698 esac
4699 $rm -f try try.*
4700
4701 : check for void type
4702 echo " "
4703 echo "Checking to see how well your C compiler groks the void type..." >&4
4704 case "$voidflags" in
4705 '')
4706         $cat >try.c <<'EOCP'
4707 #if TRY & 1
4708 void sub() {
4709 #else
4710 sub() {
4711 #endif
4712         extern void moo();      /* function returning void */
4713         void (*goo)();          /* ptr to func returning void */
4714 #if TRY & 8
4715         void *hue;              /* generic ptr */
4716 #endif
4717 #if TRY & 2
4718         void (*foo[10])();
4719 #endif
4720
4721 #if TRY & 4
4722         if(goo == moo) {
4723                 exit(0);
4724         }
4725 #endif
4726         exit(0);
4727 }
4728 int main() { sub(); }
4729 EOCP
4730         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4731                 voidflags=$defvoidused
4732         echo "Good.  It appears to support void to the level $package wants.">&4
4733                 if $contains warning .out >/dev/null 2>&1; then
4734                         echo "However, you might get some warnings that look like this:"
4735                         $cat .out
4736                 fi
4737         else
4738 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4739                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4740                         echo "It supports 1..."
4741                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4742                                 echo "It also supports 2..."
4743                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4744                                         voidflags=7
4745                                         echo "And it supports 4 but not 8 definitely."
4746                                 else
4747                                         echo "It doesn't support 4..."
4748                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4749                                                 voidflags=11
4750                                                 echo "But it supports 8."
4751                                         else
4752                                                 voidflags=3
4753                                                 echo "Neither does it support 8."
4754                                         fi
4755                                 fi
4756                         else
4757                                 echo "It does not support 2..."
4758                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4759                                         voidflags=13
4760                                         echo "But it supports 4 and 8."
4761                                 else
4762                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4763                                                 voidflags=5
4764                                                 echo "And it supports 4 but has not heard about 8."
4765                                         else
4766                                                 echo "However it supports 8 but not 4."
4767                                         fi
4768                                 fi
4769                         fi
4770                 else
4771                         echo "There is no support at all for void."
4772                         voidflags=0
4773                 fi
4774         fi
4775 esac
4776 case "$voidflags" in
4777 "$defvoidused") ;;
4778 *)      $cat >&4 <<'EOM'
4779   Support flag bits are:
4780     1: basic void declarations.
4781     2: arrays of pointers to functions returning void.
4782     4: operations between pointers to and addresses of void functions.
4783     8: generic void pointers.
4784 EOM
4785         dflt="$voidflags";
4786         rp="Your void support flags add up to what?"
4787         . ./myread
4788         voidflags="$ans"
4789         ;;
4790 esac
4791 $rm -f try.* .out
4792
4793 : check for length of pointer
4794 echo " "
4795 case "$ptrsize" in
4796 '')
4797         echo "Checking to see how big your pointers are..." >&4
4798         if test "$voidflags" -gt 7; then
4799                 echo '#define VOID_PTR char *' > try.c
4800         else
4801                 echo '#define VOID_PTR void *' > try.c
4802         fi
4803         $cat >>try.c <<'EOCP'
4804 #include <stdio.h>
4805 int main()
4806 {
4807     printf("%d\n", (int)sizeof(VOID_PTR));
4808     exit(0);
4809 }
4810 EOCP
4811         set try
4812         if eval $compile_ok; then
4813                 ptrsize=`$run ./try`
4814                 echo "Your pointers are $ptrsize bytes long."
4815         else
4816                 dflt='4'
4817                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4818                 rp="What is the size of a pointer (in bytes)?"
4819                 . ./myread
4820                 ptrsize="$ans"
4821         fi
4822         ;;
4823 esac
4824 $rm -f try.c try
4825
4826 : check for long long
4827 echo " "
4828 echo "Checking to see if you have long long..." >&4
4829 echo 'int main() { long long x = 7; return 0; }' > try.c
4830 set try
4831 if eval $compile; then
4832         val="$define"
4833         echo "You have long long."
4834 else
4835         val="$undef"
4836         echo "You do not have long long."
4837 fi
4838 $rm try.*
4839 set d_longlong
4840 eval $setvar
4841
4842 : check for length of long long
4843 case "${d_longlong}${longlongsize}" in
4844 $define)
4845         echo " "
4846         echo "Checking to see how big your long longs are..." >&4
4847         $cat >try.c <<'EOCP'
4848 #include <stdio.h>
4849 int main()
4850 {
4851     printf("%d\n", (int)sizeof(long long));
4852     return(0);
4853 }
4854 EOCP
4855         set try
4856         if eval $compile_ok; then
4857                 longlongsize=`$run ./try`
4858                 echo "Your long longs are $longlongsize bytes long."
4859         else
4860                 dflt='8'
4861                 echo " "
4862                 echo "(I can't seem to compile the test program.  Guessing...)"
4863                 rp="What is the size of a long long (in bytes)?"
4864                 . ./myread
4865                 longlongsize="$ans"
4866         fi
4867         if $test "X$longsize" = "X$longlongsize"; then
4868                 echo "(That isn't any different from an ordinary long.)"
4869         fi      
4870         ;;
4871 esac
4872 $rm -f try.* try
4873
4874 : determine filename position in cpp output
4875 echo " "
4876 echo "Computing filename position in cpp output for #include directives..." >&4
4877 case "$osname" in
4878 vos) testaccess=-e ;;
4879 *)   testaccess=-r ;;
4880 esac
4881 echo '#include <stdio.h>' > foo.c
4882 $cat >fieldn <<EOF
4883 $startsh
4884 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4885 $grep '^[       ]*#.*stdio\.h' | \
4886 while read cline; do
4887         pos=1
4888         set \$cline
4889         while $test \$# -gt 0; do
4890                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4891                         echo "\$pos"
4892                         exit 0
4893                 fi
4894                 shift
4895                 pos=\`expr \$pos + 1\`
4896         done
4897 done
4898 EOF
4899 chmod +x fieldn
4900 fieldn=`./fieldn`
4901 $rm -f foo.c fieldn
4902 case $fieldn in
4903 '') pos='???';;
4904 1) pos=first;;
4905 2) pos=second;;
4906 3) pos=third;;
4907 *) pos="${fieldn}th";;
4908 esac
4909 echo "Your cpp writes the filename in the $pos field of the line."
4910
4911 case "$osname" in
4912 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4913 *)   cppfilter='' ;;
4914 esac
4915 : locate header file
4916 $cat >findhdr <<EOF
4917 $startsh
4918 wanted=\$1
4919 name=''
4920 for usrincdir in $usrinc
4921 do
4922         if test -f \$usrincdir/\$wanted; then
4923                 echo "\$usrincdir/\$wanted"
4924                 exit 0
4925         fi
4926 done
4927 awkprg='{ print \$$fieldn }'
4928 echo "#include <\$wanted>" > foo\$\$.c
4929 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4930 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4931 while read cline; do
4932         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4933         case "\$name" in
4934         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4935         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4936         *) exit 2;;
4937         esac;
4938 done;
4939 #
4940 # status = 0: grep returned 0 lines, case statement not executed
4941 # status = 1: headerfile found
4942 # status = 2: while loop executed, no headerfile found
4943 #
4944 status=\$?
4945 $rm -f foo\$\$.c;
4946 if test \$status -eq 1; then
4947         exit 0;
4948 fi
4949 exit 1
4950 EOF
4951 chmod +x findhdr
4952
4953 : define an alternate in-header-list? function
4954 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4955 cont=true; xxf="echo \"<\$1> found.\" >&4";
4956 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4957 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4958 esac;
4959 case $# in 4) instead=instead;; *) instead="at last";; esac;
4960 while $test "$cont"; do
4961         xxx=`./findhdr $1`
4962         var=$2; eval "was=\$$2";
4963         if $test "$xxx" && $test -r "$xxx";
4964         then eval $xxf;
4965         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4966                 cont="";
4967         else eval $xxnf;
4968         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4969         set $yyy; shift; shift; yyy=$@;
4970         case $# in 0) cont="";;
4971         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4972                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4973         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4974                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4975         esac;
4976 done;
4977 while $test "$yyy";
4978 do set $yyy; var=$2; eval "was=\$$2";
4979         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4980         set $yyy; shift; shift; yyy=$@;
4981 done'
4982
4983 : see if inttypes.h is available
4984 : we want a real compile instead of Inhdr because some systems
4985 : have an inttypes.h which includes non-existent headers
4986 echo " "
4987 $cat >try.c <<EOCP
4988 #include <inttypes.h>
4989 int main() {
4990         static int32_t foo32 = 0x12345678;
4991 }
4992 EOCP
4993 set try
4994 if eval $compile; then
4995         echo "<inttypes.h> found." >&4
4996         val="$define"
4997 else
4998         echo "<inttypes.h> NOT found." >&4
4999         val="$undef"
5000 fi
5001 $rm -f try.c try
5002 set i_inttypes
5003 eval $setvar
5004
5005 : check for int64_t
5006 echo " "
5007 echo "Checking to see if you have int64_t..." >&4
5008 $cat >try.c <<EOCP
5009 #include <sys/types.h>
5010 #$i_inttypes I_INTTYPES
5011 #ifdef I_INTTYPES
5012 #include <inttypes.h>
5013 #endif
5014 int main() { int64_t x = 7; }
5015 EOCP
5016 set try
5017 if eval $compile; then
5018         val="$define"
5019         echo "You have int64_t."
5020 else
5021         val="$undef"
5022         echo "You do not have int64_t."
5023 fi
5024 $rm -f try try.*
5025 set d_int64_t
5026 eval $setvar
5027
5028
5029 echo " "
5030 echo "Checking which 64-bit integer type we could use..." >&4
5031
5032 case "$intsize" in
5033 8) val=int
5034    set quadtype
5035    eval $setvar
5036    val='"unsigned int"'
5037    set uquadtype
5038    eval $setvar
5039    quadkind=1
5040    ;;
5041 *) case "$longsize" in
5042    8) val=long
5043       set quadtype
5044       eval $setvar
5045       val='"unsigned long"'
5046       set uquadtype
5047       eval $setvar
5048       quadkind=2
5049       ;;
5050    *) case "$d_longlong:$longlongsize" in
5051       define:8)
5052         val='"long long"'
5053         set quadtype
5054         eval $setvar
5055         val='"unsigned long long"'
5056         set uquadtype
5057         eval $setvar
5058         quadkind=3
5059         ;;
5060       *) case "$d_int64_t" in
5061          define)
5062            val=int64_t
5063            set quadtype
5064            eval $setvar
5065            val=uint64_t
5066            set uquadtype
5067            eval $setvar
5068            quadkind=4
5069            ;;
5070          esac
5071          ;;
5072       esac
5073       ;;
5074    esac
5075    ;;
5076 esac
5077
5078 case "$quadtype" in
5079 '')     echo "Alas, no 64-bit integer types in sight." >&4
5080         d_quad="$undef"
5081         ;;
5082 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5083         d_quad="$define"
5084         ;;
5085 esac
5086
5087
5088 case "$uselonglong" in
5089 "$define"|true|[yY]*)
5090         cat <<EOM >&4
5091
5092 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5093 EOM
5094         use64bitint="$define"
5095         ;;
5096 esac                          
5097 case "$use64bits" in
5098 "$define"|true|[yY]*)
5099         cat <<EOM >&4
5100
5101 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5102 EOM
5103         use64bitint="$define"
5104         ;;
5105 esac                          
5106 case "$use64bitints" in
5107 "$define"|true|[yY]*)
5108         cat <<EOM >&4
5109
5110 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5111 EOM
5112         use64bitint="$define"
5113         ;;
5114 esac                          
5115 case "$use64bitsint" in
5116 "$define"|true|[yY]*)
5117         cat <<EOM >&4
5118
5119 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5120 EOM
5121         use64bitint="$define"
5122         ;;
5123 esac                          
5124 case "$uselonglongs" in
5125 "$define"|true|[yY]*)
5126         cat <<EOM >&4
5127
5128 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5129 EOM
5130         use64bitint="$define"
5131         ;;
5132 esac                          
5133 case "$use64bitsall" in
5134 "$define"|true|[yY]*)
5135         cat <<EOM >&4
5136
5137 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5138 EOM
5139         use64bitall="$define"
5140         ;;
5141 esac                          
5142
5143 case "$ccflags" in
5144 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5145 esac
5146 case "$use64bitall" in
5147 "$define"|true|[yY]*) use64bitint="$define" ;;
5148 esac
5149
5150 case "$longsize" in
5151 8) cat <<EOM
5152
5153 You have natively 64-bit long integers.
5154 EOM
5155    val="$define"
5156    ;;
5157 *) case "$use64bitint" in
5158    "$define"|true|[yY]*) dflt='y';;
5159    *) dflt='n';;
5160    esac
5161    case "$d_quad" in
5162    "$define") ;;
5163    *) dflt='n' ;;
5164    esac
5165    cat <<EOM
5166
5167 Perl can be built to take advantage of 64-bit integer types
5168 on some systems.  To do so, Configure can be run with -Duse64bitint.
5169 Choosing this option will most probably introduce binary incompatibilities.
5170
5171 If this doesn't make any sense to you, just accept the default '$dflt'.
5172 (The default has been chosen based on your configuration.)
5173 EOM
5174    rp='Try to use 64-bit integers, if available?'
5175    . ./myread
5176    case "$ans" in
5177    [yY]*) val="$define" ;;
5178    *)     val="$undef"  ;;
5179    esac
5180    ;;
5181 esac
5182 set use64bitint
5183 eval $setvar
5184
5185 case "$use64bitall" in
5186 "$define"|true|[yY]*) dflt='y' ;;
5187 *) case "$longsize" in
5188    8) dflt='y' ;;
5189    *) dflt='n' ;;
5190    esac
5191    ;;
5192 esac    
5193 cat <<EOM
5194
5195 You may also choose to try maximal 64-bitness.  It means using as much
5196 64-bitness as possible on the platform.  This in turn means even more
5197 binary incompatibilities.  On the other hand, your platform may not
5198 have any more 64-bitness available than what you already have chosen.
5199
5200 If this doesn't make any sense to you, just accept the default '$dflt'.
5201 (The default has been chosen based on your configuration.)
5202 EOM
5203 rp='Try to use maximal 64-bit support, if available?'
5204 . ./myread
5205 case "$ans" in
5206 [yY]*) val="$define" ;;
5207 *)     val="$undef"  ;;
5208 esac
5209 set use64bitall
5210 eval $setvar
5211 case "$use64bitall" in
5212 "$define")
5213         case "$use64bitint" in
5214         "$undef")
5215                 cat <<EOM
5216
5217 Since you have chosen a maximally 64-bit build, I'm also turning on
5218 the use of 64-bit integers.
5219 EOM
5220                 use64bitint="$define" ;;
5221         esac
5222         ;;
5223 esac
5224
5225 case "$use64bitall" in
5226 "$define"|true|[yY]*)
5227         case "$ptrsize" in
5228         4)      cat <<EOM >&4
5229
5230 *** You have chosen a maximally 64-bit build, but your pointers
5231 *** are only 4 bytes wide, disabling maximal 64-bitness.
5232
5233 EOM
5234                 use64bitall="$undef"
5235                 case "$use64bitint" in
5236                 "$define"|true|[yY]*) ;;
5237                 *)      cat <<EOM >&4
5238
5239 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5240
5241 EOM
5242                         use64bitint="$define"
5243                         ;;
5244                 esac
5245                 ;;
5246         esac
5247         ;;
5248 esac
5249
5250 case "$use64bitint" in
5251 "$define"|true|[yY]*)
5252 : Look for a hint-file generated 'call-back-unit'.  If the
5253 : user has specified that a 64-bit perl is to be built,
5254 : we may need to set or change some other defaults.
5255         if $test -f use64bitint.cbu; then
5256                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5257                 . ./use64bitint.cbu
5258         fi
5259         case "$longsize" in
5260         4) case "$archname64" in
5261            '') archname64=64int ;;
5262            esac
5263            ;;
5264         esac
5265         ;;
5266 esac
5267
5268 case "$use64bitall" in
5269 "$define"|true|[yY]*)
5270 : Look for a hint-file generated 'call-back-unit'.  If the
5271 : user has specified that a maximally 64-bit perl is to be built,
5272 : we may need to set or change some other defaults.
5273         if $test -f use64bitall.cbu; then
5274                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5275                 . ./use64bitall.cbu
5276         fi
5277         case "$longsize" in
5278         4) case "$archname64" in
5279            ''|64int) archname64=64all ;;
5280            esac
5281            ;;
5282         esac
5283         ;;
5284 esac
5285
5286 echo " "
5287 echo "Checking for GNU C Library..." >&4
5288 cat >try.c <<EOM
5289 #include <stdio.h>
5290 int main()
5291 {
5292 #ifdef __GLIBC__
5293     exit(0);
5294 #else
5295     exit(1);
5296 #endif
5297 }
5298 EOM
5299 set try
5300 if eval $compile_ok && $run ./try; then
5301         val="$define"
5302         echo "You are using the GNU C Library"
5303 else
5304         val="$undef"
5305         echo "You are not using the GNU C Library"
5306 fi
5307 $rm -f try try.*
5308 set d_gnulibc
5309 eval $setvar
5310
5311 : see if nm is to be used to determine whether a symbol is defined or not
5312 case "$usenm" in
5313 '')
5314         dflt=''
5315         case "$d_gnulibc" in
5316         "$define")
5317                 echo " "
5318                 echo "nm probably won't work on the GNU C Library." >&4
5319                 dflt=n
5320                 ;;
5321         esac
5322         case "$dflt" in
5323         '') 
5324                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5325                         echo " "
5326                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5327                         echo "'nm' won't be sufficient on this sytem." >&4
5328                         dflt=n
5329                 fi
5330                 ;;
5331         esac
5332         case "$dflt" in
5333         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5334                 if $test $dflt -gt 20; then
5335                         dflt=y
5336                 else
5337                         dflt=n
5338                 fi
5339                 ;;
5340         esac
5341         ;;
5342 *)
5343         case "$usenm" in
5344         true|$define) dflt=y;;
5345         *) dflt=n;;
5346         esac
5347         ;;
5348 esac
5349 $cat <<EOM
5350
5351 I can use $nm to extract the symbols from your C libraries. This
5352 is a time consuming task which may generate huge output on the disk (up
5353 to 3 megabytes) but that should make the symbols extraction faster. The
5354 alternative is to skip the 'nm' extraction part and to compile a small
5355 test program instead to determine whether each symbol is present. If
5356 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5357 this may be the best solution.
5358
5359 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5360
5361 EOM
5362 rp="Shall I use $nm to extract C symbols from the libraries?"
5363 . ./myread
5364 case "$ans" in
5365 [Nn]*) usenm=false;;
5366 *) usenm=true;;
5367 esac
5368
5369 runnm=$usenm
5370 case "$reuseval" in
5371 true) runnm=false;;
5372 esac
5373
5374 : nm options which may be necessary
5375 case "$nm_opt" in
5376 '') if $test -f /mach_boot; then
5377                 nm_opt=''       # Mach
5378         elif $test -d /usr/ccs/lib; then
5379                 nm_opt='-p'     # Solaris (and SunOS?)
5380         elif $test -f /dgux; then
5381                 nm_opt='-p'     # DG-UX
5382         elif $test -f /lib64/rld; then
5383                 nm_opt='-p'     # 64-bit Irix
5384         else
5385                 nm_opt=''
5386         fi;;
5387 esac
5388
5389 : nm options which may be necessary for shared libraries but illegal
5390 : for archive libraries.  Thank you, Linux.
5391 case "$nm_so_opt" in
5392 '')     case "$myuname" in
5393         *linux*)
5394                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5395                         nm_so_opt='--dynamic'
5396                 fi
5397                 ;;
5398         esac
5399         ;;
5400 esac
5401
5402 case "$runnm" in
5403 true)
5404 : get list of predefined functions in a handy place
5405 echo " "
5406 case "$libc" in
5407 '') libc=unknown
5408         case "$libs" in
5409         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5410         esac
5411         ;;
5412 esac
5413 case "$libs" in
5414 '') ;;
5415 *)  for thislib in $libs; do
5416         case "$thislib" in
5417         -lc|-lc_s)
5418                 : Handle C library specially below.
5419                 ;;
5420         -l*)
5421                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5422                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5423                         :
5424                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5425                         :
5426                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5427                         :
5428                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5429                         :
5430                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5431                         :
5432                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5433                         :
5434                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5435                         :
5436                 else
5437                         try=''
5438                 fi
5439                 libnames="$libnames $try"
5440                 ;;
5441         *) libnames="$libnames $thislib" ;;
5442         esac
5443         done
5444         ;;
5445 esac
5446 xxx=normal
5447 case "$libc" in
5448 unknown)
5449         set /lib/libc.$so
5450         for xxx in $libpth; do
5451                 $test -r $1 || set $xxx/libc.$so
5452                 : The messy sed command sorts on library version numbers.
5453                 $test -r $1 || \
5454                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5455                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5456                                 h
5457                                 s/[0-9][0-9]*/0000&/g
5458                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5459                                 G
5460                                 s/\n/ /' | \
5461                          $sort | $sed -e 's/^.* //'`
5462                 eval set \$$#
5463         done
5464         $test -r $1 || set /usr/ccs/lib/libc.$so
5465         $test -r $1 || set /lib/libsys_s$_a
5466         ;;
5467 *)
5468         set blurfl
5469         ;;
5470 esac
5471 if $test -r "$1"; then
5472         echo "Your (shared) C library seems to be in $1."
5473         libc="$1"
5474 elif $test -r /lib/libc && $test -r /lib/clib; then
5475         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5476         xxx=apollo
5477         libc='/lib/clib /lib/libc'
5478         if $test -r /lib/syslib; then
5479                 echo "(Your math library is in /lib/syslib.)"
5480                 libc="$libc /lib/syslib"
5481         fi
5482 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5483         echo "Your C library seems to be in $libc, as you said before."
5484 elif $test -r $incpath/usr/lib/libc$_a; then
5485         libc=$incpath/usr/lib/libc$_a;
5486         echo "Your C library seems to be in $libc.  That's fine."
5487 elif $test -r /lib/libc$_a; then
5488         libc=/lib/libc$_a;
5489         echo "Your C library seems to be in $libc.  You're normal."
5490 else
5491         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5492                 :
5493         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5494                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5495         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5496                 :
5497         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5498                 :
5499         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5500                 :
5501         else
5502                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5503         fi
5504         if $test -r "$tans"; then
5505                 echo "Your C library seems to be in $tans, of all places."
5506                 libc=$tans
5507         else
5508                 libc='blurfl'
5509         fi
5510 fi
5511 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5512         dflt="$libc"
5513         cat <<EOM
5514
5515 If the guess above is wrong (which it might be if you're using a strange
5516 compiler, or your machine supports multiple models), you can override it here.
5517
5518 EOM
5519 else
5520         dflt=''
5521         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5522         cat >&4 <<EOM
5523 I can't seem to find your C library.  I've looked in the following places:
5524
5525 EOM
5526         $sed 's/^/      /' libpath
5527         cat <<EOM
5528
5529 None of these seems to contain your C library. I need to get its name...
5530
5531 EOM
5532 fi
5533 fn=f
5534 rp='Where is your C library?'
5535 . ./getfile
5536 libc="$ans"
5537
5538 echo " "
5539 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5540 set X `cat libnames`
5541 shift
5542 xxx=files
5543 case $# in 1) xxx=file; esac
5544 echo "Extracting names from the following $xxx for later perusal:" >&4
5545 echo " "
5546 $sed 's/^/      /' libnames >&4
5547 echo " "
5548 $echo $n "This may take a while...$c" >&4
5549
5550 for file in $*; do
5551         case $file in
5552         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5553         *) $nm $nm_opt $file 2>/dev/null;;
5554         esac
5555 done >libc.tmp
5556
5557 $echo $n ".$c"
5558 $grep fprintf libc.tmp > libc.ptf
5559 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5560 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5561 xxx='[ADTSIW]'
5562 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5563         eval $xscan;\
5564         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5565                 eval $xrun
5566 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5567         eval $xscan;\
5568         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5569                 eval $xrun
5570 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5571         eval $xscan;\
5572         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5573                 eval $xrun
5574 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5575         eval $xscan;\
5576         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5577                 eval $xrun
5578 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5579         eval $xscan;\
5580         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5581                 eval $xrun
5582 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5583         eval $xscan;\
5584         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5585                 eval $xrun
5586 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5587                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5588         eval $xscan;\
5589         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5590                 eval $xrun
5591 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5592         eval $xscan;\
5593         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5594                 eval $xrun
5595 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5596         eval $xscan;\
5597         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5598                 eval $xrun
5599 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 else
5620         $nm -p $* 2>/dev/null >libc.tmp
5621         $grep fprintf libc.tmp > libc.ptf
5622         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5623                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5624         then
5625                 nm_opt='-p'
5626                 eval $xrun
5627         else
5628                 echo " "
5629                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5630                 com=''
5631                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5632                         for thisname in $libnames $libc; do
5633                                 $ar t $thisname >>libc.tmp
5634                         done
5635                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5636                         echo "Ok." >&4
5637                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5638                         # Repeat libc to extract forwarders to DLL entries too
5639                         for thisname in $libnames $libc; do
5640                                 $ar tv $thisname >>libc.tmp
5641                                 # Revision 50 of EMX has bug in $ar.
5642                                 # it will not extract forwarders to DLL entries
5643                                 # Use emximp which will extract exactly them.
5644                                 emximp -o tmp.imp $thisname \
5645                                     2>/dev/null && \
5646                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5647                                     < tmp.imp >>libc.tmp
5648                                 $rm tmp.imp
5649                         done
5650                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5651                         echo "Ok." >&4
5652                 else
5653                         echo "$ar didn't seem to work right." >&4
5654                         echo "Maybe this is a Cray...trying bld instead..." >&4
5655                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5656                         then
5657                                 for thisname in $libnames; do
5658                                         bld t $libnames | \
5659                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5660                                         $ar t $thisname >>libc.tmp
5661                                 done
5662                                 echo "Ok." >&4
5663                         else
5664                                 echo "That didn't work either.  Giving up." >&4
5665                                 exit 1
5666                         fi
5667                 fi
5668         fi
5669 fi
5670 nm_extract="$com"
5671 if $test -f /lib/syscalls.exp; then
5672         echo " "
5673         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5674         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5675 fi
5676 ;;
5677 esac
5678 $rm -f libnames libpath
5679
5680 : is a C symbol defined?
5681 csym='tlook=$1;
5682 case "$3" in
5683 -v) tf=libc.tmp; tc=""; tdc="";;
5684 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5685 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5686 esac;
5687 tx=yes;
5688 case "$reuseval-$4" in
5689 true-) ;;
5690 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5691 esac;
5692 case "$tx" in
5693 yes)
5694         case "$runnm" in
5695         true)
5696                 if $contains $tlook $tf >/dev/null 2>&1;
5697                 then tval=true;
5698                 else tval=false;
5699                 fi;;
5700         *)
5701                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5702                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5703                 then tval=true;
5704                 else tval=false;
5705                 fi;
5706                 $rm -f t t.c;;
5707         esac;;
5708 *)
5709         case "$tval" in
5710         $define) tval=true;;
5711         *) tval=false;;
5712         esac;;
5713 esac;
5714 eval "$2=$tval"'
5715
5716 : define an is-in-libc? function
5717 inlibc='echo " "; td=$define; tu=$undef;
5718 sym=$1; var=$2; eval "was=\$$2";
5719 tx=yes;
5720 case "$reuseval$was" in
5721 true) ;;
5722 true*) tx=no;;
5723 esac;
5724 case "$tx" in
5725 yes)
5726         set $sym tres -f;
5727         eval $csym;
5728         case "$tres" in
5729         true)
5730                 echo "$sym() found." >&4;
5731                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5732         *)
5733                 echo "$sym() NOT found." >&4;
5734                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5735         esac;;
5736 *)
5737         case "$was" in
5738         $define) echo "$sym() found." >&4;;
5739         *) echo "$sym() NOT found." >&4;;
5740         esac;;
5741 esac'
5742
5743 : see if sqrtl exists
5744 set sqrtl d_sqrtl
5745 eval $inlibc
5746
5747 case "$ccflags" in
5748 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5749 esac
5750
5751 case "$uselongdouble" in
5752 $define|true|[yY]*)     dflt='y';;
5753 *) dflt='n';;
5754 esac
5755 cat <<EOM
5756
5757 Perl can be built to take advantage of long doubles which
5758 (if available) may give more accuracy and range for floating point numbers.
5759
5760 If this doesn't make any sense to you, just accept the default '$dflt'.
5761 EOM
5762 rp='Try to use long doubles if available?'
5763 . ./myread
5764 case "$ans" in
5765 y|Y)    val="$define"   ;;
5766 *)      val="$undef"    ;;
5767 esac
5768 set uselongdouble
5769 eval $setvar
5770
5771 case "$uselongdouble" in
5772 true|[yY]*) uselongdouble="$define" ;;
5773 esac
5774
5775 case "$uselongdouble" in
5776 $define)
5777 : Look for a hint-file generated 'call-back-unit'.  If the
5778 : user has specified that long doubles should be used,
5779 : we may need to set or change some other defaults.
5780         if $test -f uselongdouble.cbu; then
5781                 echo "Your platform has some specific hints for long doubles, using them..."
5782                 . ./uselongdouble.cbu
5783         else
5784                 $cat <<EOM
5785 (Your platform doesn't have any specific hints for long doubles.)
5786 EOM
5787         fi
5788         ;;
5789 esac
5790
5791 case "$uselongdouble:$d_sqrtl" in
5792 $define:$undef)
5793                 $cat <<EOM >&4
5794
5795 *** You requested the use of long doubles but you do not seem to have
5796 *** the mathematic functions for long doubles.  I'm disabling the use
5797 *** of long doubles.
5798
5799 EOM
5800         uselongdouble=$undef
5801         ;;
5802 esac
5803
5804 : check for length of double
5805 echo " "
5806 case "$doublesize" in
5807 '')
5808         echo "Checking to see how big your double precision numbers are..." >&4
5809         $cat >try.c <<'EOCP'
5810 #include <stdio.h>
5811 int main()
5812 {
5813     printf("%d\n", (int)sizeof(double));
5814     exit(0);
5815 }
5816 EOCP
5817         set try
5818         if eval $compile_ok; then
5819                 doublesize=`$run ./try`
5820                 echo "Your double is $doublesize bytes long."
5821         else
5822                 dflt='8'
5823                 echo "(I can't seem to compile the test program.  Guessing...)"
5824                 rp="What is the size of a double precision number (in bytes)?"
5825                 . ./myread
5826                 doublesize="$ans"
5827         fi
5828         ;;
5829 esac
5830 $rm -f try.c try
5831
5832 : check for long doubles
5833 echo " "
5834 echo "Checking to see if you have long double..." >&4
5835 echo 'int main() { long double x = 7.0; }' > try.c
5836 set try
5837 if eval $compile; then
5838         val="$define"
5839         echo "You have long double."
5840 else
5841         val="$undef"
5842         echo "You do not have long double."
5843 fi
5844 $rm try.*
5845 set d_longdbl
5846 eval $setvar
5847
5848 : check for length of long double
5849 case "${d_longdbl}${longdblsize}" in
5850 $define)
5851         echo " "
5852         echo "Checking to see how big your long doubles are..." >&4
5853         $cat >try.c <<'EOCP'
5854 #include <stdio.h>
5855 int main()
5856 {
5857         printf("%d\n", sizeof(long double));
5858 }
5859 EOCP
5860         set try
5861         set try
5862         if eval $compile; then
5863                 longdblsize=`$run ./try`
5864                 echo "Your long doubles are $longdblsize bytes long."
5865         else
5866                 dflt='8'
5867                 echo " "
5868                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5869                 rp="What is the size of a long double (in bytes)?"
5870                 . ./myread
5871                 longdblsize="$ans"
5872         fi
5873         if $test "X$doublesize" = "X$longdblsize"; then
5874                 echo "(That isn't any different from an ordinary double.)"
5875         fi      
5876         ;;
5877 esac
5878 $rm -f try.* try
5879
5880 case "$useperlio" in
5881 $define|true|[yY]*|'')  dflt='y';;
5882 *) dflt='n';;
5883 esac
5884 cat <<EOM
5885
5886 Previous version of $package used the standard IO mechanisms as
5887 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5888 alternate IO mechanisms via the PerlIO abstraction layer, but the
5889 stdio mechanism is still available if needed.  The abstraction layer
5890 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5891 Using PerlIO with sfio may cause problems with some extension modules.
5892
5893 If this doesn't make any sense to you, just accept the default '$dflt'.
5894 EOM
5895 rp='Use the PerlIO abstraction layer?'
5896 . ./myread
5897 case "$ans" in
5898 y|Y) 
5899         val="$define"
5900         ;;
5901 *)      
5902         echo "Ok, doing things the stdio way."
5903         val="$undef"
5904         ;;
5905 esac
5906 set useperlio
5907 eval $setvar 
5908
5909 case "$usesocks" in
5910 $define|true|[yY]*)
5911         case "$useperlio" in
5912         $define|true|[yY]*) ;;
5913         *)      cat >&4 <<EOM
5914
5915 You are using the SOCKS proxy protocol library which means that you
5916 should also use the PerlIO layer.  You may be headed for trouble.
5917
5918 EOM
5919                 ;;
5920         esac
5921         ;;
5922 esac
5923
5924         
5925 : determine the architecture name
5926 echo " "
5927 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5928         tarch=`arch`"-$osname"
5929 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5930         if uname -m > tmparch 2>&1 ; then
5931                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5932                         -e 's/$/'"-$osname/" tmparch`
5933         else
5934                 tarch="$osname"
5935         fi
5936         $rm -f tmparch
5937 else
5938         tarch="$osname"
5939 fi
5940 case "$myarchname" in
5941 ''|"$tarch") ;;
5942 *)
5943         echo "(Your architecture name used to be $myarchname.)"
5944         archname=''
5945         ;;
5946 esac
5947 case "$targetarch" in
5948 '') ;;
5949 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5950 esac
5951 myarchname="$tarch"
5952 case "$archname" in
5953 '') dflt="$tarch";;
5954 *) dflt="$archname";;
5955 esac
5956 rp='What is your architecture name'
5957 . ./myread
5958 archname="$ans"
5959 case "$usethreads" in
5960 $define)
5961         echo "Threads selected." >&4
5962         case "$archname" in
5963         *-thread*) echo "...and architecture name already has -thread." >&4
5964                 ;;
5965         *)      archname="$archname-thread"
5966                 echo "...setting architecture name to $archname." >&4
5967                 ;;
5968         esac
5969         ;;
5970 esac
5971 case "$usemultiplicity" in
5972 $define)
5973         echo "Multiplicity selected." >&4
5974         case "$archname" in
5975         *-multi*) echo "...and architecture name already has -multi." >&4
5976                 ;;
5977         *)      archname="$archname-multi"
5978                 echo "...setting architecture name to $archname." >&4
5979                 ;;
5980         esac
5981         ;;
5982 esac
5983 case "$use64bitint$use64bitall" in
5984 *"$define"*)
5985         case "$archname64" in
5986         '')
5987                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5988                 ;;
5989         *)
5990                 case "$use64bitint" in
5991                 "$define") echo "64 bit integers selected." >&4 ;;
5992                 esac
5993                 case "$use64bitall" in
5994                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5995                 esac
5996                 case "$archname" in
5997                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5998                         ;;
5999                 *)      archname="$archname-$archname64"
6000                         echo "...setting architecture name to $archname." >&4
6001                         ;;
6002                 esac
6003                 ;;
6004         esac
6005 esac
6006 case "$uselongdouble" in
6007 $define)
6008         echo "Long doubles selected." >&4
6009         case "$longdblsize" in
6010         $doublesize)
6011                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6012                 ;;
6013         *)
6014                 case "$archname" in
6015                 *-ld*) echo "...and architecture name already has -ld." >&4
6016                         ;;
6017                 *)      archname="$archname-ld"
6018                         echo "...setting architecture name to $archname." >&4
6019                         ;;
6020                 esac
6021                 ;;
6022         esac
6023         ;;
6024 esac
6025 case "$useperlio" in
6026 $define)
6027         echo "Perlio selected." >&4
6028         ;;
6029 *)
6030         echo "Perlio not selected, using stdio." >&4
6031         case "$archname" in
6032         *-stdio*) echo "...and architecture name already has -stdio." >&4
6033                 ;;
6034         *)      archname="$archname-stdio"
6035                 echo "...setting architecture name to $archname." >&4
6036                 ;;
6037         esac
6038         ;;
6039 esac
6040
6041 : determine root of directory hierarchy where package will be installed.
6042 case "$prefix" in
6043 '')
6044         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6045         ;;
6046 *)
6047         dflt="$prefix"
6048         ;;
6049 esac
6050 $cat <<EOM
6051
6052 By default, $package will be installed in $dflt/bin, manual pages
6053 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6054 installation directories. Typically this is something like /usr/local.
6055 If you wish to have binaries under /usr/bin but other parts of the
6056 installation under /usr/local, that's ok: you will be prompted
6057 separately for each of the installation directories, the prefix being
6058 only used to set the defaults.
6059
6060 EOM
6061 fn=d~
6062 rp='Installation prefix to use?'
6063 . ./getfile
6064 oldprefix=''
6065 case "$prefix" in
6066 '') ;;
6067 *)
6068         case "$ans" in
6069         "$prefix") ;;
6070         *) oldprefix="$prefix";;
6071         esac
6072         ;;
6073 esac
6074 prefix="$ans"
6075 prefixexp="$ansexp"
6076
6077 case "$afsroot" in
6078 '')     afsroot=/afs ;;
6079 *)      afsroot=$afsroot ;;
6080 esac
6081
6082 : is AFS running?
6083 echo " "
6084 case "$afs" in
6085 $define|true)   afs=true ;;
6086 $undef|false)   afs=false ;;
6087 *)      if test -d $afsroot; then
6088                 afs=true
6089         else
6090                 afs=false
6091         fi
6092         ;;
6093 esac
6094 if $afs; then
6095         echo "AFS may be running... I'll be extra cautious then..." >&4
6096 else
6097         echo "AFS does not seem to be running..." >&4
6098 fi
6099
6100 : determine installation prefix for where package is to be installed.
6101 if $afs; then 
6102 $cat <<EOM
6103
6104 Since you are running AFS, I need to distinguish the directory in which
6105 files will reside from the directory in which they are installed (and from
6106 which they are presumably copied to the former directory by occult means).
6107
6108 EOM
6109         case "$installprefix" in
6110         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6111         *) dflt="$installprefix";;
6112         esac
6113 else
6114 $cat <<EOM
6115
6116 In some special cases, particularly when building $package for distribution,
6117 it is convenient to distinguish between the directory in which files should 
6118 be installed from the directory ($prefix) in which they 
6119 will eventually reside.  For most users, these two directories are the same.
6120
6121 EOM
6122         case "$installprefix" in
6123         '') dflt=$prefix ;;
6124         *) dflt=$installprefix;;
6125         esac
6126 fi
6127 fn=d~
6128 rp='What installation prefix should I use for installing files?'
6129 . ./getfile
6130 installprefix="$ans"
6131 installprefixexp="$ansexp"
6132
6133 : set the prefixit variable, to compute a suitable default value
6134 prefixit='case "$3" in
6135 ""|none)
6136         case "$oldprefix" in
6137         "") eval "$1=\"\$$2\"";;
6138         *)
6139                 case "$3" in
6140                 "") eval "$1=";;
6141                 none)
6142                         eval "tp=\"\$$2\"";
6143                         case "$tp" in
6144                         ""|" ") eval "$1=\"\$$2\"";;
6145                         *) eval "$1=";;
6146                         esac;;
6147                 esac;;
6148         esac;;
6149 *)
6150         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6151         case "$tp" in
6152         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6153         /*-$oldprefix/*|\~*-$oldprefix/*)
6154                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6155         *) eval "$1=\"\$$2\"";;
6156         esac;;
6157 esac'
6158
6159 : get the patchlevel
6160 echo " "
6161 echo "Getting the current patchlevel..." >&4
6162 if $test -r $rsrc/patchlevel.h;then
6163         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6164         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6165         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6166         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6167         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6168         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6169        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6170 else
6171         revision=0
6172         patchlevel=0
6173         subversion=0
6174         api_revision=0
6175         api_version=0
6176         api_subversion=0
6177         perl_patchlevel=0
6178         $echo "(You do not have patchlevel.h.  Eek.)"
6179 fi
6180 if $test -r $rsrc/.patch ; then  
6181         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6182                 perl_patchlevel=`cat $rsrc/.patch`
6183         fi
6184 fi
6185 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6186 version_patchlevel_string="version $patchlevel subversion $subversion"
6187 case "$perl_patchlevel" in
6188 0|'') ;;
6189 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6190 esac
6191
6192 $echo "(You have $package $version_patchlevel_string.)"
6193
6194 case "$osname" in
6195 dos|vms)
6196         : XXX Should be a Configure test for double-dots in filenames.
6197         version=`echo $revision $patchlevel $subversion | \
6198                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6199         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6200                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6201         ;;
6202 *)
6203         version=`echo $revision $patchlevel $subversion | \
6204                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6205         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6206                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6207         ;;
6208 esac
6209 : Special case the 5.005_xx maintenance series, which used 5.005
6210 : without any subversion label as a subdirectory in $sitelib
6211 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6212         api_versionstring='5.005'
6213 fi
6214
6215 : determine installation style
6216 : For now, try to deduce it from prefix unless it is already set.
6217 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6218 case "$installstyle" in
6219 '')     case "$prefix" in
6220                 *perl*) dflt='lib';;
6221                 *) dflt='lib/perl5' ;;
6222         esac
6223         ;;
6224 *)      dflt="$installstyle" ;;
6225 esac
6226 : Probably not worth prompting for this since we prompt for all
6227 : the directories individually, and the prompt would be too long and
6228 : confusing anyway.
6229 installstyle=$dflt
6230
6231 : determine where private library files go
6232 : Usual default is /usr/local/lib/perl5/$version.
6233 : Also allow things like /opt/perl/lib/$version, since 
6234 : /opt/perl/lib/perl5... would be redundant.
6235 : The default "style" setting is made in installstyle.U
6236 case "$installstyle" in
6237 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6238 *)       set dflt privlib lib/$version ;;
6239 esac
6240 eval $prefixit
6241 $cat <<EOM
6242
6243 There are some auxiliary files for $package that need to be put into a
6244 private library directory that is accessible by everyone.
6245
6246 EOM
6247 fn=d~+
6248 rp='Pathname where the private library files will reside?'
6249 . ./getfile
6250 privlib="$ans"
6251 privlibexp="$ansexp"
6252 : Change installation prefix, if necessary.
6253 if $test X"$prefix" != X"$installprefix"; then
6254         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6255 else
6256         installprivlib="$privlibexp"
6257 fi
6258
6259 : set the prefixup variable, to restore leading tilda escape
6260 prefixup='case "$prefixexp" in
6261 "$prefix") ;;
6262 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6263 esac'
6264
6265 : determine where public architecture dependent libraries go
6266 set archlib archlib
6267 eval $prefixit
6268 : privlib default is /usr/local/lib/$package/$version
6269 : archlib default is /usr/local/lib/$package/$version/$archname
6270 : privlib may have an optional trailing /share.
6271 tdflt=`echo $privlib | $sed 's,/share$,,'`
6272 tdflt=$tdflt/$archname
6273 case "$archlib" in
6274 '')     dflt=$tdflt
6275         ;;
6276 *)      dflt="$archlib"
6277     ;;
6278 esac
6279 $cat <<EOM
6280
6281 $spackage contains architecture-dependent library files.  If you are
6282 sharing libraries in a heterogeneous environment, you might store
6283 these files in a separate location.  Otherwise, you can just include
6284 them with the rest of the public library files.
6285
6286 EOM
6287 fn=d+~
6288 rp='Where do you want to put the public architecture-dependent libraries?'
6289 . ./getfile
6290 archlib="$ans"
6291 archlibexp="$ansexp"
6292 if $test X"$archlib" = X"$privlib"; then
6293         d_archlib="$undef"
6294 else
6295         d_archlib="$define"
6296 fi
6297 : Change installation prefix, if necessary.
6298 if $test X"$prefix" != X"$installprefix"; then
6299         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6300 else
6301         installarchlib="$archlibexp"
6302 fi
6303
6304
6305 : Binary compatibility with 5.005 is not possible for builds
6306 : with advanced features
6307 case "$usethreads$usemultiplicity" in
6308 *define*)
6309         bincompat5005="$undef"
6310         d_bincompat5005="$undef"
6311         ;;
6312 *)      $cat <<EOM
6313
6314 This version of Perl can be compiled for binary compatibility with 5.005.
6315 If you decide to do so, you will be able to continue using most of the
6316 extensions that were compiled for Perl 5.005.
6317
6318 EOM
6319         case "$bincompat5005$d_bincompat5005" in
6320         *"$undef"*) dflt=n ;;
6321         *) dflt=y ;;
6322         esac
6323         rp='Binary compatibility with Perl 5.005?'
6324         . ./myread
6325         case "$ans" in
6326         y*) val="$define" ;;
6327         *)  val="$undef" ;;
6328         esac
6329         set d_bincompat5005
6330         eval $setvar
6331         case "$d_bincompat5005" in
6332         "$define")
6333                 bincompat5005="$define"
6334                 ;;
6335         *)      bincompat5005="$undef"
6336                 d_bincompat5005="$undef"
6337                 ;;
6338         esac
6339         ;;
6340 esac
6341
6342
6343 : see if setuid scripts can be secure
6344 $cat <<EOM
6345
6346 Some kernels have a bug that prevents setuid #! scripts from being
6347 secure.  Some sites have disabled setuid #! scripts because of this.
6348
6349 First let's decide if your kernel supports secure setuid #! scripts.
6350 (If setuid #! scripts would be secure but have been disabled anyway,
6351 don't say that they are secure if asked.)
6352
6353 EOM
6354
6355 val="$undef"
6356 if $test -d /dev/fd; then
6357         echo "#!$ls" >reflect
6358         chmod +x,u+s reflect
6359         ./reflect >flect 2>&1
6360         if $contains "/dev/fd" flect >/dev/null; then
6361                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6362                 val="$define"
6363         else
6364                 $cat <<EOM
6365 If you are not sure if they are secure, I can check but I'll need a
6366 username and password different from the one you are using right now.
6367 If you don't have such a username or don't want me to test, simply
6368 enter 'none'.
6369
6370 EOM
6371                 rp='Other username to test security of setuid scripts with?'
6372                 dflt='none'
6373                 . ./myread
6374                 case "$ans" in
6375                 n|none)
6376                         case "$d_suidsafe" in
6377                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6378                                 dflt=n;;
6379                         "$undef")
6380                                 echo "Well, the $hint value is *not* secure." >&4
6381                                 dflt=n;;
6382                         *)      echo "Well, the $hint value *is* secure." >&4
6383                                 dflt=y;;
6384                         esac
6385                         ;;
6386                 *)
6387                         $rm -f reflect flect
6388                         echo "#!$ls" >reflect
6389                         chmod +x,u+s reflect
6390                         echo >flect
6391                         chmod a+w flect
6392                         echo '"su" will (probably) prompt you for '"$ans's password."
6393                         su $ans -c './reflect >flect'
6394                         if $contains "/dev/fd" flect >/dev/null; then
6395                                 echo "Okay, it looks like setuid scripts are secure." >&4
6396                                 dflt=y
6397                         else
6398                                 echo "I don't think setuid scripts are secure." >&4
6399                                 dflt=n
6400                         fi
6401                         ;;
6402                 esac
6403                 rp='Does your kernel have *secure* setuid scripts?'
6404                 . ./myread
6405                 case "$ans" in
6406                 [yY]*)  val="$define";;
6407                 *)      val="$undef";;
6408                 esac
6409         fi
6410 else
6411         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6412         echo "(That's for file descriptors, not floppy disks.)"
6413         val="$undef"
6414 fi
6415 set d_suidsafe
6416 eval $setvar
6417
6418 $rm -f reflect flect
6419
6420 : now see if they want to do setuid emulation
6421 echo " "
6422 val="$undef"
6423 case "$d_suidsafe" in
6424 "$define")
6425         val="$undef"
6426         echo "No need to emulate SUID scripts since they are secure here." >&4
6427         ;;
6428 *)
6429         $cat <<EOM
6430 Some systems have disabled setuid scripts, especially systems where
6431 setuid scripts cannot be secure.  On systems where setuid scripts have
6432 been disabled, the setuid/setgid bits on scripts are currently
6433 useless.  It is possible for $package to detect those bits and emulate
6434 setuid/setgid in a secure fashion.  This emulation will only work if
6435 setuid scripts have been disabled in your kernel.
6436
6437 EOM
6438         case "$d_dosuid" in
6439         "$define") dflt=y ;;
6440         *) dflt=n ;;
6441         esac
6442         rp="Do you want to do setuid/setgid emulation?"
6443         . ./myread
6444         case "$ans" in
6445         [yY]*)  val="$define";;
6446         *)      val="$undef";;
6447         esac
6448         ;;
6449 esac
6450 set d_dosuid
6451 eval $setvar
6452
6453 : see if this is a malloc.h system
6454 set malloc.h i_malloc
6455 eval $inhdr
6456
6457 : see if stdlib is available
6458 set stdlib.h i_stdlib
6459 eval $inhdr
6460
6461 : determine which malloc to compile in
6462 echo " "
6463 case "$usemymalloc" in
6464 [yY]*|true|$define)     dflt='y' ;;
6465 [nN]*|false|$undef)     dflt='n' ;;
6466 *)      case "$ptrsize" in
6467         4) dflt='y' ;;
6468         *) dflt='n' ;;
6469         esac
6470         ;;
6471 esac
6472 rp="Do you wish to attempt to use the malloc that comes with $package?"
6473 . ./myread
6474 usemymalloc="$ans"
6475 case "$ans" in
6476 y*|true)
6477         usemymalloc='y'
6478         mallocsrc='malloc.c'
6479         mallocobj="malloc$_o"
6480         d_mymalloc="$define"
6481         case "$libs" in
6482         *-lmalloc*)
6483                 : Remove malloc from list of libraries to use
6484                 echo "Removing unneeded -lmalloc from library list" >&4
6485                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6486                 shift
6487                 libs="$*"
6488                 echo "libs = $libs" >&4
6489                 ;;
6490         esac
6491         ;;
6492 *)
6493         usemymalloc='n'
6494         mallocsrc=''
6495         mallocobj=''
6496         d_mymalloc="$undef"
6497         ;;
6498 esac
6499
6500 : compute the return types of malloc and free
6501 echo " "
6502 $cat >malloc.c <<END
6503 #$i_malloc I_MALLOC
6504 #$i_stdlib I_STDLIB
6505 #include <stdio.h>
6506 #include <sys/types.h>
6507 #ifdef I_MALLOC
6508 #include <malloc.h>
6509 #endif
6510 #ifdef I_STDLIB
6511 #include <stdlib.h>
6512 #endif
6513 #ifdef TRY_MALLOC
6514 void *malloc();
6515 #endif
6516 #ifdef TRY_FREE
6517 void free();
6518 #endif
6519 END
6520 case "$malloctype" in
6521 '')
6522         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6523                 malloctype='void *'
6524         else
6525                 malloctype='char *'
6526         fi
6527         ;;
6528 esac
6529 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6530
6531 case "$freetype" in
6532 '')
6533         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6534                 freetype='void'
6535         else
6536                 freetype='int'
6537         fi
6538         ;;
6539 esac
6540 echo "Your system uses $freetype free(), it would seem." >&4
6541 $rm -f malloc.[co]
6542 $cat <<EOM
6543
6544 After $package is installed, you may wish to install various
6545 add-on modules and utilities.  Typically, these add-ons will
6546 be installed under $prefix with the rest
6547 of this package.  However, you may wish to install such add-ons
6548 elsewhere under a different prefix.
6549
6550 If you do not wish to put everything under a single prefix, that's
6551 ok.  You will be prompted for the individual locations; this siteprefix
6552 is only used to suggest the defaults.
6553
6554 The default should be fine for most people.
6555
6556 EOM
6557 fn=d~+
6558 rp='Installation prefix to use for add-on modules and utilities?'
6559 : XXX Here might be another good place for an installstyle setting.
6560 case "$siteprefix" in
6561 '') dflt=$prefix ;;
6562 *)  dflt=$siteprefix ;;
6563 esac
6564 . ./getfile
6565 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6566 oldsiteprefix=''
6567 case "$siteprefix" in
6568 '') ;;
6569 *)      case "$ans" in
6570         "$prefix") ;;
6571         *) oldsiteprefix="$prefix";;
6572         esac
6573         ;;
6574 esac
6575 siteprefix="$ans"
6576 siteprefixexp="$ansexp"
6577
6578 : determine where site specific libraries go.
6579 : Usual default is /usr/local/lib/perl5/site_perl/$version
6580 : The default "style" setting is made in installstyle.U
6581 : XXX No longer works with Prefixit stuff.
6582 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6583 case "$sitelib" in
6584 '') case "$installstyle" in
6585         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6586         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6587         esac
6588         ;;
6589 *)      dflt="$sitelib"
6590         ;;
6591 esac
6592 $cat <<EOM
6593
6594 The installation process will create a directory for
6595 site-specific extensions and modules.  Most users find it convenient
6596 to place all site-specific files in this directory rather than in the
6597 main distribution directory.
6598
6599 EOM
6600 fn=d~+
6601 rp='Pathname for the site-specific library files?'
6602 . ./getfile
6603 sitelib="$ans"
6604 sitelibexp="$ansexp"
6605 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6606 : Change installation prefix, if necessary.
6607 if $test X"$prefix" != X"$installprefix"; then
6608         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6609 else
6610         installsitelib="$sitelibexp"
6611 fi
6612
6613 : determine where site specific architecture-dependent libraries go.
6614 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6615 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6616 : sitelib may have an optional trailing /share.
6617 case "$sitearch" in
6618 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6619         dflt="$dflt/$archname"
6620         ;;
6621 *)      dflt="$sitearch"
6622         ;;
6623 esac
6624 set sitearch sitearch none
6625 eval $prefixit
6626 $cat <<EOM
6627
6628 The installation process will also create a directory for
6629 architecture-dependent site-specific extensions and modules.
6630
6631 EOM
6632 fn=d~+
6633 rp='Pathname for the site-specific architecture-dependent library files?'
6634 . ./getfile
6635 sitearch="$ans"
6636 sitearchexp="$ansexp"
6637 : Change installation prefix, if necessary.
6638 if $test X"$prefix" != X"$installprefix"; then
6639         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6640 else
6641         installsitearch="$sitearchexp"
6642 fi
6643
6644 $cat <<EOM
6645
6646 The installation process will also create a directory for
6647 vendor-supplied add-ons.  Vendors who supply perl with their system
6648 may find it convenient to place all vendor-supplied files in this
6649 directory rather than in the main distribution directory.  This will
6650 ease upgrades between binary-compatible maintenance versions of perl.
6651
6652 Of course you may also use these directories in whatever way you see
6653 fit.  For example, you might use them to access modules shared over a
6654 company-wide network.
6655
6656 The default answer should be fine for most people.
6657 This causes further questions about vendor add-ons to be skipped
6658 and no vendor-specific directories will be configured for perl.
6659
6660 EOM
6661 rp='Do you want to configure vendor-specific add-on directories?'
6662 case "$usevendorprefix" in
6663 define|true|[yY]*) dflt=y ;;
6664 *)      : User may have set vendorprefix directly on Configure command line.
6665         case "$vendorprefix" in
6666         ''|' ') dflt=n ;;
6667         *)      dflt=y ;;
6668         esac
6669         ;;
6670 esac
6671 . ./myread
6672 case "$ans" in
6673 [yY]*)  fn=d~+
6674         rp='Installation prefix to use for vendor-supplied add-ons?'
6675         case "$vendorprefix" in
6676         '') dflt='' ;;
6677         *)  dflt=$vendorprefix ;;
6678         esac
6679         . ./getfile
6680         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6681         oldvendorprefix=''
6682         case "$vendorprefix" in
6683         '') ;;
6684         *)      case "$ans" in
6685                 "$prefix") ;;
6686                 *) oldvendorprefix="$prefix";;
6687                 esac
6688                 ;;
6689         esac
6690         usevendorprefix="$define"
6691         vendorprefix="$ans"
6692         vendorprefixexp="$ansexp"
6693         ;;
6694 *)      usevendorprefix="$undef"
6695         vendorprefix=''
6696         vendorprefixexp=''
6697         ;;
6698 esac
6699
6700 case "$vendorprefix" in
6701 '')     d_vendorlib="$undef"
6702         vendorlib=''
6703         vendorlibexp=''
6704         ;;
6705 *)      d_vendorlib="$define"
6706         : determine where vendor-supplied modules go.
6707         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6708         case "$vendorlib" in
6709         '')
6710                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6711                 case "$installstyle" in
6712                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6713                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6714                 esac
6715                 ;;
6716         *)      dflt="$vendorlib"
6717                 ;;
6718         esac
6719         fn=d~+
6720         rp='Pathname for the vendor-supplied library files?'
6721         . ./getfile
6722         vendorlib="$ans"
6723         vendorlibexp="$ansexp"
6724         ;;
6725 esac
6726 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6727 : Change installation prefix, if necessary.
6728 if $test X"$prefix" != X"$installprefix"; then
6729         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6730 else
6731         installvendorlib="$vendorlibexp"
6732 fi
6733
6734 case "$vendorprefix" in
6735 '')     d_vendorarch="$undef"
6736         vendorarch=''
6737         vendorarchexp=''
6738         ;;
6739 *)      d_vendorarch="$define"
6740         : determine where vendor-supplied architecture-dependent libraries go.
6741         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6742         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6743         : vendorlib may have an optional trailing /share.
6744         case "$vendorarch" in
6745         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6746                 dflt="$dflt/$archname"
6747                 ;;
6748         *)      dflt="$vendorarch" ;;
6749         esac
6750         fn=d~+
6751         rp='Pathname for vendor-supplied architecture-dependent files?'
6752         . ./getfile
6753         vendorarch="$ans"
6754         vendorarchexp="$ansexp"
6755         ;;
6756 esac
6757 : Change installation prefix, if necessary.
6758 if $test X"$prefix" != X"$installprefix"; then
6759         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6760 else
6761         installvendorarch="$vendorarchexp"
6762 fi
6763
6764 : Final catch-all directories to search
6765 $cat <<EOM
6766
6767 Lastly, you can have perl look in other directories for extensions and
6768 modules in addition to those already specified.
6769 These directories will be searched after 
6770         $sitearch 
6771         $sitelib 
6772 EOM
6773 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6774 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6775 echo ' '
6776 case "$otherlibdirs" in
6777 ''|' ') dflt='none' ;;
6778 *)      dflt="$otherlibdirs" ;;
6779 esac
6780 $cat <<EOM
6781 Enter a colon-separated set of extra paths to include in perl's @INC
6782 search path, or enter 'none' for no extra paths.
6783
6784 EOM
6785
6786 rp='Colon-separated list of additional directories for perl to search?'
6787 . ./myread
6788 case "$ans" in
6789 ' '|''|none)    otherlibdirs=' ' ;;     
6790 *)      otherlibdirs="$ans" ;;
6791 esac
6792 case "$otherlibdirs" in
6793 ' ') val=$undef ;;
6794 *)      val=$define ;;
6795 esac
6796 set d_perl_otherlibdirs
6797 eval $setvar
6798
6799 : Cruising for prototypes
6800 echo " "
6801 echo "Checking out function prototypes..." >&4
6802 $cat >prototype.c <<'EOCP'
6803 int main(int argc, char *argv[]) {
6804         exit(0);}
6805 EOCP
6806 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6807         echo "Your C compiler appears to support function prototypes."
6808         val="$define"
6809 else
6810         echo "Your C compiler doesn't seem to understand function prototypes."
6811         val="$undef"
6812 fi
6813 set prototype
6814 eval $setvar
6815 $rm -f prototype*
6816
6817 case "$prototype" in
6818 "$define") ;;
6819 *)      ansi2knr='ansi2knr'
6820         echo " "
6821         cat <<EOM >&4
6822
6823 $me:  FATAL ERROR:
6824 This version of $package can only be compiled by a compiler that 
6825 understands function prototypes.  Unfortunately, your C compiler 
6826         $cc $ccflags
6827 doesn't seem to understand them.  Sorry about that.
6828
6829 If GNU cc is available for your system, perhaps you could try that instead.  
6830
6831 Eventually, we hope to support building Perl with pre-ANSI compilers.
6832 If you would like to help in that effort, please contact <perlbug@perl.org>.
6833
6834 Aborting Configure now.
6835 EOM
6836         exit 2
6837         ;;
6838 esac
6839
6840 : determine where public executables go
6841 echo " "
6842 set dflt bin bin
6843 eval $prefixit
6844 fn=d~
6845 rp='Pathname where the public executables will reside?'
6846 . ./getfile
6847 if $test "X$ansexp" != "X$binexp"; then
6848         installbin=''
6849 fi
6850 bin="$ans"
6851 binexp="$ansexp"
6852 : Change installation prefix, if necessary.
6853 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6854 if $test X"$prefix" != X"$installprefix"; then
6855         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6856 else
6857         installbin="$binexp"
6858 fi
6859
6860 echo " "
6861 case "$extras" in
6862 '') dflt='n';;
6863 *) dflt='y';;
6864 esac
6865 cat <<EOM
6866 Perl can be built with extra modules or bundles of modules which
6867 will be fetched from the CPAN and installed alongside Perl.
6868
6869 Notice that you will need access to the CPAN; either via the Internet,
6870 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6871 be asked later to configure the CPAN.pm module which will in turn do
6872 the installation of the rest of the extra modules or bundles.)
6873
6874 Notice also that if the modules require any external software such as
6875 libraries and headers (the libz library and the zlib.h header for the
6876 Compress::Zlib module, for example) you MUST have any such software
6877 already installed, this configuration process will NOT install such
6878 things for you.
6879
6880 If this doesn't make any sense to you, just accept the default '$dflt'.
6881 EOM
6882 rp='Install any extra modules (y or n)?'
6883 . ./myread
6884 case "$ans" in
6885 y|Y)
6886         cat <<EOM
6887
6888 Please list any extra modules or bundles to be installed from CPAN,
6889 with spaces between the names.  The names can be in any format the
6890 'install' command of CPAN.pm will understand.  (Answer 'none',
6891 without the quotes, to install no extra modules or bundles.)
6892 EOM
6893         rp='Extras?'
6894         dflt="$extras"
6895         . ./myread
6896         extras="$ans"
6897 esac
6898 case "$extras" in
6899 ''|'none')
6900         val=''
6901         $rm -f ../extras.lst
6902         ;;
6903 *)      echo "(Saving the list of extras for later...)"
6904         echo "$extras" > ../extras.lst
6905         val="'$extras'"
6906         ;;
6907 esac
6908 set extras
6909 eval $setvar
6910 echo " "
6911
6912 : Find perl5.005 or later.
6913 echo "Looking for a previously installed perl5.005 or later... "
6914 case "$perl5" in
6915 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6916                 : Check if this perl is recent and can load a simple module
6917                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6918                         perl5=$tdir/perl
6919                         break;
6920                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6921                         perl5=$tdir/perl5
6922                         break;
6923                 fi
6924         done
6925         ;;
6926 *)      perl5="$perl5"
6927         ;;
6928 esac
6929 case "$perl5" in
6930 '')     echo "None found.  That's ok.";;
6931 *)      echo "Using $perl5." ;;
6932 esac
6933
6934 : Determine list of previous versions to include in @INC
6935 $cat > getverlist <<EOPL
6936 #!$perl5 -w
6937 use File::Basename;
6938 \$api_versionstring = "$api_versionstring";
6939 \$version = "$version";
6940 \$stem = "$sitelib_stem";
6941 \$archname = "$archname";
6942 EOPL
6943         $cat >> getverlist <<'EOPL'
6944 # Can't have leading @ because metaconfig interprets it as a command!
6945 ;@inc_version_list=();
6946 # XXX Redo to do opendir/readdir? 
6947 if (-d $stem) {
6948     chdir($stem);
6949     ;@candidates = glob("5.*");
6950 }
6951 else {
6952     ;@candidates = ();
6953 }
6954
6955 # XXX ToDo:  These comparisons must be reworked when two-digit
6956 # subversions come along, so that 5.7.10 compares as greater than
6957 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6958 # widespread that we can use the built-in version vectors rather
6959 # than reinventing them here.  For 5.6.0, however, we must
6960 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6961 foreach $d (@candidates) {
6962     if ($d lt $version) {
6963         if ($d ge $api_versionstring) {
6964             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6965         }
6966         elsif ($d ge "5.005") {
6967             unshift(@inc_version_list, grep { -d } $d);
6968         }
6969     }
6970     else {
6971         # Skip newer version.  I.e. don't look in
6972         # 5.7.0 if we're installing 5.6.1.
6973     }
6974 }
6975
6976 if (@inc_version_list) {
6977     print join(' ', @inc_version_list);
6978 }
6979 else {
6980     # Blank space to preserve value for next Configure run.
6981     print " ";
6982 }
6983 EOPL
6984 chmod +x getverlist
6985 case "$inc_version_list" in
6986 '')     if test -x "$perl5$exe_ext"; then
6987                 dflt=`$perl5 getverlist`
6988         else
6989                 dflt='none'
6990         fi
6991         ;;
6992 $undef) dflt='none' ;;
6993 *)  eval dflt=\"$inc_version_list\" ;;
6994 esac
6995 case "$dflt" in
6996 ''|' ') dflt=none ;;
6997 esac
6998 case "$dflt" in
6999 5.005) case "$bincompat5005" in
7000        $define|true|[yY]*) ;;
7001        *) dflt=none ;;
7002        esac
7003        ;;
7004 esac
7005 $cat <<'EOM'
7006
7007 In order to ease the process of upgrading, this version of perl 
7008 can be configured to use modules built and installed with earlier 
7009 versions of perl that were installed under $prefix.  Specify here
7010 the list of earlier versions that this version of perl should check.
7011 If Configure detected no earlier versions of perl installed under
7012 $prefix, then the list will be empty.  Answer 'none' to tell perl
7013 to not search earlier versions.
7014
7015 The default should almost always be sensible, so if you're not sure,
7016 just accept the default.
7017 EOM
7018
7019 rp='List of earlier versions to include in @INC?'
7020 . ./myread
7021 case "$ans" in
7022 [Nn]one|''|' ') inc_version_list=' ' ;;
7023 *) inc_version_list="$ans" ;;
7024 esac
7025 case "$inc_version_list" in
7026 ''|' ') 
7027         inc_version_list_init='0';;
7028 *)      inc_version_list_init=`echo $inc_version_list |
7029                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7030         ;;
7031 esac
7032 $rm -f getverlist
7033
7034 : determine whether to install perl also as /usr/bin/perl
7035
7036 echo " "
7037 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7038         $cat <<EOM
7039 Many scripts expect perl to be installed as /usr/bin/perl.
7040 I can install the perl you are about to compile also as /usr/bin/perl
7041 (in addition to $installbin/perl).
7042 EOM
7043         case "$installusrbinperl" in
7044         "$undef"|[nN]*) dflt='n';;
7045         *)              dflt='y';;
7046         esac
7047         rp="Do you want to install perl as /usr/bin/perl?"
7048         . ./myread
7049         case "$ans" in
7050         [yY]*)  val="$define";;
7051         *)      val="$undef" ;;
7052         esac
7053 else
7054         val="$undef"
7055 fi
7056 set installusrbinperl
7057 eval $setvar
7058
7059 : see if dld is available
7060 set dld.h i_dld
7061 eval $inhdr
7062
7063 : see if dlopen exists
7064 xxx_runnm="$runnm"
7065 runnm=false
7066 set dlopen d_dlopen
7067 eval $inlibc
7068 runnm="$xxx_runnm"
7069
7070 : determine which dynamic loading, if any, to compile in
7071 echo " "
7072 dldir="ext/DynaLoader"
7073 case "$usedl" in
7074 $define|y|true)
7075         dflt='y'
7076         usedl="$define"
7077         ;;
7078 $undef|n|false)
7079         dflt='n'
7080         usedl="$undef"
7081         ;;
7082 *) 
7083         dflt='n'
7084         case "$d_dlopen" in
7085             $define) dflt='y' ;;
7086         esac
7087         case "$i_dld" in
7088             $define) dflt='y' ;;
7089         esac
7090         : Does a dl_xxx.xs file exist for this operating system
7091         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7092         ;;
7093 esac
7094 rp="Do you wish to use dynamic loading?"
7095 . ./myread
7096 usedl="$ans"
7097 case "$ans" in
7098 y*) usedl="$define"
7099         case "$dlsrc" in
7100         '')
7101                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7102                         dflt="$dldir/dl_${osname}.xs"
7103                 elif $test "$d_dlopen" = "$define" ; then
7104                         dflt="$dldir/dl_dlopen.xs"
7105                 elif $test "$i_dld" = "$define" ; then
7106                         dflt="$dldir/dl_dld.xs"
7107                 else
7108                         dflt=''
7109                 fi
7110                 ;;
7111         *)      dflt="$dldir/$dlsrc"
7112                 ;;
7113         esac
7114     echo "The following dynamic loading files are available:"
7115         : Can not go over to $dldir because getfile has path hard-coded in.
7116         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7117         rp="Source file to use for dynamic loading"
7118         fn="fne"
7119         gfpth="$src"
7120         . ./getfile
7121         usedl="$define"
7122         : emulate basename
7123         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7124
7125         $cat << EOM
7126
7127 Some systems may require passing special flags to $cc -c to
7128 compile modules that will be used to create a shared library.
7129 To use no flags, say "none".
7130
7131 EOM
7132     case "$cccdlflags" in
7133     '') case "$gccversion" in
7134                 '') case "$osname" in
7135                         hpux)   dflt='+z' ;;
7136                         next)   dflt='none' ;;
7137                         irix*)  dflt='-KPIC' ;;
7138                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7139                         sunos)  dflt='-pic' ;;
7140                         *)      dflt='none' ;;
7141                     esac
7142                         ;;
7143                 *)  case "$osname" in
7144                         darwin) dflt='none' ;;
7145                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7146                         *)      dflt='-fpic' ;;
7147                     esac ;;
7148             esac ;;
7149         ' ') dflt='none' ;;
7150     *)  dflt="$cccdlflags" ;;
7151     esac
7152     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7153     . ./myread
7154     case "$ans" in
7155     none) cccdlflags=' ' ;;
7156     *) cccdlflags="$ans" ;;
7157     esac
7158
7159     cat << EOM
7160
7161 Some systems use ld to create libraries that can be dynamically loaded,
7162 while other systems (such as those using ELF) use $cc.
7163
7164 EOM
7165         case "$ld" in
7166         '')     $cat >try.c <<'EOM'
7167 /* Test for whether ELF binaries are produced */
7168 #include <fcntl.h>
7169 #include <stdlib.h>
7170 int main() {
7171         char b[4];
7172         int i = open("a.out",O_RDONLY);
7173         if(i == -1) 
7174                 exit(1); /* fail */
7175         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7176                 exit(0); /* succeed (yes, it's ELF) */
7177         else
7178                 exit(1); /* fail */
7179 }
7180 EOM
7181                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7182                         cat <<EOM
7183 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7184 EOM
7185                         dflt="$cc"
7186                 else
7187                         echo "I'll use ld to build dynamic libraries."
7188                         dflt='ld'
7189                 fi
7190                 rm -f try.c a.out
7191                 ;;
7192         *)      dflt="$ld"
7193                 ;;
7194         esac
7195
7196     rp="What command should be used to create dynamic libraries?"
7197     . ./myread
7198         ld="$ans"
7199
7200     cat << EOM
7201
7202 Some systems may require passing special flags to $ld to create a
7203 library that can be dynamically loaded.  If your ld flags include
7204 -L/other/path options to locate libraries outside your loader's normal
7205 search path, you may need to specify those -L options here as well.  To
7206 use no flags, say "none".
7207
7208 EOM
7209     case "$lddlflags" in
7210     '') case "$osname" in
7211                         beos) dflt='-nostart' ;;
7212                         hpux) dflt='-b';
7213                               case "$gccversion" in
7214                               '') dflt="$dflt +vnocompatwarnings" ;;
7215                               esac
7216                               ;;        
7217                         linux|irix*)    dflt='-shared' ;;
7218                         next)  dflt='none' ;;
7219                         solaris) dflt='-G' ;;
7220                         sunos) dflt='-assert nodefinitions' ;;
7221                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7222                 *)     dflt='none' ;;
7223                         esac
7224                         ;;
7225     *) dflt="$lddlflags" ;;
7226     esac
7227
7228         : Try to guess additional flags to pick up local libraries.
7229         : Be careful not to append to a plain 'none'
7230         case "$dflt" in
7231         none) dflt='' ;;
7232         esac
7233         for thisflag in $ldflags; do
7234                 case "$thisflag" in
7235                 -L*|-R*|-Wl,-R*)
7236                         case " $dflt " in
7237                         *" $thisflag "*) ;;
7238                         *) dflt="$dflt $thisflag" ;;
7239                         esac
7240                         ;;
7241                 esac
7242         done
7243
7244         case "$dflt" in
7245         ''|' ') dflt='none' ;;
7246         esac
7247
7248     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7249     . ./myread
7250     case "$ans" in
7251     none) lddlflags=' ' ;;
7252     *) lddlflags="$ans" ;;
7253     esac
7254
7255         cat <<EOM
7256
7257 Some systems may require passing special flags to $cc to indicate that
7258 the resulting executable will use dynamic linking.  To use no flags,
7259 say "none".
7260
7261 EOM
7262     case "$ccdlflags" in
7263     '') case "$osname" in
7264                 hpux)   dflt='-Wl,-E' ;;
7265                 linux)  dflt='-rdynamic' ;;
7266                 next)   dflt='none' ;;
7267                 sunos)  dflt='none' ;;
7268                 *)      dflt='none' ;;
7269             esac ;;
7270     ' ')  dflt='none' ;;
7271     *)  dflt="$ccdlflags" ;;
7272     esac
7273     rp="Any special flags to pass to $cc to use dynamic linking?"
7274     . ./myread
7275     case "$ans" in
7276     none) ccdlflags=' ' ;;
7277     *) ccdlflags="$ans" ;;
7278     esac
7279     ;;
7280 *)  usedl="$undef"
7281         ld='ld'
7282     dlsrc='dl_none.xs'
7283     lddlflags=''
7284     ccdlflags=''
7285     ;;
7286 esac
7287
7288 also=''
7289 case "$usedl" in
7290 $undef)
7291         # No dynamic loading being used, so don't bother even to prompt.
7292         useshrplib='false'
7293         ;;
7294 *)      case "$useshrplib" in
7295         '')     case "$osname" in
7296                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7297                         dflt=y
7298                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7299                         ;;
7300                 next*)
7301                         case "$osvers" in
7302                         4*)     dflt=y
7303                                 also='Building a shared libperl is needed for MAB support.'
7304                                 ;;
7305                         *)      dflt=n
7306                                 ;;
7307                         esac
7308                         ;;
7309                 *)      dflt=n
7310                         ;;
7311                 esac
7312                 ;;
7313         $define|true|[Yy]*)
7314                 dflt=y
7315                 ;;
7316         *)      dflt=n
7317                 ;;
7318         esac
7319         $cat << EOM
7320
7321 The perl executable is normally obtained by linking perlmain.c with
7322 libperl${_a}, any static extensions (usually just DynaLoader), and
7323 any other libraries needed on this system (such as -lm, etc.).  Since
7324 your system supports dynamic loading, it is probably possible to build
7325 a shared libperl.$so.  If you will have more than one executable linked
7326 to libperl.$so, this will significantly reduce the size of each
7327 executable, but it may have a noticeable affect on performance.  The
7328 default is probably sensible for your system.
7329 $also
7330
7331 EOM
7332         rp="Build a shared libperl.$so (y/n)"
7333         . ./myread
7334         case "$ans" in
7335         true|$define|[Yy]*)
7336                 useshrplib='true'  ;;
7337         *)      useshrplib='false' ;;
7338         esac
7339         ;;
7340 esac
7341
7342 case "$useshrplib" in
7343 true)
7344         case "$libperl" in
7345         '')
7346                 # Figure out a good name for libperl.so.  Since it gets stored in
7347                 # a version-specific architecture-dependent library, the version
7348                 # number isn't really that important, except for making cc/ld happy.
7349                 #
7350                 # A name such as libperl.so.3.1
7351                 majmin="libperl.$so.$patchlevel.$subversion"
7352                 # A name such as libperl.so.301
7353                 majonly=`echo $patchlevel $subversion |
7354                         $awk '{printf "%d%02d", $1, $2}'`
7355                 majonly=libperl.$so.$majonly
7356                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7357                 # rely on figuring it out from the naming of libc.
7358                 case "${osname}${osvers}" in
7359                 next4*)
7360                         dflt=libperl.5.$so
7361                         # XXX How handle the --version stuff for MAB?
7362                         ;;
7363                 linux*)  # ld won't link with a bare -lperl otherwise.
7364                         dflt=libperl.$so
7365                         ;;
7366                 cygwin*) # include version
7367                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7368                         ;;
7369                 *)      # Try to guess based on whether libc has major.minor.
7370                         case "$libc" in
7371                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7372                         *libc.$so.[0-9]*) dflt=$majonly ;;
7373                         *)      dflt=libperl.$so ;;
7374                         esac
7375                         ;;
7376                 esac
7377                 ;;
7378         *)      dflt=$libperl
7379                 ;;
7380         esac
7381         cat << EOM
7382
7383 I need to select a good name for the shared libperl.  If your system uses
7384 library names with major and minor numbers, then you might want something
7385 like $majmin.  Alternatively, if your system uses a single version
7386 number for shared libraries, then you might want to use $majonly.
7387 Or, your system might be quite happy with a simple libperl.$so.
7388
7389 Since the shared libperl will get installed into a version-specific
7390 architecture-dependent directory, the version number of the shared perl
7391 library probably isn't important, so the default should be o.k.
7392
7393 EOM
7394         rp='What name do you want to give to the shared libperl?'
7395         . ./myread
7396         libperl=$ans
7397         echo "Ok, I'll use $libperl"
7398         ;;
7399 *)
7400         libperl="libperl${_a}"
7401         ;;
7402 esac
7403
7404 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7405 case "$shrpdir" in
7406 '') ;;
7407 *)      $cat >&4 <<EOM
7408 WARNING:  Use of the shrpdir variable for the installation location of
7409 the shared $libperl is not supported.  It was never documented and
7410 will not work in this version.  Let me (perlbug@perl.org)
7411 know of any problems this may cause.
7412
7413 EOM
7414         case "$shrpdir" in
7415         "$archlibexp/CORE")
7416                 $cat >&4 <<EOM
7417 But your current setting of $shrpdir is
7418 the default anyway, so it's harmless.
7419 EOM
7420                 ;;
7421         *)
7422                 $cat >&4 <<EOM
7423 Further, your current attempted setting of $shrpdir
7424 conflicts with the value of $archlibexp/CORE
7425 that installperl will use.
7426 EOM
7427                 ;;
7428         esac
7429         ;;
7430 esac
7431
7432 # How will the perl executable find the installed shared $libperl?
7433 # Add $xxx to ccdlflags.
7434 # If we can't figure out a command-line option, use $shrpenv to
7435 # set env LD_RUN_PATH.  The main perl makefile uses this.
7436 shrpdir=$archlibexp/CORE
7437 xxx=''
7438 tmp_shrpenv=''
7439 if "$useshrplib"; then
7440     case "$osname" in 
7441         aix)
7442                 # We'll set it in Makefile.SH...
7443                 ;;
7444         solaris)
7445                 xxx="-R $shrpdir"
7446                 ;;
7447         freebsd|netbsd)
7448                 xxx="-Wl,-R$shrpdir"
7449                 ;;
7450         linux|irix*|dec_osf)
7451                 xxx="-Wl,-rpath,$shrpdir"
7452                 ;;
7453         next)
7454                 # next doesn't like the default...
7455                 ;;
7456         beos)
7457                 # beos doesn't like the default, either.
7458                 ;;
7459         hpux*)
7460                 # hpux doesn't like the default, either.
7461                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7462                 ;;
7463         *)
7464                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7465                 ;;
7466         esac
7467         case "$xxx" in
7468         '') ;;
7469         *)      
7470                 # Only add $xxx if it isn't already in ccdlflags.
7471                 case " $ccdlflags " in
7472                 *" $xxx "*)     ;;
7473                 *)      ccdlflags="$ccdlflags $xxx"
7474                         cat <<EOM >&4
7475
7476 Adding $xxx to the flags
7477 passed to $ld so that the perl executable will find the 
7478 installed shared $libperl.
7479
7480 EOM
7481                         ;;
7482                 esac
7483                 ;;
7484         esac
7485 fi
7486 # Fix ccdlflags in AIX for building external extensions.
7487 # (For building Perl itself bare -bE:perl.exp is needed,
7488 #  Makefile.SH takes care of this.)
7489 case "$osname" in
7490 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7491 esac
7492 # Respect a hint or command-line value.
7493 case "$shrpenv" in
7494 '') shrpenv="$tmp_shrpenv" ;;
7495 esac
7496 case "$ldlibpthname" in
7497 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7498 none)   ldlibpthname='' ;;
7499 esac
7500
7501 : determine where manual pages are on this system
7502 echo " "
7503 case "$sysman" in
7504 '') 
7505         syspath='/usr/share/man/man1 /usr/man/man1'
7506         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7507         syspath="$syspath /usr/man/u_man/man1"
7508         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7509         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7510         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7511         sysman=`./loc . /usr/man/man1 $syspath`
7512         ;;
7513 esac
7514 if $test -d "$sysman"; then
7515         echo "System manual is in $sysman." >&4
7516 else
7517         echo "Could not find manual pages in source form." >&4
7518 fi
7519
7520 : determine where manual pages go
7521 set man1dir man1dir none
7522 eval $prefixit
7523 $cat <<EOM
7524
7525 $spackage has manual pages available in source form.
7526 EOM
7527 case "$nroff" in
7528 nroff)
7529         echo "However, you don't have nroff, so they're probably useless to you."
7530         case "$man1dir" in
7531         '') man1dir="none";;
7532         esac;;
7533 esac
7534 echo "If you don't want the manual sources installed, answer 'none'."
7535 case "$man1dir" in
7536 ' ') dflt=none
7537         ;;
7538 '')
7539         lookpath="$prefixexp/share/man/man1"
7540         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7541         lookpath="$lookpath $prefixexp/man/p_man/man1"
7542         lookpath="$lookpath $prefixexp/man/u_man/man1"
7543         lookpath="$lookpath $prefixexp/man/man.1"
7544         case "$sysman" in
7545         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7546         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7547         esac
7548         set dflt
7549         eval $prefixup
7550         ;;
7551 *)  dflt="$man1dir"
7552         ;;
7553 esac
7554 echo " "
7555 fn=dn+~
7556 rp="Where do the main $spackage manual pages (source) go?"
7557 . ./getfile
7558 if $test "X$man1direxp" != "X$ansexp"; then
7559         installman1dir=''
7560 fi
7561 man1dir="$ans"
7562 man1direxp="$ansexp"
7563 case "$man1dir" in
7564 '')     man1dir=' '
7565         installman1dir='';;
7566 esac
7567
7568 : Change installation prefix, if necessary.
7569 if $test X"$prefix" != X"$installprefix"; then
7570         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7571 else
7572         installman1dir="$man1direxp"
7573 fi
7574
7575 : What suffix to use on installed man pages
7576
7577 case "$man1dir" in
7578 ' ')
7579         man1ext='0'
7580         ;;
7581 *)
7582         rp="What suffix should be used for the main $spackage man pages?"
7583         case "$man1ext" in
7584         '')     case "$man1dir" in
7585                 *1)  dflt=1 ;;
7586                 *1p) dflt=1p ;;
7587                 *1pm) dflt=1pm ;;
7588                 *l) dflt=l;;
7589                 *n) dflt=n;;
7590                 *o) dflt=o;;
7591                 *p) dflt=p;;
7592                 *C) dflt=C;;
7593                 *L) dflt=L;;
7594                 *L1) dflt=L1;;
7595                 *) dflt=1;;
7596                 esac
7597                 ;;
7598         *)      dflt="$man1ext";;
7599         esac
7600         . ./myread
7601         man1ext="$ans"
7602         ;;
7603 esac
7604
7605 : see if we can have long filenames
7606 echo " "
7607 first=123456789abcdef
7608 $rm -f $first
7609 if (echo hi >$first) 2>/dev/null; then
7610         if $test -f 123456789abcde; then
7611                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7612                 val="$undef"
7613         else
7614                 echo 'You can have filenames longer than 14 characters.'>&4
7615                 val="$define"
7616         fi
7617 else
7618         $cat <<'EOM'
7619 You can't have filenames longer than 14 chars.
7620 You can't even think about them!
7621 EOM
7622         val="$undef"
7623 fi 
7624 set d_flexfnam
7625 eval $setvar
7626 $rm -rf 123456789abcde*
7627
7628 : determine where library module manual pages go
7629 set man3dir man3dir none
7630 eval $prefixit
7631 $cat <<EOM
7632
7633 $spackage has manual pages for many of the library modules.
7634 EOM
7635
7636 case "$nroff" in
7637 nroff)
7638         $cat <<'EOM'
7639 However, you don't have nroff, so they're probably useless to you.
7640 EOM
7641         case "$man3dir" in
7642         '') man3dir="none";;
7643         esac;;
7644 esac
7645
7646 case "$d_flexfnam" in
7647 undef)
7648         $cat <<'EOM'
7649 However, your system can't handle the long file names like File::Basename.3. 
7650 EOM
7651         case "$man3dir" in
7652         '') man3dir="none";;
7653         esac;;
7654 esac
7655
7656 echo "If you don't want the manual sources installed, answer 'none'."
7657 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7658 case "$man3dir" in
7659 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7660         if $test -d "$privlib/man/man3"; then
7661                 cat <<EOM >&4
7662
7663 WARNING:  Previous versions of perl installed man3 pages into
7664 $privlib/man/man3.  This version will suggest a 
7665 new default of $dflt.  
7666 EOM
7667                 tdflt=$dflt
7668                 dflt='n'
7669                 rp='Do you wish to preserve the old behavior?(y/n)'
7670                 . ./myread
7671                 case "$ans" in
7672                 y*) dflt="$privlib/man/man3" ;;
7673                 *)  dflt=$tdflt ;;
7674                 esac
7675     fi
7676         ;;
7677 *)      dflt="$man3dir" ;;
7678 esac
7679 case "$dflt" in
7680 ' ') dflt=none ;;
7681 esac
7682 echo " "
7683 fn=dn+~
7684 rp="Where do the $package library man pages (source) go?"
7685 . ./getfile
7686 man3dir="$ans"
7687 man3direxp="$ansexp"
7688 case "$man3dir" in
7689 '')     man3dir=' '
7690         installman3dir='';;
7691 esac
7692
7693 : Change installation prefix, if necessary.
7694 if $test X"$prefix" != X"$installprefix"; then
7695         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7696 else
7697         installman3dir="$man3direxp"
7698 fi
7699
7700 : What suffix to use on installed man pages
7701 case "$man3dir" in
7702 ' ')
7703         man3ext='0'
7704         ;;
7705 *)
7706         rp="What suffix should be used for the $package library man pages?"
7707         case "$man3ext" in
7708         '')     case "$man3dir" in
7709                 *3)  dflt=3 ;;
7710                 *3p) dflt=3p ;;
7711                 *3pm) dflt=3pm ;;
7712                 *l) dflt=l;;
7713                 *n) dflt=n;;
7714                 *o) dflt=o;;
7715                 *p) dflt=p;;
7716                 *C) dflt=C;;
7717                 *L) dflt=L;;
7718                 *L3) dflt=L3;;
7719                 *) dflt=3;;
7720                 esac
7721                 ;;
7722         *)      dflt="$man3ext";;
7723         esac
7724         . ./myread
7725         man3ext="$ans"
7726         ;;
7727 esac
7728
7729 : see if we have to deal with yellow pages, now NIS.
7730 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7731         if $test -f /usr/etc/nibindd; then
7732                 echo " "
7733                 echo "I'm fairly confident you're on a NeXT."
7734                 echo " "
7735                 rp='Do you get the hosts file via NetInfo?'
7736                 dflt=y
7737                 case "$hostcat" in
7738                 nidump*) ;;
7739                 '') ;;
7740                 *) dflt=n;;
7741                 esac
7742                 . ./myread
7743                 case "$ans" in
7744                 y*) hostcat='nidump hosts .';;
7745                 *)      case "$hostcat" in
7746                         nidump*) hostcat='';;
7747                         esac
7748                         ;;
7749                 esac
7750         fi
7751         case "$hostcat" in
7752         nidump*) ;;
7753         *)
7754                 case "$hostcat" in
7755                 *ypcat*) dflt=y;;
7756                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7757                                 dflt=y
7758                         else
7759                                 dflt=n
7760                         fi;;
7761                 *) dflt=n;;
7762                 esac
7763                 echo " "
7764                 rp='Are you getting the hosts file via yellow pages?'
7765                 . ./myread
7766                 case "$ans" in
7767                 y*) hostcat='ypcat hosts';;
7768                 *) hostcat='cat /etc/hosts';;
7769                 esac
7770                 ;;
7771         esac
7772 fi
7773 case "$hostcat" in
7774 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7775 esac
7776 case "$groupcat" in
7777 '') test -f /etc/group && groupcat='cat /etc/group';;
7778 esac
7779 case "$passcat" in
7780 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7781 esac
7782
7783 : now get the host name
7784 echo " "
7785 echo "Figuring out host name..." >&4
7786 case "$myhostname" in
7787 '') cont=true
7788         echo 'Maybe "hostname" will work...'
7789         if tans=`sh -c hostname 2>&1` ; then
7790                 myhostname=$tans
7791                 phostname=hostname
7792                 cont=''
7793         fi
7794         ;;
7795 *) cont='';;
7796 esac
7797 if $test "$cont"; then
7798         if ./xenix; then
7799                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7800                 if tans=`cat /etc/systemid 2>&1` ; then
7801                         myhostname=$tans
7802                         phostname='cat /etc/systemid'
7803                         echo "Whadyaknow.  Xenix always was a bit strange..."
7804                         cont=''
7805                 fi
7806         elif $test -r /etc/systemid; then
7807                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7808         fi
7809 fi
7810 if $test "$cont"; then
7811         echo 'No, maybe "uuname -l" will work...'
7812         if tans=`sh -c 'uuname -l' 2>&1` ; then
7813                 myhostname=$tans
7814                 phostname='uuname -l'
7815         else
7816                 echo 'Strange.  Maybe "uname -n" will work...'
7817                 if tans=`sh -c 'uname -n' 2>&1` ; then
7818                         myhostname=$tans
7819                         phostname='uname -n'
7820                 else
7821                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7822                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7823                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7824                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7825                         else
7826                                 case "$myhostname" in
7827                                 '') echo "Does this machine have an identity crisis or something?"
7828                                         phostname='';;
7829                                 *)
7830                                         echo "Well, you said $myhostname before..."
7831                                         phostname='echo $myhostname';;
7832                                 esac
7833                         fi
7834                 fi
7835         fi
7836 fi
7837 : you do not want to know about this
7838 set $myhostname
7839 myhostname=$1
7840
7841 : verify guess
7842 if $test "$myhostname" ; then
7843         dflt=y
7844         rp='Your host name appears to be "'$myhostname'".'" Right?"
7845         . ./myread
7846         case "$ans" in
7847         y*) ;;
7848         *) myhostname='';;
7849         esac
7850 fi
7851
7852 : bad guess or no guess
7853 while $test "X$myhostname" = X ; do
7854         dflt=''
7855         rp="Please type the (one word) name of your host:"
7856         . ./myread
7857         myhostname="$ans"
7858 done
7859
7860 : translate upper to lower if necessary
7861 case "$myhostname" in
7862 *[A-Z]*)
7863         echo "(Normalizing case in your host name)"
7864         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7865         ;;
7866 esac
7867
7868 case "$myhostname" in
7869 *.*)
7870         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7871         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7872         echo "(Trimming domain name from host name--host name is now $myhostname)"
7873         ;;
7874 *) case "$mydomain" in
7875         '')
7876                 {
7877                         test "X$hostcat" = "Xypcat hosts" &&
7878                         ypmatch "$myhostname" hosts 2>/dev/null |\
7879                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7880                         $test -s hosts
7881                 } || {
7882                         test "X$hostcat" != "X" &&
7883                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7884                                         /[       ]$myhostname[  . ]/p" > hosts
7885                 }
7886                 tmp_re="[       . ]"
7887                 if $test -f hosts; then
7888                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7889                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7890                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7891                                 hosts | $sort | $uniq | \
7892                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7893                         case `$echo X$dflt` in
7894                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7895                                 dflt=.
7896                                 ;;
7897                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7898                                 ;;
7899                         esac
7900                 else
7901                         echo "(I cannot locate a hosts database anywhere)"
7902                         dflt=.
7903                 fi
7904                 case "$dflt" in
7905                 .)
7906                         tans=`./loc resolv.conf X /etc /usr/etc`
7907                         if $test -f "$tans"; then
7908                                 echo "(Attempting domain name extraction from $tans)"
7909                                 dflt=.`$sed -n -e 's/   / /g' \
7910                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7911                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7912                                 case "$dflt" in
7913                                 .) dflt=.`$sed -n -e 's/        / /g' \
7914                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7915                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7916                                         ;;
7917                                 esac
7918                         fi
7919                         ;;
7920                 esac
7921                 case "$dflt" in
7922                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7923                         dflt=.`sh -c domainname 2>/dev/null`
7924                         case "$dflt" in
7925                         '') dflt='.';;
7926                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7927                         esac
7928                         ;;
7929                 esac
7930                 case "$dflt$osname" in
7931                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7932                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7933                         ;;
7934                 esac
7935                 case "$dflt" in
7936                 .) echo "(Lost all hope -- silly guess then)"
7937                         dflt='.uucp'
7938                         ;;
7939                 esac
7940                 $rm -f hosts
7941                 ;;
7942         *) dflt="$mydomain";;
7943         esac;;
7944 esac
7945 echo " "
7946 rp="What is your domain name?"
7947 . ./myread
7948 tans="$ans"
7949 case "$ans" in
7950 '') ;;
7951 .*) ;;
7952 *) tans=".$tans";;
7953 esac
7954 mydomain="$tans"
7955
7956 : translate upper to lower if necessary
7957 case "$mydomain" in
7958 *[A-Z]*)
7959         echo "(Normalizing case in your domain name)"
7960         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7961         ;;
7962 esac
7963
7964 : a little sanity check here
7965 case "$phostname" in
7966 '') ;;
7967 *)
7968         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7969         $myhostname$mydomain|$myhostname) ;;
7970         *)
7971                 case "$phostname" in
7972                 sed*)
7973                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7974                         ;;
7975                 *)
7976                         echo "(That doesn't agree with your $phostname command, by the way.)"
7977                         ;;
7978                 esac
7979         ;;
7980         esac
7981         ;;
7982 esac
7983
7984 $cat <<EOM
7985
7986 I need to get your e-mail address in Internet format if possible, i.e.
7987 something like user@host.domain. Please answer accurately since I have
7988 no easy means to double check it. The default value provided below
7989 is most probably close to reality but may not be valid from outside
7990 your organization...
7991
7992 EOM
7993 cont=x
7994 while test "$cont"; do
7995         case "$cf_email" in
7996         '') dflt="$cf_by@$myhostname$mydomain";;
7997         *) dflt="$cf_email";;
7998         esac
7999         rp='What is your e-mail address?'
8000         . ./myread
8001         cf_email="$ans"
8002         case "$cf_email" in
8003         *@*.*) cont='' ;;
8004         *)
8005                 rp='Address does not look like an Internet one.  Use it anyway?'
8006                 case "$fastread" in
8007                 yes) dflt=y ;;
8008                 *) dflt=n ;;
8009                 esac
8010                 . ./myread
8011                 case "$ans" in
8012                 y*) cont='' ;;
8013                 *) echo " " ;;
8014                 esac
8015                 ;;
8016         esac
8017 done
8018
8019 $cat <<EOM
8020
8021 If you or somebody else will be maintaining perl at your site, please
8022 fill in the correct e-mail address here so that they may be contacted
8023 if necessary. Currently, the "perlbug" program included with perl
8024 will send mail to this address in addition to perlbug@perl.org. You may
8025 enter "none" for no administrator.
8026
8027 EOM
8028 case "$perladmin" in
8029 '') dflt="$cf_email";;
8030 *) dflt="$perladmin";;
8031 esac
8032 rp='Perl administrator e-mail address'
8033 . ./myread
8034 perladmin="$ans"
8035
8036 : determine whether to only install version-specific parts.
8037 echo " "
8038 $cat <<EOM
8039 Do you want to install only the version-specific parts of the perl
8040 distribution?  Usually you do *not* want to do this.
8041 EOM
8042 case "$versiononly" in
8043 "$define"|[Yy]*|true) dflt='y' ;;
8044 *) dflt='n';
8045 esac
8046 rp="Do you want to install only the version-specific parts of perl?"
8047 . ./myread
8048 case "$ans" in
8049 [yY]*)  val="$define";;
8050 *)      val="$undef" ;;
8051 esac
8052 set versiononly
8053 eval $setvar
8054
8055 : figure out how to guarantee perl startup
8056 case "$startperl" in
8057 '')
8058         case "$sharpbang" in
8059         *!)
8060                 $cat <<EOH
8061
8062 I can use the #! construct to start perl on your system. This will
8063 make startup of perl scripts faster, but may cause problems if you
8064 want to share those scripts and perl is not in a standard place
8065 ($binexp/perl) on all your platforms. The alternative is to force
8066 a shell by starting the script with a single ':' character.
8067
8068 EOH
8069                 case "$versiononly" in
8070                 "$define")      dflt="$binexp/perl$version";;  
8071                 *)              dflt="$binexp/perl";;
8072                 esac
8073                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8074                 . ./myread
8075                 case "$ans" in
8076                 none)   startperl=": # use perl";;
8077                 *)      startperl="#!$ans"
8078                         if $test 30 -lt `echo "$ans" | wc -c`; then
8079                                 $cat >&4 <<EOM
8080
8081 WARNING:  Some systems limit the #! command to 32 characters.
8082 If you experience difficulty running Perl scripts with #!, try
8083 installing Perl in a directory with a shorter pathname.
8084
8085 EOM
8086                         fi ;;
8087                 esac
8088                 ;;
8089         *) startperl=": # use perl"
8090                 ;;
8091         esac
8092         ;;
8093 esac
8094 echo "I'll use $startperl to start perl scripts."
8095
8096 : figure best path for perl in scripts
8097 case "$perlpath" in
8098 '')
8099         case "$versiononly" in
8100         "$define")      perlpath="$binexp/perl$version";;
8101         *)              perlpath="$binexp/perl";;
8102         esac
8103         case "$startperl" in
8104         *!*) ;;
8105         *)
8106                 $cat <<EOH
8107
8108 I will use the "eval 'exec'" idiom to start Perl on your system.
8109 I can use the full path of your Perl binary for this purpose, but
8110 doing so may cause problems if you want to share those scripts and
8111 Perl is not always in a standard place ($binexp/perl).
8112
8113 EOH
8114                 dflt="$binexp/perl"
8115                 rp="What path shall I use in \"eval 'exec'\"?"
8116                 . ./myread
8117                 perlpath="$ans"
8118                 ;;
8119         esac
8120         ;;
8121 esac
8122 case "$startperl" in
8123 *!*)    ;;
8124 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8125 esac
8126
8127 : determine where public executable scripts go
8128 set scriptdir scriptdir
8129 eval $prefixit
8130 case "$scriptdir" in
8131 '')
8132         dflt="$bin"
8133         : guess some guesses
8134         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8135         $test -d /usr/share/bin     && dflt=/usr/share/bin
8136         $test -d /usr/local/script  && dflt=/usr/local/script
8137         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8138         $test -d $prefixexp/script  && dflt=$prefixexp/script
8139         set dflt
8140         eval $prefixup
8141         ;;
8142 *)  dflt="$scriptdir"
8143         ;;
8144 esac
8145 $cat <<EOM
8146  
8147 Some installations have a separate directory just for executable scripts so
8148 that they can mount it across multiple architectures but keep the scripts in
8149 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8150 Or you might just lump your scripts in with all your other executables.
8151  
8152 EOM
8153 fn=d~
8154 rp='Where do you keep publicly executable scripts?'
8155 . ./getfile
8156 if $test "X$ansexp" != "X$scriptdirexp"; then
8157         installscript=''
8158 fi
8159 scriptdir="$ans"
8160 scriptdirexp="$ansexp"
8161 : Change installation prefix, if necessary.
8162 if $test X"$prefix" != X"$installprefix"; then
8163         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8164 else
8165         installscript="$scriptdirexp"
8166 fi
8167
8168 : determine where add-on public executables go
8169 case "$sitebin" in
8170 '')     dflt=$siteprefix/bin ;;
8171 *)      dflt=$sitebin ;;
8172 esac
8173 fn=d~
8174 rp='Pathname where the add-on public executables should be installed?'
8175 . ./getfile
8176 sitebin="$ans"
8177 sitebinexp="$ansexp"
8178 : Change installation prefix, if necessary.
8179 if $test X"$prefix" != X"$installprefix"; then
8180         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8181 else
8182         installsitebin="$sitebinexp"
8183 fi
8184
8185 : define an is-a-typedef? function
8186 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8187 case "$inclist" in
8188 "") inclist="sys/types.h";;
8189 esac;
8190 eval "varval=\$$var";
8191 case "$varval" in
8192 "")
8193         $rm -f temp.c;
8194         for inc in $inclist; do
8195                 echo "#include <$inc>" >>temp.c;
8196         done;
8197         echo "#ifdef $type" >> temp.c;
8198         echo "printf(\"We have $type\");" >> temp.c;
8199         echo "#endif" >> temp.c;
8200         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8201         if $contains $type temp.E >/dev/null 2>&1; then
8202                 eval "$var=\$type";
8203         else
8204                 eval "$var=\$def";
8205         fi;
8206         $rm -f temp.?;;
8207 *) eval "$var=\$varval";;
8208 esac'
8209
8210 : define an is-a-typedef? function that prompts if the type is not available.
8211 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8212 case "$inclist" in
8213 "") inclist="sys/types.h";;
8214 esac;
8215 eval "varval=\$$var";
8216 case "$varval" in
8217 "")
8218         $rm -f temp.c;
8219         for inc in $inclist; do
8220                 echo "#include <$inc>" >>temp.c;
8221         done;
8222         echo "#ifdef $type" >> temp.c;
8223         echo "printf(\"We have $type\");" >> temp.c;
8224         echo "#endif" >> temp.c;
8225         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8226         echo " " ;
8227         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8228         if $contains $type temp.E >/dev/null 2>&1; then
8229                 echo "$type found." >&4;
8230                 eval "$var=\$type";
8231         else
8232                 echo "$type NOT found." >&4;
8233                 dflt="$def";
8234                 . ./myread ;
8235                 eval "$var=\$ans";
8236         fi;
8237         $rm -f temp.?;;
8238 *) eval "$var=\$varval";;
8239 esac'
8240
8241 : see what type lseek is declared as in the kernel
8242 rp="What is the type used for lseek's offset on this system?"
8243 set off_t lseektype long stdio.h sys/types.h
8244 eval $typedef_ask
8245
8246 echo " "
8247 echo "Checking to see how big your file offsets are..." >&4
8248 $cat >try.c <<EOCP
8249 #include <sys/types.h>
8250 #include <stdio.h>
8251 int main()
8252 {
8253     printf("%d\n", (int)sizeof($lseektype));
8254     return(0); 
8255 }
8256 EOCP
8257 set try
8258 if eval $compile_ok; then
8259         lseeksize=`$run ./try`
8260         echo "Your file offsets are $lseeksize bytes long."
8261 else
8262         dflt=$longsize
8263         echo " "
8264         echo "(I can't seem to compile the test program.  Guessing...)"
8265         rp="What is the size of your file offsets (in bytes)?"
8266         . ./myread
8267         lseeksize="$ans"
8268 fi
8269 $rm -f try.c try
8270
8271 : see what type file positions are declared as in the library
8272 rp="What is the type for file position used by fsetpos()?"
8273 set fpos_t fpostype long stdio.h sys/types.h
8274 eval $typedef_ask
8275
8276 echo " "
8277 case "$fpostype" in
8278 *_t) zzz="$fpostype"    ;;
8279 *)   zzz="fpos_t"       ;;
8280 esac
8281 echo "Checking the size of $zzz..." >&4 
8282 cat > try.c <<EOCP
8283 #include <sys/types.h>
8284 #include <stdio.h>
8285 int main() {
8286     printf("%d\n", (int)sizeof($fpostype));
8287     exit(0);
8288 }
8289 EOCP
8290 set try
8291 if eval $compile_ok; then
8292         yyy=`$run ./try`
8293         case "$yyy" in
8294         '')     fpossize=4
8295                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8296                 ;;
8297         *)      fpossize=$yyy
8298                 echo "Your $zzz is $fpossize bytes long."
8299                 ;;
8300         esac
8301 else
8302         dflt="$longsize"
8303         echo " " >&4
8304         echo "(I can't compile the test program.  Guessing...)" >&4
8305         rp="What is the size of your file positions (in bytes)?"
8306         . ./myread
8307         fpossize="$ans"
8308 fi
8309
8310
8311
8312 # Backward compatibility (uselfs is deprecated).
8313 case "$uselfs" in
8314 "$define"|true|[yY]*)
8315         cat <<EOM >&4
8316
8317 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8318 EOM
8319         uselargefiles="$define"
8320         ;;
8321 esac                          
8322
8323 case "$lseeksize:$fpossize" in
8324 8:8) cat <<EOM
8325
8326 You can have files larger than 2 gigabytes.
8327 EOM
8328    val="$define" ;;
8329 *)    case "$uselargefiles" in
8330    "$undef"|false|[nN]*) dflt='n' ;;
8331    *)   dflt='y' ;;
8332    esac
8333    cat <<EOM
8334
8335 Perl can be built to understand large files (files larger than 2 gigabytes)
8336 on some systems.  To do so, Configure can be run with -Duselargefiles.
8337
8338 If this doesn't make any sense to you, just accept the default '$dflt'.
8339 EOM
8340    rp='Try to understand large files, if available?'
8341    . ./myread
8342    case "$ans" in
8343    y|Y)         val="$define" ;;
8344    *)           val="$undef"  ;;
8345    esac
8346    ;;
8347 esac
8348 set uselargefiles
8349 eval $setvar
8350 case "$uselargefiles" in
8351 "$define")
8352 : Look for a hint-file generated 'call-back-unit'.  If the
8353 : user has specified that a large files perl is to be built,
8354 : we may need to set or change some other defaults.
8355         if $test -f uselargefiles.cbu; then
8356                 echo "Your platform has some specific hints for large file builds, using them..."
8357                 . ./uselargefiles.cbu
8358                 echo " "
8359                 echo "Rechecking to see how big your file offsets are..." >&4
8360                 $cat >try.c <<EOCP
8361 #include <sys/types.h>
8362 #include <stdio.h>
8363 int main()
8364 {
8365     printf("%d\n", (int)sizeof($lseektype));
8366     return(0); 
8367 }
8368 EOCP
8369                 set try
8370                 if eval $compile_ok; then
8371                         lseeksize=`$run ./try`
8372                         $echo "Your file offsets are now $lseeksize bytes long."
8373                 else
8374                         dflt="$lseeksize"
8375                         echo " "
8376                         echo "(I can't seem to compile the test program.  Guessing...)"
8377                         rp="What is the size of your file offsets (in bytes)?"
8378                         . ./myread
8379                         lseeksize="$ans"
8380                 fi
8381                 case "$fpostype" in
8382                 *_t) zzz="$fpostype"    ;;
8383                 *)   zzz="fpos_t"       ;;
8384                 esac
8385                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8386                 $cat > try.c <<EOCP
8387 #include <sys/types.h>
8388 #include <stdio.h>
8389 int main() {
8390     printf("%d\n", (int)sizeof($fpostype));
8391     exit(0);
8392 }
8393 EOCP
8394                 set try
8395                 if eval $compile_ok; then
8396                         yyy=`$run ./try`
8397                         dflt="$lseeksize"
8398                         case "$yyy" in
8399                         '')     echo " "
8400                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8401                                 ;;
8402                         *)      fpossize=$yyy
8403                                 echo " $fpossize bytes." >&4
8404                                 ;;
8405                         esac
8406                 else
8407                         dflt="$fpossize"
8408                         echo " "
8409                         echo "(I can't compile the test program.  Guessing...)" >&4
8410                         rp="What is the size of your file positions (in bytes)?"
8411                         . ./myread
8412                         fpossize="$ans"
8413                 fi
8414                 $rm -f try.c try
8415         fi
8416         ;;
8417 esac
8418
8419 case "$vendorprefix" in
8420 '')     d_vendorbin="$undef"
8421         vendorbin=''
8422         vendorbinexp=''
8423         ;;
8424 *)      d_vendorbin="$define"
8425         : determine where vendor-supplied executables go.
8426         case "$vendorbin" in
8427         '') dflt=$vendorprefix/bin ;;
8428         *)      dflt="$vendorbin" ;;
8429         esac
8430         fn=d~+
8431         rp='Pathname for the vendor-supplied executables directory?'
8432         . ./getfile
8433         vendorbin="$ans"
8434         vendorbinexp="$ansexp"
8435         ;;
8436 esac
8437 : Change installation prefix, if necessary.
8438 if $test X"$prefix" != X"$installprefix"; then
8439         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8440 else
8441         installvendorbin="$vendorbinexp"
8442 fi
8443
8444 : see if qgcvt exists
8445 set qgcvt d_qgcvt
8446 eval $inlibc
8447
8448 echo " "
8449
8450 if $test X"$d_longdbl" = X"$define"; then
8451
8452 echo "Checking how to print long doubles..." >&4
8453
8454 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8455         $cat >try.c <<'EOCP'
8456 #include <sys/types.h>
8457 #include <stdio.h>
8458 int main() {
8459   double d = 123.456;
8460   printf("%.3f\n", d);
8461 }
8462 EOCP
8463         set try
8464         if eval $compile; then
8465                 yyy=`$run ./try`
8466                 case "$yyy" in
8467                 123.456)
8468                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8469                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8470                         echo "We will use %f."
8471                         ;;
8472                 esac
8473         fi
8474 fi
8475
8476 if $test X"$sPRIfldbl" = X; then
8477         $cat >try.c <<'EOCP'
8478 #include <sys/types.h>
8479 #include <stdio.h>
8480 int main() {
8481   long double d = 123.456;
8482   printf("%.3Lf\n", d);
8483 }
8484 EOCP
8485         set try
8486         if eval $compile; then
8487                 yyy=`$run ./try`
8488                 case "$yyy" in
8489                 123.456)
8490                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8491                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8492                         echo "We will use %Lf."
8493                         ;;
8494                 esac
8495         fi
8496 fi
8497
8498 if $test X"$sPRIfldbl" = X; then
8499         $cat >try.c <<'EOCP'
8500 #include <sys/types.h>
8501 #include <stdio.h>
8502 int main() {
8503   long double d = 123.456;
8504   printf("%.3llf\n", d);
8505 }
8506 EOCP
8507         set try
8508         if eval $compile; then
8509                 yyy=`$run ./try`
8510                 case "$yyy" in
8511                 123.456)
8512                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8513                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8514                         echo "We will use %llf."
8515                         ;;
8516                 esac
8517         fi
8518 fi
8519
8520 if $test X"$sPRIfldbl" = X; then
8521         $cat >try.c <<'EOCP'
8522 #include <sys/types.h>
8523 #include <stdio.h>
8524 int main() {
8525   long double d = 123.456;
8526   printf("%.3lf\n", d);
8527 }
8528 EOCP
8529         set try
8530         if eval $compile; then
8531                 yyy=`$run ./try`
8532                 case "$yyy" in
8533                 123.456)
8534                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8535                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8536                         echo "We will use %lf."
8537                         ;;
8538                 esac
8539         fi
8540 fi
8541
8542 if $test X"$sPRIfldbl" = X; then
8543         echo "Cannot figure out how to print long doubles." >&4
8544 else
8545         sSCNfldbl=$sPRIfldbl    # expect consistency
8546 fi
8547
8548 $rm -f try try.*
8549
8550 fi # d_longdbl
8551
8552 case "$sPRIfldbl" in
8553 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8554         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8555         d_SCNfldbl="$undef";
8556         ;;
8557 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8558         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8559         d_SCNfldbl="$define";
8560         ;;
8561 esac
8562
8563 : Check how to convert floats to strings.
8564 echo " "
8565 echo "Checking for an efficient way to convert floats to strings."
8566 echo " " > try.c
8567 case "$uselongdouble" in
8568 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8569 esac
8570 case "$d_longdbl" in
8571 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8572 esac
8573 case "$d_PRIgldbl" in
8574 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8575 esac
8576 $cat >>try.c <<EOP
8577 #ifdef TRY_gconvert
8578 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8579 char *myname = "gconvert";
8580 #endif
8581 #ifdef TRY_gcvt
8582 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8583 char *myname = "gcvt";
8584 #endif
8585 #ifdef TRY_qgcvt
8586 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8587 char *myname = "qgcvt";
8588 #define DOUBLETYPE long double
8589 #endif
8590 #ifdef TRY_sprintf
8591 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8592 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8593 #else
8594 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8595 #endif
8596 char *myname = "sprintf";
8597 #endif
8598
8599 #ifndef DOUBLETYPE
8600 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8601 #define DOUBLETYPE long double
8602 #else
8603 #define DOUBLETYPE double
8604 #endif
8605 #endif
8606
8607 #include <stdio.h>
8608
8609 #define I_STDLIB $i_stdlib
8610 #ifdef I_STDLIB
8611 #include <stdlib.h>
8612 #endif
8613
8614 int
8615 checkit(expect, got)
8616 char *expect;
8617 char *got;
8618 {
8619     if (strcmp(expect, got)) {
8620                 printf("%s oddity:  Expected %s, got %s\n",
8621                         myname, expect, got);
8622                 exit(1);
8623         }
8624 }
8625
8626 int main()
8627
8628         char buf[64]; 
8629         buf[63] = '\0';
8630
8631         /* This must be 1st test on (which?) platform */
8632         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8633         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8634         checkit("0.1", buf);
8635
8636         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8637         checkit("1", buf);
8638
8639         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8640         checkit("1.1", buf);
8641
8642         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8643         checkit("1.01", buf);
8644
8645         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8646         checkit("1.001", buf);
8647
8648         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8649         checkit("1.0001", buf);
8650
8651         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8652         checkit("1.00001", buf);
8653
8654         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8655         checkit("1.000001", buf);
8656
8657         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8658         checkit("0", buf);
8659
8660         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8661         checkit("-1", buf);
8662
8663         /* Some Linux gcvt's give 1.e+5 here. */
8664         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8665         checkit("100000", buf);
8666         
8667         /* Some Linux gcvt's give -1.e+5 here. */
8668         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8669         checkit("-100000", buf);
8670
8671         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8672         checkit("123.456", buf);
8673
8674         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8675         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8676         if (strlen(buf) > 5)
8677             checkit("1e+030", buf); /* for Microsoft */
8678         else
8679             checkit("1e+30", buf);
8680
8681         exit(0);
8682 }
8683 EOP
8684 case "$d_Gconvert" in
8685 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8686 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8687 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8688 *) xxx_list='gconvert gcvt sprintf' ;;
8689 esac
8690
8691 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8692 "$define$define$define")
8693     # for long doubles prefer first qgcvt, then sprintf
8694     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8695     xxx_list="sprintf $xxx_list"
8696     case "$d_qgcvt" in
8697     "$define") xxx_list="qgcvt $xxx_list" ;;
8698     esac
8699     ;;
8700 esac
8701
8702 for xxx_convert in $xxx_list; do
8703         echo "Trying $xxx_convert..."
8704         $rm -f try try$_o
8705         set try -DTRY_$xxx_convert
8706         if eval $compile; then
8707                 echo "$xxx_convert() found." >&4
8708                 if $run ./try; then
8709                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8710                         break;
8711                 else
8712                         echo "...But $xxx_convert didn't work as I expected."
8713                 fi
8714         else
8715                 echo "$xxx_convert NOT found." >&4
8716         fi
8717 done
8718         
8719 case "$xxx_convert" in
8720 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8721 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8722 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8723 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8724    "$define$define$define")
8725       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8726    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8727    esac
8728    ;;  
8729 esac
8730
8731 : see if _fwalk exists
8732 set fwalk d__fwalk
8733 eval $inlibc
8734
8735 : Initialize h_fcntl
8736 h_fcntl=false
8737
8738 : Initialize h_sysfile
8739 h_sysfile=false
8740
8741 : access call always available on UNIX
8742 set access d_access
8743 eval $inlibc
8744
8745 : locate the flags for 'access()'
8746 case "$d_access" in
8747 "$define")
8748         echo " "
8749         $cat >access.c <<'EOCP'
8750 #include <sys/types.h>
8751 #ifdef I_FCNTL
8752 #include <fcntl.h>
8753 #endif
8754 #ifdef I_SYS_FILE
8755 #include <sys/file.h>
8756 #endif
8757 #ifdef I_UNISTD
8758 #include <unistd.h>
8759 #endif
8760 int main() {
8761         exit(R_OK);
8762 }
8763 EOCP
8764         : check sys/file.h first, no particular reason here
8765         if $test `./findhdr sys/file.h` && \
8766                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8767                 h_sysfile=true;
8768                 echo "<sys/file.h> defines the *_OK access constants." >&4
8769         elif $test `./findhdr fcntl.h` && \
8770                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8771                 h_fcntl=true;
8772                 echo "<fcntl.h> defines the *_OK access constants." >&4
8773         elif $test `./findhdr unistd.h` && \
8774                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8775                 echo "<unistd.h> defines the *_OK access constants." >&4
8776         else
8777                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8778         fi
8779         ;;
8780 esac
8781 $rm -f access*
8782
8783 : see if accessx exists
8784 set accessx d_accessx
8785 eval $inlibc
8786
8787 : see if alarm exists
8788 set alarm d_alarm
8789 eval $inlibc
8790
8791 : see if atolf exists
8792 set atolf d_atolf
8793 eval $inlibc
8794
8795 : see if atoll exists
8796 set atoll d_atoll
8797 eval $inlibc
8798
8799 : Look for GNU-cc style attribute checking
8800 echo " "
8801 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8802 $cat >attrib.c <<'EOCP'
8803 #include <stdio.h>
8804 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8805 EOCP
8806 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8807         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8808                 echo "Your C compiler doesn't fully support __attribute__."
8809                 val="$undef"
8810         else
8811                 echo "Your C compiler supports __attribute__."
8812                 val="$define"
8813         fi
8814 else
8815         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8816         val="$undef"
8817 fi
8818 set d_attribut
8819 eval $setvar
8820 $rm -f attrib*
8821
8822 : see if bcmp exists
8823 set bcmp d_bcmp
8824 eval $inlibc
8825
8826 : see if bcopy exists
8827 set bcopy d_bcopy
8828 eval $inlibc
8829
8830 : see if this is a unistd.h system
8831 set unistd.h i_unistd
8832 eval $inhdr
8833
8834 : see if getpgrp exists
8835 set getpgrp d_getpgrp
8836 eval $inlibc
8837
8838 case "$d_getpgrp" in
8839 "$define")
8840         echo " "
8841         echo "Checking to see which flavor of getpgrp is in use..."
8842         $cat >try.c <<EOP
8843 #$i_unistd I_UNISTD
8844 #include <sys/types.h>
8845 #ifdef I_UNISTD
8846 #  include <unistd.h>
8847 #endif
8848 int main()
8849 {
8850         if (getuid() == 0) {
8851                 printf("(I see you are running Configure as super-user...)\n");
8852                 setuid(1);
8853         }
8854 #ifdef TRY_BSD_PGRP
8855         if (getpgrp(1) == 0)
8856                 exit(0);
8857 #else
8858         if (getpgrp() > 0)
8859                 exit(0);
8860 #endif
8861         exit(1);
8862 }
8863 EOP
8864         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8865                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8866                 val="$define"
8867         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8868                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8869                 val="$undef"
8870         else
8871                 echo "I can't seem to compile and run the test program."
8872                 if ./usg; then
8873                         xxx="a USG one, i.e. you use getpgrp()."
8874                 else
8875                         # SVR4 systems can appear rather BSD-ish.
8876                         case "$i_unistd" in
8877                         $undef)
8878                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8879                                 val="$define"
8880                                 ;;
8881                         $define)
8882                                 xxx="probably a USG one, i.e. you use getpgrp()."
8883                                 val="$undef"
8884                                 ;;
8885                         esac
8886                 fi
8887                 echo "Assuming your getpgrp is $xxx" >&4
8888         fi
8889         ;;
8890 *) val="$undef";;
8891 esac
8892 set d_bsdgetpgrp
8893 eval $setvar
8894 $rm -f try try.*
8895
8896 : see if setpgrp exists
8897 set setpgrp d_setpgrp
8898 eval $inlibc
8899
8900 case "$d_setpgrp" in
8901 "$define")
8902         echo " "
8903         echo "Checking to see which flavor of setpgrp is in use..."
8904         $cat >try.c <<EOP
8905 #$i_unistd I_UNISTD
8906 #include <sys/types.h>
8907 #ifdef I_UNISTD
8908 #  include <unistd.h>
8909 #endif
8910 int main()
8911 {
8912         if (getuid() == 0) {
8913                 printf("(I see you are running Configure as super-user...)\n");
8914                 setuid(1);
8915         }
8916 #ifdef TRY_BSD_PGRP
8917         if (-1 == setpgrp(1, 1))
8918                 exit(0);
8919 #else
8920         if (setpgrp() != -1)
8921                 exit(0);
8922 #endif
8923         exit(1);
8924 }
8925 EOP
8926         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8927                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8928                 val="$define"
8929         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8930                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8931                 val="$undef"
8932         else
8933                 echo "(I can't seem to compile and run the test program.)"
8934                 if ./usg; then
8935                         xxx="a USG one, i.e. you use setpgrp()."
8936                 else
8937                         # SVR4 systems can appear rather BSD-ish.
8938                         case "$i_unistd" in
8939                         $undef)
8940                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8941                                 val="$define"
8942                                 ;;
8943                         $define)
8944                                 xxx="probably a USG one, i.e. you use setpgrp()."
8945                                 val="$undef"
8946                                 ;;
8947                         esac
8948                 fi
8949                 echo "Assuming your setpgrp is $xxx" >&4
8950         fi
8951         ;;
8952 *) val="$undef";;
8953 esac
8954 set d_bsdsetpgrp
8955 eval $setvar
8956 $rm -f try try.*
8957 : see if bzero exists
8958 set bzero d_bzero
8959 eval $inlibc
8960
8961 : see if signal is declared as pointer to function returning int or void
8962 echo " "
8963 xxx=`./findhdr signal.h`
8964 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8965 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8966         echo "You have int (*signal())() instead of void." >&4
8967         val="$undef"
8968 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8969         echo "You have void (*signal())()." >&4
8970         val="$define"
8971 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8972         echo "You have int (*signal())() instead of void." >&4
8973         val="$undef"
8974 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8975         echo "You have void (*signal())()." >&4
8976         val="$define"
8977 else
8978         case "$d_voidsig" in
8979         '')
8980         echo "I can't determine whether signal handler returns void or int..." >&4
8981                 dflt=void
8982                 rp="What type does your signal handler return?"
8983                 . ./myread
8984                 case "$ans" in
8985                 v*) val="$define";;
8986                 *) val="$undef";;
8987                 esac;;
8988         "$define")
8989                 echo "As you already told me, signal handler returns void." >&4
8990                 val="$define"
8991                 ;;
8992         *)      echo "As you already told me, signal handler returns int." >&4
8993                 val="$undef"
8994                 ;;
8995         esac
8996 fi
8997 set d_voidsig
8998 eval $setvar
8999 case "$d_voidsig" in
9000 "$define") signal_t="void";;
9001 *) signal_t="int";;
9002 esac
9003 $rm -f $$.tmp
9004
9005 : check for ability to cast large floats to 32-bit ints.
9006 echo " "
9007 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9008 if $test "$intsize" -ge 4; then
9009         xxx=int
9010 else
9011         xxx=long
9012 fi
9013 $cat >try.c <<EOCP
9014 #include <stdio.h>
9015 #include <sys/types.h>
9016 #include <signal.h>
9017 $signal_t blech(s) int s; { exit(3); }
9018 int main()
9019 {
9020         $xxx i32;
9021         double f, g;
9022         int result = 0;
9023         char str[16];
9024         signal(SIGFPE, blech);
9025
9026         /* Don't let compiler optimize the test away.  Store the number 
9027            in a writable string for gcc to pass to sscanf under HP/UX.
9028         */
9029         sprintf(str, "2147483647");
9030         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9031         g = 10 * f;
9032         i32  = ($xxx) g;
9033
9034         /* x86 processors will probably give 0x8000 0000, which is a
9035        sign change.  We don't want that.  We want to mimic SPARC
9036            behavior here, which is to preserve the sign and give
9037            back 0x7fff ffff.
9038         */
9039         if (i32 != ($xxx) f)
9040                 result |= 1;
9041         exit(result);
9042 }
9043 EOCP
9044 set try
9045 if eval $compile_ok; then
9046         $run ./try
9047         yyy=$?
9048 else
9049         echo "(I can't seem to compile the test program--assuming it can't)"
9050         yyy=1
9051 fi
9052 case "$yyy" in
9053 0)      val="$define"
9054         echo "Yup, it can."
9055         ;;
9056 *)      val="$undef"
9057         echo "Nope, it can't."
9058         ;;
9059 esac
9060 set d_casti32
9061 eval $setvar
9062 $rm -f try try.*
9063
9064 : check for ability to cast negative floats to unsigned
9065 echo " "
9066 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9067 $cat >try.c <<EOCP
9068 #include <stdio.h>
9069 #include <sys/types.h>
9070 #include <signal.h>
9071 $signal_t blech(s) int s; { exit(7); }
9072 $signal_t blech_in_list(s) int s; { exit(4); }
9073 unsigned long dummy_long(p) unsigned long p; { return p; }
9074 unsigned int dummy_int(p) unsigned int p; { return p; }
9075 unsigned short dummy_short(p) unsigned short p; { return p; }
9076 int main()
9077 {
9078         double f;
9079         unsigned long along;
9080         unsigned int aint;
9081         unsigned short ashort;
9082         int result = 0;
9083         char str[16];
9084         
9085         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9086            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9087            optimized the whole file away
9088         */
9089         /* Store the number in a writable string for gcc to pass to 
9090            sscanf under HP/UX.
9091         */
9092         sprintf(str, "-123");
9093         sscanf(str, "%lf", &f);  /* f = -123.; */
9094
9095         signal(SIGFPE, blech);
9096         along = (unsigned long)f;
9097         aint = (unsigned int)f;
9098         ashort = (unsigned short)f;
9099         if (along != (unsigned long)-123)
9100                 result |= 1;
9101         if (aint != (unsigned int)-123)
9102                 result |= 1;
9103         if (ashort != (unsigned short)-123)
9104                 result |= 1;
9105         sprintf(str, "1073741824.");
9106         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9107         f = f + f;
9108         along = 0;
9109         along = (unsigned long)f;
9110         if (along != 0x80000000)
9111                 result |= 2;
9112         f -= 1.;
9113         along = 0;
9114         along = (unsigned long)f;
9115         if (along != 0x7fffffff)
9116                 result |= 1;
9117         f += 2.;
9118         along = 0;
9119         along = (unsigned long)f;
9120         if (along != 0x80000001)
9121                 result |= 2;
9122         if (result)
9123                 exit(result);
9124         signal(SIGFPE, blech_in_list);
9125         sprintf(str, "123.");
9126         sscanf(str, "%lf", &f);  /* f = 123.; */
9127         along = dummy_long((unsigned long)f);
9128         aint = dummy_int((unsigned int)f);
9129         ashort = dummy_short((unsigned short)f);
9130         if (along != (unsigned long)123)
9131                 result |= 4;
9132         if (aint != (unsigned int)123)
9133                 result |= 4;
9134         if (ashort != (unsigned short)123)
9135                 result |= 4;
9136         exit(result);
9137
9138 }
9139 EOCP
9140 set try
9141 if eval $compile_ok; then
9142         $run ./try
9143         castflags=$?
9144 else
9145         echo "(I can't seem to compile the test program--assuming it can't)"
9146         castflags=7
9147 fi
9148 case "$castflags" in
9149 0)      val="$define"
9150         echo "Yup, it can."
9151         ;;
9152 *)      val="$undef"
9153         echo "Nope, it can't."
9154         ;;
9155 esac
9156 set d_castneg
9157 eval $setvar
9158 $rm -f try.*
9159
9160 : see if vprintf exists
9161 echo " "
9162 if set vprintf val -f d_vprintf; eval $csym; $val; then
9163         echo 'vprintf() found.' >&4
9164         val="$define"
9165         $cat >try.c <<'EOF'
9166 #include <varargs.h>
9167
9168 int main() { xxx("foo"); }
9169
9170 xxx(va_alist)
9171 va_dcl
9172 {
9173         va_list args;
9174         char buf[10];
9175
9176         va_start(args);
9177         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9178 }
9179 EOF
9180         set try
9181         if eval $compile && $run ./try; then
9182                 echo "Your vsprintf() returns (int)." >&4
9183                 val2="$undef"
9184         else
9185                 echo "Your vsprintf() returns (char*)." >&4
9186                 val2="$define"
9187         fi
9188 else
9189         echo 'vprintf() NOT found.' >&4
9190                 val="$undef"
9191                 val2="$undef"
9192 fi
9193 $rm -f try try.*
9194 set d_vprintf
9195 eval $setvar
9196 val=$val2
9197 set d_charvspr
9198 eval $setvar
9199
9200 : see if chown exists
9201 set chown d_chown
9202 eval $inlibc
9203
9204 : see if chroot exists
9205 set chroot d_chroot
9206 eval $inlibc
9207
9208 : see if chsize exists
9209 set chsize d_chsize
9210 eval $inlibc
9211
9212 : see if class exists
9213 set class d_class
9214 eval $inlibc
9215
9216 hasstruct='varname=$1; struct=$2; shift; shift;
9217 while $test $# -ge 2; do
9218         case "$1" in
9219         $define) echo "#include <$2>";;
9220         esac ;
9221     shift 2;
9222 done > try.c;
9223 echo "int main () { struct $struct foo; }" >> try.c;
9224 set try;
9225 if eval $compile; then
9226         val="$define";
9227 else
9228         val="$undef";
9229 fi;
9230 set $varname;
9231 eval $setvar;
9232 $rm -f try.c try.o'
9233
9234 : see if sys/types.h has to be included
9235 set sys/types.h i_systypes
9236 eval $inhdr
9237
9238 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9239 while $test $# -ge 2; do
9240         case "$1" in
9241         $define) echo "#include <$2>";;
9242         esac ;
9243     shift 2;
9244 done > try.c;
9245 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9246 set try;
9247 if eval $compile; then
9248         val="$define";
9249 else
9250         val="$undef";
9251 fi;
9252 set $varname;
9253 eval $setvar;
9254 $rm -f try.c try.o'
9255
9256 socketlib=''
9257 sockethdr=''
9258 : see whether socket exists
9259 echo " "
9260 $echo $n "Hmm... $c" >&4
9261 if set socket val -f d_socket; eval $csym; $val; then
9262         echo "Looks like you have Berkeley networking support." >&4
9263         d_socket="$define"
9264         if set setsockopt val -f; eval $csym; $val; then
9265                 d_oldsock="$undef"
9266         else
9267                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9268                 d_oldsock="$define"
9269         fi
9270 else
9271         if $contains socklib libc.list >/dev/null 2>&1; then
9272                 echo "Looks like you have Berkeley networking support." >&4
9273                 d_socket="$define"
9274                 : we will have to assume that it supports the 4.2 BSD interface
9275                 d_oldsock="$undef"
9276         else
9277                 echo "You don't have Berkeley networking in libc$_a..." >&4
9278                 if test "X$d_socket" = "X$define"; then
9279                    echo "...but you seem to believe that you have sockets." >&4
9280                 else
9281                         for net in net socket
9282                         do
9283                                 if test -f /usr/lib/lib$net$_a; then
9284                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9285                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9286                                         if $contains socket libc.list >/dev/null 2>&1; then
9287                                                 d_socket="$define"
9288                                                 socketlib="-l$net"
9289                                                 case "$net" in
9290                                                 net)
9291                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9292                                                         sockethdr="-I/usr/netinclude"
9293                                                         ;;
9294                                                 esac
9295                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9296                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9297                                                         d_oldsock="$undef"
9298                                                 else
9299                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9300                                                         d_oldsock="$define"
9301                                                 fi
9302                                                 break
9303                                         fi
9304                                 fi
9305                         done
9306                         if test "X$d_socket" != "X$define"; then
9307                            echo "or anywhere else I see." >&4
9308                            d_socket="$undef"
9309                            d_oldsock="$undef"
9310                         fi
9311                 fi
9312         fi
9313 fi
9314
9315 : see if socketpair exists
9316 set socketpair d_sockpair
9317 eval $inlibc
9318
9319
9320 echo " "
9321 echo "Checking the availability of certain socket constants..." >&4
9322 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9323         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9324         $cat >try.c <<EOF
9325 #include <sys/types.h>
9326 #include <sys/socket.h>
9327 int main() {
9328     int i = $ENUM;
9329 }
9330 EOF
9331         val="$undef"
9332         set try; if eval $compile; then
9333                 val="$define"
9334         fi
9335         set d_${enum}; eval $setvar
9336         $rm -f try.c try
9337 done
9338
9339 : see if this is a sys/uio.h system
9340 set sys/uio.h i_sysuio
9341 eval $inhdr
9342
9343
9344 echo " "
9345 echo "Checking to see if your system supports struct cmsghdr..." >&4
9346 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9347 eval $hasstruct
9348 case "$d_cmsghdr_s" in
9349 "$define")      echo "Yes, it does."   ;;
9350 *)              echo "No, it doesn't." ;;
9351 esac
9352
9353
9354 : check for const keyword
9355 echo " "
9356 echo 'Checking to see if your C compiler knows about "const"...' >&4
9357 $cat >const.c <<'EOCP'
9358 typedef struct spug { int drokk; } spug;
9359 int main()
9360 {
9361         const char *foo;
9362         const spug y;
9363 }
9364 EOCP
9365 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9366         val="$define"
9367         echo "Yup, it does."
9368 else
9369         val="$undef"
9370         echo "Nope, it doesn't."
9371 fi
9372 set d_const
9373 eval $setvar
9374
9375 : see if crypt exists
9376 echo " "
9377 set crypt d_crypt
9378 eval $inlibc
9379 case "$d_crypt" in
9380 $define) cryptlib='' ;;
9381 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9382                 echo 'crypt() found.' >&4
9383                 val="$define"
9384                 cryptlib=''
9385         else
9386                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9387                 if $test -z "$cryptlib"; then
9388                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9389                 else
9390                         cryptlib=-lcrypt
9391                 fi
9392                 if $test -z "$cryptlib"; then
9393                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9394                 else
9395                         cryptlib=-lcrypt
9396                 fi
9397                 if $test -z "$cryptlib"; then
9398                         cryptlib=`./loc libcrypt$_a "" $libpth`
9399                 else
9400                         cryptlib=-lcrypt
9401                 fi
9402                 if $test -z "$cryptlib"; then
9403                         echo 'crypt() NOT found.' >&4
9404                         val="$undef"
9405                 else
9406                         val="$define"
9407                 fi
9408         fi
9409         set d_crypt
9410         eval $setvar
9411         ;;
9412 esac
9413
9414 : get csh whereabouts
9415 case "$csh" in
9416 'csh') val="$undef" ;;
9417 *) val="$define" ;;
9418 esac
9419 set d_csh
9420 eval $setvar
9421 : Respect a hint or command line value for full_csh.
9422 case "$full_csh" in
9423 '') full_csh=$csh ;;
9424 esac
9425
9426 : see if cuserid exists
9427 set cuserid d_cuserid
9428 eval $inlibc
9429
9430 : see if this is a limits.h system
9431 set limits.h i_limits
9432 eval $inhdr
9433
9434 : see if this is a float.h system
9435 set float.h i_float
9436 eval $inhdr
9437
9438 : See if number of significant digits in a double precision number is known
9439 echo " "
9440 $cat >dbl_dig.c <<EOM
9441 #$i_limits I_LIMITS
9442 #$i_float I_FLOAT
9443 #ifdef I_LIMITS
9444 #include <limits.h>
9445 #endif
9446 #ifdef I_FLOAT
9447 #include <float.h>
9448 #endif
9449 #ifdef DBL_DIG
9450 printf("Contains DBL_DIG");
9451 #endif
9452 EOM
9453 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9454 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9455         echo "DBL_DIG found." >&4
9456         val="$define"
9457 else
9458         echo "DBL_DIG NOT found." >&4
9459         val="$undef"
9460 fi
9461 $rm -f dbl_dig.?
9462 set d_dbl_dig
9463 eval $setvar
9464
9465 hasproto='varname=$1; func=$2; shift; shift;
9466 while $test $# -ge 2; do
9467         case "$1" in
9468         $define) echo "#include <$2>";;
9469         esac ;
9470     shift 2;
9471 done > try.c;
9472 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9473 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9474         echo "$func() prototype found.";
9475         val="$define";
9476 else
9477         echo "$func() prototype NOT found.";
9478         val="$undef";
9479 fi;
9480 set $varname;
9481 eval $setvar;
9482 $rm -f try.c tryout.c'
9483
9484 : see if dbm.h is available
9485 : see if dbmclose exists
9486 set dbmclose d_dbmclose
9487 eval $inlibc
9488
9489 case "$d_dbmclose" in
9490 $define)
9491         set dbm.h i_dbm
9492         eval $inhdr
9493         case "$i_dbm" in
9494         $define)
9495                 val="$undef"
9496                 set i_rpcsvcdbm
9497                 eval $setvar
9498                 ;;
9499         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9500                 eval $inhdr
9501                 ;;
9502         esac
9503         ;;
9504 *)      echo "We won't be including <dbm.h>"
9505         val="$undef"
9506         set i_dbm
9507         eval $setvar
9508         val="$undef"
9509         set i_rpcsvcdbm
9510         eval $setvar
9511         ;;
9512 esac
9513
9514 : see if prototype for dbminit is available
9515 echo " "
9516 set d_dbminitproto dbminit $i_dbm dbm.h
9517 eval $hasproto
9518
9519 : see if difftime exists
9520 set difftime d_difftime
9521 eval $inlibc
9522
9523 : see if this is a dirent system
9524 echo " "
9525 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9526         val="$define"
9527         echo "<dirent.h> found." >&4
9528 else
9529         val="$undef"
9530         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9531                 echo "<sys/dir.h> found." >&4
9532                 echo " "
9533         else
9534                 xinc=`./findhdr sys/ndir.h`
9535         fi
9536         echo "<dirent.h> NOT found." >&4
9537 fi
9538 set i_dirent
9539 eval $setvar
9540
9541 : Look for type of directory structure.
9542 echo " "
9543 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9544
9545 case "$direntrytype" in
9546 ''|' ')
9547         case "$i_dirent" in
9548         $define) guess1='struct dirent' ;;
9549         *) guess1='struct direct'  ;;
9550         esac
9551         ;;
9552 *)      guess1="$direntrytype"
9553         ;;
9554 esac
9555
9556 case "$guess1" in
9557 'struct dirent') guess2='struct direct' ;;
9558 *) guess2='struct dirent' ;;
9559 esac
9560                 
9561 if $contains "$guess1" try.c >/dev/null 2>&1; then
9562         direntrytype="$guess1"
9563         echo "Your directory entries are $direntrytype." >&4
9564 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9565         direntrytype="$guess2"
9566         echo "Your directory entries seem to be $direntrytype." >&4
9567 else
9568         echo "I don't recognize your system's directory entries." >&4
9569         rp="What type is used for directory entries on this system?"
9570         dflt="$guess1"
9571         . ./myread
9572         direntrytype="$ans"
9573 fi
9574 $rm -f try.c
9575
9576
9577 : see if the directory entry stores field length
9578 echo " "
9579 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9580 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9581         echo "Good, your directory entry keeps length information in d_namlen." >&4
9582         val="$define"
9583 else
9584         echo "Your directory entry does not know about the d_namlen field." >&4
9585         val="$undef"
9586 fi
9587 set d_dirnamlen
9588 eval $setvar
9589 $rm -f try.c
9590
9591 : see if this is an sysdir system
9592 set sys/dir.h i_sysdir
9593 eval $inhdr
9594
9595 : see if this is an sysndir system
9596 set sys/ndir.h i_sysndir
9597 eval $inhdr
9598
9599 : Look for dirfd
9600 echo " "
9601 $cat >dirfd.c <<EOM
9602 #include <stdio.h>
9603 #$i_dirent I_DIRENT             /**/
9604 #$i_sysdir I_SYS_DIR            /**/
9605 #$i_sysndir I_SYS_NDIR          /**/
9606 #$i_systypes I_SYS_TYPES        /**/
9607 #if defined(I_SYS_TYPES)
9608 #include <sys/types.h>
9609 #endif
9610 #if defined(I_DIRENT)
9611 #include <dirent.h>
9612 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9613 #include <sys/dir.h>
9614 #endif
9615 #else
9616 #ifdef I_SYS_NDIR
9617 #include <sys/ndir.h>
9618 #else
9619 #ifdef I_SYS_DIR
9620 #ifdef hp9000s500
9621 #include <ndir.h>       /* may be wrong in the future */
9622 #else
9623 #include <sys/dir.h>
9624 #endif
9625 #endif
9626 #endif
9627 #endif 
9628 int main() {
9629         DIR *dirp = opendir(".");
9630         if (dirfd(dirp) >= 0)
9631                 exit(0);
9632         else
9633                 exit(1);
9634 }
9635 EOM
9636 set dirfd
9637 if eval $compile; then
9638         val="$define"
9639 fi
9640 case "$val" in
9641 $define)        echo "dirfd() found." >&4       ;;
9642 *)              echo "dirfd() NOT found." >&4   ;;
9643 esac
9644 set d_dirfd
9645 eval $setvar
9646 $rm -f dirfd*
9647
9648 : see if dlerror exists
9649 xxx_runnm="$runnm"
9650 runnm=false
9651 set dlerror d_dlerror
9652 eval $inlibc
9653 runnm="$xxx_runnm"
9654
9655 : see if dlfcn is available
9656 set dlfcn.h i_dlfcn
9657 eval $inhdr
9658
9659 case "$usedl" in
9660 $define|y|true)
9661         $cat << EOM
9662
9663 On a few systems, the dynamically loaded modules that perl generates and uses
9664 will need a different extension than shared libs. The default will probably
9665 be appropriate.
9666
9667 EOM
9668         case "$dlext" in
9669         '')     dflt="$so" ;;
9670         *)      dflt="$dlext" ;;
9671         esac
9672         rp='What is the extension of dynamically loaded modules'
9673         . ./myread
9674         dlext="$ans"
9675         ;;
9676 *)
9677         dlext="none"
9678         ;;
9679 esac
9680
9681 : Check if dlsym need a leading underscore
9682 echo " "
9683 val="$undef"
9684
9685 case "$dlsrc" in
9686 dl_dlopen.xs)
9687         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9688         $cat >dyna.c <<'EOM'
9689 fred () { }
9690 EOM
9691
9692 $cat >fred.c<<EOM
9693
9694 #include <stdio.h>
9695 #$i_dlfcn I_DLFCN
9696 #ifdef I_DLFCN
9697 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9698 #else
9699 #include <sys/types.h>
9700 #include <nlist.h>
9701 #include <link.h>
9702 #endif
9703
9704 extern int fred() ;
9705
9706 int main()
9707 {
9708     void * handle ;
9709     void * symbol ;
9710 #ifndef RTLD_LAZY
9711     int mode = 1 ;
9712 #else
9713     int mode = RTLD_LAZY ;
9714 #endif
9715     handle = dlopen("./dyna.$dlext", mode) ;
9716     if (handle == NULL) {
9717         printf ("1\n") ;
9718         fflush (stdout) ;
9719         exit(0);
9720     }
9721     symbol = dlsym(handle, "fred") ;
9722     if (symbol == NULL) {
9723         /* try putting a leading underscore */
9724         symbol = dlsym(handle, "_fred") ;
9725         if (symbol == NULL) {
9726             printf ("2\n") ;
9727             fflush (stdout) ;
9728             exit(0);
9729         }
9730         printf ("3\n") ;
9731     }
9732     else
9733         printf ("4\n") ;
9734     fflush (stdout) ;
9735     exit(0);
9736 }
9737 EOM
9738         : Call the object file tmp-dyna.o in case dlext=o.
9739         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9740                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9741                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9742                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9743                 xxx=`$run ./fred`
9744                 case $xxx in
9745                 1)      echo "Test program failed using dlopen." >&4
9746                         echo "Perhaps you should not use dynamic loading." >&4;;
9747                 2)      echo "Test program failed using dlsym." >&4
9748                         echo "Perhaps you should not use dynamic loading." >&4;;
9749                 3)      echo "dlsym needs a leading underscore" >&4
9750                         val="$define" ;;
9751                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9752                 esac
9753         else
9754                 echo "I can't compile and run the test program." >&4
9755                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9756         fi
9757         ;;
9758 esac
9759                 
9760 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9761
9762 set d_dlsymun
9763 eval $setvar
9764
9765 : see if prototype for drand48 is available
9766 echo " "
9767 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9768 eval $hasproto
9769
9770 : see if dup2 exists
9771 set dup2 d_dup2
9772 eval $inlibc
9773
9774 : see if eaccess exists
9775 set eaccess d_eaccess
9776 eval $inlibc
9777
9778 : see if endgrent exists
9779 set endgrent d_endgrent
9780 eval $inlibc
9781
9782 : see if endhostent exists
9783 set endhostent d_endhent
9784 eval $inlibc
9785
9786 : see if endnetent exists
9787 set endnetent d_endnent
9788 eval $inlibc
9789
9790 : see if endprotoent exists
9791 set endprotoent d_endpent
9792 eval $inlibc
9793
9794 : see if endpwent exists
9795 set endpwent d_endpwent
9796 eval $inlibc
9797
9798 : see if endservent exists
9799 set endservent d_endsent
9800 eval $inlibc
9801
9802 : Locate the flags for 'open()'
9803 echo " "
9804 $cat >try.c <<'EOCP'
9805 #include <sys/types.h>
9806 #ifdef I_FCNTL
9807 #include <fcntl.h>
9808 #endif
9809 #ifdef I_SYS_FILE
9810 #include <sys/file.h>
9811 #endif
9812 int main() {
9813         if(O_RDONLY);
9814 #ifdef O_TRUNC
9815         exit(0);
9816 #else
9817         exit(1);
9818 #endif
9819 }
9820 EOCP
9821 : check sys/file.h first to get FREAD on Sun
9822 if $test `./findhdr sys/file.h` && \
9823                 set try -DI_SYS_FILE && eval $compile; then
9824         h_sysfile=true;
9825         echo "<sys/file.h> defines the O_* constants..." >&4
9826         if $run ./try; then
9827                 echo "and you have the 3 argument form of open()." >&4
9828                 val="$define"
9829         else
9830                 echo "but not the 3 argument form of open().  Oh, well." >&4
9831                 val="$undef"
9832         fi
9833 elif $test `./findhdr fcntl.h` && \
9834                 set try -DI_FCNTL && eval $compile; then
9835         h_fcntl=true;
9836         echo "<fcntl.h> defines the O_* constants..." >&4
9837         if $run ./try; then
9838                 echo "and you have the 3 argument form of open()." >&4
9839                 val="$define"
9840         else
9841                 echo "but not the 3 argument form of open().  Oh, well." >&4
9842                 val="$undef"
9843         fi
9844 else
9845         val="$undef"
9846         echo "I can't find the O_* constant definitions!  You got problems." >&4
9847 fi
9848 set d_open3
9849 eval $setvar
9850 $rm -f try try.*
9851
9852 : see which of string.h or strings.h is needed
9853 echo " "
9854 strings=`./findhdr string.h`
9855 if $test "$strings" && $test -r "$strings"; then
9856         echo "Using <string.h> instead of <strings.h>." >&4
9857         val="$define"
9858 else
9859         val="$undef"
9860         strings=`./findhdr strings.h`
9861         if $test "$strings" && $test -r "$strings"; then
9862                 echo "Using <strings.h> instead of <string.h>." >&4
9863         else
9864                 echo "No string header found -- You'll surely have problems." >&4
9865         fi
9866 fi
9867 set i_string
9868 eval $setvar
9869 case "$i_string" in
9870 "$undef") strings=`./findhdr strings.h`;;
9871 *)        strings=`./findhdr string.h`;;
9872 esac
9873
9874 : see if this is a sys/file.h system
9875 val=''
9876 set sys/file.h val
9877 eval $inhdr
9878
9879 : do we need to include sys/file.h ?
9880 case "$val" in
9881 "$define")
9882         echo " "
9883         if $h_sysfile; then
9884                 val="$define"
9885                 echo "We'll be including <sys/file.h>." >&4
9886         else
9887                 val="$undef"
9888                 echo "We won't be including <sys/file.h>." >&4
9889         fi
9890         ;;
9891 *)
9892         h_sysfile=false
9893         ;;
9894 esac
9895 set i_sysfile
9896 eval $setvar
9897
9898 : see if fcntl.h is there
9899 val=''
9900 set fcntl.h val
9901 eval $inhdr
9902
9903 : see if we can include fcntl.h
9904 case "$val" in
9905 "$define")
9906         echo " "
9907         if $h_fcntl; then
9908                 val="$define"
9909                 echo "We'll be including <fcntl.h>." >&4
9910         else
9911                 val="$undef"
9912                 if $h_sysfile; then
9913         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9914                 else
9915                         echo "We won't be including <fcntl.h>." >&4
9916                 fi
9917         fi
9918         ;;
9919 *)
9920         h_fcntl=false
9921         val="$undef"
9922         ;;
9923 esac
9924 set i_fcntl
9925 eval $setvar
9926
9927 : check for non-blocking I/O stuff
9928 case "$h_sysfile" in
9929 true) echo "#include <sys/file.h>" > head.c;;
9930 *)
9931        case "$h_fcntl" in
9932        true) echo "#include <fcntl.h>" > head.c;;
9933        *) echo "#include <sys/fcntl.h>" > head.c;;
9934        esac
9935        ;;
9936 esac
9937 echo " "
9938 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9939 case "$o_nonblock" in
9940 '')
9941         $cat head.c > try.c
9942         $cat >>try.c <<EOCP
9943 #include <stdio.h>
9944 #include <stdlib.h>
9945 #$i_fcntl I_FCNTL
9946 #ifdef I_FCNTL
9947 #include <fcntl.h>
9948 #endif
9949 int main() {
9950 #ifdef O_NONBLOCK
9951         printf("O_NONBLOCK\n");
9952         exit(0);
9953 #endif
9954 #ifdef O_NDELAY
9955         printf("O_NDELAY\n");
9956         exit(0);
9957 #endif
9958 #ifdef FNDELAY
9959         printf("FNDELAY\n");
9960         exit(0);
9961 #endif
9962         exit(0);
9963 }
9964 EOCP
9965         set try
9966         if eval $compile_ok; then
9967                 o_nonblock=`$run ./try`
9968                 case "$o_nonblock" in
9969                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9970                 *) echo "Seems like we can use $o_nonblock.";;
9971                 esac
9972         else
9973                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9974         fi
9975         ;;
9976 *) echo "Using $hint value $o_nonblock.";;
9977 esac
9978 $rm -f try try.* .out core
9979
9980 echo " "
9981 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9982 case "$eagain" in
9983 '')
9984         $cat head.c > try.c
9985         $cat >>try.c <<EOCP
9986 #include <errno.h>
9987 #include <sys/types.h>
9988 #include <signal.h>
9989 #include <stdio.h> 
9990 #include <stdlib.h> 
9991 #$i_fcntl I_FCNTL
9992 #ifdef I_FCNTL
9993 #include <fcntl.h>
9994 #endif
9995 #define MY_O_NONBLOCK $o_nonblock
9996 #ifndef errno  /* XXX need better Configure test */
9997 extern int errno;
9998 #endif
9999 #$i_unistd I_UNISTD
10000 #ifdef I_UNISTD
10001 #include <unistd.h>
10002 #endif
10003 #$i_string I_STRING
10004 #ifdef I_STRING
10005 #include <string.h>
10006 #else
10007 #include <strings.h>
10008 #endif
10009 $signal_t blech(x) int x; { exit(3); }
10010 EOCP
10011         $cat >> try.c <<'EOCP'
10012 int main()
10013 {
10014         int pd[2];
10015         int pu[2];
10016         char buf[1];
10017         char string[100];
10018
10019         pipe(pd);       /* Down: child -> parent */
10020         pipe(pu);       /* Up: parent -> child */
10021         if (0 != fork()) {
10022                 int ret;
10023                 close(pd[1]);   /* Parent reads from pd[0] */
10024                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10025 #ifdef F_SETFL
10026                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10027                         exit(1);
10028 #else
10029                 exit(4);
10030 #endif
10031                 signal(SIGALRM, blech);
10032                 alarm(5);
10033                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10034                         exit(2);
10035                 sprintf(string, "%d\n", ret);
10036                 write(2, string, strlen(string));
10037                 alarm(0);
10038 #ifdef EAGAIN
10039                 if (errno == EAGAIN) {
10040                         printf("EAGAIN\n");
10041                         goto ok;
10042                 }
10043 #endif
10044 #ifdef EWOULDBLOCK
10045                 if (errno == EWOULDBLOCK)
10046                         printf("EWOULDBLOCK\n");
10047 #endif
10048         ok:
10049                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10050                 sleep(2);                               /* Give it time to close our pipe */
10051                 alarm(5);
10052                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10053                 alarm(0);
10054                 sprintf(string, "%d\n", ret);
10055                 write(3, string, strlen(string));
10056                 exit(0);
10057         }
10058
10059         close(pd[0]);                   /* We write to pd[1] */
10060         close(pu[1]);                   /* We read from pu[0] */
10061         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10062         close(pd[1]);                   /* Pipe pd is now fully closed! */
10063         exit(0);                                /* Bye bye, thank you for playing! */
10064 }
10065 EOCP
10066         set try
10067         if eval $compile_ok; then
10068                 echo "$startsh" >mtry
10069                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
10070                 chmod +x mtry
10071                 ./mtry >/dev/null 2>&1
10072                 case $? in
10073                 0) eagain=`$cat try.out`;;
10074                 1) echo "Could not perform non-blocking setting!";;
10075                 2) echo "I did a successful read() for something that was not there!";;
10076                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10077                 4) echo "Could not find F_SETFL!";;
10078                 *) echo "Something terribly wrong happened during testing.";;
10079                 esac
10080                 rd_nodata=`$cat try.ret`
10081                 echo "A read() system call with no data present returns $rd_nodata."
10082                 case "$rd_nodata" in
10083                 0|-1) ;;
10084                 *)
10085                         echo "(That's peculiar, fixing that to be -1.)"
10086                         rd_nodata=-1
10087                         ;;
10088                 esac
10089                 case "$eagain" in
10090                 '')
10091                         echo "Forcing errno EAGAIN on read() with no data available."
10092                         eagain=EAGAIN
10093                         ;;
10094                 *)
10095                         echo "Your read() sets errno to $eagain when no data is available."
10096                         ;;
10097                 esac
10098                 status=`$cat try.err`
10099                 case "$status" in
10100                 0) echo "And it correctly returns 0 to signal EOF.";;
10101                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10102                 *) echo "However, your read() returns '$status' on EOF??";;
10103                 esac
10104                 val="$define"
10105                 if test "$status" = "$rd_nodata"; then
10106                         echo "WARNING: you can't distinguish between EOF and no data!"
10107                         val="$undef"
10108                 fi
10109         else
10110                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10111                 eagain=EAGAIN
10112         fi
10113         set d_eofnblk
10114         eval $setvar
10115         ;;
10116 *)
10117         echo "Using $hint value $eagain."
10118         echo "Your read() returns $rd_nodata when no data is present."
10119         case "$d_eofnblk" in
10120         "$define") echo "And you can see EOF because read() returns 0.";;
10121         "$undef") echo "But you can't see EOF status from read() returned value.";;
10122         *)
10123                 echo "(Assuming you can't see EOF status from read anyway.)"
10124                 d_eofnblk=$undef
10125                 ;;
10126         esac
10127         ;;
10128 esac
10129 $rm -f try try.* .out core head.c mtry
10130
10131 : see if fchdir exists
10132 set fchdir d_fchdir
10133 eval $inlibc
10134
10135 : see if fchmod exists
10136 set fchmod d_fchmod
10137 eval $inlibc
10138
10139 : see if fchown exists
10140 set fchown d_fchown
10141 eval $inlibc
10142
10143 : see if this is an fcntl system
10144 set fcntl d_fcntl
10145 eval $inlibc
10146
10147 echo " "
10148 : See if fcntl-based locking works.
10149 $cat >try.c <<EOCP
10150 #include <stdlib.h>
10151 #include <unistd.h>
10152 #include <fcntl.h>
10153 #include <signal.h>
10154 $signal_t blech(x) int x; { exit(3); }
10155 int main() {
10156 #if defined(F_SETLK) && defined(F_SETLKW)
10157      struct flock flock;
10158      int retval, fd;
10159      fd = open("try.c", O_RDONLY);
10160      flock.l_type = F_RDLCK;
10161      flock.l_whence = SEEK_SET;
10162      flock.l_start = flock.l_len = 0;
10163      signal(SIGALRM, blech);
10164      alarm(10);
10165      retval = fcntl(fd, F_SETLK, &flock);
10166      close(fd);
10167      (retval < 0 ? exit(2) : exit(0));
10168 #else
10169      exit(2);
10170 #endif
10171 }
10172 EOCP
10173 echo "Checking if fcntl-based file locking works... "
10174 case "$d_fcntl" in
10175 "$define")
10176         set try
10177         if eval $compile_ok; then
10178                 if $run ./try; then
10179                         echo "Yes, it seems to work."
10180                         val="$define"
10181                 else
10182                         echo "Nope, it didn't work."
10183                         val="$undef"
10184                         case "$?" in
10185                         3) $cat >&4 <<EOM
10186 ***
10187 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10188 *** This is (almost) impossible.
10189 *** If your NFS lock daemons are not feeling well, something like
10190 *** this may happen, please investigate.  Cannot continue, aborting.
10191 ***
10192 EOM
10193                                 exit 1
10194                                 ;;
10195                         esac
10196                 fi
10197         else
10198                 echo "I'm unable to compile the test program, so I'll assume not."
10199                 val="$undef"
10200         fi
10201         ;;
10202 *) val="$undef";
10203         echo "Nope, since you don't even have fcntl()."
10204         ;;
10205 esac
10206 set d_fcntl_can_lock
10207 eval $setvar
10208 $rm -f try*
10209
10210
10211 : see if sys/select.h has to be included
10212 set sys/select.h i_sysselct
10213 eval $inhdr
10214
10215 : see if we should include time.h, sys/time.h, or both
10216 echo " "
10217 if test "X$timeincl" = X; then
10218         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10219         $echo $n "I'm now running the test program...$c"
10220         $cat >try.c <<'EOCP'
10221 #include <sys/types.h>
10222 #ifdef I_TIME
10223 #include <time.h>
10224 #endif
10225 #ifdef I_SYSTIME
10226 #ifdef SYSTIMEKERNEL
10227 #define KERNEL
10228 #endif
10229 #include <sys/time.h>
10230 #endif
10231 #ifdef I_SYSSELECT
10232 #include <sys/select.h>
10233 #endif
10234 int main()
10235 {
10236         struct tm foo;
10237 #ifdef S_TIMEVAL
10238         struct timeval bar;
10239 #endif
10240 #ifdef S_TIMEZONE
10241         struct timezone tzp;
10242 #endif
10243         if (foo.tm_sec == foo.tm_sec)
10244                 exit(0);
10245 #ifdef S_TIMEVAL
10246         if (bar.tv_sec == bar.tv_sec)
10247                 exit(0);
10248 #endif
10249         exit(1);
10250 }
10251 EOCP
10252         flags=''
10253         for s_timezone in '-DS_TIMEZONE' ''; do
10254         sysselect=''
10255         for s_timeval in '-DS_TIMEVAL' ''; do
10256         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10257         for i_time in '' '-DI_TIME'; do
10258         for i_systime in '-DI_SYSTIME' ''; do
10259                 case "$flags" in
10260                 '') $echo $n ".$c"
10261                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10262                         if eval $compile; then
10263                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10264                                 shift
10265                                 flags="$*"
10266                                 echo " "
10267                                 $echo $n "Succeeded with $flags$c"
10268                         fi
10269                         ;;
10270                 esac
10271         done
10272         done
10273         done
10274         done
10275         done
10276         timeincl=''
10277         echo " "
10278         case "$flags" in
10279         *SYSTIMEKERNEL*) i_systimek="$define"
10280                 timeincl=`./findhdr sys/time.h`
10281                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10282         *) i_systimek="$undef";;
10283         esac
10284         case "$flags" in
10285         *I_TIME*) i_time="$define"
10286                 timeincl=`./findhdr time.h`" $timeincl"
10287                 echo "We'll include <time.h>." >&4;;
10288         *) i_time="$undef";;
10289         esac
10290         case "$flags" in
10291         *I_SYSTIME*) i_systime="$define"
10292                 timeincl=`./findhdr sys/time.h`" $timeincl"
10293                 echo "We'll include <sys/time.h>." >&4;;
10294         *) i_systime="$undef";;
10295         esac
10296         $rm -f try.c try
10297 fi
10298
10299 : check for fd_set items
10300 $cat <<EOM
10301
10302 Checking to see how well your C compiler handles fd_set and friends ...
10303 EOM
10304 $cat >try.c <<EOCP
10305 #$i_systime I_SYS_TIME
10306 #$i_sysselct I_SYS_SELECT
10307 #$d_socket HAS_SOCKET
10308 #include <sys/types.h>
10309 #ifdef HAS_SOCKET
10310 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10311 #endif
10312 #ifdef I_SYS_TIME
10313 #include <sys/time.h>
10314 #endif
10315 #ifdef I_SYS_SELECT
10316 #include <sys/select.h>
10317 #endif
10318 int main() {
10319         fd_set fds;
10320
10321 #ifdef TRYBITS
10322         if(fds.fds_bits);
10323 #endif
10324
10325 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10326         exit(0);
10327 #else
10328         exit(1);
10329 #endif
10330 }
10331 EOCP
10332 set try -DTRYBITS
10333 if eval $compile; then
10334         d_fds_bits="$define"
10335         d_fd_set="$define"
10336         echo "Well, your system knows about the normal fd_set typedef..." >&4
10337         if $run ./try; then
10338                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10339                 d_fd_macros="$define"
10340         else
10341                 $cat >&4 <<'EOM'
10342 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10343 EOM
10344                 d_fd_macros="$undef"
10345         fi
10346 else
10347         $cat <<'EOM'
10348 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10349 EOM
10350         set try
10351         if eval $compile; then
10352                 d_fds_bits="$undef"
10353                 d_fd_set="$define"
10354                 echo "Well, your system has some sort of fd_set available..." >&4
10355                 if $run ./try; then
10356                         echo "and you have the normal fd_set macros." >&4
10357                         d_fd_macros="$define"
10358                 else
10359                         $cat <<'EOM'
10360 but not the normal fd_set macros!  Gross!  More work for me...
10361 EOM
10362                         d_fd_macros="$undef"
10363                 fi
10364         else
10365         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10366                 d_fd_set="$undef"
10367                 d_fds_bits="$undef"
10368                 d_fd_macros="$undef"
10369         fi
10370 fi
10371 $rm -f try try.*
10372
10373 : see if fgetpos exists
10374 set fgetpos d_fgetpos
10375 eval $inlibc
10376
10377 : see if finite exists
10378 set finite d_finite
10379 eval $inlibc
10380
10381 : see if finitel exists
10382 set finitel d_finitel
10383 eval $inlibc
10384
10385 : see if flock exists
10386 set flock d_flock
10387 eval $inlibc
10388
10389 : see if prototype for flock is available
10390 echo " "
10391 set d_flockproto flock $i_sysfile sys/file.h
10392 eval $hasproto
10393
10394 : see if fork exists
10395 set fork d_fork
10396 eval $inlibc
10397
10398 : see if fp_class exists
10399 set fp_class d_fp_class
10400 eval $inlibc
10401
10402 : see if pathconf exists
10403 set pathconf d_pathconf
10404 eval $inlibc
10405
10406 : see if fpathconf exists
10407 set fpathconf d_fpathconf
10408 eval $inlibc
10409
10410 : see if fpclass exists
10411 set fpclass d_fpclass
10412 eval $inlibc
10413
10414 : see if fpclassify exists
10415 set fpclassify d_fpclassify
10416 eval $inlibc
10417
10418 : see if fpclassl exists
10419 set fpclassl d_fpclassl
10420 eval $inlibc
10421
10422
10423 : check for fpos64_t
10424 echo " "
10425 echo "Checking to see if you have fpos64_t..." >&4
10426 $cat >try.c <<EOCP
10427 #include <stdio.h>
10428 int main() { fpos64_t x = 7; }
10429 EOCP
10430 set try
10431 if eval $compile; then
10432         val="$define"
10433         echo "You have fpos64_t."
10434 else
10435         val="$undef"
10436         echo "You do not have fpos64_t."
10437         case "$fpossize" in
10438         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10439         esac
10440 fi
10441 $rm -f try.* try
10442 set d_fpos64_t
10443 eval $setvar
10444
10445 : see if frexpl exists
10446 set frexpl d_frexpl
10447 eval $inlibc
10448
10449 : see if this is a sys/param system
10450 set sys/param.h i_sysparam
10451 eval $inhdr
10452
10453 : see if this is a sys/mount.h system
10454 set sys/mount.h i_sysmount
10455 eval $inhdr
10456
10457
10458 echo " "
10459 echo "Checking to see if your system supports struct fs_data..." >&4
10460 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10461 eval $hasstruct
10462 case "$d_fs_data_s" in
10463 "$define")      echo "Yes, it does."   ;;
10464 *)              echo "No, it doesn't." ;;
10465 esac
10466
10467 : see if fseeko exists
10468 set fseeko d_fseeko
10469 eval $inlibc
10470 case "$longsize" in
10471 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10472 esac
10473
10474 : see if fsetpos exists
10475 set fsetpos d_fsetpos
10476 eval $inlibc
10477
10478
10479 : see if fstatfs exists
10480 set fstatfs d_fstatfs
10481 eval $inlibc
10482
10483
10484 : see if statvfs exists
10485 set statvfs d_statvfs
10486 eval $inlibc
10487
10488 : see if fstatvfs exists
10489 set fstatvfs d_fstatvfs
10490 eval $inlibc
10491
10492
10493 : see if fsync exists
10494 set fsync d_fsync
10495 eval $inlibc
10496
10497 : see if ftello exists
10498 set ftello d_ftello
10499 eval $inlibc
10500 case "$longsize" in
10501 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10502 esac
10503
10504 : see if getcwd exists
10505 set getcwd d_getcwd
10506 eval $inlibc
10507
10508 : see if getespwnam exists
10509 set getespwnam d_getespwnam
10510 eval $inlibc
10511
10512
10513 : see if getfsstat exists
10514 set getfsstat d_getfsstat
10515 eval $inlibc
10516
10517 : see if getgrent exists
10518 set getgrent d_getgrent
10519 eval $inlibc
10520
10521 : see if gethostbyaddr exists
10522 set gethostbyaddr d_gethbyaddr
10523 eval $inlibc
10524
10525 : see if gethostbyname exists
10526 set gethostbyname d_gethbyname
10527 eval $inlibc
10528
10529 : see if gethostent exists
10530 set gethostent d_gethent
10531 eval $inlibc
10532
10533 : see how we will look up host name
10534 echo " "
10535 call=''
10536 if set gethostname val -f d_gethname; eval $csym; $val; then
10537         echo 'gethostname() found.' >&4
10538         d_gethname="$define"
10539         call=gethostname
10540 fi
10541 if set uname val -f d_uname; eval $csym; $val; then
10542         if ./xenix; then
10543                 $cat <<'EOM'
10544 uname() was found, but you're running xenix, and older versions of xenix
10545 have a broken uname(). If you don't really know whether your xenix is old
10546 enough to have a broken system call, use the default answer.
10547
10548 EOM
10549                 dflt=y
10550                 case "$d_uname" in
10551                 "$define") dflt=n;;
10552                 esac
10553                 rp='Is your uname() broken?'
10554                 . ./myread
10555                 case "$ans" in
10556                 n*) d_uname="$define"; call=uname;;
10557                 esac
10558         else
10559                 echo 'uname() found.' >&4
10560                 d_uname="$define"
10561                 case "$call" in
10562                 '') call=uname ;;
10563                 esac
10564         fi
10565 fi
10566 case "$d_gethname" in
10567 '') d_gethname="$undef";;
10568 esac
10569 case "$d_uname" in
10570 '') d_uname="$undef";;
10571 esac
10572 case "$d_uname$d_gethname" in
10573 *define*)
10574         dflt=n
10575         cat <<EOM
10576  
10577 Every now and then someone has a $call() that lies about the hostname
10578 but can't be fixed for political or economic reasons.  If you wish, I can
10579 pretend $call() isn't there and maybe compute hostname at run-time
10580 thanks to the '$phostname' command.
10581
10582 EOM
10583         rp="Shall I ignore $call() from now on?"
10584         . ./myread
10585         case "$ans" in
10586         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10587         esac;;
10588 esac
10589 case "$phostname" in
10590 '') aphostname='';;
10591 *) case "$aphostname" in
10592         /*) ;;
10593         *) set X $phostname
10594                 shift
10595                 file=$1
10596                 shift
10597                 file=`./loc $file $file $pth`
10598                 aphostname=`echo $file $*`
10599                 ;;
10600         esac
10601         ;;
10602 esac
10603 case "$d_uname$d_gethname" in
10604 *define*) ;;
10605 *)
10606         case "$phostname" in
10607         '')
10608                 echo "There will be no way for $package to get your hostname." >&4;;
10609         *)
10610         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10611                 ;;
10612         esac;;
10613 esac
10614 case "$d_phostname" in
10615 '') d_phostname="$undef";;
10616 esac
10617
10618 : see if this is a netdb.h system
10619 set netdb.h i_netdb
10620 eval $inhdr
10621
10622 : see if prototypes for various gethostxxx netdb.h functions are available
10623 echo " "
10624 set d_gethostprotos gethostent $i_netdb netdb.h
10625 eval $hasproto
10626
10627 : see if getitimer exists
10628 set getitimer d_getitimer
10629 eval $inlibc
10630
10631 : see if getlogin exists
10632 set getlogin d_getlogin
10633 eval $inlibc
10634
10635 : see if getmnt exists
10636 set getmnt d_getmnt
10637 eval $inlibc
10638
10639 : see if getmntent exists
10640 set getmntent d_getmntent
10641 eval $inlibc
10642
10643 : see if getnetbyaddr exists
10644 set getnetbyaddr d_getnbyaddr
10645 eval $inlibc
10646
10647 : see if getnetbyname exists
10648 set getnetbyname d_getnbyname
10649 eval $inlibc
10650
10651 : see if getnetent exists
10652 set getnetent d_getnent
10653 eval $inlibc
10654
10655 : see if prototypes for various getnetxxx netdb.h functions are available
10656 echo " "
10657 set d_getnetprotos getnetent $i_netdb netdb.h
10658 eval $hasproto
10659
10660 : see if getpagesize exists
10661 set getpagesize d_getpagsz
10662 eval $inlibc
10663
10664
10665 : see if getprotobyname exists
10666 set getprotobyname d_getpbyname
10667 eval $inlibc
10668
10669 : see if getprotobynumber exists
10670 set getprotobynumber d_getpbynumber
10671 eval $inlibc
10672
10673 : see if getprotoent exists
10674 set getprotoent d_getpent
10675 eval $inlibc
10676
10677 : see if getpgid exists
10678 set getpgid d_getpgid
10679 eval $inlibc
10680
10681 : see if getpgrp2 exists
10682 set getpgrp2 d_getpgrp2
10683 eval $inlibc
10684
10685 : see if getppid exists
10686 set getppid d_getppid
10687 eval $inlibc
10688
10689 : see if getpriority exists
10690 set getpriority d_getprior
10691 eval $inlibc
10692
10693 : see if prototypes for various getprotoxxx netdb.h functions are available
10694 echo " "
10695 set d_getprotoprotos getprotoent $i_netdb netdb.h
10696 eval $hasproto
10697
10698 : see if getprpwnam exists
10699 set getprpwnam d_getprpwnam
10700 eval $inlibc
10701
10702 : see if getpwent exists
10703 set getpwent d_getpwent
10704 eval $inlibc
10705
10706
10707 : see if getservbyname exists
10708 set getservbyname d_getsbyname
10709 eval $inlibc
10710
10711 : see if getservbyport exists
10712 set getservbyport d_getsbyport
10713 eval $inlibc
10714
10715 : see if getservent exists
10716 set getservent d_getsent
10717 eval $inlibc
10718
10719 : see if prototypes for various getservxxx netdb.h functions are available
10720 echo " "
10721 set d_getservprotos getservent $i_netdb netdb.h
10722 eval $hasproto
10723
10724 : see if getspnam exists
10725 set getspnam d_getspnam
10726 eval $inlibc
10727
10728 : see if gettimeofday or ftime exists
10729 set gettimeofday d_gettimeod
10730 eval $inlibc
10731 case "$d_gettimeod" in
10732 "$undef")
10733         set ftime d_ftime 
10734         eval $inlibc
10735         ;;
10736 *)
10737         val="$undef"; set d_ftime; eval $setvar
10738         ;;
10739 esac
10740 case "$d_gettimeod$d_ftime" in
10741 "$undef$undef")
10742         echo " "
10743         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10744         ;;
10745 esac
10746
10747 : see if this is an grp system
10748 set grp.h i_grp
10749 eval $inhdr
10750
10751 case "$i_grp" in
10752 $define)
10753         xxx=`./findhdr grp.h`
10754         $cppstdin $cppflags $cppminus < $xxx >$$.h
10755
10756         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10757                 val="$define"
10758         else
10759                 val="$undef"
10760         fi
10761         set d_grpasswd
10762         eval $setvar
10763
10764         $rm -f $$.h
10765         ;;
10766 *)
10767         val="$undef";
10768         set d_grpasswd; eval $setvar
10769         ;;
10770 esac
10771
10772 : see if hasmntopt exists
10773 set hasmntopt d_hasmntopt
10774 eval $inlibc
10775
10776 : see if this is a netinet/in.h or sys/in.h system
10777 set netinet/in.h i_niin sys/in.h i_sysin
10778 eval $inhdr
10779
10780 : see if arpa/inet.h has to be included
10781 set arpa/inet.h i_arpainet
10782 eval $inhdr
10783
10784 : see if htonl --and friends-- exists
10785 val=''
10786 set htonl val
10787 eval $inlibc
10788
10789 : Maybe they are macros.
10790 case "$val" in
10791 $undef)
10792         $cat >htonl.c <<EOM
10793 #include <stdio.h>
10794 #include <sys/types.h>
10795 #$i_niin I_NETINET_IN
10796 #$i_sysin I_SYS_IN
10797 #$i_arpainet I_ARPA_INET
10798 #ifdef I_NETINET_IN
10799 #include <netinet/in.h>
10800 #endif
10801 #ifdef I_SYS_IN
10802 #include <sys/in.h>
10803 #endif
10804 #ifdef I_ARPA_INET
10805 #include <arpa/inet.h>
10806 #endif
10807 #ifdef htonl
10808 printf("Defined as a macro.");
10809 #endif
10810 EOM
10811         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10812         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10813                 val="$define"
10814                 echo "But it seems to be defined as a macro." >&4
10815         fi
10816         $rm -f htonl.?
10817         ;;
10818 esac
10819 set d_htonl
10820 eval $setvar
10821
10822 : index or strchr
10823 echo " "
10824 if set index val -f; eval $csym; $val; then
10825         if set strchr val -f d_strchr; eval $csym; $val; then
10826                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10827                         val="$define"
10828                         vali="$undef"
10829                         echo "strchr() found." >&4
10830                 else
10831                         val="$undef"
10832                         vali="$define"
10833                         echo "index() found." >&4
10834                 fi
10835         else
10836                 val="$undef"
10837                 vali="$define"
10838                 echo "index() found." >&4
10839         fi
10840 else
10841         if set strchr val -f d_strchr; eval $csym; $val; then
10842                 val="$define"
10843                 vali="$undef"
10844                 echo "strchr() found." >&4
10845         else
10846                 echo "No index() or strchr() found!" >&4
10847                 val="$undef"
10848                 vali="$undef"
10849         fi
10850 fi
10851 set d_strchr; eval $setvar
10852 val="$vali"
10853 set d_index; eval $setvar
10854
10855 : check whether inet_aton exists
10856 set inet_aton d_inetaton
10857 eval $inlibc
10858
10859 : Look for isascii
10860 echo " "
10861 $cat >isascii.c <<'EOCP'
10862 #include <stdio.h>
10863 #include <ctype.h>
10864 int main() {
10865         int c = 'A';
10866         if (isascii(c))
10867                 exit(0);
10868         else
10869                 exit(1);
10870 }
10871 EOCP
10872 set isascii
10873 if eval $compile; then
10874         echo "isascii() found." >&4
10875         val="$define"
10876 else
10877         echo "isascii() NOT found." >&4
10878         val="$undef"
10879 fi
10880 set d_isascii
10881 eval $setvar
10882 $rm -f isascii*
10883
10884 : see if isfinite exists
10885 set isfinite d_isfinite
10886 eval $inlibc
10887
10888 : see if isinf exists
10889 set isinf d_isinf
10890 eval $inlibc
10891
10892 : see if isnan exists
10893 set isnan d_isnan
10894 eval $inlibc
10895
10896 : see if isnanl exists
10897 set isnanl d_isnanl
10898 eval $inlibc
10899
10900 : see if killpg exists
10901 set killpg d_killpg
10902 eval $inlibc
10903
10904 : see if lchown exists
10905 echo " "
10906 $cat > try.c <<'EOCP'
10907 /* System header to define __stub macros and hopefully few prototypes,
10908     which can conflict with char lchown(); below.  */
10909 #include <assert.h>
10910 /* Override any gcc2 internal prototype to avoid an error.  */
10911 /* We use char because int might match the return type of a gcc2
10912    builtin and then its argument prototype would still apply.  */
10913 char lchown();
10914 int main() {
10915     /*  The GNU C library defines this for functions which it implements
10916         to always fail with ENOSYS.  Some functions are actually named
10917         something starting with __ and the normal name is an alias.  */
10918 #if defined (__stub_lchown) || defined (__stub___lchown)
10919 choke me
10920 #else
10921 lchown();
10922 #endif
10923 ; return 0; }
10924 EOCP
10925 set try
10926 if eval $compile; then
10927     $echo "lchown() found." >&4
10928     val="$define"
10929 else
10930     $echo "lchown() NOT found." >&4
10931     val="$undef"
10932 fi
10933 set d_lchown
10934 eval $setvar
10935
10936 : See if number of significant digits in a double precision number is known
10937 echo " "
10938 $cat >ldbl_dig.c <<EOM
10939 #$i_limits I_LIMITS
10940 #$i_float I_FLOAT
10941 #ifdef I_LIMITS
10942 #include <limits.h>
10943 #endif
10944 #ifdef I_FLOAT
10945 #include <float.h>
10946 #endif
10947 #ifdef LDBL_DIG
10948 printf("Contains LDBL_DIG");
10949 #endif
10950 EOM
10951 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10952 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10953         echo "LDBL_DIG found." >&4
10954         val="$define"
10955 else
10956         echo "LDBL_DIG NOT found." >&4
10957         val="$undef"
10958 fi
10959 $rm -f ldbl_dig.?
10960 set d_ldbl_dig
10961 eval $setvar
10962
10963 : see if link exists
10964 set link d_link
10965 eval $inlibc
10966
10967 : see if localeconv exists
10968 set localeconv d_locconv
10969 eval $inlibc
10970
10971 : see if lockf exists
10972 set lockf d_lockf
10973 eval $inlibc
10974
10975 : see if prototype for lseek is available
10976 echo " "
10977 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10978 eval $hasproto
10979
10980 : see if lstat exists
10981 set lstat d_lstat
10982 eval $inlibc
10983
10984 : see if madvise exists
10985 set madvise d_madvise
10986 eval $inlibc
10987
10988 : see if mblen exists
10989 set mblen d_mblen
10990 eval $inlibc
10991
10992 : see if mbstowcs exists
10993 set mbstowcs d_mbstowcs
10994 eval $inlibc
10995
10996 : see if mbtowc exists
10997 set mbtowc d_mbtowc
10998 eval $inlibc
10999
11000 : see if memchr exists
11001 set memchr d_memchr
11002 eval $inlibc
11003
11004 : see if memcmp exists
11005 set memcmp d_memcmp
11006 eval $inlibc
11007
11008 : see if memcpy exists
11009 set memcpy d_memcpy
11010 eval $inlibc
11011
11012 : see if memmove exists
11013 set memmove d_memmove
11014 eval $inlibc
11015
11016 : see if memset exists
11017 set memset d_memset
11018 eval $inlibc
11019
11020 : see if mkdir exists
11021 set mkdir d_mkdir
11022 eval $inlibc
11023
11024 : see if mkdtemp exists
11025 set mkdtemp d_mkdtemp
11026 eval $inlibc
11027
11028 : see if mkfifo exists
11029 set mkfifo d_mkfifo
11030 eval $inlibc
11031
11032 : see if mkstemp exists
11033 set mkstemp d_mkstemp
11034 eval $inlibc
11035
11036 : see if mkstemps exists
11037 set mkstemps d_mkstemps
11038 eval $inlibc
11039
11040 : see if mktime exists
11041 set mktime d_mktime
11042 eval $inlibc
11043
11044 : see if this is a sys/mman.h system
11045 set sys/mman.h i_sysmman
11046 eval $inhdr
11047
11048 : see if mmap exists
11049 set mmap d_mmap
11050 eval $inlibc
11051 : see what shmat returns
11052 : default to something harmless
11053 mmaptype='void *'
11054 case "$i_sysmman$d_mmap" in
11055 "$define$define")
11056         $cat >mmap.c <<'END'
11057 #include <sys/mman.h>
11058 void *mmap();
11059 END
11060         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11061                 mmaptype='void *'
11062         else
11063                 mmaptype='caddr_t'
11064         fi
11065         echo "and it returns ($mmaptype)." >&4
11066         ;;
11067 esac
11068
11069
11070
11071 : see if modfl exists
11072 set modfl d_modfl
11073 eval $inlibc
11074
11075 d_modfl_pow32_bug="$undef"
11076
11077 case "$d_longdbl$d_modfl" in
11078 $define$define)
11079         $cat <<EOM
11080 Checking to see whether your modfl() is okay for large values...
11081 EOM
11082 $cat >try.c <<EOCP
11083 #include <math.h> 
11084 #include <stdio.h>
11085 int main() {
11086     long double nv = 4294967303.15;
11087     long double v, w;
11088     v = modfl(nv, &w);         
11089 #ifdef __GLIBC__
11090     printf("glibc");
11091 #endif
11092     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
11093     return 0;
11094 }
11095 EOCP
11096         case "$osname:$gccversion" in
11097         aix:)   saveccflags="$ccflags"
11098                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
11099         esac
11100         set try
11101         if eval $compile; then
11102                 foo=`$run ./try`
11103                 case "$foo" in
11104                 *" 4294967303.150000 1.150000 4294967302.000000")
11105                         echo >&4 "Your modfl() is broken for large values."
11106                         d_modfl_pow32_bug="$define"
11107                         case "$foo" in
11108                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11109                         ;;
11110                         esac
11111                         ;;
11112                 *" 4294967303.150000 0.150000 4294967303.000000")
11113                         echo >&4 "Your modfl() seems okay for large values."
11114                         ;;
11115                 *)      echo >&4 "I don't understand your modfl() at all."
11116                         d_modfl="$undef"
11117                         ;;
11118                 esac
11119                 $rm -f try.* try core core.try.*
11120         else
11121                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11122                 d_modfl="$undef"
11123         fi
11124         case "$osname:$gccversion" in
11125         aix:)   ccflags="$saveccflags" ;; # restore
11126         esac
11127         ;;
11128 esac
11129
11130 : see if mprotect exists
11131 set mprotect d_mprotect
11132 eval $inlibc
11133
11134 : see if msgctl exists
11135 set msgctl d_msgctl
11136 eval $inlibc
11137
11138 : see if msgget exists
11139 set msgget d_msgget
11140 eval $inlibc
11141
11142 : see if msgsnd exists
11143 set msgsnd d_msgsnd
11144 eval $inlibc
11145
11146 : see if msgrcv exists
11147 set msgrcv d_msgrcv
11148 eval $inlibc
11149
11150 : see how much of the 'msg*(2)' library is present.
11151 h_msg=true
11152 echo " "
11153 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11154 *"$undef"*) h_msg=false;;
11155 esac
11156 case "$osname" in
11157 freebsd)
11158     case "`ipcs 2>&1`" in
11159     "SVID messages"*"not configured"*)
11160         echo "Your $osname does not have the msg*(2) configured." >&4
11161         h_msg=false
11162         val="$undef"
11163         set msgctl d_msgctl
11164         eval $setvar
11165         set msgget d_msgget
11166         eval $setvar
11167         set msgsnd d_msgsnd
11168         eval $setvar
11169         set msgrcv d_msgrcv
11170         eval $setvar
11171         ;;
11172     esac
11173     ;;
11174 esac
11175 : we could also check for sys/ipc.h ...
11176 if $h_msg && $test `./findhdr sys/msg.h`; then
11177         echo "You have the full msg*(2) library." >&4
11178         val="$define"
11179 else
11180         echo "You don't have the full msg*(2) library." >&4
11181         val="$undef"
11182 fi
11183 set d_msg
11184 eval $setvar
11185
11186
11187 echo " "
11188 echo "Checking to see if your system supports struct msghdr..." >&4
11189 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11190 eval $hasstruct
11191 case "$d_msghdr_s" in
11192 "$define")      echo "Yes, it does."   ;;
11193 *)              echo "No, it doesn't." ;;
11194 esac
11195
11196
11197 : see if msync exists
11198 set msync d_msync
11199 eval $inlibc
11200
11201 : see if munmap exists
11202 set munmap d_munmap
11203 eval $inlibc
11204
11205 : see if nice exists
11206 set nice d_nice
11207 eval $inlibc
11208
11209 : see if this is a langinfo.h system
11210 set langinfo.h i_langinfo
11211 eval $inhdr
11212
11213 : see if nl_langinfo exists
11214 set nl_langinfo d_nl_langinfo
11215 eval $inlibc
11216
11217 : check for length of character
11218 echo " "
11219 case "$charsize" in
11220 '')
11221         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11222         $cat >try.c <<'EOCP'
11223 #include <stdio.h>
11224 int main()
11225 {
11226     printf("%d\n", (int)sizeof(char));
11227     exit(0);
11228 }
11229 EOCP
11230         set try
11231         if eval $compile_ok; then
11232                 dflt=`$run ./try`
11233         else
11234                 dflt='1'
11235                 echo "(I can't seem to compile the test program.  Guessing...)"
11236         fi
11237         ;;
11238 *)
11239         dflt="$charsize"
11240         ;;
11241 esac
11242 rp="What is the size of a character (in bytes)?"
11243 . ./myread
11244 charsize="$ans"
11245 $rm -f try.c try
11246
11247 : check for volatile keyword
11248 echo " "
11249 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11250 $cat >try.c <<'EOCP'
11251 int main()
11252 {
11253         typedef struct _goo_struct goo_struct;
11254         goo_struct * volatile goo = ((goo_struct *)0);
11255         struct _goo_struct {
11256                 long long_int;
11257                 int reg_int;
11258                 char char_var;
11259         };
11260         typedef unsigned short foo_t;
11261         char *volatile foo;
11262         volatile int bar;
11263         volatile foo_t blech;
11264         foo = foo;
11265 }
11266 EOCP
11267 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11268         val="$define"
11269         echo "Yup, it does."
11270 else
11271         val="$undef"
11272         echo "Nope, it doesn't."
11273 fi
11274 set d_volatile
11275 eval $setvar
11276 $rm -f try.*
11277
11278
11279 echo " "
11280 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11281
11282 case "$use64bitint:$d_quad:$quadtype" in
11283 define:define:?*)
11284         ivtype="$quadtype"
11285         uvtype="$uquadtype"
11286         ivsize=8
11287         uvsize=8
11288         ;;
11289 *)      ivtype="long"
11290         uvtype="unsigned long"
11291         ivsize=$longsize
11292         uvsize=$longsize
11293         ;;
11294 esac
11295
11296 case "$uselongdouble:$d_longdbl" in
11297 define:define)
11298         nvtype="long double"
11299         nvsize=$longdblsize
11300         ;;
11301 *)      nvtype=double
11302         nvsize=$doublesize
11303         ;;
11304 esac
11305
11306 $echo "(IV will be "$ivtype", $ivsize bytes)"
11307 $echo "(UV will be "$uvtype", $uvsize bytes)"
11308 $echo "(NV will be "$nvtype", $nvsize bytes)"
11309
11310 $cat >try.c <<EOCP
11311 #$i_inttypes I_INTTYPES
11312 #ifdef I_INTTYPES
11313 #include <inttypes.h>
11314 #endif
11315 #include <stdio.h>
11316 int main() {
11317 #ifdef INT8
11318    int8_t i =  INT8_MAX;
11319   uint8_t u = UINT8_MAX;
11320   printf("int8_t\n");
11321 #endif
11322 #ifdef INT16
11323    int16_t i =  INT16_MAX;
11324   uint16_t i = UINT16_MAX;
11325   printf("int16_t\n");
11326 #endif
11327 #ifdef INT32
11328    int32_t i =  INT32_MAX;
11329   uint32_t u = UINT32_MAX;
11330   printf("int32_t\n");
11331 #endif
11332 }
11333 EOCP
11334
11335 case "$i8type" in
11336 '')     case "$charsize" in
11337         1)      i8type=char
11338                 u8type="unsigned char"
11339                 i8size=$charsize
11340                 u8size=$charsize
11341                 ;;
11342         esac
11343         ;;
11344 esac
11345 case "$i8type" in
11346 '')     set try -DINT8
11347         if eval $compile; then
11348                 case "`$run ./try`" in
11349                 int8_t) i8type=int8_t
11350                         u8type=uint8_t
11351                         i8size=1
11352                         u8size=1
11353                         ;;
11354                 esac
11355         fi
11356         ;;
11357 esac
11358 case "$i8type" in
11359 '')     if $test $charsize -ge 1; then
11360                 i8type=char
11361                 u8type="unsigned char"
11362                 i8size=$charsize
11363                 u8size=$charsize
11364         fi
11365         ;;
11366 esac
11367
11368 case "$i16type" in
11369 '')     case "$shortsize" in
11370         2)      i16type=short
11371                 u16type="unsigned short"
11372                 i16size=$shortsize
11373                 u16size=$shortsize
11374                 ;;
11375         esac
11376         ;;
11377 esac
11378 case "$i16type" in
11379 '')     set try -DINT16
11380         if eval $compile; then
11381                 case "`$run ./try`" in
11382                 int16_t)
11383                         i16type=int16_t
11384                         u16type=uint16_t
11385                         i16size=2
11386                         u16size=2
11387                         ;;
11388                 esac
11389         fi
11390         ;;
11391 esac
11392 case "$i16type" in
11393 '')     if $test $shortsize -ge 2; then
11394                 i16type=short
11395                 u16type="unsigned short"
11396                 i16size=$shortsize
11397                 u16size=$shortsize
11398         fi
11399         ;;
11400 esac
11401
11402 case "$i32type" in
11403 '')     case "$longsize" in
11404         4)      i32type=long
11405                 u32type="unsigned long"
11406                 i32size=$longsize
11407                 u32size=$longsize
11408                 ;;
11409         *)      case "$intsize" in
11410                 4)      i32type=int
11411                         u32type="unsigned int"
11412                         i32size=$intsize
11413                         u32size=$intsize
11414                         ;;
11415                 esac
11416                 ;;
11417         esac
11418         ;;
11419 esac
11420 case "$i32type" in
11421 '')     set try -DINT32
11422         if eval $compile; then
11423                 case "`$run ./try`" in
11424                 int32_t)
11425                         i32type=int32_t
11426                         u32type=uint32_t
11427                         i32size=4
11428                         u32size=4
11429                         ;;
11430                 esac
11431         fi
11432         ;;
11433 esac
11434 case "$i32type" in
11435 '')     if $test $intsize -ge 4; then
11436                 i32type=int
11437                 u32type="unsigned int"
11438                 i32size=$intsize
11439                 u32size=$intsize
11440         fi
11441         ;;
11442 esac
11443
11444 case "$i64type" in
11445 '')     case "$d_quad:$quadtype" in
11446         define:?*)
11447                 i64type="$quadtype"
11448                 u64type="$uquadtype"
11449                 i64size=8
11450                 u64size=8
11451                 ;;
11452         esac
11453         ;;
11454 esac
11455
11456 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11457 : volatile so that the compiler has to store it out to memory.
11458 if test X"$d_volatile" = X"$define"; then
11459         volatile=volatile
11460 fi
11461 $cat <<EOP >try.c
11462 #include <stdio.h>
11463 #include <sys/types.h>
11464 #include <signal.h>
11465 #ifdef SIGFPE
11466 $volatile int bletched = 0;
11467 $signal_t blech(s) int s; { bletched = 1; }
11468 #endif
11469 int main() {
11470     $uvtype u = 0;
11471     $nvtype d;
11472     int     n = 8 * $uvsize;
11473     int     i;
11474 #ifdef SIGFPE
11475     signal(SIGFPE, blech);
11476 #endif
11477
11478     for (i = 0; i < n; i++) {
11479       u = u << 1 | ($uvtype)1;
11480       d = ($nvtype)u;
11481       if (($uvtype)d != u)
11482         break;
11483       if (d <= 0)
11484         break;
11485       d = ($nvtype)(u - 1);
11486       if (($uvtype)d != (u - 1))
11487         break;
11488 #ifdef SIGFPE
11489       if (bletched) {
11490         break;
11491 #endif
11492       } 
11493     }
11494     printf("%d\n", ((i == n) ? -n : i));
11495     exit(0);
11496 }
11497 EOP
11498 set try
11499
11500 d_nv_preserves_uv="$undef"
11501 if eval $compile; then
11502         d_nv_preserves_uv_bits="`$run ./try`"
11503 fi
11504 case "$d_nv_preserves_uv_bits" in
11505 \-[1-9]*)       
11506         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11507         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11508         d_nv_preserves_uv="$define"
11509         ;;
11510 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11511         d_nv_preserves_uv="$undef" ;;
11512 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11513         d_nv_preserves_uv_bits="$undef" ;;
11514 esac
11515
11516 $rm -f try.* try
11517
11518
11519 : check for off64_t
11520 echo " "
11521 echo "Checking to see if you have off64_t..." >&4
11522 $cat >try.c <<EOCP
11523 #include <sys/types.h>
11524 #include <unistd.h>
11525 int main() { off64_t x = 7; }
11526 EOCP
11527 set try
11528 if eval $compile; then
11529         val="$define"
11530         echo "You have off64_t."
11531 else
11532         val="$undef"
11533         echo "You do not have off64_t."
11534         case "$lseeksize" in
11535         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11536         esac
11537 fi
11538 $rm -f try.* try
11539 set d_off64_t
11540 eval $setvar
11541
11542 : see if POSIX threads are available
11543 set pthread.h i_pthread
11544 eval $inhdr
11545
11546
11547
11548
11549 : how to create joinable pthreads
11550 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11551         echo " "
11552         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11553         $cat >try.c <<'EOCP'
11554 #include <pthread.h>
11555 int main() {
11556     int detachstate = JOINABLE;
11557 }
11558 EOCP
11559         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11560         if eval $compile; then
11561                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11562                 val="$undef" # Yes, undef.
11563                 set d_old_pthread_create_joinable
11564                 eval $setvar
11565                 val=""
11566                 set old_pthread_create_joinable
11567                 eval $setvar
11568         else
11569                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11570                 if eval $compile; then
11571                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11572                         val="$define"
11573                         set d_old_pthread_create_joinable
11574                         eval $setvar
11575                         val=PTHREAD_CREATE_UNDETACHED
11576                         set old_pthread_create_joinable
11577                         eval $setvar
11578                 else            
11579                         set try -DJOINABLE=__UNDETACHED
11580                         if eval $compile; then
11581                                 echo "You seem to use __UNDETACHED." >&4
11582                                 val="$define"
11583                                 set d_old_pthread_create_joinable
11584                                 eval $setvar
11585                                 val=__UNDETACHED
11586                                 set old_pthread_create_joinable
11587                                 eval $setvar
11588                         else
11589                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11590                                 val="$define"
11591                                 set d_old_pthread_create_joinable
11592                                 eval $setvar
11593                                 val=0
11594                                 set old_pthread_create_joinable
11595                                 eval $setvar
11596                         fi
11597                 fi
11598         fi
11599         $rm -f try try.*
11600 else
11601     d_old_pthread_create_joinable="$undef"
11602     old_pthread_create_joinable=""
11603 fi
11604
11605 : see if pause exists
11606 set pause d_pause
11607 eval $inlibc
11608
11609 : see if pipe exists
11610 set pipe d_pipe
11611 eval $inlibc
11612
11613 : see if poll exists
11614 set poll d_poll
11615 eval $inlibc
11616
11617 : see if readlink exists
11618 set readlink d_readlink
11619 eval $inlibc
11620
11621 echo " "
11622 procselfexe=''
11623 val="$undef"
11624 case "$d_readlink" in
11625 "$define")
11626         if $issymlink /proc/self/exe ; then
11627                 $ls -l /proc/self/exe > reflect
11628                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11629                         echo "You have Linux-like /proc/self/exe."
11630                         procselfexe='"/proc/self/exe"'
11631                         val="$define"
11632                 fi
11633         fi
11634         if $issymlink /proc/curproc/file ; then
11635                 $ls -l /proc/curproc/file > reflect
11636                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11637                         echo "You have BSD-like /proc/curproc/file."
11638                         procselfexe='"/proc/curproc/file"'
11639                         val="$define"
11640                 fi
11641         fi
11642         ;;
11643 esac
11644 $rm -f reflect
11645 set d_procselfexe
11646 eval $setvar
11647
11648 : see if pthread_atfork exists
11649 set pthread_atfork d_pthread_atfork
11650 eval $inlibc
11651
11652
11653 : see whether the various POSIXish _yields exist
11654 $cat >try.c <<EOP
11655 #include <pthread.h>
11656 #include <stdio.h>
11657 int main() {
11658 #ifdef SCHED_YIELD
11659         sched_yield();
11660 #else
11661 #ifdef PTHREAD_YIELD
11662         pthread_yield();
11663 #else
11664 #ifdef PTHREAD_YIELD_NULL
11665         pthread_yield(NULL);
11666 #endif
11667 #endif
11668 #endif
11669 }
11670 EOP
11671 : see if sched_yield exists
11672 set try -DSCHED_YIELD
11673 if eval $compile; then
11674     val="$define"
11675     sched_yield='sched_yield()'
11676 else
11677     val="$undef"
11678 fi
11679 case "$usethreads" in
11680 $define)
11681         case "$val" in
11682         $define) echo 'sched_yield() found.' >&4        ;;
11683         *)       echo 'sched_yield() NOT found.' >&4    ;;
11684         esac
11685 esac
11686 set d_sched_yield
11687 eval $setvar
11688
11689 : see if pthread_yield exists
11690 set try -DPTHREAD_YIELD
11691 if eval $compile; then
11692     val="$define"
11693     case "$sched_yield" in
11694     '') sched_yield='pthread_yield()' ;;
11695     esac
11696 else
11697     set try -DPTHREAD_YIELD_NULL
11698     if eval $compile; then
11699         val="$define"
11700         case "$sched_yield" in
11701         '') sched_yield='pthread_yield(NULL)' ;;
11702         esac
11703     else
11704         val="$undef"
11705     fi
11706 fi
11707 case "$usethreads" in
11708 $define)
11709         case "$val" in
11710         $define) echo 'pthread_yield() found.' >&4      ;;
11711         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11712         esac
11713         ;;
11714 esac
11715 set d_pthread_yield
11716 eval $setvar
11717
11718 case "$sched_yield" in
11719 '') sched_yield=undef ;;
11720 esac
11721
11722 $rm -f try try.*
11723
11724 : see if this is a pwd.h system
11725 set pwd.h i_pwd
11726 eval $inhdr
11727
11728 case "$i_pwd" in
11729 $define)
11730         xxx=`./findhdr pwd.h`
11731         $cppstdin $cppflags $cppminus < $xxx >$$.h
11732
11733         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11734                 val="$define"
11735         else
11736                 val="$undef"
11737         fi
11738         set d_pwquota
11739         eval $setvar
11740
11741         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11742                 val="$define"
11743         else
11744                 val="$undef"
11745         fi
11746         set d_pwage
11747         eval $setvar
11748
11749         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11750                 val="$define"
11751         else
11752                 val="$undef"
11753         fi
11754         set d_pwchange
11755         eval $setvar
11756
11757         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11758                 val="$define"
11759         else
11760                 val="$undef"
11761         fi
11762         set d_pwclass
11763         eval $setvar
11764
11765         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11766                 val="$define"
11767         else
11768                 val="$undef"
11769         fi
11770         set d_pwexpire
11771         eval $setvar
11772
11773         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11774                 val="$define"
11775         else
11776                 val="$undef"
11777         fi
11778         set d_pwcomment
11779         eval $setvar
11780
11781         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11782                 val="$define"
11783         else
11784                 val="$undef"
11785         fi
11786         set d_pwgecos
11787         eval $setvar
11788
11789         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11790                 val="$define"
11791         else
11792                 val="$undef"
11793         fi
11794         set d_pwpasswd
11795         eval $setvar
11796
11797         $rm -f $$.h
11798         ;;
11799 *)
11800         val="$undef"; 
11801         set d_pwquota; eval $setvar
11802         set d_pwage; eval $setvar
11803         set d_pwchange; eval $setvar
11804         set d_pwclass; eval $setvar
11805         set d_pwexpire; eval $setvar
11806         set d_pwcomment; eval $setvar
11807         set d_pwgecos; eval $setvar
11808         set d_pwpasswd; eval $setvar
11809         ;;
11810 esac
11811
11812 : see if readdir and friends exist
11813 set readdir d_readdir
11814 eval $inlibc
11815 set seekdir d_seekdir
11816 eval $inlibc
11817 set telldir d_telldir
11818 eval $inlibc
11819 set rewinddir d_rewinddir
11820 eval $inlibc
11821
11822 : see if readv exists
11823 set readv d_readv
11824 eval $inlibc
11825
11826 : see if recvmsg exists
11827 set recvmsg d_recvmsg
11828 eval $inlibc
11829
11830 : see if rename exists
11831 set rename d_rename
11832 eval $inlibc
11833
11834 : see if rmdir exists
11835 set rmdir d_rmdir
11836 eval $inlibc
11837
11838 : see if memory.h is available.
11839 val=''
11840 set memory.h val
11841 eval $inhdr
11842
11843 : See if it conflicts with string.h
11844 case "$val" in
11845 $define)
11846         case "$strings" in
11847         '') ;;
11848         *)
11849                 $cppstdin $cppflags $cppminus < $strings > mem.h
11850                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11851                         echo " "
11852                         echo "We won't be including <memory.h>."
11853                         val="$undef"
11854                 fi
11855                 $rm -f mem.h
11856                 ;;
11857         esac
11858 esac
11859 set i_memory
11860 eval $setvar
11861
11862 : can bcopy handle overlapping blocks?
11863 echo " "
11864 val="$undef"
11865 case "$d_memmove" in
11866 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11867 *)      case "$d_bcopy" in
11868         "$define")
11869                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11870                 $cat >try.c <<EOCP
11871 #$i_memory I_MEMORY
11872 #$i_stdlib I_STDLIB
11873 #$i_string I_STRING
11874 #$i_unistd I_UNISTD
11875 EOCP
11876         $cat >>try.c <<'EOCP'
11877 #include <stdio.h>
11878 #ifdef I_MEMORY
11879 #  include <memory.h>
11880 #endif
11881 #ifdef I_STDLIB
11882 #  include <stdlib.h>
11883 #endif
11884 #ifdef I_STRING
11885 #  include <string.h>
11886 #else
11887 #  include <strings.h>
11888 #endif
11889 #ifdef I_UNISTD
11890 #  include <unistd.h>  /* Needed for NetBSD */
11891 #endif
11892 int main()
11893 {
11894 char buf[128], abc[128];
11895 char *b;
11896 int len;
11897 int off;
11898 int align;
11899
11900 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11901    try to store the string in read-only memory. */
11902 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11903
11904 for (align = 7; align >= 0; align--) {
11905         for (len = 36; len; len--) {
11906                 b = buf+align;
11907                 bcopy(abc, b, len);
11908                 for (off = 1; off <= len; off++) {
11909                         bcopy(b, b+off, len);
11910                         bcopy(b+off, b, len);
11911                         if (bcmp(b, abc, len))
11912                                 exit(1);
11913                 }
11914         }
11915 }
11916 exit(0);
11917 }
11918 EOCP
11919                 set try
11920                 if eval $compile_ok; then
11921                         if ./try 2>/dev/null; then
11922                                 echo "Yes, it can."
11923                                 val="$define"
11924                         else
11925                                 echo "It can't, sorry."
11926                         fi
11927                 else
11928                         echo "(I can't compile the test program, so we'll assume not...)"
11929                 fi
11930                 ;;
11931         esac
11932         $rm -f try.* try core
11933         ;;
11934 esac
11935 set d_safebcpy
11936 eval $setvar
11937
11938 : can memcpy handle overlapping blocks?
11939 echo " "
11940 val="$undef"
11941 case "$d_memmove" in
11942 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11943 *)      case "$d_memcpy" in
11944         "$define")
11945                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11946                 $cat >try.c <<EOCP
11947 #$i_memory I_MEMORY
11948 #$i_stdlib I_STDLIB
11949 #$i_string I_STRING
11950 #$i_unistd I_UNISTD
11951 EOCP
11952         $cat >>try.c <<'EOCP'
11953 #include <stdio.h>
11954 #ifdef I_MEMORY
11955 #  include <memory.h>
11956 #endif
11957 #ifdef I_STDLIB
11958 #  include <stdlib.h>
11959 #endif
11960 #ifdef I_STRING
11961 #  include <string.h>
11962 #else
11963 #  include <strings.h>
11964 #endif
11965 #ifdef I_UNISTD
11966 #  include <unistd.h>  /* Needed for NetBSD */
11967 #endif
11968 int main()
11969 {
11970 char buf[128], abc[128];
11971 char *b;
11972 int len;
11973 int off;
11974 int align;
11975
11976 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11977    try to store the string in read-only memory. */
11978 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11979
11980 for (align = 7; align >= 0; align--) {
11981         for (len = 36; len; len--) {
11982                 b = buf+align;
11983                 memcpy(b, abc, len);
11984                 for (off = 1; off <= len; off++) {
11985                         memcpy(b+off, b, len);
11986                         memcpy(b, b+off, len);
11987                         if (memcmp(b, abc, len))
11988                                 exit(1);
11989                 }
11990         }
11991 }
11992 exit(0);
11993 }
11994 EOCP
11995                 set try
11996                 if eval $compile_ok; then
11997                         if ./try 2>/dev/null; then
11998                                 echo "Yes, it can."
11999                                 val="$define"
12000                         else
12001                                 echo "It can't, sorry."
12002                         fi
12003                 else
12004                         echo "(I can't compile the test program, so we'll assume not...)"
12005                 fi
12006                 ;;
12007         esac
12008         $rm -f try.* try core
12009         ;;
12010 esac
12011 set d_safemcpy
12012 eval $setvar
12013
12014 : can memcmp be trusted to compare relative magnitude?
12015 val="$undef"
12016 case "$d_memcmp" in
12017 "$define")
12018         echo " "
12019         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12020         $cat >try.c <<EOCP
12021 #$i_memory I_MEMORY
12022 #$i_stdlib I_STDLIB
12023 #$i_string I_STRING
12024 #$i_unistd I_UNISTD
12025 EOCP
12026         $cat >>try.c <<'EOCP'
12027 #include <stdio.h>
12028 #ifdef I_MEMORY
12029 #  include <memory.h>
12030 #endif
12031 #ifdef I_STDLIB
12032 #  include <stdlib.h>
12033 #endif
12034 #ifdef I_STRING
12035 #  include <string.h>
12036 #else
12037 #  include <strings.h>
12038 #endif
12039 #ifdef I_UNISTD
12040 #  include <unistd.h>  /* Needed for NetBSD */
12041 #endif
12042 int main()
12043 {
12044 char a = -1;
12045 char b = 0;
12046 if ((a < b) && memcmp(&a, &b, 1) < 0)
12047         exit(1);
12048 exit(0);
12049 }
12050 EOCP
12051         set try
12052         if eval $compile_ok; then
12053                 if $run ./try 2>/dev/null; then
12054                         echo "Yes, it can."
12055                         val="$define"
12056                 else
12057                         echo "No, it can't (it uses signed chars)."
12058                 fi
12059         else
12060                 echo "(I can't compile the test program, so we'll assume not...)"
12061         fi
12062         ;;
12063 esac
12064 $rm -f try.* try core
12065 set d_sanemcmp
12066 eval $setvar
12067
12068 : see if prototype for sbrk is available
12069 echo " "
12070 set d_sbrkproto sbrk $i_unistd unistd.h
12071 eval $hasproto
12072
12073 : see if select exists
12074 set select d_select
12075 eval $inlibc
12076
12077 : see if semctl exists
12078 set semctl d_semctl
12079 eval $inlibc
12080
12081 : see if semget exists
12082 set semget d_semget
12083 eval $inlibc
12084
12085 : see if semop exists
12086 set semop d_semop
12087 eval $inlibc
12088
12089 : see how much of the 'sem*(2)' library is present.
12090 h_sem=true
12091 echo " "
12092 case "$d_semctl$d_semget$d_semop" in
12093 *"$undef"*) h_sem=false;;
12094 esac
12095 case "$osname" in
12096 freebsd)
12097     case "`ipcs 2>&1`" in
12098     "SVID messages"*"not configured"*)
12099         echo "Your $osname does not have the sem*(2) configured." >&4
12100         h_sem=false
12101         val="$undef"
12102         set semctl d_semctl
12103         eval $setvar
12104         set semget d_semget
12105         eval $setvar
12106         set semop d_semop
12107         eval $setvar
12108         ;;
12109     esac
12110     ;;
12111 esac
12112 : we could also check for sys/ipc.h ...
12113 if $h_sem && $test `./findhdr sys/sem.h`; then
12114         echo "You have the full sem*(2) library." >&4
12115         val="$define"
12116 else
12117         echo "You don't have the full sem*(2) library." >&4
12118         val="$undef"
12119 fi
12120 set d_sem
12121 eval $setvar
12122
12123 : see whether sys/sem.h defines union semun
12124 echo " "
12125 $cat > try.c <<'END'
12126 #include <sys/types.h>
12127 #include <sys/ipc.h>
12128 #include <sys/sem.h>
12129 int main () { union semun semun; semun.buf = 0; }
12130 END
12131 set try
12132 if eval $compile; then
12133     echo "You have union semun in <sys/sem.h>." >&4
12134     val="$define"
12135 else
12136     echo "You do not have union semun in <sys/sem.h>." >&4
12137     val="$undef"
12138 fi
12139 $rm -f try try.c try.h
12140 set d_union_semun
12141 eval $setvar
12142
12143 : see how to do semctl IPC_STAT
12144 case "$d_sem" in
12145 $define)
12146     : see whether semctl IPC_STAT can use union semun
12147     echo " "
12148     $cat > try.h <<END
12149 #ifndef S_IRUSR
12150 #   ifdef S_IREAD
12151 #       define S_IRUSR S_IREAD
12152 #       define S_IWUSR S_IWRITE
12153 #       define S_IXUSR S_IEXEC
12154 #   else
12155 #       define S_IRUSR 0400
12156 #       define S_IWUSR 0200
12157 #       define S_IXUSR 0100
12158 #   endif
12159 #   define S_IRGRP (S_IRUSR>>3)
12160 #   define S_IWGRP (S_IWUSR>>3)
12161 #   define S_IXGRP (S_IXUSR>>3)
12162 #   define S_IROTH (S_IRUSR>>6)
12163 #   define S_IWOTH (S_IWUSR>>6)
12164 #   define S_IXOTH (S_IXUSR>>6)
12165 #endif
12166 #ifndef S_IRWXU
12167 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12168 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12169 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12170 #endif
12171 END
12172
12173     $cat > try.c <<END
12174 #include <sys/types.h>
12175 #include <sys/ipc.h>
12176 #include <sys/sem.h>
12177 #include <sys/stat.h>
12178 #include <stdio.h>
12179 #include <errno.h>
12180 #include "try.h"
12181 #ifndef errno
12182 extern int errno;
12183 #endif
12184 #$d_union_semun HAS_UNION_SEMUN
12185 int main() {
12186     union semun
12187 #ifndef HAS_UNION_SEMUN
12188     {
12189         int val;
12190         struct semid_ds *buf;
12191         unsigned short *array;
12192     }
12193 #endif
12194     arg;
12195     int sem, st;
12196
12197 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12198     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12199     if (sem > -1) {
12200         struct semid_ds argbuf;
12201         arg.buf = &argbuf;
12202 #       ifdef IPC_STAT
12203         st = semctl(sem, 0, IPC_STAT, arg);
12204         if (st == 0)
12205             printf("semun\n");
12206         else
12207 #       endif /* IPC_STAT */
12208             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12209 #       ifdef IPC_RMID
12210         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12211 #       endif /* IPC_RMID */
12212             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12213     } else
12214 #endif /* IPC_PRIVATE && ... */
12215         printf("semget failed: errno = %d\n", errno);
12216   return 0;
12217 }
12218 END
12219     val="$undef"
12220     set try
12221     if eval $compile; then
12222         xxx=`$run ./try`
12223         case "$xxx" in
12224         semun) val="$define" ;;
12225         esac
12226     fi
12227     $rm -f try try.c
12228     set d_semctl_semun
12229     eval $setvar
12230     case "$d_semctl_semun" in
12231     $define)
12232         echo "You can use union semun for semctl IPC_STAT." >&4
12233         also='also'
12234         ;;
12235     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12236         also=''
12237         ;;
12238     esac
12239
12240     : see whether semctl IPC_STAT can use struct semid_ds pointer
12241     $cat > try.c <<'END'
12242 #include <sys/types.h>
12243 #include <sys/ipc.h>
12244 #include <sys/sem.h>
12245 #include <sys/stat.h>
12246 #include "try.h"
12247 #include <stdio.h>
12248 #include <errno.h>
12249 #ifndef errno
12250 extern int errno;
12251 #endif
12252 int main() {
12253     struct semid_ds arg;
12254     int sem, st;
12255
12256 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12257     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12258     if (sem > -1) {
12259 #       ifdef IPC_STAT
12260         st = semctl(sem, 0, IPC_STAT, &arg);
12261         if (st == 0)
12262             printf("semid_ds\n");
12263         else
12264 #       endif /* IPC_STAT */
12265             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12266 #       ifdef IPC_RMID
12267         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12268 #       endif /* IPC_RMID */
12269             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12270     } else
12271 #endif /* IPC_PRIVATE && ... */
12272         printf("semget failed: errno = %d\n", errno);
12273
12274     return 0;
12275 }
12276 END
12277     val="$undef"
12278     set try
12279     if eval $compile; then
12280         xxx=`$run ./try`
12281         case "$xxx" in
12282         semid_ds) val="$define" ;;
12283         esac
12284     fi
12285     $rm -f try try.c
12286     set d_semctl_semid_ds
12287     eval $setvar
12288     case "$d_semctl_semid_ds" in
12289     $define)
12290         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12291         ;;
12292     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12293         ;;
12294     esac
12295     $rm -f try.h
12296     ;;
12297 *)  val="$undef"
12298
12299     # We do not have the full sem*(2) library, so assume we can not
12300     # use either.
12301
12302     set d_semctl_semun
12303     eval $setvar
12304
12305     set d_semctl_semid_ds
12306     eval $setvar
12307     ;;
12308 esac
12309
12310 : see if sendmsg exists
12311 set sendmsg d_sendmsg
12312 eval $inlibc
12313
12314 : see if setegid exists
12315 set setegid d_setegid
12316 eval $inlibc
12317
12318 : see if seteuid exists
12319 set seteuid d_seteuid
12320 eval $inlibc
12321
12322 : see if setgrent exists
12323 set setgrent d_setgrent
12324 eval $inlibc
12325
12326 : see if sethostent exists
12327 set sethostent d_sethent
12328 eval $inlibc
12329
12330 : see if setitimer exists
12331 set setitimer d_setitimer
12332 eval $inlibc
12333
12334 : see if setlinebuf exists
12335 set setlinebuf d_setlinebuf
12336 eval $inlibc
12337
12338 : see if setlocale exists
12339 set setlocale d_setlocale
12340 eval $inlibc
12341
12342 : see if setnetent exists
12343 set setnetent d_setnent
12344 eval $inlibc
12345
12346 : see if setprotoent exists
12347 set setprotoent d_setpent
12348 eval $inlibc
12349
12350 : see if setpgid exists
12351 set setpgid d_setpgid
12352 eval $inlibc
12353
12354 : see if setpgrp2 exists
12355 set setpgrp2 d_setpgrp2
12356 eval $inlibc
12357
12358 : see if setpriority exists
12359 set setpriority d_setprior
12360 eval $inlibc
12361
12362 : see if setproctitle exists
12363 set setproctitle d_setproctitle
12364 eval $inlibc
12365
12366 : see if setpwent exists
12367 set setpwent d_setpwent
12368 eval $inlibc
12369
12370 : see if setregid exists
12371 set setregid d_setregid
12372 eval $inlibc
12373 set setresgid d_setresgid
12374 eval $inlibc
12375
12376 : see if setreuid exists
12377 set setreuid d_setreuid
12378 eval $inlibc
12379 set setresuid d_setresuid
12380 eval $inlibc
12381
12382 : see if setrgid exists
12383 set setrgid d_setrgid
12384 eval $inlibc
12385
12386 : see if setruid exists
12387 set setruid d_setruid
12388 eval $inlibc
12389
12390 : see if setservent exists
12391 set setservent d_setsent
12392 eval $inlibc
12393
12394 : see if setsid exists
12395 set setsid d_setsid
12396 eval $inlibc
12397
12398 : see if setvbuf exists
12399 set setvbuf d_setvbuf
12400 eval $inlibc
12401
12402 : see if sfio.h is available
12403 set sfio.h i_sfio
12404 eval $inhdr
12405
12406
12407 : see if sfio library is available
12408 case "$i_sfio" in
12409 $define)
12410         val=''
12411         set sfreserve val
12412         eval $inlibc
12413         ;;
12414 *)
12415         val="$undef"
12416         ;;
12417 esac
12418 : Ok, but do we want to use it.
12419 case "$val" in
12420 $define)
12421         case "$usesfio" in
12422         true|$define|[yY]*) dflt='y';;
12423         *) dflt='n';;
12424         esac
12425         echo "$package can use the sfio library, but it is experimental."
12426         case "$useperlio" in
12427         "$undef")
12428             echo "For sfio also the PerlIO abstraction layer is needed."
12429             echo "Earlier you said you wouldn't want that."
12430             ;;
12431         esac
12432         rp="You seem to have sfio available, do you want to try using it?"
12433         . ./myread
12434         case "$ans" in
12435         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12436                 useperlio="$define"
12437                 val="$define"
12438                 ;;
12439         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12440                 val="$undef"
12441                 ;;
12442         esac
12443         ;;
12444 *)      case "$usesfio" in
12445         true|$define|[yY]*)
12446                 echo "Sorry, cannot find sfio on this machine." >&4
12447                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12448                 val="$undef"
12449                 ;;
12450         esac
12451         ;;
12452 esac
12453 set d_sfio
12454 eval $setvar
12455 case "$d_sfio" in
12456 $define) usesfio='true';;
12457 *) usesfio='false';;
12458 esac
12459 case "$d_sfio" in
12460 $define) ;;
12461 *)      : Remove sfio from list of libraries to use
12462         case "$libs" in
12463         *-lsfio*)
12464                 echo "Removing unneeded -lsfio from library list" >&4
12465                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12466                 shift
12467                 libs="$*"
12468                 echo "libs = $libs" >&4
12469                 ;;
12470         esac
12471 ;;
12472 esac
12473
12474
12475 : see if shmctl exists
12476 set shmctl d_shmctl
12477 eval $inlibc
12478
12479 : see if shmget exists
12480 set shmget d_shmget
12481 eval $inlibc
12482
12483 : see if shmat exists
12484 set shmat d_shmat
12485 eval $inlibc
12486 : see what shmat returns
12487 case "$d_shmat" in
12488 "$define")
12489         $cat >shmat.c <<'END'
12490 #include <sys/shm.h>
12491 void *shmat();
12492 END
12493         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12494                 shmattype='void *'
12495         else
12496                 shmattype='char *'
12497         fi
12498         echo "and it returns ($shmattype)." >&4
12499         : see if a prototype for shmat is available
12500         xxx=`./findhdr sys/shm.h`
12501         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12502         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12503                 val="$define"
12504         else
12505                 val="$undef"
12506         fi
12507         $rm -f shmat.[co]
12508         ;;
12509 *)
12510         val="$undef"
12511         ;;
12512 esac
12513 set d_shmatprototype
12514 eval $setvar
12515
12516 : see if shmdt exists
12517 set shmdt d_shmdt
12518 eval $inlibc
12519
12520 : see how much of the 'shm*(2)' library is present.
12521 h_shm=true
12522 echo " "
12523 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12524 *"$undef"*) h_shm=false;;
12525 esac
12526 case "$osname" in
12527 freebsd)
12528     case "`ipcs 2>&1`" in
12529     "SVID shared memory"*"not configured"*)
12530         echo "Your $osname does not have the shm*(2) configured." >&4
12531         h_shm=false
12532         val="$undef"
12533         set shmctl d_shmctl
12534         evat $setvar
12535         set shmget d_shmget
12536         evat $setvar
12537         set shmat d_shmat
12538         evat $setvar
12539         set shmdt d_shmdt
12540         evat $setvar
12541         ;;
12542     esac
12543     ;;
12544 esac
12545 : we could also check for sys/ipc.h ...
12546 if $h_shm && $test `./findhdr sys/shm.h`; then
12547         echo "You have the full shm*(2) library." >&4
12548         val="$define"
12549 else
12550         echo "You don't have the full shm*(2) library." >&4
12551         val="$undef"
12552 fi
12553 set d_shm
12554 eval $setvar
12555
12556 echo " "
12557 : see if we have sigaction
12558 if set sigaction val -f d_sigaction; eval $csym; $val; then
12559         echo 'sigaction() found.' >&4
12560         $cat > try.c <<'EOP'
12561 #include <stdio.h>
12562 #include <sys/types.h>
12563 #include <signal.h>
12564 int main()
12565 {
12566     struct sigaction act, oact;
12567     act.sa_flags = 0;
12568     oact.sa_handler = 0;
12569     /* so that act and oact are used */
12570     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12571 }
12572 EOP
12573         set try
12574         if eval $compile_ok; then
12575                 val="$define"
12576         else
12577                 echo "But you don't seem to have a useable struct sigaction." >&4
12578                 val="$undef"
12579         fi
12580 else
12581         echo 'sigaction NOT found.' >&4
12582         val="$undef"
12583 fi
12584 set d_sigaction; eval $setvar
12585 $rm -f try try$_o try.c
12586
12587 : see if sigprocmask exists
12588 set sigprocmask d_sigprocmask
12589 eval $inlibc
12590
12591 : see if sigsetjmp exists
12592 echo " "
12593 case "$d_sigsetjmp" in
12594 '')
12595         $cat >try.c <<'EOP'
12596 #include <setjmp.h>
12597 sigjmp_buf env;
12598 int set = 1;
12599 int main()
12600 {
12601         if (sigsetjmp(env,1))
12602                 exit(set);
12603         set = 0;
12604         siglongjmp(env, 1);
12605         exit(1);
12606 }
12607 EOP
12608         set try
12609         if eval $compile; then
12610                 if $run ./try >/dev/null 2>&1; then
12611                         echo "POSIX sigsetjmp found." >&4
12612                         val="$define"
12613                 else
12614                         $cat >&4 <<EOM
12615 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12616 I'll ignore them.
12617 EOM
12618                         val="$undef"
12619                 fi
12620         else
12621                 echo "sigsetjmp not found." >&4
12622                 val="$undef"
12623         fi
12624         ;;
12625 *) val="$d_sigsetjmp"
12626         case "$d_sigsetjmp" in
12627         $define) echo "POSIX sigsetjmp found." >&4;;
12628         $undef) echo "sigsetjmp not found." >&4;;
12629         esac
12630         ;;
12631 esac
12632 set d_sigsetjmp
12633 eval $setvar
12634 $rm -f try.c try
12635
12636 : see if sockatmark exists
12637 set sockatmark d_sockatmark
12638 eval $inlibc
12639
12640 : see if prototype for sockatmark is available
12641 echo " "
12642 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12643 eval $hasproto
12644
12645 : see if socks5_init exists
12646 set socks5_init d_socks5_init
12647 eval $inlibc
12648
12649 : see if prototype for setresgid is available
12650 echo " "
12651 set d_sresgproto setresgid $i_unistd unistd.h
12652 eval $hasproto
12653
12654 : see if prototype for setresuid is available
12655 echo " "
12656 set d_sresuproto setresuid $i_unistd unistd.h
12657 eval $hasproto
12658
12659 : see if sys/stat.h is available
12660 set sys/stat.h i_sysstat
12661 eval $inhdr
12662
12663
12664 : see if stat knows about block sizes
12665 echo " "
12666 echo "Checking to see if your struct stat has st_blocks field..." >&4
12667 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12668 eval $hasfield
12669
12670
12671 : see if this is a sys/vfs.h system
12672 set sys/vfs.h i_sysvfs
12673 eval $inhdr
12674
12675
12676 : see if this is a sys/statfs.h system
12677 set sys/statfs.h i_sysstatfs
12678 eval $inhdr
12679
12680
12681 echo " "
12682 echo "Checking to see if your system supports struct statfs..." >&4
12683 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
12684 eval $hasstruct
12685 case "$d_statfs_s" in
12686 "$define")      echo "Yes, it does."   ;;
12687 *)              echo "No, it doesn't." ;;
12688 esac
12689
12690
12691
12692 : see if struct statfs knows about f_flags
12693 case "$d_statfs_s" in
12694 define) 
12695         echo " "
12696         echo "Checking to see if your struct statfs has f_flags field..." >&4
12697         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
12698         eval $hasfield
12699         ;;
12700 *)      val="$undef"
12701         set d_statfs_f_flags
12702         eval $setvar
12703         ;;
12704 esac
12705 case "$d_statfs_f_flags" in
12706 "$define")      echo "Yes, it does."   ;;
12707 *)              echo "No, it doesn't." ;;
12708 esac
12709
12710 : see if _ptr and _cnt from stdio act std
12711 echo " "
12712
12713 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12714         echo "(Looks like you have stdio.h from BSD.)"
12715         case "$stdio_ptr" in
12716         '') stdio_ptr='((fp)->_p)'
12717                 ptr_lval=$define
12718                 ;;
12719         *)      ptr_lval=$d_stdio_ptr_lval;;
12720         esac
12721         case "$stdio_cnt" in
12722         '') stdio_cnt='((fp)->_r)'
12723                 cnt_lval=$define
12724                 ;;
12725         *)      cnt_lval=$d_stdio_cnt_lval;;
12726         esac
12727         case "$stdio_base" in
12728         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12729         esac
12730         case "$stdio_bufsiz" in
12731         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12732         esac
12733 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12734         echo "(Looks like you have stdio.h from Linux.)"
12735         case "$stdio_ptr" in
12736         '') stdio_ptr='((fp)->_IO_read_ptr)'
12737                 ptr_lval=$define
12738                 ;;
12739         *)      ptr_lval=$d_stdio_ptr_lval;;
12740         esac
12741         case "$stdio_cnt" in
12742         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12743                 cnt_lval=$undef
12744                 ;;
12745         *)      cnt_lval=$d_stdio_cnt_lval;;
12746         esac
12747         case "$stdio_base" in
12748         '') stdio_base='((fp)->_IO_read_base)';;
12749         esac
12750         case "$stdio_bufsiz" in
12751         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12752         esac
12753 else
12754         case "$stdio_ptr" in
12755         '') stdio_ptr='((fp)->_ptr)'
12756                 ptr_lval=$define
12757                 ;;
12758         *)      ptr_lval=$d_stdio_ptr_lval;;
12759         esac
12760         case "$stdio_cnt" in
12761         '') stdio_cnt='((fp)->_cnt)'
12762                 cnt_lval=$define
12763                 ;;
12764         *)      cnt_lval=$d_stdio_cnt_lval;;
12765         esac
12766         case "$stdio_base" in
12767         '') stdio_base='((fp)->_base)';;
12768         esac
12769         case "$stdio_bufsiz" in
12770         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12771         esac
12772 fi
12773
12774 : test whether _ptr and _cnt really work
12775 echo "Checking how std your stdio is..." >&4
12776 $cat >try.c <<EOP
12777 #include <stdio.h>
12778 #define FILE_ptr(fp)    $stdio_ptr
12779 #define FILE_cnt(fp)    $stdio_cnt
12780 int main() {
12781         FILE *fp = fopen("try.c", "r");
12782         char c = getc(fp);
12783         if (
12784                 18 <= FILE_cnt(fp) &&
12785                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12786         )
12787                 exit(0);
12788         exit(1);
12789 }
12790 EOP
12791 val="$undef"
12792 set try
12793 if eval $compile && $to try.c; then
12794         if $run ./try; then
12795                 echo "Your stdio acts pretty std."
12796                 val="$define"
12797         else
12798                 echo "Your stdio isn't very std."
12799         fi
12800 else
12801         echo "Your stdio doesn't appear very std."
12802 fi
12803 $rm -f try.c try
12804 set d_stdstdio
12805 eval $setvar
12806
12807 : Can _ptr be used as an lvalue?
12808 case "$d_stdstdio$ptr_lval" in
12809 $define$define) val=$define ;;
12810 *) val=$undef ;;
12811 esac
12812 set d_stdio_ptr_lval
12813 eval $setvar
12814
12815 : Can _cnt be used as an lvalue?
12816 case "$d_stdstdio$cnt_lval" in
12817 $define$define) val=$define ;;
12818 *) val=$undef ;;
12819 esac
12820 set d_stdio_cnt_lval
12821 eval $setvar
12822
12823
12824 : test whether setting _ptr sets _cnt as a side effect
12825 d_stdio_ptr_lval_sets_cnt="$undef"
12826 d_stdio_ptr_lval_nochange_cnt="$undef"
12827 case "$d_stdio_ptr_lval$d_stdstdio" in
12828 $define$define)
12829         echo "Checking to see what happens if we set the stdio ptr..." >&4
12830 $cat >try.c <<EOP
12831 #include <stdio.h>
12832 /* Can we scream? */
12833 /* Eat dust sed :-) */
12834 /* In the buffer space, no one can hear you scream. */
12835 #define FILE_ptr(fp)    $stdio_ptr
12836 #define FILE_cnt(fp)    $stdio_cnt
12837 #include <sys/types.h>
12838 int main() {
12839         FILE *fp = fopen("try.c", "r");
12840         int c;
12841         char *ptr;
12842         size_t cnt;
12843         if (!fp) {
12844             puts("Fail even to read");
12845             exit(1);
12846         }
12847         c = getc(fp); /* Read away the first # */
12848         if (c == EOF) {
12849             puts("Fail even to read");
12850             exit(1);
12851         }
12852         if (!(
12853                 18 <= FILE_cnt(fp) &&
12854                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12855         )) {
12856                 puts("Fail even to read");
12857                 exit (1);
12858         }
12859         ptr = (char*) FILE_ptr(fp);
12860         cnt = (size_t)FILE_cnt(fp);
12861
12862         FILE_ptr(fp) += 42;
12863
12864         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12865                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12866                 exit (1);
12867         }
12868         if (FILE_cnt(fp) <= 20) {
12869                 printf ("Fail (<20 chars to test)");
12870                 exit (1);
12871         }
12872         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12873                 puts("Fail compare");
12874                 exit (1);
12875         }
12876         if (cnt == FILE_cnt(fp)) {
12877                 puts("Pass_unchanged");
12878                 exit (0);
12879         }       
12880         if (FILE_cnt(fp) == (cnt - 42)) {
12881                 puts("Pass_changed");
12882                 exit (0);
12883         }
12884         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12885         return 1;
12886
12887 }
12888 EOP
12889         set try
12890         if eval $compile && $to try.c; then
12891                 case `$run ./try` in
12892                 Pass_changed)
12893                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12894                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12895                 Pass_unchanged)
12896                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12897                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12898                 Fail*)
12899                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12900                 *)
12901                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12902         esac
12903         else
12904                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12905         fi
12906         $rm -f try.c try
12907         ;;
12908 esac
12909
12910 : see if _base is also standard
12911 val="$undef"
12912 case "$d_stdstdio" in
12913 $define)
12914         $cat >try.c <<EOP
12915 #include <stdio.h>
12916 #define FILE_base(fp)   $stdio_base
12917 #define FILE_bufsiz(fp) $stdio_bufsiz
12918 int main() {
12919         FILE *fp = fopen("try.c", "r");
12920         char c = getc(fp);
12921         if (
12922                 19 <= FILE_bufsiz(fp) &&
12923                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12924         )
12925                 exit(0);
12926         exit(1);
12927 }
12928 EOP
12929         set try
12930         if eval $compile && $to try.c; then
12931                 if $run ./try; then
12932                         echo "And its _base field acts std."
12933                         val="$define"
12934                 else
12935                         echo "But its _base field isn't std."
12936                 fi
12937         else
12938                 echo "However, it seems to be lacking the _base field."
12939         fi
12940         $rm -f try.c try
12941         ;;
12942 esac
12943 set d_stdiobase
12944 eval $setvar
12945
12946 $cat >&4 <<EOM
12947 Checking how to access stdio streams by file descriptor number...
12948 EOM
12949 case "$stdio_stream_array" in
12950 '')     $cat >try.c <<EOCP
12951 #include <stdio.h>
12952 int main() {
12953   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12954     printf("yes\n");
12955 }
12956 EOCP
12957         for s in _iob __iob __sF
12958         do
12959                 set try -DSTDIO_STREAM_ARRAY=$s
12960                 if eval $compile; then
12961                         case "`$run ./try`" in
12962                         yes)    stdio_stream_array=$s; break ;;
12963                         esac
12964                 fi
12965         done
12966         $rm -f try.* try$exe_ext
12967 esac
12968 case "$stdio_stream_array" in
12969 '')     $cat >&4 <<EOM
12970 I can't figure out how to access stdio streams by file descriptor number.
12971 EOM
12972         d_stdio_stream_array="$undef"
12973         ;;
12974 *)      $cat >&4 <<EOM
12975 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12976 EOM
12977         d_stdio_stream_array="$define"
12978         ;;
12979 esac
12980
12981 : see if strcoll exists
12982 set strcoll d_strcoll
12983 eval $inlibc
12984
12985 : check for structure copying
12986 echo " "
12987 echo "Checking to see if your C compiler can copy structs..." >&4
12988 $cat >try.c <<'EOCP'
12989 int main()
12990 {
12991         struct blurfl {
12992                 int dyick;
12993         } foo, bar;
12994
12995         foo = bar;
12996 }
12997 EOCP
12998 if $cc -c try.c >/dev/null 2>&1 ; then
12999         val="$define"
13000         echo "Yup, it can."
13001 else
13002         val="$undef"
13003         echo "Nope, it can't."
13004 fi
13005 set d_strctcpy
13006 eval $setvar
13007 $rm -f try.*
13008
13009 : see if strerror and/or sys_errlist[] exist
13010 echo " "
13011 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13012     if set strerror val -f d_strerror; eval $csym; $val; then
13013                 echo 'strerror() found.' >&4
13014                 d_strerror="$define"
13015                 d_strerrm='strerror(e)'
13016                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13017                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13018                         d_syserrlst="$define"
13019                 else
13020                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13021                         d_syserrlst="$undef"
13022                 fi
13023     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13024                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13025                 echo 'strerror() found in string header.' >&4
13026                 d_strerror="$define"
13027                 d_strerrm='strerror(e)'
13028                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13029                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13030                                 d_syserrlst="$define"
13031                 else
13032                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13033                         d_syserrlst="$undef"
13034                 fi
13035     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13036                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13037                 d_strerror="$undef"
13038                 d_syserrlst="$define"
13039                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13040     else
13041                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13042                 d_strerror="$undef"
13043                 d_syserrlst="$undef"
13044                 d_strerrm='"unknown"'
13045     fi
13046 fi
13047
13048 : see if strftime exists
13049 set strftime d_strftime
13050 eval $inlibc
13051
13052 : see if strtod exists
13053 set strtod d_strtod
13054 eval $inlibc
13055
13056 : see if strtol exists
13057 set strtol d_strtol
13058 eval $inlibc
13059
13060 : see if strtold exists
13061 set strtold d_strtold
13062 eval $inlibc
13063
13064 : see if strtoll exists
13065 set strtoll d_strtoll
13066 eval $inlibc
13067
13068 case "$d_longlong-$d_strtoll" in
13069 "$define-$define")
13070         $cat <<EOM
13071 Checking whether your strtoll() works okay...
13072 EOM
13073         $cat >try.c <<'EOCP'
13074 #include <errno.h>
13075 #ifdef __hpux
13076 #define strtoll __strtoll
13077 #endif
13078 #ifdef __EMX__
13079 #define strtoll _strtoll
13080 #endif
13081 #include <stdio.h>
13082 extern long long int strtoll(char *s, char **, int); 
13083 static int bad = 0;
13084 int check(char *s, long long ell, int een) {
13085         long long gll;
13086         errno = 0;
13087         gll = strtoll(s, 0, 10);
13088         if (!((gll == ell) && (errno == een)))
13089                 bad++;
13090 }
13091 int main() {
13092         check(" 1",                                      1LL, 0);
13093         check(" 0",                                      0LL, 0);
13094         check("-1",                                     -1LL, 0);
13095         check("-9223372036854775808", -9223372036854775808LL, 0);
13096         check("-9223372036854775808", -9223372036854775808LL, 0);
13097         check(" 9223372036854775807",  9223372036854775807LL, 0);
13098         check("-9223372036854775808", -9223372036854775808LL, 0);
13099         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13100         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13101         if (!bad)
13102                 printf("ok\n");
13103 }
13104 EOCP
13105         set try
13106         if eval $compile; then
13107                 yyy=`$run ./try`
13108                 case "$yyy" in
13109                 ok) echo "Your strtoll() seems to be working okay." ;;
13110                 *) cat <<EOM >&4
13111 Your strtoll() doesn't seem to be working okay.
13112 EOM
13113                    d_strtoll="$undef"
13114                    ;;
13115                 esac
13116         else
13117                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13118                 d_strtoll="$undef"
13119         fi
13120         ;;
13121 esac
13122
13123 : see if strtoq exists
13124 set strtoq d_strtoq
13125 eval $inlibc
13126
13127 : see if strtoul exists
13128 set strtoul d_strtoul
13129 eval $inlibc
13130
13131 case "$d_strtoul" in
13132 "$define")
13133         $cat <<EOM
13134 Checking whether your strtoul() works okay...
13135 EOM
13136         $cat >try.c <<'EOCP'
13137 #include <errno.h>
13138 #include <stdio.h>
13139 extern unsigned long int strtoul(char *s, char **, int); 
13140 static int bad = 0;
13141 void check(char *s, unsigned long eul, int een) {
13142         unsigned long gul;
13143         errno = 0;
13144         gul = strtoul(s, 0, 10);
13145         if (!((gul == eul) && (errno == een)))
13146                 bad++;
13147 }
13148 int main() {
13149         check(" 1", 1L, 0);
13150         check(" 0", 0L, 0);
13151 EOCP
13152         case "$longsize" in
13153         8)
13154             $cat >>try.c <<'EOCP'
13155         check("18446744073709551615", 18446744073709551615UL, 0);
13156         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13157 #if 0 /* strtoul() for /^-/ strings is undefined. */
13158         check("-1", 18446744073709551615UL, 0);
13159         check("-18446744073709551614", 2, 0);
13160         check("-18446744073709551615", 1, 0);
13161         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13162         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13163 #endif
13164 EOCP
13165                 ;;
13166         4)
13167                     $cat >>try.c <<'EOCP'
13168         check("4294967295", 4294967295UL, 0);
13169         check("4294967296", 4294967295UL, ERANGE);
13170 #if 0 /* strtoul() for /^-/ strings is undefined. */
13171         check("-1", 4294967295UL, 0);
13172         check("-4294967294", 2, 0);
13173         check("-4294967295", 1, 0);
13174         check("-4294967296", 4294967295UL, ERANGE);
13175         check("-4294967297", 4294967295UL, ERANGE);
13176 #endif
13177 EOCP
13178                 ;;
13179         *)
13180 : Should we write these tests to be more portable by sprintf-ing
13181 : ~0 and then manipulating that char string as input for strtol?
13182                 ;;
13183         esac
13184         $cat >>try.c <<'EOCP'
13185         if (!bad)
13186                 printf("ok\n");
13187         return 0;
13188 }
13189 EOCP
13190         set try
13191         if eval $compile; then
13192                 case "`$run ./try`" in
13193                 ok) echo "Your strtoul() seems to be working okay." ;;
13194                 *) cat <<EOM >&4
13195 Your strtoul() doesn't seem to be working okay.
13196 EOM
13197                    d_strtoul="$undef"
13198                    ;;
13199                 esac
13200         fi
13201         ;;
13202 esac
13203
13204 : see if strtoull exists
13205 set strtoull d_strtoull
13206 eval $inlibc
13207
13208 case "$d_longlong-$d_strtoull" in
13209 "$define-$define")
13210         $cat <<EOM
13211 Checking whether your strtoull() works okay...
13212 EOM
13213         $cat >try.c <<'EOCP'
13214 #include <errno.h>
13215 #ifdef __hpux
13216 #define strtoull __strtoull
13217 #endif
13218 #include <stdio.h>
13219 extern unsigned long long int strtoull(char *s, char **, int); 
13220 static int bad = 0;
13221 int check(char *s, long long eull, int een) {
13222         long long gull;
13223         errno = 0;
13224         gull = strtoull(s, 0, 10);
13225         if (!((gull == eull) && (errno == een)))
13226                 bad++;
13227 }
13228 int main() {
13229         check(" 1",                                        1LL, 0);
13230         check(" 0",                                        0LL, 0);
13231         check("18446744073709551615",  18446744073709551615ULL, 0);
13232         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13233 #if 0 /* strtoull() for /^-/ strings is undefined. */
13234         check("-1",                    18446744073709551615ULL, 0);
13235         check("-18446744073709551614",                     2LL, 0);
13236         check("-18446744073709551615",                     1LL, 0);
13237         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13238         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13239 #endif
13240         if (!bad)
13241                 printf("ok\n");
13242 }
13243 EOCP
13244         set try
13245         if eval $compile; then
13246                 case "`$run ./try`" in
13247                 ok) echo "Your strtoull() seems to be working okay." ;;
13248                 *) cat <<EOM >&4
13249 Your strtoull() doesn't seem to be working okay.
13250 EOM
13251                    d_strtoull="$undef"
13252                    ;;
13253                 esac
13254         fi
13255         ;;
13256 esac
13257
13258 : see if strtouq exists
13259 set strtouq d_strtouq
13260 eval $inlibc
13261
13262 case "$d_strtouq" in
13263 "$define")
13264         $cat <<EOM
13265 Checking whether your strtouq() works okay...
13266 EOM
13267         $cat >try.c <<'EOCP'
13268 #include <errno.h>
13269 #include <stdio.h>
13270 extern unsigned long long int strtouq(char *s, char **, int); 
13271 static int bad = 0;
13272 void check(char *s, unsigned long long eull, int een) {
13273         unsigned long long gull;
13274         errno = 0;
13275         gull = strtouq(s, 0, 10);
13276         if (!((gull == eull) && (errno == een)))
13277                 bad++;
13278 }
13279 int main() {
13280         check(" 1",                                        1LL, 0);
13281         check(" 0",                                        0LL, 0);
13282         check("18446744073709551615",  18446744073709551615ULL, 0);
13283         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13284 #if 0 /* strtouq() for /^-/ strings is undefined. */
13285         check("-1",                    18446744073709551615ULL, 0);
13286         check("-18446744073709551614",                     2LL, 0);
13287         check("-18446744073709551615",                     1LL, 0);
13288         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13289         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13290 #endif
13291         if (!bad)
13292                 printf("ok\n");
13293         return 0;
13294 }
13295 EOCP
13296         set try
13297         if eval $compile; then
13298                 case "`$run ./try`" in
13299                 ok) echo "Your strtouq() seems to be working okay." ;;
13300                 *) cat <<EOM >&4
13301 Your strtouq() doesn't seem to be working okay.
13302 EOM
13303                    d_strtouq="$undef"
13304                    ;;
13305                 esac
13306         fi
13307         ;;
13308 esac
13309
13310 : see if strxfrm exists
13311 set strxfrm d_strxfrm
13312 eval $inlibc
13313
13314 : see if symlink exists
13315 set symlink d_symlink
13316 eval $inlibc
13317
13318 : see if syscall exists
13319 set syscall d_syscall
13320 eval $inlibc
13321
13322 : see if prototype for syscall is available
13323 echo " "
13324 set d_syscallproto syscall $i_unistd unistd.h
13325 eval $hasproto
13326
13327 : see if sysconf exists
13328 set sysconf d_sysconf
13329 eval $inlibc
13330
13331 : see if system exists
13332 set system d_system
13333 eval $inlibc
13334
13335 : see if tcgetpgrp exists
13336 set tcgetpgrp d_tcgetpgrp
13337 eval $inlibc
13338
13339 : see if tcsetpgrp exists
13340 set tcsetpgrp d_tcsetpgrp
13341 eval $inlibc
13342
13343 : see if prototype for telldir is available
13344 echo " "
13345 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13346 eval $hasproto
13347
13348 : see if this is a sys/times.h system
13349 set sys/times.h i_systimes
13350 eval $inhdr
13351
13352 : see if times exists
13353 echo " "
13354 if set times val -f d_times; eval $csym; $val; then
13355         echo 'times() found.' >&4
13356         d_times="$define"
13357         inc=''
13358         case "$i_systimes" in
13359         "$define") inc='sys/times.h';;
13360         esac
13361         rp="What is the type returned by times() on this system?"
13362         set clock_t clocktype long stdio.h sys/types.h $inc
13363         eval $typedef_ask
13364 else
13365         echo 'times() NOT found, hope that will do.' >&4
13366         d_times="$undef"
13367         clocktype='int'
13368 fi
13369
13370 : see if truncate exists
13371 set truncate d_truncate
13372 eval $inlibc
13373
13374 : see if tzname[] exists
13375 echo " "
13376 if set tzname val -a d_tzname; eval $csym; $val; then
13377         val="$define"
13378         echo 'tzname[] found.' >&4
13379 else
13380         val="$undef"
13381         echo 'tzname[] NOT found.' >&4
13382 fi
13383 set d_tzname
13384 eval $setvar
13385
13386 case "$osname" in
13387 next|rhapsody|darwin) multiarch="$define" ;;
13388 esac
13389 case "$multiarch" in
13390 ''|[nN]*) multiarch="$undef" ;;
13391 esac
13392
13393 : check for ordering of bytes in a long
13394 echo " "
13395 case "$usecrosscompile$multiarch" in
13396 *$define*)
13397         $cat <<EOM
13398 You seem to be either cross-compiling or doing a multiarchitecture build,
13399 skipping the byteorder check.
13400
13401 EOM
13402         byteorder='ffff'
13403         ;;
13404 *)
13405         case "$byteorder" in
13406         '')
13407                 $cat <<'EOM'
13408 In the following, larger digits indicate more significance.  A big-endian
13409 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13410 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13411 machines may have weird orders like 3412.  A Cray will report 87654321,
13412 an Alpha will report 12345678. If the test program works the default is
13413 probably right.
13414 I'm now running the test program...
13415 EOM
13416                 $cat >try.c <<'EOCP'
13417 #include <stdio.h>
13418 int main()
13419 {
13420         int i;
13421         union {
13422                 unsigned long l;
13423                 char c[sizeof(long)];
13424         } u;
13425
13426         if (sizeof(long) > 4)
13427                 u.l = (0x08070605L << 32) | 0x04030201L;
13428         else
13429                 u.l = 0x04030201L;
13430         for (i = 0; i < sizeof(long); i++)
13431                 printf("%c", u.c[i]+'0');
13432         printf("\n");
13433         exit(0);
13434 }
13435 EOCP
13436                 xxx_prompt=y
13437                 set try
13438                 if eval $compile && ./try > /dev/null; then
13439                         dflt=`$run ./try`
13440                         case "$dflt" in
13441                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13442                                 echo "(The test program ran ok.)"
13443                                 echo "byteorder=$dflt"
13444                                 xxx_prompt=n
13445                         ;;
13446                         ????|????????) echo "(The test program ran ok.)" ;;
13447                         *) echo "(The test program didn't run right for some reason.)" ;;
13448                         esac
13449                 else
13450                         dflt='4321'
13451                         cat <<'EOM'
13452 (I can't seem to compile the test program.  Guessing big-endian...)
13453 EOM
13454                 fi
13455                 case "$xxx_prompt" in
13456                 y)
13457                         rp="What is the order of bytes in a long?"
13458                         . ./myread
13459                         byteorder="$ans"
13460                         ;;
13461                 *)      byteorder=$dflt
13462                         ;;
13463                 esac
13464                 ;;
13465         esac
13466         $rm -f try.c try
13467         ;;
13468 esac
13469
13470
13471 $cat <<EOM
13472
13473 Checking to see whether you can access character data unalignedly...
13474 EOM
13475 $cat >try.c <<EOCP
13476 #include <stdio.h>
13477 #define U32 $u32type
13478 #define BYTEORDER 0x$byteorder
13479 #define U8 $u8type
13480 #include <signal.h>
13481 #ifdef SIGBUS
13482 $signal_t bletch(s) int s; { exit(4); }
13483 #endif
13484 int main() {
13485 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13486     U8 buf[] = "\0\0\0\1\0\0\0\0";
13487     U32 *up;
13488     int i;
13489
13490     if (sizeof(U32) != 4) {
13491         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13492         exit(1);
13493     }
13494
13495     fflush(stdout);
13496
13497 #ifdef SIGBUS
13498     signal(SIGBUS, bletch);
13499 #endif
13500
13501     for (i = 0; i < 4; i++) {
13502         up = (U32*)(buf + i);
13503         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13504                (*up == 1 << (8*(3-i)))  /* little-endian */
13505               )
13506            )
13507         {
13508             printf("read failed (%x)\n", *up);
13509             exit(2);
13510         }
13511     }
13512
13513     /* write test */
13514     for (i = 0; i < 4; i++) {
13515         up = (U32*)(buf + i);
13516         *up = 0xBeef;
13517         if (*up != 0xBeef) {
13518             printf("write failed (%x)\n", *up);
13519             exit(3);
13520         }
13521     }
13522
13523     exit(0);
13524 #else
13525     printf("1\n");
13526     exit(1);
13527 #endif
13528     return 0;
13529 }
13530 EOCP
13531 set try
13532 if eval $compile_ok; then
13533         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13534         $run ./try 2>&1 >/dev/null
13535         case "$?" in
13536         0)      cat >&4 <<EOM
13537 You can access character data pretty unalignedly.
13538 EOM
13539                 d_u32align="$undef"
13540                 ;;
13541         *)      cat >&4 <<EOM
13542 It seems that you must access character data in an aligned manner.
13543 EOM
13544                 d_u32align="$define"
13545                 ;;
13546         esac
13547 else
13548         rp='Can you access character data at unaligned addresses?'
13549         dflt='n'
13550         . ./myread
13551         case "$ans" in
13552         [yY]*)  d_u32align="$undef"  ;;
13553         *)      d_u32align="$define" ;;
13554         esac
13555 fi
13556 $rm -f core core.try.* try.core
13557
13558 : see if ualarm exists
13559 set ualarm d_ualarm
13560 eval $inlibc
13561
13562 : see if umask exists
13563 set umask d_umask
13564 eval $inlibc
13565
13566 : see if unordered exists
13567 set unordered d_unordered
13568 eval $inlibc
13569
13570 : see if usleep exists
13571 set usleep d_usleep
13572 eval $inlibc
13573
13574 : see if prototype for usleep is available
13575 echo " "
13576 set d_usleepproto usleep $i_unistd unistd.h
13577 eval $hasproto
13578
13579 : see if ustat exists
13580 set ustat d_ustat
13581 eval $inlibc
13582
13583 : backward compatibility for d_hvfork
13584 if test X$d_hvfork != X; then
13585         d_vfork="$d_hvfork"
13586         d_hvfork=''
13587 fi
13588 : see if there is a vfork
13589 val=''
13590 set vfork val
13591 eval $inlibc
13592
13593 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13594 : perl on Solaris 2.x, and probably elsewhere.
13595 case "$val" in
13596 $define)
13597         echo " "
13598         case "$usevfork" in
13599         false) dflt='n';;
13600         *) dflt='y';;
13601         esac
13602         cat <<'EOM'
13603  
13604 Perl can only use a vfork() that doesn't suffer from strict
13605 restrictions on calling functions or modifying global data in
13606 the child.  For example, glibc-2.1 contains such a vfork()
13607 that is unsuitable.  If your system provides a proper fork()
13608 call, chances are that you do NOT want perl to use vfork().
13609
13610 EOM
13611         rp="Do you still want to use vfork()?"
13612         . ./myread
13613         case "$ans" in
13614         y|Y) ;;
13615         *)
13616                 echo "Ok, we won't use vfork()."
13617                 val="$undef"
13618                 ;;
13619         esac
13620         ;;
13621 esac
13622 set d_vfork
13623 eval $setvar
13624 case "$d_vfork" in
13625 $define) usevfork='true';;
13626 *) usevfork='false';;
13627 esac
13628
13629 : see if closedir exists
13630 set closedir d_closedir
13631 eval $inlibc
13632
13633 case "$d_closedir" in
13634 "$define")
13635         echo " "
13636         echo "Checking whether closedir() returns a status..." >&4
13637         cat > try.c <<EOM
13638 #$i_dirent I_DIRENT             /**/
13639 #$i_sysdir I_SYS_DIR            /**/
13640 #$i_sysndir I_SYS_NDIR          /**/
13641 #$i_systypes I_SYS_TYPES        /**/
13642
13643 #if defined(I_SYS_TYPES)
13644 #include <sys/types.h>
13645 #endif
13646 #if defined(I_DIRENT)
13647 #include <dirent.h>
13648 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13649 #include <sys/dir.h>
13650 #endif
13651 #else
13652 #ifdef I_SYS_NDIR
13653 #include <sys/ndir.h>
13654 #else
13655 #ifdef I_SYS_DIR
13656 #ifdef hp9000s500
13657 #include <ndir.h>       /* may be wrong in the future */
13658 #else
13659 #include <sys/dir.h>
13660 #endif
13661 #endif
13662 #endif
13663 #endif 
13664 int main() { return closedir(opendir(".")); }
13665 EOM
13666         set try
13667         if eval $compile_ok; then
13668                 if $run ./try > /dev/null 2>&1 ; then
13669                         echo "Yes, it does."
13670                         val="$undef"
13671                 else
13672                         echo "No, it doesn't."
13673                         val="$define"
13674                 fi
13675         else
13676                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13677                 val="$define"
13678         fi
13679         ;;
13680 *)
13681         val="$undef";
13682         ;;
13683 esac
13684 set d_void_closedir
13685 eval $setvar
13686 $rm -f try try.*
13687 : see if there is a wait4
13688 set wait4 d_wait4
13689 eval $inlibc
13690
13691 : see if waitpid exists
13692 set waitpid d_waitpid
13693 eval $inlibc
13694
13695 : see if wcstombs exists
13696 set wcstombs d_wcstombs
13697 eval $inlibc
13698
13699 : see if wctomb exists
13700 set wctomb d_wctomb
13701 eval $inlibc
13702
13703 : see if writev exists
13704 set writev d_writev
13705 eval $inlibc
13706
13707 : preserve RCS keywords in files with variable substitution, grrr
13708 Date='$Date'
13709 Id='$Id'
13710 Log='$Log'
13711 RCSfile='$RCSfile'
13712 Revision='$Revision'
13713
13714 : check for alignment requirements
13715 echo " "
13716 case "$usecrosscompile$multiarch" in
13717 *$define*)
13718         $cat <<EOM
13719 You seem to be either cross-compiling or doing a multiarchitecture build,
13720 skipping the memory alignment check.
13721
13722 EOM
13723         case "$alignbytes" in
13724         '') alignbytes=8 ;;
13725         esac
13726         ;;
13727 *)
13728         case "$alignbytes" in
13729         '') echo "Checking alignment constraints..." >&4
13730                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13731                         $cat >try.c <<'EOCP'
13732 typedef long double NV;
13733 EOCP
13734                 else
13735                         $cat >try.c <<'EOCP'
13736 typedef double NV;
13737 EOCP
13738                 fi
13739                 $cat >>try.c <<'EOCP'
13740 #include <stdio.h>
13741 struct foobar {
13742         char foo;
13743         NV bar;
13744 } try_algn;
13745 int main()
13746 {
13747     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13748     return(0);
13749 }
13750 EOCP
13751                 set try
13752                 if eval $compile_ok; then
13753                         dflt=`$run ./try`
13754                 else
13755                         dflt='8'
13756                         echo "(I can't seem to compile the test program...)"
13757                 fi
13758                 ;;
13759         *) dflt="$alignbytes"
13760                 ;;
13761         esac
13762         rp="Doubles must be aligned on a how-many-byte boundary?"
13763         . ./myread
13764         alignbytes="$ans"
13765         $rm -f try.c try
13766         ;;
13767 esac
13768
13769
13770 : set the base revision
13771 baserev=5.0
13772
13773 : how do we catenate cpp tokens here?
13774 echo " "
13775 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13776 $cat >cpp_stuff.c <<'EOCP'
13777 #define RCAT(a,b)a/**/b
13778 #define ACAT(a,b)a ## b
13779 RCAT(Rei,ser)
13780 ACAT(Cir,cus)
13781 EOCP
13782 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13783 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13784         echo "Oh!  Smells like ANSI's been here." >&4
13785         echo "We can catify or stringify, separately or together!"
13786         cpp_stuff=42
13787 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13788         echo "Ah, yes!  The good old days!" >&4
13789         echo "However, in the good old days we don't know how to stringify and"
13790         echo "catify at the same time."
13791         cpp_stuff=1
13792 else
13793         $cat >&4 <<EOM
13794 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13795 to have to edit the values of CAT[2-5] in config.h...
13796 EOM
13797         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13798 fi
13799 $rm -f cpp_stuff.*
13800
13801 : see if this is a db.h system
13802 set db.h i_db
13803 eval $inhdr
13804
13805 case "$i_db" in
13806 $define)
13807         : Check db version.
13808         echo " "
13809         echo "Checking Berkeley DB version ..." >&4
13810         $cat >try.c <<EOCP
13811 #$d_const HASCONST
13812 #ifndef HASCONST
13813 #define const
13814 #endif
13815 #include <sys/types.h>
13816 #include <stdio.h>
13817 #include <db.h>
13818 int main(int argc, char *argv[])
13819 {
13820 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13821     int Major, Minor, Patch ;
13822     unsigned long Version ;
13823     (void)db_version(&Major, &Minor, &Patch) ;
13824     if (argc == 2) {
13825         printf("%d %d %d %d %d %d\n",
13826                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13827                Major, Minor, Patch);
13828         exit(0);
13829     }
13830     printf("You have Berkeley DB Version 2 or greater.\n");
13831
13832     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13833                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13834     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13835                 Major, Minor, Patch) ;
13836
13837     /* check that db.h & libdb are compatible */
13838     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13839         printf("db.h and libdb are incompatible.\n") ;
13840         exit(3);        
13841     }
13842
13843     printf("db.h and libdb are compatible.\n") ;
13844
13845     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13846                 + DB_VERSION_PATCH ;
13847
13848     /* needs to be >= 2.3.4 */
13849     if (Version < 2003004) {
13850     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13851         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13852         exit(2);        
13853     }
13854
13855     exit(0);
13856 #else
13857 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13858     if (argc == 2) {
13859         printf("1 0 0\n");
13860         exit(0);
13861     }
13862     printf("You have Berkeley DB Version 1.\n");
13863     exit(0);    /* DB version < 2: the coast is clear. */
13864 #else
13865     exit(1);    /* <db.h> not Berkeley DB? */
13866 #endif
13867 #endif
13868 }
13869 EOCP
13870         set try
13871         if eval $compile_ok && $run ./try; then
13872                 echo 'Looks OK.' >&4
13873                 set `$run ./try 1`
13874                 db_version_major=$1
13875                 db_version_minor=$2
13876                 db_version_patch=$3
13877         else
13878                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13879                 i_db=$undef
13880                 case " $libs " in
13881                 *"-ldb "*)
13882                         : Remove db from list of libraries to use
13883                         echo "Removing unusable -ldb from library list" >&4
13884                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13885                         shift
13886                         libs="$*"
13887                         echo "libs = $libs" >&4
13888                         ;;
13889                 esac
13890         fi
13891         $rm -f try.*
13892         ;;
13893 esac
13894
13895 case "$i_db" in
13896 define)
13897         : Check the return type needed for hash 
13898         echo " "
13899         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13900         $cat >try.c <<EOCP
13901 #$d_const HASCONST
13902 #ifndef HASCONST
13903 #define const
13904 #endif
13905 #include <sys/types.h>
13906 #include <db.h>
13907
13908 #ifndef DB_VERSION_MAJOR
13909 u_int32_t hash_cb (ptr, size)
13910 const void *ptr;
13911 size_t size;
13912 {
13913 }
13914 HASHINFO info;
13915 int main()
13916 {
13917         info.hash = hash_cb;
13918 }
13919 #endif
13920 EOCP
13921         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13922                 if $contains warning try.out >>/dev/null 2>&1 ; then
13923                         db_hashtype='int'
13924                 else
13925                         db_hashtype='u_int32_t'
13926                 fi
13927         else
13928                 : XXX Maybe we should just give up here.
13929                 db_hashtype=u_int32_t
13930                 $cat try.out >&4
13931                 echo "Help:  I can't seem to compile the db test program." >&4
13932                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13933         fi
13934         $rm -f try.*
13935         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13936         ;;
13937 *)      db_hashtype=u_int32_t
13938         ;;
13939 esac
13940 case "$i_db" in
13941 define)
13942         : Check the return type needed for prefix 
13943         echo " "
13944         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13945         cat >try.c <<EOCP
13946 #$d_const HASCONST
13947 #ifndef HASCONST
13948 #define const
13949 #endif
13950 #include <sys/types.h>
13951 #include <db.h>
13952
13953 #ifndef DB_VERSION_MAJOR
13954 size_t prefix_cb (key1, key2)
13955 const DBT *key1;
13956 const DBT *key2;
13957 {
13958 }
13959 BTREEINFO info;
13960 int main()
13961 {
13962         info.prefix = prefix_cb;
13963 }
13964 #endif
13965 EOCP
13966         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13967                 if $contains warning try.out >>/dev/null 2>&1 ; then
13968                         db_prefixtype='int'
13969                 else
13970                         db_prefixtype='size_t'
13971                 fi
13972         else
13973                 db_prefixtype='size_t'
13974                 : XXX Maybe we should just give up here.
13975                 $cat try.out >&4
13976                 echo "Help:  I can't seem to compile the db test program." >&4
13977                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13978         fi
13979         $rm -f try.*
13980         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13981         ;;
13982 *)      db_prefixtype='size_t'
13983         ;;
13984 esac
13985
13986
13987 : How can we generate normalized random numbers ?
13988 echo " "
13989 echo "Looking for a random number function..." >&4
13990 case "$randfunc" in
13991 '')
13992         if set drand48 val -f; eval $csym; $val; then
13993                 dflt="drand48"
13994                 echo "Good, found drand48()." >&4
13995         elif set random val -f; eval $csym; $val; then
13996                 dflt="random"
13997                 echo "OK, found random()." >&4
13998         else
13999                 dflt="rand"
14000                 echo "Yick, looks like I have to use rand()." >&4
14001         fi
14002         echo " "
14003         ;;
14004 *)
14005         dflt="$randfunc"
14006         ;;
14007 esac
14008 cont=true
14009
14010 case "$ccflags" in
14011 *-Dmy_rand=*|*-Dmy_srand=*)
14012         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14013         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14014         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14015         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14016         ;;
14017 esac
14018
14019 while $test "$cont"; do
14020         rp="Use which function to generate random numbers?"
14021         . ./myread
14022         if $test "$ans" = "$dflt"; then
14023                 : null
14024         else
14025                 randbits=''
14026         fi
14027         randfunc="$ans"
14028         if set $ans val -f; eval $csym; $val; then
14029                 cont=''
14030         else
14031                 dflt=y
14032                 rp="I cannot find function $ans. Use that name anyway?"
14033                 . ./myread
14034                 dflt=rand
14035                 case "$ans" in
14036                         [yY]*) cont='';;
14037                 esac
14038         fi
14039         case "$cont" in
14040         '')
14041                 case "$randfunc" in
14042                 drand48)
14043                         drand01="drand48()"
14044                         seedfunc="srand48"
14045                         randbits=48
14046                         randseedtype=long
14047                         ;;
14048                 rand|random)
14049                         case "$randbits" in
14050                         '')
14051 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14052                                 $cat >try.c <<EOCP
14053 #$i_unistd I_UNISTD
14054 #$i_stdlib I_STDLIB
14055 #include <stdio.h>
14056 #ifdef I_UNISTD
14057 #  include <unistd.h>
14058 #endif
14059 #ifdef I_STDLIB
14060 #  include <stdlib.h>
14061 #endif
14062 int main()
14063 {
14064         register int i;
14065         register unsigned long tmp;
14066         register unsigned long max = 0L;
14067
14068         for (i = 1000; i; i--) {
14069                 tmp = (unsigned long) $randfunc();
14070                 if (tmp > max) max = tmp;
14071         }
14072         for (i = 0; max; i++)
14073                 max /= 2;
14074         printf("%d\n",i);
14075 }
14076 EOCP
14077                                 set try
14078                                 if eval $compile_ok; then
14079                                         dflt=`try`
14080                                 else
14081                                         dflt='?'
14082                                         echo "(I can't seem to compile the test program...)"
14083                                 fi
14084                                 ;;
14085                         *)
14086                                 dflt="$randbits"
14087                                 ;;
14088                         esac
14089                         rp="How many bits does your $randfunc() function produce?"
14090                         . ./myread
14091                         randbits="$ans"
14092                         $rm -f try.c try
14093                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14094                         seedfunc="s$randfunc"
14095                         randseedtype=unsigned
14096                         ;;
14097                 *)
14098                         dflt="31"
14099                         rp="How many bits does your $randfunc() function produce?"
14100                         . ./myread
14101                         randbits="$ans"
14102                         seedfunc="s$randfunc"
14103                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14104                         if set $seedfunc val -f; eval $csym; $val; then
14105                                 echo "(Using $seedfunc() to seed random generator)"
14106                         else
14107                                 echo "(Warning: no $seedfunc() to seed random generator)"
14108                                 seedfunc=rand
14109                         fi
14110                         randseedtype=unsigned
14111                         ;;
14112                 esac
14113                 ;;
14114         esac
14115 done
14116
14117 echo " "
14118 echo "Determining whether or not we are on an EBCDIC system..." >&4
14119 $cat >try.c <<'EOM'
14120 int main()
14121 {
14122   if ('M'==0xd4) return 0;
14123   return 1;
14124 }
14125 EOM
14126
14127 val=$undef
14128 set try
14129 if eval $compile_ok; then
14130         if $run ./try; then
14131                 echo "You seem to speak EBCDIC." >&4
14132                 val="$define"
14133         else
14134                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14135         fi
14136 else
14137         echo "I'm unable to compile the test program." >&4
14138         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14139 fi
14140 $rm -f try try.*
14141 set ebcdic
14142 eval $setvar
14143
14144 echo " "
14145 $cat >&4 <<EOM
14146 Checking how to flush all pending stdio output...
14147 EOM
14148 # I only know how to find the first 32 possibly open files on SunOS.
14149 # See also hints/sunos_4_1.sh and util.c  --AD
14150 case "$osname" in
14151 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14152 esac
14153 $cat >>try.c <<EOCP
14154 #include <stdio.h>
14155 #$i_unistd I_UNISTD
14156 #ifdef I_UNISTD
14157 # include <unistd.h>
14158 #endif
14159 #$d_sysconf HAS_SYSCONF
14160 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14161 #ifdef HAS_STDIO_STREAM_ARRAY
14162 # define STDIO_STREAM_ARRAY $stdio_stream_array
14163 #endif
14164 int main() {
14165   FILE* p;
14166   unlink("try.out");
14167   p = fopen("try.out", "w");
14168 #ifdef TRY_FPUTC
14169   fputc('x', p);
14170 #else
14171 # ifdef TRY_FPRINTF
14172   fprintf(p, "x");
14173 # endif
14174 #endif
14175 #ifdef TRY_FFLUSH_NULL
14176   fflush(NULL);
14177 #endif
14178 #ifdef TRY_FFLUSH_ALL
14179   {
14180     long open_max = -1;
14181 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14182     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14183 # else
14184 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14185     open_max = sysconf(_SC_OPEN_MAX);
14186 #  else
14187 #   ifdef FOPEN_MAX
14188     open_max = FOPEN_MAX;
14189 #   else
14190 #    ifdef OPEN_MAX
14191     open_max = OPEN_MAX;
14192 #    else
14193 #     ifdef _NFILE
14194     open_max = _NFILE;
14195 #     endif
14196 #    endif
14197 #   endif
14198 #  endif
14199 # endif 
14200 # ifdef HAS_STDIO_STREAM_ARRAY
14201     if (open_max > 0) {
14202       long i;
14203       for (i = 0; i < open_max; i++)
14204             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14205                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14206                 STDIO_STREAM_ARRAY[i]._flag)
14207                 fflush(&STDIO_STREAM_ARRAY[i]);
14208     }   
14209   }
14210 # endif
14211 #endif
14212   _exit(42);
14213 }
14214 EOCP
14215 : first we have to find out how _not_ to flush
14216 $to try.c
14217 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14218     output=''
14219     set try -DTRY_FPUTC
14220     if eval $compile; then
14221             $run ./try 2>/dev/null
14222             code="$?"
14223             $from try.out
14224             if $test ! -s try.out -a "X$code" = X42; then
14225                 output=-DTRY_FPUTC
14226             fi
14227     fi
14228     case "$output" in
14229     '')
14230             set try -DTRY_FPRINTF
14231             if eval $compile; then
14232                     $run ./try 2>/dev/null
14233                     code="$?"
14234                     $from try.out
14235                     if $test ! -s try.out -a "X$code" = X42; then
14236                         output=-DTRY_FPRINTF
14237                     fi
14238             fi
14239         ;;
14240     esac
14241 fi
14242 : check for fflush NULL behaviour
14243 case "$fflushNULL" in
14244 '')     set try -DTRY_FFLUSH_NULL $output
14245         if eval $compile; then
14246                 $run ./try 2>/dev/null
14247                 code="$?"
14248                 $from try.out
14249                 if $test -s try.out -a "X$code" = X42; then
14250                         fflushNULL="`$cat try.out`"
14251                 else
14252                         if $test "X$code" != X42; then
14253                                 $cat >&4 <<EOM
14254 (If this test failed, don't worry, we'll try another method shortly.)
14255 EOM
14256                         fi
14257                 fi
14258         fi
14259         $rm -f core try.core core.try.*
14260         case "$fflushNULL" in
14261         x)      $cat >&4 <<EOM
14262 Your fflush(NULL) works okay for output streams.
14263 Let's see if it clobbers input pipes...
14264 EOM
14265 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14266 # bug that improperly flushes the input end of pipes.  So we avoid the
14267 # autoflush on fork/system/exec support for now. :-(
14268 $cat >tryp.c <<EOCP
14269 #include <stdio.h>
14270 int
14271 main(int argc, char **argv)
14272 {
14273     char buf[1024];
14274     int i;
14275     char *bp = buf;
14276     while (1) {
14277         while ((i = getc(stdin)) != -1
14278                && (*bp++ = i) != '\n'
14279                && bp < &buf[1024])
14280         /* DO NOTHING */ ;
14281         *bp = '\0';
14282         fprintf(stdout, "%s", buf);
14283         fflush(NULL);
14284         if (i == -1)
14285             return 0;
14286         bp = buf;
14287     }
14288 }
14289 EOCP
14290                 fflushNULL="$define"
14291                 set tryp
14292                 if eval $compile; then
14293                     $rm -f tryp.out
14294                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14295                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14296                        $cat >&4 <<EOM
14297 fflush(NULL) seems to behave okay with input streams.
14298 EOM
14299                         fflushNULL="$define"
14300                     else
14301                         $cat >&4 <<EOM
14302 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14303 EOM
14304                         fflushNULL="$undef"
14305                     fi
14306                 fi
14307                 $rm -f core tryp.c tryp.core core.tryp.*
14308                 ;;
14309         '')     $cat >&4 <<EOM
14310 Your fflush(NULL) isn't working (contrary to ANSI C).
14311 EOM
14312                 fflushNULL="$undef"
14313                 ;;
14314         *)      $cat >&4 <<EOM
14315 Cannot figure out whether your fflush(NULL) works or not.
14316 I'm assuming it doesn't (contrary to ANSI C).
14317 EOM
14318                 fflushNULL="$undef"
14319                 ;;
14320         esac
14321         ;;
14322 $define|true|[yY]*)
14323         fflushNULL="$define"
14324         ;;
14325 *)
14326         fflushNULL="$undef"
14327         ;;
14328 esac
14329 : check explicit looping only if NULL did not work, and if the pipe
14330 : bug does not show up on an explicit flush too
14331 case "$fflushNULL" in
14332 "$undef")
14333         $cat >tryp.c <<EOCP
14334 #include <stdio.h>
14335 int
14336 main(int argc, char **argv)
14337 {
14338     char buf[1024];
14339     int i;
14340     char *bp = buf;
14341     while (1) {
14342         while ((i = getc(stdin)) != -1
14343                && (*bp++ = i) != '\n'
14344                && bp < &buf[1024])
14345         /* DO NOTHING */ ;
14346         *bp = '\0';
14347         fprintf(stdout, "%s", buf);
14348         fflush(stdin);
14349         if (i == -1)
14350             return 0;
14351         bp = buf;
14352     }
14353 }
14354 EOCP
14355         set tryp
14356         if eval $compile; then
14357             $rm -f tryp.out
14358             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14359             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14360                $cat >&4 <<EOM
14361 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14362 EOM
14363                 : now check for fflushall behaviour
14364                 case "$fflushall" in
14365                 '')     set try -DTRY_FFLUSH_ALL $output
14366                         if eval $compile; then
14367                                 $cat >&4 <<EOM
14368 (Now testing the other method--but note that this also may fail.)
14369 EOM
14370                                 $run ./try 2>/dev/null
14371                                 code=$?
14372                                 $from try.out
14373                                 if $test -s try.out -a "X$code" = X42; then
14374                                         fflushall="`$cat try.out`"
14375                                 fi
14376                         fi
14377                         $rm -f core try.core core.try.*
14378                         case "$fflushall" in
14379                         x)      $cat >&4 <<EOM
14380 Whew. Flushing explicitly all the stdio streams works.
14381 EOM
14382                                 fflushall="$define"
14383                                 ;;
14384                         '')     $cat >&4 <<EOM
14385 Sigh. Flushing explicitly all the stdio streams doesn't work.
14386 EOM
14387                                 fflushall="$undef"
14388                                 ;;
14389                         *)      $cat >&4 <<EOM
14390 Cannot figure out whether flushing stdio streams explicitly works or not.
14391 I'm assuming it doesn't.
14392 EOM
14393                                 fflushall="$undef"
14394                                 ;;
14395                         esac
14396                         ;;
14397                 "$define"|true|[yY]*)
14398                         fflushall="$define"
14399                         ;;
14400                 *)
14401                         fflushall="$undef"
14402                         ;;
14403                 esac
14404             else
14405                 $cat >&4 <<EOM
14406 All is futile.  Even fflush(stdin) clobbers input pipes!
14407 EOM
14408                 fflushall="$undef"
14409             fi
14410         else
14411             fflushall="$undef"
14412         fi
14413         $rm -f core tryp.c tryp.core core.tryp.*
14414         ;;
14415 *)      fflushall="$undef"
14416         ;;
14417 esac
14418
14419 case "$fflushNULL$fflushall" in
14420 undefundef)
14421         $cat <<EOM
14422 OK, I give up.  I cannot figure out how to flush pending stdio output.
14423 We won't be flushing handles at all before fork/exec/popen.
14424 EOM
14425         ;;
14426 esac
14427 $rm -f try.* try$exe_ext
14428
14429 : Store the full pathname to the ar program for use in the C program
14430 : Respect a hint or command line value for full_ar.
14431 case "$full_ar" in
14432 '') full_ar=$ar ;;
14433 esac
14434
14435 : Store the full pathname to the sed program for use in the C program
14436 full_sed=$sed
14437
14438 : see what type gids are declared as in the kernel
14439 echo " "
14440 echo "Looking for the type for group ids returned by getgid()."
14441 set gid_t gidtype xxx stdio.h sys/types.h
14442 eval $typedef
14443 case "$gidtype" in
14444 xxx)
14445         xxx=`./findhdr sys/user.h`
14446         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14447         case $1 in
14448         unsigned) dflt="$1 $2" ;;
14449         *) dflt="$1" ;;
14450         esac
14451         ;;
14452 *) dflt="$gidtype";;
14453 esac
14454 case "$gidtype" in
14455 gid_t) echo "gid_t found." ;;
14456 *)      rp="What is the type for group ids returned by getgid()?"
14457         . ./myread
14458         gidtype="$ans"
14459         ;;
14460 esac
14461
14462 echo " "
14463 case "$gidtype" in
14464 *_t) zzz="$gidtype"     ;;
14465 *)   zzz="gid"          ;;
14466 esac
14467 echo "Checking the size of $zzz..." >&4 
14468 cat > try.c <<EOCP
14469 #include <sys/types.h>
14470 #include <stdio.h>
14471 int main() {
14472     printf("%d\n", (int)sizeof($gidtype));
14473     exit(0);
14474 }
14475 EOCP
14476 set try
14477 if eval $compile_ok; then
14478         yyy=`$run ./try`
14479         case "$yyy" in
14480         '')     gidsize=4
14481                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14482                 ;;
14483         *)      gidsize=$yyy
14484                 echo "Your $zzz is $gidsize bytes long."
14485                 ;;
14486         esac
14487 else
14488         gidsize=4
14489         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14490 fi
14491
14492
14493 echo " "
14494 case "$gidtype" in
14495 *_t) zzz="$gidtype"     ;;
14496 *)   zzz="gid"          ;;
14497 esac
14498 echo "Checking the sign of $zzz..." >&4 
14499 cat > try.c <<EOCP
14500 #include <sys/types.h>
14501 #include <stdio.h>
14502 int main() {
14503         $gidtype foo = -1;
14504         if (foo < 0)
14505                 printf("-1\n");
14506         else
14507                 printf("1\n");
14508 }
14509 EOCP
14510 set try
14511 if eval $compile; then
14512         yyy=`$run ./try`
14513         case "$yyy" in
14514         '')     gidsign=1
14515                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14516                 ;;
14517         *)      gidsign=$yyy
14518                 case "$gidsign" in
14519                  1) echo "Your $zzz is unsigned." ;;
14520                 -1) echo "Your $zzz is signed."   ;;
14521                 esac
14522                 ;;
14523         esac
14524 else
14525         gidsign=1
14526         echo "(I can't compile the test program--guessing unsigned.)" >&4
14527 fi
14528
14529
14530 echo " "
14531
14532 if $test X"$quadtype" != X; then
14533
14534 echo "Checking how to print 64-bit integers..." >&4
14535
14536 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14537         $cat >try.c <<'EOCP'
14538 #include <sys/types.h>
14539 #include <stdio.h>
14540 int main() {
14541   int q = 12345678901;
14542   printf("%ld\n", q);
14543 }
14544 EOCP
14545         set try
14546         if eval $compile; then
14547                 yyy=`$run ./try`
14548                 case "$yyy" in
14549                 12345678901)
14550                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14551                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14552                         echo "We will use %d."
14553                         ;;
14554                 esac
14555         fi
14556 fi
14557
14558 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14559         $cat >try.c <<'EOCP'
14560 #include <sys/types.h>
14561 #include <stdio.h>
14562 int main() {
14563   long q = 12345678901;
14564   printf("%ld\n", q);
14565 }
14566 EOCP
14567         set try
14568         if eval $compile; then
14569                 yyy=`$run ./try`
14570                 case "$yyy" in
14571                 12345678901)
14572                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14573                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14574                         echo "We will use %ld."
14575                         ;;
14576                 esac
14577         fi
14578 fi
14579
14580 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14581         $cat >try.c <<'EOCP'
14582 #include <sys/types.h>
14583 #include <inttypes.h>
14584 #include <stdio.h>
14585 int main() {
14586   int64_t q = 12345678901;
14587   printf("%" PRId64 "\n", q);
14588 }
14589 EOCP
14590         set try
14591         if eval $compile; then
14592                 yyy=`$run ./try`
14593                 case "$yyy" in
14594                 12345678901)
14595                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14596                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14597                         echo "We will use the C9X style."
14598                         ;;
14599                 esac
14600         fi
14601 fi
14602
14603 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14604         $cat >try.c <<EOCP
14605 #include <sys/types.h>
14606 #include <stdio.h>
14607 int main() {
14608   $quadtype q = 12345678901;
14609   printf("%Ld\n", q);
14610 }
14611 EOCP
14612         set try
14613         if eval $compile; then
14614                 yyy=`$run ./try`
14615                 case "$yyy" in
14616                 12345678901)
14617                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14618                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14619                         echo "We will use %Ld."
14620                         ;;
14621                 esac
14622         fi
14623 fi
14624
14625 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14626         $cat >try.c <<'EOCP'
14627 #include <sys/types.h>
14628 #include <stdio.h>
14629 int main() {
14630   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14631   printf("%lld\n", q);
14632 }
14633 EOCP
14634         set try
14635         if eval $compile; then
14636                 yyy=`$run ./try`
14637                 case "$yyy" in
14638                 12345678901)
14639                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14640                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14641                         echo "We will use the %lld style."
14642                         ;;
14643                 esac
14644         fi
14645 fi
14646
14647 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14648         $cat >try.c <<EOCP
14649 #include <sys/types.h>
14650 #include <stdio.h>
14651 int main() {
14652   $quadtype q = 12345678901;
14653   printf("%qd\n", q);
14654 }
14655 EOCP
14656         set try
14657         if eval $compile; then
14658                 yyy=`$run ./try`
14659                 case "$yyy" in
14660                 12345678901)
14661                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14662                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14663                         echo "We will use %qd."
14664                         ;;
14665                 esac
14666         fi
14667 fi
14668
14669 if $test X"$sPRId64" = X; then
14670         echo "Cannot figure out how to print 64-bit integers." >&4
14671 fi
14672
14673 $rm -f try try.*
14674
14675 fi
14676
14677 case "$sPRId64" in
14678 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14679         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14680         ;;
14681 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14682         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14683         ;;
14684 esac
14685
14686
14687 echo " "
14688 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14689
14690 if $test X"$ivsize" = X8; then
14691         ivdformat="$sPRId64"
14692         uvuformat="$sPRIu64"
14693         uvoformat="$sPRIo64"
14694         uvxformat="$sPRIx64"
14695         uvXUformat="$sPRIXU64"
14696 else
14697         if $test X"$ivsize" = X"$longsize"; then
14698                 ivdformat='"ld"'
14699                 uvuformat='"lu"'
14700                 uvoformat='"lo"'
14701                 uvxformat='"lx"'
14702                 uvXUformat='"lX"'
14703         else
14704                 if $test X"$ivsize" = X"$intsize"; then
14705                         ivdformat='"d"'
14706                         uvuformat='"u"'
14707                         uvoformat='"o"'
14708                         uvxformat='"x"'
14709                         uvXUformat='"X"'
14710                 else
14711                         : far out
14712                         if $test X"$ivsize" = X"$shortsize"; then
14713                                 ivdformat='"hd"'
14714                                 uvuformat='"hu"'
14715                                 uvoformat='"ho"'
14716                                 uvxformat='"hx"'
14717                                 uvXUformat='"hX"'
14718                         fi
14719                 fi
14720         fi
14721 fi
14722
14723 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14724         nveformat="$sPRIeldbl"
14725         nvfformat="$sPRIfldbl"
14726         nvgformat="$sPRIgldbl"
14727         nvEUformat="$sPRIEUldbl"
14728         nvFUformat="$sPRIFUldbl"
14729         nvGUformat="$sPRIGUldbl"
14730 else
14731         nveformat='"e"'
14732         nvfformat='"f"'
14733         nvgformat='"g"'
14734         nvEUformat='"E"'
14735         nvFUformat='"F"'
14736         nvGUformat='"G"'
14737 fi
14738
14739 case "$ivdformat" in
14740 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14741     exit 1
14742     ;;
14743 esac
14744
14745
14746 echo " "
14747 $echo "Checking the format string to be used for gids..." >&4
14748
14749 case "$gidsign" in
14750 -1)     if $test X"$gidsize" = X"$ivsize"; then
14751                 gidformat="$ivdformat"
14752         else
14753                 if $test X"$gidsize" = X"$longsize"; then
14754                         gidformat='"ld"'
14755                 else
14756                         if $test X"$gidsize" = X"$intsize"; then
14757                                 gidformat='"d"'
14758                         else
14759                                 if $test X"$gidsize" = X"$shortsize"; then
14760                                         gidformat='"hd"'
14761                                 fi
14762                         fi
14763                 fi
14764         fi
14765         ;;
14766 *)      if $test X"$gidsize" = X"$uvsize"; then
14767                 gidformat="$uvuformat"
14768         else
14769                 if $test X"$gidsize" = X"$longsize"; then
14770                         gidformat='"lu"'
14771                 else
14772                         if $test X"$gidsize" = X"$intsize"; then
14773                                 gidformat='"u"'
14774                         else
14775                                 if $test X"$gidsize" = X"$shortsize"; then
14776                                         gidformat='"hu"'
14777                                 fi
14778                         fi
14779                 fi
14780         fi
14781         ;;
14782 esac
14783
14784 : see if getgroups exists
14785 set getgroups d_getgrps
14786 eval $inlibc
14787
14788 : see if setgroups exists
14789 set setgroups d_setgrps
14790 eval $inlibc
14791
14792
14793 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14794 echo " "
14795 case "$d_getgrps$d_setgrps" in
14796 *define*)
14797         case "$groupstype" in
14798         '') dflt="$gidtype" ;;
14799         *)  dflt="$groupstype" ;;
14800         esac
14801         $cat <<EOM
14802 What type of pointer is the second argument to getgroups() and setgroups()?
14803 Usually this is the same as group ids, $gidtype, but not always.
14804
14805 EOM
14806         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14807         . ./myread
14808         groupstype="$ans"
14809         ;;
14810 *)  groupstype="$gidtype";;
14811 esac
14812
14813 echo " "
14814 echo "Checking if your $make program sets \$(MAKE)..." >&4
14815 case "$make_set_make" in
14816 '')
14817         $sed 's/^X //' > testmake.mak << 'EOF'
14818 Xall:
14819 X       @echo 'maketemp="$(MAKE)"'
14820 EOF
14821         case "`$make -f testmake.mak 2>/dev/null`" in
14822         *maketemp=*) make_set_make='#' ;;
14823         *)      make_set_make="MAKE=$make" ;;
14824         esac
14825         $rm -f testmake.mak
14826         ;;
14827 esac
14828 case "$make_set_make" in
14829 '#') echo "Yup, it does.";;
14830 *) echo "Nope, it doesn't.";;
14831 esac
14832
14833 : see what type is used for mode_t
14834 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14835 set mode_t modetype int stdio.h sys/types.h
14836 eval $typedef_ask
14837
14838 : see if stdarg is available
14839 echo " "
14840 if $test `./findhdr stdarg.h`; then
14841         echo "<stdarg.h> found." >&4
14842         valstd="$define"
14843 else
14844         echo "<stdarg.h> NOT found." >&4
14845         valstd="$undef"
14846 fi
14847
14848 : see if varags is available
14849 echo " "
14850 if $test `./findhdr varargs.h`; then
14851         echo "<varargs.h> found." >&4
14852 else
14853         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14854 fi
14855
14856 : set up the varargs testing programs
14857 $cat > varargs.c <<EOP
14858 #ifdef I_STDARG
14859 #include <stdarg.h>
14860 #endif
14861 #ifdef I_VARARGS
14862 #include <varargs.h>
14863 #endif
14864
14865 #ifdef I_STDARG
14866 int f(char *p, ...)
14867 #else
14868 int f(va_alist)
14869 va_dcl
14870 #endif
14871 {
14872         va_list ap;
14873 #ifndef I_STDARG
14874         char *p;
14875 #endif
14876 #ifdef I_STDARG
14877         va_start(ap,p);
14878 #else
14879         va_start(ap);
14880         p = va_arg(ap, char *);
14881 #endif
14882         va_end(ap);
14883 }
14884 EOP
14885 $cat > varargs <<EOP
14886 $startsh
14887 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14888         echo "true"
14889 else
14890         echo "false"
14891 fi
14892 $rm -f varargs$_o
14893 EOP
14894 chmod +x varargs
14895
14896 : now check which varargs header should be included
14897 echo " "
14898 i_varhdr=''
14899 case "$valstd" in
14900 "$define")
14901         if `./varargs I_STDARG`; then
14902                 val='stdarg.h'
14903         elif `./varargs I_VARARGS`; then
14904                 val='varargs.h'
14905         fi
14906         ;;
14907 *)
14908         if `./varargs I_VARARGS`; then
14909                 val='varargs.h'
14910         fi
14911         ;;
14912 esac
14913 case "$val" in
14914 '')
14915 echo "I could not find the definition for va_dcl... You have problems..." >&4
14916         val="$undef"; set i_stdarg; eval $setvar
14917         val="$undef"; set i_varargs; eval $setvar
14918         ;;
14919 *) 
14920         set i_varhdr
14921         eval $setvar
14922         case "$i_varhdr" in
14923         stdarg.h)
14924                 val="$define"; set i_stdarg; eval $setvar
14925                 val="$undef"; set i_varargs; eval $setvar
14926                 ;;
14927         varargs.h)
14928                 val="$undef"; set i_stdarg; eval $setvar
14929                 val="$define"; set i_varargs; eval $setvar
14930                 ;;
14931         esac
14932         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14933 esac
14934 $rm -f varargs*
14935
14936 : see if we need va_copy
14937 echo " "
14938 case "$i_stdarg" in
14939 "$define")
14940         $cat >try.c <<EOCP
14941 #include <stdarg.h>
14942 #include <stdio.h>
14943 #$i_stdlib I_STDLIB
14944 #ifdef I_STDLIB
14945 #include <stdlib.h>
14946 #endif
14947 #include <signal.h>
14948
14949 int
14950 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14951 {
14952   return vfprintf(f, fmt, *valp);
14953 }
14954  
14955 int    
14956 myvfprintf(FILE *f, const  char *fmt, va_list val)
14957 {
14958   return ivfprintf(f, fmt, &val);
14959 }
14960       
14961 int
14962 myprintf(char *fmt, ...) 
14963 {
14964   va_list val;
14965   va_start(val, fmt);
14966   return myvfprintf(stdout, fmt, val); 
14967 }         
14968
14969 int
14970 main(int ac, char **av)
14971 {
14972   signal(SIGSEGV, exit);
14973
14974   myprintf("%s%cs all right, then\n", "that", '\'');                            
14975   exit(0);      
14976 }
14977 EOCP
14978         set try
14979         if eval $compile && $run ./try 2>&1 >/dev/null; then
14980                 case "`$run ./try`" in
14981                 "that's all right, then")
14982                         okay=yes
14983                         ;;
14984                 esac
14985         fi
14986         case "$okay" in
14987         yes)    echo "It seems that you don't need va_copy()." >&4
14988                 need_va_copy="$undef"
14989                 ;;
14990         *)      echo "It seems that va_copy() or similar will be needed." >&4
14991                 need_va_copy="$define"
14992                 ;;
14993         esac
14994         $rm -f try.* core core.* *.core *.core.*
14995         ;;
14996 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14997         ;;
14998 esac
14999
15000 : define a fucntion to check prototypes
15001 $cat > protochk <<EOSH
15002 $startsh
15003 cc="$cc"
15004 optimize="$optimize"
15005 ccflags="$ccflags"
15006 prototype="$prototype"
15007 define="$define"
15008 rm=$rm
15009 EOSH
15010
15011 $cat >> protochk <<'EOSH'
15012
15013 $rm -f try.c
15014 foo="$1"
15015 shift
15016 while test $# -ge 2; do
15017         case "$1" in
15018                 $define) echo "#include <$2>" >> try.c ;;
15019                 literal) echo "$2" >> try.c ;;
15020         esac
15021     shift 2
15022 done
15023 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15024 cat >> try.c <<'EOCP'
15025 #ifdef CAN_PROTOTYPE
15026 #define _(args) args
15027 #else
15028 #define _(args) ()
15029 #endif
15030 EOCP
15031 echo "$foo" >> try.c
15032 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15033 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15034 status=$?
15035 $rm -f try.[co]
15036 exit $status
15037 EOSH
15038 chmod +x protochk
15039 $eunicefix protochk
15040
15041 : see what type is used for size_t
15042 rp="What is the type used for the length parameter for string functions?"
15043 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15044 eval $typedef_ask
15045
15046 : check for type of arguments to gethostbyaddr. 
15047 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15048         case "$d_gethbyaddr" in
15049         $define)
15050                 $cat <<EOM
15051
15052 Checking to see what type of arguments are accepted by gethostbyaddr().
15053 EOM
15054                 hdrs="$define sys/types.h
15055                         $d_socket sys/socket.h 
15056                         $i_niin netinet/in.h 
15057                         $i_netdb netdb.h
15058                         $i_unistd unistd.h"
15059                 : The first arg can 'char *' or 'void *'
15060                 : The second arg is some of integral type
15061                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15062                         for yyy in size_t long int; do
15063                                 case "$netdb_host_type" in
15064                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15065                                         if ./protochk "$try" $hdrs; then
15066                                                 echo "Your system accepts $xxx for the first arg."
15067                                                 echo "...and $yyy for the second arg."
15068                                                 netdb_host_type="$xxx"
15069                                                 netdb_hlen_type="$yyy"
15070                                         fi
15071                                         ;;
15072                                 esac
15073                         done
15074                 done
15075                 : In case none of those worked, prompt the user.
15076                 case "$netdb_host_type" in
15077                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15078                         dflt='char *'
15079                         . ./myread
15080                         netdb_host_type=$ans
15081                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15082                         dflt="$sizetype"
15083                         . ./myread
15084                         netdb_hlen_type=$ans
15085                         ;;
15086                 esac
15087                 ;;
15088         *)      : no gethostbyaddr, so pick harmless defaults
15089                 netdb_host_type='char *'
15090                 netdb_hlen_type="$sizetype"
15091                 ;;
15092         esac
15093         # Remove the "const" if needed. -- but then we'll have a 
15094         # prototype clash!
15095         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15096 fi
15097
15098 : check for type of argument to gethostbyname. 
15099 if test "X$netdb_name_type" = X ; then
15100         case "$d_gethbyname" in
15101         $define)
15102                 $cat <<EOM
15103
15104 Checking to see what type of argument is accepted by gethostbyname().
15105 EOM
15106                 hdrs="$define sys/types.h
15107                         $d_socket sys/socket.h 
15108                         $i_niin netinet/in.h 
15109                         $i_netdb netdb.h
15110                         $i_unistd unistd.h"
15111                 for xxx in "const char *" "char *"; do
15112                         case "$netdb_name_type" in
15113                         '')     try="extern struct hostent *gethostbyname($xxx);"
15114                                 if ./protochk "$try" $hdrs; then
15115                                         echo "Your system accepts $xxx."
15116                                         netdb_name_type="$xxx"
15117                                 fi
15118                                 ;;
15119                         esac
15120                 done
15121                 : In case none of those worked, prompt the user.
15122                 case "$netdb_name_type" in
15123                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15124                         dflt='char *'
15125                         . ./myread
15126                         netdb_name_type=$ans
15127                         ;;
15128                 esac
15129                 ;;
15130         *)      : no gethostbyname, so pick harmless default
15131                 netdb_name_type='char *'
15132                 ;;
15133         esac
15134 fi
15135
15136 : check for type of 1st argument to getnetbyaddr. 
15137 if test "X$netdb_net_type" = X ; then
15138         case "$d_getnbyaddr" in
15139         $define)
15140                 $cat <<EOM
15141
15142 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15143 EOM
15144                 hdrs="$define sys/types.h
15145                         $d_socket sys/socket.h 
15146                         $i_niin netinet/in.h 
15147                         $i_netdb netdb.h
15148                         $i_unistd unistd.h"
15149                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15150                         case "$netdb_net_type" in
15151                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15152                                 if ./protochk "$try" $hdrs; then
15153                                         echo "Your system accepts $xxx."
15154                                         netdb_net_type="$xxx"
15155                                 fi
15156                                 ;;
15157                         esac
15158                 done
15159                 : In case none of those worked, prompt the user.
15160                 case "$netdb_net_type" in
15161                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15162                         dflt='long'
15163                         . ./myread
15164                         netdb_net_type=$ans
15165                         ;;
15166                 esac
15167                 ;;
15168         *)      : no getnetbyaddr, so pick harmless default
15169                 netdb_net_type='long'
15170                 ;;
15171         esac
15172 fi
15173 : locate the preferred pager for this system
15174 case "$pager" in
15175 '')
15176         dflt=''
15177         case "$pg" in
15178         /*) dflt=$pg;;
15179         [a-zA-Z]:/*) dflt=$pg;;
15180         esac
15181         case "$more" in
15182         /*) dflt=$more;;
15183         [a-zA-Z]:/*) dflt=$more;;
15184         esac
15185         case "$less" in
15186         /*) dflt=$less;;
15187         [a-zA-Z]:/*) dflt=$less;;
15188         esac
15189         case "$dflt" in
15190         '') dflt=/usr/ucb/more;;
15191         esac
15192         ;;
15193 *) dflt="$pager";;
15194 esac
15195 echo " "
15196 fn=f/
15197 rp='What pager is used on your system?'
15198 . ./getfile
15199 pager="$ans"
15200
15201 : see what type pids are declared as in the kernel
15202 rp="What is the type of process ids on this system?"
15203 set pid_t pidtype int stdio.h sys/types.h
15204 eval $typedef_ask
15205
15206 : Find earliest binary compatible site_perl subdirectory perl can use.
15207 case "$bincompat5005" in
15208 "$define") xs_apiversion='5.005' ;;
15209 *) xs_apiversion=$version ;;   # The current site_perl version.
15210 esac
15211 : Find earliest pure perl site_perl subdirectory perl can use.
15212 : The versioned directories started at 5.005.
15213 pm_apiversion='5.005'
15214
15215 : see if ar generates random libraries by itself
15216 echo " "
15217 echo "Checking how to generate random libraries on your machine..." >&4
15218 echo 'int bar1() { return bar2(); }' > bar1.c
15219 echo 'int bar2() { return 2; }' > bar2.c
15220 $cat > foo.c <<'EOP'
15221 int main() { printf("%d\n", bar1()); exit(0); }
15222 EOP
15223 $cc $ccflags -c bar1.c >/dev/null 2>&1
15224 $cc $ccflags -c bar2.c >/dev/null 2>&1
15225 $cc $ccflags -c foo.c >/dev/null 2>&1
15226 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15227 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15228         $run ./foobar >/dev/null 2>&1; then
15229         echo "$ar appears to generate random libraries itself."
15230         orderlib=false
15231         ranlib=":"
15232 elif $ar ts bar$_a >/dev/null 2>&1 &&
15233         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15234         $run ./foobar >/dev/null 2>&1; then
15235                 echo "a table of contents needs to be added with '$ar ts'."
15236                 orderlib=false
15237                 ranlib="$ar ts"
15238 else
15239         case "$ranlib" in
15240         :) ranlib='';;
15241         '')
15242                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15243                 $test -f $ranlib || ranlib=''
15244                 ;;
15245         esac
15246         if $test -n "$ranlib"; then
15247                 echo "your system has '$ranlib'; we'll use that."
15248                 orderlib=false
15249         else
15250                 echo "your system doesn't seem to support random libraries"
15251                 echo "so we'll use lorder and tsort to order the libraries."
15252                 orderlib=true
15253                 ranlib=":"
15254         fi
15255 fi
15256 $rm -f foo* bar* 
15257
15258 : check for type of arguments to select. 
15259 case "$selecttype" in
15260 '') case "$d_select" in
15261         $define)
15262                 echo " "
15263                 $cat <<EOM
15264 Checking to see what type of arguments are accepted by select().
15265 EOM
15266                 hdrs="$define sys/types.h
15267                         $i_systime sys/time.h 
15268                         $i_sysselct sys/select.h
15269                         $d_socket sys/socket.h"
15270                 : The first arg can be int, unsigned, or size_t
15271                 : The last arg may or may not be 'const'
15272                 val=''
15273                 : void pointer has been seen but using that
15274                 : breaks the selectminbits test
15275                 for xxx in 'fd_set *' 'int *'; do
15276                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15277                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15278                                         case "$val" in
15279                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15280                                                 if ./protochk "$try" $hdrs; then
15281                                                         echo "Your system accepts $xxx."
15282                                                         val="$xxx"
15283                                                 fi
15284                                                 ;;
15285                                         esac
15286                                 done
15287                         done
15288                 done
15289                 case "$val" in
15290                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15291                         case "$d_fd_set" in
15292                                 $define) dflt="fd_set *" ;;
15293                                 *)              dflt="int *" ;;
15294                         esac
15295                         . ./myread
15296                         val=$ans
15297                         ;;
15298                 esac
15299                 selecttype="$val"
15300                 ;;
15301         *)      : no select, so pick a harmless default
15302                 selecttype='int *'
15303                 ;;
15304         esac
15305         ;;
15306 esac
15307
15308 : check for the select 'width'
15309 case "$selectminbits" in
15310 '') case "$d_select" in
15311         $define)
15312                 $cat <<EOM
15313
15314 Checking to see on how many bits at a time your select() operates...
15315 EOM
15316                 $cat >try.c <<EOCP
15317 #include <sys/types.h>
15318 #$i_time I_TIME
15319 #$i_systime I_SYS_TIME
15320 #$i_systimek I_SYS_TIME_KERNEL
15321 #ifdef I_TIME
15322 #   include <time.h>
15323 #endif
15324 #ifdef I_SYS_TIME
15325 #   ifdef I_SYS_TIME_KERNEL
15326 #       define KERNEL
15327 #   endif
15328 #   include <sys/time.h>
15329 #   ifdef I_SYS_TIME_KERNEL
15330 #       undef KERNEL
15331 #   endif
15332 #endif
15333 #$i_sysselct I_SYS_SELECT
15334 #ifdef I_SYS_SELECT
15335 #include <sys/select.h>
15336 #endif
15337 #$d_socket HAS_SOCKET
15338 #ifdef HAS_SOCKET
15339 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15340 #endif
15341 #include <stdio.h>
15342 $selecttype b;
15343 #define S sizeof(*(b))
15344 #define MINBITS 64
15345 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15346 #define NBITS  (NBYTES * 8)
15347 int main() {
15348     char s[NBYTES];
15349     struct timeval t;
15350     int i;
15351     FILE* fp;
15352     int fd;
15353
15354     fclose(stdin);
15355     fp = fopen("try.c", "r");
15356     if (fp == 0)
15357       exit(1);
15358     fd = fileno(fp);
15359     if (fd < 0)
15360       exit(2);
15361     b = ($selecttype)s;
15362     for (i = 0; i < NBITS; i++)
15363         FD_SET(i, b);
15364     t.tv_sec  = 0;
15365     t.tv_usec = 0;
15366     select(fd + 1, b, 0, 0, &t);
15367     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15368     printf("%d\n", i + 1);
15369     return 0;
15370 }
15371 EOCP
15372                 set try
15373                 if eval $compile_ok; then
15374                         selectminbits=`$run ./try`
15375                         case "$selectminbits" in
15376                         '')     cat >&4 <<EOM
15377 Cannot figure out on how many bits at a time your select() operates.
15378 I'll play safe and guess it is 32 bits.
15379 EOM
15380                                 selectminbits=32
15381                                 bits="32 bits"
15382                                 ;;
15383                         1)      bits="1 bit" ;;
15384                         *)      bits="$selectminbits bits" ;;
15385                         esac
15386                         echo "Your select() operates on $bits at a time." >&4
15387                 else
15388                         rp='What is the minimum number of bits your select() operates on?'
15389                         case "$byteorder" in
15390                         1234|12345678)  dflt=32 ;;
15391                         *)              dflt=1  ;;
15392                         esac
15393                         . ./myread
15394                         val=$ans
15395                         selectminbits="$val"
15396                 fi
15397                 $rm -f try.* try
15398                 ;;
15399         *)      : no select, so pick a harmless default
15400                 selectminbits='32'
15401                 ;;
15402         esac
15403         ;;
15404 esac
15405
15406 : Trace out the files included by signal.h, then look for SIGxxx names.
15407 : Remove SIGARRAYSIZE used by HPUX.
15408 : Remove SIGSTKSIZE used by Linux.
15409 : Remove SIGSTKSZ used by Posix.
15410 : Remove SIGTYP void lines used by OS2.
15411 : Some cpps, like os390, dont give the file name anywhere
15412 if [ "X$fieldn" = X ]; then
15413         : Just make some guesses.  We check them later.
15414         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15415 else
15416         xxx=`echo '#include <signal.h>' |
15417         $cppstdin $cppminus $cppflags 2>/dev/null |
15418         $grep '^[       ]*#.*include' | 
15419         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15420 fi
15421 : Check this list of files to be sure we have parsed the cpp output ok.
15422 : This will also avoid potentially non-existent files, such 
15423 : as ../foo/bar.h
15424 xxxfiles=''
15425 for xx in $xxx /dev/null ; do
15426         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15427 done
15428 : If we have found no files, at least try signal.h
15429 case "$xxxfiles" in
15430 '')     xxxfiles=`./findhdr signal.h` ;;
15431 esac
15432 xxx=`awk '
15433 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15434         print substr($2, 4, 20)
15435 }
15436 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15437         print substr($3, 4, 20)
15438 }' $xxxfiles`
15439 : Append some common names just in case the awk scan failed.
15440 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15441 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15442 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15443 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15444 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15445
15446 : generate a few handy files for later
15447 $cat > signal.c <<'EOCP'
15448 #include <sys/types.h>
15449 #include <signal.h>
15450 #include <stdio.h>
15451 int main() {
15452
15453 /* Strange style to avoid deeply-nested #if/#else/#endif */
15454 #ifndef NSIG
15455 #  ifdef _NSIG
15456 #    define NSIG (_NSIG)
15457 #  endif
15458 #endif
15459
15460 #ifndef NSIG
15461 #  ifdef SIGMAX
15462 #    define NSIG (SIGMAX+1)
15463 #  endif
15464 #endif
15465
15466 #ifndef NSIG
15467 #  ifdef SIG_MAX
15468 #    define NSIG (SIG_MAX+1)
15469 #  endif
15470 #endif
15471
15472 #ifndef NSIG
15473 #  ifdef MAXSIG
15474 #    define NSIG (MAXSIG+1)
15475 #  endif
15476 #endif
15477
15478 #ifndef NSIG
15479 #  ifdef MAX_SIG
15480 #    define NSIG (MAX_SIG+1)
15481 #  endif
15482 #endif
15483
15484 #ifndef NSIG
15485 #  ifdef SIGARRAYSIZE
15486 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15487 #  endif
15488 #endif
15489
15490 #ifndef NSIG
15491 #  ifdef _sys_nsig
15492 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15493 #  endif
15494 #endif
15495
15496 /* Default to some arbitrary number that's big enough to get most
15497    of the common signals.
15498 */
15499 #ifndef NSIG
15500 #    define NSIG 50
15501 #endif
15502
15503 printf("NSIG %d\n", NSIG);
15504
15505 #ifndef JUST_NSIG
15506
15507 EOCP
15508
15509 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15510 {
15511         printf "#ifdef SIG"; printf $1; printf "\n"
15512         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15513         printf $1; printf ");\n"
15514         printf "#endif\n"
15515 }
15516 END {
15517         printf "#endif /* JUST_NSIG */\n";
15518         printf "exit(0);\n}\n";
15519 }
15520 ' >>signal.c
15521 $cat >signal.awk <<'EOP'
15522 BEGIN { ndups = 0 }
15523 $1 ~ /^NSIG$/ { nsig = $2 }
15524 ($1 !~ /^NSIG$/) && (NF == 2) {
15525     if ($2 > maxsig) { maxsig = $2 }
15526     if (sig_name[$2]) {
15527         dup_name[ndups] = $1
15528         dup_num[ndups] = $2
15529         ndups++ 
15530     }
15531     else {
15532         sig_name[$2] = $1
15533         sig_num[$2] = $2
15534     }
15535 }
15536 END { 
15537     if (nsig == 0) {
15538         nsig = maxsig + 1
15539     }
15540     printf("NSIG %d\n", nsig);
15541     for (n = 1; n < nsig; n++) {
15542         if (sig_name[n]) {
15543             printf("%s %d\n", sig_name[n], sig_num[n])
15544         }
15545         else {
15546             printf("NUM%d %d\n", n, n) 
15547         }
15548     }
15549     for (n = 0; n < ndups; n++) {
15550         printf("%s %d\n", dup_name[n], dup_num[n])
15551     }
15552 }
15553 EOP
15554 $cat >signal_cmd <<EOS
15555 $startsh
15556 if $test -s signal.lst; then
15557     echo "Using your existing signal.lst file"
15558         exit 0
15559 fi
15560 xxx="$xxx"
15561 EOS
15562 $cat >>signal_cmd <<'EOS'
15563
15564 set signal
15565 if eval $compile_ok; then
15566         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15567 else
15568         echo "(I can't seem be able to compile the whole test program)" >&4
15569         echo "(I'll try it in little pieces.)" >&4
15570         set signal -DJUST_NSIG
15571         if eval $compile_ok; then
15572                 $run ./signal$_exe > signal.nsg
15573                 $cat signal.nsg
15574         else
15575                 echo "I can't seem to figure out how many signals you have." >&4
15576                 echo "Guessing 50." >&4
15577                 echo 'NSIG 50' > signal.nsg
15578         fi
15579         : Now look at all the signal names, one at a time.
15580         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15581                 $cat > signal.c <<EOCP
15582 #include <sys/types.h>
15583 #include <signal.h>
15584 #include <stdio.h>
15585 int main() {
15586 printf("$xx %d\n", SIG${xx});
15587 return 0;
15588 }
15589 EOCP
15590                 set signal
15591                 if eval $compile; then
15592                         echo "SIG${xx} found."
15593                         $run ./signal$_exe  >> signal.ls1
15594                 else
15595                         echo "SIG${xx} NOT found."
15596                 fi
15597         done
15598         if $test -s signal.ls1; then
15599                 $cat signal.nsg signal.ls1 |
15600                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15601         fi
15602
15603 fi
15604 if $test -s signal.lst; then
15605         :
15606 else
15607         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15608         echo 'kill -l' >signal
15609         set X `csh -f <signal`
15610         $rm -f signal
15611         shift
15612         case $# in
15613         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15614         esac
15615         echo $@ | $tr ' ' $trnl | \
15616             $awk '{ printf "%s %d\n", $1, ++s; }
15617                   END { printf "NSIG %d\n", ++s }' >signal.lst
15618 fi
15619 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15620 EOS
15621 chmod a+x signal_cmd
15622 $eunicefix signal_cmd
15623
15624 : generate list of signal names
15625 echo " "
15626 case "$sig_name_init" in
15627 '') doinit=yes ;;
15628 *)  case "$sig_num_init" in
15629     ''|*,*) doinit=yes ;;
15630     esac ;;
15631 esac
15632 case "$doinit" in
15633 yes)
15634         echo "Generating a list of signal names and numbers..." >&4
15635         . ./signal_cmd
15636         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15637         sig_name=`$awk 'BEGIN { printf "ZERO " }
15638                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15639         sig_num=`$awk  'BEGIN { printf "0 " }
15640                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15641         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15642                              !/^NSIG/   { printf "\"%s\", ", $1 }
15643                              END        { printf "0\n" }' signal.lst`
15644         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15645                              !/^NSIG/   { printf "%d, ", $2}
15646                              END        { printf "0\n"}' signal.lst`
15647         ;;
15648 esac
15649 echo "The following $sig_count signals are available:"
15650 echo " "
15651 echo $sig_name | $awk \
15652 'BEGIN { linelen = 0 }
15653 {
15654         for (i = 1; i <= NF; i++) {
15655                 name = "SIG" $i " "
15656                 linelen = linelen + length(name)
15657                 if (linelen > 70) {
15658                         printf "\n"
15659                         linelen = length(name)
15660                 }
15661                 printf "%s", name
15662         }
15663         printf "\n"
15664 }'
15665 sig_size=`echo $sig_name | awk '{print NF}'`
15666 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15667
15668 echo " "
15669 case "$sizetype" in
15670 *_t) zzz="$sizetype"    ;;
15671 *)   zzz="filesize"     ;;
15672 esac
15673 echo "Checking the size of $zzz..." >&4 
15674 cat > try.c <<EOCP
15675 #include <sys/types.h>
15676 #include <stdio.h>
15677 int main() {
15678     printf("%d\n", (int)sizeof($sizetype));
15679     exit(0);
15680 }
15681 EOCP
15682 set try
15683 if eval $compile_ok; then
15684         yyy=`$run ./try`
15685         case "$yyy" in
15686         '')     sizesize=4
15687                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15688                 ;;
15689         *)      sizesize=$yyy
15690                 echo "Your $zzz size is $sizesize bytes."
15691                 ;;
15692         esac
15693 else
15694         sizesize=4
15695         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15696 fi
15697
15698
15699 : check for socklen_t
15700 echo " "
15701 echo "Checking to see if you have socklen_t..." >&4
15702 $cat >try.c <<EOCP
15703 #include <sys/types.h>
15704 #$d_socket HAS_SOCKET
15705 #ifdef HAS_SOCKET
15706 #include <sys/socket.h>
15707 #endif
15708 int main() { socklen_t x = 16; }
15709 EOCP
15710 set try
15711 if eval $compile; then
15712         val="$define"
15713         echo "You have socklen_t."
15714 else
15715         val="$undef"
15716         echo "You do not have socklen_t."
15717         case "$sizetype" in
15718         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15719         esac
15720 fi
15721 $rm -f try try.*
15722 set d_socklen_t
15723 eval $setvar
15724
15725 : see if this is a socks.h system
15726 set socks.h i_socks
15727 eval $inhdr
15728
15729 : check for type of the size argument to socket calls
15730 case "$d_socket" in
15731 "$define")
15732         $cat <<EOM
15733
15734 Checking to see what type is the last argument of accept().
15735 EOM
15736         yyy=''
15737         case "$d_socklen_t" in
15738         "$define") yyy="$yyy socklen_t"
15739         esac
15740         yyy="$yyy $sizetype int long unsigned"
15741         for xxx in $yyy; do
15742                 case "$socksizetype" in
15743                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15744                         case "$usesocks" in
15745                         "$define")
15746                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15747                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15748                                         socksizetype="$xxx"
15749                                 fi
15750                                 ;;
15751                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15752                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15753                                         socksizetype="$xxx"
15754                                 fi
15755                                 ;;
15756                         esac
15757                         ;;
15758                 esac
15759         done
15760 : In case none of those worked, prompt the user.
15761         case "$socksizetype" in
15762         '')     rp='What is the type for socket address structure sizes?'
15763                 dflt='int'
15764                 . ./myread
15765                 socksizetype=$ans
15766                 ;;
15767         esac
15768         ;;
15769 *)      : no sockets, so pick relatively harmless default
15770         socksizetype='int'
15771         ;;
15772 esac
15773
15774 : see what type is used for signed size_t
15775 set ssize_t ssizetype int stdio.h sys/types.h
15776 eval $typedef
15777 dflt="$ssizetype"
15778 $cat > try.c <<EOM
15779 #include <stdio.h>
15780 #include <sys/types.h>
15781 #define Size_t $sizetype
15782 #define SSize_t $dflt
15783 int main()
15784 {
15785         if (sizeof(Size_t) == sizeof(SSize_t))
15786                 printf("$dflt\n");
15787         else if (sizeof(Size_t) == sizeof(int))
15788                 printf("int\n");
15789         else 
15790                 printf("long\n");
15791         exit(0);
15792 }
15793 EOM
15794 echo " "
15795 set try
15796 if eval $compile_ok && $run ./try > /dev/null; then
15797         ssizetype=`$run ./try`
15798         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15799 else
15800         $cat >&4 <<EOM
15801 Help! I can't compile and run the ssize_t test program: please enlighten me!
15802 (This is probably a misconfiguration in your system or libraries, and
15803 you really ought to fix it.  Still, I'll try anyway.)
15804
15805 I need a type that is the same size as $sizetype, but is guaranteed to
15806 be signed.  Common values are ssize_t, int and long.
15807
15808 EOM
15809         rp="What signed type is the same size as $sizetype?"
15810         . ./myread
15811         ssizetype="$ans"
15812 fi
15813 $rm -f try try.*
15814
15815 : see what type of char stdio uses.
15816 echo " "
15817 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15818 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15819         echo "Your stdio uses unsigned chars." >&4
15820         stdchar="unsigned char"
15821 else
15822         echo "Your stdio uses signed chars." >&4
15823         stdchar="char"
15824 fi
15825 $rm -f stdioh
15826
15827
15828
15829 : see if time exists
15830 echo " "
15831 if test "X$d_time" = X -o X"$timetype" = X; then
15832     if set time val -f d_time; eval $csym; $val; then
15833                 echo 'time() found.' >&4
15834                 val="$define"
15835                 rp="What is the type returned by time() on this system?"
15836                 set time_t timetype long stdio.h sys/types.h
15837                 eval $typedef_ask
15838     else
15839                 echo 'time() not found, hope that will do.' >&4
15840                 val="$undef"
15841                 timetype='int';
15842     fi
15843     set d_time
15844     eval $setvar
15845 fi
15846
15847 : see what type uids are declared as in the kernel
15848 echo " "
15849 echo "Looking for the type for user ids returned by getuid()."
15850 set uid_t uidtype xxx stdio.h sys/types.h
15851 eval $typedef
15852 case "$uidtype" in
15853 xxx)
15854         xxx=`./findhdr sys/user.h`
15855         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15856         case $1 in
15857         unsigned) dflt="$1 $2" ;;
15858         *) dflt="$1" ;;
15859         esac
15860         ;;
15861 *) dflt="$uidtype";;
15862 esac
15863 case "$uidtype" in
15864 uid_t)  echo "uid_t found." ;;
15865 *)      rp="What is the type for user ids returned by getuid()?"
15866         . ./myread
15867         uidtype="$ans"
15868         ;;
15869 esac
15870
15871 echo " "
15872 case "$uidtype" in
15873 *_t) zzz="$uidtype"     ;;
15874 *)   zzz="uid"          ;;
15875 esac
15876 echo "Checking the size of $zzz..." >&4 
15877 cat > try.c <<EOCP
15878 #include <sys/types.h>
15879 #include <stdio.h>
15880 int main() {
15881     printf("%d\n", (int)sizeof($uidtype));
15882     exit(0);
15883 }
15884 EOCP
15885 set try
15886 if eval $compile_ok; then
15887         yyy=`$run ./try`
15888         case "$yyy" in
15889         '')     uidsize=4
15890                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15891                 ;;
15892         *)      uidsize=$yyy
15893                 echo "Your $zzz is $uidsize bytes long."
15894                 ;;
15895         esac
15896 else
15897         uidsize=4
15898         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15899 fi
15900
15901 echo " "
15902 case "$uidtype" in
15903 *_t) zzz="$uidtype"     ;;
15904 *)   zzz="uid"          ;;
15905 esac
15906 echo "Checking the sign of $zzz..." >&4
15907 cat > try.c <<EOCP
15908 #include <sys/types.h>
15909 #include <stdio.h>
15910 int main() {
15911         $uidtype foo = -1;
15912         if (foo < 0)
15913                 printf("-1\n");
15914         else
15915                 printf("1\n");
15916 }
15917 EOCP
15918 set try
15919 if eval $compile; then
15920         yyy=`$run ./try`
15921         case "$yyy" in
15922         '')     uidsign=1
15923                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15924                 ;;
15925         *)      uidsign=$yyy
15926                 case "$uidsign" in
15927                  1) echo "Your $zzz is unsigned." ;;
15928                 -1) echo "Your $zzz is signed."   ;;
15929                 esac
15930                 ;;
15931         esac
15932 else
15933         uidsign=1
15934         echo "(I can't compile the test program--guessing unsigned.)" >&4
15935 fi
15936
15937
15938
15939 echo " "
15940 $echo "Checking the format string to be used for uids..." >&4
15941
15942 case "$uidsign" in
15943 -1)     if $test X"$uidsize" = X"$ivsize"; then
15944                 uidformat="$ivdformat"
15945         else
15946                 if $test X"$uidsize" = X"$longsize"; then
15947                         uidformat='"ld"'
15948                 else
15949                         if $test X"$uidsize" = X"$intsize"; then
15950                                 uidformat='"d"'
15951                         else
15952                                 if $test X"$uidsize" = X"$shortsize"; then
15953                                         uidformat='"hd"'
15954                                 fi
15955                         fi
15956                 fi
15957         fi
15958         ;;
15959 *)      if $test X"$uidsize" = X"$uvsize"; then
15960                 uidformat="$uvuformat"
15961         else
15962                 if $test X"$uidsize" = X"$longsize"; then
15963                         uidformat='"lu"'
15964                 else
15965                         if $test X"$uidsize" = X"$intsize"; then
15966                                 uidformat='"u"'
15967                         else
15968                                 if $test X"$uidsize" = X"$shortsize"; then
15969                                         uidformat='"hu"'
15970                                 fi
15971                         fi
15972                 fi
15973         fi
15974         ;;
15975 esac
15976
15977 : determine compiler compiler
15978 case "$yacc" in
15979 '')
15980         dflt=yacc;;
15981 *)
15982         dflt="$yacc";;
15983 esac
15984 echo " "
15985 comp='yacc'
15986 if $test -f "$byacc$_exe"; then
15987         dflt="$byacc"
15988         comp="byacc or $comp"
15989 fi
15990 if $test -f "$bison$_exe"; then
15991         comp="$comp or bison -y"
15992 fi
15993 rp="Which compiler compiler ($comp) shall I use?"
15994 . ./myread
15995 yacc="$ans"
15996 case "$yacc" in
15997 *bis*)
15998         case "$yacc" in
15999         *-y*) ;;
16000         *)
16001                 yacc="$yacc -y"
16002                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16003                 ;;
16004         esac
16005         ;;
16006 esac
16007
16008 : see if this is a fp.h system
16009 set fp.h i_fp
16010 eval $inhdr
16011
16012 : see if this is a fp_class.h system
16013 set fp_class.h i_fp_class
16014 eval $inhdr
16015
16016 : see if this is a ieeefp.h system
16017 case "$i_ieeefp" in
16018 '' ) set ieeefp.h i_ieeefp
16019      eval $inhdr
16020      ;;
16021 esac
16022
16023 : see if this is a libutil.h system
16024 set libutil.h i_libutil
16025 eval $inhdr
16026
16027 : see if locale.h is available
16028 set locale.h i_locale
16029 eval $inhdr
16030
16031 : see if mach cthreads are available
16032 if test "X$usethreads" = "X$define"; then
16033         set mach/cthreads.h i_machcthr
16034         eval $inhdr
16035 else
16036         i_machcthr="$undef"
16037 fi
16038
16039
16040
16041 : see if this is a math.h system
16042 set math.h i_math
16043 eval $inhdr
16044
16045 : see if this is a mntent.h system
16046 set mntent.h i_mntent
16047 eval $inhdr
16048
16049 : see if ndbm.h is available
16050 set ndbm.h t_ndbm
16051 eval $inhdr
16052 case "$t_ndbm" in
16053 $define)
16054         : see if dbm_open exists
16055         set dbm_open d_dbm_open
16056         eval $inlibc
16057         case "$d_dbm_open" in
16058         $undef)
16059                 t_ndbm="$undef"
16060                 echo "We won't be including <ndbm.h>"
16061                 ;;
16062         esac
16063         ;;
16064 esac
16065 val="$t_ndbm"
16066 set i_ndbm
16067 eval $setvar
16068
16069 : see if net/errno.h is available
16070 val=''
16071 set net/errno.h val
16072 eval $inhdr
16073
16074 : Unfortunately, it causes problems on some systems.  Arrgh.
16075 case "$val" in
16076 $define)
16077         cat > try.c <<'EOM'
16078 #include <stdio.h>
16079 #include <errno.h>
16080 #include <net/errno.h>
16081 int func()
16082 {
16083         return ENOTSOCK;
16084 }
16085 EOM
16086         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16087                 echo "We'll be including <net/errno.h>." >&4
16088         else
16089                 echo "We won't be including <net/errno.h>." >&4
16090                 val="$undef"
16091         fi
16092         $rm -f try.* try
16093         ;;
16094 esac
16095 set i_neterrno
16096 eval $setvar
16097
16098 : see if netinet/tcp.h is available
16099 set netinet/tcp.h i_netinettcp
16100 eval $inhdr
16101
16102 : see if this is a poll.h system
16103 set poll.h i_poll
16104 eval $inhdr
16105
16106 : see if this is a prot.h system
16107 set prot.h i_prot
16108 eval $inhdr
16109
16110 echo " "
16111 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16112 $cat <<'EOSH' > Cppsym.know
16113 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16114 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16115 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16116 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16117 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16118 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16119 bull c cadmus clipper CMU COFF COMPILER_VERSION
16120 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16121 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16122 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16123 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16124 GLIBC GLIBC_MINOR
16125 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16126 H3050R H3050RX hbullx20 hcx host_mips
16127 hp200 hp300 hp700 HP700 hp800 hp9000
16128 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16129 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16130 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16131 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16132 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16133 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16134 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16135 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16136 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16137 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16138 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16139 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16140 MATH_HAS_NO_SIDE_EFFECTS
16141 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16142 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16143 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16144 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16145 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16146 NetBSD news1500 news1700 news1800 news1900 news3700
16147 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16148 ns32016 ns32332 ns32k nsc32000
16149 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16150 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16151 pc532 pdp11 PGC PIC plexus PORTAR posix
16152 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16153 POSIX_C_SOURCE POSIX_SOURCE POWER
16154 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16155 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16156 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16157 sony sony_news sonyrisc sparc sparclite spectrum
16158 stardent stdc STDC_EXT stratos sun sun3 sun386
16159 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16160 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16161 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16162 sysV68 sysV88 Tek4132 Tek4300 titan
16163 TM3200 TM5400 TM5600
16164 tower tower32 tower32_200 tower32_600 tower32_700
16165 tower32_800 tower32_850 tss
16166 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16167 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16168 unix UNIX95 UNIX99 unixpc unos
16169 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16170 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16171 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16172 USGr4 USGr4_2
16173 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16174 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16175 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16176 z8000
16177 EOSH
16178 # Maybe put other stuff here too.
16179 cat <<EOSH >>Cppsym.know
16180 $osname
16181 EOSH
16182 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16183 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16184 $cat Cppsym.know > Cppsym.c
16185 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16186 $rm -f Cppsym.a Cppsym.b Cppsym.c
16187 cat <<EOSH > Cppsym
16188 $startsh
16189 if $test \$# -gt 0; then
16190     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16191     if $test -s Cppsym.got; then
16192         $rm -f Cppsym.got
16193         exit 0
16194     fi
16195     $rm -f Cppsym.got
16196     exit 1
16197 else
16198     $tr " " "$trnl" | ./Cppsym.try
16199     exit 0
16200 fi
16201 EOSH
16202 chmod +x Cppsym
16203 $eunicefix Cppsym
16204 cat <<EOSH > Cppsym.try
16205 $startsh
16206 cat <<'EOCP' > try.c
16207 #include <stdio.h>
16208 int main() {
16209 EOCP
16210 $awk \\
16211 EOSH
16212 cat <<'EOSH' >> Cppsym.try
16213 'length($1) > 0 {
16214     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
16215     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
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 }'       >> try.c
16219 echo 'return 0;}' >> try.c
16220 EOSH
16221 cat <<EOSH >> Cppsym.try
16222 ccflags="$ccflags"
16223 case "$osname-$gccversion" in
16224 irix-) ccflags="\$ccflags -woff 1178" ;;
16225 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16226 esac
16227 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16228 EOSH
16229 chmod +x Cppsym.try
16230 $eunicefix Cppsym.try
16231 ./Cppsym < Cppsym.know > Cppsym.true
16232 : now check the C compiler for additional symbols
16233 postprocess_cc_v=''
16234 case "$osname" in
16235 aix) postprocess_cc_v="|$tr , ' '" ;;
16236 esac
16237 $cat >ccsym <<EOS
16238 $startsh
16239 $cat >tmp.c <<EOF
16240 extern int foo;
16241 EOF
16242 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16243 do
16244         case "\$i" in
16245         -D*) echo "\$i" | $sed 's/^-D//';;
16246         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16247         esac
16248 done
16249 $rm -f try.c
16250 EOS
16251 postprocess_cc_v=''
16252 chmod +x ccsym
16253 $eunicefix ccsym
16254 ./ccsym > ccsym1.raw
16255 if $test -s ccsym1.raw; then
16256        $sort ccsym1.raw | $uniq >ccsym.raw
16257 else
16258        mv ccsym1.raw ccsym.raw
16259 fi
16260
16261 $awk '/\=/ { print $0; next }
16262         { print $0"=1" }' ccsym.raw >ccsym.list
16263 $awk '/\=/ { print $0; next }
16264         { print $0"=1" }' Cppsym.true >ccsym.true
16265 $comm -13 ccsym.true ccsym.list >ccsym.own
16266 $comm -12 ccsym.true ccsym.list >ccsym.com
16267 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16268 also=''
16269 if $test -z ccsym.raw; then
16270         echo "Your C compiler doesn't seem to define any symbols!" >&4
16271         echo " "
16272         echo "However, your C preprocessor defines the following symbols:"
16273         $cat Cppsym.true
16274         ccsymbols=''
16275         cppsymbols=`$cat Cppsym.true`
16276         cppsymbols=`echo $cppsymbols`
16277         cppccsymbols="$cppsymbols"
16278 else
16279         if $test -s ccsym.com; then
16280                 echo "Your C compiler and pre-processor define these symbols:"
16281                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16282                 also='also '
16283                 symbols='ones'
16284                 cppccsymbols=`$cat ccsym.com`
16285                 cppccsymbols=`echo $cppccsymbols`
16286                 $test "$silent" || sleep 1
16287         fi
16288         if $test -s ccsym.cpp; then
16289                 $test "$also" && echo " "
16290                 echo "Your C pre-processor ${also}defines the following symbols:"
16291                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16292                 also='further '
16293                 cppsymbols=`$cat ccsym.cpp`
16294                 cppsymbols=`echo $cppsymbols`
16295                 $test "$silent" || sleep 1
16296         fi
16297         if $test -s ccsym.own; then
16298                 $test "$also" && echo " "
16299                 echo "Your C compiler ${also}defines the following cpp symbols:"
16300                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16301                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16302                 ccsymbols=`$cat ccsym.own`
16303                 ccsymbols=`echo $ccsymbols`
16304                 $test "$silent" || sleep 1
16305         fi
16306 fi
16307
16308 : see if this is a termio system
16309 val="$undef"
16310 val2="$undef"
16311 val3="$undef"
16312 if $test `./findhdr termios.h`; then
16313         set tcsetattr i_termios
16314         eval $inlibc
16315         val3="$i_termios"
16316 fi
16317 echo " "
16318 case "$val3" in
16319 "$define") echo "You have POSIX termios.h... good!" >&4;;
16320 *) if ./Cppsym pyr; then
16321                 case "`/bin/universe`" in
16322                 ucb) if $test `./findhdr sgtty.h`; then
16323                                 val2="$define"
16324                                 echo "<sgtty.h> found." >&4
16325                         else
16326                                 echo "System is pyramid with BSD universe."
16327                                 echo "<sgtty.h> not found--you could have problems." >&4
16328                         fi;;
16329                 *) if $test `./findhdr termio.h`; then
16330                                 val="$define"
16331                                 echo "<termio.h> found." >&4
16332                         else
16333                                 echo "System is pyramid with USG universe."
16334                                 echo "<termio.h> not found--you could have problems." >&4
16335                         fi;;
16336                 esac
16337         elif ./usg; then
16338                 if $test `./findhdr termio.h`; then
16339                         echo "<termio.h> found." >&4
16340                         val="$define"
16341                 elif $test `./findhdr sgtty.h`; then
16342                         echo "<sgtty.h> found." >&4
16343                         val2="$define"
16344                 else
16345 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16346                 fi
16347         else
16348                 if $test `./findhdr sgtty.h`; then
16349                         echo "<sgtty.h> found." >&4
16350                         val2="$define"
16351                 elif $test `./findhdr termio.h`; then
16352                         echo "<termio.h> found." >&4
16353                         val="$define"
16354                 else
16355 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16356                 fi
16357         fi;;
16358 esac
16359 set i_termio; eval $setvar
16360 val=$val2; set i_sgtty; eval $setvar
16361 val=$val3; set i_termios; eval $setvar
16362
16363 : see if this is a shadow.h system
16364 set shadow.h i_shadow
16365 eval $inhdr
16366
16367 : see if stddef is available
16368 set stddef.h i_stddef
16369 eval $inhdr
16370
16371 : see if this is a sunmath.h system
16372 set sunmath.h i_sunmath
16373 eval $inhdr
16374
16375 : see if sys/access.h is available
16376 set sys/access.h i_sysaccess
16377 eval $inhdr
16378
16379 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16380 set sys/filio.h i_sysfilio
16381 eval $inhdr
16382 echo " "
16383 if $test `./findhdr sys/ioctl.h`; then
16384         val="$define"
16385         echo '<sys/ioctl.h> found.' >&4
16386 else
16387         val="$undef"
16388         if $test $i_sysfilio = "$define"; then
16389             echo '<sys/ioctl.h> NOT found.' >&4
16390         else
16391                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16392                 $test $i_termio = "$define" && xxx="termio.h"
16393                 $test $i_termios = "$define" && xxx="termios.h"
16394 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16395         fi
16396 fi
16397 set i_sysioctl
16398 eval $setvar
16399
16400 : see if socket ioctl defs are in sys/sockio.h
16401 echo " "
16402 xxx=`./findhdr sys/sockio.h`
16403 if $test "$xxx"; then
16404         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16405                 val="$define"
16406                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16407         else
16408                 val="$undef"
16409                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16410         fi
16411 else
16412         val="$undef"
16413         $cat <<EOM
16414 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16415 EOM
16416 fi
16417 set i_syssockio
16418 eval $setvar
16419
16420
16421 : see if this is a syslog.h system
16422 set syslog.h i_syslog
16423 eval $inhdr
16424
16425
16426 : see if this is a sys/mode.h system
16427 set sys/mode.h i_sysmode
16428 eval $inhdr
16429
16430 : see if sys/resource.h has to be included
16431 set sys/resource.h i_sysresrc
16432 eval $inhdr
16433
16434 : see if sys/security.h is available
16435 set sys/security.h i_syssecrt
16436 eval $inhdr
16437
16438 : see if this is a sys/statvfs.h system
16439 set sys/statvfs.h i_sysstatvfs
16440 eval $inhdr
16441
16442 : see if this is a sys/un.h system
16443 set sys/un.h i_sysun
16444 eval $inhdr
16445
16446
16447 : see if this is a sys/utsname.h system
16448 set sys/utsname.h i_sysutsname
16449 eval $inhdr
16450
16451 : see if this is a syswait system
16452 set sys/wait.h i_syswait
16453 eval $inhdr
16454
16455 : see if this is a ustat.h system
16456 set ustat.h i_ustat
16457 eval $inhdr
16458
16459 : see if this is an utime system
16460 set utime.h i_utime
16461 eval $inhdr
16462
16463 : see if this is a values.h system
16464 set values.h i_values
16465 eval $inhdr
16466
16467 : see if this is a vfork system
16468 case "$d_vfork" in
16469 "$define")
16470         set vfork.h i_vfork
16471         eval $inhdr
16472         ;;
16473 *)
16474         i_vfork="$undef"
16475         ;;
16476 esac
16477
16478 : see if gdbm.h is available
16479 set gdbm.h t_gdbm
16480 eval $inhdr
16481 case "$t_gdbm" in
16482 $define)
16483         : see if gdbm_open exists
16484         set gdbm_open d_gdbm_open
16485         eval $inlibc
16486         case "$d_gdbm_open" in
16487         $undef)
16488                 t_gdbm="$undef"
16489                 echo "We won't be including <gdbm.h>"
16490                 ;;
16491         esac
16492         ;;
16493 esac
16494 val="$t_gdbm"
16495 set i_gdbm
16496 eval $setvar
16497
16498 echo " "
16499 echo "Looking for extensions..." >&4
16500 : If we are using the old config.sh, known_extensions may contain
16501 : old or inaccurate or duplicate values.
16502 known_extensions=''
16503 nonxs_extensions=''
16504 : We do not use find because it might not be available.
16505 : We do not just use MANIFEST because the user may have dropped
16506 : some additional extensions into the source tree and expect them
16507 : to be built.
16508
16509 : Function to recursively find available extensions, ignoring DynaLoader
16510 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16511 find_extensions='
16512     for xxx in *; do
16513        case "$xxx" in
16514            DynaLoader|dynaload) ;;
16515            *)
16516            if $test -f $xxx/$xxx.xs; then
16517                known_extensions="$known_extensions $1$xxx";
16518            elif $test -f $xxx/Makefile.PL; then
16519                nonxs_extensions="$nonxs_extensions $1$xxx";
16520            else
16521                if $test -d $xxx -a $# -lt 10; then
16522                    set $1$xxx/ $*;
16523                    cd $xxx;
16524                    eval $find_extensions;
16525                    cd ..;
16526                    shift;
16527                fi;
16528            fi
16529            ;;
16530        esac;
16531     done'
16532 tdir=`pwd`
16533 cd $rsrc/ext
16534 set X
16535 shift
16536 eval $find_extensions
16537 # Special case:  Add in threads/shared since it is not picked up by the
16538 # recursive find above (and adding in general recursive finding breaks
16539 # SDBM_File/sdbm).  A.D.  10/25/2001.
16540 known_extensions="$known_extensions threads/shared"
16541 set X $nonxs_extensions
16542 shift
16543 nonxs_extensions="$*"
16544 set X $known_extensions
16545 shift
16546 known_extensions="$*"
16547 cd $tdir
16548
16549 : Now see which are supported on this system.
16550 avail_ext=''
16551 for xxx in $known_extensions ; do
16552         case "$xxx" in
16553         DB_File|db_file)
16554                 case "$i_db" in
16555                 $define) avail_ext="$avail_ext $xxx" ;;
16556                 esac
16557                 ;;
16558         GDBM_File|gdbm_fil)
16559                 case "$i_gdbm" in 
16560                 $define) avail_ext="$avail_ext $xxx" ;;
16561                 esac
16562                 ;;
16563         I18N/Langinfo|i18n_lan)
16564                 case "$i_langinfo$d_nl_langinfo" in 
16565                 $define$define) avail_ext="$avail_ext $xxx" ;;
16566                 esac
16567                 ;;
16568         NDBM_File|ndbm_fil)
16569                 case "$i_ndbm" in
16570                 $define)
16571                     case "$osname-$use64bitint" in
16572                     cygwin-*|hpux-define)
16573                         case "$libs" in
16574                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16575                         esac
16576                         ;;
16577                     *) avail_ext="$avail_ext $xxx" ;;
16578                     esac
16579                     ;;
16580                 esac
16581                 ;;
16582         ODBM_File|odbm_fil) 
16583                 case "${i_dbm}${i_rpcsvcdbm}" in
16584                 *"${define}"*)
16585                     case "$osname-$use64bitint" in
16586                     cygwin-*|hpux-define)
16587                         case "$libs" in
16588                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16589                         esac
16590                         ;;
16591                     *) avail_ext="$avail_ext $xxx" ;;
16592                     esac
16593                     ;;
16594                 esac
16595                 ;;
16596         POSIX|posix)
16597                 case "$useposix" in
16598                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16599                 esac
16600                 ;;
16601         Opcode|opcode)
16602                 case "$useopcode" in
16603                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16604                 esac
16605                 ;;
16606         Socket|socket)
16607                 case "$d_socket" in 
16608                 true|$define|y)
16609                     case "$osname" in
16610                     beos) ;; # not unless BONE
16611                     *) avail_ext="$avail_ext $xxx" ;;
16612                     esac
16613                     ;;
16614                 esac
16615                 ;;
16616         Sys/Syslog|sys/syslog)
16617                 : XXX syslog requires socket
16618                 case "$d_socket" in 
16619                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16620                 esac
16621                 ;;
16622         Thread|thread)
16623                 case "$usethreads" in
16624                 true|$define|y)
16625                         case "$useithreads" in
16626                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16627                         esac
16628                 esac
16629                 ;;
16630         threads|threads/shared)
16631                 case "$usethreads" in
16632                 true|$define|y)
16633                         case "$useithreads" in
16634                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16635                         esac
16636                 esac
16637                 ;;
16638         IPC/SysV|ipc/sysv)
16639                 : XXX Do we need a useipcsysv variable here
16640                 case "${d_msg}${d_sem}${d_shm}" in 
16641                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16642                 esac
16643                 ;;
16644         *)      avail_ext="$avail_ext $xxx"
16645                 ;;
16646         esac
16647 done
16648
16649 set X $avail_ext
16650 shift
16651 avail_ext="$*"
16652
16653 : Now see which nonxs extensions are supported on this system.
16654 : For now assume all are.
16655 nonxs_ext=''
16656 for xxx in $nonxs_extensions ; do
16657         case "$xxx" in
16658         *)      nonxs_ext="$nonxs_ext $xxx"
16659                 ;;
16660         esac
16661 done
16662
16663 set X $nonxs_ext
16664 shift
16665 nonxs_ext="$*"
16666
16667 case $usedl in
16668 $define)
16669         $cat <<EOM
16670 A number of extensions are supplied with $package.  You may choose to
16671 compile these extensions for dynamic loading (the default), compile
16672 them into the $package executable (static loading), or not include
16673 them at all.  Answer "none" to include no extensions.
16674 Note that DynaLoader is always built and need not be mentioned here.
16675
16676 EOM
16677         case "$dynamic_ext" in
16678         '') dflt="$avail_ext" ;;
16679         *)      dflt="$dynamic_ext"
16680                 # Perhaps we are reusing an old out-of-date config.sh.
16681                 case "$hint" in
16682                 previous)
16683                         if test X"$dynamic_ext" != X"$avail_ext"; then
16684                                 $cat <<EOM
16685 NOTICE:  Your previous config.sh list may be incorrect. 
16686 The extensions now available to you are 
16687         ${avail_ext}
16688 but the default list from your previous config.sh is
16689         ${dynamic_ext} 
16690
16691 EOM
16692                         fi
16693                         ;;
16694                 esac
16695                 ;;
16696         esac
16697         case "$dflt" in
16698         '')     dflt=none;;
16699         esac
16700         rp="What extensions do you wish to load dynamically?"
16701         . ./myread
16702         case "$ans" in
16703         none) dynamic_ext=' ' ;;
16704         *) dynamic_ext="$ans" ;;
16705         esac
16706
16707         case "$static_ext" in
16708         '')
16709                 : Exclude those already listed in dynamic linking
16710                 dflt=''
16711                 for xxx in $avail_ext; do
16712                         case " $dynamic_ext " in
16713                         *" $xxx "*) ;;
16714                         *) dflt="$dflt $xxx" ;;
16715                         esac
16716                 done
16717                 set X $dflt
16718                 shift
16719                 dflt="$*"
16720                 ;;
16721         *)  dflt="$static_ext" 
16722                 ;;
16723         esac
16724
16725         case "$dflt" in
16726         '')     dflt=none;;
16727         esac
16728         rp="What extensions do you wish to load statically?"
16729         . ./myread
16730         case "$ans" in
16731         none) static_ext=' ' ;;
16732         *) static_ext="$ans" ;;
16733         esac
16734         ;;
16735 *)
16736         $cat <<EOM
16737 A number of extensions are supplied with $package.  Answer "none" 
16738 to include no extensions. 
16739 Note that DynaLoader is always built and need not be mentioned here.
16740
16741 EOM
16742         case "$static_ext" in
16743         '') dflt="$avail_ext" ;;
16744         *)      dflt="$static_ext"
16745                 # Perhaps we are reusing an old out-of-date config.sh.
16746                 case "$hint" in
16747                 previous)
16748                         if test X"$static_ext" != X"$avail_ext"; then
16749                                 $cat <<EOM
16750 NOTICE:  Your previous config.sh list may be incorrect. 
16751 The extensions now available to you are 
16752         ${avail_ext}
16753 but the default list from your previous config.sh is
16754         ${static_ext} 
16755
16756 EOM
16757                         fi
16758                         ;;
16759                 esac
16760                 ;;
16761         esac
16762         : Exclude those that are not xs extensions
16763         case "$dflt" in
16764         '')     dflt=none;;
16765         esac
16766         rp="What extensions do you wish to include?"
16767         . ./myread
16768         case "$ans" in
16769         none) static_ext=' ' ;;
16770         *) static_ext="$ans" ;;
16771         esac
16772         ;;
16773 esac
16774
16775 set X $dynamic_ext $static_ext $nonxs_ext
16776 shift
16777 extensions="$*"
16778
16779 : Remove libraries needed only for extensions
16780 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16781 : The exception is SunOS 4.x, which needs them.
16782 case "${osname}X${osvers}" in
16783 sunos*X4*)
16784     perllibs="$libs"
16785     ;;
16786 *) case "$usedl" in
16787     $define|true|[yY]*)
16788             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16789             shift
16790             perllibs="$*"
16791             ;;
16792     *)  perllibs="$libs"
16793             ;;
16794     esac
16795     ;;
16796 esac
16797
16798 : Remove build directory name from cppstdin so it can be used from
16799 : either the present location or the final installed location.
16800 echo " "
16801 : Get out of the UU directory to get correct path name.
16802 cd ..
16803 case "$cppstdin" in
16804 `pwd`/cppstdin)
16805         echo "Stripping down cppstdin path name"
16806         cppstdin=cppstdin
16807         ;;
16808 esac
16809 cd UU
16810
16811 : end of configuration questions
16812 echo " "
16813 echo "End of configuration questions."
16814 echo " "
16815
16816 : back to where it started
16817 if test -d ../UU; then
16818         cd ..
16819 fi
16820
16821 : configuration may be patched via a 'config.arch' file
16822 if $test -f config.arch; then
16823         echo "I see a config.arch file, loading it."
16824         . ./config.arch
16825 fi
16826
16827 : configuration may be patched via a 'config.over' file
16828 if $test -f config.over; then
16829         echo " "
16830         dflt=y
16831         rp='I see a config.over file.  Do you wish to load it?'
16832         . UU/myread
16833         case "$ans" in
16834         n*) echo "OK, I'll ignore it.";;
16835         *)      . ./config.over
16836                 echo "Configuration override changes have been loaded."
16837                 ;;
16838         esac
16839 fi
16840
16841 : in case they want portability, strip down executable paths
16842 case "$d_portable" in
16843 "$define")
16844         echo " "
16845         echo "Stripping down executable paths..." >&4
16846         for file in $loclist $trylist; do
16847                 eval temp=\$$file
16848                 eval $file=`basename $temp`
16849         done
16850         ;;
16851 esac
16852
16853 : create config.sh file
16854 echo " "
16855 echo "Creating config.sh..." >&4
16856 $spitshell <<EOT >config.sh
16857 $startsh
16858 #
16859 # This file was produced by running the Configure script. It holds all the
16860 # definitions figured out by Configure. Should you modify one of these values,
16861 # do not forget to propagate your changes by running "Configure -der". You may
16862 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16863 #
16864
16865 # Package name      : $package
16866 # Source directory  : $src
16867 # Configuration time: $cf_time
16868 # Configured by     : $cf_by
16869 # Target system     : $myuname
16870
16871 Author='$Author'
16872 Date='$Date'
16873 Header='$Header'
16874 Id='$Id'
16875 Locker='$Locker'
16876 Log='$Log'
16877 Mcc='$Mcc'
16878 RCSfile='$RCSfile'
16879 Revision='$Revision'
16880 Source='$Source'
16881 State='$State'
16882 _a='$_a'
16883 _exe='$_exe'
16884 _o='$_o'
16885 afs='$afs'
16886 afsroot='$afsroot'
16887 alignbytes='$alignbytes'
16888 ansi2knr='$ansi2knr'
16889 aphostname='$aphostname'
16890 api_revision='$api_revision'
16891 api_subversion='$api_subversion'
16892 api_version='$api_version'
16893 api_versionstring='$api_versionstring'
16894 ar='$ar'
16895 archlib='$archlib'
16896 archlibexp='$archlibexp'
16897 archname64='$archname64'
16898 archname='$archname'
16899 archobjs='$archobjs'
16900 awk='$awk'
16901 baserev='$baserev'
16902 bash='$bash'
16903 bin='$bin'
16904 bincompat5005='$bincompat5005'
16905 binexp='$binexp'
16906 bison='$bison'
16907 byacc='$byacc'
16908 byteorder='$byteorder'
16909 c='$c'
16910 castflags='$castflags'
16911 cat='$cat'
16912 cc='$cc'
16913 cccdlflags='$cccdlflags'
16914 ccdlflags='$ccdlflags'
16915 ccflags='$ccflags'
16916 ccflags_uselargefiles='$ccflags_uselargefiles'
16917 ccname='$ccname'
16918 ccsymbols='$ccsymbols'
16919 ccversion='$ccversion'
16920 cf_by='$cf_by'
16921 cf_email='$cf_email'
16922 cf_time='$cf_time'
16923 charsize='$charsize'
16924 chgrp='$chgrp'
16925 chmod='$chmod'
16926 chown='$chown'
16927 clocktype='$clocktype'
16928 comm='$comm'
16929 compress='$compress'
16930 contains='$contains'
16931 cp='$cp'
16932 cpio='$cpio'
16933 cpp='$cpp'
16934 cpp_stuff='$cpp_stuff'
16935 cppccsymbols='$cppccsymbols'
16936 cppflags='$cppflags'
16937 cpplast='$cpplast'
16938 cppminus='$cppminus'
16939 cpprun='$cpprun'
16940 cppstdin='$cppstdin'
16941 cppsymbols='$cppsymbols'
16942 cryptlib='$cryptlib'
16943 csh='$csh'
16944 d_Gconvert='$d_Gconvert'
16945 d_PRIEUldbl='$d_PRIEUldbl'
16946 d_PRIFUldbl='$d_PRIFUldbl'
16947 d_PRIGUldbl='$d_PRIGUldbl'
16948 d_PRIXU64='$d_PRIXU64'
16949 d_PRId64='$d_PRId64'
16950 d_PRIeldbl='$d_PRIeldbl'
16951 d_PRIfldbl='$d_PRIfldbl'
16952 d_PRIgldbl='$d_PRIgldbl'
16953 d_PRIi64='$d_PRIi64'
16954 d_PRIo64='$d_PRIo64'
16955 d_PRIu64='$d_PRIu64'
16956 d_PRIx64='$d_PRIx64'
16957 d_SCNfldbl='$d_SCNfldbl'
16958 d__fwalk='$d__fwalk'
16959 d_access='$d_access'
16960 d_accessx='$d_accessx'
16961 d_alarm='$d_alarm'
16962 d_archlib='$d_archlib'
16963 d_atolf='$d_atolf'
16964 d_atoll='$d_atoll'
16965 d_attribut='$d_attribut'
16966 d_bcmp='$d_bcmp'
16967 d_bcopy='$d_bcopy'
16968 d_bincompat5005='$d_bincompat5005'
16969 d_bsd='$d_bsd'
16970 d_bsdgetpgrp='$d_bsdgetpgrp'
16971 d_bsdsetpgrp='$d_bsdsetpgrp'
16972 d_bzero='$d_bzero'
16973 d_casti32='$d_casti32'
16974 d_castneg='$d_castneg'
16975 d_charvspr='$d_charvspr'
16976 d_chown='$d_chown'
16977 d_chroot='$d_chroot'
16978 d_chsize='$d_chsize'
16979 d_class='$d_class'
16980 d_closedir='$d_closedir'
16981 d_cmsghdr_s='$d_cmsghdr_s'
16982 d_const='$d_const'
16983 d_crypt='$d_crypt'
16984 d_csh='$d_csh'
16985 d_cuserid='$d_cuserid'
16986 d_dbl_dig='$d_dbl_dig'
16987 d_dbminitproto='$d_dbminitproto'
16988 d_difftime='$d_difftime'
16989 d_dirfd='$d_dirfd'
16990 d_dirnamlen='$d_dirnamlen'
16991 d_dlerror='$d_dlerror'
16992 d_dlopen='$d_dlopen'
16993 d_dlsymun='$d_dlsymun'
16994 d_dosuid='$d_dosuid'
16995 d_drand48proto='$d_drand48proto'
16996 d_dup2='$d_dup2'
16997 d_eaccess='$d_eaccess'
16998 d_endgrent='$d_endgrent'
16999 d_endhent='$d_endhent'
17000 d_endnent='$d_endnent'
17001 d_endpent='$d_endpent'
17002 d_endpwent='$d_endpwent'
17003 d_endsent='$d_endsent'
17004 d_eofnblk='$d_eofnblk'
17005 d_eunice='$d_eunice'
17006 d_fchdir='$d_fchdir'
17007 d_fchmod='$d_fchmod'
17008 d_fchown='$d_fchown'
17009 d_fcntl='$d_fcntl'
17010 d_fcntl_can_lock='$d_fcntl_can_lock'
17011 d_fd_macros='$d_fd_macros'
17012 d_fd_set='$d_fd_set'
17013 d_fds_bits='$d_fds_bits'
17014 d_fgetpos='$d_fgetpos'
17015 d_finite='$d_finite'
17016 d_finitel='$d_finitel'
17017 d_flexfnam='$d_flexfnam'
17018 d_flock='$d_flock'
17019 d_flockproto='$d_flockproto'
17020 d_fork='$d_fork'
17021 d_fp_class='$d_fp_class'
17022 d_fpathconf='$d_fpathconf'
17023 d_fpclass='$d_fpclass'
17024 d_fpclassify='$d_fpclassify'
17025 d_fpclassl='$d_fpclassl'
17026 d_fpos64_t='$d_fpos64_t'
17027 d_frexpl='$d_frexpl'
17028 d_fs_data_s='$d_fs_data_s'
17029 d_fseeko='$d_fseeko'
17030 d_fsetpos='$d_fsetpos'
17031 d_fstatfs='$d_fstatfs'
17032 d_fstatvfs='$d_fstatvfs'
17033 d_fsync='$d_fsync'
17034 d_ftello='$d_ftello'
17035 d_ftime='$d_ftime'
17036 d_getcwd='$d_getcwd'
17037 d_getespwnam='$d_getespwnam'
17038 d_getfsstat='$d_getfsstat'
17039 d_getgrent='$d_getgrent'
17040 d_getgrps='$d_getgrps'
17041 d_gethbyaddr='$d_gethbyaddr'
17042 d_gethbyname='$d_gethbyname'
17043 d_gethent='$d_gethent'
17044 d_gethname='$d_gethname'
17045 d_gethostprotos='$d_gethostprotos'
17046 d_getitimer='$d_getitimer'
17047 d_getlogin='$d_getlogin'
17048 d_getmnt='$d_getmnt'
17049 d_getmntent='$d_getmntent'
17050 d_getnbyaddr='$d_getnbyaddr'
17051 d_getnbyname='$d_getnbyname'
17052 d_getnent='$d_getnent'
17053 d_getnetprotos='$d_getnetprotos'
17054 d_getpagsz='$d_getpagsz'
17055 d_getpbyname='$d_getpbyname'
17056 d_getpbynumber='$d_getpbynumber'
17057 d_getpent='$d_getpent'
17058 d_getpgid='$d_getpgid'
17059 d_getpgrp2='$d_getpgrp2'
17060 d_getpgrp='$d_getpgrp'
17061 d_getppid='$d_getppid'
17062 d_getprior='$d_getprior'
17063 d_getprotoprotos='$d_getprotoprotos'
17064 d_getprpwnam='$d_getprpwnam'
17065 d_getpwent='$d_getpwent'
17066 d_getsbyname='$d_getsbyname'
17067 d_getsbyport='$d_getsbyport'
17068 d_getsent='$d_getsent'
17069 d_getservprotos='$d_getservprotos'
17070 d_getspnam='$d_getspnam'
17071 d_gettimeod='$d_gettimeod'
17072 d_gnulibc='$d_gnulibc'
17073 d_grpasswd='$d_grpasswd'
17074 d_hasmntopt='$d_hasmntopt'
17075 d_htonl='$d_htonl'
17076 d_index='$d_index'
17077 d_inetaton='$d_inetaton'
17078 d_int64_t='$d_int64_t'
17079 d_isascii='$d_isascii'
17080 d_isfinite='$d_isfinite'
17081 d_isinf='$d_isinf'
17082 d_isnan='$d_isnan'
17083 d_isnanl='$d_isnanl'
17084 d_killpg='$d_killpg'
17085 d_lchown='$d_lchown'
17086 d_ldbl_dig='$d_ldbl_dig'
17087 d_link='$d_link'
17088 d_locconv='$d_locconv'
17089 d_lockf='$d_lockf'
17090 d_longdbl='$d_longdbl'
17091 d_longlong='$d_longlong'
17092 d_lseekproto='$d_lseekproto'
17093 d_lstat='$d_lstat'
17094 d_madvise='$d_madvise'
17095 d_mblen='$d_mblen'
17096 d_mbstowcs='$d_mbstowcs'
17097 d_mbtowc='$d_mbtowc'
17098 d_memchr='$d_memchr'
17099 d_memcmp='$d_memcmp'
17100 d_memcpy='$d_memcpy'
17101 d_memmove='$d_memmove'
17102 d_memset='$d_memset'
17103 d_mkdir='$d_mkdir'
17104 d_mkdtemp='$d_mkdtemp'
17105 d_mkfifo='$d_mkfifo'
17106 d_mkstemp='$d_mkstemp'
17107 d_mkstemps='$d_mkstemps'
17108 d_mktime='$d_mktime'
17109 d_mmap='$d_mmap'
17110 d_modfl='$d_modfl'
17111 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17112 d_mprotect='$d_mprotect'
17113 d_msg='$d_msg'
17114 d_msg_ctrunc='$d_msg_ctrunc'
17115 d_msg_dontroute='$d_msg_dontroute'
17116 d_msg_oob='$d_msg_oob'
17117 d_msg_peek='$d_msg_peek'
17118 d_msg_proxy='$d_msg_proxy'
17119 d_msgctl='$d_msgctl'
17120 d_msgget='$d_msgget'
17121 d_msghdr_s='$d_msghdr_s'
17122 d_msgrcv='$d_msgrcv'
17123 d_msgsnd='$d_msgsnd'
17124 d_msync='$d_msync'
17125 d_munmap='$d_munmap'
17126 d_mymalloc='$d_mymalloc'
17127 d_nice='$d_nice'
17128 d_nl_langinfo='$d_nl_langinfo'
17129 d_nv_preserves_uv='$d_nv_preserves_uv'
17130 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17131 d_off64_t='$d_off64_t'
17132 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17133 d_oldpthreads='$d_oldpthreads'
17134 d_oldsock='$d_oldsock'
17135 d_open3='$d_open3'
17136 d_pathconf='$d_pathconf'
17137 d_pause='$d_pause'
17138 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17139 d_phostname='$d_phostname'
17140 d_pipe='$d_pipe'
17141 d_poll='$d_poll'
17142 d_portable='$d_portable'
17143 d_procselfexe='$d_procselfexe'
17144 d_pthread_atfork='$d_pthread_atfork'
17145 d_pthread_yield='$d_pthread_yield'
17146 d_pwage='$d_pwage'
17147 d_pwchange='$d_pwchange'
17148 d_pwclass='$d_pwclass'
17149 d_pwcomment='$d_pwcomment'
17150 d_pwexpire='$d_pwexpire'
17151 d_pwgecos='$d_pwgecos'
17152 d_pwpasswd='$d_pwpasswd'
17153 d_pwquota='$d_pwquota'
17154 d_qgcvt='$d_qgcvt'
17155 d_quad='$d_quad'
17156 d_readdir='$d_readdir'
17157 d_readlink='$d_readlink'
17158 d_readv='$d_readv'
17159 d_recvmsg='$d_recvmsg'
17160 d_rename='$d_rename'
17161 d_rewinddir='$d_rewinddir'
17162 d_rmdir='$d_rmdir'
17163 d_safebcpy='$d_safebcpy'
17164 d_safemcpy='$d_safemcpy'
17165 d_sanemcmp='$d_sanemcmp'
17166 d_sbrkproto='$d_sbrkproto'
17167 d_sched_yield='$d_sched_yield'
17168 d_scm_rights='$d_scm_rights'
17169 d_seekdir='$d_seekdir'
17170 d_select='$d_select'
17171 d_sem='$d_sem'
17172 d_semctl='$d_semctl'
17173 d_semctl_semid_ds='$d_semctl_semid_ds'
17174 d_semctl_semun='$d_semctl_semun'
17175 d_semget='$d_semget'
17176 d_semop='$d_semop'
17177 d_sendmsg='$d_sendmsg'
17178 d_setegid='$d_setegid'
17179 d_seteuid='$d_seteuid'
17180 d_setgrent='$d_setgrent'
17181 d_setgrps='$d_setgrps'
17182 d_sethent='$d_sethent'
17183 d_setitimer='$d_setitimer'
17184 d_setlinebuf='$d_setlinebuf'
17185 d_setlocale='$d_setlocale'
17186 d_setnent='$d_setnent'
17187 d_setpent='$d_setpent'
17188 d_setpgid='$d_setpgid'
17189 d_setpgrp2='$d_setpgrp2'
17190 d_setpgrp='$d_setpgrp'
17191 d_setprior='$d_setprior'
17192 d_setproctitle='$d_setproctitle'
17193 d_setpwent='$d_setpwent'
17194 d_setregid='$d_setregid'
17195 d_setresgid='$d_setresgid'
17196 d_setresuid='$d_setresuid'
17197 d_setreuid='$d_setreuid'
17198 d_setrgid='$d_setrgid'
17199 d_setruid='$d_setruid'
17200 d_setsent='$d_setsent'
17201 d_setsid='$d_setsid'
17202 d_setvbuf='$d_setvbuf'
17203 d_sfio='$d_sfio'
17204 d_shm='$d_shm'
17205 d_shmat='$d_shmat'
17206 d_shmatprototype='$d_shmatprototype'
17207 d_shmctl='$d_shmctl'
17208 d_shmdt='$d_shmdt'
17209 d_shmget='$d_shmget'
17210 d_sigaction='$d_sigaction'
17211 d_sigprocmask='$d_sigprocmask'
17212 d_sigsetjmp='$d_sigsetjmp'
17213 d_sockatmark='$d_sockatmark'
17214 d_sockatmarkproto='$d_sockatmarkproto'
17215 d_socket='$d_socket'
17216 d_socklen_t='$d_socklen_t'
17217 d_sockpair='$d_sockpair'
17218 d_socks5_init='$d_socks5_init'
17219 d_sqrtl='$d_sqrtl'
17220 d_sresgproto='$d_sresgproto'
17221 d_sresuproto='$d_sresuproto'
17222 d_statblks='$d_statblks'
17223 d_statfs_f_flags='$d_statfs_f_flags'
17224 d_statfs_s='$d_statfs_s'
17225 d_statvfs='$d_statvfs'
17226 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17227 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17228 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17229 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17230 d_stdio_stream_array='$d_stdio_stream_array'
17231 d_stdiobase='$d_stdiobase'
17232 d_stdstdio='$d_stdstdio'
17233 d_strchr='$d_strchr'
17234 d_strcoll='$d_strcoll'
17235 d_strctcpy='$d_strctcpy'
17236 d_strerrm='$d_strerrm'
17237 d_strerror='$d_strerror'
17238 d_strftime='$d_strftime'
17239 d_strtod='$d_strtod'
17240 d_strtol='$d_strtol'
17241 d_strtold='$d_strtold'
17242 d_strtoll='$d_strtoll'
17243 d_strtoq='$d_strtoq'
17244 d_strtoul='$d_strtoul'
17245 d_strtoull='$d_strtoull'
17246 d_strtouq='$d_strtouq'
17247 d_strxfrm='$d_strxfrm'
17248 d_suidsafe='$d_suidsafe'
17249 d_symlink='$d_symlink'
17250 d_syscall='$d_syscall'
17251 d_syscallproto='$d_syscallproto'
17252 d_sysconf='$d_sysconf'
17253 d_sysernlst='$d_sysernlst'
17254 d_syserrlst='$d_syserrlst'
17255 d_system='$d_system'
17256 d_tcgetpgrp='$d_tcgetpgrp'
17257 d_tcsetpgrp='$d_tcsetpgrp'
17258 d_telldir='$d_telldir'
17259 d_telldirproto='$d_telldirproto'
17260 d_time='$d_time'
17261 d_times='$d_times'
17262 d_truncate='$d_truncate'
17263 d_tzname='$d_tzname'
17264 d_u32align='$d_u32align'
17265 d_ualarm='$d_ualarm'
17266 d_umask='$d_umask'
17267 d_uname='$d_uname'
17268 d_union_semun='$d_union_semun'
17269 d_unordered='$d_unordered'
17270 d_usleep='$d_usleep'
17271 d_usleepproto='$d_usleepproto'
17272 d_ustat='$d_ustat'
17273 d_vendorarch='$d_vendorarch'
17274 d_vendorbin='$d_vendorbin'
17275 d_vendorlib='$d_vendorlib'
17276 d_vfork='$d_vfork'
17277 d_void_closedir='$d_void_closedir'
17278 d_voidsig='$d_voidsig'
17279 d_voidtty='$d_voidtty'
17280 d_volatile='$d_volatile'
17281 d_vprintf='$d_vprintf'
17282 d_wait4='$d_wait4'
17283 d_waitpid='$d_waitpid'
17284 d_wcstombs='$d_wcstombs'
17285 d_wctomb='$d_wctomb'
17286 d_writev='$d_writev'
17287 d_xenix='$d_xenix'
17288 date='$date'
17289 db_hashtype='$db_hashtype'
17290 db_prefixtype='$db_prefixtype'
17291 db_version_major='$db_version_major'
17292 db_version_minor='$db_version_minor'
17293 db_version_patch='$db_version_patch'
17294 defvoidused='$defvoidused'
17295 direntrytype='$direntrytype'
17296 dlext='$dlext'
17297 dlsrc='$dlsrc'
17298 doublesize='$doublesize'
17299 drand01='$drand01'
17300 dynamic_ext='$dynamic_ext'
17301 eagain='$eagain'
17302 ebcdic='$ebcdic'
17303 echo='$echo'
17304 egrep='$egrep'
17305 emacs='$emacs'
17306 eunicefix='$eunicefix'
17307 exe_ext='$exe_ext'
17308 expr='$expr'
17309 extensions='$extensions'
17310 extras='$extras'
17311 fflushNULL='$fflushNULL'
17312 fflushall='$fflushall'
17313 find='$find'
17314 firstmakefile='$firstmakefile'
17315 flex='$flex'
17316 fpossize='$fpossize'
17317 fpostype='$fpostype'
17318 freetype='$freetype'
17319 from='$from'
17320 full_ar='$full_ar'
17321 full_csh='$full_csh'
17322 full_sed='$full_sed'
17323 gccosandvers='$gccosandvers'
17324 gccversion='$gccversion'
17325 gidformat='$gidformat'
17326 gidsign='$gidsign'
17327 gidsize='$gidsize'
17328 gidtype='$gidtype'
17329 glibpth='$glibpth'
17330 gmake='$gmake'
17331 grep='$grep'
17332 groupcat='$groupcat'
17333 groupstype='$groupstype'
17334 gzip='$gzip'
17335 h_fcntl='$h_fcntl'
17336 h_sysfile='$h_sysfile'
17337 hint='$hint'
17338 hostcat='$hostcat'
17339 i16size='$i16size'
17340 i16type='$i16type'
17341 i32size='$i32size'
17342 i32type='$i32type'
17343 i64size='$i64size'
17344 i64type='$i64type'
17345 i8size='$i8size'
17346 i8type='$i8type'
17347 i_arpainet='$i_arpainet'
17348 i_bsdioctl='$i_bsdioctl'
17349 i_db='$i_db'
17350 i_dbm='$i_dbm'
17351 i_dirent='$i_dirent'
17352 i_dld='$i_dld'
17353 i_dlfcn='$i_dlfcn'
17354 i_fcntl='$i_fcntl'
17355 i_float='$i_float'
17356 i_fp='$i_fp'
17357 i_fp_class='$i_fp_class'
17358 i_gdbm='$i_gdbm'
17359 i_grp='$i_grp'
17360 i_ieeefp='$i_ieeefp'
17361 i_inttypes='$i_inttypes'
17362 i_langinfo='$i_langinfo'
17363 i_libutil='$i_libutil'
17364 i_limits='$i_limits'
17365 i_locale='$i_locale'
17366 i_machcthr='$i_machcthr'
17367 i_malloc='$i_malloc'
17368 i_math='$i_math'
17369 i_memory='$i_memory'
17370 i_mntent='$i_mntent'
17371 i_ndbm='$i_ndbm'
17372 i_netdb='$i_netdb'
17373 i_neterrno='$i_neterrno'
17374 i_netinettcp='$i_netinettcp'
17375 i_niin='$i_niin'
17376 i_poll='$i_poll'
17377 i_prot='$i_prot'
17378 i_pthread='$i_pthread'
17379 i_pwd='$i_pwd'
17380 i_rpcsvcdbm='$i_rpcsvcdbm'
17381 i_sfio='$i_sfio'
17382 i_sgtty='$i_sgtty'
17383 i_shadow='$i_shadow'
17384 i_socks='$i_socks'
17385 i_stdarg='$i_stdarg'
17386 i_stddef='$i_stddef'
17387 i_stdlib='$i_stdlib'
17388 i_string='$i_string'
17389 i_sunmath='$i_sunmath'
17390 i_sysaccess='$i_sysaccess'
17391 i_sysdir='$i_sysdir'
17392 i_sysfile='$i_sysfile'
17393 i_sysfilio='$i_sysfilio'
17394 i_sysin='$i_sysin'
17395 i_sysioctl='$i_sysioctl'
17396 i_syslog='$i_syslog'
17397 i_sysmman='$i_sysmman'
17398 i_sysmode='$i_sysmode'
17399 i_sysmount='$i_sysmount'
17400 i_sysndir='$i_sysndir'
17401 i_sysparam='$i_sysparam'
17402 i_sysresrc='$i_sysresrc'
17403 i_syssecrt='$i_syssecrt'
17404 i_sysselct='$i_sysselct'
17405 i_syssockio='$i_syssockio'
17406 i_sysstat='$i_sysstat'
17407 i_sysstatfs='$i_sysstatfs'
17408 i_sysstatvfs='$i_sysstatvfs'
17409 i_systime='$i_systime'
17410 i_systimek='$i_systimek'
17411 i_systimes='$i_systimes'
17412 i_systypes='$i_systypes'
17413 i_sysuio='$i_sysuio'
17414 i_sysun='$i_sysun'
17415 i_sysutsname='$i_sysutsname'
17416 i_sysvfs='$i_sysvfs'
17417 i_syswait='$i_syswait'
17418 i_termio='$i_termio'
17419 i_termios='$i_termios'
17420 i_time='$i_time'
17421 i_unistd='$i_unistd'
17422 i_ustat='$i_ustat'
17423 i_utime='$i_utime'
17424 i_values='$i_values'
17425 i_varargs='$i_varargs'
17426 i_varhdr='$i_varhdr'
17427 i_vfork='$i_vfork'
17428 ignore_versioned_solibs='$ignore_versioned_solibs'
17429 inc_version_list='$inc_version_list'
17430 inc_version_list_init='$inc_version_list_init'
17431 incpath='$incpath'
17432 inews='$inews'
17433 installarchlib='$installarchlib'
17434 installbin='$installbin'
17435 installman1dir='$installman1dir'
17436 installman3dir='$installman3dir'
17437 installprefix='$installprefix'
17438 installprefixexp='$installprefixexp'
17439 installprivlib='$installprivlib'
17440 installscript='$installscript'
17441 installsitearch='$installsitearch'
17442 installsitebin='$installsitebin'
17443 installsitelib='$installsitelib'
17444 installstyle='$installstyle'
17445 installusrbinperl='$installusrbinperl'
17446 installvendorarch='$installvendorarch'
17447 installvendorbin='$installvendorbin'
17448 installvendorlib='$installvendorlib'
17449 intsize='$intsize'
17450 issymlink='$issymlink'
17451 ivdformat='$ivdformat'
17452 ivsize='$ivsize'
17453 ivtype='$ivtype'
17454 known_extensions='$known_extensions'
17455 ksh='$ksh'
17456 ld='$ld'
17457 lddlflags='$lddlflags'
17458 ldflags='$ldflags'
17459 ldflags_uselargefiles='$ldflags_uselargefiles'
17460 ldlibpthname='$ldlibpthname'
17461 less='$less'
17462 lib_ext='$lib_ext'
17463 libc='$libc'
17464 libperl='$libperl'
17465 libpth='$libpth'
17466 libs='$libs'
17467 libsdirs='$libsdirs'
17468 libsfiles='$libsfiles'
17469 libsfound='$libsfound'
17470 libspath='$libspath'
17471 libswanted='$libswanted'
17472 libswanted_uselargefiles='$libswanted_uselargefiles'
17473 line='$line'
17474 lint='$lint'
17475 lkflags='$lkflags'
17476 ln='$ln'
17477 lns='$lns'
17478 locincpth='$locincpth'
17479 loclibpth='$loclibpth'
17480 longdblsize='$longdblsize'
17481 longlongsize='$longlongsize'
17482 longsize='$longsize'
17483 lp='$lp'
17484 lpr='$lpr'
17485 ls='$ls'
17486 lseeksize='$lseeksize'
17487 lseektype='$lseektype'
17488 mail='$mail'
17489 mailx='$mailx'
17490 make='$make'
17491 make_set_make='$make_set_make'
17492 mallocobj='$mallocobj'
17493 mallocsrc='$mallocsrc'
17494 malloctype='$malloctype'
17495 man1dir='$man1dir'
17496 man1direxp='$man1direxp'
17497 man1ext='$man1ext'
17498 man3dir='$man3dir'
17499 man3direxp='$man3direxp'
17500 man3ext='$man3ext'
17501 mips_type='$mips_type'
17502 mkdir='$mkdir'
17503 mmaptype='$mmaptype'
17504 modetype='$modetype'
17505 more='$more'
17506 multiarch='$multiarch'
17507 mv='$mv'
17508 myarchname='$myarchname'
17509 mydomain='$mydomain'
17510 myhostname='$myhostname'
17511 myuname='$myuname'
17512 n='$n'
17513 need_va_copy='$need_va_copy'
17514 netdb_hlen_type='$netdb_hlen_type'
17515 netdb_host_type='$netdb_host_type'
17516 netdb_name_type='$netdb_name_type'
17517 netdb_net_type='$netdb_net_type'
17518 nm='$nm'
17519 nm_opt='$nm_opt'
17520 nm_so_opt='$nm_so_opt'
17521 nonxs_ext='$nonxs_ext'
17522 nroff='$nroff'
17523 nvEUformat='$nvEUformat'
17524 nvFUformat='$nvFUformat'
17525 nvGUformat='$nvGUformat'
17526 nveformat='$nveformat'
17527 nvfformat='$nvfformat'
17528 nvgformat='$nvgformat'
17529 nvsize='$nvsize'
17530 nvtype='$nvtype'
17531 o_nonblock='$o_nonblock'
17532 obj_ext='$obj_ext'
17533 old_pthread_create_joinable='$old_pthread_create_joinable'
17534 optimize='$optimize'
17535 orderlib='$orderlib'
17536 osname='$osname'
17537 osvers='$osvers'
17538 otherlibdirs='$otherlibdirs'
17539 package='$package'
17540 pager='$pager'
17541 passcat='$passcat'
17542 patchlevel='$patchlevel'
17543 path_sep='$path_sep'
17544 perl5='$perl5'
17545 perl='$perl'
17546 perl_patchlevel='$perl_patchlevel'
17547 perladmin='$perladmin'
17548 perllibs='$perllibs'
17549 perlpath='$perlpath'
17550 pg='$pg'
17551 phostname='$phostname'
17552 pidtype='$pidtype'
17553 plibpth='$plibpth'
17554 pm_apiversion='$pm_apiversion'
17555 pmake='$pmake'
17556 pr='$pr'
17557 prefix='$prefix'
17558 prefixexp='$prefixexp'
17559 privlib='$privlib'
17560 privlibexp='$privlibexp'
17561 procselfexe='$procselfexe'
17562 prototype='$prototype'
17563 ptrsize='$ptrsize'
17564 quadkind='$quadkind'
17565 quadtype='$quadtype'
17566 randbits='$randbits'
17567 randfunc='$randfunc'
17568 randseedtype='$randseedtype'
17569 ranlib='$ranlib'
17570 rd_nodata='$rd_nodata'
17571 revision='$revision'
17572 rm='$rm'
17573 rmail='$rmail'
17574 run='$run'
17575 runnm='$runnm'
17576 sPRIEUldbl='$sPRIEUldbl'
17577 sPRIFUldbl='$sPRIFUldbl'
17578 sPRIGUldbl='$sPRIGUldbl'
17579 sPRIXU64='$sPRIXU64'
17580 sPRId64='$sPRId64'
17581 sPRIeldbl='$sPRIeldbl'
17582 sPRIfldbl='$sPRIfldbl'
17583 sPRIgldbl='$sPRIgldbl'
17584 sPRIi64='$sPRIi64'
17585 sPRIo64='$sPRIo64'
17586 sPRIu64='$sPRIu64'
17587 sPRIx64='$sPRIx64'
17588 sSCNfldbl='$sSCNfldbl'
17589 sched_yield='$sched_yield'
17590 scriptdir='$scriptdir'
17591 scriptdirexp='$scriptdirexp'
17592 sed='$sed'
17593 seedfunc='$seedfunc'
17594 selectminbits='$selectminbits'
17595 selecttype='$selecttype'
17596 sendmail='$sendmail'
17597 sh='$sh'
17598 shar='$shar'
17599 sharpbang='$sharpbang'
17600 shmattype='$shmattype'
17601 shortsize='$shortsize'
17602 shrpenv='$shrpenv'
17603 shsharp='$shsharp'
17604 sig_count='$sig_count'
17605 sig_name='$sig_name'
17606 sig_name_init='$sig_name_init'
17607 sig_num='$sig_num'
17608 sig_num_init='$sig_num_init'
17609 sig_size='$sig_size'
17610 signal_t='$signal_t'
17611 sitearch='$sitearch'
17612 sitearchexp='$sitearchexp'
17613 sitebin='$sitebin'
17614 sitebinexp='$sitebinexp'
17615 sitelib='$sitelib'
17616 sitelib_stem='$sitelib_stem'
17617 sitelibexp='$sitelibexp'
17618 siteprefix='$siteprefix'
17619 siteprefixexp='$siteprefixexp'
17620 sizesize='$sizesize'
17621 sizetype='$sizetype'
17622 sleep='$sleep'
17623 smail='$smail'
17624 so='$so'
17625 sockethdr='$sockethdr'
17626 socketlib='$socketlib'
17627 socksizetype='$socksizetype'
17628 sort='$sort'
17629 spackage='$spackage'
17630 spitshell='$spitshell'
17631 src='$src'
17632 ssizetype='$ssizetype'
17633 startperl='$startperl'
17634 startsh='$startsh'
17635 static_ext='$static_ext'
17636 stdchar='$stdchar'
17637 stdio_base='$stdio_base'
17638 stdio_bufsiz='$stdio_bufsiz'
17639 stdio_cnt='$stdio_cnt'
17640 stdio_filbuf='$stdio_filbuf'
17641 stdio_ptr='$stdio_ptr'
17642 stdio_stream_array='$stdio_stream_array'
17643 strings='$strings'
17644 submit='$submit'
17645 subversion='$subversion'
17646 sysman='$sysman'
17647 tail='$tail'
17648 tar='$tar'
17649 targetarch='$targetarch'
17650 tbl='$tbl'
17651 tee='$tee'
17652 test='$test'
17653 timeincl='$timeincl'
17654 timetype='$timetype'
17655 to='$to'
17656 touch='$touch'
17657 tr='$tr'
17658 trnl='$trnl'
17659 troff='$troff'
17660 u16size='$u16size'
17661 u16type='$u16type'
17662 u32size='$u32size'
17663 u32type='$u32type'
17664 u64size='$u64size'
17665 u64type='$u64type'
17666 u8size='$u8size'
17667 u8type='$u8type'
17668 uidformat='$uidformat'
17669 uidsign='$uidsign'
17670 uidsize='$uidsize'
17671 uidtype='$uidtype'
17672 uname='$uname'
17673 uniq='$uniq'
17674 uquadtype='$uquadtype'
17675 use5005threads='$use5005threads'
17676 use64bitall='$use64bitall'
17677 use64bitint='$use64bitint'
17678 usecrosscompile='$usecrosscompile'
17679 usedl='$usedl'
17680 useithreads='$useithreads'
17681 uselargefiles='$uselargefiles'
17682 uselongdouble='$uselongdouble'
17683 usemorebits='$usemorebits'
17684 usemultiplicity='$usemultiplicity'
17685 usemymalloc='$usemymalloc'
17686 usenm='$usenm'
17687 useopcode='$useopcode'
17688 useperlio='$useperlio'
17689 useposix='$useposix'
17690 usereentrant='$usereentrant'
17691 usesfio='$usesfio'
17692 useshrplib='$useshrplib'
17693 usesocks='$usesocks'
17694 usethreads='$usethreads'
17695 usevendorprefix='$usevendorprefix'
17696 usevfork='$usevfork'
17697 usrinc='$usrinc'
17698 uuname='$uuname'
17699 uvXUformat='$uvXUformat'
17700 uvoformat='$uvoformat'
17701 uvsize='$uvsize'
17702 uvtype='$uvtype'
17703 uvuformat='$uvuformat'
17704 uvxformat='$uvxformat'
17705 vendorarch='$vendorarch'
17706 vendorarchexp='$vendorarchexp'
17707 vendorbin='$vendorbin'
17708 vendorbinexp='$vendorbinexp'
17709 vendorlib='$vendorlib'
17710 vendorlib_stem='$vendorlib_stem'
17711 vendorlibexp='$vendorlibexp'
17712 vendorprefix='$vendorprefix'
17713 vendorprefixexp='$vendorprefixexp'
17714 version='$version'
17715 version_patchlevel_string='$version_patchlevel_string'
17716 versiononly='$versiononly'
17717 vi='$vi'
17718 voidflags='$voidflags'
17719 xlibpth='$xlibpth'
17720 xs_apiversion='$xs_apiversion'
17721 yacc='$yacc'
17722 yaccflags='$yaccflags'
17723 zcat='$zcat'
17724 zip='$zip'
17725 EOT
17726
17727 : Add in command line options if available
17728 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17729
17730 : add special variables
17731 $test -f $src/patchlevel.h && \
17732 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17733 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17734 echo "PERL_CONFIG_SH=true" >>config.sh
17735
17736 : propagate old symbols
17737 if $test -f UU/config.sh; then
17738         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17739         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17740         $sort | $uniq -u >UU/oldsyms
17741         set X `cat UU/oldsyms`
17742         shift
17743         case $# in
17744         0) ;;
17745         *)
17746                 cat <<EOM
17747 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17748 EOM
17749                 echo "# Variables propagated from previous config.sh file." >>config.sh
17750                 for sym in `cat UU/oldsyms`; do
17751                         echo "    Propagating $hint variable "'$'"$sym..."
17752                         eval 'tmp="$'"${sym}"'"'
17753                         echo "$tmp" | \
17754                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17755                 done
17756                 ;;
17757         esac
17758 fi
17759
17760 : Finish up by extracting the .SH files
17761 case "$alldone" in
17762 exit)
17763         $rm -rf UU
17764         echo "Extraction done."
17765         exit 0
17766         ;;
17767 cont)
17768         ;;
17769 '')
17770         dflt=''
17771         nostick=true
17772         $cat <<EOM
17773
17774 If you'd like to make any changes to the config.sh file before I begin
17775 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17776
17777 EOM
17778         rp="Press return or use a shell escape to edit config.sh:"
17779         . UU/myread
17780         nostick=''
17781         case "$ans" in
17782         '') ;;
17783         *) : in case they cannot read
17784                 sh 1>&4 -c "$ans";;
17785         esac
17786         ;;
17787 esac
17788
17789 : if this fails, just run all the .SH files by hand
17790 . ./config.sh
17791
17792 echo " "
17793 exec 1>&4
17794 pwd=`pwd`
17795 . ./UU/extract
17796 cd $pwd
17797
17798 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17799         dflt=y
17800         case "$silent" in
17801         true) ;;
17802         *)
17803                 $cat <<EOM
17804
17805 Now you need to generate make dependencies by running "$make depend".
17806 You might prefer to run it in background: "$make depend > makedepend.out &"
17807 It can take a while, so you might not want to run it right now.
17808
17809 EOM
17810                 ;;
17811         esac
17812         rp="Run $make depend now?"
17813         . UU/myread
17814         case "$ans" in
17815         y*)
17816                 $make depend && echo "Now you must run '$make'."
17817                 ;;
17818         *)
17819                 echo "You must run '$make depend' then '$make'."
17820                 ;;
17821         esac
17822 elif test -f [Mm]akefile; then
17823         echo " "
17824         echo "Now you must run a $make."
17825 else
17826         echo "Configure done."
17827 fi
17828
17829 if $test -f Policy.sh; then
17830     $cat <<EOM
17831
17832 If you compile $package on a different machine or from a different object
17833 directory, copy the Policy.sh file from this object directory to the
17834 new one before you run Configure -- this will help you with most of
17835 the policy defaults.
17836
17837 EOM
17838 fi
17839 if $test -f config.msg; then
17840     echo "Hmm.  I also noted the following information while running:"
17841     echo " "
17842     $cat config.msg >&4
17843     $rm -f config.msg
17844 fi
17845 $rm -f kit*isdone ark*isdone
17846 $rm -rf UU
17847
17848 : End of Configure
17849