Also the search for cat needs to be _exe-aware.
[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 21 17:46:40 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 ccname=''
169 ccversion=''
170 ccsymbols=''
171 cppccsymbols=''
172 cppsymbols=''
173 from=''
174 run=''
175 targetarch=''
176 to=''
177 usecrosscompile=''
178 perllibs=''
179 dynamic_ext=''
180 extensions=''
181 known_extensions=''
182 nonxs_ext=''
183 static_ext=''
184 useopcode=''
185 useposix=''
186 extras=''
187 d_bsd=''
188 d_eunice=''
189 d_xenix=''
190 eunicefix=''
191 Mcc=''
192 ar=''
193 awk=''
194 bash=''
195 bison=''
196 byacc=''
197 cat=''
198 chgrp=''
199 chmod=''
200 chown=''
201 comm=''
202 compress=''
203 cp=''
204 cpio=''
205 cpp=''
206 csh=''
207 date=''
208 echo=''
209 egrep=''
210 emacs=''
211 expr=''
212 find=''
213 flex=''
214 gmake=''
215 grep=''
216 gzip=''
217 inews=''
218 ksh=''
219 less=''
220 line=''
221 lint=''
222 ln=''
223 lp=''
224 lpr=''
225 ls=''
226 mail=''
227 mailx=''
228 make=''
229 mkdir=''
230 more=''
231 mv=''
232 nm=''
233 nroff=''
234 perl=''
235 pg=''
236 pmake=''
237 pr=''
238 rm=''
239 rmail=''
240 sed=''
241 sendmail=''
242 shar=''
243 sleep=''
244 smail=''
245 sort=''
246 submit=''
247 tail=''
248 tar=''
249 tbl=''
250 tee=''
251 test=''
252 touch=''
253 tr=''
254 troff=''
255 uname=''
256 uniq=''
257 uuname=''
258 vi=''
259 zcat=''
260 zip=''
261 full_ar=''
262 full_sed=''
263 libswanted=''
264 hint=''
265 myuname=''
266 osname=''
267 osvers=''
268 Author=''
269 Date=''
270 Header=''
271 Id=''
272 Locker=''
273 Log=''
274 RCSfile=''
275 Revision=''
276 Source=''
277 State=''
278 _a=''
279 _exe=''
280 _o=''
281 archobjs=''
282 exe_ext=''
283 firstmakefile=''
284 lib_ext=''
285 obj_ext=''
286 path_sep=''
287 afs=''
288 afsroot=''
289 alignbytes=''
290 ansi2knr=''
291 archlib=''
292 archlibexp=''
293 d_archlib=''
294 installarchlib=''
295 archname=''
296 myarchname=''
297 d_atolf=''
298 d_atoll=''
299 baserev=''
300 bin=''
301 binexp=''
302 installbin=''
303 bincompat5005=''
304 d_bincompat5005=''
305 byteorder=''
306 cc=''
307 ccflags=''
308 cppflags=''
309 ldflags=''
310 lkflags=''
311 locincpth=''
312 optimize=''
313 cf_email=''
314 cf_by=''
315 cf_time=''
316 charsize=''
317 contains=''
318 cpp_stuff=''
319 cpplast=''
320 cppminus=''
321 cpprun=''
322 cppstdin=''
323 d__fwalk=''
324 d_access=''
325 d_accessx=''
326 d_alarm=''
327 d_attribut=''
328 d_bcmp=''
329 d_bcopy=''
330 d_bzero=''
331 d_casti32=''
332 castflags=''
333 d_castneg=''
334 d_chown=''
335 d_chroot=''
336 d_chsize=''
337 d_class=''
338 d_closedir=''
339 d_void_closedir=''
340 d_cmsghdr_s=''
341 d_const=''
342 cryptlib=''
343 d_crypt=''
344 d_csh=''
345 full_csh=''
346 d_cuserid=''
347 d_dbl_dig=''
348 d_dbminitproto=''
349 d_difftime=''
350 d_dirfd=''
351 d_dlerror=''
352 d_dlopen=''
353 d_dlsymun=''
354 d_dosuid=''
355 d_suidsafe=''
356 d_drand48proto=''
357 d_dup2=''
358 d_eaccess=''
359 d_endgrent=''
360 d_endhent=''
361 d_endnent=''
362 d_endpent=''
363 d_endpwent=''
364 d_endsent=''
365 d_fchdir=''
366 d_fchmod=''
367 d_fchown=''
368 d_fcntl=''
369 d_fcntl_can_lock=''
370 d_fd_macros=''
371 d_fd_set=''
372 d_fds_bits=''
373 d_fgetpos=''
374 d_finite=''
375 d_finitel=''
376 d_flexfnam=''
377 d_flock=''
378 d_flockproto=''
379 d_fork=''
380 d_fp_class=''
381 d_fpclass=''
382 d_fpclassify=''
383 d_fpclassl=''
384 d_fpos64_t=''
385 d_frexpl=''
386 d_fs_data_s=''
387 d_fseeko=''
388 d_fsetpos=''
389 d_fstatfs=''
390 d_fsync=''
391 d_ftello=''
392 d_ftime=''
393 d_gettimeod=''
394 d_Gconvert=''
395 d_getcwd=''
396 d_getespwnam=''
397 d_getfsstat=''
398 d_getgrent=''
399 d_getgrps=''
400 d_gethbyaddr=''
401 d_gethbyname=''
402 d_gethent=''
403 aphostname=''
404 d_gethname=''
405 d_phostname=''
406 d_uname=''
407 d_gethostprotos=''
408 d_getitimer=''
409 d_getlogin=''
410 d_getmnt=''
411 d_getmntent=''
412 d_getnbyaddr=''
413 d_getnbyname=''
414 d_getnent=''
415 d_getnetprotos=''
416 d_getpagsz=''
417 d_getpent=''
418 d_getpgid=''
419 d_getpgrp2=''
420 d_bsdgetpgrp=''
421 d_getpgrp=''
422 d_getppid=''
423 d_getprior=''
424 d_getpbyname=''
425 d_getpbynumber=''
426 d_getprotoprotos=''
427 d_getprpwnam=''
428 d_getpwent=''
429 d_getsent=''
430 d_getservprotos=''
431 d_getspnam=''
432 d_getsbyname=''
433 d_getsbyport=''
434 d_gnulibc=''
435 d_hasmntopt=''
436 d_htonl=''
437 d_inetaton=''
438 d_int64_t=''
439 d_isascii=''
440 d_isfinite=''
441 d_isinf=''
442 d_isnan=''
443 d_isnanl=''
444 d_killpg=''
445 d_lchown=''
446 d_ldbl_dig=''
447 d_link=''
448 d_locconv=''
449 d_lockf=''
450 d_longdbl=''
451 longdblsize=''
452 d_longlong=''
453 longlongsize=''
454 d_lseekproto=''
455 d_lstat=''
456 d_madvise=''
457 d_mblen=''
458 d_mbstowcs=''
459 d_mbtowc=''
460 d_memchr=''
461 d_memcmp=''
462 d_memcpy=''
463 d_memmove=''
464 d_memset=''
465 d_mkdir=''
466 d_mkdtemp=''
467 d_mkfifo=''
468 d_mkstemp=''
469 d_mkstemps=''
470 d_mktime=''
471 d_mmap=''
472 mmaptype=''
473 d_modfl=''
474 d_modfl_pow32_bug=''
475 d_mprotect=''
476 d_msg=''
477 d_msgctl=''
478 d_msgget=''
479 d_msghdr_s=''
480 d_msgrcv=''
481 d_msgsnd=''
482 d_msync=''
483 d_munmap=''
484 d_nice=''
485 d_nl_langinfo=''
486 d_off64_t=''
487 d_open3=''
488 d_fpathconf=''
489 d_pathconf=''
490 d_pause=''
491 d_pipe=''
492 d_poll=''
493 d_portable=''
494 d_procselfexe=''
495 procselfexe=''
496 d_old_pthread_create_joinable=''
497 old_pthread_create_joinable=''
498 d_pthread_atfork=''
499 d_pthread_yield=''
500 d_sched_yield=''
501 sched_yield=''
502 d_qgcvt=''
503 d_readdir=''
504 d_rewinddir=''
505 d_seekdir=''
506 d_telldir=''
507 d_readlink=''
508 d_readv=''
509 d_recvmsg=''
510 d_rename=''
511 d_rmdir=''
512 d_safebcpy=''
513 d_safemcpy=''
514 d_sanemcmp=''
515 d_sbrkproto=''
516 d_select=''
517 d_sem=''
518 d_semctl=''
519 d_semget=''
520 d_semop=''
521 d_sendmsg=''
522 d_setegid=''
523 d_seteuid=''
524 d_setgrent=''
525 d_setgrps=''
526 d_sethent=''
527 d_setitimer=''
528 d_setlinebuf=''
529 d_setlocale=''
530 d_setnent=''
531 d_setpent=''
532 d_setpgid=''
533 d_setpgrp2=''
534 d_bsdsetpgrp=''
535 d_setpgrp=''
536 d_setprior=''
537 d_setproctitle=''
538 d_setpwent=''
539 d_setregid=''
540 d_setresgid=''
541 d_setresuid=''
542 d_setreuid=''
543 d_setrgid=''
544 d_setruid=''
545 d_setsent=''
546 d_setsid=''
547 d_setvbuf=''
548 d_sfio=''
549 usesfio=''
550 d_shm=''
551 d_shmat=''
552 d_shmatprototype=''
553 shmattype=''
554 d_shmctl=''
555 d_shmdt=''
556 d_shmget=''
557 d_sigaction=''
558 d_sigprocmask=''
559 d_sigsetjmp=''
560 d_sockatmark=''
561 d_sockatmarkproto=''
562 d_msg_ctrunc=''
563 d_msg_dontroute=''
564 d_msg_oob=''
565 d_msg_peek=''
566 d_msg_proxy=''
567 d_oldsock=''
568 d_scm_rights=''
569 d_socket=''
570 d_sockpair=''
571 sockethdr=''
572 socketlib=''
573 d_socklen_t=''
574 d_socks5_init=''
575 d_sqrtl=''
576 d_sresgproto=''
577 d_sresuproto=''
578 d_statblks=''
579 d_statfs_f_flags=''
580 d_statfs_s=''
581 d_fstatvfs=''
582 d_statvfs=''
583 d_stdio_cnt_lval=''
584 d_stdio_ptr_lval=''
585 d_stdio_ptr_lval_nochange_cnt=''
586 d_stdio_ptr_lval_sets_cnt=''
587 d_stdiobase=''
588 d_stdstdio=''
589 stdio_base=''
590 stdio_bufsiz=''
591 stdio_cnt=''
592 stdio_filbuf=''
593 stdio_ptr=''
594 d_index=''
595 d_strchr=''
596 d_strcoll=''
597 d_strctcpy=''
598 d_strerrm=''
599 d_strerror=''
600 d_sysernlst=''
601 d_syserrlst=''
602 d_strftime=''
603 d_strtod=''
604 d_strtol=''
605 d_strtold=''
606 d_strtoll=''
607 d_strtoq=''
608 d_strtoul=''
609 d_strtoull=''
610 d_strtouq=''
611 d_strxfrm=''
612 d_symlink=''
613 d_syscall=''
614 d_syscallproto=''
615 d_sysconf=''
616 d_system=''
617 d_tcgetpgrp=''
618 d_tcsetpgrp=''
619 d_telldirproto=''
620 d_time=''
621 timetype=''
622 clocktype=''
623 d_times=''
624 d_truncate=''
625 d_tzname=''
626 d_u32align=''
627 d_ualarm=''
628 d_umask=''
629 d_semctl_semid_ds=''
630 d_semctl_semun=''
631 d_union_semun=''
632 d_unordered=''
633 d_usleep=''
634 d_usleepproto=''
635 d_ustat=''
636 d_vfork=''
637 usevfork=''
638 d_voidsig=''
639 signal_t=''
640 d_volatile=''
641 d_charvspr=''
642 d_vprintf=''
643 d_wait4=''
644 d_waitpid=''
645 d_wcstombs=''
646 d_wctomb=''
647 d_writev=''
648 dlext=''
649 cccdlflags=''
650 ccdlflags=''
651 dlsrc=''
652 ld=''
653 lddlflags=''
654 usedl=''
655 doublesize=''
656 ebcdic=''
657 fflushNULL=''
658 fflushall=''
659 fpossize=''
660 fpostype=''
661 gccosandvers=''
662 gccversion=''
663 gidformat=''
664 gidsign=''
665 gidsize=''
666 gidtype=''
667 groupstype=''
668 h_fcntl=''
669 h_sysfile=''
670 i_arpainet=''
671 db_hashtype=''
672 db_prefixtype=''
673 db_version_major=''
674 db_version_minor=''
675 db_version_patch=''
676 i_db=''
677 i_dbm=''
678 i_rpcsvcdbm=''
679 d_dirnamlen=''
680 direntrytype=''
681 i_dirent=''
682 i_dld=''
683 i_dlfcn=''
684 i_fcntl=''
685 i_float=''
686 i_fp=''
687 i_fp_class=''
688 i_gdbm=''
689 d_grpasswd=''
690 i_grp=''
691 i_ieeefp=''
692 i_inttypes=''
693 i_langinfo=''
694 i_libutil=''
695 i_limits=''
696 i_locale=''
697 i_machcthr=''
698 i_malloc=''
699 i_math=''
700 i_memory=''
701 i_mntent=''
702 i_ndbm=''
703 i_netdb=''
704 i_neterrno=''
705 i_netinettcp=''
706 i_niin=''
707 i_sysin=''
708 i_poll=''
709 i_prot=''
710 i_pthread=''
711 d_pwage=''
712 d_pwchange=''
713 d_pwclass=''
714 d_pwcomment=''
715 d_pwexpire=''
716 d_pwgecos=''
717 d_pwpasswd=''
718 d_pwquota=''
719 i_pwd=''
720 i_sfio=''
721 i_shadow=''
722 i_socks=''
723 i_stddef=''
724 i_stdlib=''
725 i_string=''
726 strings=''
727 i_sunmath=''
728 i_sysaccess=''
729 i_sysdir=''
730 i_sysfile=''
731 d_voidtty=''
732 i_bsdioctl=''
733 i_sysfilio=''
734 i_sysioctl=''
735 i_syssockio=''
736 i_syslog=''
737 i_sysmman=''
738 i_sysmode=''
739 i_sysmount=''
740 i_sysndir=''
741 i_sysparam=''
742 i_sysresrc=''
743 i_syssecrt=''
744 i_sysselct=''
745 i_sysstat=''
746 i_sysstatfs=''
747 i_sysstatvfs=''
748 i_systimes=''
749 i_systypes=''
750 i_sysuio=''
751 i_sysun=''
752 i_sysutsname=''
753 i_sysvfs=''
754 i_syswait=''
755 i_sgtty=''
756 i_termio=''
757 i_termios=''
758 i_systime=''
759 i_systimek=''
760 i_time=''
761 timeincl=''
762 i_unistd=''
763 i_ustat=''
764 i_utime=''
765 i_values=''
766 i_stdarg=''
767 i_varargs=''
768 i_varhdr=''
769 i_vfork=''
770 inc_version_list=''
771 inc_version_list_init=''
772 installprefix=''
773 installprefixexp=''
774 installstyle=''
775 installusrbinperl=''
776 intsize=''
777 longsize=''
778 shortsize=''
779 issymlink=''
780 libc=''
781 ldlibpthname=''
782 libperl=''
783 shrpenv=''
784 useshrplib=''
785 glibpth=''
786 libpth=''
787 loclibpth=''
788 plibpth=''
789 xlibpth=''
790 ignore_versioned_solibs=''
791 libs=''
792 libsdirs=''
793 libsfiles=''
794 libsfound=''
795 libspath=''
796 lns=''
797 d_PRIEUldbl=''
798 d_PRIFUldbl=''
799 d_PRIGUldbl=''
800 d_PRIeldbl=''
801 d_PRIfldbl=''
802 d_PRIgldbl=''
803 d_SCNfldbl=''
804 sPRIEUldbl=''
805 sPRIFUldbl=''
806 sPRIGUldbl=''
807 sPRIeldbl=''
808 sPRIfldbl=''
809 sPRIgldbl=''
810 sSCNfldbl=''
811 lseeksize=''
812 lseektype=''
813 make_set_make=''
814 d_mymalloc=''
815 freetype=''
816 mallocobj=''
817 mallocsrc=''
818 malloctype=''
819 usemymalloc=''
820 installman1dir=''
821 man1dir=''
822 man1direxp=''
823 man1ext=''
824 installman3dir=''
825 man3dir=''
826 man3direxp=''
827 man3ext=''
828 modetype=''
829 multiarch=''
830 mydomain=''
831 myhostname=''
832 phostname=''
833 c=''
834 n=''
835 d_eofnblk=''
836 eagain=''
837 o_nonblock=''
838 rd_nodata=''
839 need_va_copy=''
840 netdb_hlen_type=''
841 netdb_host_type=''
842 netdb_name_type=''
843 netdb_net_type=''
844 groupcat=''
845 hostcat=''
846 passcat=''
847 orderlib=''
848 ranlib=''
849 d_perl_otherlibdirs=''
850 otherlibdirs=''
851 package=''
852 spackage=''
853 pager=''
854 api_revision=''
855 api_subversion=''
856 api_version=''
857 api_versionstring=''
858 patchlevel=''
859 perl_patchlevel=''
860 revision=''
861 subversion=''
862 version=''
863 version_patchlevel_string=''
864 perl5=''
865 perladmin=''
866 perlpath=''
867 d_nv_preserves_uv=''
868 d_nv_preserves_uv_bits=''
869 i16size=''
870 i16type=''
871 i32size=''
872 i32type=''
873 i64size=''
874 i64type=''
875 i8size=''
876 i8type=''
877 ivsize=''
878 ivtype=''
879 nvsize=''
880 nvtype=''
881 u16size=''
882 u16type=''
883 u32size=''
884 u32type=''
885 u64size=''
886 u64type=''
887 u8size=''
888 u8type=''
889 uvsize=''
890 uvtype=''
891 ivdformat=''
892 nvEUformat=''
893 nvFUformat=''
894 nvGUformat=''
895 nveformat=''
896 nvfformat=''
897 nvgformat=''
898 uvXUformat=''
899 uvoformat=''
900 uvuformat=''
901 uvxformat=''
902 pidtype=''
903 prefix=''
904 prefixexp=''
905 installprivlib=''
906 privlib=''
907 privlibexp=''
908 prototype=''
909 ptrsize=''
910 d_PRIXU64=''
911 d_PRId64=''
912 d_PRIi64=''
913 d_PRIo64=''
914 d_PRIu64=''
915 d_PRIx64=''
916 sPRIXU64=''
917 sPRId64=''
918 sPRIi64=''
919 sPRIo64=''
920 sPRIu64=''
921 sPRIx64=''
922 d_quad=''
923 quadkind=''
924 quadtype=''
925 uquadtype=''
926 drand01=''
927 randbits=''
928 randfunc=''
929 randseedtype=''
930 seedfunc=''
931 installscript=''
932 scriptdir=''
933 scriptdirexp=''
934 selectminbits=''
935 selecttype=''
936 sh=''
937 sig_count=''
938 sig_name=''
939 sig_name_init=''
940 sig_num=''
941 sig_num_init=''
942 sig_size=''
943 installsitearch=''
944 sitearch=''
945 sitearchexp=''
946 installsitebin=''
947 sitebin=''
948 sitebinexp=''
949 installsitelib=''
950 sitelib=''
951 sitelib_stem=''
952 sitelibexp=''
953 siteprefix=''
954 siteprefixexp=''
955 sizesize=''
956 sizetype=''
957 so=''
958 socksizetype=''
959 sharpbang=''
960 shsharp=''
961 spitshell=''
962 src=''
963 ssizetype=''
964 startperl=''
965 startsh=''
966 stdchar=''
967 d_stdio_stream_array=''
968 stdio_stream_array=''
969 sysman=''
970 trnl=''
971 uidformat=''
972 uidsign=''
973 uidsize=''
974 uidtype=''
975 archname64=''
976 use64bitall=''
977 use64bitint=''
978 ccflags_uselargefiles=''
979 ldflags_uselargefiles=''
980 libswanted_uselargefiles=''
981 uselargefiles=''
982 uselongdouble=''
983 usemorebits=''
984 usemultiplicity=''
985 nm_opt=''
986 nm_so_opt=''
987 runnm=''
988 usenm=''
989 useperlio=''
990 usesocks=''
991 d_oldpthreads=''
992 use5005threads=''
993 useithreads=''
994 usereentrant=''
995 usethreads=''
996 incpath=''
997 mips_type=''
998 usrinc=''
999 d_vendorarch=''
1000 installvendorarch=''
1001 vendorarch=''
1002 vendorarchexp=''
1003 d_vendorbin=''
1004 installvendorbin=''
1005 vendorbin=''
1006 vendorbinexp=''
1007 d_vendorlib=''
1008 installvendorlib=''
1009 vendorlib=''
1010 vendorlib_stem=''
1011 vendorlibexp=''
1012 usevendorprefix=''
1013 vendorprefix=''
1014 vendorprefixexp=''
1015 versiononly=''
1016 defvoidused=''
1017 voidflags=''
1018 pm_apiversion=''
1019 xs_apiversion=''
1020 yacc=''
1021 yaccflags=''
1022 CONFIG=''
1023
1024 define='define'
1025 undef='undef'
1026 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1027 rmlist=''
1028
1029 : We must find out about Eunice early
1030 eunicefix=':'
1031 if test -f /etc/unixtovms; then
1032         eunicefix=/etc/unixtovms
1033 fi
1034 if test -f /etc/unixtovms.exe; then
1035         eunicefix=/etc/unixtovms.exe
1036 fi
1037
1038 i_whoami=''
1039 ccname=''
1040 ccversion=''
1041 perllibs=''
1042 : set useposix=false in your hint file to disable the POSIX extension.
1043 useposix=true
1044 : set useopcode=false in your hint file to disable the Opcode extension.
1045 useopcode=true
1046 : Trailing extension.  Override this in a hint file, if needed.
1047 _exe=''
1048 : Extra object files, if any, needed on this platform.
1049 archobjs=''
1050 archname=''
1051 : Possible local include directories to search.
1052 : Set locincpth to "" in a hint file to defeat local include searches.
1053 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1054 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1055 :
1056 : no include file wanted by default
1057 inclwanted=''
1058
1059 groupstype=''
1060 libnames=''
1061 : change the next line if compiling for Xenix/286 on Xenix/386
1062 xlibpth='/usr/lib/386 /lib/386'
1063 : Possible local library directories to search.
1064 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1065 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1066
1067 : general looking path for locating libraries
1068 glibpth="/lib /usr/lib $xlibpth"
1069 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1070 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1071 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1072
1073 : Private path used by Configure to find libraries.  Its value
1074 : is prepended to libpth. This variable takes care of special
1075 : machines, like the mips.  Usually, it should be empty.
1076 plibpth=''
1077
1078 : default library list
1079 libswanted=''
1080 : some systems want to use only the non-versioned libso:s
1081 ignore_versioned_solibs=''
1082 archname64=''
1083 ccflags_uselargefiles=''
1084 ldflags_uselargefiles=''
1085 libswanted_uselargefiles=''
1086 : set usemultiplicity on the Configure command line to enable multiplicity.
1087 : set usesocks on the Configure command line to enable socks.
1088 : set usethreads on the Configure command line to enable threads.
1089 usereentrant='undef'
1090 : full support for void wanted by default
1091 defvoidused=15
1092
1093 : List of libraries we want.
1094 : If anyone needs -lnet, put it in a hint file.
1095 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1096 libswanted="$libswanted dld ld sun m c cposix posix"
1097 libswanted="$libswanted ndir dir crypt sec"
1098 libswanted="$libswanted ucb bsd BSD PW x util"
1099 : We probably want to search /usr/shlib before most other libraries.
1100 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1101 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1102 glibpth="/usr/shlib $glibpth"
1103 : Do not use vfork unless overridden by a hint file.
1104 usevfork=false
1105
1106 : Find the basic shell for Bourne shell scripts
1107 case "$sh" in
1108 '')
1109         case "$SYSTYPE" in
1110         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1111         *) xxx='/bin/sh';;
1112         esac
1113         if test -f "$xxx"; then
1114                 sh="$xxx"
1115         else
1116                 : Build up a list and do a single loop so we can 'break' out.
1117                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1118                 for xxx in sh bash ksh pdksh ash; do
1119                         for p in $pth; do
1120                                 try="$try ${p}/${xxx}"
1121                         done
1122                 done
1123                 for xxx in $try; do
1124                         if test -f "$xxx"; then
1125                                 sh="$xxx";
1126                                 break
1127                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1128                                 sh="$xxx";
1129                                 break
1130                         elif test -f "$xxx.exe"; then
1131                                 sh="$xxx";
1132                                 break
1133                         fi
1134                 done
1135         fi
1136         ;;
1137 esac
1138
1139 case "$sh" in
1140 '')     cat >&2 <<EOM
1141 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1142
1143 Usually it's in /bin/sh.  How did you even get this far?
1144 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1145 we'll try to straighten this all out.
1146 EOM
1147         exit 1
1148         ;;
1149 esac
1150
1151 : see if sh knows # comments
1152 if `$sh -c '#' >/dev/null 2>&1`; then
1153         shsharp=true
1154         spitshell=cat
1155         xcat=/bin/cat
1156         test -f $xcat$_exe || xcat=/usr/bin/cat
1157         if test ! -f $xcat$_exe; then
1158                 for p in $paths; do
1159                         if test -f $p/cat$_exe; then
1160                                 xcat=$p/cat$_exe
1161                                 break
1162                         fi
1163                 done
1164                 if test ! -f $xcat; then
1165                         echo "Can't find cat anywhere!" >&4
1166                         exit 1
1167                 fi
1168         fi
1169         echo "#!$xcat" >sharp
1170         $eunicefix sharp
1171         chmod +x sharp
1172         ./sharp > today
1173         if test -s today; then
1174                 sharpbang='#!'
1175         else
1176                 echo "#! $xcat" > sharp
1177                 $eunicefix sharp
1178                 chmod +x sharp
1179                 ./sharp > today
1180                 if test -s today; then
1181                         sharpbang='#! '
1182                 else
1183                         sharpbang=': use '
1184                 fi
1185         fi
1186 else
1187         echo " "
1188         echo "Your $sh doesn't grok # comments--I will strip them later on."
1189         shsharp=false
1190         cd ..
1191         echo "exec grep -v '^[  ]*#'" >spitshell
1192         chmod +x spitshell
1193         $eunicefix spitshell
1194         spitshell=`pwd`/spitshell
1195         cd UU
1196         echo "I presume that if # doesn't work, #! won't work either!"
1197         sharpbang=': use '
1198 fi
1199 rm -f sharp today
1200
1201 : figure out how to guarantee sh startup
1202 case "$startsh" in
1203 '') startsh=${sharpbang}${sh} ;;
1204 *)
1205 esac
1206 cat >sharp <<EOSS
1207 $startsh
1208 set abc
1209 test "$?abc" != 1
1210 EOSS
1211
1212 chmod +x sharp
1213 $eunicefix sharp
1214 if ./sharp; then
1215         : echo "Yup, it does."
1216 else
1217         echo "Hmm... '$startsh' does not guarantee sh startup..."
1218         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1219 fi
1220 rm -f sharp
1221
1222
1223 : Save command line options in file UU/cmdline.opt for later use in
1224 : generating config.sh.
1225 cat > cmdline.opt <<EOSH
1226 # Configure command line arguments.
1227 config_arg0='$0'
1228 config_args='$*'
1229 config_argc=$#
1230 EOSH
1231 argn=1
1232 args_exp=''
1233 args_sep=''
1234 for arg in "$@"; do
1235         cat >>cmdline.opt <<EOSH
1236 config_arg$argn='$arg'
1237 EOSH
1238         # Extreme backslashitis: replace each ' by '"'"'
1239         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1240 $arg
1241 EOC
1242         arg_exp=`cat cmdl.opt`
1243         args_exp="$args_exp$args_sep'$arg_exp'"
1244         argn=`expr $argn + 1`
1245         args_sep=' '
1246 done
1247 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1248 # used by ./hints/os2.sh
1249 rm -f cmdl.opt
1250
1251 : produce awk script to parse command line options
1252 cat >options.awk <<'EOF'
1253 BEGIN {
1254         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1255
1256         len = length(optstr);
1257         for (i = 1; i <= len; i++) {
1258                 c = substr(optstr, i, 1);
1259                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1260                 if (a == ":") {
1261                         arg[c] = 1;
1262                         i++;
1263                 }
1264                 opt[c] = 1;
1265         }
1266 }
1267 {
1268         expect = 0;
1269         str = $0;
1270         if (substr(str, 1, 1) != "-") {
1271                 printf("'%s'\n", str);
1272                 next;
1273         }
1274         len = length($0);
1275         for (i = 2; i <= len; i++) {
1276                 c = substr(str, i, 1);
1277                 if (!opt[c]) {
1278                         printf("-%s\n", substr(str, i));
1279                         next;
1280                 }
1281                 printf("-%s\n", c);
1282                 if (arg[c]) {
1283                         if (i < len)
1284                                 printf("'%s'\n", substr(str, i + 1));
1285                         else
1286                                 expect = 1;
1287                         next;
1288                 }
1289         }
1290 }
1291 END {
1292         if (expect)
1293                 print "?";
1294 }
1295 EOF
1296
1297 : process the command line options
1298 set X `for arg in "$@"; do echo "X$arg"; done |
1299         sed -e s/X// | awk -f options.awk`
1300 eval "set $*"
1301 shift
1302 rm -f options.awk
1303
1304 : set up default values
1305 fastread=''
1306 reuseval=false
1307 config_sh=''
1308 alldone=''
1309 error=''
1310 silent=''
1311 extractsh=''
1312 override=''
1313 knowitall=''
1314 rm -f optdef.sh posthint.sh
1315 cat >optdef.sh <<EOS
1316 $startsh
1317 EOS
1318
1319
1320 : option parsing
1321 while test $# -gt 0; do
1322         case "$1" in
1323         -d) shift; fastread=yes;;
1324         -e) shift; alldone=cont;;
1325         -f)
1326                 shift
1327                 cd ..
1328                 if test -r "$1"; then
1329                         config_sh="$1"
1330                 else
1331                         echo "$me: cannot read config file $1." >&2
1332                         error=true
1333                 fi
1334                 cd UU
1335                 shift;;
1336         -h) shift; error=true;;
1337         -r) shift; reuseval=true;;
1338         -s) shift; silent=true; realsilent=true;;
1339         -E) shift; alldone=exit;;
1340         -K) shift; knowitall=true;;
1341         -O) shift; override=true;;
1342         -S) shift; silent=true; extractsh=true;;
1343         -D)
1344                 shift
1345                 case "$1" in
1346                 *=)
1347                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1348                         echo "$me: ignoring -D $1" >&2
1349                         ;;
1350                 *=*) echo "$1" | \
1351                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1352                 *) echo "$1='define'" >> optdef.sh;;
1353                 esac
1354                 shift
1355                 ;;
1356         -U)
1357                 shift
1358                 case "$1" in
1359                 *=) echo "$1" >> optdef.sh;;
1360                 *=*)
1361                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1362                         echo "$me: ignoring -U $1" >&2
1363                         ;;
1364                 *) echo "$1='undef'" >> optdef.sh;;
1365                 esac
1366                 shift
1367                 ;;
1368         -A)
1369             shift
1370             xxx=''
1371             yyy="$1"
1372             zzz=''
1373             uuu=undef
1374             case "$yyy" in
1375             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1376                  case "$zzz" in
1377                  *:*) zzz='' ;;
1378                  *)   xxx=append
1379                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1380                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1381                  esac
1382                  ;;
1383             esac
1384             case "$xxx" in
1385             '')  case "$yyy" in
1386                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1387                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1388                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1389                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1390                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1391                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1392                  esac
1393                  ;;       
1394             esac
1395             case "$xxx" in
1396             append)
1397                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1398             clear)
1399                 echo "$yyy=''"                  >> posthint.sh ;;
1400             define)
1401                 case "$zzz" in
1402                 '') zzz=define ;;
1403                 esac
1404                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1405             eval)
1406                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1407             prepend)
1408                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1409             undef)
1410                 case "$zzz" in
1411                 '') zzz="$uuu" ;;
1412                 esac
1413                 echo "$yyy=$zzz"                >> posthint.sh ;;
1414             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1415             esac
1416             shift
1417             ;;
1418         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1419             exit 0;;
1420         --) break;;
1421         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1422         *) break;;
1423         esac
1424 done
1425
1426 case "$error" in
1427 true)
1428         cat >&2 <<EOM
1429 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1430                  [-U symbol] [-U symbol=] [-A command:symbol...]
1431   -d : use defaults for all answers.
1432   -e : go on without questioning past the production of config.sh.
1433   -f : specify an alternate default configuration file.
1434   -h : print this help message and exit (with an error status).
1435   -r : reuse C symbols value if possible (skips costly nm extraction).
1436   -s : silent mode, only echoes questions and essential information.
1437   -D : define symbol to have some value:
1438          -D symbol         symbol gets the value 'define'
1439          -D symbol=value   symbol gets the value 'value'
1440   -E : stop at the end of questions, after having produced config.sh.
1441   -K : do not use unless you know what you are doing.
1442   -O : let -D and -U override definitions from loaded configuration file.
1443   -S : perform variable substitutions on all .SH files (can mix with -f)
1444   -U : undefine symbol:
1445          -U symbol    symbol gets the value 'undef'
1446          -U symbol=   symbol gets completely empty
1447   -A : manipulate symbol after the platform specific hints have been applied:
1448          -A symbol=value                append " "value to symbol
1449          -A append:symbol=value         append value to symbol
1450          -A define:symbol=value         define symbol to have value
1451          -A clear:symbol                define symbol to be ''
1452          -A define:symbol               define symbol to be 'define'
1453          -A eval:symbol=value           define symbol to be eval of value
1454          -A prepend:symbol=value        prepend value to symbol
1455          -A undef:symbol                define symbol to be 'undef'
1456          -A undef:symbol=               define symbol to be ''
1457   -V : print version number and exit (with a zero status).
1458 EOM
1459         exit 1
1460         ;;
1461 esac
1462
1463 : Sanity checks
1464 case "$fastread$alldone" in
1465 yescont|yesexit) ;;
1466 *)
1467         case "$extractsh" in
1468         true) ;;
1469         *)
1470                 if test ! -t 0; then
1471                         echo "Say 'sh Configure', not 'sh <Configure'"
1472                         exit 1
1473                 fi
1474                 ;;
1475         esac
1476         ;;
1477 esac
1478
1479 exec 4>&1
1480 case "$silent" in
1481 true) exec 1>/dev/null;;
1482 esac
1483
1484 : run the defines and the undefines, if any, but leave the file out there...
1485 touch optdef.sh
1486 . ./optdef.sh
1487 : create the posthint manipulation script and leave the file out there...
1488 touch posthint.sh
1489
1490 : set package name
1491 package=perl5
1492 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1493 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1494 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1495 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1496 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1497 esac
1498
1499 : Some greps do not return status, grrr.
1500 echo "grimblepritz" >grimble
1501 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1502         contains=contains
1503 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1504         contains=grep
1505 else
1506         contains=contains
1507 fi
1508 rm -f grimble
1509 : the following should work in any shell
1510 case "$contains" in
1511 contains*)
1512         echo " "
1513         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1514         cat >contains <<'EOSS'
1515 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1516 EOSS
1517 chmod +x contains
1518 esac
1519
1520 : Find the path to the source tree
1521 case "$src" in
1522 '') case "$0" in
1523     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1524          case "$src" in
1525          /*)    ;;
1526          .)     ;;
1527          *)     src=`cd ../$src && pwd` ;;
1528          esac
1529          ;;
1530     *)   src='.';;
1531     esac;;
1532 esac
1533 case "$src" in
1534 '')     src=/
1535         rsrc=/
1536         ;;
1537 /*) rsrc="$src";;
1538 *) rsrc="../$src";;
1539 esac
1540 if test -f $rsrc/Configure && \
1541         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1542 then
1543    : found it, so we are ok.
1544 else
1545         rsrc=''
1546         for src in . .. ../.. ../../.. ../../../..; do
1547                 if test -f ../$src/Configure && \
1548                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1549                 then
1550                         rsrc=../$src
1551                         break
1552                 fi
1553         done
1554 fi
1555 case "$rsrc" in
1556 '')
1557         cat <<EOM >&4
1558
1559 Sorry, I can't seem to locate the source dir for $package.  Please start
1560 Configure with an explicit path -- i.e. /some/path/Configure.
1561
1562 EOM
1563         exit 1
1564         ;;
1565 ../.)   rsrc='..';;
1566 *)
1567         echo " "
1568         echo "Sources for $package found in \"$src\"." >&4
1569         ;;
1570 esac
1571
1572 : script used to extract .SH files with variable substitutions
1573 cat >extract <<'EOS'
1574 PERL_CONFIG_SH=true
1575 echo "Doing variable substitutions on .SH files..."
1576 if test -f MANIFEST; then
1577         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1578 else
1579         echo "(Looking for .SH files under the source directory.)"
1580         set x `(cd $src; find . -name "*.SH" -print)`
1581 fi
1582 shift
1583 case $# in
1584 0) set x `(cd $src; echo *.SH)`; shift;;
1585 esac
1586 if test ! -f $src/$1; then
1587         shift
1588 fi
1589 mkdir_p='
1590 name=$1;
1591 create="";
1592 while test $name; do
1593         if test ! -d "$name"; then
1594                 create="$name $create";
1595                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1596                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1597         else
1598                 name="";
1599         fi;
1600 done;
1601 for file in $create; do
1602         mkdir $file;
1603 done
1604 '
1605 for file in $*; do
1606         case "$src" in
1607         ".")
1608                 case "$file" in
1609                 */*)
1610                         dir=`expr X$file : 'X\(.*\)/'`
1611                         file=`expr X$file : 'X.*/\(.*\)'`
1612                         (cd $dir && . ./$file)
1613                         ;;
1614                 *)
1615                         . ./$file
1616                         ;;
1617                 esac
1618                 ;;
1619         *)
1620                 case "$file" in
1621                 */*)
1622                         dir=`expr X$file : 'X\(.*\)/'`
1623                         file=`expr X$file : 'X.*/\(.*\)'`
1624                         (set x $dir; shift; eval $mkdir_p)
1625                         sh <$src/$dir/$file
1626                         ;;
1627                 *)
1628                         sh <$src/$file
1629                         ;;
1630                 esac
1631                 ;;
1632         esac
1633 done
1634 if test -f $src/config_h.SH; then
1635         if test ! -f config.h; then
1636         : oops, they left it out of MANIFEST, probably, so do it anyway.
1637         . $src/config_h.SH
1638         fi
1639 fi
1640 EOS
1641
1642 : extract files and exit if asked to do so
1643 case "$extractsh" in
1644 true)
1645         case "$realsilent" in
1646         true) ;;
1647         *) exec 1>&4;;
1648         esac
1649         case "$config_sh" in
1650         '') config_sh='config.sh';;
1651         esac
1652         echo " "
1653         echo "Fetching answers from $config_sh..."
1654         cd ..
1655         . $config_sh
1656         test "$override" && . ./optdef.sh
1657         echo " "
1658         . UU/extract
1659         rm -rf UU
1660         echo "Extraction done."
1661         exit 0
1662         ;;
1663 esac
1664
1665 : Eunice requires " " instead of "", can you believe it
1666 echo " "
1667 : Here we go...
1668 echo "Beginning of configuration questions for $package."
1669
1670 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1671
1672 : first determine how to suppress newline on echo command
1673 echo " "
1674 echo "Checking echo to see how to suppress newlines..."
1675 (echo "hi there\c" ; echo " ") >.echotmp
1676 if $contains c .echotmp >/dev/null 2>&1 ; then
1677         echo "...using -n."
1678         n='-n'
1679         c=''
1680 else
1681         cat <<'EOM'
1682 ...using \c
1683 EOM
1684         n=''
1685         c='\c'
1686 fi
1687 echo $n "The star should be here-->$c"
1688 echo '*'
1689 rm -f .echotmp
1690
1691 : Now test for existence of everything in MANIFEST
1692 echo " "
1693 if test -f $rsrc/MANIFEST; then
1694         echo "First let's make sure your kit is complete.  Checking..." >&4
1695         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1696         rm -f missing
1697         tmppwd=`pwd`
1698         for filelist in x??; do
1699                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1700         done
1701         if test -s missing; then
1702                 cat missing >&4
1703                 cat >&4 <<'EOM'
1704
1705 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1706
1707 You have the option of continuing the configuration process, despite the
1708 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1709 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1710 and contact the author (perlbug@perl.org).
1711
1712 EOM
1713                 echo $n "Continue? [n] $c" >&4
1714                 read ans
1715                 case "$ans" in
1716                 y*)
1717                         echo "Continuing..." >&4
1718                         rm -f missing
1719                         ;;
1720                 *)
1721                         echo "ABORTING..." >&4
1722                         kill $$
1723                         ;;
1724                 esac
1725         else
1726                 echo "Looks good..."
1727         fi
1728 else
1729         echo "There is no MANIFEST file.  I hope your kit is complete !"
1730 fi
1731 rm -f missing x??
1732
1733 echo " "
1734 : Find the appropriate value for a newline for tr
1735 if test -n "$DJGPP"; then
1736        trnl='\012'
1737 fi
1738 if test X"$trnl" = X; then
1739         case "`echo foo|tr '\n' x 2>/dev/null`" in
1740         foox) trnl='\n' ;;
1741         esac
1742 fi
1743 if test X"$trnl" = X; then
1744         case "`echo foo|tr '\012' x 2>/dev/null`" in
1745         foox) trnl='\012' ;;
1746         esac
1747 fi
1748 if test X"$trnl" = X; then
1749         cat <<EOM >&2
1750
1751 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1752
1753 EOM
1754         exit 1
1755 fi
1756
1757 : compute the number of columns on the terminal for proper question formatting
1758 case "$COLUMNS" in
1759 '') COLUMNS='80';;
1760 esac
1761
1762 : set up the echo used in my read
1763 myecho="case \"\$xxxm\" in
1764 '') echo $n \"\$rp $c\" >&4;;
1765 *) case \"\$rp\" in
1766         '') echo $n \"[\$xxxm] $c\";;
1767         *)
1768                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1769                         echo \"\$rp\" >&4
1770                         echo $n \"[\$xxxm] $c\" >&4
1771                 else
1772                         echo $n \"\$rp [\$xxxm] $c\" >&4
1773                 fi
1774                 ;;
1775         esac;;
1776 esac"
1777
1778 : now set up to do reads with possible shell escape and default assignment
1779 cat <<EOSC >myread
1780 $startsh
1781 xxxm=\$dflt
1782 $myecho
1783 ans='!'
1784 case "\$fastread" in
1785 yes) case "\$dflt" in
1786         '') ;;
1787         *) ans='';
1788                 case "\$silent-\$rp" in
1789                 true-) ;;
1790                 *) echo " " >&4;;
1791                 esac;;
1792         esac;;
1793 *) case "\$silent" in
1794         true) case "\$rp" in
1795                 '') ans='';;
1796                 esac;;
1797         esac;;
1798 esac
1799 while expr "X\$ans" : "X!" >/dev/null; do
1800         read answ
1801         set x \$xxxm
1802         shift
1803         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1804         case  "\$answ" in
1805         "!")
1806                 sh 1>&4
1807                 echo " "
1808                 $myecho
1809                 ;;
1810         !*)
1811                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1812                 shift
1813                 sh 1>&4 -c "\$*"
1814                 echo " "
1815                 $myecho
1816                 ;;
1817         "\$ans")
1818                 case "\$ans" in
1819                 \\&*)
1820                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1821                         shift
1822                         case "\$1" in
1823                         -d)
1824                                 fastread=yes
1825                                 echo "(OK, I'll run with -d after this question.)" >&4
1826                                 ;;
1827                         -*)
1828                                 echo "*** Sorry, \$1 not supported yet." >&4
1829                                 ;;
1830                         esac
1831                         $myecho
1832                         ans=!
1833                         ;;
1834                 esac;;
1835         *)
1836                 case "\$aok" in
1837                 y)
1838                         echo "*** Substitution done -- please confirm."
1839                         xxxm="\$ans"
1840                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1841                         xxxm="\$ans"
1842                         ans=!
1843                         ;;
1844                 *)
1845                         echo "*** Error -- try again."
1846                         ans=!
1847                         ;;
1848                 esac
1849                 $myecho
1850                 ;;
1851         esac
1852         case "\$ans\$xxxm\$nostick" in
1853         '')
1854                 ans=!
1855                 $myecho
1856                 ;;
1857         esac
1858 done
1859 case "\$ans" in
1860 '') ans="\$xxxm";;
1861 esac
1862 EOSC
1863
1864 : create .config dir to save info across Configure sessions
1865 test -d ../.config || mkdir ../.config
1866 cat >../.config/README <<EOF
1867 This directory created by Configure to save information that should
1868 persist across sessions for $package.
1869
1870 You may safely delete it if you wish.
1871 EOF
1872
1873 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1874 case "$usedevel" in
1875 $define|true|[yY]*) ;;
1876 *) case "$xversion" in
1877    *[13579])
1878         cat >&4 <<EOH
1879 *** WHOA THERE!!! ***
1880
1881     This is an UNSTABLE DEVELOPMENT release.
1882     The version of this $package distribution is $xversion, that is, odd,
1883     (as opposed to even) and that signifies a development release.
1884     If you want a maintenance release, you want an even-numbered version.
1885
1886     Do ***NOT*** install this into production use.
1887     Data corruption and crashes are possible.
1888
1889     It is most seriously suggested that you do not continue any further
1890     unless you want to help in developing and debugging Perl.
1891
1892     If you *still* want to build perl, you can answer 'y' now,
1893     or pass -Dusedevel to Configure.
1894
1895 EOH
1896         rp='Do you really want to continue?'
1897         dflt='n'
1898         . ./myread
1899         case "$ans" in
1900         [yY]) echo >&4 "Okay, continuing."
1901               usedevel="$define" ;;
1902         *) echo >&4 "Okay, bye."
1903            exit 1
1904            ;;
1905         esac
1906         ;;
1907     esac
1908     ;;
1909 esac
1910 case "$usedevel" in
1911 $define|true|[yY]*)
1912         case "$versiononly" in
1913         '') versiononly="$define" ;;
1914         esac
1915         case "$installusrbinperl" in
1916         '') installusrbinperl="$undef" ;;
1917         esac
1918         ;;
1919 esac
1920
1921 : general instructions
1922 needman=true
1923 firsttime=true
1924 user=`(logname) 2>/dev/null`
1925 case "$user" in
1926 '') user=`whoami 2>&1`;;
1927 esac
1928 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1929         firsttime=false
1930         echo " "
1931         rp='Would you like to see the instructions?'
1932         dflt=n
1933         . ./myread
1934         case "$ans" in
1935         [yY]*) ;;
1936         *) needman=false;;
1937         esac
1938 fi
1939 if $needman; then
1940         cat <<EOH
1941
1942 This installation shell script will examine your system and ask you questions
1943 to determine how the perl5 package should be installed. If you get
1944 stuck on a question, you may use a ! shell escape to start a subshell or
1945 execute a command.  Many of the questions will have default answers in square
1946 brackets; typing carriage return will give you the default.
1947
1948 On some of the questions which ask for file or directory names you are allowed
1949 to use the ~name construct to specify the login directory belonging to "name",
1950 even if you don't have a shell which knows about that.  Questions where this is
1951 allowed will be marked "(~name ok)".
1952
1953 EOH
1954         rp=''
1955         dflt='Type carriage return to continue'
1956         . ./myread
1957         cat <<'EOH'
1958
1959 The prompter used in this script allows you to use shell variables and
1960 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1961 in the default answer, as if the default line was a set of arguments given to a
1962 script shell.  This means you may also use $* to repeat the whole default line,
1963 so you do not have to re-type everything to add something to the default.
1964
1965 Everytime there is a substitution, you will have to confirm.  If there is an
1966 error (e.g. an unmatched backtick), the default answer will remain unchanged
1967 and you will be prompted again.
1968
1969 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1970 the questions and use the computed defaults (or the previous answers if there
1971 was already a config.sh file). Type 'Configure -h' for a list of options.
1972 You may also start interactively and then answer '& -d' at any prompt to turn
1973 on the non-interactive behaviour for the remainder of the execution.
1974
1975 EOH
1976         . ./myread
1977         cat <<EOH
1978
1979 Much effort has been expended to ensure that this shell script will run on any
1980 Unix system.  If despite that it blows up on yours, your best bet is to edit
1981 Configure and run it again.  If you can't run Configure for some reason,
1982 you'll have to generate a config.sh file by hand.  Whatever problems you
1983 have, let me (perlbug@perl.org) know how I blew it.
1984
1985 This installation script affects things in two ways:
1986
1987 1) it may do direct variable substitutions on some of the files included
1988    in this kit.
1989 2) it builds a config.h file for inclusion in C programs.  You may edit
1990    any of these files as the need arises after running this script.
1991
1992 If you make a mistake on a question, there is no easy way to back up to it
1993 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1994 files.  Configure will offer to let you do this before it runs the SH files.
1995
1996 EOH
1997         dflt='Type carriage return to continue'
1998         . ./myread
1999         case "$firsttime" in
2000         true) echo $user >>../.config/instruct;;
2001         esac
2002 fi
2003
2004 : find out where common programs are
2005 echo " "
2006 echo "Locating common programs..." >&4
2007 cat <<EOSC >loc
2008 $startsh
2009 case \$# in
2010 0) exit 1;;
2011 esac
2012 thing=\$1
2013 shift
2014 dflt=\$1
2015 shift
2016 for dir in \$*; do
2017         case "\$thing" in
2018         .)
2019         if test -d \$dir/\$thing; then
2020                 echo \$dir
2021                 exit 0
2022         fi
2023         ;;
2024         *)
2025         for thisthing in \$dir/\$thing; do
2026                 : just loop through to pick last item
2027         done
2028         if test -f \$thisthing; then
2029                 echo \$thisthing
2030                 exit 0
2031         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2032                 echo \$thisthing
2033                 exit 0
2034         elif test -f \$dir/\$thing.exe; then
2035                 if test -n "$DJGPP"; then
2036                         echo \$dir/\$thing.exe
2037                 else
2038                         : on Eunice apparently
2039                         echo \$dir/\$thing
2040                 fi
2041                 exit 0
2042         fi
2043         ;;
2044         esac
2045 done
2046 echo \$dflt
2047 exit 1
2048 EOSC
2049 chmod +x loc
2050 $eunicefix loc
2051 loclist="
2052 awk
2053 cat
2054 chmod
2055 comm
2056 cp
2057 echo
2058 expr
2059 grep
2060 ls
2061 mkdir
2062 rm
2063 sed
2064 sort
2065 touch
2066 tr
2067 uniq
2068 "
2069 trylist="
2070 Mcc
2071 ar
2072 bison
2073 byacc
2074 cpp
2075 csh
2076 date
2077 egrep
2078 gzip
2079 less
2080 ln
2081 make
2082 more
2083 nm
2084 nroff
2085 pg
2086 test
2087 uname
2088 zip
2089 "
2090 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2091 pth="$pth /lib /usr/lib"
2092 for file in $loclist; do
2093         eval xxx=\$$file
2094         case "$xxx" in
2095         /*|?:[\\/]*)
2096                 if test -f "$xxx"; then
2097                         : ok
2098                 else
2099                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2100                         xxx=`./loc $file $file $pth`
2101                 fi
2102                 ;;
2103         '') xxx=`./loc $file $file $pth`;;
2104         *) xxx=`./loc $xxx $xxx $pth`;;
2105         esac
2106         eval $file=$xxx$_exe
2107         eval _$file=$xxx
2108         case "$xxx" in
2109         /*)
2110                 echo $file is in $xxx.
2111                 ;;
2112         ?:[\\/]*)
2113                 echo $file is in $xxx.
2114                 ;;
2115         *)
2116                 echo "I don't know where '$file' is, and my life depends on it." >&4
2117                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2118                 exit 1
2119                 ;;
2120         esac
2121 done
2122 echo " "
2123 echo "Don't worry if any of the following aren't found..."
2124 say=offhand
2125 for file in $trylist; do
2126         eval xxx=\$$file
2127         case "$xxx" in
2128         /*|?:[\\/]*)
2129                 if test -f "$xxx"; then
2130                         : ok
2131                 else
2132                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2133                         xxx=`./loc $file $file $pth`
2134                 fi
2135                 ;;
2136         '') xxx=`./loc $file $file $pth`;;
2137         *) xxx=`./loc $xxx $xxx $pth`;;
2138         esac
2139         eval $file=$xxx
2140         eval _$file=$xxx
2141         case "$xxx" in
2142         /*)
2143                 echo $file is in $xxx.
2144                 ;;
2145         ?:[\\/]*)
2146                 echo $file is in $xxx.
2147                 ;;
2148         *)
2149                 echo "I don't see $file out there, $say."
2150                 say=either
2151                 ;;
2152         esac
2153 done
2154 case "$egrep" in
2155 egrep$_exe)
2156         echo "Substituting grep for egrep."
2157         egrep=$grep
2158         ;;
2159 esac
2160 case "$ln" in
2161 ln$_exe)
2162         echo "Substituting cp for ln."
2163         ln=$cp
2164         ;;
2165 esac
2166 case "$make$gmake" in
2167 *make$_exe)
2168         ;;
2169 *)
2170         echo "I can't find make or gmake, and my life depends on it." >&4
2171         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2172         exit 1
2173         ;;
2174 esac
2175 case "$test" in
2176 test)
2177         echo "Hopefully test is built into your sh."
2178         ;;
2179 *)
2180         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2181                 echo "Using the test built into your sh."
2182                 test=test
2183                 _test=test
2184         fi
2185         ;;
2186 esac
2187 case "$echo" in
2188 echo)
2189         echo "Hopefully echo is built into your sh."
2190         ;;
2191 '') ;;
2192 *)
2193         echo " "
2194 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2195         $echo $n "hi there$c" >foo1
2196         echo $n "hi there$c" >foo2
2197         if cmp foo1 foo2 >/dev/null 2>&1; then
2198                 echo "They are compatible.  In fact, they may be identical."
2199         else
2200                 case "$n" in
2201                 '-n') n='' c='\c';;
2202                 *) n='-n' c='';;
2203                 esac
2204                 cat <<FOO
2205 They are not compatible!  You are probably running ksh on a non-USG system.
2206 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2207 have echo built in and we may have to run some Bourne shell scripts.  That
2208 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2209
2210 FOO
2211                 $echo $n "The star should be here-->$c"
2212                 $echo "*"
2213         fi
2214         $rm -f foo1 foo2
2215         ;;
2216 esac
2217
2218 cat <<EOS >checkcc
2219 $startsh
2220 EOS
2221 cat <<'EOSC' >>checkcc
2222 case "$cc" in
2223 '') ;;
2224 *)  $rm -f try try.*
2225     $cat >try.c <<EOM
2226 int main(int argc, char *argv[]) {
2227   return 0;
2228 }
2229 EOM
2230     if $cc -o try $ccflags $ldflags try.c; then
2231        :
2232     else
2233         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2234         despair=yes
2235         trygcc=yes
2236         case "$cc" in
2237         *gcc*) trygcc=no ;;
2238         esac
2239         case "`$cc -v -c try.c 2>&1`" in
2240         *gcc*) trygcc=no ;;
2241         esac
2242         if $test X"$trygcc" = Xyes; then
2243             if gcc -o try -c try.c; then
2244                 echo " "
2245                 echo "You seem to have a working gcc, though." >&4
2246                 rp="Would you like to use it?"
2247                 dflt=y
2248                 if $test -f myread; then
2249                     . ./myread
2250                 else
2251                     if $test -f UU/myread; then
2252                         . ./UU/myread
2253                     else
2254                         echo "Cannot find myread, sorry.  Aborting." >&2
2255                         exit 1
2256                     fi
2257                 fi  
2258                 case "$ans" in
2259                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2260                 esac
2261             fi
2262         fi
2263         if $test X"$despair" = Xyes; then
2264             $cat >&4 <<EOM
2265 You need to find a working C compiler.
2266 Either (purchase and) install the C compiler supplied by your OS vendor,
2267 or for a free C compiler try http://gcc.gnu.org/
2268 I cannot continue any further, aborting.
2269 EOM
2270             exit 1
2271         fi
2272     fi
2273     $rm -f try try.*
2274     ;;
2275 esac
2276 EOSC
2277
2278 : determine whether symbolic links are supported
2279 echo " "
2280 $touch blurfl
2281 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2282         echo "Symbolic links are supported." >&4
2283         lns="$ln -s"
2284 else
2285         echo "Symbolic links are NOT supported." >&4
2286         lns="$ln"
2287 fi
2288 $rm -f blurfl sym
2289
2290 : determine whether symbolic links are supported
2291 echo " "
2292 case "$lns" in
2293 *"ln -s")
2294         echo "Checking how to test for symbolic links..." >&4
2295         $lns blurfl sym
2296         if $test "X$issymlink" = X; then
2297                 case "$newsh" in
2298                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2299                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2300                 esac
2301                 if test $? = 0; then
2302                         issymlink="test -h"
2303                 else
2304                         echo "Your builtin 'test -h' may be broken." >&4
2305                         case "$test" in
2306                         /*)     ;;
2307                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2308                                 for p in $pth
2309                                 do
2310                                         if test -f "$p/$test"; then
2311                                                 test="$p/$test"
2312                                                 break
2313                                         fi
2314                                 done
2315                                 ;;
2316                         esac
2317                         case "$test" in
2318                         /*)
2319                                 echo "Trying external '$test -h'." >&4
2320                                 issymlink="$test -h"
2321                                 if $test ! -h sym >/dev/null 2>&1; then
2322                                         echo "External '$test -h' is broken, too." >&4
2323                                         issymlink=''
2324                                 fi
2325                                 ;;
2326                         *)      issymlink='' ;;
2327                         esac
2328                 fi              
2329         fi
2330         if $test "X$issymlink" = X; then
2331                 if $test -L sym 2>/dev/null; then
2332                         issymlink="$test -L"
2333                         echo "The builtin '$test -L' worked." >&4
2334                 fi
2335         fi
2336         if $test "X$issymlink" != X; then
2337                 echo "You can test for symbolic links with '$issymlink'." >&4
2338         else
2339                 echo "I do not know how you can test for symbolic links." >&4
2340         fi
2341         $rm -f blurfl sym
2342         ;;
2343 *)      echo "No symbolic links, so not testing for their testing..." >&4
2344         ;;
2345 esac
2346 echo " "
2347
2348
2349 case "$mksymlinks" in
2350 $define|true|[yY]*)
2351         case "$src" in
2352         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2353                 exit 1
2354                 ;;
2355         *)      case "$lns:$issymlink" in
2356                 *"ln -s:"*"test -"?)
2357                         echo "Creating the symbolic links..." >&4
2358                         echo "(First creating the subdirectories...)" >&4
2359                         cd ..
2360                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2361                                 read directory
2362                                 test -z "$directory" && break
2363                                 mkdir -p $directory
2364                         done
2365                         # Sanity check 1.
2366                         if test ! -d t/base; then
2367                                 echo "Failed to create the subdirectories.  Aborting." >&4
2368                                 exit 1
2369                         fi
2370                         echo "(Then creating the symlinks...)" >&4
2371                         awk '{print $1}' $src/MANIFEST | while true; do
2372                                 read filename
2373                                 test -z "$filename" && break
2374                                 if test -f $filename; then
2375                                         if $issymlink $filename; then
2376                                                 rm -f $filename
2377                                         fi
2378                                 fi
2379                                 if test -f $filename; then
2380                                         echo "$filename already exists, not symlinking."
2381                                 else
2382                                         ln -s $src/$filename $filename
2383                                 fi
2384                         done
2385                         # Sanity check 2.
2386                         if test ! -f t/base/lex.t; then
2387                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2388                                 exit 1
2389                         fi
2390                         cd UU
2391                         ;;
2392                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2393                         ;;
2394                 esac
2395                 ;;
2396         esac
2397         ;;
2398 esac
2399
2400
2401 case "$usecrosscompile" in
2402 $define|true|[yY]*)
2403         $echo "Cross-compiling..."
2404         croak=''
2405         case "$cc" in
2406         *-*-gcc) # A cross-compiling gcc, probably.
2407             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2408             ar=$targetarch-ar
2409             # leave out ld, choosing it is more complex
2410             nm=$targetarch-nm
2411             ranlib=$targetarch-ranlib
2412             $echo 'extern int foo;' > try.c
2413             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2414             shift
2415             if $test $# -gt 0; then
2416                 incpth="$incpth $*"
2417                 incpth="`$echo $incpth|$sed 's/^ //'`"
2418                 echo "Guessing incpth '$incpth'." >&4
2419                 for i in $*; do
2420                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2421                     if $test -d $j; then
2422                         libpth="$libpth $j"
2423                     fi
2424                 done   
2425                 libpth="`$echo $libpth|$sed 's/^ //'`"
2426                 echo "Guessing libpth '$libpth'." >&4
2427             fi
2428             $rm -f try.c
2429             ;;
2430         esac
2431         case "$targetarch" in
2432         '') echo "Targetarch not defined." >&4; croak=y ;;
2433         *)  echo "Using targetarch $targetarch." >&4 ;;
2434         esac
2435         case "$incpth" in
2436         '') echo "Incpth not defined." >&4; croak=y ;;
2437         *)  echo "Using incpth '$incpth'." >&4 ;;
2438         esac
2439         case "$libpth" in
2440         '') echo "Libpth not defined." >&4; croak=y ;;
2441         *)  echo "Using libpth '$libpth'." >&4 ;;
2442         esac
2443         case "$usrinc" in
2444         '') for i in $incpth; do
2445                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2446                     usrinc=$i
2447                     echo "Guessing usrinc $usrinc." >&4
2448                     break
2449                 fi
2450             done
2451             case "$usrinc" in
2452             '') echo "Usrinc not defined." >&4; croak=y ;;
2453             esac
2454             ;;
2455         *)  echo "Using usrinc $usrinc." >&4 ;;
2456         esac
2457         case "$targethost" in
2458         '') echo "Targethost not defined." >&4; croak=y ;;
2459         *)  echo "Using targethost $targethost." >&4
2460         esac
2461         locincpth=' '
2462         loclibpth=' '
2463         case "$croak" in
2464         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2465         esac
2466         case "$src" in
2467         /*) run=$src/Cross/run
2468             targetmkdir=$src/Cross/mkdir
2469             to=$src/Cross/to
2470             from=$src/Cross/from
2471             ;;
2472         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2473             run=$pwd/Cross/run
2474             targetmkdir=$pwd/Cross/mkdir
2475             to=$pwd/Cross/to
2476             from=$pwd/Cross/from
2477             ;;
2478         esac
2479         case "$targetrun" in
2480         '') targetrun=ssh ;;
2481         esac
2482         case "$targetto" in
2483         '') targetto=scp ;;
2484         esac
2485         case "$targetfrom" in
2486         '') targetfrom=scp ;;
2487         esac
2488         run=$run-$targetrun
2489         to=$to-$targetto
2490         from=$from-$targetfrom
2491         case "$targetdir" in
2492         '')  targetdir=/tmp
2493              echo "Guessing targetdir $targetdir." >&4
2494              ;;
2495         esac
2496         case "$targetuser" in
2497         '')  targetuser=root
2498              echo "Guessing targetuser $targetuser." >&4
2499              ;;
2500         esac
2501         case "$targetfrom" in
2502         scp)    q=-q ;;
2503         *)      q='' ;;
2504         esac
2505         case "$targetrun" in
2506         ssh|rsh)
2507             cat >$run <<EOF
2508 #!/bin/sh
2509 case "\$1" in
2510 -cwd)
2511   shift
2512   cwd=\$1
2513   shift
2514   ;;
2515 esac
2516 case "\$cwd" in
2517 '') cwd=$targetdir ;;
2518 esac
2519 exe=\$1
2520 shift
2521 if $test ! -f \$exe.xok; then
2522   $to \$exe
2523   $touch \$exe.xok
2524 fi
2525 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2526 EOF
2527             ;;
2528         *)  echo "Unknown targetrun '$targetrun'" >&4
2529             exit 1
2530             ;;
2531         esac
2532         case "$targetmkdir" in
2533         */Cross/mkdir)
2534             cat >$targetmkdir <<EOF
2535 #!/bin/sh
2536 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2537 EOF
2538             $chmod a+rx $targetmkdir
2539             ;;
2540         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2541             exit 1
2542             ;;
2543         esac
2544         case "$targetto" in
2545         scp|rcp)
2546             cat >$to <<EOF
2547 #!/bin/sh
2548 for f in \$@
2549 do
2550   case "\$f" in
2551   /*)
2552     $targetmkdir \`dirname \$f\`
2553     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2554     ;;
2555   *)
2556     $targetmkdir $targetdir/\`dirname \$f\`
2557     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2558     ;;
2559   esac
2560 done
2561 exit 0
2562 EOF
2563             ;;
2564         cp) cat >$to <<EOF
2565 #!/bin/sh
2566 for f in \$@
2567 do
2568   case "\$f" in
2569   /*)
2570     $mkdir -p $targetdir/\`dirname \$f\`
2571     $cp \$f $targetdir/\$f || exit 1
2572     ;;
2573   *)
2574     $targetmkdir $targetdir/\`dirname \$f\`
2575     $cp \$f $targetdir/\$f || exit 1
2576     ;;
2577   esac
2578 done
2579 exit 0
2580 EOF
2581             ;;
2582         *)  echo "Unknown targetto '$targetto'" >&4
2583             exit 1
2584             ;;
2585         esac
2586         case "$targetfrom" in
2587         scp|rcp)
2588           cat >$from <<EOF
2589 #!/bin/sh
2590 for f in \$@
2591 do
2592   $rm -f \$f
2593   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2594 done
2595 exit 0
2596 EOF
2597             ;;
2598         cp) cat >$from <<EOF
2599 #!/bin/sh
2600 for f in \$@
2601 do
2602   $rm -f \$f
2603   cp $targetdir/\$f . || exit 1
2604 done
2605 exit 0
2606 EOF
2607             ;;
2608         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2609             exit 1
2610             ;;
2611         esac
2612         if $test ! -f $run; then
2613             echo "Target 'run' script '$run' not found." >&4
2614         else
2615             $chmod a+rx $run
2616         fi
2617         if $test ! -f $to; then
2618             echo "Target 'to' script '$to' not found." >&4
2619         else
2620             $chmod a+rx $to
2621         fi
2622         if $test ! -f $from; then
2623             echo "Target 'from' script '$from' not found." >&4
2624         else
2625             $chmod a+rx $from
2626         fi
2627         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2628             exit 1
2629         fi
2630         cat >&4 <<EOF
2631 Using '$run' for remote execution,
2632 and '$from' and '$to'
2633 for remote file transfer.
2634 EOF
2635         ;;
2636 *)      run=''
2637         to=:
2638         from=:
2639         usecrosscompile='undef'
2640         targetarch=''
2641         ;;
2642 esac
2643
2644 : see whether [:lower:] and [:upper:] are supported character classes
2645 echo " "
2646 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2647 ABYZ)
2648         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2649         up='[:upper:]'
2650         low='[:lower:]'
2651         ;;
2652 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2653         # (0xc9 and 0xd1), therefore that is a nice testing point.
2654         if test "X$up" = X -o "X$low" = X; then
2655             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2656             ij) up='[A-Z]'
2657                 low='[a-z]'
2658                 ;;
2659             esac
2660         fi
2661         if test "X$up" = X -o "X$low" = X; then
2662             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2663             ij) up='A-Z'
2664                 low='a-z'
2665                 ;;
2666             esac
2667         fi
2668         if test "X$up" = X -o "X$low" = X; then
2669             case "`echo IJ | od -x 2>/dev/null`" in
2670             *C9D1*|*c9d1*)
2671                 echo "Hey, this might be EBCDIC." >&4
2672                 if test "X$up" = X -o "X$low" = X; then
2673                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2674                     ij) up='[A-IJ-RS-Z]'
2675                         low='[a-ij-rs-z]'
2676                         ;;
2677                     esac
2678                 fi
2679                 if test "X$up" = X -o "X$low" = X; then
2680                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2681                     ij) up='A-IJ-RS-Z'
2682                         low='a-ij-rs-z'
2683                         ;;
2684                     esac
2685                 fi
2686                 ;;
2687             esac
2688         fi
2689 esac
2690 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2691 ij)
2692     echo "Using $up and $low to convert case." >&4
2693     ;;
2694 *)
2695     echo "I don't know how to translate letters from upper to lower case." >&4
2696     echo "Your tr is not acting any way I know of." >&4
2697     exit 1
2698     ;;
2699 esac
2700 : set up the translation script tr, must be called with ./tr of course
2701 cat >tr <<EOSC
2702 $startsh
2703 case "\$1\$2" in
2704 '[A-Z][a-z]') exec $tr '$up' '$low';;
2705 '[a-z][A-Z]') exec $tr '$low' '$up';;
2706 esac
2707 exec $tr "\$@"
2708 EOSC
2709 chmod +x tr
2710 $eunicefix tr
2711
2712 : Try to determine whether config.sh was made on this system
2713 case "$config_sh" in
2714 '')
2715 myuname=`$uname -a 2>/dev/null`
2716 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2717 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2718 # because the A-Z/a-z are not consecutive.
2719 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2720         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2721 newmyuname="$myuname"
2722 dflt=n
2723 case "$knowitall" in
2724 '')
2725         if test -f ../config.sh; then
2726                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2727                         eval "`grep myuname= ../config.sh`"
2728                 fi
2729                 if test "X$myuname" = "X$newmyuname"; then
2730                         dflt=y
2731                 fi
2732         fi
2733         ;;
2734 *) dflt=y;;
2735 esac
2736
2737 : Get old answers from old config file if Configure was run on the
2738 : same system, otherwise use the hints.
2739 hint=default
2740 cd ..
2741 if test -f config.sh; then
2742         echo " "
2743         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2744         . UU/myread
2745         case "$ans" in
2746         n*|N*) echo "OK, I'll ignore it."
2747                 mv config.sh config.sh.old
2748                 myuname="$newmyuname"
2749                 ;;
2750         *)  echo "Fetching default answers from your old config.sh file..." >&4
2751                 tmp_n="$n"
2752                 tmp_c="$c"
2753                 tmp_sh="$sh"
2754                 . ./config.sh
2755                 cp config.sh UU
2756                 n="$tmp_n"
2757                 c="$tmp_c"
2758                 : Older versions did not always set $sh.  Catch re-use of such
2759                 : an old config.sh.
2760                 case "$sh" in
2761                 '') sh="$tmp_sh" ;;
2762                 esac
2763                 hint=previous
2764                 ;;
2765         esac
2766 fi
2767 . ./UU/checkcc
2768 if test ! -f config.sh; then
2769         $cat <<EOM
2770
2771 First time through, eh?  I have some defaults handy for some systems
2772 that need some extra help getting the Configure answers right:
2773
2774 EOM
2775         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2776         dflt=''
2777         : Half the following guesses are probably wrong... If you have better
2778         : tests or hints, please send them to perlbug@perl.org
2779         : The metaconfig authors would also appreciate a copy...
2780         $test -f /irix && osname=irix
2781         $test -f /xenix && osname=sco_xenix
2782         $test -f /dynix && osname=dynix
2783         $test -f /dnix && osname=dnix
2784         $test -f /lynx.os && osname=lynxos
2785         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2786         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2787         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2788         $test -f /bin/mips && /bin/mips && osname=mips
2789         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2790                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2791         $test -d /usr/apollo/bin && osname=apollo
2792         $test -f /etc/saf/_sactab && osname=svr4
2793         $test -d /usr/include/minix && osname=minix
2794         $test -d /system && osname=vos
2795         if $test -d /MachTen -o -d /MachTen_Folder; then
2796                 osname=machten
2797                 if $test -x /sbin/version; then
2798                         osvers=`/sbin/version | $awk '{print $2}' |
2799                         $sed -e 's/[A-Za-z]$//'`
2800                 elif $test -x /usr/etc/version; then
2801                         osvers=`/usr/etc/version | $awk '{print $2}' |
2802                         $sed -e 's/[A-Za-z]$//'`
2803                 else
2804                         osvers="$2.$3"
2805                 fi
2806         fi
2807
2808         $test -f /sys/posix.dll &&
2809                 $test -f /usr/bin/what &&
2810                 set X `/usr/bin/what /sys/posix.dll` &&
2811                 $test "$3" = UWIN &&
2812                 osname=uwin &&
2813                 osvers="$5"
2814
2815         if $test -f $uname; then
2816                 set X $myuname
2817                 shift
2818
2819                 case "$5" in
2820                 fps*) osname=fps ;;
2821                 mips*)
2822                         case "$4" in
2823                         umips) osname=umips ;;
2824                         *) osname=mips ;;
2825                         esac;;
2826                 [23]100) osname=mips ;;
2827                 next*) osname=next ;;
2828                 i386*)
2829                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2830                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2831                                 osname='sco'
2832                                 osvers=$tmp
2833                         elif $test -f /etc/kconfig; then
2834                                 osname=isc
2835                                 if test "$lns" = "$ln -s"; then
2836                                         osvers=4
2837                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2838                                         osvers=3
2839                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2840                                         osvers=2
2841                                 fi
2842                         fi
2843                         tmp=''
2844                         ;;
2845                 pc*)
2846                         if test -n "$DJGPP"; then
2847                                 osname=dos
2848                                 osvers=djgpp
2849                         fi
2850                         ;;
2851                 esac
2852
2853                 case "$1" in
2854                 aix) osname=aix
2855                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2856                         case "$tmp" in
2857                         'not found') osvers="$4"."$3" ;;
2858                         '<3240'|'<>3240') osvers=3.2.0 ;;
2859                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2860                         '=3250'|'>3250') osvers=3.2.5 ;;
2861                         *) osvers=$tmp;;
2862                         esac
2863                         ;;
2864                 bsd386) osname=bsd386
2865                         osvers=`$uname -r`
2866                         ;;
2867                 cygwin*) osname=cygwin
2868                         osvers="$3"
2869                         ;;
2870                 *dc.osx) osname=dcosx
2871                         osvers="$3"
2872                         ;;
2873                 dnix) osname=dnix
2874                         osvers="$3"
2875                         ;;
2876                 domainos) osname=apollo
2877                         osvers="$3"
2878                         ;;
2879                 dgux) osname=dgux 
2880                         osvers="$3"
2881                         ;;
2882                 dynixptx*) osname=dynixptx
2883                         osvers=`echo "$4"|sed 's/^v//'`
2884                         ;;
2885                 freebsd) osname=freebsd 
2886                         osvers="$3" ;;
2887                 genix) osname=genix ;;
2888                 hp*) osname=hpux 
2889                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2890                         ;;
2891                 irix*) osname=irix
2892                         case "$3" in
2893                         4*) osvers=4 ;;
2894                         5*) osvers=5 ;;
2895                         *)      osvers="$3" ;;
2896                         esac
2897                         ;;
2898                 linux) osname=linux
2899                         case "$3" in
2900                         *)      osvers="$3" ;;
2901                         esac
2902                         ;;
2903                 MiNT) osname=mint
2904                         ;;
2905                 netbsd*) osname=netbsd
2906                         osvers="$3"
2907                         ;;
2908                 news-os) osvers="$3"
2909                         case "$3" in
2910                         4*) osname=newsos4 ;;
2911                         *) osname=newsos ;;
2912                         esac
2913                         ;;
2914                 next*) osname=next ;;
2915                 nonstop-ux) osname=nonstopux ;;
2916                 POSIX-BC | posix-bc ) osname=posix-bc
2917                         osvers="$3"
2918                         ;;
2919                 powerux | power_ux | powermax_os | powermaxos | \
2920                 powerunix | power_unix) osname=powerux
2921                         osvers="$3"
2922                         ;;
2923                 qnx) osname=qnx
2924                         osvers="$4"
2925                         ;;
2926                 solaris) osname=solaris
2927                         case "$3" in
2928                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2929                         *)      osvers="$3" ;;
2930                         esac
2931                         ;;
2932                 sunos) osname=sunos
2933                         case "$3" in
2934                         5*) osname=solaris
2935                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2936                         *)      osvers="$3" ;;
2937                         esac
2938                         ;;
2939                 titanos) osname=titanos
2940                         case "$3" in
2941                         1*) osvers=1 ;;
2942                         2*) osvers=2 ;;
2943                         3*) osvers=3 ;;
2944                         4*) osvers=4 ;;
2945                         *)      osvers="$3" ;;
2946                         esac
2947                         ;;
2948                 ultrix) osname=ultrix
2949                         osvers="$3"
2950                         ;;
2951                 osf1|mls+)      case "$5" in
2952                                 alpha)
2953                                         osname=dec_osf
2954                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2955                                         case "$osvers" in
2956                                         [1-9].[0-9]*) ;;
2957                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2958                                         esac
2959                                         ;;
2960                         hp*)    osname=hp_osf1  ;;
2961                         mips)   osname=mips_osf1 ;;
2962                         esac
2963                         ;;
2964                 unixware) osname=svr5
2965                         osvers="$4"
2966                         ;;
2967                 uts)    osname=uts
2968                         osvers="$3"
2969                         ;;
2970                 vos) osvers="$3"
2971                         ;;
2972                 $2) case "$osname" in
2973                         *isc*) ;;
2974                         *freebsd*) ;;
2975                         svr*)
2976                                 : svr4.x or possibly later
2977                                 case "svr$3" in 
2978                                 ${osname}*)
2979                                         osname=svr$3
2980                                         osvers=$4
2981                                         ;;
2982                                 esac
2983                                 case "$osname" in
2984                                 svr4.0)
2985                                         : Check for ESIX
2986                                         if test -f /stand/boot ; then
2987                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2988                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2989                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2990                                                         if test -n "$isesix"; then
2991                                                                 osname=esix4
2992                                                         fi
2993                                                 fi
2994                                         fi
2995                                         ;;
2996                                 esac
2997                                 ;;
2998                         *)      if test -f /etc/systemid; then
2999                                         osname=sco
3000                                         set `echo $3 | $sed 's/\./ /g'` $4
3001                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3002                                                 osvers=$1.$2.$3
3003                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3004                                                 osvers=$1.$2
3005                                         elif $test -f $src/hints/sco_$1.sh; then
3006                                                 osvers=$1
3007                                         fi
3008                                 else
3009                                         case "$osname" in
3010                                         '') : Still unknown.  Probably a generic Sys V.
3011                                                 osname="sysv"
3012                                                 osvers="$3"
3013                                                 ;;
3014                                         esac
3015                                 fi
3016                                 ;;
3017                         esac
3018                         ;;
3019                 *)      case "$osname" in
3020                         '') : Still unknown.  Probably a generic BSD.
3021                                 osname="$1"
3022                                 osvers="$3"
3023                                 ;;
3024                         esac
3025                         ;;
3026                 esac
3027         else
3028                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3029                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3030                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3031                                 osname=news_os
3032                         fi
3033                         $rm -f UU/kernel.what
3034                 elif test -d c:/.; then
3035                         set X $myuname
3036                         osname=os2
3037                         osvers="$5"
3038                 fi
3039         fi
3040         
3041         case "$targetarch" in
3042         '') ;;
3043         *)  hostarch=$osname
3044             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3045             osvers=''
3046             ;;
3047         esac
3048
3049         : Now look for a hint file osname_osvers, unless one has been
3050         : specified already.
3051         case "$hintfile" in
3052         ''|' ')
3053                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3054                 : Also try without trailing minor version numbers.
3055                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3056                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3057                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3058                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3059                 case "$file" in
3060                 '') dflt=none ;;
3061                 *)  case "$osvers" in
3062                         '') dflt=$file
3063                                 ;;
3064                         *)  if $test -f $src/hints/$file.sh ; then
3065                                         dflt=$file
3066                                 elif $test -f $src/hints/$xfile.sh ; then
3067                                         dflt=$xfile
3068                                 elif $test -f $src/hints/$xxfile.sh ; then
3069                                         dflt=$xxfile
3070                                 elif $test -f $src/hints/$xxxfile.sh ; then
3071                                         dflt=$xxxfile
3072                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3073                                         dflt=$xxxxfile
3074                                 elif $test -f "$src/hints/${osname}.sh" ; then
3075                                         dflt="${osname}"
3076                                 else
3077                                         dflt=none
3078                                 fi
3079                                 ;;
3080                         esac
3081                         ;;
3082                 esac
3083                 if $test -f Policy.sh ; then
3084                         case "$dflt" in
3085                         *Policy*) ;;
3086                         none) dflt="Policy" ;;
3087                         *) dflt="Policy $dflt" ;;
3088                         esac
3089                 fi
3090                 ;;
3091         *)
3092                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3093                 ;;
3094         esac
3095
3096         if $test -f Policy.sh ; then
3097                 $cat <<EOM
3098
3099 There's also a Policy hint file available, which should make the
3100 site-specific (policy) questions easier to answer.
3101 EOM
3102
3103         fi
3104
3105         $cat <<EOM
3106
3107 You may give one or more space-separated answers, or "none" if appropriate.
3108 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3109 is a good thing.  DO NOT give a wrong version or a wrong OS.
3110
3111 EOM
3112
3113         rp="Which of these apply, if any?"
3114         . UU/myread
3115         tans=$ans
3116         for file in $tans; do
3117                 if $test X$file = XPolicy -a -f Policy.sh; then
3118                         . Policy.sh
3119                         $cat Policy.sh >> UU/config.sh
3120                 elif $test -f $src/hints/$file.sh; then
3121                         . $src/hints/$file.sh
3122                         $cat $src/hints/$file.sh >> UU/config.sh
3123                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3124                         : nothing
3125                 else
3126                         : Give one chance to correct a possible typo.
3127                         echo "$file.sh does not exist"
3128                         dflt=$file
3129                         rp="hint to use instead?"
3130                         . UU/myread
3131                         for file in $ans; do
3132                                 if $test -f "$src/hints/$file.sh"; then
3133                                         . $src/hints/$file.sh
3134                                         $cat $src/hints/$file.sh >> UU/config.sh
3135                                 elif $test X$ans = X -o X$ans = Xnone ; then
3136                                         : nothing
3137                                 else
3138                                         echo "$file.sh does not exist -- ignored."
3139                                 fi
3140                         done
3141                 fi
3142         done
3143
3144         hint=recommended
3145         : Remember our hint file for later.
3146         if $test -f "$src/hints/$file.sh" ; then
3147                 hintfile="$file"
3148         else
3149                 hintfile=''
3150         fi
3151 fi
3152 cd UU
3153 ;;
3154 *)
3155         echo " "
3156         echo "Fetching default answers from $config_sh..." >&4
3157         tmp_n="$n"
3158         tmp_c="$c"
3159         cd ..
3160         cp $config_sh config.sh 2>/dev/null
3161         chmod +w config.sh
3162         . ./config.sh
3163         cd UU
3164         cp ../config.sh .
3165         n="$tmp_n"
3166         c="$tmp_c"
3167         hint=previous
3168         ;;
3169 esac
3170 test "$override" && . ./optdef.sh
3171
3172 : Restore computed paths
3173 for file in $loclist $trylist; do
3174         eval $file="\$_$file"
3175 done
3176
3177 cat << EOM
3178
3179 Configure uses the operating system name and version to set some defaults.
3180 The default value is probably right if the name rings a bell. Otherwise,
3181 since spelling matters for me, either accept the default or answer "none"
3182 to leave it blank.
3183
3184 EOM
3185 case "$osname" in
3186         ''|' ')
3187                 case "$hintfile" in
3188                 ''|' '|none) dflt=none ;;
3189                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3190                 esac
3191                 ;;
3192         *) dflt="$osname" ;;
3193 esac
3194 rp="Operating system name?"
3195 . ./myread
3196 case "$ans" in
3197 none)  osname='' ;;
3198 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3199 esac
3200 echo " "
3201 case "$osvers" in
3202         ''|' ')
3203                 case "$hintfile" in
3204                 ''|' '|none) dflt=none ;;
3205                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3206                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3207                         case "$dflt" in
3208                         ''|' ') dflt=none ;;
3209                         esac
3210                         ;;
3211                 esac
3212                 ;;
3213         *) dflt="$osvers" ;;
3214 esac
3215 rp="Operating system version?"
3216 . ./myread
3217 case "$ans" in
3218 none)  osvers='' ;;
3219 *) osvers="$ans" ;;
3220 esac
3221
3222
3223 . ./posthint.sh
3224
3225 : who configured the system
3226 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3227 cf_by=`(logname) 2>/dev/null`
3228 case "$cf_by" in
3229 "")
3230         cf_by=`(whoami) 2>/dev/null`
3231         case "$cf_by" in
3232         "") cf_by=unknown ;;
3233         esac ;;
3234 esac
3235
3236 : set up the script used to warn in case of inconsistency
3237 cat <<EOS >whoa
3238 $startsh
3239 EOS
3240 cat <<'EOSC' >>whoa
3241 dflt=y
3242 echo " "
3243 echo "*** WHOA THERE!!! ***" >&4
3244 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3245 rp="    Keep the $hint value?"
3246 . ./myread
3247 case "$ans" in
3248 y) td=$was; tu=$was;;
3249 esac
3250 EOSC
3251
3252 : function used to set $1 to $val
3253 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3254 case "$val$was" in
3255 $define$undef) . ./whoa; eval "$var=\$td";;
3256 $undef$define) . ./whoa; eval "$var=\$tu";;
3257 *) eval "$var=$val";;
3258 esac'
3259
3260 case "$usethreads" in
3261 $define|true|[yY]*)     dflt='y';;
3262 *) dflt='n';;
3263 esac
3264 cat <<EOM
3265
3266 Perl can be built to take advantage of threads on some systems.
3267 To do so, Configure can be run with -Dusethreads.
3268
3269 Note that threading is a highly experimental feature, and
3270 some known race conditions still remain.  If you choose to try
3271 it, be very sure to not actually deploy it for production
3272 purposes.  README.threads has more details, and is required
3273 reading if you enable threads.
3274
3275 If this doesn't make any sense to you, just accept the default '$dflt'.
3276 EOM
3277 rp='Build a threading Perl?'
3278 . ./myread
3279 case "$ans" in
3280 y|Y)    val="$define" ;;
3281 *)      val="$undef" ;;
3282 esac
3283 set usethreads
3284 eval $setvar
3285
3286 case "$usethreads" in
3287 $define)
3288         $cat <<EOM
3289
3290 As of 5.5.640, Perl has two different internal threading implementations,
3291 the 5.005 version (5005threads) and an interpreter-based version
3292 (ithreads) that has one interpreter per thread.  Both are very 
3293 experimental.  This arrangement exists to help developers work out
3294 which one is better.
3295
3296 If you're a casual user, you probably don't want interpreter-threads
3297 at this time.  But if you do, the 'threads' module allows their use,
3298 and the 'Thread' module offers an interface to both 5005threads and
3299 ithreads (whichever has been configured).
3300 EOM
3301         : Default to ithreads unless overridden on command line or with
3302         : old config.sh
3303         dflt='y'
3304         case "$use5005threads" in
3305                 $define|true|[yY]*) dflt='n';;
3306         esac
3307         case "$useithreads" in
3308                 $undef|false|[nN]*) dflt='n';;
3309         esac
3310         rp='Use interpreter-based ithreads?'
3311         . ./myread
3312         case "$ans" in
3313         y|Y)    val="$define" ;;
3314         *)      val="$undef" ;;
3315         esac
3316         set useithreads
3317         eval $setvar
3318         : Now set use5005threads to the opposite value.
3319         case "$useithreads" in
3320         $define) val="$undef" ;;
3321         *) val="$define" ;;
3322         esac
3323         set use5005threads
3324         eval $setvar
3325         ;;
3326 *)
3327         useithreads="$undef"
3328         use5005threads="$undef"
3329         ;;
3330 esac
3331
3332 case "$useithreads$use5005threads" in
3333 "$define$define")
3334         $cat >&4 <<EOM
3335
3336 You cannot have both the ithreads and the 5.005 threads enabled
3337 at the same time.  Disabling the 5.005 threads since they are
3338 much less stable than the ithreads.
3339
3340 EOM
3341         use5005threads="$undef"
3342         ;;
3343 esac
3344
3345 case "$d_oldpthreads" in
3346 '')     : Configure tests would be welcome here.  For now, assume undef.
3347         val="$undef" ;;
3348 *)      val="$d_oldpthreads" ;;
3349 esac
3350 set d_oldpthreads
3351 eval $setvar
3352
3353
3354 case "$usethreads" in
3355 "$define"|true|[yY]*)
3356 : Look for a hint-file generated 'call-back-unit'.  If the
3357 : user has specified that a threading perl is to be built,
3358 : we may need to set or change some other defaults.
3359         if $test -f usethreads.cbu; then
3360                 echo "Your platform has some specific hints for threaded builds, using them..."
3361                 . ./usethreads.cbu
3362         else
3363                 $cat <<EOM
3364 (Your platform doesn't have any specific hints for threaded builds.
3365  Assuming POSIX threads, then.)
3366 EOM
3367         fi
3368         ;;
3369 esac
3370
3371 cat <<EOM
3372
3373 Perl can be built so that multiple Perl interpreters can coexist
3374 within the same Perl executable.
3375 EOM
3376
3377 case "$useithreads" in
3378 $define)
3379         cat <<EOM
3380 This multiple interpreter support is required for interpreter-based threads.
3381 EOM
3382         val="$define"
3383         ;;
3384 *)      case "$usemultiplicity" in
3385         $define|true|[yY]*)     dflt='y';;
3386         *) dflt='n';;
3387         esac
3388         echo " "
3389         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3390         rp='Build Perl for multiplicity?'
3391         . ./myread
3392         case "$ans" in
3393         y|Y)    val="$define" ;;
3394         *)      val="$undef" ;;
3395         esac
3396         ;;
3397 esac
3398 set usemultiplicity
3399 eval $setvar
3400
3401
3402 case "$usemorebits" in
3403 "$define"|true|[yY]*)
3404         use64bitint="$define"
3405         uselongdouble="$define"
3406         usemorebits="$define"
3407         ;;
3408 *)      usemorebits="$undef"
3409         ;;
3410 esac
3411
3412 : make some quick guesses about what we are up against
3413 echo " "
3414 $echo $n "Hmm...  $c"
3415 echo exit 1 >bsd
3416 echo exit 1 >usg
3417 echo exit 1 >v7
3418 echo exit 1 >osf1
3419 echo exit 1 >eunice
3420 echo exit 1 >xenix
3421 echo exit 1 >venix
3422 echo exit 1 >os2
3423 d_bsd="$undef"
3424 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3425 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3426 then
3427         echo "Looks kind of like an OSF/1 system, but we'll see..."
3428         echo exit 0 >osf1
3429 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3430         xxx=`./loc addbib blurfl $pth`
3431         if $test -f $xxx; then
3432         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3433                 echo exit 0 >bsd
3434                 echo exit 0 >usg
3435         else
3436                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3437                         echo "Looks kind of like an extended USG system, but we'll see..."
3438                 else
3439                         echo "Looks kind of like a USG system, but we'll see..."
3440                 fi
3441                 echo exit 0 >usg
3442         fi
3443 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3444         echo "Looks kind of like a BSD system, but we'll see..."
3445         d_bsd="$define"
3446         echo exit 0 >bsd
3447 else
3448         echo "Looks kind of like a Version 7 system, but we'll see..."
3449         echo exit 0 >v7
3450 fi
3451 case "$eunicefix" in
3452 *unixtovms*)
3453         $cat <<'EOI'
3454 There is, however, a strange, musty smell in the air that reminds me of
3455 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3456 EOI
3457         echo exit 0 >eunice
3458         d_eunice="$define"
3459 : it so happens the Eunice I know will not run shell scripts in Unix format
3460         ;;
3461 *)
3462         echo " "
3463         echo "Congratulations.  You aren't running Eunice."
3464         d_eunice="$undef"
3465         ;;
3466 esac
3467 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3468 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3469 : semicolon as a patch separator
3470 case "$p_" in
3471 :) ;;
3472 *)
3473         $cat <<'EOI'
3474 I have the feeling something is not exactly right, however...don't tell me...
3475 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3476 (Or you may be running DOS with DJGPP.)
3477 EOI
3478         echo exit 0 >os2
3479         ;;
3480 esac
3481 if test -f /xenix; then
3482         echo "Actually, this looks more like a XENIX system..."
3483         echo exit 0 >xenix
3484         d_xenix="$define"
3485 else
3486         echo " "
3487         echo "It's not Xenix..."
3488         d_xenix="$undef"
3489 fi
3490 chmod +x xenix
3491 $eunicefix xenix
3492 if test -f /venix; then
3493         echo "Actually, this looks more like a VENIX system..."
3494         echo exit 0 >venix
3495 else
3496         echo " "
3497         if ./xenix; then
3498                 : null
3499         else
3500                 echo "Nor is it Venix..."
3501         fi
3502 fi
3503 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3504 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3505 $rm -f foo
3506
3507 case "$cc" in
3508 '') dflt=cc;;
3509 *) dflt="$cc";;
3510 esac
3511 rp="Use which C compiler?"
3512 . ./myread
3513 cc="$ans"
3514 : Look for a hint-file generated 'call-back-unit'.  Now that the
3515 : user has specified the compiler, we may need to set or change some
3516 : other defaults.
3517 if $test -f cc.cbu; then
3518     . ./cc.cbu
3519 fi
3520 . ./checkcc
3521
3522 echo " "
3523 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3524 $cat >try.c <<EOM
3525 #include <stdio.h>
3526 int main() {
3527 #ifdef __GNUC__
3528 #ifdef __VERSION__
3529         printf("%s\n", __VERSION__);
3530 #else
3531         printf("%s\n", "1");
3532 #endif
3533 #endif
3534         exit(0);
3535 }
3536 EOM
3537 if $cc -o try $ccflags $ldflags try.c; then
3538         gccversion=`$run ./try`
3539         case "$gccversion" in
3540         '') echo "You are not using GNU cc." ;;
3541         *)  echo "You are using GNU cc $gccversion."
3542             ccname=gcc  
3543             ;;
3544         esac
3545 else
3546         echo " "
3547         echo "*** WHOA THERE!!! ***" >&4
3548         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3549         case "$knowitall" in
3550         '')
3551         echo "    You'd better start hunting for one and let me know about it." >&4
3552                 exit 1
3553                 ;;
3554         esac
3555 fi
3556 $rm -f try try.*
3557 case "$gccversion" in
3558 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3559 esac
3560 case "$gccversion" in
3561 '') gccosandvers='' ;;
3562 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3563    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3564    gccshortvers=''
3565    case "$gccosandvers" in
3566    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3567    $osname$osvers) ;; # looking good
3568    $osname*) cat <<EOM >&4
3569
3570 *** WHOA THERE!!! ***
3571
3572     Your gcc has not been compiled for the exact release of
3573     your operating system ($gccosandvers versus $osname$osvers).
3574
3575     In general it is a good idea to keep gcc synchronized with
3576     the operating system because otherwise serious problems
3577     may ensue when trying to compile software, like Perl.
3578
3579     I'm trying to be optimistic here, though, and will continue.
3580     If later during the configuration and build icky compilation
3581     problems appear (headerfile conflicts being the most common
3582     manifestation), I suggest reinstalling the gcc to match
3583     your operating system release.
3584
3585 EOM
3586       ;;
3587    *) gccosandvers='' ;; # failed to parse, better be silent
3588    esac
3589    ;;
3590 esac
3591 case "$ccname" in
3592 '') ccname="$cc" ;;
3593 esac
3594
3595
3596 : decide how portable to be.  Allow command line overrides.
3597 case "$d_portable" in
3598 "$undef") ;;
3599 *)      d_portable="$define" ;;
3600 esac
3601
3602 : set up shell script to do ~ expansion
3603 cat >filexp <<EOSS
3604 $startsh
3605 : expand filename
3606 case "\$1" in
3607  ~/*|~)
3608         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3609         ;;
3610  ~*)
3611         if $test -f /bin/csh; then
3612                 /bin/csh -f -c "glob \$1"
3613                 failed=\$?
3614                 echo ""
3615                 exit \$failed
3616         else
3617                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3618                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3619                 if $test ! -d "\$dir"; then
3620                         me=\`basename \$0\`
3621                         echo "\$me: can't locate home directory for: \$name" >&2
3622                         exit 1
3623                 fi
3624                 case "\$1" in
3625                 */*)
3626                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3627                         ;;
3628                 *)
3629                         echo \$dir
3630                         ;;
3631                 esac
3632         fi
3633         ;;
3634 *)
3635         echo \$1
3636         ;;
3637 esac
3638 EOSS
3639 chmod +x filexp
3640 $eunicefix filexp
3641
3642 : now set up to get a file name
3643 cat <<EOS >getfile
3644 $startsh
3645 EOS
3646 cat <<'EOSC' >>getfile
3647 tilde=''
3648 fullpath=''
3649 already=''
3650 skip=''
3651 none_ok=''
3652 exp_file=''
3653 nopath_ok=''
3654 orig_rp="$rp"
3655 orig_dflt="$dflt"
3656 case "$gfpth" in
3657 '') gfpth='.' ;;
3658 esac
3659
3660 case "$fn" in
3661 *\(*)
3662         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3663         fn=`echo $fn | sed 's/(.*)//'`
3664         ;;
3665 esac
3666
3667 case "$fn" in
3668 *:*)
3669         loc_file=`expr $fn : '.*:\(.*\)'`
3670         fn=`expr $fn : '\(.*\):.*'`
3671         ;;
3672 esac
3673
3674 case "$fn" in
3675 *~*) tilde=true;;
3676 esac
3677 case "$fn" in
3678 */*) fullpath=true;;
3679 esac
3680 case "$fn" in
3681 *+*) skip=true;;
3682 esac
3683 case "$fn" in
3684 *n*) none_ok=true;;
3685 esac
3686 case "$fn" in
3687 *e*) exp_file=true;;
3688 esac
3689 case "$fn" in
3690 *p*) nopath_ok=true;;
3691 esac
3692
3693 case "$fn" in
3694 *f*) type='File';;
3695 *d*) type='Directory';;
3696 *l*) type='Locate';;
3697 esac
3698
3699 what="$type"
3700 case "$what" in
3701 Locate) what='File';;
3702 esac
3703
3704 case "$exp_file" in
3705 '')
3706         case "$d_portable" in
3707         "$define") ;;
3708         *) exp_file=true;;
3709         esac
3710         ;;
3711 esac
3712
3713 cd ..
3714 while test "$type"; do
3715         redo=''
3716         rp="$orig_rp"
3717         dflt="$orig_dflt"
3718         case "$tilde" in
3719         true) rp="$rp (~name ok)";;
3720         esac
3721         . UU/myread
3722         if test -f UU/getfile.ok && \
3723                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3724         then
3725                 value="$ans"
3726                 ansexp="$ans"
3727                 break
3728         fi
3729         case "$ans" in
3730         none)
3731                 value=''
3732                 ansexp=''
3733                 case "$none_ok" in
3734                 true) type='';;
3735                 esac
3736                 ;;
3737         *)
3738                 case "$tilde" in
3739                 '') value="$ans"
3740                         ansexp="$ans";;
3741                 *)
3742                         value=`UU/filexp $ans`
3743                         case $? in
3744                         0)
3745                                 if test "$ans" != "$value"; then
3746                                         echo "(That expands to $value on this system.)"
3747                                 fi
3748                                 ;;
3749                         *) value="$ans";;
3750                         esac
3751                         ansexp="$value"
3752                         case "$exp_file" in
3753                         '') value="$ans";;
3754                         esac
3755                         ;;
3756                 esac
3757                 case "$fullpath" in
3758                 true)
3759                         case "$ansexp" in
3760                         /*) value="$ansexp" ;;
3761                         [a-zA-Z]:/*) value="$ansexp" ;;
3762                         *)
3763                                 redo=true
3764                                 case "$already" in
3765                                 true)
3766                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3767                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3768                                         ;;
3769                                 *)
3770                                 echo "Please give a full path name, starting with slash." >&4
3771                                         case "$tilde" in
3772                                         true)
3773                                 echo "Note that using ~name is ok provided it expands well." >&4
3774                                                 already=true
3775                                                 ;;
3776                                         esac
3777                                 esac
3778                                 ;;
3779                         esac
3780                         ;;
3781                 esac
3782                 case "$redo" in
3783                 '')
3784                         case "$type" in
3785                         File)
3786                                 for fp in $gfpth; do
3787                                         if test "X$fp" = X.; then
3788                                             pf="$ansexp"
3789                                         else    
3790                                             pf="$fp/$ansexp"
3791                                         fi
3792                                         if test -f "$pf"; then
3793                                                 type=''
3794                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3795                                         then
3796                                                 echo "($value is not a plain file, but that's ok.)"
3797                                                 type=''
3798                                         fi
3799                                         if test X"$type" = X; then
3800                                             value="$pf"
3801                                             break
3802                                         fi
3803                                 done
3804                                 ;;
3805                         Directory)
3806                                 for fp in $gfpth; do
3807                                         if test "X$fp" = X.; then
3808                                             dir="$ans"
3809                                             direxp="$ansexp"
3810                                         else    
3811                                             dir="$fp/$ansexp"
3812                                             direxp="$fp/$ansexp"
3813                                         fi
3814                                         if test -d "$direxp"; then
3815                                                 type=''
3816                                                 value="$dir"
3817                                                 break
3818                                         fi
3819                                 done
3820                                 ;;
3821                         Locate)
3822                                 if test -d "$ansexp"; then
3823                                         echo "(Looking for $loc_file in directory $value.)"
3824                                         value="$value/$loc_file"
3825                                         ansexp="$ansexp/$loc_file"
3826                                 fi
3827                                 if test -f "$ansexp"; then
3828                                         type=''
3829                                 fi
3830                                 case "$nopath_ok" in
3831                                 true)   case "$value" in
3832                                         */*) ;;
3833                                         *)      echo "Assuming $value will be in people's path."
3834                                                 type=''
3835                                                 ;;
3836                                         esac
3837                                         ;;
3838                                 esac
3839                                 ;;
3840                         esac
3841
3842                         case "$skip" in
3843                         true) type='';
3844                         esac
3845
3846                         case "$type" in
3847                         '') ;;
3848                         *)
3849                                 if test "$fastread" = yes; then
3850                                         dflt=y
3851                                 else
3852                                         dflt=n
3853                                 fi
3854                                 rp="$what $value doesn't exist.  Use that name anyway?"
3855                                 . UU/myread
3856                                 dflt=''
3857                                 case "$ans" in
3858                                 y*) type='';;
3859                                 *) echo " ";;
3860                                 esac
3861                                 ;;
3862                         esac
3863                         ;;
3864                 esac
3865                 ;;
3866         esac
3867 done
3868 cd UU
3869 ans="$value"
3870 rp="$orig_rp"
3871 dflt="$orig_dflt"
3872 rm -f getfile.ok
3873 test "X$gfpthkeep" != Xy && gfpth=""
3874 EOSC
3875
3876 : What should the include directory be ?
3877 echo " "
3878 $echo $n "Hmm...  $c"
3879 dflt='/usr/include'
3880 incpath=''
3881 mips_type=''
3882 if $test -f /bin/mips && /bin/mips; then
3883         echo "Looks like a MIPS system..."
3884         $cat >usr.c <<'EOCP'
3885 #ifdef SYSTYPE_BSD43
3886 /bsd43
3887 #endif
3888 EOCP
3889         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3890                 dflt='/bsd43/usr/include'
3891                 incpath='/bsd43'
3892                 mips_type='BSD 4.3'
3893         else
3894                 mips_type='System V'
3895         fi
3896         $rm -f usr.c usr.out
3897         echo "and you're compiling with the $mips_type compiler and libraries."
3898         xxx_prompt=y
3899         echo "exit 0" >mips
3900 else
3901         echo "Doesn't look like a MIPS system."
3902         xxx_prompt=n
3903         echo "exit 1" >mips
3904 fi
3905 chmod +x mips
3906 $eunicefix mips
3907 case "$usrinc" in
3908 '') ;;
3909 *) dflt="$usrinc";;
3910 esac
3911 case "$xxx_prompt" in
3912 y)      fn=d/
3913         echo " "
3914         rp='Where are the include files you want to use?'
3915         . ./getfile
3916         usrinc="$ans"
3917         ;;
3918 *)      usrinc="$dflt"
3919         ;;
3920 esac
3921
3922 : see how we invoke the C preprocessor
3923 echo " "
3924 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3925 cat <<'EOT' >testcpp.c
3926 #define ABC abc
3927 #define XYZ xyz
3928 ABC.XYZ
3929 EOT
3930 cd ..
3931 if test ! -f cppstdin; then
3932         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3933                 # AIX cc -E doesn't show the absolute headerfile
3934                 # locations but we'll cheat by using the -M flag.
3935                 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
3936         else
3937                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3938         fi
3939 else
3940         echo "Keeping your $hint cppstdin wrapper."
3941 fi
3942 chmod 755 cppstdin
3943 wrapper=`pwd`/cppstdin
3944 ok='false'
3945 cd UU
3946
3947 if $test "X$cppstdin" != "X" && \
3948         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3949         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3950 then
3951         echo "You used to use $cppstdin $cppminus so we'll use that again."
3952         case "$cpprun" in
3953         '') echo "But let's see if we can live without a wrapper..." ;;
3954         *)
3955                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3956                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3957                 then
3958                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3959                         ok='true'
3960                 else
3961                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3962                 fi
3963                 ;;
3964         esac
3965 else
3966         case "$cppstdin" in
3967         '') ;;
3968         *)
3969                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3970                 ;;
3971         esac
3972 fi
3973
3974 if $ok; then
3975         : nothing
3976 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3977         $cc -E <testcpp.c >testcpp.out 2>&1; \
3978         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3979         echo "Yup, it does."
3980         x_cpp="$cc -E"
3981         x_minus='';
3982 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3983         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3984         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3985         echo "Yup, it does."
3986         x_cpp="$cc -E"
3987         x_minus='-';
3988 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3989         $cc -P <testcpp.c >testcpp.out 2>&1; \
3990         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3991         echo "Yipee, that works!"
3992         x_cpp="$cc -P"
3993         x_minus='';
3994 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3995         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3996         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3997         echo "At long last!"
3998         x_cpp="$cc -P"
3999         x_minus='-';
4000 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4001         $cpp <testcpp.c >testcpp.out 2>&1; \
4002         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4003         echo "It works!"
4004         x_cpp="$cpp"
4005         x_minus='';
4006 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4007         $cpp - <testcpp.c >testcpp.out 2>&1; \
4008         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4009         echo "Hooray, it works!  I was beginning to wonder."
4010         x_cpp="$cpp"
4011         x_minus='-';
4012 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4013         $wrapper <testcpp.c >testcpp.out 2>&1; \
4014         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4015         x_cpp="$wrapper"
4016         x_minus=''
4017         echo "Eureka!"
4018 else
4019         dflt=''
4020         rp="No dice.  I can't find a C preprocessor.  Name one:"
4021         . ./myread
4022         x_cpp="$ans"
4023         x_minus=''
4024         $x_cpp <testcpp.c >testcpp.out 2>&1
4025         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4026                 echo "OK, that will do." >&4
4027         else
4028 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4029                 exit 1
4030         fi
4031 fi
4032
4033 case "$ok" in
4034 false)
4035         cppstdin="$x_cpp"
4036         cppminus="$x_minus"
4037         cpprun="$x_cpp"
4038         cpplast="$x_minus"
4039         set X $x_cpp
4040         shift
4041         case "$1" in
4042         "$cpp")
4043                 echo "Perhaps can we force $cc -E using a wrapper..."
4044                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4045                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4046                 then
4047                         echo "Yup, we can."
4048                         cppstdin="$wrapper"
4049                         cppminus='';
4050                 else
4051                         echo "Nope, we'll have to live without it..."
4052                 fi
4053                 ;;
4054         esac
4055         case "$cpprun" in
4056         "$wrapper")
4057                 cpprun=''
4058                 cpplast=''
4059                 ;;
4060         esac
4061         ;;
4062 esac
4063
4064 case "$cppstdin" in
4065 "$wrapper"|'cppstdin') ;;
4066 *) $rm -f $wrapper;;
4067 esac
4068 $rm -f testcpp.c testcpp.out
4069
4070 : Set private lib path
4071 case "$plibpth" in
4072 '') if ./mips; then
4073                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4074         fi;;
4075 esac
4076 case "$libpth" in
4077 ' ') dlist='';;
4078 '') dlist="$loclibpth $plibpth $glibpth";;
4079 *) dlist="$libpth";;
4080 esac
4081
4082 : Now check and see which directories actually exist, avoiding duplicates
4083 libpth=''
4084 for xxx in $dlist
4085 do
4086     if $test -d $xxx; then
4087                 case " $libpth " in
4088                 *" $xxx "*) ;;
4089                 *) libpth="$libpth $xxx";;
4090                 esac
4091     fi
4092 done
4093 $cat <<'EOM'
4094
4095 Some systems have incompatible or broken versions of libraries.  Among
4096 the directories listed in the question below, please remove any you
4097 know not to be holding relevant libraries, and add any that are needed.
4098 Say "none" for none.
4099
4100 EOM
4101 case "$libpth" in
4102 '') dflt='none';;
4103 *)
4104         set X $libpth
4105         shift
4106         dflt=${1+"$@"}
4107         ;;
4108 esac
4109 rp="Directories to use for library searches?"
4110 . ./myread
4111 case "$ans" in
4112 none) libpth=' ';;
4113 *) libpth="$ans";;
4114 esac
4115
4116 : compute shared library extension
4117 case "$so" in
4118 '')
4119         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4120                 dflt='sl'
4121         else
4122                 dflt='so'
4123         fi
4124         ;;
4125 *) dflt="$so";;
4126 esac
4127 $cat <<EOM
4128
4129 On some systems, shared libraries may be available.  Answer 'none' if
4130 you want to suppress searching of shared libraries for the remainder
4131 of this configuration.
4132
4133 EOM
4134 rp='What is the file extension used for shared libraries?'
4135 . ./myread
4136 so="$ans"
4137
4138 : Define several unixisms.
4139 : Hints files or command line option can be used to override them.
4140 : The convoluted testing is in case hints files set either the old
4141 : or the new name.
4142 case "$_exe" in
4143 '')     case "$exe_ext" in
4144     '') ;;
4145         *)      _exe="$exe_ext" ;;
4146         esac
4147         ;;
4148 esac
4149 case "$_a" in
4150 '')     case "$lib_ext" in
4151     '') _a='.a';;
4152         *)      _a="$lib_ext" ;;
4153         esac
4154         ;;
4155 esac
4156 case "$_o" in
4157 '') case "$obj_ext" in
4158         '')     _o='.o';;
4159         *)      _o="$obj_ext";;
4160         esac
4161         ;;
4162 esac
4163 case "$p_" in
4164 '') case "$path_sep" in
4165         '')     p_=':';;
4166         *)      p_="$path_sep";;
4167         esac
4168         ;;
4169 esac
4170 exe_ext=$_exe
4171 lib_ext=$_a
4172 obj_ext=$_o
4173 path_sep=$p_
4174
4175 : Which makefile gets called first.  This is used by make depend.
4176 case "$firstmakefile" in
4177 '') firstmakefile='makefile';;
4178 esac
4179
4180 case "$usesocks" in
4181 $define|true|[yY]*)     dflt='y';;
4182 *) dflt='n';;
4183 esac
4184 cat <<EOM
4185
4186 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4187 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4188 to use the PerlIO abstraction layer, this will be implicitly selected.
4189
4190 If this doesn't make any sense to you, just accept the default '$dflt'.
4191 EOM
4192 rp='Build Perl for SOCKS?'
4193 . ./myread
4194 case "$ans" in
4195 y|Y)    val="$define" ;;     
4196 *)      val="$undef" ;;
4197 esac
4198 set usesocks
4199 eval $setvar
4200
4201 case "$usesocks" in
4202 $define|true|[yY]*) useperlio="$define";;
4203 esac
4204
4205 : Looking for optional libraries
4206 echo " "
4207 echo "Checking for optional libraries..." >&4
4208 case "$libs" in
4209 ' '|'') dflt='';;
4210 *) dflt="$libs";;
4211 esac
4212 case "$libswanted" in
4213 '') libswanted='c_s';;
4214 esac
4215 case "$usesocks" in
4216 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4217 esac
4218 libsfound=''
4219 libsfiles=''
4220 libsdirs=''
4221 libspath=''
4222 for thisdir in $libpth $xlibpth; do
4223   test -d $thisdir && libspath="$libspath $thisdir"
4224 done
4225 for thislib in $libswanted; do
4226         for thisdir in $libspath; do
4227             xxx=''
4228             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4229                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4230                 $test -f "$xxx" && eval $libscheck
4231                 $test -f "$xxx" && libstyle=shared
4232             fi
4233             if test ! -f "$xxx"; then
4234                 xxx=$thisdir/lib$thislib.$so
4235                 $test -f "$xxx" && eval $libscheck
4236                 $test -f "$xxx" && libstyle=shared
4237             fi  
4238             if test ! -f "$xxx"; then
4239                 xxx=$thisdir/lib$thislib$_a
4240                 $test -f "$xxx" && eval $libscheck
4241                 $test -f "$xxx" && libstyle=static
4242             fi
4243             if test ! -f "$xxx"; then
4244                 xxx=$thisdir/$thislib$_a
4245                 $test -f "$xxx" && eval $libscheck
4246                 $test -f "$xxx" && libstyle=static
4247             fi
4248             if test ! -f "$xxx"; then
4249                 xxx=$thisdir/lib${thislib}_s$_a
4250                 $test -f "$xxx" && eval $libscheck
4251                 $test -f "$xxx" && libstyle=static
4252                 $test -f "$xxx" && thislib=${thislib}_s
4253             fi
4254             if test ! -f "$xxx"; then
4255                 xxx=$thisdir/Slib$thislib$_a
4256                 $test -f "$xxx" && eval $libscheck
4257                 $test -f "$xxx" && libstyle=static
4258             fi
4259             if $test -f "$xxx"; then
4260                 case "$libstyle" in
4261                 shared) echo "Found -l$thislib (shared)." ;;
4262                 static) echo "Found -l$thislib." ;;
4263                 *)      echo "Found -l$thislib ($libstyle)." ;;
4264                 esac
4265                 case " $dflt " in
4266                 *"-l$thislib "*);;
4267                 *) dflt="$dflt -l$thislib"
4268                    libsfound="$libsfound $xxx"
4269                    yyy=`basename $xxx`
4270                    libsfiles="$libsfiles $yyy"
4271                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4272                    case " $libsdirs " in
4273                    *" $yyy "*) ;;
4274                    *) libsdirs="$libsdirs $yyy" ;;
4275                    esac
4276                    ;;
4277                 esac
4278                 break
4279             fi  
4280         done
4281         if $test ! -f "$xxx"; then
4282             echo "No -l$thislib."
4283         fi
4284 done
4285 set X $dflt
4286 shift
4287 dflt="$*"
4288 case "$libs" in
4289 '') dflt="$dflt";;
4290 *) dflt="$libs";;
4291 esac
4292 case "$dflt" in
4293 ' '|'') dflt='none';;
4294 esac
4295
4296 $cat <<EOM
4297
4298 In order to compile $package on your machine, a number of libraries
4299 are usually needed.  Include any other special libraries here as well.
4300 Say "none" for none.  The default list is almost always right.
4301 EOM
4302
4303 echo " "
4304 rp="What libraries to use?"
4305 . ./myread
4306 case "$ans" in
4307 none) libs=' ';;
4308 *) libs="$ans";;
4309 esac
4310
4311 : determine optimization, if desired, or use for debug flag also
4312 case "$optimize" in
4313 ' '|$undef) dflt='none';;
4314 '') dflt='-O';;
4315 *) dflt="$optimize";;
4316 esac
4317 $cat <<EOH
4318
4319 By default, $package compiles with the -O flag to use the optimizer.
4320 Alternately, you might want to use the symbolic debugger, which uses
4321 the -g flag (on traditional Unix systems).  Either flag can be
4322 specified here.  To use neither flag, specify the word "none".
4323
4324 EOH
4325 rp="What optimizer/debugger flag should be used?"
4326 . ./myread
4327 optimize="$ans"
4328 case "$optimize" in
4329 'none') optimize=" ";;
4330 esac
4331
4332 dflt=''
4333 : We will not override a previous value, but we might want to
4334 : augment a hint file
4335 case "$hint" in
4336 default|recommended)
4337         case "$gccversion" in
4338         1*) dflt='-fpcc-struct-return' ;;
4339         esac
4340         case "$optimize" in
4341         *-g*) dflt="$dflt -DDEBUGGING";;
4342         esac
4343         case "$gccversion" in
4344         2*) if test -d /etc/conf/kconfig.d &&
4345                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4346                 then
4347                         dflt="$dflt -posix"
4348                 fi
4349                 ;;
4350         esac
4351         case "$gccversion" in
4352         1*) ;;
4353         2.[0-8]*) ;;
4354         ?*)     echo " "
4355                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4356                 echo 'int main(void) { return 0; }' > gcctest.c
4357                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4358                         echo "Yes, it does." 2>&1
4359                         case "$ccflags" in
4360                         *strict-aliasing*) 
4361                                 echo "Leaving current flags $ccflags alone." 2>&1
4362                                 ;;
4363                         *) dflt="$dflt -fno-strict-aliasing" ;;
4364                         esac
4365                 else
4366                         echo "Nope, it doesn't, but that's ok." 2>&1
4367                 fi
4368                 ;;
4369         esac
4370         ;;
4371 esac
4372
4373 case "$mips_type" in
4374 *BSD*|'') inclwanted="$locincpth $usrinc";;
4375 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4376 esac
4377 for thisincl in $inclwanted; do
4378         if $test -d $thisincl; then
4379                 if $test x$thisincl != x$usrinc; then
4380                         case "$dflt" in
4381                         *" -I$thisincl "*);;
4382                         *) dflt="$dflt -I$thisincl ";;
4383                         esac
4384                 fi
4385         fi
4386 done
4387
4388 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4389         xxx=true;
4390 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4391         xxx=true;
4392 else
4393         xxx=false;
4394 fi;
4395 if $xxx; then
4396         case "$dflt" in
4397         *$2*);;
4398         *) dflt="$dflt -D$2";;
4399         esac;
4400 fi'
4401
4402 set signal.h LANGUAGE_C; eval $inctest
4403
4404 case "$usesocks" in
4405 $define)
4406         ccflags="$ccflags -DSOCKS"
4407         ;;
4408 esac
4409
4410 case "$hint" in
4411 default|recommended) dflt="$ccflags $dflt" ;;
4412 *) dflt="$ccflags";;
4413 esac
4414
4415 case "$dflt" in
4416 ''|' ') dflt=none;;
4417 esac
4418
4419 $cat <<EOH
4420
4421 Your C compiler may want other flags.  For this question you should include
4422 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4423 but you should NOT include libraries or ld flags like -lwhatever.  If you
4424 want $package to honor its debug switch, you should include -DDEBUGGING here.
4425 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4426
4427 To use no flags, specify the word "none".
4428
4429 EOH
4430 set X $dflt
4431 shift
4432 dflt=${1+"$@"}
4433 rp="Any additional cc flags?"
4434 . ./myread
4435 case "$ans" in
4436 none) ccflags='';;
4437 *) ccflags="$ans";;
4438 esac
4439
4440 : the following weeds options from ccflags that are of no interest to cpp
4441 case "$cppflags" in
4442 '') cppflags="$ccflags" ;;
4443 *)  cppflags="$cppflags $ccflags" ;;
4444 esac
4445 case "$gccversion" in
4446 1*) cppflags="$cppflags -D__GNUC__"
4447 esac
4448 case "$mips_type" in
4449 '');;
4450 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4451 esac
4452 case "$cppflags" in
4453 '');;
4454 *)
4455         echo " "
4456         echo "Let me guess what the preprocessor flags are..." >&4
4457         set X $cppflags
4458         shift
4459         cppflags=''
4460         $cat >cpp.c <<'EOM'
4461 #define BLURFL foo
4462
4463 BLURFL xx LFRULB
4464 EOM
4465         previous=''
4466         for flag in $*
4467         do
4468                 case "$flag" in
4469                 -*) ftry="$flag";;
4470                 *) ftry="$previous $flag";;
4471                 esac
4472                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4473                         >cpp1.out 2>/dev/null && \
4474                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4475                         >cpp2.out 2>/dev/null && \
4476                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4477                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4478                 then
4479                         cppflags="$cppflags $ftry"
4480                         previous=''
4481                 else
4482                         previous="$flag"
4483                 fi
4484         done
4485         set X $cppflags
4486         shift
4487         cppflags=${1+"$@"}
4488         case "$cppflags" in
4489         *-*)  echo "They appear to be: $cppflags";;
4490         esac
4491         $rm -f cpp.c cpp?.out
4492         ;;
4493 esac
4494
4495 : flags used in final linking phase
4496 case "$ldflags" in
4497 '') if ./venix; then
4498                 dflt='-i -z'
4499         else
4500                 dflt=''
4501         fi
4502         case "$ccflags" in
4503         *-posix*) dflt="$dflt -posix" ;;
4504         esac
4505         ;;
4506 *) dflt="$ldflags";;
4507 esac
4508
4509 : Try to guess additional flags to pick up local libraries.
4510 for thislibdir in $libpth; do
4511         case " $loclibpth " in
4512         *" $thislibdir "*)
4513                 case "$dflt " in 
4514                 *"-L$thislibdir "*) ;;
4515                 *)  dflt="$dflt -L$thislibdir" ;;
4516                 esac
4517                 ;;
4518         esac
4519 done
4520
4521 case "$dflt" in
4522 '') dflt='none' ;;
4523 esac
4524
4525 $cat <<EOH
4526
4527 Your C linker may need flags.  For this question you should
4528 include -L/whatever and any other flags used by the C linker, but you
4529 should NOT include libraries like -lwhatever.
4530
4531 Make sure you include the appropriate -L/path flags if your C linker
4532 does not normally search all of the directories you specified above,
4533 namely
4534         $libpth
4535 To use no flags, specify the word "none".
4536
4537 EOH
4538
4539 rp="Any additional ld flags (NOT including libraries)?"
4540 . ./myread
4541 case "$ans" in
4542 none) ldflags='';;
4543 *) ldflags="$ans";;
4544 esac
4545 rmlist="$rmlist pdp11"
4546
4547 : coherency check
4548 echo " "
4549 echo "Checking your choice of C compiler and flags for coherency..." >&4
4550 $cat > try.c <<'EOF'
4551 #include <stdio.h>
4552 int main() { printf("Ok\n"); exit(0); }
4553 EOF
4554 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4555 shift
4556 $cat >try.msg <<'EOM'
4557 I've tried to compile and run the following simple program:
4558
4559 EOM
4560 $cat try.c >> try.msg
4561
4562 $cat >> try.msg <<EOM
4563
4564 I used the command:
4565
4566         $*
4567         $run ./try
4568
4569 and I got the following output:
4570
4571 EOM
4572 dflt=y
4573 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4574         if $sh -c "$run ./try" >>try.msg 2>&1; then
4575                 xxx=`$run ./try`
4576                 case "$xxx" in
4577                 "Ok") dflt=n ;;
4578                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4579                         case " $libs " in
4580                         *" -lsfio "*)
4581                                 cat >> try.msg <<'EOQS'
4582 If $libs contains -lsfio, and sfio is mis-configured, then it
4583 sometimes (apparently) runs and exits with a 0 status, but with no
4584 output!  It may have to do with sfio's use of _exit vs. exit.
4585
4586 EOQS
4587                                 rp="You have a big problem.  Shall I abort Configure"
4588                                 dflt=y
4589                                 ;;
4590                         esac
4591                         ;;
4592                 esac
4593         else
4594                 echo "The program compiled OK, but exited with status $?." >>try.msg
4595                 rp="You have a problem.  Shall I abort Configure"
4596                 dflt=y
4597         fi
4598 else
4599         echo "I can't compile the test program." >>try.msg
4600         rp="You have a BIG problem.  Shall I abort Configure"
4601         dflt=y
4602 fi
4603 case "$dflt" in
4604 y)
4605         $cat try.msg >&4
4606         case "$knowitall" in
4607         '')
4608                 echo "(The supplied flags or libraries might be incorrect.)"
4609                 ;;
4610         *) dflt=n;;
4611         esac
4612         echo " "
4613         . ./myread
4614         case "$ans" in
4615         n*|N*) ;;
4616         *)      echo "Ok.  Stopping Configure." >&4
4617                 exit 1
4618                 ;;
4619         esac
4620         ;;
4621 n) echo "OK, that should do.";;
4622 esac
4623 $rm -f try try.* core
4624
4625 : define a shorthand compile call
4626 compile='
4627 mc_file=$1;
4628 shift;
4629 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4630 : define a shorthand compile call for compilations that should be ok.
4631 compile_ok='
4632 mc_file=$1;
4633 shift;
4634 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4635
4636 : check for lengths of integral types
4637 echo " "
4638 case "$intsize" in
4639 '')
4640         echo "Checking to see how big your integers are..." >&4
4641         $cat >try.c <<'EOCP'
4642 #include <stdio.h>
4643 int main()
4644 {
4645         printf("intsize=%d;\n", (int)sizeof(int));
4646         printf("longsize=%d;\n", (int)sizeof(long));
4647         printf("shortsize=%d;\n", (int)sizeof(short));
4648         exit(0);
4649 }
4650 EOCP
4651         set try
4652         if eval $compile_ok && $run ./try > /dev/null; then
4653                 eval `$run ./try`
4654                 echo "Your integers are $intsize bytes long."
4655                 echo "Your long integers are $longsize bytes long."
4656                 echo "Your short integers are $shortsize bytes long."
4657         else
4658                 $cat >&4 <<EOM
4659 !
4660 Help! I can't compile and run the intsize test program: please enlighten me!
4661 (This is probably a misconfiguration in your system or libraries, and
4662 you really ought to fix it.  Still, I'll try anyway.)
4663 !
4664 EOM
4665                 dflt=4
4666                 rp="What is the size of an integer (in bytes)?"
4667                 . ./myread
4668                 intsize="$ans"
4669                 dflt=$intsize
4670                 rp="What is the size of a long integer (in bytes)?"
4671                 . ./myread
4672                 longsize="$ans"
4673                 dflt=2
4674                 rp="What is the size of a short integer (in bytes)?"
4675                 . ./myread
4676                 shortsize="$ans"
4677         fi
4678         ;;
4679 esac
4680 $rm -f try try.*
4681
4682 : check for void type
4683 echo " "
4684 echo "Checking to see how well your C compiler groks the void type..." >&4
4685 case "$voidflags" in
4686 '')
4687         $cat >try.c <<'EOCP'
4688 #if TRY & 1
4689 void sub() {
4690 #else
4691 sub() {
4692 #endif
4693         extern void moo();      /* function returning void */
4694         void (*goo)();          /* ptr to func returning void */
4695 #if TRY & 8
4696         void *hue;              /* generic ptr */
4697 #endif
4698 #if TRY & 2
4699         void (*foo[10])();
4700 #endif
4701
4702 #if TRY & 4
4703         if(goo == moo) {
4704                 exit(0);
4705         }
4706 #endif
4707         exit(0);
4708 }
4709 int main() { sub(); }
4710 EOCP
4711         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4712                 voidflags=$defvoidused
4713         echo "Good.  It appears to support void to the level $package wants.">&4
4714                 if $contains warning .out >/dev/null 2>&1; then
4715                         echo "However, you might get some warnings that look like this:"
4716                         $cat .out
4717                 fi
4718         else
4719 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4720                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4721                         echo "It supports 1..."
4722                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4723                                 echo "It also supports 2..."
4724                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4725                                         voidflags=7
4726                                         echo "And it supports 4 but not 8 definitely."
4727                                 else
4728                                         echo "It doesn't support 4..."
4729                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4730                                                 voidflags=11
4731                                                 echo "But it supports 8."
4732                                         else
4733                                                 voidflags=3
4734                                                 echo "Neither does it support 8."
4735                                         fi
4736                                 fi
4737                         else
4738                                 echo "It does not support 2..."
4739                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4740                                         voidflags=13
4741                                         echo "But it supports 4 and 8."
4742                                 else
4743                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4744                                                 voidflags=5
4745                                                 echo "And it supports 4 but has not heard about 8."
4746                                         else
4747                                                 echo "However it supports 8 but not 4."
4748                                         fi
4749                                 fi
4750                         fi
4751                 else
4752                         echo "There is no support at all for void."
4753                         voidflags=0
4754                 fi
4755         fi
4756 esac
4757 case "$voidflags" in
4758 "$defvoidused") ;;
4759 *)      $cat >&4 <<'EOM'
4760   Support flag bits are:
4761     1: basic void declarations.
4762     2: arrays of pointers to functions returning void.
4763     4: operations between pointers to and addresses of void functions.
4764     8: generic void pointers.
4765 EOM
4766         dflt="$voidflags";
4767         rp="Your void support flags add up to what?"
4768         . ./myread
4769         voidflags="$ans"
4770         ;;
4771 esac
4772 $rm -f try.* .out
4773
4774 : check for length of pointer
4775 echo " "
4776 case "$ptrsize" in
4777 '')
4778         echo "Checking to see how big your pointers are..." >&4
4779         if test "$voidflags" -gt 7; then
4780                 echo '#define VOID_PTR char *' > try.c
4781         else
4782                 echo '#define VOID_PTR void *' > try.c
4783         fi
4784         $cat >>try.c <<'EOCP'
4785 #include <stdio.h>
4786 int main()
4787 {
4788     printf("%d\n", (int)sizeof(VOID_PTR));
4789     exit(0);
4790 }
4791 EOCP
4792         set try
4793         if eval $compile_ok; then
4794                 ptrsize=`$run ./try`
4795                 echo "Your pointers are $ptrsize bytes long."
4796         else
4797                 dflt='4'
4798                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4799                 rp="What is the size of a pointer (in bytes)?"
4800                 . ./myread
4801                 ptrsize="$ans"
4802         fi
4803         ;;
4804 esac
4805 $rm -f try.c try
4806
4807 : check for long long
4808 echo " "
4809 echo "Checking to see if you have long long..." >&4
4810 echo 'int main() { long long x = 7; return 0; }' > try.c
4811 set try
4812 if eval $compile; then
4813         val="$define"
4814         echo "You have long long."
4815 else
4816         val="$undef"
4817         echo "You do not have long long."
4818 fi
4819 $rm try.*
4820 set d_longlong
4821 eval $setvar
4822
4823 : check for length of long long
4824 case "${d_longlong}${longlongsize}" in
4825 $define)
4826         echo " "
4827         echo "Checking to see how big your long longs are..." >&4
4828         $cat >try.c <<'EOCP'
4829 #include <stdio.h>
4830 int main()
4831 {
4832     printf("%d\n", (int)sizeof(long long));
4833     return(0);
4834 }
4835 EOCP
4836         set try
4837         if eval $compile_ok; then
4838                 longlongsize=`$run ./try`
4839                 echo "Your long longs are $longlongsize bytes long."
4840         else
4841                 dflt='8'
4842                 echo " "
4843                 echo "(I can't seem to compile the test program.  Guessing...)"
4844                 rp="What is the size of a long long (in bytes)?"
4845                 . ./myread
4846                 longlongsize="$ans"
4847         fi
4848         if $test "X$longsize" = "X$longlongsize"; then
4849                 echo "(That isn't any different from an ordinary long.)"
4850         fi      
4851         ;;
4852 esac
4853 $rm -f try.* try
4854
4855 : determine filename position in cpp output
4856 echo " "
4857 echo "Computing filename position in cpp output for #include directives..." >&4
4858 case "$osname" in
4859 vos) testaccess=-e ;;
4860 *)   testaccess=-r ;;
4861 esac
4862 echo '#include <stdio.h>' > foo.c
4863 $cat >fieldn <<EOF
4864 $startsh
4865 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4866 $grep '^[       ]*#.*stdio\.h' | \
4867 while read cline; do
4868         pos=1
4869         set \$cline
4870         while $test \$# -gt 0; do
4871                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4872                         echo "\$pos"
4873                         exit 0
4874                 fi
4875                 shift
4876                 pos=\`expr \$pos + 1\`
4877         done
4878 done
4879 EOF
4880 chmod +x fieldn
4881 fieldn=`./fieldn`
4882 $rm -f foo.c fieldn
4883 case $fieldn in
4884 '') pos='???';;
4885 1) pos=first;;
4886 2) pos=second;;
4887 3) pos=third;;
4888 *) pos="${fieldn}th";;
4889 esac
4890 echo "Your cpp writes the filename in the $pos field of the line."
4891
4892 case "$osname" in
4893 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4894 *)   cppfilter='' ;;
4895 esac
4896 : locate header file
4897 $cat >findhdr <<EOF
4898 $startsh
4899 wanted=\$1
4900 name=''
4901 for usrincdir in $usrinc
4902 do
4903         if test -f \$usrincdir/\$wanted; then
4904                 echo "\$usrincdir/\$wanted"
4905                 exit 0
4906         fi
4907 done
4908 awkprg='{ print \$$fieldn }'
4909 echo "#include <\$wanted>" > foo\$\$.c
4910 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4911 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4912 while read cline; do
4913         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4914         case "\$name" in
4915         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4916         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4917         *) exit 2;;
4918         esac;
4919 done;
4920 #
4921 # status = 0: grep returned 0 lines, case statement not executed
4922 # status = 1: headerfile found
4923 # status = 2: while loop executed, no headerfile found
4924 #
4925 status=\$?
4926 $rm -f foo\$\$.c;
4927 if test \$status -eq 1; then
4928         exit 0;
4929 fi
4930 exit 1
4931 EOF
4932 chmod +x findhdr
4933
4934 : define an alternate in-header-list? function
4935 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4936 cont=true; xxf="echo \"<\$1> found.\" >&4";
4937 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4938 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4939 esac;
4940 case $# in 4) instead=instead;; *) instead="at last";; esac;
4941 while $test "$cont"; do
4942         xxx=`./findhdr $1`
4943         var=$2; eval "was=\$$2";
4944         if $test "$xxx" && $test -r "$xxx";
4945         then eval $xxf;
4946         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4947                 cont="";
4948         else eval $xxnf;
4949         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4950         set $yyy; shift; shift; yyy=$@;
4951         case $# in 0) cont="";;
4952         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4953                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4954         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4955                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4956         esac;
4957 done;
4958 while $test "$yyy";
4959 do set $yyy; var=$2; eval "was=\$$2";
4960         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4961         set $yyy; shift; shift; yyy=$@;
4962 done'
4963
4964 : see if inttypes.h is available
4965 : we want a real compile instead of Inhdr because some systems
4966 : have an inttypes.h which includes non-existent headers
4967 echo " "
4968 $cat >try.c <<EOCP
4969 #include <inttypes.h>
4970 int main() {
4971         static int32_t foo32 = 0x12345678;
4972 }
4973 EOCP
4974 set try
4975 if eval $compile; then
4976         echo "<inttypes.h> found." >&4
4977         val="$define"
4978 else
4979         echo "<inttypes.h> NOT found." >&4
4980         val="$undef"
4981 fi
4982 $rm -f try.c try
4983 set i_inttypes
4984 eval $setvar
4985
4986 : check for int64_t
4987 echo " "
4988 echo "Checking to see if you have int64_t..." >&4
4989 $cat >try.c <<EOCP
4990 #include <sys/types.h>
4991 #$i_inttypes I_INTTYPES
4992 #ifdef I_INTTYPES
4993 #include <inttypes.h>
4994 #endif
4995 int main() { int64_t x = 7; }
4996 EOCP
4997 set try
4998 if eval $compile; then
4999         val="$define"
5000         echo "You have int64_t."
5001 else
5002         val="$undef"
5003         echo "You do not have int64_t."
5004 fi
5005 $rm -f try try.*
5006 set d_int64_t
5007 eval $setvar
5008
5009
5010 echo " "
5011 echo "Checking which 64-bit integer type we could use..." >&4
5012
5013 case "$intsize" in
5014 8) val=int
5015    set quadtype
5016    eval $setvar
5017    val='"unsigned int"'
5018    set uquadtype
5019    eval $setvar
5020    quadkind=1
5021    ;;
5022 *) case "$longsize" in
5023    8) val=long
5024       set quadtype
5025       eval $setvar
5026       val='"unsigned long"'
5027       set uquadtype
5028       eval $setvar
5029       quadkind=2
5030       ;;
5031    *) case "$d_longlong:$longlongsize" in
5032       define:8)
5033         val='"long long"'
5034         set quadtype
5035         eval $setvar
5036         val='"unsigned long long"'
5037         set uquadtype
5038         eval $setvar
5039         quadkind=3
5040         ;;
5041       *) case "$d_int64_t" in
5042          define)
5043            val=int64_t
5044            set quadtype
5045            eval $setvar
5046            val=uint64_t
5047            set uquadtype
5048            eval $setvar
5049            quadkind=4
5050            ;;
5051          esac
5052          ;;
5053       esac
5054       ;;
5055    esac
5056    ;;
5057 esac
5058
5059 case "$quadtype" in
5060 '')     echo "Alas, no 64-bit integer types in sight." >&4
5061         d_quad="$undef"
5062         ;;
5063 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5064         d_quad="$define"
5065         ;;
5066 esac
5067
5068
5069 case "$uselonglong" in
5070 "$define"|true|[yY]*)
5071         cat <<EOM >&4
5072
5073 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5074 EOM
5075         use64bitint="$define"
5076         ;;
5077 esac                          
5078 case "$use64bits" in
5079 "$define"|true|[yY]*)
5080         cat <<EOM >&4
5081
5082 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5083 EOM
5084         use64bitint="$define"
5085         ;;
5086 esac                          
5087 case "$use64bitints" in
5088 "$define"|true|[yY]*)
5089         cat <<EOM >&4
5090
5091 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5092 EOM
5093         use64bitint="$define"
5094         ;;
5095 esac                          
5096 case "$use64bitsint" in
5097 "$define"|true|[yY]*)
5098         cat <<EOM >&4
5099
5100 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5101 EOM
5102         use64bitint="$define"
5103         ;;
5104 esac                          
5105 case "$uselonglongs" in
5106 "$define"|true|[yY]*)
5107         cat <<EOM >&4
5108
5109 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5110 EOM
5111         use64bitint="$define"
5112         ;;
5113 esac                          
5114 case "$use64bitsall" in
5115 "$define"|true|[yY]*)
5116         cat <<EOM >&4
5117
5118 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5119 EOM
5120         use64bitall="$define"
5121         ;;
5122 esac                          
5123
5124 case "$ccflags" in
5125 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5126 esac
5127 case "$use64bitall" in
5128 "$define"|true|[yY]*) use64bitint="$define" ;;
5129 esac
5130
5131 case "$longsize" in
5132 8) cat <<EOM
5133
5134 You have natively 64-bit long integers.
5135 EOM
5136    val="$define"
5137    ;;
5138 *) case "$use64bitint" in
5139    "$define"|true|[yY]*) dflt='y';;
5140    *) dflt='n';;
5141    esac
5142    case "$d_quad" in
5143    "$define") ;;
5144    *) dflt='n' ;;
5145    esac
5146    cat <<EOM
5147
5148 Perl can be built to take advantage of 64-bit integer types
5149 on some systems.  To do so, Configure can be run with -Duse64bitint.
5150 Choosing this option will most probably introduce binary incompatibilities.
5151
5152 If this doesn't make any sense to you, just accept the default '$dflt'.
5153 (The default has been chosen based on your configuration.)
5154 EOM
5155    rp='Try to use 64-bit integers, if available?'
5156    . ./myread
5157    case "$ans" in
5158    [yY]*) val="$define" ;;
5159    *)     val="$undef"  ;;
5160    esac
5161    ;;
5162 esac
5163 set use64bitint
5164 eval $setvar
5165
5166 case "$use64bitall" in
5167 "$define"|true|[yY]*) dflt='y' ;;
5168 *) case "$longsize" in
5169    8) dflt='y' ;;
5170    *) dflt='n' ;;
5171    esac
5172    ;;
5173 esac    
5174 cat <<EOM
5175
5176 You may also choose to try maximal 64-bitness.  It means using as much
5177 64-bitness as possible on the platform.  This in turn means even more
5178 binary incompatibilities.  On the other hand, your platform may not
5179 have any more 64-bitness available than what you already have chosen.
5180
5181 If this doesn't make any sense to you, just accept the default '$dflt'.
5182 (The default has been chosen based on your configuration.)
5183 EOM
5184 rp='Try to use maximal 64-bit support, if available?'
5185 . ./myread
5186 case "$ans" in
5187 [yY]*) val="$define" ;;
5188 *)     val="$undef"  ;;
5189 esac
5190 set use64bitall
5191 eval $setvar
5192 case "$use64bitall" in
5193 "$define")
5194         case "$use64bitint" in
5195         "$undef")
5196                 cat <<EOM
5197
5198 Since you have chosen a maximally 64-bit build, I'm also turning on
5199 the use of 64-bit integers.
5200 EOM
5201                 use64bitint="$define" ;;
5202         esac
5203         ;;
5204 esac
5205
5206 case "$use64bitall" in
5207 "$define"|true|[yY]*)
5208         case "$ptrsize" in
5209         4)      cat <<EOM >&4
5210
5211 *** You have chosen a maximally 64-bit build, but your pointers
5212 *** are only 4 bytes wide, disabling maximal 64-bitness.
5213
5214 EOM
5215                 use64bitall="$undef"
5216                 case "$use64bitint" in
5217                 "$define"|true|[yY]*) ;;
5218                 *)      cat <<EOM >&4
5219
5220 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5221
5222 EOM
5223                         use64bitint="$define"
5224                         ;;
5225                 esac
5226                 ;;
5227         esac
5228         ;;
5229 esac
5230
5231 case "$use64bitint" in
5232 "$define"|true|[yY]*)
5233 : Look for a hint-file generated 'call-back-unit'.  If the
5234 : user has specified that a 64-bit perl is to be built,
5235 : we may need to set or change some other defaults.
5236         if $test -f use64bitint.cbu; then
5237                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5238                 . ./use64bitint.cbu
5239         fi
5240         case "$longsize" in
5241         4) case "$archname64" in
5242            '') archname64=64int ;;
5243            esac
5244            ;;
5245         esac
5246         ;;
5247 esac
5248
5249 case "$use64bitall" in
5250 "$define"|true|[yY]*)
5251 : Look for a hint-file generated 'call-back-unit'.  If the
5252 : user has specified that a maximally 64-bit perl is to be built,
5253 : we may need to set or change some other defaults.
5254         if $test -f use64bitall.cbu; then
5255                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5256                 . ./use64bitall.cbu
5257         fi
5258         case "$longsize" in
5259         4) case "$archname64" in
5260            ''|64int) archname64=64all ;;
5261            esac
5262            ;;
5263         esac
5264         ;;
5265 esac
5266
5267 echo " "
5268 echo "Checking for GNU C Library..." >&4
5269 cat >try.c <<EOM
5270 #include <stdio.h>
5271 int main()
5272 {
5273 #ifdef __GLIBC__
5274     exit(0);
5275 #else
5276     exit(1);
5277 #endif
5278 }
5279 EOM
5280 set try
5281 if eval $compile_ok && $run ./try; then
5282         val="$define"
5283         echo "You are using the GNU C Library"
5284 else
5285         val="$undef"
5286         echo "You are not using the GNU C Library"
5287 fi
5288 $rm -f try try.*
5289 set d_gnulibc
5290 eval $setvar
5291
5292 : see if nm is to be used to determine whether a symbol is defined or not
5293 case "$usenm" in
5294 '')
5295         dflt=''
5296         case "$d_gnulibc" in
5297         "$define")
5298                 echo " "
5299                 echo "nm probably won't work on the GNU C Library." >&4
5300                 dflt=n
5301                 ;;
5302         esac
5303         case "$dflt" in
5304         '') 
5305                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5306                         echo " "
5307                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5308                         echo "'nm' won't be sufficient on this sytem." >&4
5309                         dflt=n
5310                 fi
5311                 ;;
5312         esac
5313         case "$dflt" in
5314         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5315                 if $test $dflt -gt 20; then
5316                         dflt=y
5317                 else
5318                         dflt=n
5319                 fi
5320                 ;;
5321         esac
5322         ;;
5323 *)
5324         case "$usenm" in
5325         true|$define) dflt=y;;
5326         *) dflt=n;;
5327         esac
5328         ;;
5329 esac
5330 $cat <<EOM
5331
5332 I can use $nm to extract the symbols from your C libraries. This
5333 is a time consuming task which may generate huge output on the disk (up
5334 to 3 megabytes) but that should make the symbols extraction faster. The
5335 alternative is to skip the 'nm' extraction part and to compile a small
5336 test program instead to determine whether each symbol is present. If
5337 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5338 this may be the best solution.
5339
5340 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5341
5342 EOM
5343 rp="Shall I use $nm to extract C symbols from the libraries?"
5344 . ./myread
5345 case "$ans" in
5346 [Nn]*) usenm=false;;
5347 *) usenm=true;;
5348 esac
5349
5350 runnm=$usenm
5351 case "$reuseval" in
5352 true) runnm=false;;
5353 esac
5354
5355 : nm options which may be necessary
5356 case "$nm_opt" in
5357 '') if $test -f /mach_boot; then
5358                 nm_opt=''       # Mach
5359         elif $test -d /usr/ccs/lib; then
5360                 nm_opt='-p'     # Solaris (and SunOS?)
5361         elif $test -f /dgux; then
5362                 nm_opt='-p'     # DG-UX
5363         elif $test -f /lib64/rld; then
5364                 nm_opt='-p'     # 64-bit Irix
5365         else
5366                 nm_opt=''
5367         fi;;
5368 esac
5369
5370 : nm options which may be necessary for shared libraries but illegal
5371 : for archive libraries.  Thank you, Linux.
5372 case "$nm_so_opt" in
5373 '')     case "$myuname" in
5374         *linux*)
5375                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5376                         nm_so_opt='--dynamic'
5377                 fi
5378                 ;;
5379         esac
5380         ;;
5381 esac
5382
5383 case "$runnm" in
5384 true)
5385 : get list of predefined functions in a handy place
5386 echo " "
5387 case "$libc" in
5388 '') libc=unknown
5389         case "$libs" in
5390         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5391         esac
5392         ;;
5393 esac
5394 case "$libs" in
5395 '') ;;
5396 *)  for thislib in $libs; do
5397         case "$thislib" in
5398         -lc|-lc_s)
5399                 : Handle C library specially below.
5400                 ;;
5401         -l*)
5402                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5403                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5404                         :
5405                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5406                         :
5407                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5408                         :
5409                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5410                         :
5411                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5412                         :
5413                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5414                         :
5415                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5416                         :
5417                 else
5418                         try=''
5419                 fi
5420                 libnames="$libnames $try"
5421                 ;;
5422         *) libnames="$libnames $thislib" ;;
5423         esac
5424         done
5425         ;;
5426 esac
5427 xxx=normal
5428 case "$libc" in
5429 unknown)
5430         set /lib/libc.$so
5431         for xxx in $libpth; do
5432                 $test -r $1 || set $xxx/libc.$so
5433                 : The messy sed command sorts on library version numbers.
5434                 $test -r $1 || \
5435                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5436                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5437                                 h
5438                                 s/[0-9][0-9]*/0000&/g
5439                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5440                                 G
5441                                 s/\n/ /' | \
5442                          $sort | $sed -e 's/^.* //'`
5443                 eval set \$$#
5444         done
5445         $test -r $1 || set /usr/ccs/lib/libc.$so
5446         $test -r $1 || set /lib/libsys_s$_a
5447         ;;
5448 *)
5449         set blurfl
5450         ;;
5451 esac
5452 if $test -r "$1"; then
5453         echo "Your (shared) C library seems to be in $1."
5454         libc="$1"
5455 elif $test -r /lib/libc && $test -r /lib/clib; then
5456         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5457         xxx=apollo
5458         libc='/lib/clib /lib/libc'
5459         if $test -r /lib/syslib; then
5460                 echo "(Your math library is in /lib/syslib.)"
5461                 libc="$libc /lib/syslib"
5462         fi
5463 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5464         echo "Your C library seems to be in $libc, as you said before."
5465 elif $test -r $incpath/usr/lib/libc$_a; then
5466         libc=$incpath/usr/lib/libc$_a;
5467         echo "Your C library seems to be in $libc.  That's fine."
5468 elif $test -r /lib/libc$_a; then
5469         libc=/lib/libc$_a;
5470         echo "Your C library seems to be in $libc.  You're normal."
5471 else
5472         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5473                 :
5474         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5475                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5476         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5477                 :
5478         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5479                 :
5480         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5481                 :
5482         else
5483                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5484         fi
5485         if $test -r "$tans"; then
5486                 echo "Your C library seems to be in $tans, of all places."
5487                 libc=$tans
5488         else
5489                 libc='blurfl'
5490         fi
5491 fi
5492 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5493         dflt="$libc"
5494         cat <<EOM
5495
5496 If the guess above is wrong (which it might be if you're using a strange
5497 compiler, or your machine supports multiple models), you can override it here.
5498
5499 EOM
5500 else
5501         dflt=''
5502         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5503         cat >&4 <<EOM
5504 I can't seem to find your C library.  I've looked in the following places:
5505
5506 EOM
5507         $sed 's/^/      /' libpath
5508         cat <<EOM
5509
5510 None of these seems to contain your C library. I need to get its name...
5511
5512 EOM
5513 fi
5514 fn=f
5515 rp='Where is your C library?'
5516 . ./getfile
5517 libc="$ans"
5518
5519 echo " "
5520 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5521 set X `cat libnames`
5522 shift
5523 xxx=files
5524 case $# in 1) xxx=file; esac
5525 echo "Extracting names from the following $xxx for later perusal:" >&4
5526 echo " "
5527 $sed 's/^/      /' libnames >&4
5528 echo " "
5529 $echo $n "This may take a while...$c" >&4
5530
5531 for file in $*; do
5532         case $file in
5533         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5534         *) $nm $nm_opt $file 2>/dev/null;;
5535         esac
5536 done >libc.tmp
5537
5538 $echo $n ".$c"
5539 $grep fprintf libc.tmp > libc.ptf
5540 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5541 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5542 xxx='[ADTSIW]'
5543 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5544         eval $xscan;\
5545         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5546                 eval $xrun
5547 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5548         eval $xscan;\
5549         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5550                 eval $xrun
5551 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5552         eval $xscan;\
5553         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5554                 eval $xrun
5555 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5556         eval $xscan;\
5557         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5558                 eval $xrun
5559 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5560         eval $xscan;\
5561         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5562                 eval $xrun
5563 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5564         eval $xscan;\
5565         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5566                 eval $xrun
5567 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5568                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5569         eval $xscan;\
5570         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5571                 eval $xrun
5572 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5573         eval $xscan;\
5574         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5575                 eval $xrun
5576 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5577         eval $xscan;\
5578         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5579                 eval $xrun
5580 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5581         eval $xscan;\
5582         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5583                 eval $xrun
5584 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5585         eval $xscan;\
5586         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5587                 eval $xrun
5588 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5589         eval $xscan;\
5590         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5591                 eval $xrun
5592 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5593         eval $xscan;\
5594         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5595                 eval $xrun
5596 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5597         eval $xscan;\
5598         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5599                 eval $xrun
5600 else
5601         $nm -p $* 2>/dev/null >libc.tmp
5602         $grep fprintf libc.tmp > libc.ptf
5603         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5604                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5605         then
5606                 nm_opt='-p'
5607                 eval $xrun
5608         else
5609                 echo " "
5610                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5611                 com=''
5612                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5613                         for thisname in $libnames $libc; do
5614                                 $ar t $thisname >>libc.tmp
5615                         done
5616                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5617                         echo "Ok." >&4
5618                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5619                         # Repeat libc to extract forwarders to DLL entries too
5620                         for thisname in $libnames $libc; do
5621                                 $ar tv $thisname >>libc.tmp
5622                                 # Revision 50 of EMX has bug in $ar.
5623                                 # it will not extract forwarders to DLL entries
5624                                 # Use emximp which will extract exactly them.
5625                                 emximp -o tmp.imp $thisname \
5626                                     2>/dev/null && \
5627                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5628                                     < tmp.imp >>libc.tmp
5629                                 $rm tmp.imp
5630                         done
5631                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5632                         echo "Ok." >&4
5633                 else
5634                         echo "$ar didn't seem to work right." >&4
5635                         echo "Maybe this is a Cray...trying bld instead..." >&4
5636                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5637                         then
5638                                 for thisname in $libnames; do
5639                                         bld t $libnames | \
5640                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5641                                         $ar t $thisname >>libc.tmp
5642                                 done
5643                                 echo "Ok." >&4
5644                         else
5645                                 echo "That didn't work either.  Giving up." >&4
5646                                 exit 1
5647                         fi
5648                 fi
5649         fi
5650 fi
5651 nm_extract="$com"
5652 if $test -f /lib/syscalls.exp; then
5653         echo " "
5654         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5655         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5656 fi
5657 ;;
5658 esac
5659 $rm -f libnames libpath
5660
5661 : is a C symbol defined?
5662 csym='tlook=$1;
5663 case "$3" in
5664 -v) tf=libc.tmp; tc=""; tdc="";;
5665 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5666 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5667 esac;
5668 tx=yes;
5669 case "$reuseval-$4" in
5670 true-) ;;
5671 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5672 esac;
5673 case "$tx" in
5674 yes)
5675         case "$runnm" in
5676         true)
5677                 if $contains $tlook $tf >/dev/null 2>&1;
5678                 then tval=true;
5679                 else tval=false;
5680                 fi;;
5681         *)
5682                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5683                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5684                 then tval=true;
5685                 else tval=false;
5686                 fi;
5687                 $rm -f t t.c;;
5688         esac;;
5689 *)
5690         case "$tval" in
5691         $define) tval=true;;
5692         *) tval=false;;
5693         esac;;
5694 esac;
5695 eval "$2=$tval"'
5696
5697 : define an is-in-libc? function
5698 inlibc='echo " "; td=$define; tu=$undef;
5699 sym=$1; var=$2; eval "was=\$$2";
5700 tx=yes;
5701 case "$reuseval$was" in
5702 true) ;;
5703 true*) tx=no;;
5704 esac;
5705 case "$tx" in
5706 yes)
5707         set $sym tres -f;
5708         eval $csym;
5709         case "$tres" in
5710         true)
5711                 echo "$sym() found." >&4;
5712                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5713         *)
5714                 echo "$sym() NOT found." >&4;
5715                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5716         esac;;
5717 *)
5718         case "$was" in
5719         $define) echo "$sym() found." >&4;;
5720         *) echo "$sym() NOT found." >&4;;
5721         esac;;
5722 esac'
5723
5724 : see if sqrtl exists
5725 set sqrtl d_sqrtl
5726 eval $inlibc
5727
5728 case "$ccflags" in
5729 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5730 esac
5731
5732 case "$uselongdouble" in
5733 $define|true|[yY]*)     dflt='y';;
5734 *) dflt='n';;
5735 esac
5736 cat <<EOM
5737
5738 Perl can be built to take advantage of long doubles which
5739 (if available) may give more accuracy and range for floating point numbers.
5740
5741 If this doesn't make any sense to you, just accept the default '$dflt'.
5742 EOM
5743 rp='Try to use long doubles if available?'
5744 . ./myread
5745 case "$ans" in
5746 y|Y)    val="$define"   ;;
5747 *)      val="$undef"    ;;
5748 esac
5749 set uselongdouble
5750 eval $setvar
5751
5752 case "$uselongdouble" in
5753 true|[yY]*) uselongdouble="$define" ;;
5754 esac
5755
5756 case "$uselongdouble" in
5757 $define)
5758 : Look for a hint-file generated 'call-back-unit'.  If the
5759 : user has specified that long doubles should be used,
5760 : we may need to set or change some other defaults.
5761         if $test -f uselongdouble.cbu; then
5762                 echo "Your platform has some specific hints for long doubles, using them..."
5763                 . ./uselongdouble.cbu
5764         else
5765                 $cat <<EOM
5766 (Your platform doesn't have any specific hints for long doubles.)
5767 EOM
5768         fi
5769         ;;
5770 esac
5771
5772 case "$uselongdouble:$d_sqrtl" in
5773 $define:$undef)
5774                 $cat <<EOM >&4
5775
5776 *** You requested the use of long doubles but you do not seem to have
5777 *** the mathematic functions for long doubles.  I'm disabling the use
5778 *** of long doubles.
5779
5780 EOM
5781         uselongdouble=$undef
5782         ;;
5783 esac
5784
5785 : check for length of double
5786 echo " "
5787 case "$doublesize" in
5788 '')
5789         echo "Checking to see how big your double precision numbers are..." >&4
5790         $cat >try.c <<'EOCP'
5791 #include <stdio.h>
5792 int main()
5793 {
5794     printf("%d\n", (int)sizeof(double));
5795     exit(0);
5796 }
5797 EOCP
5798         set try
5799         if eval $compile_ok; then
5800                 doublesize=`$run ./try`
5801                 echo "Your double is $doublesize bytes long."
5802         else
5803                 dflt='8'
5804                 echo "(I can't seem to compile the test program.  Guessing...)"
5805                 rp="What is the size of a double precision number (in bytes)?"
5806                 . ./myread
5807                 doublesize="$ans"
5808         fi
5809         ;;
5810 esac
5811 $rm -f try.c try
5812
5813 : check for long doubles
5814 echo " "
5815 echo "Checking to see if you have long double..." >&4
5816 echo 'int main() { long double x = 7.0; }' > try.c
5817 set try
5818 if eval $compile; then
5819         val="$define"
5820         echo "You have long double."
5821 else
5822         val="$undef"
5823         echo "You do not have long double."
5824 fi
5825 $rm try.*
5826 set d_longdbl
5827 eval $setvar
5828
5829 : check for length of long double
5830 case "${d_longdbl}${longdblsize}" in
5831 $define)
5832         echo " "
5833         echo "Checking to see how big your long doubles are..." >&4
5834         $cat >try.c <<'EOCP'
5835 #include <stdio.h>
5836 int main()
5837 {
5838         printf("%d\n", sizeof(long double));
5839 }
5840 EOCP
5841         set try
5842         set try
5843         if eval $compile; then
5844                 longdblsize=`$run ./try`
5845                 echo "Your long doubles are $longdblsize bytes long."
5846         else
5847                 dflt='8'
5848                 echo " "
5849                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5850                 rp="What is the size of a long double (in bytes)?"
5851                 . ./myread
5852                 longdblsize="$ans"
5853         fi
5854         if $test "X$doublesize" = "X$longdblsize"; then
5855                 echo "(That isn't any different from an ordinary double.)"
5856         fi      
5857         ;;
5858 esac
5859 $rm -f try.* try
5860
5861 case "$useperlio" in
5862 $define|true|[yY]*|'')  dflt='y';;
5863 *) dflt='n';;
5864 esac
5865 cat <<EOM
5866
5867 Previous version of $package used the standard IO mechanisms as
5868 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5869 alternate IO mechanisms via the PerlIO abstraction layer, but the
5870 stdio mechanism is still available if needed.  The abstraction layer
5871 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5872 Using PerlIO with sfio may cause problems with some extension modules.
5873
5874 If this doesn't make any sense to you, just accept the default '$dflt'.
5875 EOM
5876 rp='Use the PerlIO abstraction layer?'
5877 . ./myread
5878 case "$ans" in
5879 y|Y) 
5880         val="$define"
5881         ;;
5882 *)      
5883         echo "Ok, doing things the stdio way."
5884         val="$undef"
5885         ;;
5886 esac
5887 set useperlio
5888 eval $setvar 
5889
5890 case "$usesocks" in
5891 $define|true|[yY]*)
5892         case "$useperlio" in
5893         $define|true|[yY]*) ;;
5894         *)      cat >&4 <<EOM
5895
5896 You are using the SOCKS proxy protocol library which means that you
5897 should also use the PerlIO layer.  You may be headed for trouble.
5898
5899 EOM
5900                 ;;
5901         esac
5902         ;;
5903 esac
5904
5905         
5906 : determine the architecture name
5907 echo " "
5908 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5909         tarch=`arch`"-$osname"
5910 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5911         if uname -m > tmparch 2>&1 ; then
5912                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5913                         -e 's/$/'"-$osname/" tmparch`
5914         else
5915                 tarch="$osname"
5916         fi
5917         $rm -f tmparch
5918 else
5919         tarch="$osname"
5920 fi
5921 case "$myarchname" in
5922 ''|"$tarch") ;;
5923 *)
5924         echo "(Your architecture name used to be $myarchname.)"
5925         archname=''
5926         ;;
5927 esac
5928 case "$targetarch" in
5929 '') ;;
5930 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5931 esac
5932 myarchname="$tarch"
5933 case "$archname" in
5934 '') dflt="$tarch";;
5935 *) dflt="$archname";;
5936 esac
5937 rp='What is your architecture name'
5938 . ./myread
5939 archname="$ans"
5940 case "$usethreads" in
5941 $define)
5942         echo "Threads selected." >&4
5943         case "$archname" in
5944         *-thread*) echo "...and architecture name already has -thread." >&4
5945                 ;;
5946         *)      archname="$archname-thread"
5947                 echo "...setting architecture name to $archname." >&4
5948                 ;;
5949         esac
5950         ;;
5951 esac
5952 case "$usemultiplicity" in
5953 $define)
5954         echo "Multiplicity selected." >&4
5955         case "$archname" in
5956         *-multi*) echo "...and architecture name already has -multi." >&4
5957                 ;;
5958         *)      archname="$archname-multi"
5959                 echo "...setting architecture name to $archname." >&4
5960                 ;;
5961         esac
5962         ;;
5963 esac
5964 case "$use64bitint$use64bitall" in
5965 *"$define"*)
5966         case "$archname64" in
5967         '')
5968                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5969                 ;;
5970         *)
5971                 case "$use64bitint" in
5972                 "$define") echo "64 bit integers selected." >&4 ;;
5973                 esac
5974                 case "$use64bitall" in
5975                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5976                 esac
5977                 case "$archname" in
5978                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5979                         ;;
5980                 *)      archname="$archname-$archname64"
5981                         echo "...setting architecture name to $archname." >&4
5982                         ;;
5983                 esac
5984                 ;;
5985         esac
5986 esac
5987 case "$uselongdouble" in
5988 $define)
5989         echo "Long doubles selected." >&4
5990         case "$longdblsize" in
5991         $doublesize)
5992                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
5993                 ;;
5994         *)
5995                 case "$archname" in
5996                 *-ld*) echo "...and architecture name already has -ld." >&4
5997                         ;;
5998                 *)      archname="$archname-ld"
5999                         echo "...setting architecture name to $archname." >&4
6000                         ;;
6001                 esac
6002                 ;;
6003         esac
6004         ;;
6005 esac
6006 case "$useperlio" in
6007 $define)
6008         echo "Perlio selected." >&4
6009         ;;
6010 *)
6011         echo "Perlio not selected, using stdio." >&4
6012         case "$archname" in
6013         *-stdio*) echo "...and architecture name already has -stdio." >&4
6014                 ;;
6015         *)      archname="$archname-stdio"
6016                 echo "...setting architecture name to $archname." >&4
6017                 ;;
6018         esac
6019         ;;
6020 esac
6021
6022 : determine root of directory hierarchy where package will be installed.
6023 case "$prefix" in
6024 '')
6025         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6026         ;;
6027 *)
6028         dflt="$prefix"
6029         ;;
6030 esac
6031 $cat <<EOM
6032
6033 By default, $package will be installed in $dflt/bin, manual pages
6034 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6035 installation directories. Typically this is something like /usr/local.
6036 If you wish to have binaries under /usr/bin but other parts of the
6037 installation under /usr/local, that's ok: you will be prompted
6038 separately for each of the installation directories, the prefix being
6039 only used to set the defaults.
6040
6041 EOM
6042 fn=d~
6043 rp='Installation prefix to use?'
6044 . ./getfile
6045 oldprefix=''
6046 case "$prefix" in
6047 '') ;;
6048 *)
6049         case "$ans" in
6050         "$prefix") ;;
6051         *) oldprefix="$prefix";;
6052         esac
6053         ;;
6054 esac
6055 prefix="$ans"
6056 prefixexp="$ansexp"
6057
6058 case "$afsroot" in
6059 '')     afsroot=/afs ;;
6060 *)      afsroot=$afsroot ;;
6061 esac
6062
6063 : is AFS running?
6064 echo " "
6065 case "$afs" in
6066 $define|true)   afs=true ;;
6067 $undef|false)   afs=false ;;
6068 *)      if test -d $afsroot; then
6069                 afs=true
6070         else
6071                 afs=false
6072         fi
6073         ;;
6074 esac
6075 if $afs; then
6076         echo "AFS may be running... I'll be extra cautious then..." >&4
6077 else
6078         echo "AFS does not seem to be running..." >&4
6079 fi
6080
6081 : determine installation prefix for where package is to be installed.
6082 if $afs; then 
6083 $cat <<EOM
6084
6085 Since you are running AFS, I need to distinguish the directory in which
6086 files will reside from the directory in which they are installed (and from
6087 which they are presumably copied to the former directory by occult means).
6088
6089 EOM
6090         case "$installprefix" in
6091         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6092         *) dflt="$installprefix";;
6093         esac
6094 else
6095 $cat <<EOM
6096
6097 In some special cases, particularly when building $package for distribution,
6098 it is convenient to distinguish between the directory in which files should 
6099 be installed from the directory ($prefix) in which they 
6100 will eventually reside.  For most users, these two directories are the same.
6101
6102 EOM
6103         case "$installprefix" in
6104         '') dflt=$prefix ;;
6105         *) dflt=$installprefix;;
6106         esac
6107 fi
6108 fn=d~
6109 rp='What installation prefix should I use for installing files?'
6110 . ./getfile
6111 installprefix="$ans"
6112 installprefixexp="$ansexp"
6113
6114 : set the prefixit variable, to compute a suitable default value
6115 prefixit='case "$3" in
6116 ""|none)
6117         case "$oldprefix" in
6118         "") eval "$1=\"\$$2\"";;
6119         *)
6120                 case "$3" in
6121                 "") eval "$1=";;
6122                 none)
6123                         eval "tp=\"\$$2\"";
6124                         case "$tp" in
6125                         ""|" ") eval "$1=\"\$$2\"";;
6126                         *) eval "$1=";;
6127                         esac;;
6128                 esac;;
6129         esac;;
6130 *)
6131         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6132         case "$tp" in
6133         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6134         /*-$oldprefix/*|\~*-$oldprefix/*)
6135                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6136         *) eval "$1=\"\$$2\"";;
6137         esac;;
6138 esac'
6139
6140 : get the patchlevel
6141 echo " "
6142 echo "Getting the current patchlevel..." >&4
6143 if $test -r $rsrc/patchlevel.h;then
6144         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6145         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6146         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6147         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6148         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6149         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6150        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6151 else
6152         revision=0
6153         patchlevel=0
6154         subversion=0
6155         api_revision=0
6156         api_version=0
6157         api_subversion=0
6158         perl_patchlevel=0
6159         $echo "(You do not have patchlevel.h.  Eek.)"
6160 fi
6161 if $test -r $rsrc/.patch ; then  
6162         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6163                 perl_patchlevel=`cat $rsrc/.patch`
6164         fi
6165 fi
6166 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6167 version_patchlevel_string="version $patchlevel subversion $subversion"
6168 case "$perl_patchlevel" in
6169 0|'') ;;
6170 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6171 esac
6172
6173 $echo "(You have $package $version_patchlevel_string.)"
6174
6175 case "$osname" in
6176 dos|vms)
6177         : XXX Should be a Configure test for double-dots in filenames.
6178         version=`echo $revision $patchlevel $subversion | \
6179                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6180         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6181                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6182         ;;
6183 *)
6184         version=`echo $revision $patchlevel $subversion | \
6185                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6186         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6187                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6188         ;;
6189 esac
6190 : Special case the 5.005_xx maintenance series, which used 5.005
6191 : without any subversion label as a subdirectory in $sitelib
6192 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6193         api_versionstring='5.005'
6194 fi
6195
6196 : determine installation style
6197 : For now, try to deduce it from prefix unless it is already set.
6198 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6199 case "$installstyle" in
6200 '')     case "$prefix" in
6201                 *perl*) dflt='lib';;
6202                 *) dflt='lib/perl5' ;;
6203         esac
6204         ;;
6205 *)      dflt="$installstyle" ;;
6206 esac
6207 : Probably not worth prompting for this since we prompt for all
6208 : the directories individually, and the prompt would be too long and
6209 : confusing anyway.
6210 installstyle=$dflt
6211
6212 : determine where private library files go
6213 : Usual default is /usr/local/lib/perl5/$version.
6214 : Also allow things like /opt/perl/lib/$version, since 
6215 : /opt/perl/lib/perl5... would be redundant.
6216 : The default "style" setting is made in installstyle.U
6217 case "$installstyle" in
6218 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6219 *)       set dflt privlib lib/$version ;;
6220 esac
6221 eval $prefixit
6222 $cat <<EOM
6223
6224 There are some auxiliary files for $package that need to be put into a
6225 private library directory that is accessible by everyone.
6226
6227 EOM
6228 fn=d~+
6229 rp='Pathname where the private library files will reside?'
6230 . ./getfile
6231 privlib="$ans"
6232 privlibexp="$ansexp"
6233 : Change installation prefix, if necessary.
6234 if $test X"$prefix" != X"$installprefix"; then
6235         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6236 else
6237         installprivlib="$privlibexp"
6238 fi
6239
6240 : set the prefixup variable, to restore leading tilda escape
6241 prefixup='case "$prefixexp" in
6242 "$prefix") ;;
6243 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6244 esac'
6245
6246 : determine where public architecture dependent libraries go
6247 set archlib archlib
6248 eval $prefixit
6249 : privlib default is /usr/local/lib/$package/$version
6250 : archlib default is /usr/local/lib/$package/$version/$archname
6251 : privlib may have an optional trailing /share.
6252 tdflt=`echo $privlib | $sed 's,/share$,,'`
6253 tdflt=$tdflt/$archname
6254 case "$archlib" in
6255 '')     dflt=$tdflt
6256         ;;
6257 *)      dflt="$archlib"
6258     ;;
6259 esac
6260 $cat <<EOM
6261
6262 $spackage contains architecture-dependent library files.  If you are
6263 sharing libraries in a heterogeneous environment, you might store
6264 these files in a separate location.  Otherwise, you can just include
6265 them with the rest of the public library files.
6266
6267 EOM
6268 fn=d+~
6269 rp='Where do you want to put the public architecture-dependent libraries?'
6270 . ./getfile
6271 archlib="$ans"
6272 archlibexp="$ansexp"
6273 if $test X"$archlib" = X"$privlib"; then
6274         d_archlib="$undef"
6275 else
6276         d_archlib="$define"
6277 fi
6278 : Change installation prefix, if necessary.
6279 if $test X"$prefix" != X"$installprefix"; then
6280         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6281 else
6282         installarchlib="$archlibexp"
6283 fi
6284
6285
6286 : Binary compatibility with 5.005 is not possible for builds
6287 : with advanced features
6288 case "$usethreads$usemultiplicity" in
6289 *define*)
6290         bincompat5005="$undef"
6291         d_bincompat5005="$undef"
6292         ;;
6293 *)      $cat <<EOM
6294
6295 This version of Perl can be compiled for binary compatibility with 5.005.
6296 If you decide to do so, you will be able to continue using most of the
6297 extensions that were compiled for Perl 5.005.
6298
6299 EOM
6300         case "$bincompat5005$d_bincompat5005" in
6301         *"$undef"*) dflt=n ;;
6302         *) dflt=y ;;
6303         esac
6304         rp='Binary compatibility with Perl 5.005?'
6305         . ./myread
6306         case "$ans" in
6307         y*) val="$define" ;;
6308         *)  val="$undef" ;;
6309         esac
6310         set d_bincompat5005
6311         eval $setvar
6312         case "$d_bincompat5005" in
6313         "$define")
6314                 bincompat5005="$define"
6315                 ;;
6316         *)      bincompat5005="$undef"
6317                 d_bincompat5005="$undef"
6318                 ;;
6319         esac
6320         ;;
6321 esac
6322
6323
6324 : see if setuid scripts can be secure
6325 $cat <<EOM
6326
6327 Some kernels have a bug that prevents setuid #! scripts from being
6328 secure.  Some sites have disabled setuid #! scripts because of this.
6329
6330 First let's decide if your kernel supports secure setuid #! scripts.
6331 (If setuid #! scripts would be secure but have been disabled anyway,
6332 don't say that they are secure if asked.)
6333
6334 EOM
6335
6336 val="$undef"
6337 if $test -d /dev/fd; then
6338         echo "#!$ls" >reflect
6339         chmod +x,u+s reflect
6340         ./reflect >flect 2>&1
6341         if $contains "/dev/fd" flect >/dev/null; then
6342                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6343                 val="$define"
6344         else
6345                 $cat <<EOM
6346 If you are not sure if they are secure, I can check but I'll need a
6347 username and password different from the one you are using right now.
6348 If you don't have such a username or don't want me to test, simply
6349 enter 'none'.
6350
6351 EOM
6352                 rp='Other username to test security of setuid scripts with?'
6353                 dflt='none'
6354                 . ./myread
6355                 case "$ans" in
6356                 n|none)
6357                         case "$d_suidsafe" in
6358                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6359                                 dflt=n;;
6360                         "$undef")
6361                                 echo "Well, the $hint value is *not* secure." >&4
6362                                 dflt=n;;
6363                         *)      echo "Well, the $hint value *is* secure." >&4
6364                                 dflt=y;;
6365                         esac
6366                         ;;
6367                 *)
6368                         $rm -f reflect flect
6369                         echo "#!$ls" >reflect
6370                         chmod +x,u+s reflect
6371                         echo >flect
6372                         chmod a+w flect
6373                         echo '"su" will (probably) prompt you for '"$ans's password."
6374                         su $ans -c './reflect >flect'
6375                         if $contains "/dev/fd" flect >/dev/null; then
6376                                 echo "Okay, it looks like setuid scripts are secure." >&4
6377                                 dflt=y
6378                         else
6379                                 echo "I don't think setuid scripts are secure." >&4
6380                                 dflt=n
6381                         fi
6382                         ;;
6383                 esac
6384                 rp='Does your kernel have *secure* setuid scripts?'
6385                 . ./myread
6386                 case "$ans" in
6387                 [yY]*)  val="$define";;
6388                 *)      val="$undef";;
6389                 esac
6390         fi
6391 else
6392         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6393         echo "(That's for file descriptors, not floppy disks.)"
6394         val="$undef"
6395 fi
6396 set d_suidsafe
6397 eval $setvar
6398
6399 $rm -f reflect flect
6400
6401 : now see if they want to do setuid emulation
6402 echo " "
6403 val="$undef"
6404 case "$d_suidsafe" in
6405 "$define")
6406         val="$undef"
6407         echo "No need to emulate SUID scripts since they are secure here." >&4
6408         ;;
6409 *)
6410         $cat <<EOM
6411 Some systems have disabled setuid scripts, especially systems where
6412 setuid scripts cannot be secure.  On systems where setuid scripts have
6413 been disabled, the setuid/setgid bits on scripts are currently
6414 useless.  It is possible for $package to detect those bits and emulate
6415 setuid/setgid in a secure fashion.  This emulation will only work if
6416 setuid scripts have been disabled in your kernel.
6417
6418 EOM
6419         case "$d_dosuid" in
6420         "$define") dflt=y ;;
6421         *) dflt=n ;;
6422         esac
6423         rp="Do you want to do setuid/setgid emulation?"
6424         . ./myread
6425         case "$ans" in
6426         [yY]*)  val="$define";;
6427         *)      val="$undef";;
6428         esac
6429         ;;
6430 esac
6431 set d_dosuid
6432 eval $setvar
6433
6434 : see if this is a malloc.h system
6435 set malloc.h i_malloc
6436 eval $inhdr
6437
6438 : see if stdlib is available
6439 set stdlib.h i_stdlib
6440 eval $inhdr
6441
6442 : determine which malloc to compile in
6443 echo " "
6444 case "$usemymalloc" in
6445 [yY]*|true|$define)     dflt='y' ;;
6446 [nN]*|false|$undef)     dflt='n' ;;
6447 *)      case "$ptrsize" in
6448         4) dflt='y' ;;
6449         *) dflt='n' ;;
6450         esac
6451         ;;
6452 esac
6453 rp="Do you wish to attempt to use the malloc that comes with $package?"
6454 . ./myread
6455 usemymalloc="$ans"
6456 case "$ans" in
6457 y*|true)
6458         usemymalloc='y'
6459         mallocsrc='malloc.c'
6460         mallocobj="malloc$_o"
6461         d_mymalloc="$define"
6462         case "$libs" in
6463         *-lmalloc*)
6464                 : Remove malloc from list of libraries to use
6465                 echo "Removing unneeded -lmalloc from library list" >&4
6466                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6467                 shift
6468                 libs="$*"
6469                 echo "libs = $libs" >&4
6470                 ;;
6471         esac
6472         ;;
6473 *)
6474         usemymalloc='n'
6475         mallocsrc=''
6476         mallocobj=''
6477         d_mymalloc="$undef"
6478         ;;
6479 esac
6480
6481 : compute the return types of malloc and free
6482 echo " "
6483 $cat >malloc.c <<END
6484 #$i_malloc I_MALLOC
6485 #$i_stdlib I_STDLIB
6486 #include <stdio.h>
6487 #include <sys/types.h>
6488 #ifdef I_MALLOC
6489 #include <malloc.h>
6490 #endif
6491 #ifdef I_STDLIB
6492 #include <stdlib.h>
6493 #endif
6494 #ifdef TRY_MALLOC
6495 void *malloc();
6496 #endif
6497 #ifdef TRY_FREE
6498 void free();
6499 #endif
6500 END
6501 case "$malloctype" in
6502 '')
6503         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6504                 malloctype='void *'
6505         else
6506                 malloctype='char *'
6507         fi
6508         ;;
6509 esac
6510 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6511
6512 case "$freetype" in
6513 '')
6514         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6515                 freetype='void'
6516         else
6517                 freetype='int'
6518         fi
6519         ;;
6520 esac
6521 echo "Your system uses $freetype free(), it would seem." >&4
6522 $rm -f malloc.[co]
6523 $cat <<EOM
6524
6525 After $package is installed, you may wish to install various
6526 add-on modules and utilities.  Typically, these add-ons will
6527 be installed under $prefix with the rest
6528 of this package.  However, you may wish to install such add-ons
6529 elsewhere under a different prefix.
6530
6531 If you do not wish to put everything under a single prefix, that's
6532 ok.  You will be prompted for the individual locations; this siteprefix
6533 is only used to suggest the defaults.
6534
6535 The default should be fine for most people.
6536
6537 EOM
6538 fn=d~+
6539 rp='Installation prefix to use for add-on modules and utilities?'
6540 : XXX Here might be another good place for an installstyle setting.
6541 case "$siteprefix" in
6542 '') dflt=$prefix ;;
6543 *)  dflt=$siteprefix ;;
6544 esac
6545 . ./getfile
6546 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6547 oldsiteprefix=''
6548 case "$siteprefix" in
6549 '') ;;
6550 *)      case "$ans" in
6551         "$prefix") ;;
6552         *) oldsiteprefix="$prefix";;
6553         esac
6554         ;;
6555 esac
6556 siteprefix="$ans"
6557 siteprefixexp="$ansexp"
6558
6559 : determine where site specific libraries go.
6560 : Usual default is /usr/local/lib/perl5/site_perl/$version
6561 : The default "style" setting is made in installstyle.U
6562 : XXX No longer works with Prefixit stuff.
6563 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6564 case "$sitelib" in
6565 '') case "$installstyle" in
6566         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6567         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6568         esac
6569         ;;
6570 *)      dflt="$sitelib"
6571         ;;
6572 esac
6573 $cat <<EOM
6574
6575 The installation process will create a directory for
6576 site-specific extensions and modules.  Most users find it convenient
6577 to place all site-specific files in this directory rather than in the
6578 main distribution directory.
6579
6580 EOM
6581 fn=d~+
6582 rp='Pathname for the site-specific library files?'
6583 . ./getfile
6584 sitelib="$ans"
6585 sitelibexp="$ansexp"
6586 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6587 : Change installation prefix, if necessary.
6588 if $test X"$prefix" != X"$installprefix"; then
6589         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6590 else
6591         installsitelib="$sitelibexp"
6592 fi
6593
6594 : determine where site specific architecture-dependent libraries go.
6595 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6596 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6597 : sitelib may have an optional trailing /share.
6598 case "$sitearch" in
6599 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6600         dflt="$dflt/$archname"
6601         ;;
6602 *)      dflt="$sitearch"
6603         ;;
6604 esac
6605 set sitearch sitearch none
6606 eval $prefixit
6607 $cat <<EOM
6608
6609 The installation process will also create a directory for
6610 architecture-dependent site-specific extensions and modules.
6611
6612 EOM
6613 fn=d~+
6614 rp='Pathname for the site-specific architecture-dependent library files?'
6615 . ./getfile
6616 sitearch="$ans"
6617 sitearchexp="$ansexp"
6618 : Change installation prefix, if necessary.
6619 if $test X"$prefix" != X"$installprefix"; then
6620         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6621 else
6622         installsitearch="$sitearchexp"
6623 fi
6624
6625 $cat <<EOM
6626
6627 The installation process will also create a directory for
6628 vendor-supplied add-ons.  Vendors who supply perl with their system
6629 may find it convenient to place all vendor-supplied files in this
6630 directory rather than in the main distribution directory.  This will
6631 ease upgrades between binary-compatible maintenance versions of perl.
6632
6633 Of course you may also use these directories in whatever way you see
6634 fit.  For example, you might use them to access modules shared over a
6635 company-wide network.
6636
6637 The default answer should be fine for most people.
6638 This causes further questions about vendor add-ons to be skipped
6639 and no vendor-specific directories will be configured for perl.
6640
6641 EOM
6642 rp='Do you want to configure vendor-specific add-on directories?'
6643 case "$usevendorprefix" in
6644 define|true|[yY]*) dflt=y ;;
6645 *)      : User may have set vendorprefix directly on Configure command line.
6646         case "$vendorprefix" in
6647         ''|' ') dflt=n ;;
6648         *)      dflt=y ;;
6649         esac
6650         ;;
6651 esac
6652 . ./myread
6653 case "$ans" in
6654 [yY]*)  fn=d~+
6655         rp='Installation prefix to use for vendor-supplied add-ons?'
6656         case "$vendorprefix" in
6657         '') dflt='' ;;
6658         *)  dflt=$vendorprefix ;;
6659         esac
6660         . ./getfile
6661         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6662         oldvendorprefix=''
6663         case "$vendorprefix" in
6664         '') ;;
6665         *)      case "$ans" in
6666                 "$prefix") ;;
6667                 *) oldvendorprefix="$prefix";;
6668                 esac
6669                 ;;
6670         esac
6671         usevendorprefix="$define"
6672         vendorprefix="$ans"
6673         vendorprefixexp="$ansexp"
6674         ;;
6675 *)      usevendorprefix="$undef"
6676         vendorprefix=''
6677         vendorprefixexp=''
6678         ;;
6679 esac
6680
6681 case "$vendorprefix" in
6682 '')     d_vendorlib="$undef"
6683         vendorlib=''
6684         vendorlibexp=''
6685         ;;
6686 *)      d_vendorlib="$define"
6687         : determine where vendor-supplied modules go.
6688         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6689         case "$vendorlib" in
6690         '')
6691                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6692                 case "$installstyle" in
6693                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6694                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6695                 esac
6696                 ;;
6697         *)      dflt="$vendorlib"
6698                 ;;
6699         esac
6700         fn=d~+
6701         rp='Pathname for the vendor-supplied library files?'
6702         . ./getfile
6703         vendorlib="$ans"
6704         vendorlibexp="$ansexp"
6705         ;;
6706 esac
6707 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6708 : Change installation prefix, if necessary.
6709 if $test X"$prefix" != X"$installprefix"; then
6710         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6711 else
6712         installvendorlib="$vendorlibexp"
6713 fi
6714
6715 case "$vendorprefix" in
6716 '')     d_vendorarch="$undef"
6717         vendorarch=''
6718         vendorarchexp=''
6719         ;;
6720 *)      d_vendorarch="$define"
6721         : determine where vendor-supplied architecture-dependent libraries go.
6722         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6723         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6724         : vendorlib may have an optional trailing /share.
6725         case "$vendorarch" in
6726         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6727                 dflt="$dflt/$archname"
6728                 ;;
6729         *)      dflt="$vendorarch" ;;
6730         esac
6731         fn=d~+
6732         rp='Pathname for vendor-supplied architecture-dependent files?'
6733         . ./getfile
6734         vendorarch="$ans"
6735         vendorarchexp="$ansexp"
6736         ;;
6737 esac
6738 : Change installation prefix, if necessary.
6739 if $test X"$prefix" != X"$installprefix"; then
6740         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6741 else
6742         installvendorarch="$vendorarchexp"
6743 fi
6744
6745 : Final catch-all directories to search
6746 $cat <<EOM
6747
6748 Lastly, you can have perl look in other directories for extensions and
6749 modules in addition to those already specified.
6750 These directories will be searched after 
6751         $sitearch 
6752         $sitelib 
6753 EOM
6754 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6755 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6756 echo ' '
6757 case "$otherlibdirs" in
6758 ''|' ') dflt='none' ;;
6759 *)      dflt="$otherlibdirs" ;;
6760 esac
6761 $cat <<EOM
6762 Enter a colon-separated set of extra paths to include in perl's @INC
6763 search path, or enter 'none' for no extra paths.
6764
6765 EOM
6766
6767 rp='Colon-separated list of additional directories for perl to search?'
6768 . ./myread
6769 case "$ans" in
6770 ' '|''|none)    otherlibdirs=' ' ;;     
6771 *)      otherlibdirs="$ans" ;;
6772 esac
6773 case "$otherlibdirs" in
6774 ' ') val=$undef ;;
6775 *)      val=$define ;;
6776 esac
6777 set d_perl_otherlibdirs
6778 eval $setvar
6779
6780 : Cruising for prototypes
6781 echo " "
6782 echo "Checking out function prototypes..." >&4
6783 $cat >prototype.c <<'EOCP'
6784 int main(int argc, char *argv[]) {
6785         exit(0);}
6786 EOCP
6787 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6788         echo "Your C compiler appears to support function prototypes."
6789         val="$define"
6790 else
6791         echo "Your C compiler doesn't seem to understand function prototypes."
6792         val="$undef"
6793 fi
6794 set prototype
6795 eval $setvar
6796 $rm -f prototype*
6797
6798 case "$prototype" in
6799 "$define") ;;
6800 *)      ansi2knr='ansi2knr'
6801         echo " "
6802         cat <<EOM >&4
6803
6804 $me:  FATAL ERROR:
6805 This version of $package can only be compiled by a compiler that 
6806 understands function prototypes.  Unfortunately, your C compiler 
6807         $cc $ccflags
6808 doesn't seem to understand them.  Sorry about that.
6809
6810 If GNU cc is available for your system, perhaps you could try that instead.  
6811
6812 Eventually, we hope to support building Perl with pre-ANSI compilers.
6813 If you would like to help in that effort, please contact <perlbug@perl.org>.
6814
6815 Aborting Configure now.
6816 EOM
6817         exit 2
6818         ;;
6819 esac
6820
6821 : determine where public executables go
6822 echo " "
6823 set dflt bin bin
6824 eval $prefixit
6825 fn=d~
6826 rp='Pathname where the public executables will reside?'
6827 . ./getfile
6828 if $test "X$ansexp" != "X$binexp"; then
6829         installbin=''
6830 fi
6831 bin="$ans"
6832 binexp="$ansexp"
6833 : Change installation prefix, if necessary.
6834 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6835 if $test X"$prefix" != X"$installprefix"; then
6836         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6837 else
6838         installbin="$binexp"
6839 fi
6840
6841 echo " "
6842 case "$extras" in
6843 '') dflt='n';;
6844 *) dflt='y';;
6845 esac
6846 cat <<EOM
6847 Perl can be built with extra modules or bundles of modules which
6848 will be fetched from the CPAN and installed alongside Perl.
6849
6850 Notice that you will need access to the CPAN; either via the Internet,
6851 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6852 be asked later to configure the CPAN.pm module which will in turn do
6853 the installation of the rest of the extra modules or bundles.)
6854
6855 Notice also that if the modules require any external software such as
6856 libraries and headers (the libz library and the zlib.h header for the
6857 Compress::Zlib module, for example) you MUST have any such software
6858 already installed, this configuration process will NOT install such
6859 things for you.
6860
6861 If this doesn't make any sense to you, just accept the default '$dflt'.
6862 EOM
6863 rp='Install any extra modules (y or n)?'
6864 . ./myread
6865 case "$ans" in
6866 y|Y)
6867         cat <<EOM
6868
6869 Please list any extra modules or bundles to be installed from CPAN,
6870 with spaces between the names.  The names can be in any format the
6871 'install' command of CPAN.pm will understand.  (Answer 'none',
6872 without the quotes, to install no extra modules or bundles.)
6873 EOM
6874         rp='Extras?'
6875         dflt="$extras"
6876         . ./myread
6877         extras="$ans"
6878 esac
6879 case "$extras" in
6880 ''|'none')
6881         val=''
6882         $rm -f ../extras.lst
6883         ;;
6884 *)      echo "(Saving the list of extras for later...)"
6885         echo "$extras" > ../extras.lst
6886         val="'$extras'"
6887         ;;
6888 esac
6889 set extras
6890 eval $setvar
6891 echo " "
6892
6893 : Find perl5.005 or later.
6894 echo "Looking for a previously installed perl5.005 or later... "
6895 case "$perl5" in
6896 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6897                 : Check if this perl is recent and can load a simple module
6898                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6899                         perl5=$tdir/perl
6900                         break;
6901                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6902                         perl5=$tdir/perl5
6903                         break;
6904                 fi
6905         done
6906         ;;
6907 *)      perl5="$perl5"
6908         ;;
6909 esac
6910 case "$perl5" in
6911 '')     echo "None found.  That's ok.";;
6912 *)      echo "Using $perl5." ;;
6913 esac
6914
6915 : Determine list of previous versions to include in @INC
6916 $cat > getverlist <<EOPL
6917 #!$perl5 -w
6918 use File::Basename;
6919 \$api_versionstring = "$api_versionstring";
6920 \$version = "$version";
6921 \$stem = "$sitelib_stem";
6922 \$archname = "$archname";
6923 EOPL
6924         $cat >> getverlist <<'EOPL'
6925 # Can't have leading @ because metaconfig interprets it as a command!
6926 ;@inc_version_list=();
6927 # XXX Redo to do opendir/readdir? 
6928 if (-d $stem) {
6929     chdir($stem);
6930     ;@candidates = glob("5.*");
6931 }
6932 else {
6933     ;@candidates = ();
6934 }
6935
6936 # XXX ToDo:  These comparisons must be reworked when two-digit
6937 # subversions come along, so that 5.7.10 compares as greater than
6938 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6939 # widespread that we can use the built-in version vectors rather
6940 # than reinventing them here.  For 5.6.0, however, we must
6941 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6942 foreach $d (@candidates) {
6943     if ($d lt $version) {
6944         if ($d ge $api_versionstring) {
6945             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6946         }
6947         elsif ($d ge "5.005") {
6948             unshift(@inc_version_list, grep { -d } $d);
6949         }
6950     }
6951     else {
6952         # Skip newer version.  I.e. don't look in
6953         # 5.7.0 if we're installing 5.6.1.
6954     }
6955 }
6956
6957 if (@inc_version_list) {
6958     print join(' ', @inc_version_list);
6959 }
6960 else {
6961     # Blank space to preserve value for next Configure run.
6962     print " ";
6963 }
6964 EOPL
6965 chmod +x getverlist
6966 case "$inc_version_list" in
6967 '')     if test -x "$perl5$exe_ext"; then
6968                 dflt=`$perl5 getverlist`
6969         else
6970                 dflt='none'
6971         fi
6972         ;;
6973 $undef) dflt='none' ;;
6974 *)  eval dflt=\"$inc_version_list\" ;;
6975 esac
6976 case "$dflt" in
6977 ''|' ') dflt=none ;;
6978 esac
6979 case "$dflt" in
6980 5.005) case "$bincompat5005" in
6981        $define|true|[yY]*) ;;
6982        *) dflt=none ;;
6983        esac
6984        ;;
6985 esac
6986 $cat <<'EOM'
6987
6988 In order to ease the process of upgrading, this version of perl 
6989 can be configured to use modules built and installed with earlier 
6990 versions of perl that were installed under $prefix.  Specify here
6991 the list of earlier versions that this version of perl should check.
6992 If Configure detected no earlier versions of perl installed under
6993 $prefix, then the list will be empty.  Answer 'none' to tell perl
6994 to not search earlier versions.
6995
6996 The default should almost always be sensible, so if you're not sure,
6997 just accept the default.
6998 EOM
6999
7000 rp='List of earlier versions to include in @INC?'
7001 . ./myread
7002 case "$ans" in
7003 [Nn]one|''|' ') inc_version_list=' ' ;;
7004 *) inc_version_list="$ans" ;;
7005 esac
7006 case "$inc_version_list" in
7007 ''|' ') 
7008         inc_version_list_init='0';;
7009 *)      inc_version_list_init=`echo $inc_version_list |
7010                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7011         ;;
7012 esac
7013 $rm -f getverlist
7014
7015 : determine whether to install perl also as /usr/bin/perl
7016
7017 echo " "
7018 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7019         $cat <<EOM
7020 Many scripts expect perl to be installed as /usr/bin/perl.
7021 I can install the perl you are about to compile also as /usr/bin/perl
7022 (in addition to $installbin/perl).
7023 EOM
7024         case "$installusrbinperl" in
7025         "$undef"|[nN]*) dflt='n';;
7026         *)              dflt='y';;
7027         esac
7028         rp="Do you want to install perl as /usr/bin/perl?"
7029         . ./myread
7030         case "$ans" in
7031         [yY]*)  val="$define";;
7032         *)      val="$undef" ;;
7033         esac
7034 else
7035         val="$undef"
7036 fi
7037 set installusrbinperl
7038 eval $setvar
7039
7040 : see if dld is available
7041 set dld.h i_dld
7042 eval $inhdr
7043
7044 : see if dlopen exists
7045 xxx_runnm="$runnm"
7046 runnm=false
7047 set dlopen d_dlopen
7048 eval $inlibc
7049 runnm="$xxx_runnm"
7050
7051 : determine which dynamic loading, if any, to compile in
7052 echo " "
7053 dldir="ext/DynaLoader"
7054 case "$usedl" in
7055 $define|y|true)
7056         dflt='y'
7057         usedl="$define"
7058         ;;
7059 $undef|n|false)
7060         dflt='n'
7061         usedl="$undef"
7062         ;;
7063 *) 
7064         dflt='n'
7065         case "$d_dlopen" in
7066             $define) dflt='y' ;;
7067         esac
7068         case "$i_dld" in
7069             $define) dflt='y' ;;
7070         esac
7071         : Does a dl_xxx.xs file exist for this operating system
7072         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7073         ;;
7074 esac
7075 rp="Do you wish to use dynamic loading?"
7076 . ./myread
7077 usedl="$ans"
7078 case "$ans" in
7079 y*) usedl="$define"
7080         case "$dlsrc" in
7081         '')
7082                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7083                         dflt="$dldir/dl_${osname}.xs"
7084                 elif $test "$d_dlopen" = "$define" ; then
7085                         dflt="$dldir/dl_dlopen.xs"
7086                 elif $test "$i_dld" = "$define" ; then
7087                         dflt="$dldir/dl_dld.xs"
7088                 else
7089                         dflt=''
7090                 fi
7091                 ;;
7092         *)      dflt="$dldir/$dlsrc"
7093                 ;;
7094         esac
7095     echo "The following dynamic loading files are available:"
7096         : Can not go over to $dldir because getfile has path hard-coded in.
7097         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7098         rp="Source file to use for dynamic loading"
7099         fn="fne"
7100         gfpth="$src"
7101         . ./getfile
7102         usedl="$define"
7103         : emulate basename
7104         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7105
7106         $cat << EOM
7107
7108 Some systems may require passing special flags to $cc -c to
7109 compile modules that will be used to create a shared library.
7110 To use no flags, say "none".
7111
7112 EOM
7113     case "$cccdlflags" in
7114     '') case "$gccversion" in
7115                 '') case "$osname" in
7116                         hpux)   dflt='+z' ;;
7117                         next)   dflt='none' ;;
7118                         irix*)  dflt='-KPIC' ;;
7119                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7120                         sunos)  dflt='-pic' ;;
7121                         *)      dflt='none' ;;
7122                     esac
7123                         ;;
7124                 *)  case "$osname" in
7125                         darwin) dflt='none' ;;
7126                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7127                         *)      dflt='-fpic' ;;
7128                     esac ;;
7129             esac ;;
7130         ' ') dflt='none' ;;
7131     *)  dflt="$cccdlflags" ;;
7132     esac
7133     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7134     . ./myread
7135     case "$ans" in
7136     none) cccdlflags=' ' ;;
7137     *) cccdlflags="$ans" ;;
7138     esac
7139
7140     cat << EOM
7141
7142 Some systems use ld to create libraries that can be dynamically loaded,
7143 while other systems (such as those using ELF) use $cc.
7144
7145 EOM
7146         case "$ld" in
7147         '')     $cat >try.c <<'EOM'
7148 /* Test for whether ELF binaries are produced */
7149 #include <fcntl.h>
7150 #include <stdlib.h>
7151 int main() {
7152         char b[4];
7153         int i = open("a.out",O_RDONLY);
7154         if(i == -1) 
7155                 exit(1); /* fail */
7156         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7157                 exit(0); /* succeed (yes, it's ELF) */
7158         else
7159                 exit(1); /* fail */
7160 }
7161 EOM
7162                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7163                         cat <<EOM
7164 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7165 EOM
7166                         dflt="$cc"
7167                 else
7168                         echo "I'll use ld to build dynamic libraries."
7169                         dflt='ld'
7170                 fi
7171                 rm -f try.c a.out
7172                 ;;
7173         *)      dflt="$ld"
7174                 ;;
7175         esac
7176
7177     rp="What command should be used to create dynamic libraries?"
7178     . ./myread
7179         ld="$ans"
7180
7181     cat << EOM
7182
7183 Some systems may require passing special flags to $ld to create a
7184 library that can be dynamically loaded.  If your ld flags include
7185 -L/other/path options to locate libraries outside your loader's normal
7186 search path, you may need to specify those -L options here as well.  To
7187 use no flags, say "none".
7188
7189 EOM
7190     case "$lddlflags" in
7191     '') case "$osname" in
7192                         beos) dflt='-nostart' ;;
7193                         hpux) dflt='-b';
7194                               case "$gccversion" in
7195                               '') dflt="$dflt +vnocompatwarnings" ;;
7196                               esac
7197                               ;;        
7198                         linux|irix*)    dflt='-shared' ;;
7199                         next)  dflt='none' ;;
7200                         solaris) dflt='-G' ;;
7201                         sunos) dflt='-assert nodefinitions' ;;
7202                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7203                 *)     dflt='none' ;;
7204                         esac
7205                         ;;
7206     *) dflt="$lddlflags" ;;
7207     esac
7208
7209         : Try to guess additional flags to pick up local libraries.
7210         : Be careful not to append to a plain 'none'
7211         case "$dflt" in
7212         none) dflt='' ;;
7213         esac
7214         for thisflag in $ldflags; do
7215                 case "$thisflag" in
7216                 -L*|-R*|-Wl,-R*)
7217                         case " $dflt " in
7218                         *" $thisflag "*) ;;
7219                         *) dflt="$dflt $thisflag" ;;
7220                         esac
7221                         ;;
7222                 esac
7223         done
7224
7225         case "$dflt" in
7226         ''|' ') dflt='none' ;;
7227         esac
7228
7229     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7230     . ./myread
7231     case "$ans" in
7232     none) lddlflags=' ' ;;
7233     *) lddlflags="$ans" ;;
7234     esac
7235
7236         cat <<EOM
7237
7238 Some systems may require passing special flags to $cc to indicate that
7239 the resulting executable will use dynamic linking.  To use no flags,
7240 say "none".
7241
7242 EOM
7243     case "$ccdlflags" in
7244     '') case "$osname" in
7245                 hpux)   dflt='-Wl,-E' ;;
7246                 linux)  dflt='-rdynamic' ;;
7247                 next)   dflt='none' ;;
7248                 sunos)  dflt='none' ;;
7249                 *)      dflt='none' ;;
7250             esac ;;
7251     ' ')  dflt='none' ;;
7252     *)  dflt="$ccdlflags" ;;
7253     esac
7254     rp="Any special flags to pass to $cc to use dynamic linking?"
7255     . ./myread
7256     case "$ans" in
7257     none) ccdlflags=' ' ;;
7258     *) ccdlflags="$ans" ;;
7259     esac
7260     ;;
7261 *)  usedl="$undef"
7262         ld='ld'
7263     dlsrc='dl_none.xs'
7264     lddlflags=''
7265     ccdlflags=''
7266     ;;
7267 esac
7268
7269 also=''
7270 case "$usedl" in
7271 $undef)
7272         # No dynamic loading being used, so don't bother even to prompt.
7273         useshrplib='false'
7274         ;;
7275 *)      case "$useshrplib" in
7276         '')     case "$osname" in
7277                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7278                         dflt=y
7279                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7280                         ;;
7281                 next*)
7282                         case "$osvers" in
7283                         4*)     dflt=y
7284                                 also='Building a shared libperl is needed for MAB support.'
7285                                 ;;
7286                         *)      dflt=n
7287                                 ;;
7288                         esac
7289                         ;;
7290                 *)      dflt=n
7291                         ;;
7292                 esac
7293                 ;;
7294         $define|true|[Yy]*)
7295                 dflt=y
7296                 ;;
7297         *)      dflt=n
7298                 ;;
7299         esac
7300         $cat << EOM
7301
7302 The perl executable is normally obtained by linking perlmain.c with
7303 libperl${_a}, any static extensions (usually just DynaLoader), and
7304 any other libraries needed on this system (such as -lm, etc.).  Since
7305 your system supports dynamic loading, it is probably possible to build
7306 a shared libperl.$so.  If you will have more than one executable linked
7307 to libperl.$so, this will significantly reduce the size of each
7308 executable, but it may have a noticeable affect on performance.  The
7309 default is probably sensible for your system.
7310 $also
7311
7312 EOM
7313         rp="Build a shared libperl.$so (y/n)"
7314         . ./myread
7315         case "$ans" in
7316         true|$define|[Yy]*)
7317                 useshrplib='true'  ;;
7318         *)      useshrplib='false' ;;
7319         esac
7320         ;;
7321 esac
7322
7323 case "$useshrplib" in
7324 true)
7325         case "$libperl" in
7326         '')
7327                 # Figure out a good name for libperl.so.  Since it gets stored in
7328                 # a version-specific architecture-dependent library, the version
7329                 # number isn't really that important, except for making cc/ld happy.
7330                 #
7331                 # A name such as libperl.so.3.1
7332                 majmin="libperl.$so.$patchlevel.$subversion"
7333                 # A name such as libperl.so.301
7334                 majonly=`echo $patchlevel $subversion |
7335                         $awk '{printf "%d%02d", $1, $2}'`
7336                 majonly=libperl.$so.$majonly
7337                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7338                 # rely on figuring it out from the naming of libc.
7339                 case "${osname}${osvers}" in
7340                 next4*)
7341                         dflt=libperl.5.$so
7342                         # XXX How handle the --version stuff for MAB?
7343                         ;;
7344                 linux*)  # ld won't link with a bare -lperl otherwise.
7345                         dflt=libperl.$so
7346                         ;;
7347                 cygwin*) # include version
7348                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7349                         ;;
7350                 *)      # Try to guess based on whether libc has major.minor.
7351                         case "$libc" in
7352                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7353                         *libc.$so.[0-9]*) dflt=$majonly ;;
7354                         *)      dflt=libperl.$so ;;
7355                         esac
7356                         ;;
7357                 esac
7358                 ;;
7359         *)      dflt=$libperl
7360                 ;;
7361         esac
7362         cat << EOM
7363
7364 I need to select a good name for the shared libperl.  If your system uses
7365 library names with major and minor numbers, then you might want something
7366 like $majmin.  Alternatively, if your system uses a single version
7367 number for shared libraries, then you might want to use $majonly.
7368 Or, your system might be quite happy with a simple libperl.$so.
7369
7370 Since the shared libperl will get installed into a version-specific
7371 architecture-dependent directory, the version number of the shared perl
7372 library probably isn't important, so the default should be o.k.
7373
7374 EOM
7375         rp='What name do you want to give to the shared libperl?'
7376         . ./myread
7377         libperl=$ans
7378         echo "Ok, I'll use $libperl"
7379         ;;
7380 *)
7381         libperl="libperl${_a}"
7382         ;;
7383 esac
7384
7385 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7386 case "$shrpdir" in
7387 '') ;;
7388 *)      $cat >&4 <<EOM
7389 WARNING:  Use of the shrpdir variable for the installation location of
7390 the shared $libperl is not supported.  It was never documented and
7391 will not work in this version.  Let me (perlbug@perl.org)
7392 know of any problems this may cause.
7393
7394 EOM
7395         case "$shrpdir" in
7396         "$archlibexp/CORE")
7397                 $cat >&4 <<EOM
7398 But your current setting of $shrpdir is
7399 the default anyway, so it's harmless.
7400 EOM
7401                 ;;
7402         *)
7403                 $cat >&4 <<EOM
7404 Further, your current attempted setting of $shrpdir
7405 conflicts with the value of $archlibexp/CORE
7406 that installperl will use.
7407 EOM
7408                 ;;
7409         esac
7410         ;;
7411 esac
7412
7413 # How will the perl executable find the installed shared $libperl?
7414 # Add $xxx to ccdlflags.
7415 # If we can't figure out a command-line option, use $shrpenv to
7416 # set env LD_RUN_PATH.  The main perl makefile uses this.
7417 shrpdir=$archlibexp/CORE
7418 xxx=''
7419 tmp_shrpenv=''
7420 if "$useshrplib"; then
7421     case "$osname" in 
7422         aix)
7423                 # We'll set it in Makefile.SH...
7424                 ;;
7425         solaris)
7426                 xxx="-R $shrpdir"
7427                 ;;
7428         freebsd|netbsd)
7429                 xxx="-Wl,-R$shrpdir"
7430                 ;;
7431         linux|irix*|dec_osf)
7432                 xxx="-Wl,-rpath,$shrpdir"
7433                 ;;
7434         next)
7435                 # next doesn't like the default...
7436                 ;;
7437         beos)
7438                 # beos doesn't like the default, either.
7439                 ;;
7440         hpux*)
7441                 # hpux doesn't like the default, either.
7442                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7443                 ;;
7444         *)
7445                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7446                 ;;
7447         esac
7448         case "$xxx" in
7449         '') ;;
7450         *)      
7451                 # Only add $xxx if it isn't already in ccdlflags.
7452                 case " $ccdlflags " in
7453                 *" $xxx "*)     ;;
7454                 *)      ccdlflags="$ccdlflags $xxx"
7455                         cat <<EOM >&4
7456
7457 Adding $xxx to the flags
7458 passed to $ld so that the perl executable will find the 
7459 installed shared $libperl.
7460
7461 EOM
7462                         ;;
7463                 esac
7464                 ;;
7465         esac
7466 fi
7467 # Fix ccdlflags in AIX for building external extensions.
7468 # (For building Perl itself bare -bE:perl.exp is needed,
7469 #  Makefile.SH takes care of this.)
7470 case "$osname" in
7471 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7472 esac
7473 # Respect a hint or command-line value.
7474 case "$shrpenv" in
7475 '') shrpenv="$tmp_shrpenv" ;;
7476 esac
7477 case "$ldlibpthname" in
7478 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7479 none)   ldlibpthname='' ;;
7480 esac
7481
7482 : determine where manual pages are on this system
7483 echo " "
7484 case "$sysman" in
7485 '') 
7486         syspath='/usr/share/man/man1 /usr/man/man1'
7487         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7488         syspath="$syspath /usr/man/u_man/man1"
7489         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7490         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7491         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7492         sysman=`./loc . /usr/man/man1 $syspath`
7493         ;;
7494 esac
7495 if $test -d "$sysman"; then
7496         echo "System manual is in $sysman." >&4
7497 else
7498         echo "Could not find manual pages in source form." >&4
7499 fi
7500
7501 : determine where manual pages go
7502 set man1dir man1dir none
7503 eval $prefixit
7504 $cat <<EOM
7505
7506 $spackage has manual pages available in source form.
7507 EOM
7508 case "$nroff" in
7509 nroff)
7510         echo "However, you don't have nroff, so they're probably useless to you."
7511         case "$man1dir" in
7512         '') man1dir="none";;
7513         esac;;
7514 esac
7515 echo "If you don't want the manual sources installed, answer 'none'."
7516 case "$man1dir" in
7517 ' ') dflt=none
7518         ;;
7519 '')
7520         lookpath="$prefixexp/share/man/man1"
7521         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7522         lookpath="$lookpath $prefixexp/man/p_man/man1"
7523         lookpath="$lookpath $prefixexp/man/u_man/man1"
7524         lookpath="$lookpath $prefixexp/man/man.1"
7525         case "$sysman" in
7526         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7527         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7528         esac
7529         set dflt
7530         eval $prefixup
7531         ;;
7532 *)  dflt="$man1dir"
7533         ;;
7534 esac
7535 echo " "
7536 fn=dn+~
7537 rp="Where do the main $spackage manual pages (source) go?"
7538 . ./getfile
7539 if $test "X$man1direxp" != "X$ansexp"; then
7540         installman1dir=''
7541 fi
7542 man1dir="$ans"
7543 man1direxp="$ansexp"
7544 case "$man1dir" in
7545 '')     man1dir=' '
7546         installman1dir='';;
7547 esac
7548
7549 : Change installation prefix, if necessary.
7550 if $test X"$prefix" != X"$installprefix"; then
7551         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7552 else
7553         installman1dir="$man1direxp"
7554 fi
7555
7556 : What suffix to use on installed man pages
7557
7558 case "$man1dir" in
7559 ' ')
7560         man1ext='0'
7561         ;;
7562 *)
7563         rp="What suffix should be used for the main $spackage man pages?"
7564         case "$man1ext" in
7565         '')     case "$man1dir" in
7566                 *1)  dflt=1 ;;
7567                 *1p) dflt=1p ;;
7568                 *1pm) dflt=1pm ;;
7569                 *l) dflt=l;;
7570                 *n) dflt=n;;
7571                 *o) dflt=o;;
7572                 *p) dflt=p;;
7573                 *C) dflt=C;;
7574                 *L) dflt=L;;
7575                 *L1) dflt=L1;;
7576                 *) dflt=1;;
7577                 esac
7578                 ;;
7579         *)      dflt="$man1ext";;
7580         esac
7581         . ./myread
7582         man1ext="$ans"
7583         ;;
7584 esac
7585
7586 : see if we can have long filenames
7587 echo " "
7588 first=123456789abcdef
7589 $rm -f $first
7590 if (echo hi >$first) 2>/dev/null; then
7591         if $test -f 123456789abcde; then
7592                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7593                 val="$undef"
7594         else
7595                 echo 'You can have filenames longer than 14 characters.'>&4
7596                 val="$define"
7597         fi
7598 else
7599         $cat <<'EOM'
7600 You can't have filenames longer than 14 chars.
7601 You can't even think about them!
7602 EOM
7603         val="$undef"
7604 fi 
7605 set d_flexfnam
7606 eval $setvar
7607 $rm -rf 123456789abcde*
7608
7609 : determine where library module manual pages go
7610 set man3dir man3dir none
7611 eval $prefixit
7612 $cat <<EOM
7613
7614 $spackage has manual pages for many of the library modules.
7615 EOM
7616
7617 case "$nroff" in
7618 nroff)
7619         $cat <<'EOM'
7620 However, you don't have nroff, so they're probably useless to you.
7621 EOM
7622         case "$man3dir" in
7623         '') man3dir="none";;
7624         esac;;
7625 esac
7626
7627 case "$d_flexfnam" in
7628 undef)
7629         $cat <<'EOM'
7630 However, your system can't handle the long file names like File::Basename.3. 
7631 EOM
7632         case "$man3dir" in
7633         '') man3dir="none";;
7634         esac;;
7635 esac
7636
7637 echo "If you don't want the manual sources installed, answer 'none'."
7638 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7639 case "$man3dir" in
7640 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7641         if $test -d "$privlib/man/man3"; then
7642                 cat <<EOM >&4
7643
7644 WARNING:  Previous versions of perl installed man3 pages into
7645 $privlib/man/man3.  This version will suggest a 
7646 new default of $dflt.  
7647 EOM
7648                 tdflt=$dflt
7649                 dflt='n'
7650                 rp='Do you wish to preserve the old behavior?(y/n)'
7651                 . ./myread
7652                 case "$ans" in
7653                 y*) dflt="$privlib/man/man3" ;;
7654                 *)  dflt=$tdflt ;;
7655                 esac
7656     fi
7657         ;;
7658 *)      dflt="$man3dir" ;;
7659 esac
7660 case "$dflt" in
7661 ' ') dflt=none ;;
7662 esac
7663 echo " "
7664 fn=dn+~
7665 rp="Where do the $package library man pages (source) go?"
7666 . ./getfile
7667 man3dir="$ans"
7668 man3direxp="$ansexp"
7669 case "$man3dir" in
7670 '')     man3dir=' '
7671         installman3dir='';;
7672 esac
7673
7674 : Change installation prefix, if necessary.
7675 if $test X"$prefix" != X"$installprefix"; then
7676         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7677 else
7678         installman3dir="$man3direxp"
7679 fi
7680
7681 : What suffix to use on installed man pages
7682 case "$man3dir" in
7683 ' ')
7684         man3ext='0'
7685         ;;
7686 *)
7687         rp="What suffix should be used for the $package library man pages?"
7688         case "$man3ext" in
7689         '')     case "$man3dir" in
7690                 *3)  dflt=3 ;;
7691                 *3p) dflt=3p ;;
7692                 *3pm) dflt=3pm ;;
7693                 *l) dflt=l;;
7694                 *n) dflt=n;;
7695                 *o) dflt=o;;
7696                 *p) dflt=p;;
7697                 *C) dflt=C;;
7698                 *L) dflt=L;;
7699                 *L3) dflt=L3;;
7700                 *) dflt=3;;
7701                 esac
7702                 ;;
7703         *)      dflt="$man3ext";;
7704         esac
7705         . ./myread
7706         man3ext="$ans"
7707         ;;
7708 esac
7709
7710 : see if we have to deal with yellow pages, now NIS.
7711 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7712         if $test -f /usr/etc/nibindd; then
7713                 echo " "
7714                 echo "I'm fairly confident you're on a NeXT."
7715                 echo " "
7716                 rp='Do you get the hosts file via NetInfo?'
7717                 dflt=y
7718                 case "$hostcat" in
7719                 nidump*) ;;
7720                 '') ;;
7721                 *) dflt=n;;
7722                 esac
7723                 . ./myread
7724                 case "$ans" in
7725                 y*) hostcat='nidump hosts .';;
7726                 *)      case "$hostcat" in
7727                         nidump*) hostcat='';;
7728                         esac
7729                         ;;
7730                 esac
7731         fi
7732         case "$hostcat" in
7733         nidump*) ;;
7734         *)
7735                 case "$hostcat" in
7736                 *ypcat*) dflt=y;;
7737                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7738                                 dflt=y
7739                         else
7740                                 dflt=n
7741                         fi;;
7742                 *) dflt=n;;
7743                 esac
7744                 echo " "
7745                 rp='Are you getting the hosts file via yellow pages?'
7746                 . ./myread
7747                 case "$ans" in
7748                 y*) hostcat='ypcat hosts';;
7749                 *) hostcat='cat /etc/hosts';;
7750                 esac
7751                 ;;
7752         esac
7753 fi
7754 case "$hostcat" in
7755 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7756 esac
7757 case "$groupcat" in
7758 '') test -f /etc/group && groupcat='cat /etc/group';;
7759 esac
7760 case "$passcat" in
7761 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7762 esac
7763
7764 : now get the host name
7765 echo " "
7766 echo "Figuring out host name..." >&4
7767 case "$myhostname" in
7768 '') cont=true
7769         echo 'Maybe "hostname" will work...'
7770         if tans=`sh -c hostname 2>&1` ; then
7771                 myhostname=$tans
7772                 phostname=hostname
7773                 cont=''
7774         fi
7775         ;;
7776 *) cont='';;
7777 esac
7778 if $test "$cont"; then
7779         if ./xenix; then
7780                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7781                 if tans=`cat /etc/systemid 2>&1` ; then
7782                         myhostname=$tans
7783                         phostname='cat /etc/systemid'
7784                         echo "Whadyaknow.  Xenix always was a bit strange..."
7785                         cont=''
7786                 fi
7787         elif $test -r /etc/systemid; then
7788                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7789         fi
7790 fi
7791 if $test "$cont"; then
7792         echo 'No, maybe "uuname -l" will work...'
7793         if tans=`sh -c 'uuname -l' 2>&1` ; then
7794                 myhostname=$tans
7795                 phostname='uuname -l'
7796         else
7797                 echo 'Strange.  Maybe "uname -n" will work...'
7798                 if tans=`sh -c 'uname -n' 2>&1` ; then
7799                         myhostname=$tans
7800                         phostname='uname -n'
7801                 else
7802                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7803                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7804                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7805                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7806                         else
7807                                 case "$myhostname" in
7808                                 '') echo "Does this machine have an identity crisis or something?"
7809                                         phostname='';;
7810                                 *)
7811                                         echo "Well, you said $myhostname before..."
7812                                         phostname='echo $myhostname';;
7813                                 esac
7814                         fi
7815                 fi
7816         fi
7817 fi
7818 : you do not want to know about this
7819 set $myhostname
7820 myhostname=$1
7821
7822 : verify guess
7823 if $test "$myhostname" ; then
7824         dflt=y
7825         rp='Your host name appears to be "'$myhostname'".'" Right?"
7826         . ./myread
7827         case "$ans" in
7828         y*) ;;
7829         *) myhostname='';;
7830         esac
7831 fi
7832
7833 : bad guess or no guess
7834 while $test "X$myhostname" = X ; do
7835         dflt=''
7836         rp="Please type the (one word) name of your host:"
7837         . ./myread
7838         myhostname="$ans"
7839 done
7840
7841 : translate upper to lower if necessary
7842 case "$myhostname" in
7843 *[A-Z]*)
7844         echo "(Normalizing case in your host name)"
7845         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7846         ;;
7847 esac
7848
7849 case "$myhostname" in
7850 *.*)
7851         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7852         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7853         echo "(Trimming domain name from host name--host name is now $myhostname)"
7854         ;;
7855 *) case "$mydomain" in
7856         '')
7857                 {
7858                         test "X$hostcat" = "Xypcat hosts" &&
7859                         ypmatch "$myhostname" hosts 2>/dev/null |\
7860                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7861                         $test -s hosts
7862                 } || {
7863                         test "X$hostcat" != "X" &&
7864                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7865                                         /[       ]$myhostname[  . ]/p" > hosts
7866                 }
7867                 tmp_re="[       . ]"
7868                 if $test -f hosts; then
7869                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7870                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7871                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7872                                 hosts | $sort | $uniq | \
7873                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7874                         case `$echo X$dflt` in
7875                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7876                                 dflt=.
7877                                 ;;
7878                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7879                                 ;;
7880                         esac
7881                 else
7882                         echo "(I cannot locate a hosts database anywhere)"
7883                         dflt=.
7884                 fi
7885                 case "$dflt" in
7886                 .)
7887                         tans=`./loc resolv.conf X /etc /usr/etc`
7888                         if $test -f "$tans"; then
7889                                 echo "(Attempting domain name extraction from $tans)"
7890                                 dflt=.`$sed -n -e 's/   / /g' \
7891                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7892                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7893                                 case "$dflt" in
7894                                 .) dflt=.`$sed -n -e 's/        / /g' \
7895                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7896                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7897                                         ;;
7898                                 esac
7899                         fi
7900                         ;;
7901                 esac
7902                 case "$dflt" in
7903                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7904                         dflt=.`sh -c domainname 2>/dev/null`
7905                         case "$dflt" in
7906                         '') dflt='.';;
7907                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7908                         esac
7909                         ;;
7910                 esac
7911                 case "$dflt$osname" in
7912                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7913                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7914                         ;;
7915                 esac
7916                 case "$dflt" in
7917                 .) echo "(Lost all hope -- silly guess then)"
7918                         dflt='.uucp'
7919                         ;;
7920                 esac
7921                 $rm -f hosts
7922                 ;;
7923         *) dflt="$mydomain";;
7924         esac;;
7925 esac
7926 echo " "
7927 rp="What is your domain name?"
7928 . ./myread
7929 tans="$ans"
7930 case "$ans" in
7931 '') ;;
7932 .*) ;;
7933 *) tans=".$tans";;
7934 esac
7935 mydomain="$tans"
7936
7937 : translate upper to lower if necessary
7938 case "$mydomain" in
7939 *[A-Z]*)
7940         echo "(Normalizing case in your domain name)"
7941         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7942         ;;
7943 esac
7944
7945 : a little sanity check here
7946 case "$phostname" in
7947 '') ;;
7948 *)
7949         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7950         $myhostname$mydomain|$myhostname) ;;
7951         *)
7952                 case "$phostname" in
7953                 sed*)
7954                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7955                         ;;
7956                 *)
7957                         echo "(That doesn't agree with your $phostname command, by the way.)"
7958                         ;;
7959                 esac
7960         ;;
7961         esac
7962         ;;
7963 esac
7964
7965 $cat <<EOM
7966
7967 I need to get your e-mail address in Internet format if possible, i.e.
7968 something like user@host.domain. Please answer accurately since I have
7969 no easy means to double check it. The default value provided below
7970 is most probably close to reality but may not be valid from outside
7971 your organization...
7972
7973 EOM
7974 cont=x
7975 while test "$cont"; do
7976         case "$cf_email" in
7977         '') dflt="$cf_by@$myhostname$mydomain";;
7978         *) dflt="$cf_email";;
7979         esac
7980         rp='What is your e-mail address?'
7981         . ./myread
7982         cf_email="$ans"
7983         case "$cf_email" in
7984         *@*.*) cont='' ;;
7985         *)
7986                 rp='Address does not look like an Internet one.  Use it anyway?'
7987                 case "$fastread" in
7988                 yes) dflt=y ;;
7989                 *) dflt=n ;;
7990                 esac
7991                 . ./myread
7992                 case "$ans" in
7993                 y*) cont='' ;;
7994                 *) echo " " ;;
7995                 esac
7996                 ;;
7997         esac
7998 done
7999
8000 $cat <<EOM
8001
8002 If you or somebody else will be maintaining perl at your site, please
8003 fill in the correct e-mail address here so that they may be contacted
8004 if necessary. Currently, the "perlbug" program included with perl
8005 will send mail to this address in addition to perlbug@perl.org. You may
8006 enter "none" for no administrator.
8007
8008 EOM
8009 case "$perladmin" in
8010 '') dflt="$cf_email";;
8011 *) dflt="$perladmin";;
8012 esac
8013 rp='Perl administrator e-mail address'
8014 . ./myread
8015 perladmin="$ans"
8016
8017 : determine whether to only install version-specific parts.
8018 echo " "
8019 $cat <<EOM
8020 Do you want to install only the version-specific parts of the perl
8021 distribution?  Usually you do *not* want to do this.
8022 EOM
8023 case "$versiononly" in
8024 "$define"|[Yy]*|true) dflt='y' ;;
8025 *) dflt='n';
8026 esac
8027 rp="Do you want to install only the version-specific parts of perl?"
8028 . ./myread
8029 case "$ans" in
8030 [yY]*)  val="$define";;
8031 *)      val="$undef" ;;
8032 esac
8033 set versiononly
8034 eval $setvar
8035
8036 : figure out how to guarantee perl startup
8037 case "$startperl" in
8038 '')
8039         case "$sharpbang" in
8040         *!)
8041                 $cat <<EOH
8042
8043 I can use the #! construct to start perl on your system. This will
8044 make startup of perl scripts faster, but may cause problems if you
8045 want to share those scripts and perl is not in a standard place
8046 ($binexp/perl) on all your platforms. The alternative is to force
8047 a shell by starting the script with a single ':' character.
8048
8049 EOH
8050                 case "$versiononly" in
8051                 "$define")      dflt="$binexp/perl$version";;  
8052                 *)              dflt="$binexp/perl";;
8053                 esac
8054                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8055                 . ./myread
8056                 case "$ans" in
8057                 none)   startperl=": # use perl";;
8058                 *)      startperl="#!$ans"
8059                         if $test 30 -lt `echo "$ans" | wc -c`; then
8060                                 $cat >&4 <<EOM
8061
8062 WARNING:  Some systems limit the #! command to 32 characters.
8063 If you experience difficulty running Perl scripts with #!, try
8064 installing Perl in a directory with a shorter pathname.
8065
8066 EOM
8067                         fi ;;
8068                 esac
8069                 ;;
8070         *) startperl=": # use perl"
8071                 ;;
8072         esac
8073         ;;
8074 esac
8075 echo "I'll use $startperl to start perl scripts."
8076
8077 : figure best path for perl in scripts
8078 case "$perlpath" in
8079 '')
8080         case "$versiononly" in
8081         "$define")      perlpath="$binexp/perl$version";;
8082         *)              perlpath="$binexp/perl";;
8083         esac
8084         case "$startperl" in
8085         *!*) ;;
8086         *)
8087                 $cat <<EOH
8088
8089 I will use the "eval 'exec'" idiom to start Perl on your system.
8090 I can use the full path of your Perl binary for this purpose, but
8091 doing so may cause problems if you want to share those scripts and
8092 Perl is not always in a standard place ($binexp/perl).
8093
8094 EOH
8095                 dflt="$binexp/perl"
8096                 rp="What path shall I use in \"eval 'exec'\"?"
8097                 . ./myread
8098                 perlpath="$ans"
8099                 ;;
8100         esac
8101         ;;
8102 esac
8103 case "$startperl" in
8104 *!*)    ;;
8105 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8106 esac
8107
8108 : determine where public executable scripts go
8109 set scriptdir scriptdir
8110 eval $prefixit
8111 case "$scriptdir" in
8112 '')
8113         dflt="$bin"
8114         : guess some guesses
8115         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8116         $test -d /usr/share/bin     && dflt=/usr/share/bin
8117         $test -d /usr/local/script  && dflt=/usr/local/script
8118         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8119         $test -d $prefixexp/script  && dflt=$prefixexp/script
8120         set dflt
8121         eval $prefixup
8122         ;;
8123 *)  dflt="$scriptdir"
8124         ;;
8125 esac
8126 $cat <<EOM
8127  
8128 Some installations have a separate directory just for executable scripts so
8129 that they can mount it across multiple architectures but keep the scripts in
8130 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8131 Or you might just lump your scripts in with all your other executables.
8132  
8133 EOM
8134 fn=d~
8135 rp='Where do you keep publicly executable scripts?'
8136 . ./getfile
8137 if $test "X$ansexp" != "X$scriptdirexp"; then
8138         installscript=''
8139 fi
8140 scriptdir="$ans"
8141 scriptdirexp="$ansexp"
8142 : Change installation prefix, if necessary.
8143 if $test X"$prefix" != X"$installprefix"; then
8144         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8145 else
8146         installscript="$scriptdirexp"
8147 fi
8148
8149 : determine where add-on public executables go
8150 case "$sitebin" in
8151 '')     dflt=$siteprefix/bin ;;
8152 *)      dflt=$sitebin ;;
8153 esac
8154 fn=d~
8155 rp='Pathname where the add-on public executables should be installed?'
8156 . ./getfile
8157 sitebin="$ans"
8158 sitebinexp="$ansexp"
8159 : Change installation prefix, if necessary.
8160 if $test X"$prefix" != X"$installprefix"; then
8161         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8162 else
8163         installsitebin="$sitebinexp"
8164 fi
8165
8166 : define an is-a-typedef? function
8167 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8168 case "$inclist" in
8169 "") inclist="sys/types.h";;
8170 esac;
8171 eval "varval=\$$var";
8172 case "$varval" in
8173 "")
8174         $rm -f temp.c;
8175         for inc in $inclist; do
8176                 echo "#include <$inc>" >>temp.c;
8177         done;
8178         echo "#ifdef $type" >> temp.c;
8179         echo "printf(\"We have $type\");" >> temp.c;
8180         echo "#endif" >> temp.c;
8181         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8182         if $contains $type temp.E >/dev/null 2>&1; then
8183                 eval "$var=\$type";
8184         else
8185                 eval "$var=\$def";
8186         fi;
8187         $rm -f temp.?;;
8188 *) eval "$var=\$varval";;
8189 esac'
8190
8191 : define an is-a-typedef? function that prompts if the type is not available.
8192 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8193 case "$inclist" in
8194 "") inclist="sys/types.h";;
8195 esac;
8196 eval "varval=\$$var";
8197 case "$varval" in
8198 "")
8199         $rm -f temp.c;
8200         for inc in $inclist; do
8201                 echo "#include <$inc>" >>temp.c;
8202         done;
8203         echo "#ifdef $type" >> temp.c;
8204         echo "printf(\"We have $type\");" >> temp.c;
8205         echo "#endif" >> temp.c;
8206         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8207         echo " " ;
8208         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8209         if $contains $type temp.E >/dev/null 2>&1; then
8210                 echo "$type found." >&4;
8211                 eval "$var=\$type";
8212         else
8213                 echo "$type NOT found." >&4;
8214                 dflt="$def";
8215                 . ./myread ;
8216                 eval "$var=\$ans";
8217         fi;
8218         $rm -f temp.?;;
8219 *) eval "$var=\$varval";;
8220 esac'
8221
8222 : see what type lseek is declared as in the kernel
8223 rp="What is the type used for lseek's offset on this system?"
8224 set off_t lseektype long stdio.h sys/types.h
8225 eval $typedef_ask
8226
8227 echo " "
8228 echo "Checking to see how big your file offsets are..." >&4
8229 $cat >try.c <<EOCP
8230 #include <sys/types.h>
8231 #include <stdio.h>
8232 int main()
8233 {
8234     printf("%d\n", (int)sizeof($lseektype));
8235     return(0); 
8236 }
8237 EOCP
8238 set try
8239 if eval $compile_ok; then
8240         lseeksize=`$run ./try`
8241         echo "Your file offsets are $lseeksize bytes long."
8242 else
8243         dflt=$longsize
8244         echo " "
8245         echo "(I can't seem to compile the test program.  Guessing...)"
8246         rp="What is the size of your file offsets (in bytes)?"
8247         . ./myread
8248         lseeksize="$ans"
8249 fi
8250 $rm -f try.c try
8251
8252 : see what type file positions are declared as in the library
8253 rp="What is the type for file position used by fsetpos()?"
8254 set fpos_t fpostype long stdio.h sys/types.h
8255 eval $typedef_ask
8256
8257 echo " "
8258 case "$fpostype" in
8259 *_t) zzz="$fpostype"    ;;
8260 *)   zzz="fpos_t"       ;;
8261 esac
8262 echo "Checking the size of $zzz..." >&4 
8263 cat > try.c <<EOCP
8264 #include <sys/types.h>
8265 #include <stdio.h>
8266 int main() {
8267     printf("%d\n", (int)sizeof($fpostype));
8268     exit(0);
8269 }
8270 EOCP
8271 set try
8272 if eval $compile_ok; then
8273         yyy=`$run ./try`
8274         case "$yyy" in
8275         '')     fpossize=4
8276                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8277                 ;;
8278         *)      fpossize=$yyy
8279                 echo "Your $zzz is $fpossize bytes long."
8280                 ;;
8281         esac
8282 else
8283         dflt="$longsize"
8284         echo " " >&4
8285         echo "(I can't compile the test program.  Guessing...)" >&4
8286         rp="What is the size of your file positions (in bytes)?"
8287         . ./myread
8288         fpossize="$ans"
8289 fi
8290
8291
8292
8293 # Backward compatibility (uselfs is deprecated).
8294 case "$uselfs" in
8295 "$define"|true|[yY]*)
8296         cat <<EOM >&4
8297
8298 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8299 EOM
8300         uselargefiles="$define"
8301         ;;
8302 esac                          
8303
8304 case "$lseeksize:$fpossize" in
8305 8:8) cat <<EOM
8306
8307 You can have files larger than 2 gigabytes.
8308 EOM
8309    val="$define" ;;
8310 *)    case "$uselargefiles" in
8311    "$undef"|false|[nN]*) dflt='n' ;;
8312    *)   dflt='y' ;;
8313    esac
8314    cat <<EOM
8315
8316 Perl can be built to understand large files (files larger than 2 gigabytes)
8317 on some systems.  To do so, Configure can be run with -Duselargefiles.
8318
8319 If this doesn't make any sense to you, just accept the default '$dflt'.
8320 EOM
8321    rp='Try to understand large files, if available?'
8322    . ./myread
8323    case "$ans" in
8324    y|Y)         val="$define" ;;
8325    *)           val="$undef"  ;;
8326    esac
8327    ;;
8328 esac
8329 set uselargefiles
8330 eval $setvar
8331 case "$uselargefiles" in
8332 "$define")
8333 : Look for a hint-file generated 'call-back-unit'.  If the
8334 : user has specified that a large files perl is to be built,
8335 : we may need to set or change some other defaults.
8336         if $test -f uselargefiles.cbu; then
8337                 echo "Your platform has some specific hints for large file builds, using them..."
8338                 . ./uselargefiles.cbu
8339                 echo " "
8340                 echo "Rechecking to see how big your file offsets are..." >&4
8341                 $cat >try.c <<EOCP
8342 #include <sys/types.h>
8343 #include <stdio.h>
8344 int main()
8345 {
8346     printf("%d\n", (int)sizeof($lseektype));
8347     return(0); 
8348 }
8349 EOCP
8350                 set try
8351                 if eval $compile_ok; then
8352                         lseeksize=`$run ./try`
8353                         $echo "Your file offsets are now $lseeksize bytes long."
8354                 else
8355                         dflt="$lseeksize"
8356                         echo " "
8357                         echo "(I can't seem to compile the test program.  Guessing...)"
8358                         rp="What is the size of your file offsets (in bytes)?"
8359                         . ./myread
8360                         lseeksize="$ans"
8361                 fi
8362                 case "$fpostype" in
8363                 *_t) zzz="$fpostype"    ;;
8364                 *)   zzz="fpos_t"       ;;
8365                 esac
8366                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8367                 $cat > try.c <<EOCP
8368 #include <sys/types.h>
8369 #include <stdio.h>
8370 int main() {
8371     printf("%d\n", (int)sizeof($fpostype));
8372     exit(0);
8373 }
8374 EOCP
8375                 set try
8376                 if eval $compile_ok; then
8377                         yyy=`$run ./try`
8378                         dflt="$lseeksize"
8379                         case "$yyy" in
8380                         '')     echo " "
8381                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8382                                 ;;
8383                         *)      fpossize=$yyy
8384                                 echo " $fpossize bytes." >&4
8385                                 ;;
8386                         esac
8387                 else
8388                         dflt="$fpossize"
8389                         echo " "
8390                         echo "(I can't compile the test program.  Guessing...)" >&4
8391                         rp="What is the size of your file positions (in bytes)?"
8392                         . ./myread
8393                         fpossize="$ans"
8394                 fi
8395                 $rm -f try.c try
8396         fi
8397         ;;
8398 esac
8399
8400 case "$vendorprefix" in
8401 '')     d_vendorbin="$undef"
8402         vendorbin=''
8403         vendorbinexp=''
8404         ;;
8405 *)      d_vendorbin="$define"
8406         : determine where vendor-supplied executables go.
8407         case "$vendorbin" in
8408         '') dflt=$vendorprefix/bin ;;
8409         *)      dflt="$vendorbin" ;;
8410         esac
8411         fn=d~+
8412         rp='Pathname for the vendor-supplied executables directory?'
8413         . ./getfile
8414         vendorbin="$ans"
8415         vendorbinexp="$ansexp"
8416         ;;
8417 esac
8418 : Change installation prefix, if necessary.
8419 if $test X"$prefix" != X"$installprefix"; then
8420         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8421 else
8422         installvendorbin="$vendorbinexp"
8423 fi
8424
8425 : see if qgcvt exists
8426 set qgcvt d_qgcvt
8427 eval $inlibc
8428
8429 echo " "
8430
8431 if $test X"$d_longdbl" = X"$define"; then
8432
8433 echo "Checking how to print long doubles..." >&4
8434
8435 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8436         $cat >try.c <<'EOCP'
8437 #include <sys/types.h>
8438 #include <stdio.h>
8439 int main() {
8440   double d = 123.456;
8441   printf("%.3f\n", d);
8442 }
8443 EOCP
8444         set try
8445         if eval $compile; then
8446                 yyy=`$run ./try`
8447                 case "$yyy" in
8448                 123.456)
8449                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8450                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8451                         echo "We will use %f."
8452                         ;;
8453                 esac
8454         fi
8455 fi
8456
8457 if $test X"$sPRIfldbl" = X; then
8458         $cat >try.c <<'EOCP'
8459 #include <sys/types.h>
8460 #include <stdio.h>
8461 int main() {
8462   long double d = 123.456;
8463   printf("%.3Lf\n", d);
8464 }
8465 EOCP
8466         set try
8467         if eval $compile; then
8468                 yyy=`$run ./try`
8469                 case "$yyy" in
8470                 123.456)
8471                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8472                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8473                         echo "We will use %Lf."
8474                         ;;
8475                 esac
8476         fi
8477 fi
8478
8479 if $test X"$sPRIfldbl" = X; then
8480         $cat >try.c <<'EOCP'
8481 #include <sys/types.h>
8482 #include <stdio.h>
8483 int main() {
8484   long double d = 123.456;
8485   printf("%.3llf\n", d);
8486 }
8487 EOCP
8488         set try
8489         if eval $compile; then
8490                 yyy=`$run ./try`
8491                 case "$yyy" in
8492                 123.456)
8493                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8494                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8495                         echo "We will use %llf."
8496                         ;;
8497                 esac
8498         fi
8499 fi
8500
8501 if $test X"$sPRIfldbl" = X; then
8502         $cat >try.c <<'EOCP'
8503 #include <sys/types.h>
8504 #include <stdio.h>
8505 int main() {
8506   long double d = 123.456;
8507   printf("%.3lf\n", d);
8508 }
8509 EOCP
8510         set try
8511         if eval $compile; then
8512                 yyy=`$run ./try`
8513                 case "$yyy" in
8514                 123.456)
8515                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8516                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8517                         echo "We will use %lf."
8518                         ;;
8519                 esac
8520         fi
8521 fi
8522
8523 if $test X"$sPRIfldbl" = X; then
8524         echo "Cannot figure out how to print long doubles." >&4
8525 else
8526         sSCNfldbl=$sPRIfldbl    # expect consistency
8527 fi
8528
8529 $rm -f try try.*
8530
8531 fi # d_longdbl
8532
8533 case "$sPRIfldbl" in
8534 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8535         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8536         d_SCNfldbl="$undef";
8537         ;;
8538 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8539         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8540         d_SCNfldbl="$define";
8541         ;;
8542 esac
8543
8544 : Check how to convert floats to strings.
8545 echo " "
8546 echo "Checking for an efficient way to convert floats to strings."
8547 echo " " > try.c
8548 case "$uselongdouble" in
8549 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8550 esac
8551 case "$d_longdbl" in
8552 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8553 esac
8554 case "$d_PRIgldbl" in
8555 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8556 esac
8557 $cat >>try.c <<EOP
8558 #ifdef TRY_gconvert
8559 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8560 char *myname = "gconvert";
8561 #endif
8562 #ifdef TRY_gcvt
8563 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8564 char *myname = "gcvt";
8565 #endif
8566 #ifdef TRY_qgcvt
8567 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8568 char *myname = "qgcvt";
8569 #define DOUBLETYPE long double
8570 #endif
8571 #ifdef TRY_sprintf
8572 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8573 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8574 #else
8575 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8576 #endif
8577 char *myname = "sprintf";
8578 #endif
8579
8580 #ifndef DOUBLETYPE
8581 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8582 #define DOUBLETYPE long double
8583 #else
8584 #define DOUBLETYPE double
8585 #endif
8586 #endif
8587
8588 #include <stdio.h>
8589
8590 #define I_STDLIB $i_stdlib
8591 #ifdef I_STDLIB
8592 #include <stdlib.h>
8593 #endif
8594
8595 int
8596 checkit(expect, got)
8597 char *expect;
8598 char *got;
8599 {
8600     if (strcmp(expect, got)) {
8601                 printf("%s oddity:  Expected %s, got %s\n",
8602                         myname, expect, got);
8603                 exit(1);
8604         }
8605 }
8606
8607 int main()
8608
8609         char buf[64]; 
8610         buf[63] = '\0';
8611
8612         /* This must be 1st test on (which?) platform */
8613         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8614         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8615         checkit("0.1", buf);
8616
8617         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8618         checkit("1", buf);
8619
8620         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8621         checkit("1.1", buf);
8622
8623         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8624         checkit("1.01", buf);
8625
8626         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8627         checkit("1.001", buf);
8628
8629         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8630         checkit("1.0001", buf);
8631
8632         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8633         checkit("1.00001", buf);
8634
8635         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8636         checkit("1.000001", buf);
8637
8638         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8639         checkit("0", buf);
8640
8641         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8642         checkit("-1", buf);
8643
8644         /* Some Linux gcvt's give 1.e+5 here. */
8645         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8646         checkit("100000", buf);
8647         
8648         /* Some Linux gcvt's give -1.e+5 here. */
8649         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8650         checkit("-100000", buf);
8651
8652         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8653         checkit("123.456", buf);
8654
8655         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8656         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8657         if (strlen(buf) > 5)
8658             checkit("1e+030", buf); /* for Microsoft */
8659         else
8660             checkit("1e+30", buf);
8661
8662         exit(0);
8663 }
8664 EOP
8665 case "$d_Gconvert" in
8666 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8667 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8668 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8669 *) xxx_list='gconvert gcvt sprintf' ;;
8670 esac
8671
8672 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8673 "$define$define$define")
8674     # for long doubles prefer first qgcvt, then sprintf
8675     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8676     xxx_list="sprintf $xxx_list"
8677     case "$d_qgcvt" in
8678     "$define") xxx_list="qgcvt $xxx_list" ;;
8679     esac
8680     ;;
8681 esac
8682
8683 for xxx_convert in $xxx_list; do
8684         echo "Trying $xxx_convert..."
8685         $rm -f try try$_o
8686         set try -DTRY_$xxx_convert
8687         if eval $compile; then
8688                 echo "$xxx_convert() found." >&4
8689                 if $run ./try; then
8690                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8691                         break;
8692                 else
8693                         echo "...But $xxx_convert didn't work as I expected."
8694                 fi
8695         else
8696                 echo "$xxx_convert NOT found." >&4
8697         fi
8698 done
8699         
8700 case "$xxx_convert" in
8701 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8702 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8703 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8704 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8705    "$define$define$define")
8706       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8707    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8708    esac
8709    ;;  
8710 esac
8711
8712 : see if _fwalk exists
8713 set fwalk d__fwalk
8714 eval $inlibc
8715
8716 : Initialize h_fcntl
8717 h_fcntl=false
8718
8719 : Initialize h_sysfile
8720 h_sysfile=false
8721
8722 : access call always available on UNIX
8723 set access d_access
8724 eval $inlibc
8725
8726 : locate the flags for 'access()'
8727 case "$d_access" in
8728 "$define")
8729         echo " "
8730         $cat >access.c <<'EOCP'
8731 #include <sys/types.h>
8732 #ifdef I_FCNTL
8733 #include <fcntl.h>
8734 #endif
8735 #ifdef I_SYS_FILE
8736 #include <sys/file.h>
8737 #endif
8738 #ifdef I_UNISTD
8739 #include <unistd.h>
8740 #endif
8741 int main() {
8742         exit(R_OK);
8743 }
8744 EOCP
8745         : check sys/file.h first, no particular reason here
8746         if $test `./findhdr sys/file.h` && \
8747                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8748                 h_sysfile=true;
8749                 echo "<sys/file.h> defines the *_OK access constants." >&4
8750         elif $test `./findhdr fcntl.h` && \
8751                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8752                 h_fcntl=true;
8753                 echo "<fcntl.h> defines the *_OK access constants." >&4
8754         elif $test `./findhdr unistd.h` && \
8755                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8756                 echo "<unistd.h> defines the *_OK access constants." >&4
8757         else
8758                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8759         fi
8760         ;;
8761 esac
8762 $rm -f access*
8763
8764 : see if accessx exists
8765 set accessx d_accessx
8766 eval $inlibc
8767
8768 : see if alarm exists
8769 set alarm d_alarm
8770 eval $inlibc
8771
8772 : see if atolf exists
8773 set atolf d_atolf
8774 eval $inlibc
8775
8776 : see if atoll exists
8777 set atoll d_atoll
8778 eval $inlibc
8779
8780 : Look for GNU-cc style attribute checking
8781 echo " "
8782 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8783 $cat >attrib.c <<'EOCP'
8784 #include <stdio.h>
8785 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8786 EOCP
8787 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8788         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8789                 echo "Your C compiler doesn't fully support __attribute__."
8790                 val="$undef"
8791         else
8792                 echo "Your C compiler supports __attribute__."
8793                 val="$define"
8794         fi
8795 else
8796         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8797         val="$undef"
8798 fi
8799 set d_attribut
8800 eval $setvar
8801 $rm -f attrib*
8802
8803 : see if bcmp exists
8804 set bcmp d_bcmp
8805 eval $inlibc
8806
8807 : see if bcopy exists
8808 set bcopy d_bcopy
8809 eval $inlibc
8810
8811 : see if this is a unistd.h system
8812 set unistd.h i_unistd
8813 eval $inhdr
8814
8815 : see if getpgrp exists
8816 set getpgrp d_getpgrp
8817 eval $inlibc
8818
8819 case "$d_getpgrp" in
8820 "$define")
8821         echo " "
8822         echo "Checking to see which flavor of getpgrp is in use..."
8823         $cat >try.c <<EOP
8824 #$i_unistd I_UNISTD
8825 #include <sys/types.h>
8826 #ifdef I_UNISTD
8827 #  include <unistd.h>
8828 #endif
8829 int main()
8830 {
8831         if (getuid() == 0) {
8832                 printf("(I see you are running Configure as super-user...)\n");
8833                 setuid(1);
8834         }
8835 #ifdef TRY_BSD_PGRP
8836         if (getpgrp(1) == 0)
8837                 exit(0);
8838 #else
8839         if (getpgrp() > 0)
8840                 exit(0);
8841 #endif
8842         exit(1);
8843 }
8844 EOP
8845         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8846                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8847                 val="$define"
8848         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8849                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8850                 val="$undef"
8851         else
8852                 echo "I can't seem to compile and run the test program."
8853                 if ./usg; then
8854                         xxx="a USG one, i.e. you use getpgrp()."
8855                 else
8856                         # SVR4 systems can appear rather BSD-ish.
8857                         case "$i_unistd" in
8858                         $undef)
8859                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8860                                 val="$define"
8861                                 ;;
8862                         $define)
8863                                 xxx="probably a USG one, i.e. you use getpgrp()."
8864                                 val="$undef"
8865                                 ;;
8866                         esac
8867                 fi
8868                 echo "Assuming your getpgrp is $xxx" >&4
8869         fi
8870         ;;
8871 *) val="$undef";;
8872 esac
8873 set d_bsdgetpgrp
8874 eval $setvar
8875 $rm -f try try.*
8876
8877 : see if setpgrp exists
8878 set setpgrp d_setpgrp
8879 eval $inlibc
8880
8881 case "$d_setpgrp" in
8882 "$define")
8883         echo " "
8884         echo "Checking to see which flavor of setpgrp is in use..."
8885         $cat >try.c <<EOP
8886 #$i_unistd I_UNISTD
8887 #include <sys/types.h>
8888 #ifdef I_UNISTD
8889 #  include <unistd.h>
8890 #endif
8891 int main()
8892 {
8893         if (getuid() == 0) {
8894                 printf("(I see you are running Configure as super-user...)\n");
8895                 setuid(1);
8896         }
8897 #ifdef TRY_BSD_PGRP
8898         if (-1 == setpgrp(1, 1))
8899                 exit(0);
8900 #else
8901         if (setpgrp() != -1)
8902                 exit(0);
8903 #endif
8904         exit(1);
8905 }
8906 EOP
8907         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8908                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8909                 val="$define"
8910         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8911                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8912                 val="$undef"
8913         else
8914                 echo "(I can't seem to compile and run the test program.)"
8915                 if ./usg; then
8916                         xxx="a USG one, i.e. you use setpgrp()."
8917                 else
8918                         # SVR4 systems can appear rather BSD-ish.
8919                         case "$i_unistd" in
8920                         $undef)
8921                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8922                                 val="$define"
8923                                 ;;
8924                         $define)
8925                                 xxx="probably a USG one, i.e. you use setpgrp()."
8926                                 val="$undef"
8927                                 ;;
8928                         esac
8929                 fi
8930                 echo "Assuming your setpgrp is $xxx" >&4
8931         fi
8932         ;;
8933 *) val="$undef";;
8934 esac
8935 set d_bsdsetpgrp
8936 eval $setvar
8937 $rm -f try try.*
8938 : see if bzero exists
8939 set bzero d_bzero
8940 eval $inlibc
8941
8942 : see if signal is declared as pointer to function returning int or void
8943 echo " "
8944 xxx=`./findhdr signal.h`
8945 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8946 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8947         echo "You have int (*signal())() instead of void." >&4
8948         val="$undef"
8949 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8950         echo "You have void (*signal())()." >&4
8951         val="$define"
8952 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8953         echo "You have int (*signal())() instead of void." >&4
8954         val="$undef"
8955 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8956         echo "You have void (*signal())()." >&4
8957         val="$define"
8958 else
8959         case "$d_voidsig" in
8960         '')
8961         echo "I can't determine whether signal handler returns void or int..." >&4
8962                 dflt=void
8963                 rp="What type does your signal handler return?"
8964                 . ./myread
8965                 case "$ans" in
8966                 v*) val="$define";;
8967                 *) val="$undef";;
8968                 esac;;
8969         "$define")
8970                 echo "As you already told me, signal handler returns void." >&4
8971                 val="$define"
8972                 ;;
8973         *)      echo "As you already told me, signal handler returns int." >&4
8974                 val="$undef"
8975                 ;;
8976         esac
8977 fi
8978 set d_voidsig
8979 eval $setvar
8980 case "$d_voidsig" in
8981 "$define") signal_t="void";;
8982 *) signal_t="int";;
8983 esac
8984 $rm -f $$.tmp
8985
8986 : check for ability to cast large floats to 32-bit ints.
8987 echo " "
8988 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8989 if $test "$intsize" -ge 4; then
8990         xxx=int
8991 else
8992         xxx=long
8993 fi
8994 $cat >try.c <<EOCP
8995 #include <stdio.h>
8996 #include <sys/types.h>
8997 #include <signal.h>
8998 $signal_t blech(s) int s; { exit(3); }
8999 int main()
9000 {
9001         $xxx i32;
9002         double f, g;
9003         int result = 0;
9004         char str[16];
9005         signal(SIGFPE, blech);
9006
9007         /* Don't let compiler optimize the test away.  Store the number 
9008            in a writable string for gcc to pass to sscanf under HP/UX.
9009         */
9010         sprintf(str, "2147483647");
9011         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9012         g = 10 * f;
9013         i32  = ($xxx) g;
9014
9015         /* x86 processors will probably give 0x8000 0000, which is a
9016        sign change.  We don't want that.  We want to mimic SPARC
9017            behavior here, which is to preserve the sign and give
9018            back 0x7fff ffff.
9019         */
9020         if (i32 != ($xxx) f)
9021                 result |= 1;
9022         exit(result);
9023 }
9024 EOCP
9025 set try
9026 if eval $compile_ok; then
9027         $run ./try
9028         yyy=$?
9029 else
9030         echo "(I can't seem to compile the test program--assuming it can't)"
9031         yyy=1
9032 fi
9033 case "$yyy" in
9034 0)      val="$define"
9035         echo "Yup, it can."
9036         ;;
9037 *)      val="$undef"
9038         echo "Nope, it can't."
9039         ;;
9040 esac
9041 set d_casti32
9042 eval $setvar
9043 $rm -f try try.*
9044
9045 : check for ability to cast negative floats to unsigned
9046 echo " "
9047 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9048 $cat >try.c <<EOCP
9049 #include <stdio.h>
9050 #include <sys/types.h>
9051 #include <signal.h>
9052 $signal_t blech(s) int s; { exit(7); }
9053 $signal_t blech_in_list(s) int s; { exit(4); }
9054 unsigned long dummy_long(p) unsigned long p; { return p; }
9055 unsigned int dummy_int(p) unsigned int p; { return p; }
9056 unsigned short dummy_short(p) unsigned short p; { return p; }
9057 int main()
9058 {
9059         double f;
9060         unsigned long along;
9061         unsigned int aint;
9062         unsigned short ashort;
9063         int result = 0;
9064         char str[16];
9065         
9066         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9067            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9068            optimized the whole file away
9069         */
9070         /* Store the number in a writable string for gcc to pass to 
9071            sscanf under HP/UX.
9072         */
9073         sprintf(str, "-123");
9074         sscanf(str, "%lf", &f);  /* f = -123.; */
9075
9076         signal(SIGFPE, blech);
9077         along = (unsigned long)f;
9078         aint = (unsigned int)f;
9079         ashort = (unsigned short)f;
9080         if (along != (unsigned long)-123)
9081                 result |= 1;
9082         if (aint != (unsigned int)-123)
9083                 result |= 1;
9084         if (ashort != (unsigned short)-123)
9085                 result |= 1;
9086         sprintf(str, "1073741824.");
9087         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9088         f = f + f;
9089         along = 0;
9090         along = (unsigned long)f;
9091         if (along != 0x80000000)
9092                 result |= 2;
9093         f -= 1.;
9094         along = 0;
9095         along = (unsigned long)f;
9096         if (along != 0x7fffffff)
9097                 result |= 1;
9098         f += 2.;
9099         along = 0;
9100         along = (unsigned long)f;
9101         if (along != 0x80000001)
9102                 result |= 2;
9103         if (result)
9104                 exit(result);
9105         signal(SIGFPE, blech_in_list);
9106         sprintf(str, "123.");
9107         sscanf(str, "%lf", &f);  /* f = 123.; */
9108         along = dummy_long((unsigned long)f);
9109         aint = dummy_int((unsigned int)f);
9110         ashort = dummy_short((unsigned short)f);
9111         if (along != (unsigned long)123)
9112                 result |= 4;
9113         if (aint != (unsigned int)123)
9114                 result |= 4;
9115         if (ashort != (unsigned short)123)
9116                 result |= 4;
9117         exit(result);
9118
9119 }
9120 EOCP
9121 set try
9122 if eval $compile_ok; then
9123         $run ./try
9124         castflags=$?
9125 else
9126         echo "(I can't seem to compile the test program--assuming it can't)"
9127         castflags=7
9128 fi
9129 case "$castflags" in
9130 0)      val="$define"
9131         echo "Yup, it can."
9132         ;;
9133 *)      val="$undef"
9134         echo "Nope, it can't."
9135         ;;
9136 esac
9137 set d_castneg
9138 eval $setvar
9139 $rm -f try.*
9140
9141 : see if vprintf exists
9142 echo " "
9143 if set vprintf val -f d_vprintf; eval $csym; $val; then
9144         echo 'vprintf() found.' >&4
9145         val="$define"
9146         $cat >try.c <<'EOF'
9147 #include <varargs.h>
9148
9149 int main() { xxx("foo"); }
9150
9151 xxx(va_alist)
9152 va_dcl
9153 {
9154         va_list args;
9155         char buf[10];
9156
9157         va_start(args);
9158         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9159 }
9160 EOF
9161         set try
9162         if eval $compile && $run ./try; then
9163                 echo "Your vsprintf() returns (int)." >&4
9164                 val2="$undef"
9165         else
9166                 echo "Your vsprintf() returns (char*)." >&4
9167                 val2="$define"
9168         fi
9169 else
9170         echo 'vprintf() NOT found.' >&4
9171                 val="$undef"
9172                 val2="$undef"
9173 fi
9174 $rm -f try try.*
9175 set d_vprintf
9176 eval $setvar
9177 val=$val2
9178 set d_charvspr
9179 eval $setvar
9180
9181 : see if chown exists
9182 set chown d_chown
9183 eval $inlibc
9184
9185 : see if chroot exists
9186 set chroot d_chroot
9187 eval $inlibc
9188
9189 : see if chsize exists
9190 set chsize d_chsize
9191 eval $inlibc
9192
9193 : see if class exists
9194 set class d_class
9195 eval $inlibc
9196
9197 hasstruct='varname=$1; struct=$2; shift; shift;
9198 while $test $# -ge 2; do
9199         case "$1" in
9200         $define) echo "#include <$2>";;
9201         esac ;
9202     shift 2;
9203 done > try.c;
9204 echo "int main () { struct $struct foo; }" >> try.c;
9205 set try;
9206 if eval $compile; then
9207         val="$define";
9208 else
9209         val="$undef";
9210 fi;
9211 set $varname;
9212 eval $setvar;
9213 $rm -f try.c try.o'
9214
9215 : see if sys/types.h has to be included
9216 set sys/types.h i_systypes
9217 eval $inhdr
9218
9219 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9220 while $test $# -ge 2; do
9221         case "$1" in
9222         $define) echo "#include <$2>";;
9223         esac ;
9224     shift 2;
9225 done > try.c;
9226 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9227 set try;
9228 if eval $compile; then
9229         val="$define";
9230 else
9231         val="$undef";
9232 fi;
9233 set $varname;
9234 eval $setvar;
9235 $rm -f try.c try.o'
9236
9237 socketlib=''
9238 sockethdr=''
9239 : see whether socket exists
9240 echo " "
9241 $echo $n "Hmm... $c" >&4
9242 if set socket val -f d_socket; eval $csym; $val; then
9243         echo "Looks like you have Berkeley networking support." >&4
9244         d_socket="$define"
9245         if set setsockopt val -f; eval $csym; $val; then
9246                 d_oldsock="$undef"
9247         else
9248                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9249                 d_oldsock="$define"
9250         fi
9251 else
9252         if $contains socklib libc.list >/dev/null 2>&1; then
9253                 echo "Looks like you have Berkeley networking support." >&4
9254                 d_socket="$define"
9255                 : we will have to assume that it supports the 4.2 BSD interface
9256                 d_oldsock="$undef"
9257         else
9258                 echo "You don't have Berkeley networking in libc$_a..." >&4
9259                 if test "X$d_socket" = "X$define"; then
9260                    echo "...but you seem to believe that you have sockets." >&4
9261                 else
9262                         for net in net socket
9263                         do
9264                                 if test -f /usr/lib/lib$net$_a; then
9265                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9266                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9267                                         if $contains socket libc.list >/dev/null 2>&1; then
9268                                                 d_socket="$define"
9269                                                 socketlib="-l$net"
9270                                                 case "$net" in
9271                                                 net)
9272                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9273                                                         sockethdr="-I/usr/netinclude"
9274                                                         ;;
9275                                                 esac
9276                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9277                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9278                                                         d_oldsock="$undef"
9279                                                 else
9280                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9281                                                         d_oldsock="$define"
9282                                                 fi
9283                                                 break
9284                                         fi
9285                                 fi
9286                         done
9287                         if test "X$d_socket" != "X$define"; then
9288                            echo "or anywhere else I see." >&4
9289                            d_socket="$undef"
9290                            d_oldsock="$undef"
9291                         fi
9292                 fi
9293         fi
9294 fi
9295
9296 : see if socketpair exists
9297 set socketpair d_sockpair
9298 eval $inlibc
9299
9300
9301 echo " "
9302 echo "Checking the availability of certain socket constants..." >&4
9303 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9304         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9305         $cat >try.c <<EOF
9306 #include <sys/types.h>
9307 #include <sys/socket.h>
9308 int main() {
9309     int i = $ENUM;
9310 }
9311 EOF
9312         val="$undef"
9313         set try; if eval $compile; then
9314                 val="$define"
9315         fi
9316         set d_${enum}; eval $setvar
9317         $rm -f try.c try
9318 done
9319
9320 : see if this is a sys/uio.h system
9321 set sys/uio.h i_sysuio
9322 eval $inhdr
9323
9324
9325 echo " "
9326 echo "Checking to see if your system supports struct cmsghdr..." >&4
9327 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9328 eval $hasstruct
9329 case "$d_cmsghdr_s" in
9330 "$define")      echo "Yes, it does."   ;;
9331 *)              echo "No, it doesn't." ;;
9332 esac
9333
9334
9335 : check for const keyword
9336 echo " "
9337 echo 'Checking to see if your C compiler knows about "const"...' >&4
9338 $cat >const.c <<'EOCP'
9339 typedef struct spug { int drokk; } spug;
9340 int main()
9341 {
9342         const char *foo;
9343         const spug y;
9344 }
9345 EOCP
9346 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9347         val="$define"
9348         echo "Yup, it does."
9349 else
9350         val="$undef"
9351         echo "Nope, it doesn't."
9352 fi
9353 set d_const
9354 eval $setvar
9355
9356 : see if crypt exists
9357 echo " "
9358 set crypt d_crypt
9359 eval $inlibc
9360 case "$d_crypt" in
9361 $define) cryptlib='' ;;
9362 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9363                 echo 'crypt() found.' >&4
9364                 val="$define"
9365                 cryptlib=''
9366         else
9367                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9368                 if $test -z "$cryptlib"; then
9369                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9370                 else
9371                         cryptlib=-lcrypt
9372                 fi
9373                 if $test -z "$cryptlib"; then
9374                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9375                 else
9376                         cryptlib=-lcrypt
9377                 fi
9378                 if $test -z "$cryptlib"; then
9379                         cryptlib=`./loc libcrypt$_a "" $libpth`
9380                 else
9381                         cryptlib=-lcrypt
9382                 fi
9383                 if $test -z "$cryptlib"; then
9384                         echo 'crypt() NOT found.' >&4
9385                         val="$undef"
9386                 else
9387                         val="$define"
9388                 fi
9389         fi
9390         set d_crypt
9391         eval $setvar
9392         ;;
9393 esac
9394
9395 : get csh whereabouts
9396 case "$csh" in
9397 'csh') val="$undef" ;;
9398 *) val="$define" ;;
9399 esac
9400 set d_csh
9401 eval $setvar
9402 : Respect a hint or command line value for full_csh.
9403 case "$full_csh" in
9404 '') full_csh=$csh ;;
9405 esac
9406
9407 : see if cuserid exists
9408 set cuserid d_cuserid
9409 eval $inlibc
9410
9411 : see if this is a limits.h system
9412 set limits.h i_limits
9413 eval $inhdr
9414
9415 : see if this is a float.h system
9416 set float.h i_float
9417 eval $inhdr
9418
9419 : See if number of significant digits in a double precision number is known
9420 echo " "
9421 $cat >dbl_dig.c <<EOM
9422 #$i_limits I_LIMITS
9423 #$i_float I_FLOAT
9424 #ifdef I_LIMITS
9425 #include <limits.h>
9426 #endif
9427 #ifdef I_FLOAT
9428 #include <float.h>
9429 #endif
9430 #ifdef DBL_DIG
9431 printf("Contains DBL_DIG");
9432 #endif
9433 EOM
9434 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9435 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9436         echo "DBL_DIG found." >&4
9437         val="$define"
9438 else
9439         echo "DBL_DIG NOT found." >&4
9440         val="$undef"
9441 fi
9442 $rm -f dbl_dig.?
9443 set d_dbl_dig
9444 eval $setvar
9445
9446 hasproto='varname=$1; func=$2; shift; shift;
9447 while $test $# -ge 2; do
9448         case "$1" in
9449         $define) echo "#include <$2>";;
9450         esac ;
9451     shift 2;
9452 done > try.c;
9453 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9454 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9455         echo "$func() prototype found.";
9456         val="$define";
9457 else
9458         echo "$func() prototype NOT found.";
9459         val="$undef";
9460 fi;
9461 set $varname;
9462 eval $setvar;
9463 $rm -f try.c tryout.c'
9464
9465 : see if dbm.h is available
9466 : see if dbmclose exists
9467 set dbmclose d_dbmclose
9468 eval $inlibc
9469
9470 case "$d_dbmclose" in
9471 $define)
9472         set dbm.h i_dbm
9473         eval $inhdr
9474         case "$i_dbm" in
9475         $define)
9476                 val="$undef"
9477                 set i_rpcsvcdbm
9478                 eval $setvar
9479                 ;;
9480         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9481                 eval $inhdr
9482                 ;;
9483         esac
9484         ;;
9485 *)      echo "We won't be including <dbm.h>"
9486         val="$undef"
9487         set i_dbm
9488         eval $setvar
9489         val="$undef"
9490         set i_rpcsvcdbm
9491         eval $setvar
9492         ;;
9493 esac
9494
9495 : see if prototype for dbminit is available
9496 echo " "
9497 set d_dbminitproto dbminit $i_dbm dbm.h
9498 eval $hasproto
9499
9500 : see if difftime exists
9501 set difftime d_difftime
9502 eval $inlibc
9503
9504 : see if this is a dirent system
9505 echo " "
9506 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9507         val="$define"
9508         echo "<dirent.h> found." >&4
9509 else
9510         val="$undef"
9511         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9512                 echo "<sys/dir.h> found." >&4
9513                 echo " "
9514         else
9515                 xinc=`./findhdr sys/ndir.h`
9516         fi
9517         echo "<dirent.h> NOT found." >&4
9518 fi
9519 set i_dirent
9520 eval $setvar
9521
9522 : Look for type of directory structure.
9523 echo " "
9524 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9525
9526 case "$direntrytype" in
9527 ''|' ')
9528         case "$i_dirent" in
9529         $define) guess1='struct dirent' ;;
9530         *) guess1='struct direct'  ;;
9531         esac
9532         ;;
9533 *)      guess1="$direntrytype"
9534         ;;
9535 esac
9536
9537 case "$guess1" in
9538 'struct dirent') guess2='struct direct' ;;
9539 *) guess2='struct dirent' ;;
9540 esac
9541                 
9542 if $contains "$guess1" try.c >/dev/null 2>&1; then
9543         direntrytype="$guess1"
9544         echo "Your directory entries are $direntrytype." >&4
9545 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9546         direntrytype="$guess2"
9547         echo "Your directory entries seem to be $direntrytype." >&4
9548 else
9549         echo "I don't recognize your system's directory entries." >&4
9550         rp="What type is used for directory entries on this system?"
9551         dflt="$guess1"
9552         . ./myread
9553         direntrytype="$ans"
9554 fi
9555 $rm -f try.c
9556
9557
9558 : see if the directory entry stores field length
9559 echo " "
9560 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9561 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9562         echo "Good, your directory entry keeps length information in d_namlen." >&4
9563         val="$define"
9564 else
9565         echo "Your directory entry does not know about the d_namlen field." >&4
9566         val="$undef"
9567 fi
9568 set d_dirnamlen
9569 eval $setvar
9570 $rm -f try.c
9571
9572 : see if this is an sysdir system
9573 set sys/dir.h i_sysdir
9574 eval $inhdr
9575
9576 : see if this is an sysndir system
9577 set sys/ndir.h i_sysndir
9578 eval $inhdr
9579
9580 : Look for dirfd
9581 echo " "
9582 $cat >dirfd.c <<EOM
9583 #include <stdio.h>
9584 #$i_dirent I_DIRENT             /**/
9585 #$i_sysdir I_SYS_DIR            /**/
9586 #$i_sysndir I_SYS_NDIR          /**/
9587 #$i_systypes I_SYS_TYPES        /**/
9588 #if defined(I_SYS_TYPES)
9589 #include <sys/types.h>
9590 #endif
9591 #if defined(I_DIRENT)
9592 #include <dirent.h>
9593 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9594 #include <sys/dir.h>
9595 #endif
9596 #else
9597 #ifdef I_SYS_NDIR
9598 #include <sys/ndir.h>
9599 #else
9600 #ifdef I_SYS_DIR
9601 #ifdef hp9000s500
9602 #include <ndir.h>       /* may be wrong in the future */
9603 #else
9604 #include <sys/dir.h>
9605 #endif
9606 #endif
9607 #endif
9608 #endif 
9609 int main() {
9610         DIR *dirp = opendir(".");
9611         if (dirfd(dirp) >= 0)
9612                 exit(0);
9613         else
9614                 exit(1);
9615 }
9616 EOM
9617 set dirfd
9618 if eval $compile; then
9619         val="$define"
9620 fi
9621 case "$val" in
9622 $define)        echo "dirfd() found." >&4       ;;
9623 *)              echo "dirfd() NOT found." >&4   ;;
9624 esac
9625 set d_dirfd
9626 eval $setvar
9627 $rm -f dirfd*
9628
9629 : see if dlerror exists
9630 xxx_runnm="$runnm"
9631 runnm=false
9632 set dlerror d_dlerror
9633 eval $inlibc
9634 runnm="$xxx_runnm"
9635
9636 : see if dlfcn is available
9637 set dlfcn.h i_dlfcn
9638 eval $inhdr
9639
9640 case "$usedl" in
9641 $define|y|true)
9642         $cat << EOM
9643
9644 On a few systems, the dynamically loaded modules that perl generates and uses
9645 will need a different extension than shared libs. The default will probably
9646 be appropriate.
9647
9648 EOM
9649         case "$dlext" in
9650         '')     dflt="$so" ;;
9651         *)      dflt="$dlext" ;;
9652         esac
9653         rp='What is the extension of dynamically loaded modules'
9654         . ./myread
9655         dlext="$ans"
9656         ;;
9657 *)
9658         dlext="none"
9659         ;;
9660 esac
9661
9662 : Check if dlsym need a leading underscore
9663 echo " "
9664 val="$undef"
9665
9666 case "$dlsrc" in
9667 dl_dlopen.xs)
9668         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9669         $cat >dyna.c <<'EOM'
9670 fred () { }
9671 EOM
9672
9673 $cat >fred.c<<EOM
9674
9675 #include <stdio.h>
9676 #$i_dlfcn I_DLFCN
9677 #ifdef I_DLFCN
9678 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9679 #else
9680 #include <sys/types.h>
9681 #include <nlist.h>
9682 #include <link.h>
9683 #endif
9684
9685 extern int fred() ;
9686
9687 int main()
9688 {
9689     void * handle ;
9690     void * symbol ;
9691 #ifndef RTLD_LAZY
9692     int mode = 1 ;
9693 #else
9694     int mode = RTLD_LAZY ;
9695 #endif
9696     handle = dlopen("./dyna.$dlext", mode) ;
9697     if (handle == NULL) {
9698         printf ("1\n") ;
9699         fflush (stdout) ;
9700         exit(0);
9701     }
9702     symbol = dlsym(handle, "fred") ;
9703     if (symbol == NULL) {
9704         /* try putting a leading underscore */
9705         symbol = dlsym(handle, "_fred") ;
9706         if (symbol == NULL) {
9707             printf ("2\n") ;
9708             fflush (stdout) ;
9709             exit(0);
9710         }
9711         printf ("3\n") ;
9712     }
9713     else
9714         printf ("4\n") ;
9715     fflush (stdout) ;
9716     exit(0);
9717 }
9718 EOM
9719         : Call the object file tmp-dyna.o in case dlext=o.
9720         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9721                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9722                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9723                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9724                 xxx=`$run ./fred`
9725                 case $xxx in
9726                 1)      echo "Test program failed using dlopen." >&4
9727                         echo "Perhaps you should not use dynamic loading." >&4;;
9728                 2)      echo "Test program failed using dlsym." >&4
9729                         echo "Perhaps you should not use dynamic loading." >&4;;
9730                 3)      echo "dlsym needs a leading underscore" >&4
9731                         val="$define" ;;
9732                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9733                 esac
9734         else
9735                 echo "I can't compile and run the test program." >&4
9736                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9737         fi
9738         ;;
9739 esac
9740                 
9741 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9742
9743 set d_dlsymun
9744 eval $setvar
9745
9746 : see if prototype for drand48 is available
9747 echo " "
9748 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9749 eval $hasproto
9750
9751 : see if dup2 exists
9752 set dup2 d_dup2
9753 eval $inlibc
9754
9755 : see if eaccess exists
9756 set eaccess d_eaccess
9757 eval $inlibc
9758
9759 : see if endgrent exists
9760 set endgrent d_endgrent
9761 eval $inlibc
9762
9763 : see if endhostent exists
9764 set endhostent d_endhent
9765 eval $inlibc
9766
9767 : see if endnetent exists
9768 set endnetent d_endnent
9769 eval $inlibc
9770
9771 : see if endprotoent exists
9772 set endprotoent d_endpent
9773 eval $inlibc
9774
9775 : see if endpwent exists
9776 set endpwent d_endpwent
9777 eval $inlibc
9778
9779 : see if endservent exists
9780 set endservent d_endsent
9781 eval $inlibc
9782
9783 : Locate the flags for 'open()'
9784 echo " "
9785 $cat >try.c <<'EOCP'
9786 #include <sys/types.h>
9787 #ifdef I_FCNTL
9788 #include <fcntl.h>
9789 #endif
9790 #ifdef I_SYS_FILE
9791 #include <sys/file.h>
9792 #endif
9793 int main() {
9794         if(O_RDONLY);
9795 #ifdef O_TRUNC
9796         exit(0);
9797 #else
9798         exit(1);
9799 #endif
9800 }
9801 EOCP
9802 : check sys/file.h first to get FREAD on Sun
9803 if $test `./findhdr sys/file.h` && \
9804                 set try -DI_SYS_FILE && eval $compile; then
9805         h_sysfile=true;
9806         echo "<sys/file.h> defines the O_* constants..." >&4
9807         if $run ./try; then
9808                 echo "and you have the 3 argument form of open()." >&4
9809                 val="$define"
9810         else
9811                 echo "but not the 3 argument form of open().  Oh, well." >&4
9812                 val="$undef"
9813         fi
9814 elif $test `./findhdr fcntl.h` && \
9815                 set try -DI_FCNTL && eval $compile; then
9816         h_fcntl=true;
9817         echo "<fcntl.h> defines the O_* constants..." >&4
9818         if $run ./try; then
9819                 echo "and you have the 3 argument form of open()." >&4
9820                 val="$define"
9821         else
9822                 echo "but not the 3 argument form of open().  Oh, well." >&4
9823                 val="$undef"
9824         fi
9825 else
9826         val="$undef"
9827         echo "I can't find the O_* constant definitions!  You got problems." >&4
9828 fi
9829 set d_open3
9830 eval $setvar
9831 $rm -f try try.*
9832
9833 : see which of string.h or strings.h is needed
9834 echo " "
9835 strings=`./findhdr string.h`
9836 if $test "$strings" && $test -r "$strings"; then
9837         echo "Using <string.h> instead of <strings.h>." >&4
9838         val="$define"
9839 else
9840         val="$undef"
9841         strings=`./findhdr strings.h`
9842         if $test "$strings" && $test -r "$strings"; then
9843                 echo "Using <strings.h> instead of <string.h>." >&4
9844         else
9845                 echo "No string header found -- You'll surely have problems." >&4
9846         fi
9847 fi
9848 set i_string
9849 eval $setvar
9850 case "$i_string" in
9851 "$undef") strings=`./findhdr strings.h`;;
9852 *)        strings=`./findhdr string.h`;;
9853 esac
9854
9855 : see if this is a sys/file.h system
9856 val=''
9857 set sys/file.h val
9858 eval $inhdr
9859
9860 : do we need to include sys/file.h ?
9861 case "$val" in
9862 "$define")
9863         echo " "
9864         if $h_sysfile; then
9865                 val="$define"
9866                 echo "We'll be including <sys/file.h>." >&4
9867         else
9868                 val="$undef"
9869                 echo "We won't be including <sys/file.h>." >&4
9870         fi
9871         ;;
9872 *)
9873         h_sysfile=false
9874         ;;
9875 esac
9876 set i_sysfile
9877 eval $setvar
9878
9879 : see if fcntl.h is there
9880 val=''
9881 set fcntl.h val
9882 eval $inhdr
9883
9884 : see if we can include fcntl.h
9885 case "$val" in
9886 "$define")
9887         echo " "
9888         if $h_fcntl; then
9889                 val="$define"
9890                 echo "We'll be including <fcntl.h>." >&4
9891         else
9892                 val="$undef"
9893                 if $h_sysfile; then
9894         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
9895                 else
9896                         echo "We won't be including <fcntl.h>." >&4
9897                 fi
9898         fi
9899         ;;
9900 *)
9901         h_fcntl=false
9902         val="$undef"
9903         ;;
9904 esac
9905 set i_fcntl
9906 eval $setvar
9907
9908 : check for non-blocking I/O stuff
9909 case "$h_sysfile" in
9910 true) echo "#include <sys/file.h>" > head.c;;
9911 *)
9912        case "$h_fcntl" in
9913        true) echo "#include <fcntl.h>" > head.c;;
9914        *) echo "#include <sys/fcntl.h>" > head.c;;
9915        esac
9916        ;;
9917 esac
9918 echo " "
9919 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9920 case "$o_nonblock" in
9921 '')
9922         $cat head.c > try.c
9923         $cat >>try.c <<EOCP
9924 #include <stdio.h>
9925 #include <stdlib.h>
9926 #$i_fcntl I_FCNTL
9927 #ifdef I_FCNTL
9928 #include <fcntl.h>
9929 #endif
9930 int main() {
9931 #ifdef O_NONBLOCK
9932         printf("O_NONBLOCK\n");
9933         exit(0);
9934 #endif
9935 #ifdef O_NDELAY
9936         printf("O_NDELAY\n");
9937         exit(0);
9938 #endif
9939 #ifdef FNDELAY
9940         printf("FNDELAY\n");
9941         exit(0);
9942 #endif
9943         exit(0);
9944 }
9945 EOCP
9946         set try
9947         if eval $compile_ok; then
9948                 o_nonblock=`$run ./try`
9949                 case "$o_nonblock" in
9950                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9951                 *) echo "Seems like we can use $o_nonblock.";;
9952                 esac
9953         else
9954                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9955         fi
9956         ;;
9957 *) echo "Using $hint value $o_nonblock.";;
9958 esac
9959 $rm -f try try.* .out core
9960
9961 echo " "
9962 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9963 case "$eagain" in
9964 '')
9965         $cat head.c > try.c
9966         $cat >>try.c <<EOCP
9967 #include <errno.h>
9968 #include <sys/types.h>
9969 #include <signal.h>
9970 #include <stdio.h> 
9971 #include <stdlib.h> 
9972 #define MY_O_NONBLOCK $o_nonblock
9973 #ifndef errno  /* XXX need better Configure test */
9974 extern int errno;
9975 #endif
9976 #$i_unistd I_UNISTD
9977 #ifdef I_UNISTD
9978 #include <unistd.h>
9979 #endif
9980 #$i_string I_STRING
9981 #ifdef I_STRING
9982 #include <string.h>
9983 #else
9984 #include <strings.h>
9985 #endif
9986 $signal_t blech(x) int x; { exit(3); }
9987 EOCP
9988         $cat >> try.c <<'EOCP'
9989 int main()
9990 {
9991         int pd[2];
9992         int pu[2];
9993         char buf[1];
9994         char string[100];
9995
9996         pipe(pd);       /* Down: child -> parent */
9997         pipe(pu);       /* Up: parent -> child */
9998         if (0 != fork()) {
9999                 int ret;
10000                 close(pd[1]);   /* Parent reads from pd[0] */
10001                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10002 #ifdef F_SETFL
10003                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10004                         exit(1);
10005 #else
10006                 exit(4);
10007 #endif
10008                 signal(SIGALRM, blech);
10009                 alarm(5);
10010                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10011                         exit(2);
10012                 sprintf(string, "%d\n", ret);
10013                 write(2, string, strlen(string));
10014                 alarm(0);
10015 #ifdef EAGAIN
10016                 if (errno == EAGAIN) {
10017                         printf("EAGAIN\n");
10018                         goto ok;
10019                 }
10020 #endif
10021 #ifdef EWOULDBLOCK
10022                 if (errno == EWOULDBLOCK)
10023                         printf("EWOULDBLOCK\n");
10024 #endif
10025         ok:
10026                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10027                 sleep(2);                               /* Give it time to close our pipe */
10028                 alarm(5);
10029                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10030                 alarm(0);
10031                 sprintf(string, "%d\n", ret);
10032                 write(3, string, strlen(string));
10033                 exit(0);
10034         }
10035
10036         close(pd[0]);                   /* We write to pd[1] */
10037         close(pu[1]);                   /* We read from pu[0] */
10038         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10039         close(pd[1]);                   /* Pipe pd is now fully closed! */
10040         exit(0);                                /* Bye bye, thank you for playing! */
10041 }
10042 EOCP
10043         set try
10044         if eval $compile_ok; then
10045                 echo "$startsh" >mtry
10046                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
10047                 chmod +x mtry
10048                 ./mtry >/dev/null 2>&1
10049                 case $? in
10050                 0) eagain=`$cat try.out`;;
10051                 1) echo "Could not perform non-blocking setting!";;
10052                 2) echo "I did a successful read() for something that was not there!";;
10053                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10054                 4) echo "Could not find F_SETFL!";;
10055                 *) echo "Something terribly wrong happened during testing.";;
10056                 esac
10057                 rd_nodata=`$cat try.ret`
10058                 echo "A read() system call with no data present returns $rd_nodata."
10059                 case "$rd_nodata" in
10060                 0|-1) ;;
10061                 *)
10062                         echo "(That's peculiar, fixing that to be -1.)"
10063                         rd_nodata=-1
10064                         ;;
10065                 esac
10066                 case "$eagain" in
10067                 '')
10068                         echo "Forcing errno EAGAIN on read() with no data available."
10069                         eagain=EAGAIN
10070                         ;;
10071                 *)
10072                         echo "Your read() sets errno to $eagain when no data is available."
10073                         ;;
10074                 esac
10075                 status=`$cat try.err`
10076                 case "$status" in
10077                 0) echo "And it correctly returns 0 to signal EOF.";;
10078                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10079                 *) echo "However, your read() returns '$status' on EOF??";;
10080                 esac
10081                 val="$define"
10082                 if test "$status" = "$rd_nodata"; then
10083                         echo "WARNING: you can't distinguish between EOF and no data!"
10084                         val="$undef"
10085                 fi
10086         else
10087                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10088                 eagain=EAGAIN
10089         fi
10090         set d_eofnblk
10091         eval $setvar
10092         ;;
10093 *)
10094         echo "Using $hint value $eagain."
10095         echo "Your read() returns $rd_nodata when no data is present."
10096         case "$d_eofnblk" in
10097         "$define") echo "And you can see EOF because read() returns 0.";;
10098         "$undef") echo "But you can't see EOF status from read() returned value.";;
10099         *)
10100                 echo "(Assuming you can't see EOF status from read anyway.)"
10101                 d_eofnblk=$undef
10102                 ;;
10103         esac
10104         ;;
10105 esac
10106 $rm -f try try.* .out core head.c mtry
10107
10108 : see if fchdir exists
10109 set fchdir d_fchdir
10110 eval $inlibc
10111
10112 : see if fchmod exists
10113 set fchmod d_fchmod
10114 eval $inlibc
10115
10116 : see if fchown exists
10117 set fchown d_fchown
10118 eval $inlibc
10119
10120 : see if this is an fcntl system
10121 set fcntl d_fcntl
10122 eval $inlibc
10123
10124 echo " "
10125 : See if fcntl-based locking works.
10126 $cat >try.c <<EOCP
10127 #include <stdlib.h>
10128 #include <unistd.h>
10129 #include <fcntl.h>
10130 #include <signal.h>
10131 $signal_t blech(x) int x; { exit(3); }
10132 int main() {
10133 #if defined(F_SETLK) && defined(F_SETLKW)
10134      struct flock flock;
10135      int retval, fd;
10136      fd = open("try.c", O_RDONLY);
10137      flock.l_type = F_RDLCK;
10138      flock.l_whence = SEEK_SET;
10139      flock.l_start = flock.l_len = 0;
10140      signal(SIGALRM, blech);
10141      alarm(10);
10142      retval = fcntl(fd, F_SETLK, &flock);
10143      close(fd);
10144      (retval < 0 ? exit(2) : exit(0));
10145 #else
10146      exit(2);
10147 #endif
10148 }
10149 EOCP
10150 echo "Checking if fcntl-based file locking works... "
10151 case "$d_fcntl" in
10152 "$define")
10153         set try
10154         if eval $compile_ok; then
10155                 if $run ./try; then
10156                         echo "Yes, it seems to work."
10157                         val="$define"
10158                 else
10159                         echo "Nope, it didn't work."
10160                         val="$undef"
10161                         case "$?" in
10162                         3) $cat >&4 <<EOM
10163 ***
10164 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10165 *** This is (almost) impossible.
10166 *** If your NFS lock daemons are not feeling well, something like
10167 *** this may happen, please investigate.  Cannot continue, aborting.
10168 ***
10169 EOM
10170                                 exit 1
10171                                 ;;
10172                         esac
10173                 fi
10174         else
10175                 echo "I'm unable to compile the test program, so I'll assume not."
10176                 val="$undef"
10177         fi
10178         ;;
10179 *) val="$undef";
10180         echo "Nope, since you don't even have fcntl()."
10181         ;;
10182 esac
10183 set d_fcntl_can_lock
10184 eval $setvar
10185 $rm -f try*
10186
10187
10188 : see if sys/select.h has to be included
10189 set sys/select.h i_sysselct
10190 eval $inhdr
10191
10192 : see if we should include time.h, sys/time.h, or both
10193 echo " "
10194 if test "X$timeincl" = X; then
10195         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10196         $echo $n "I'm now running the test program...$c"
10197         $cat >try.c <<'EOCP'
10198 #include <sys/types.h>
10199 #ifdef I_TIME
10200 #include <time.h>
10201 #endif
10202 #ifdef I_SYSTIME
10203 #ifdef SYSTIMEKERNEL
10204 #define KERNEL
10205 #endif
10206 #include <sys/time.h>
10207 #endif
10208 #ifdef I_SYSSELECT
10209 #include <sys/select.h>
10210 #endif
10211 int main()
10212 {
10213         struct tm foo;
10214 #ifdef S_TIMEVAL
10215         struct timeval bar;
10216 #endif
10217 #ifdef S_TIMEZONE
10218         struct timezone tzp;
10219 #endif
10220         if (foo.tm_sec == foo.tm_sec)
10221                 exit(0);
10222 #ifdef S_TIMEVAL
10223         if (bar.tv_sec == bar.tv_sec)
10224                 exit(0);
10225 #endif
10226         exit(1);
10227 }
10228 EOCP
10229         flags=''
10230         for s_timezone in '-DS_TIMEZONE' ''; do
10231         sysselect=''
10232         for s_timeval in '-DS_TIMEVAL' ''; do
10233         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10234         for i_time in '' '-DI_TIME'; do
10235         for i_systime in '-DI_SYSTIME' ''; do
10236                 case "$flags" in
10237                 '') $echo $n ".$c"
10238                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10239                         if eval $compile; then
10240                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10241                                 shift
10242                                 flags="$*"
10243                                 echo " "
10244                                 $echo $n "Succeeded with $flags$c"
10245                         fi
10246                         ;;
10247                 esac
10248         done
10249         done
10250         done
10251         done
10252         done
10253         timeincl=''
10254         echo " "
10255         case "$flags" in
10256         *SYSTIMEKERNEL*) i_systimek="$define"
10257                 timeincl=`./findhdr sys/time.h`
10258                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10259         *) i_systimek="$undef";;
10260         esac
10261         case "$flags" in
10262         *I_TIME*) i_time="$define"
10263                 timeincl=`./findhdr time.h`" $timeincl"
10264                 echo "We'll include <time.h>." >&4;;
10265         *) i_time="$undef";;
10266         esac
10267         case "$flags" in
10268         *I_SYSTIME*) i_systime="$define"
10269                 timeincl=`./findhdr sys/time.h`" $timeincl"
10270                 echo "We'll include <sys/time.h>." >&4;;
10271         *) i_systime="$undef";;
10272         esac
10273         $rm -f try.c try
10274 fi
10275
10276 : check for fd_set items
10277 $cat <<EOM
10278
10279 Checking to see how well your C compiler handles fd_set and friends ...
10280 EOM
10281 $cat >try.c <<EOCP
10282 #$i_systime I_SYS_TIME
10283 #$i_sysselct I_SYS_SELECT
10284 #$d_socket HAS_SOCKET
10285 #include <sys/types.h>
10286 #ifdef HAS_SOCKET
10287 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10288 #endif
10289 #ifdef I_SYS_TIME
10290 #include <sys/time.h>
10291 #endif
10292 #ifdef I_SYS_SELECT
10293 #include <sys/select.h>
10294 #endif
10295 int main() {
10296         fd_set fds;
10297
10298 #ifdef TRYBITS
10299         if(fds.fds_bits);
10300 #endif
10301
10302 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10303         exit(0);
10304 #else
10305         exit(1);
10306 #endif
10307 }
10308 EOCP
10309 set try -DTRYBITS
10310 if eval $compile; then
10311         d_fds_bits="$define"
10312         d_fd_set="$define"
10313         echo "Well, your system knows about the normal fd_set typedef..." >&4
10314         if $run ./try; then
10315                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10316                 d_fd_macros="$define"
10317         else
10318                 $cat >&4 <<'EOM'
10319 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10320 EOM
10321                 d_fd_macros="$undef"
10322         fi
10323 else
10324         $cat <<'EOM'
10325 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10326 EOM
10327         set try
10328         if eval $compile; then
10329                 d_fds_bits="$undef"
10330                 d_fd_set="$define"
10331                 echo "Well, your system has some sort of fd_set available..." >&4
10332                 if $run ./try; then
10333                         echo "and you have the normal fd_set macros." >&4
10334                         d_fd_macros="$define"
10335                 else
10336                         $cat <<'EOM'
10337 but not the normal fd_set macros!  Gross!  More work for me...
10338 EOM
10339                         d_fd_macros="$undef"
10340                 fi
10341         else
10342         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10343                 d_fd_set="$undef"
10344                 d_fds_bits="$undef"
10345                 d_fd_macros="$undef"
10346         fi
10347 fi
10348 $rm -f try try.*
10349
10350 : see if fgetpos exists
10351 set fgetpos d_fgetpos
10352 eval $inlibc
10353
10354 : see if finite exists
10355 set finite d_finite
10356 eval $inlibc
10357
10358 : see if finitel exists
10359 set finitel d_finitel
10360 eval $inlibc
10361
10362 : see if flock exists
10363 set flock d_flock
10364 eval $inlibc
10365
10366 : see if prototype for flock is available
10367 echo " "
10368 set d_flockproto flock $i_sysfile sys/file.h
10369 eval $hasproto
10370
10371 : see if fork exists
10372 set fork d_fork
10373 eval $inlibc
10374
10375 : see if fp_class exists
10376 set fp_class d_fp_class
10377 eval $inlibc
10378
10379 : see if pathconf exists
10380 set pathconf d_pathconf
10381 eval $inlibc
10382
10383 : see if fpathconf exists
10384 set fpathconf d_fpathconf
10385 eval $inlibc
10386
10387 : see if fpclass exists
10388 set fpclass d_fpclass
10389 eval $inlibc
10390
10391 : see if fpclassify exists
10392 set fpclassify d_fpclassify
10393 eval $inlibc
10394
10395 : see if fpclassl exists
10396 set fpclassl d_fpclassl
10397 eval $inlibc
10398
10399
10400 : check for fpos64_t
10401 echo " "
10402 echo "Checking to see if you have fpos64_t..." >&4
10403 $cat >try.c <<EOCP
10404 #include <stdio.h>
10405 int main() { fpos64_t x = 7; }
10406 EOCP
10407 set try
10408 if eval $compile; then
10409         val="$define"
10410         echo "You have fpos64_t."
10411 else
10412         val="$undef"
10413         echo "You do not have fpos64_t."
10414         case "$fpossize" in
10415         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10416         esac
10417 fi
10418 $rm -f try.* try
10419 set d_fpos64_t
10420 eval $setvar
10421
10422 : see if frexpl exists
10423 set frexpl d_frexpl
10424 eval $inlibc
10425
10426 : see if this is a sys/param system
10427 set sys/param.h i_sysparam
10428 eval $inhdr
10429
10430 : see if this is a sys/mount.h system
10431 set sys/mount.h i_sysmount
10432 eval $inhdr
10433
10434
10435 echo " "
10436 echo "Checking to see if your system supports struct fs_data..." >&4
10437 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10438 eval $hasstruct
10439 case "$d_fs_data_s" in
10440 "$define")      echo "Yes, it does."   ;;
10441 *)              echo "No, it doesn't." ;;
10442 esac
10443
10444 : see if fseeko exists
10445 set fseeko d_fseeko
10446 eval $inlibc
10447 case "$longsize" in
10448 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10449 esac
10450
10451 : see if fsetpos exists
10452 set fsetpos d_fsetpos
10453 eval $inlibc
10454
10455
10456 : see if fstatfs exists
10457 set fstatfs d_fstatfs
10458 eval $inlibc
10459
10460
10461 : see if statvfs exists
10462 set statvfs d_statvfs
10463 eval $inlibc
10464
10465 : see if fstatvfs exists
10466 set fstatvfs d_fstatvfs
10467 eval $inlibc
10468
10469
10470 : see if fsync exists
10471 set fsync d_fsync
10472 eval $inlibc
10473
10474 : see if ftello exists
10475 set ftello d_ftello
10476 eval $inlibc
10477 case "$longsize" in
10478 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10479 esac
10480
10481 : see if getcwd exists
10482 set getcwd d_getcwd
10483 eval $inlibc
10484
10485 : see if getespwnam exists
10486 set getespwnam d_getespwnam
10487 eval $inlibc
10488
10489
10490 : see if getfsstat exists
10491 set getfsstat d_getfsstat
10492 eval $inlibc
10493
10494 : see if getgrent exists
10495 set getgrent d_getgrent
10496 eval $inlibc
10497
10498 : see if gethostbyaddr exists
10499 set gethostbyaddr d_gethbyaddr
10500 eval $inlibc
10501
10502 : see if gethostbyname exists
10503 set gethostbyname d_gethbyname
10504 eval $inlibc
10505
10506 : see if gethostent exists
10507 set gethostent d_gethent
10508 eval $inlibc
10509
10510 : see how we will look up host name
10511 echo " "
10512 call=''
10513 if set gethostname val -f d_gethname; eval $csym; $val; then
10514         echo 'gethostname() found.' >&4
10515         d_gethname="$define"
10516         call=gethostname
10517 fi
10518 if set uname val -f d_uname; eval $csym; $val; then
10519         if ./xenix; then
10520                 $cat <<'EOM'
10521 uname() was found, but you're running xenix, and older versions of xenix
10522 have a broken uname(). If you don't really know whether your xenix is old
10523 enough to have a broken system call, use the default answer.
10524
10525 EOM
10526                 dflt=y
10527                 case "$d_uname" in
10528                 "$define") dflt=n;;
10529                 esac
10530                 rp='Is your uname() broken?'
10531                 . ./myread
10532                 case "$ans" in
10533                 n*) d_uname="$define"; call=uname;;
10534                 esac
10535         else
10536                 echo 'uname() found.' >&4
10537                 d_uname="$define"
10538                 case "$call" in
10539                 '') call=uname ;;
10540                 esac
10541         fi
10542 fi
10543 case "$d_gethname" in
10544 '') d_gethname="$undef";;
10545 esac
10546 case "$d_uname" in
10547 '') d_uname="$undef";;
10548 esac
10549 case "$d_uname$d_gethname" in
10550 *define*)
10551         dflt=n
10552         cat <<EOM
10553  
10554 Every now and then someone has a $call() that lies about the hostname
10555 but can't be fixed for political or economic reasons.  If you wish, I can
10556 pretend $call() isn't there and maybe compute hostname at run-time
10557 thanks to the '$phostname' command.
10558
10559 EOM
10560         rp="Shall I ignore $call() from now on?"
10561         . ./myread
10562         case "$ans" in
10563         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10564         esac;;
10565 esac
10566 case "$phostname" in
10567 '') aphostname='';;
10568 *) case "$aphostname" in
10569         /*) ;;
10570         *) set X $phostname
10571                 shift
10572                 file=$1
10573                 shift
10574                 file=`./loc $file $file $pth`
10575                 aphostname=`echo $file $*`
10576                 ;;
10577         esac
10578         ;;
10579 esac
10580 case "$d_uname$d_gethname" in
10581 *define*) ;;
10582 *)
10583         case "$phostname" in
10584         '')
10585                 echo "There will be no way for $package to get your hostname." >&4;;
10586         *)
10587         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10588                 ;;
10589         esac;;
10590 esac
10591 case "$d_phostname" in
10592 '') d_phostname="$undef";;
10593 esac
10594
10595 : see if this is a netdb.h system
10596 set netdb.h i_netdb
10597 eval $inhdr
10598
10599 : see if prototypes for various gethostxxx netdb.h functions are available
10600 echo " "
10601 set d_gethostprotos gethostent $i_netdb netdb.h
10602 eval $hasproto
10603
10604 : see if getitimer exists
10605 set getitimer d_getitimer
10606 eval $inlibc
10607
10608 : see if getlogin exists
10609 set getlogin d_getlogin
10610 eval $inlibc
10611
10612 : see if getmnt exists
10613 set getmnt d_getmnt
10614 eval $inlibc
10615
10616 : see if getmntent exists
10617 set getmntent d_getmntent
10618 eval $inlibc
10619
10620 : see if getnetbyaddr exists
10621 set getnetbyaddr d_getnbyaddr
10622 eval $inlibc
10623
10624 : see if getnetbyname exists
10625 set getnetbyname d_getnbyname
10626 eval $inlibc
10627
10628 : see if getnetent exists
10629 set getnetent d_getnent
10630 eval $inlibc
10631
10632 : see if prototypes for various getnetxxx netdb.h functions are available
10633 echo " "
10634 set d_getnetprotos getnetent $i_netdb netdb.h
10635 eval $hasproto
10636
10637 : see if getpagesize exists
10638 set getpagesize d_getpagsz
10639 eval $inlibc
10640
10641
10642 : see if getprotobyname exists
10643 set getprotobyname d_getpbyname
10644 eval $inlibc
10645
10646 : see if getprotobynumber exists
10647 set getprotobynumber d_getpbynumber
10648 eval $inlibc
10649
10650 : see if getprotoent exists
10651 set getprotoent d_getpent
10652 eval $inlibc
10653
10654 : see if getpgid exists
10655 set getpgid d_getpgid
10656 eval $inlibc
10657
10658 : see if getpgrp2 exists
10659 set getpgrp2 d_getpgrp2
10660 eval $inlibc
10661
10662 : see if getppid exists
10663 set getppid d_getppid
10664 eval $inlibc
10665
10666 : see if getpriority exists
10667 set getpriority d_getprior
10668 eval $inlibc
10669
10670 : see if prototypes for various getprotoxxx netdb.h functions are available
10671 echo " "
10672 set d_getprotoprotos getprotoent $i_netdb netdb.h
10673 eval $hasproto
10674
10675 : see if getprpwnam exists
10676 set getprpwnam d_getprpwnam
10677 eval $inlibc
10678
10679 : see if getpwent exists
10680 set getpwent d_getpwent
10681 eval $inlibc
10682
10683
10684 : see if getservbyname exists
10685 set getservbyname d_getsbyname
10686 eval $inlibc
10687
10688 : see if getservbyport exists
10689 set getservbyport d_getsbyport
10690 eval $inlibc
10691
10692 : see if getservent exists
10693 set getservent d_getsent
10694 eval $inlibc
10695
10696 : see if prototypes for various getservxxx netdb.h functions are available
10697 echo " "
10698 set d_getservprotos getservent $i_netdb netdb.h
10699 eval $hasproto
10700
10701 : see if getspnam exists
10702 set getspnam d_getspnam
10703 eval $inlibc
10704
10705 : see if gettimeofday or ftime exists
10706 set gettimeofday d_gettimeod
10707 eval $inlibc
10708 case "$d_gettimeod" in
10709 "$undef")
10710         set ftime d_ftime 
10711         eval $inlibc
10712         ;;
10713 *)
10714         val="$undef"; set d_ftime; eval $setvar
10715         ;;
10716 esac
10717 case "$d_gettimeod$d_ftime" in
10718 "$undef$undef")
10719         echo " "
10720         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10721         ;;
10722 esac
10723
10724 : see if this is an grp system
10725 set grp.h i_grp
10726 eval $inhdr
10727
10728 case "$i_grp" in
10729 $define)
10730         xxx=`./findhdr grp.h`
10731         $cppstdin $cppflags $cppminus < $xxx >$$.h
10732
10733         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10734                 val="$define"
10735         else
10736                 val="$undef"
10737         fi
10738         set d_grpasswd
10739         eval $setvar
10740
10741         $rm -f $$.h
10742         ;;
10743 *)
10744         val="$undef";
10745         set d_grpasswd; eval $setvar
10746         ;;
10747 esac
10748
10749 : see if hasmntopt exists
10750 set hasmntopt d_hasmntopt
10751 eval $inlibc
10752
10753 : see if this is a netinet/in.h or sys/in.h system
10754 set netinet/in.h i_niin sys/in.h i_sysin
10755 eval $inhdr
10756
10757 : see if arpa/inet.h has to be included
10758 set arpa/inet.h i_arpainet
10759 eval $inhdr
10760
10761 : see if htonl --and friends-- exists
10762 val=''
10763 set htonl val
10764 eval $inlibc
10765
10766 : Maybe they are macros.
10767 case "$val" in
10768 $undef)
10769         $cat >htonl.c <<EOM
10770 #include <stdio.h>
10771 #include <sys/types.h>
10772 #$i_niin I_NETINET_IN
10773 #$i_sysin I_SYS_IN
10774 #$i_arpainet I_ARPA_INET
10775 #ifdef I_NETINET_IN
10776 #include <netinet/in.h>
10777 #endif
10778 #ifdef I_SYS_IN
10779 #include <sys/in.h>
10780 #endif
10781 #ifdef I_ARPA_INET
10782 #include <arpa/inet.h>
10783 #endif
10784 #ifdef htonl
10785 printf("Defined as a macro.");
10786 #endif
10787 EOM
10788         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10789         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10790                 val="$define"
10791                 echo "But it seems to be defined as a macro." >&4
10792         fi
10793         $rm -f htonl.?
10794         ;;
10795 esac
10796 set d_htonl
10797 eval $setvar
10798
10799 : index or strchr
10800 echo " "
10801 if set index val -f; eval $csym; $val; then
10802         if set strchr val -f d_strchr; eval $csym; $val; then
10803                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10804                         val="$define"
10805                         vali="$undef"
10806                         echo "strchr() found." >&4
10807                 else
10808                         val="$undef"
10809                         vali="$define"
10810                         echo "index() found." >&4
10811                 fi
10812         else
10813                 val="$undef"
10814                 vali="$define"
10815                 echo "index() found." >&4
10816         fi
10817 else
10818         if set strchr val -f d_strchr; eval $csym; $val; then
10819                 val="$define"
10820                 vali="$undef"
10821                 echo "strchr() found." >&4
10822         else
10823                 echo "No index() or strchr() found!" >&4
10824                 val="$undef"
10825                 vali="$undef"
10826         fi
10827 fi
10828 set d_strchr; eval $setvar
10829 val="$vali"
10830 set d_index; eval $setvar
10831
10832 : check whether inet_aton exists
10833 set inet_aton d_inetaton
10834 eval $inlibc
10835
10836 : Look for isascii
10837 echo " "
10838 $cat >isascii.c <<'EOCP'
10839 #include <stdio.h>
10840 #include <ctype.h>
10841 int main() {
10842         int c = 'A';
10843         if (isascii(c))
10844                 exit(0);
10845         else
10846                 exit(1);
10847 }
10848 EOCP
10849 set isascii
10850 if eval $compile; then
10851         echo "isascii() found." >&4
10852         val="$define"
10853 else
10854         echo "isascii() NOT found." >&4
10855         val="$undef"
10856 fi
10857 set d_isascii
10858 eval $setvar
10859 $rm -f isascii*
10860
10861 : see if isfinite exists
10862 set isfinite d_isfinite
10863 eval $inlibc
10864
10865 : see if isinf exists
10866 set isinf d_isinf
10867 eval $inlibc
10868
10869 : see if isnan exists
10870 set isnan d_isnan
10871 eval $inlibc
10872
10873 : see if isnanl exists
10874 set isnanl d_isnanl
10875 eval $inlibc
10876
10877 : see if killpg exists
10878 set killpg d_killpg
10879 eval $inlibc
10880
10881 : see if lchown exists
10882 echo " "
10883 $cat > try.c <<'EOCP'
10884 /* System header to define __stub macros and hopefully few prototypes,
10885     which can conflict with char lchown(); below.  */
10886 #include <assert.h>
10887 /* Override any gcc2 internal prototype to avoid an error.  */
10888 /* We use char because int might match the return type of a gcc2
10889    builtin and then its argument prototype would still apply.  */
10890 char lchown();
10891 int main() {
10892     /*  The GNU C library defines this for functions which it implements
10893         to always fail with ENOSYS.  Some functions are actually named
10894         something starting with __ and the normal name is an alias.  */
10895 #if defined (__stub_lchown) || defined (__stub___lchown)
10896 choke me
10897 #else
10898 lchown();
10899 #endif
10900 ; return 0; }
10901 EOCP
10902 set try
10903 if eval $compile; then
10904     $echo "lchown() found." >&4
10905     val="$define"
10906 else
10907     $echo "lchown() NOT found." >&4
10908     val="$undef"
10909 fi
10910 set d_lchown
10911 eval $setvar
10912
10913 : See if number of significant digits in a double precision number is known
10914 echo " "
10915 $cat >ldbl_dig.c <<EOM
10916 #$i_limits I_LIMITS
10917 #$i_float I_FLOAT
10918 #ifdef I_LIMITS
10919 #include <limits.h>
10920 #endif
10921 #ifdef I_FLOAT
10922 #include <float.h>
10923 #endif
10924 #ifdef LDBL_DIG
10925 printf("Contains LDBL_DIG");
10926 #endif
10927 EOM
10928 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10929 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10930         echo "LDBL_DIG found." >&4
10931         val="$define"
10932 else
10933         echo "LDBL_DIG NOT found." >&4
10934         val="$undef"
10935 fi
10936 $rm -f ldbl_dig.?
10937 set d_ldbl_dig
10938 eval $setvar
10939
10940 : see if link exists
10941 set link d_link
10942 eval $inlibc
10943
10944 : see if localeconv exists
10945 set localeconv d_locconv
10946 eval $inlibc
10947
10948 : see if lockf exists
10949 set lockf d_lockf
10950 eval $inlibc
10951
10952 : see if prototype for lseek is available
10953 echo " "
10954 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10955 eval $hasproto
10956
10957 : see if lstat exists
10958 set lstat d_lstat
10959 eval $inlibc
10960
10961 : see if madvise exists
10962 set madvise d_madvise
10963 eval $inlibc
10964
10965 : see if mblen exists
10966 set mblen d_mblen
10967 eval $inlibc
10968
10969 : see if mbstowcs exists
10970 set mbstowcs d_mbstowcs
10971 eval $inlibc
10972
10973 : see if mbtowc exists
10974 set mbtowc d_mbtowc
10975 eval $inlibc
10976
10977 : see if memchr exists
10978 set memchr d_memchr
10979 eval $inlibc
10980
10981 : see if memcmp exists
10982 set memcmp d_memcmp
10983 eval $inlibc
10984
10985 : see if memcpy exists
10986 set memcpy d_memcpy
10987 eval $inlibc
10988
10989 : see if memmove exists
10990 set memmove d_memmove
10991 eval $inlibc
10992
10993 : see if memset exists
10994 set memset d_memset
10995 eval $inlibc
10996
10997 : see if mkdir exists
10998 set mkdir d_mkdir
10999 eval $inlibc
11000
11001 : see if mkdtemp exists
11002 set mkdtemp d_mkdtemp
11003 eval $inlibc
11004
11005 : see if mkfifo exists
11006 set mkfifo d_mkfifo
11007 eval $inlibc
11008
11009 : see if mkstemp exists
11010 set mkstemp d_mkstemp
11011 eval $inlibc
11012
11013 : see if mkstemps exists
11014 set mkstemps d_mkstemps
11015 eval $inlibc
11016
11017 : see if mktime exists
11018 set mktime d_mktime
11019 eval $inlibc
11020
11021 : see if this is a sys/mman.h system
11022 set sys/mman.h i_sysmman
11023 eval $inhdr
11024
11025 : see if mmap exists
11026 set mmap d_mmap
11027 eval $inlibc
11028 : see what shmat returns
11029 : default to something harmless
11030 mmaptype='void *'
11031 case "$i_sysmman$d_mmap" in
11032 "$define$define")
11033         $cat >mmap.c <<'END'
11034 #include <sys/mman.h>
11035 void *mmap();
11036 END
11037         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11038                 mmaptype='void *'
11039         else
11040                 mmaptype='caddr_t'
11041         fi
11042         echo "and it returns ($mmaptype)." >&4
11043         ;;
11044 esac
11045
11046
11047
11048 : see if modfl exists
11049 set modfl d_modfl
11050 eval $inlibc
11051
11052 d_modfl_pow32_bug="$undef"
11053
11054 case "$d_longdbl$d_modfl" in
11055 $define$define)
11056         $cat <<EOM
11057 Checking to see whether your modfl() is okay for large values...
11058 EOM
11059 $cat >try.c <<EOCP
11060 #include <math.h> 
11061 #include <stdio.h>
11062 int main() {
11063     long double nv = 4294967303.15;
11064     long double v, w;
11065     v = modfl(nv, &w);         
11066 #ifdef __GLIBC__
11067     printf("glibc");
11068 #endif
11069     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
11070     return 0;
11071 }
11072 EOCP
11073         case "$osname:$gccversion" in
11074         aix:)   saveccflags="$ccflags"
11075                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
11076         esac
11077         set try
11078         if eval $compile; then
11079                 foo=`$run ./try`
11080                 case "$foo" in
11081                 *" 4294967303.150000 1.150000 4294967302.000000")
11082                         echo >&4 "Your modfl() is broken for large values."
11083                         d_modfl_pow32_bug="$define"
11084                         case "$foo" in
11085                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11086                         ;;
11087                         esac
11088                         ;;
11089                 *" 4294967303.150000 0.150000 4294967303.000000")
11090                         echo >&4 "Your modfl() seems okay for large values."
11091                         ;;
11092                 *)      echo >&4 "I don't understand your modfl() at all."
11093                         d_modfl="$undef"
11094                         ;;
11095                 esac
11096                 $rm -f try.* try core core.try.*
11097         else
11098                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11099                 d_modfl="$undef"
11100         fi
11101         case "$osname:$gccversion" in
11102         aix:)   ccflags="$saveccflags" ;; # restore
11103         esac
11104         ;;
11105 esac
11106
11107 : see if mprotect exists
11108 set mprotect d_mprotect
11109 eval $inlibc
11110
11111 : see if msgctl exists
11112 set msgctl d_msgctl
11113 eval $inlibc
11114
11115 : see if msgget exists
11116 set msgget d_msgget
11117 eval $inlibc
11118
11119 : see if msgsnd exists
11120 set msgsnd d_msgsnd
11121 eval $inlibc
11122
11123 : see if msgrcv exists
11124 set msgrcv d_msgrcv
11125 eval $inlibc
11126
11127 : see how much of the 'msg*(2)' library is present.
11128 h_msg=true
11129 echo " "
11130 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11131 *"$undef"*) h_msg=false;;
11132 esac
11133 case "$osname" in
11134 freebsd)
11135     case "`ipcs 2>&1`" in
11136     "SVID messages"*"not configured"*)
11137         echo "Your $osname does not have the msg*(2) configured." >&4
11138         h_msg=false
11139         val="$undef"
11140         set msgctl d_msgctl
11141         eval $setvar
11142         set msgget d_msgget
11143         eval $setvar
11144         set msgsnd d_msgsnd
11145         eval $setvar
11146         set msgrcv d_msgrcv
11147         eval $setvar
11148         ;;
11149     esac
11150     ;;
11151 esac
11152 : we could also check for sys/ipc.h ...
11153 if $h_msg && $test `./findhdr sys/msg.h`; then
11154         echo "You have the full msg*(2) library." >&4
11155         val="$define"
11156 else
11157         echo "You don't have the full msg*(2) library." >&4
11158         val="$undef"
11159 fi
11160 set d_msg
11161 eval $setvar
11162
11163
11164 echo " "
11165 echo "Checking to see if your system supports struct msghdr..." >&4
11166 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11167 eval $hasstruct
11168 case "$d_msghdr_s" in
11169 "$define")      echo "Yes, it does."   ;;
11170 *)              echo "No, it doesn't." ;;
11171 esac
11172
11173
11174 : see if msync exists
11175 set msync d_msync
11176 eval $inlibc
11177
11178 : see if munmap exists
11179 set munmap d_munmap
11180 eval $inlibc
11181
11182 : see if nice exists
11183 set nice d_nice
11184 eval $inlibc
11185
11186 : see if this is a langinfo.h system
11187 set langinfo.h i_langinfo
11188 eval $inhdr
11189
11190 : see if nl_langinfo exists
11191 set nl_langinfo d_nl_langinfo
11192 eval $inlibc
11193
11194 : check for length of character
11195 echo " "
11196 case "$charsize" in
11197 '')
11198         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11199         $cat >try.c <<'EOCP'
11200 #include <stdio.h>
11201 int main()
11202 {
11203     printf("%d\n", (int)sizeof(char));
11204     exit(0);
11205 }
11206 EOCP
11207         set try
11208         if eval $compile_ok; then
11209                 dflt=`$run ./try`
11210         else
11211                 dflt='1'
11212                 echo "(I can't seem to compile the test program.  Guessing...)"
11213         fi
11214         ;;
11215 *)
11216         dflt="$charsize"
11217         ;;
11218 esac
11219 rp="What is the size of a character (in bytes)?"
11220 . ./myread
11221 charsize="$ans"
11222 $rm -f try.c try
11223
11224 : check for volatile keyword
11225 echo " "
11226 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11227 $cat >try.c <<'EOCP'
11228 int main()
11229 {
11230         typedef struct _goo_struct goo_struct;
11231         goo_struct * volatile goo = ((goo_struct *)0);
11232         struct _goo_struct {
11233                 long long_int;
11234                 int reg_int;
11235                 char char_var;
11236         };
11237         typedef unsigned short foo_t;
11238         char *volatile foo;
11239         volatile int bar;
11240         volatile foo_t blech;
11241         foo = foo;
11242 }
11243 EOCP
11244 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11245         val="$define"
11246         echo "Yup, it does."
11247 else
11248         val="$undef"
11249         echo "Nope, it doesn't."
11250 fi
11251 set d_volatile
11252 eval $setvar
11253 $rm -f try.*
11254
11255
11256 echo " "
11257 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11258
11259 case "$use64bitint:$d_quad:$quadtype" in
11260 define:define:?*)
11261         ivtype="$quadtype"
11262         uvtype="$uquadtype"
11263         ivsize=8
11264         uvsize=8
11265         ;;
11266 *)      ivtype="long"
11267         uvtype="unsigned long"
11268         ivsize=$longsize
11269         uvsize=$longsize
11270         ;;
11271 esac
11272
11273 case "$uselongdouble:$d_longdbl" in
11274 define:define)
11275         nvtype="long double"
11276         nvsize=$longdblsize
11277         ;;
11278 *)      nvtype=double
11279         nvsize=$doublesize
11280         ;;
11281 esac
11282
11283 $echo "(IV will be "$ivtype", $ivsize bytes)"
11284 $echo "(UV will be "$uvtype", $uvsize bytes)"
11285 $echo "(NV will be "$nvtype", $nvsize bytes)"
11286
11287 $cat >try.c <<EOCP
11288 #$i_inttypes I_INTTYPES
11289 #ifdef I_INTTYPES
11290 #include <inttypes.h>
11291 #endif
11292 #include <stdio.h>
11293 int main() {
11294 #ifdef INT8
11295    int8_t i =  INT8_MAX;
11296   uint8_t u = UINT8_MAX;
11297   printf("int8_t\n");
11298 #endif
11299 #ifdef INT16
11300    int16_t i =  INT16_MAX;
11301   uint16_t i = UINT16_MAX;
11302   printf("int16_t\n");
11303 #endif
11304 #ifdef INT32
11305    int32_t i =  INT32_MAX;
11306   uint32_t u = UINT32_MAX;
11307   printf("int32_t\n");
11308 #endif
11309 }
11310 EOCP
11311
11312 case "$i8type" in
11313 '')     case "$charsize" in
11314         1)      i8type=char
11315                 u8type="unsigned char"
11316                 i8size=$charsize
11317                 u8size=$charsize
11318                 ;;
11319         esac
11320         ;;
11321 esac
11322 case "$i8type" in
11323 '')     set try -DINT8
11324         if eval $compile; then
11325                 case "`$run ./try`" in
11326                 int8_t) i8type=int8_t
11327                         u8type=uint8_t
11328                         i8size=1
11329                         u8size=1
11330                         ;;
11331                 esac
11332         fi
11333         ;;
11334 esac
11335 case "$i8type" in
11336 '')     if $test $charsize -ge 1; then
11337                 i8type=char
11338                 u8type="unsigned char"
11339                 i8size=$charsize
11340                 u8size=$charsize
11341         fi
11342         ;;
11343 esac
11344
11345 case "$i16type" in
11346 '')     case "$shortsize" in
11347         2)      i16type=short
11348                 u16type="unsigned short"
11349                 i16size=$shortsize
11350                 u16size=$shortsize
11351                 ;;
11352         esac
11353         ;;
11354 esac
11355 case "$i16type" in
11356 '')     set try -DINT16
11357         if eval $compile; then
11358                 case "`$run ./try`" in
11359                 int16_t)
11360                         i16type=int16_t
11361                         u16type=uint16_t
11362                         i16size=2
11363                         u16size=2
11364                         ;;
11365                 esac
11366         fi
11367         ;;
11368 esac
11369 case "$i16type" in
11370 '')     if $test $shortsize -ge 2; then
11371                 i16type=short
11372                 u16type="unsigned short"
11373                 i16size=$shortsize
11374                 u16size=$shortsize
11375         fi
11376         ;;
11377 esac
11378
11379 case "$i32type" in
11380 '')     case "$longsize" in
11381         4)      i32type=long
11382                 u32type="unsigned long"
11383                 i32size=$longsize
11384                 u32size=$longsize
11385                 ;;
11386         *)      case "$intsize" in
11387                 4)      i32type=int
11388                         u32type="unsigned int"
11389                         i32size=$intsize
11390                         u32size=$intsize
11391                         ;;
11392                 esac
11393                 ;;
11394         esac
11395         ;;
11396 esac
11397 case "$i32type" in
11398 '')     set try -DINT32
11399         if eval $compile; then
11400                 case "`$run ./try`" in
11401                 int32_t)
11402                         i32type=int32_t
11403                         u32type=uint32_t
11404                         i32size=4
11405                         u32size=4
11406                         ;;
11407                 esac
11408         fi
11409         ;;
11410 esac
11411 case "$i32type" in
11412 '')     if $test $intsize -ge 4; then
11413                 i32type=int
11414                 u32type="unsigned int"
11415                 i32size=$intsize
11416                 u32size=$intsize
11417         fi
11418         ;;
11419 esac
11420
11421 case "$i64type" in
11422 '')     case "$d_quad:$quadtype" in
11423         define:?*)
11424                 i64type="$quadtype"
11425                 u64type="$uquadtype"
11426                 i64size=8
11427                 u64size=8
11428                 ;;
11429         esac
11430         ;;
11431 esac
11432
11433 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11434 : volatile so that the compiler has to store it out to memory.
11435 if test X"$d_volatile" = X"$define"; then
11436         volatile=volatile
11437 fi
11438 $cat <<EOP >try.c
11439 #include <stdio.h>
11440 #include <sys/types.h>
11441 #include <signal.h>
11442 #ifdef SIGFPE
11443 $volatile int bletched = 0;
11444 $signal_t blech(s) int s; { bletched = 1; }
11445 #endif
11446 int main() {
11447     $uvtype u = 0;
11448     $nvtype d;
11449     int     n = 8 * $uvsize;
11450     int     i;
11451 #ifdef SIGFPE
11452     signal(SIGFPE, blech);
11453 #endif
11454
11455     for (i = 0; i < n; i++) {
11456       u = u << 1 | ($uvtype)1;
11457       d = ($nvtype)u;
11458       if (($uvtype)d != u)
11459         break;
11460       if (d <= 0)
11461         break;
11462       d = ($nvtype)(u - 1);
11463       if (($uvtype)d != (u - 1))
11464         break;
11465 #ifdef SIGFPE
11466       if (bletched) {
11467         break;
11468 #endif
11469       } 
11470     }
11471     printf("%d\n", ((i == n) ? -n : i));
11472     exit(0);
11473 }
11474 EOP
11475 set try
11476
11477 d_nv_preserves_uv="$undef"
11478 if eval $compile; then
11479         d_nv_preserves_uv_bits="`$run ./try`"
11480 fi
11481 case "$d_nv_preserves_uv_bits" in
11482 \-[1-9]*)       
11483         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11484         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11485         d_nv_preserves_uv="$define"
11486         ;;
11487 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11488         d_nv_preserves_uv="$undef" ;;
11489 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11490         d_nv_preserves_uv_bits="$undef" ;;
11491 esac
11492
11493 $rm -f try.* try
11494
11495
11496 : check for off64_t
11497 echo " "
11498 echo "Checking to see if you have off64_t..." >&4
11499 $cat >try.c <<EOCP
11500 #include <sys/types.h>
11501 #include <unistd.h>
11502 int main() { off64_t x = 7; }
11503 EOCP
11504 set try
11505 if eval $compile; then
11506         val="$define"
11507         echo "You have off64_t."
11508 else
11509         val="$undef"
11510         echo "You do not have off64_t."
11511         case "$lseeksize" in
11512         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11513         esac
11514 fi
11515 $rm -f try.* try
11516 set d_off64_t
11517 eval $setvar
11518
11519 : see if POSIX threads are available
11520 set pthread.h i_pthread
11521 eval $inhdr
11522
11523
11524
11525
11526 : how to create joinable pthreads
11527 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11528         echo " "
11529         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11530         $cat >try.c <<'EOCP'
11531 #include <pthread.h>
11532 int main() {
11533     int detachstate = JOINABLE;
11534 }
11535 EOCP
11536         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11537         if eval $compile; then
11538                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11539                 val="$undef" # Yes, undef.
11540                 set d_old_pthread_create_joinable
11541                 eval $setvar
11542                 val=""
11543                 set old_pthread_create_joinable
11544                 eval $setvar
11545         else
11546                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11547                 if eval $compile; then
11548                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11549                         val="$define"
11550                         set d_old_pthread_create_joinable
11551                         eval $setvar
11552                         val=PTHREAD_CREATE_UNDETACHED
11553                         set old_pthread_create_joinable
11554                         eval $setvar
11555                 else            
11556                         set try -DJOINABLE=__UNDETACHED
11557                         if eval $compile; then
11558                                 echo "You seem to use __UNDETACHED." >&4
11559                                 val="$define"
11560                                 set d_old_pthread_create_joinable
11561                                 eval $setvar
11562                                 val=__UNDETACHED
11563                                 set old_pthread_create_joinable
11564                                 eval $setvar
11565                         else
11566                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11567                                 val="$define"
11568                                 set d_old_pthread_create_joinable
11569                                 eval $setvar
11570                                 val=0
11571                                 set old_pthread_create_joinable
11572                                 eval $setvar
11573                         fi
11574                 fi
11575         fi
11576         $rm -f try try.*
11577 else
11578     d_old_pthread_create_joinable="$undef"
11579     old_pthread_create_joinable=""
11580 fi
11581
11582 : see if pause exists
11583 set pause d_pause
11584 eval $inlibc
11585
11586 : see if pipe exists
11587 set pipe d_pipe
11588 eval $inlibc
11589
11590 : see if poll exists
11591 set poll d_poll
11592 eval $inlibc
11593
11594 : see if readlink exists
11595 set readlink d_readlink
11596 eval $inlibc
11597
11598 echo " "
11599 procselfexe=''
11600 val="$undef"
11601 case "$d_readlink" in
11602 "$define")
11603         if $issymlink /proc/self/exe ; then
11604                 $ls -l /proc/self/exe > reflect
11605                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11606                         echo "You have Linux-like /proc/self/exe."
11607                         procselfexe='"/proc/self/exe"'
11608                         val="$define"
11609                 fi
11610         fi
11611         if $issymlink /proc/curproc/file ; then
11612                 $ls -l /proc/curproc/file > reflect
11613                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11614                         echo "You have BSD-like /proc/curproc/file."
11615                         procselfexe='"/proc/curproc/file"'
11616                         val="$define"
11617                 fi
11618         fi
11619         ;;
11620 esac
11621 $rm -f reflect
11622 set d_procselfexe
11623 eval $setvar
11624
11625 : see if pthread_atfork exists
11626 set pthread_atfork d_pthread_atfork
11627 eval $inlibc
11628
11629
11630 : see whether the various POSIXish _yields exist
11631 $cat >try.c <<EOP
11632 #include <pthread.h>
11633 #include <stdio.h>
11634 int main() {
11635 #ifdef SCHED_YIELD
11636         sched_yield();
11637 #else
11638 #ifdef PTHREAD_YIELD
11639         pthread_yield();
11640 #else
11641 #ifdef PTHREAD_YIELD_NULL
11642         pthread_yield(NULL);
11643 #endif
11644 #endif
11645 #endif
11646 }
11647 EOP
11648 : see if sched_yield exists
11649 set try -DSCHED_YIELD
11650 if eval $compile; then
11651     val="$define"
11652     sched_yield='sched_yield()'
11653 else
11654     val="$undef"
11655 fi
11656 case "$usethreads" in
11657 $define)
11658         case "$val" in
11659         $define) echo 'sched_yield() found.' >&4        ;;
11660         *)       echo 'sched_yield() NOT found.' >&4    ;;
11661         esac
11662 esac
11663 set d_sched_yield
11664 eval $setvar
11665
11666 : see if pthread_yield exists
11667 set try -DPTHREAD_YIELD
11668 if eval $compile; then
11669     val="$define"
11670     case "$sched_yield" in
11671     '') sched_yield='pthread_yield()' ;;
11672     esac
11673 else
11674     set try -DPTHREAD_YIELD_NULL
11675     if eval $compile; then
11676         val="$define"
11677         case "$sched_yield" in
11678         '') sched_yield='pthread_yield(NULL)' ;;
11679         esac
11680     else
11681         val="$undef"
11682     fi
11683 fi
11684 case "$usethreads" in
11685 $define)
11686         case "$val" in
11687         $define) echo 'pthread_yield() found.' >&4      ;;
11688         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11689         esac
11690         ;;
11691 esac
11692 set d_pthread_yield
11693 eval $setvar
11694
11695 case "$sched_yield" in
11696 '') sched_yield=undef ;;
11697 esac
11698
11699 $rm -f try try.*
11700
11701 : see if this is a pwd.h system
11702 set pwd.h i_pwd
11703 eval $inhdr
11704
11705 case "$i_pwd" in
11706 $define)
11707         xxx=`./findhdr pwd.h`
11708         $cppstdin $cppflags $cppminus < $xxx >$$.h
11709
11710         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11711                 val="$define"
11712         else
11713                 val="$undef"
11714         fi
11715         set d_pwquota
11716         eval $setvar
11717
11718         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11719                 val="$define"
11720         else
11721                 val="$undef"
11722         fi
11723         set d_pwage
11724         eval $setvar
11725
11726         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11727                 val="$define"
11728         else
11729                 val="$undef"
11730         fi
11731         set d_pwchange
11732         eval $setvar
11733
11734         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11735                 val="$define"
11736         else
11737                 val="$undef"
11738         fi
11739         set d_pwclass
11740         eval $setvar
11741
11742         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11743                 val="$define"
11744         else
11745                 val="$undef"
11746         fi
11747         set d_pwexpire
11748         eval $setvar
11749
11750         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11751                 val="$define"
11752         else
11753                 val="$undef"
11754         fi
11755         set d_pwcomment
11756         eval $setvar
11757
11758         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11759                 val="$define"
11760         else
11761                 val="$undef"
11762         fi
11763         set d_pwgecos
11764         eval $setvar
11765
11766         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11767                 val="$define"
11768         else
11769                 val="$undef"
11770         fi
11771         set d_pwpasswd
11772         eval $setvar
11773
11774         $rm -f $$.h
11775         ;;
11776 *)
11777         val="$undef"; 
11778         set d_pwquota; eval $setvar
11779         set d_pwage; eval $setvar
11780         set d_pwchange; eval $setvar
11781         set d_pwclass; eval $setvar
11782         set d_pwexpire; eval $setvar
11783         set d_pwcomment; eval $setvar
11784         set d_pwgecos; eval $setvar
11785         set d_pwpasswd; eval $setvar
11786         ;;
11787 esac
11788
11789 : see if readdir and friends exist
11790 set readdir d_readdir
11791 eval $inlibc
11792 set seekdir d_seekdir
11793 eval $inlibc
11794 set telldir d_telldir
11795 eval $inlibc
11796 set rewinddir d_rewinddir
11797 eval $inlibc
11798
11799 : see if readv exists
11800 set readv d_readv
11801 eval $inlibc
11802
11803 : see if recvmsg exists
11804 set recvmsg d_recvmsg
11805 eval $inlibc
11806
11807 : see if rename exists
11808 set rename d_rename
11809 eval $inlibc
11810
11811 : see if rmdir exists
11812 set rmdir d_rmdir
11813 eval $inlibc
11814
11815 : see if memory.h is available.
11816 val=''
11817 set memory.h val
11818 eval $inhdr
11819
11820 : See if it conflicts with string.h
11821 case "$val" in
11822 $define)
11823         case "$strings" in
11824         '') ;;
11825         *)
11826                 $cppstdin $cppflags $cppminus < $strings > mem.h
11827                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11828                         echo " "
11829                         echo "We won't be including <memory.h>."
11830                         val="$undef"
11831                 fi
11832                 $rm -f mem.h
11833                 ;;
11834         esac
11835 esac
11836 set i_memory
11837 eval $setvar
11838
11839 : can bcopy handle overlapping blocks?
11840 echo " "
11841 val="$undef"
11842 case "$d_memmove" in
11843 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11844 *)      case "$d_bcopy" in
11845         "$define")
11846                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11847                 $cat >try.c <<EOCP
11848 #$i_memory I_MEMORY
11849 #$i_stdlib I_STDLIB
11850 #$i_string I_STRING
11851 #$i_unistd I_UNISTD
11852 EOCP
11853         $cat >>try.c <<'EOCP'
11854 #include <stdio.h>
11855 #ifdef I_MEMORY
11856 #  include <memory.h>
11857 #endif
11858 #ifdef I_STDLIB
11859 #  include <stdlib.h>
11860 #endif
11861 #ifdef I_STRING
11862 #  include <string.h>
11863 #else
11864 #  include <strings.h>
11865 #endif
11866 #ifdef I_UNISTD
11867 #  include <unistd.h>  /* Needed for NetBSD */
11868 #endif
11869 int main()
11870 {
11871 char buf[128], abc[128];
11872 char *b;
11873 int len;
11874 int off;
11875 int align;
11876
11877 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11878    try to store the string in read-only memory. */
11879 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11880
11881 for (align = 7; align >= 0; align--) {
11882         for (len = 36; len; len--) {
11883                 b = buf+align;
11884                 bcopy(abc, b, len);
11885                 for (off = 1; off <= len; off++) {
11886                         bcopy(b, b+off, len);
11887                         bcopy(b+off, b, len);
11888                         if (bcmp(b, abc, len))
11889                                 exit(1);
11890                 }
11891         }
11892 }
11893 exit(0);
11894 }
11895 EOCP
11896                 set try
11897                 if eval $compile_ok; then
11898                         if ./try 2>/dev/null; then
11899                                 echo "Yes, it can."
11900                                 val="$define"
11901                         else
11902                                 echo "It can't, sorry."
11903                         fi
11904                 else
11905                         echo "(I can't compile the test program, so we'll assume not...)"
11906                 fi
11907                 ;;
11908         esac
11909         $rm -f try.* try core
11910         ;;
11911 esac
11912 set d_safebcpy
11913 eval $setvar
11914
11915 : can memcpy handle overlapping blocks?
11916 echo " "
11917 val="$undef"
11918 case "$d_memmove" in
11919 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11920 *)      case "$d_memcpy" in
11921         "$define")
11922                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11923                 $cat >try.c <<EOCP
11924 #$i_memory I_MEMORY
11925 #$i_stdlib I_STDLIB
11926 #$i_string I_STRING
11927 #$i_unistd I_UNISTD
11928 EOCP
11929         $cat >>try.c <<'EOCP'
11930 #include <stdio.h>
11931 #ifdef I_MEMORY
11932 #  include <memory.h>
11933 #endif
11934 #ifdef I_STDLIB
11935 #  include <stdlib.h>
11936 #endif
11937 #ifdef I_STRING
11938 #  include <string.h>
11939 #else
11940 #  include <strings.h>
11941 #endif
11942 #ifdef I_UNISTD
11943 #  include <unistd.h>  /* Needed for NetBSD */
11944 #endif
11945 int main()
11946 {
11947 char buf[128], abc[128];
11948 char *b;
11949 int len;
11950 int off;
11951 int align;
11952
11953 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11954    try to store the string in read-only memory. */
11955 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11956
11957 for (align = 7; align >= 0; align--) {
11958         for (len = 36; len; len--) {
11959                 b = buf+align;
11960                 memcpy(b, abc, len);
11961                 for (off = 1; off <= len; off++) {
11962                         memcpy(b+off, b, len);
11963                         memcpy(b, b+off, len);
11964                         if (memcmp(b, abc, len))
11965                                 exit(1);
11966                 }
11967         }
11968 }
11969 exit(0);
11970 }
11971 EOCP
11972                 set try
11973                 if eval $compile_ok; then
11974                         if ./try 2>/dev/null; then
11975                                 echo "Yes, it can."
11976                                 val="$define"
11977                         else
11978                                 echo "It can't, sorry."
11979                         fi
11980                 else
11981                         echo "(I can't compile the test program, so we'll assume not...)"
11982                 fi
11983                 ;;
11984         esac
11985         $rm -f try.* try core
11986         ;;
11987 esac
11988 set d_safemcpy
11989 eval $setvar
11990
11991 : can memcmp be trusted to compare relative magnitude?
11992 val="$undef"
11993 case "$d_memcmp" in
11994 "$define")
11995         echo " "
11996         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11997         $cat >try.c <<EOCP
11998 #$i_memory I_MEMORY
11999 #$i_stdlib I_STDLIB
12000 #$i_string I_STRING
12001 #$i_unistd I_UNISTD
12002 EOCP
12003         $cat >>try.c <<'EOCP'
12004 #include <stdio.h>
12005 #ifdef I_MEMORY
12006 #  include <memory.h>
12007 #endif
12008 #ifdef I_STDLIB
12009 #  include <stdlib.h>
12010 #endif
12011 #ifdef I_STRING
12012 #  include <string.h>
12013 #else
12014 #  include <strings.h>
12015 #endif
12016 #ifdef I_UNISTD
12017 #  include <unistd.h>  /* Needed for NetBSD */
12018 #endif
12019 int main()
12020 {
12021 char a = -1;
12022 char b = 0;
12023 if ((a < b) && memcmp(&a, &b, 1) < 0)
12024         exit(1);
12025 exit(0);
12026 }
12027 EOCP
12028         set try
12029         if eval $compile_ok; then
12030                 if $run ./try 2>/dev/null; then
12031                         echo "Yes, it can."
12032                         val="$define"
12033                 else
12034                         echo "No, it can't (it uses signed chars)."
12035                 fi
12036         else
12037                 echo "(I can't compile the test program, so we'll assume not...)"
12038         fi
12039         ;;
12040 esac
12041 $rm -f try.* try core
12042 set d_sanemcmp
12043 eval $setvar
12044
12045 : see if prototype for sbrk is available
12046 echo " "
12047 set d_sbrkproto sbrk $i_unistd unistd.h
12048 eval $hasproto
12049
12050 : see if select exists
12051 set select d_select
12052 eval $inlibc
12053
12054 : see if semctl exists
12055 set semctl d_semctl
12056 eval $inlibc
12057
12058 : see if semget exists
12059 set semget d_semget
12060 eval $inlibc
12061
12062 : see if semop exists
12063 set semop d_semop
12064 eval $inlibc
12065
12066 : see how much of the 'sem*(2)' library is present.
12067 h_sem=true
12068 echo " "
12069 case "$d_semctl$d_semget$d_semop" in
12070 *"$undef"*) h_sem=false;;
12071 esac
12072 case "$osname" in
12073 freebsd)
12074     case "`ipcs 2>&1`" in
12075     "SVID messages"*"not configured"*)
12076         echo "Your $osname does not have the sem*(2) configured." >&4
12077         h_sem=false
12078         val="$undef"
12079         set semctl d_semctl
12080         eval $setvar
12081         set semget d_semget
12082         eval $setvar
12083         set semop d_semop
12084         eval $setvar
12085         ;;
12086     esac
12087     ;;
12088 esac
12089 : we could also check for sys/ipc.h ...
12090 if $h_sem && $test `./findhdr sys/sem.h`; then
12091         echo "You have the full sem*(2) library." >&4
12092         val="$define"
12093 else
12094         echo "You don't have the full sem*(2) library." >&4
12095         val="$undef"
12096 fi
12097 set d_sem
12098 eval $setvar
12099
12100 : see whether sys/sem.h defines union semun
12101 echo " "
12102 $cat > try.c <<'END'
12103 #include <sys/types.h>
12104 #include <sys/ipc.h>
12105 #include <sys/sem.h>
12106 int main () { union semun semun; semun.buf = 0; }
12107 END
12108 set try
12109 if eval $compile; then
12110     echo "You have union semun in <sys/sem.h>." >&4
12111     val="$define"
12112 else
12113     echo "You do not have union semun in <sys/sem.h>." >&4
12114     val="$undef"
12115 fi
12116 $rm -f try try.c try.h
12117 set d_union_semun
12118 eval $setvar
12119
12120 : see how to do semctl IPC_STAT
12121 case "$d_sem" in
12122 $define)
12123     : see whether semctl IPC_STAT can use union semun
12124     echo " "
12125     $cat > try.h <<END
12126 #ifndef S_IRUSR
12127 #   ifdef S_IREAD
12128 #       define S_IRUSR S_IREAD
12129 #       define S_IWUSR S_IWRITE
12130 #       define S_IXUSR S_IEXEC
12131 #   else
12132 #       define S_IRUSR 0400
12133 #       define S_IWUSR 0200
12134 #       define S_IXUSR 0100
12135 #   endif
12136 #   define S_IRGRP (S_IRUSR>>3)
12137 #   define S_IWGRP (S_IWUSR>>3)
12138 #   define S_IXGRP (S_IXUSR>>3)
12139 #   define S_IROTH (S_IRUSR>>6)
12140 #   define S_IWOTH (S_IWUSR>>6)
12141 #   define S_IXOTH (S_IXUSR>>6)
12142 #endif
12143 #ifndef S_IRWXU
12144 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12145 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12146 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12147 #endif
12148 END
12149
12150     $cat > try.c <<END
12151 #include <sys/types.h>
12152 #include <sys/ipc.h>
12153 #include <sys/sem.h>
12154 #include <sys/stat.h>
12155 #include <stdio.h>
12156 #include <errno.h>
12157 #include "try.h"
12158 #ifndef errno
12159 extern int errno;
12160 #endif
12161 #$d_union_semun HAS_UNION_SEMUN
12162 int main() {
12163     union semun
12164 #ifndef HAS_UNION_SEMUN
12165     {
12166         int val;
12167         struct semid_ds *buf;
12168         unsigned short *array;
12169     }
12170 #endif
12171     arg;
12172     int sem, st;
12173
12174 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12175     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12176     if (sem > -1) {
12177         struct semid_ds argbuf;
12178         arg.buf = &argbuf;
12179 #       ifdef IPC_STAT
12180         st = semctl(sem, 0, IPC_STAT, arg);
12181         if (st == 0)
12182             printf("semun\n");
12183         else
12184 #       endif /* IPC_STAT */
12185             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12186 #       ifdef IPC_RMID
12187         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12188 #       endif /* IPC_RMID */
12189             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12190     } else
12191 #endif /* IPC_PRIVATE && ... */
12192         printf("semget failed: errno = %d\n", errno);
12193   return 0;
12194 }
12195 END
12196     val="$undef"
12197     set try
12198     if eval $compile; then
12199         xxx=`$run ./try`
12200         case "$xxx" in
12201         semun) val="$define" ;;
12202         esac
12203     fi
12204     $rm -f try try.c
12205     set d_semctl_semun
12206     eval $setvar
12207     case "$d_semctl_semun" in
12208     $define)
12209         echo "You can use union semun for semctl IPC_STAT." >&4
12210         also='also'
12211         ;;
12212     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12213         also=''
12214         ;;
12215     esac
12216
12217     : see whether semctl IPC_STAT can use struct semid_ds pointer
12218     $cat > try.c <<'END'
12219 #include <sys/types.h>
12220 #include <sys/ipc.h>
12221 #include <sys/sem.h>
12222 #include <sys/stat.h>
12223 #include "try.h"
12224 #include <stdio.h>
12225 #include <errno.h>
12226 #ifndef errno
12227 extern int errno;
12228 #endif
12229 int main() {
12230     struct semid_ds arg;
12231     int sem, st;
12232
12233 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12234     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12235     if (sem > -1) {
12236 #       ifdef IPC_STAT
12237         st = semctl(sem, 0, IPC_STAT, &arg);
12238         if (st == 0)
12239             printf("semid_ds\n");
12240         else
12241 #       endif /* IPC_STAT */
12242             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12243 #       ifdef IPC_RMID
12244         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12245 #       endif /* IPC_RMID */
12246             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12247     } else
12248 #endif /* IPC_PRIVATE && ... */
12249         printf("semget failed: errno = %d\n", errno);
12250
12251     return 0;
12252 }
12253 END
12254     val="$undef"
12255     set try
12256     if eval $compile; then
12257         xxx=`$run ./try`
12258         case "$xxx" in
12259         semid_ds) val="$define" ;;
12260         esac
12261     fi
12262     $rm -f try try.c
12263     set d_semctl_semid_ds
12264     eval $setvar
12265     case "$d_semctl_semid_ds" in
12266     $define)
12267         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12268         ;;
12269     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12270         ;;
12271     esac
12272     $rm -f try.h
12273     ;;
12274 *)  val="$undef"
12275
12276     # We do not have the full sem*(2) library, so assume we can not
12277     # use either.
12278
12279     set d_semctl_semun
12280     eval $setvar
12281
12282     set d_semctl_semid_ds
12283     eval $setvar
12284     ;;
12285 esac
12286
12287 : see if sendmsg exists
12288 set sendmsg d_sendmsg
12289 eval $inlibc
12290
12291 : see if setegid exists
12292 set setegid d_setegid
12293 eval $inlibc
12294
12295 : see if seteuid exists
12296 set seteuid d_seteuid
12297 eval $inlibc
12298
12299 : see if setgrent exists
12300 set setgrent d_setgrent
12301 eval $inlibc
12302
12303 : see if sethostent exists
12304 set sethostent d_sethent
12305 eval $inlibc
12306
12307 : see if setitimer exists
12308 set setitimer d_setitimer
12309 eval $inlibc
12310
12311 : see if setlinebuf exists
12312 set setlinebuf d_setlinebuf
12313 eval $inlibc
12314
12315 : see if setlocale exists
12316 set setlocale d_setlocale
12317 eval $inlibc
12318
12319 : see if setnetent exists
12320 set setnetent d_setnent
12321 eval $inlibc
12322
12323 : see if setprotoent exists
12324 set setprotoent d_setpent
12325 eval $inlibc
12326
12327 : see if setpgid exists
12328 set setpgid d_setpgid
12329 eval $inlibc
12330
12331 : see if setpgrp2 exists
12332 set setpgrp2 d_setpgrp2
12333 eval $inlibc
12334
12335 : see if setpriority exists
12336 set setpriority d_setprior
12337 eval $inlibc
12338
12339 : see if setproctitle exists
12340 set setproctitle d_setproctitle
12341 eval $inlibc
12342
12343 : see if setpwent exists
12344 set setpwent d_setpwent
12345 eval $inlibc
12346
12347 : see if setregid exists
12348 set setregid d_setregid
12349 eval $inlibc
12350 set setresgid d_setresgid
12351 eval $inlibc
12352
12353 : see if setreuid exists
12354 set setreuid d_setreuid
12355 eval $inlibc
12356 set setresuid d_setresuid
12357 eval $inlibc
12358
12359 : see if setrgid exists
12360 set setrgid d_setrgid
12361 eval $inlibc
12362
12363 : see if setruid exists
12364 set setruid d_setruid
12365 eval $inlibc
12366
12367 : see if setservent exists
12368 set setservent d_setsent
12369 eval $inlibc
12370
12371 : see if setsid exists
12372 set setsid d_setsid
12373 eval $inlibc
12374
12375 : see if setvbuf exists
12376 set setvbuf d_setvbuf
12377 eval $inlibc
12378
12379 : see if sfio.h is available
12380 set sfio.h i_sfio
12381 eval $inhdr
12382
12383
12384 : see if sfio library is available
12385 case "$i_sfio" in
12386 $define)
12387         val=''
12388         set sfreserve val
12389         eval $inlibc
12390         ;;
12391 *)
12392         val="$undef"
12393         ;;
12394 esac
12395 : Ok, but do we want to use it.
12396 case "$val" in
12397 $define)
12398         case "$usesfio" in
12399         true|$define|[yY]*) dflt='y';;
12400         *) dflt='n';;
12401         esac
12402         echo "$package can use the sfio library, but it is experimental."
12403         case "$useperlio" in
12404         "$undef")
12405             echo "For sfio also the PerlIO abstraction layer is needed."
12406             echo "Earlier you said you wouldn't want that."
12407             ;;
12408         esac
12409         rp="You seem to have sfio available, do you want to try using it?"
12410         . ./myread
12411         case "$ans" in
12412         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12413                 useperlio="$define"
12414                 val="$define"
12415                 ;;
12416         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12417                 val="$undef"
12418                 ;;
12419         esac
12420         ;;
12421 *)      case "$usesfio" in
12422         true|$define|[yY]*)
12423                 echo "Sorry, cannot find sfio on this machine." >&4
12424                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12425                 val="$undef"
12426                 ;;
12427         esac
12428         ;;
12429 esac
12430 set d_sfio
12431 eval $setvar
12432 case "$d_sfio" in
12433 $define) usesfio='true';;
12434 *) usesfio='false';;
12435 esac
12436 case "$d_sfio" in
12437 $define) ;;
12438 *)      : Remove sfio from list of libraries to use
12439         case "$libs" in
12440         *-lsfio*)
12441                 echo "Removing unneeded -lsfio from library list" >&4
12442                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12443                 shift
12444                 libs="$*"
12445                 echo "libs = $libs" >&4
12446                 ;;
12447         esac
12448 ;;
12449 esac
12450
12451
12452 : see if shmctl exists
12453 set shmctl d_shmctl
12454 eval $inlibc
12455
12456 : see if shmget exists
12457 set shmget d_shmget
12458 eval $inlibc
12459
12460 : see if shmat exists
12461 set shmat d_shmat
12462 eval $inlibc
12463 : see what shmat returns
12464 case "$d_shmat" in
12465 "$define")
12466         $cat >shmat.c <<'END'
12467 #include <sys/shm.h>
12468 void *shmat();
12469 END
12470         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12471                 shmattype='void *'
12472         else
12473                 shmattype='char *'
12474         fi
12475         echo "and it returns ($shmattype)." >&4
12476         : see if a prototype for shmat is available
12477         xxx=`./findhdr sys/shm.h`
12478         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12479         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12480                 val="$define"
12481         else
12482                 val="$undef"
12483         fi
12484         $rm -f shmat.[co]
12485         ;;
12486 *)
12487         val="$undef"
12488         ;;
12489 esac
12490 set d_shmatprototype
12491 eval $setvar
12492
12493 : see if shmdt exists
12494 set shmdt d_shmdt
12495 eval $inlibc
12496
12497 : see how much of the 'shm*(2)' library is present.
12498 h_shm=true
12499 echo " "
12500 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12501 *"$undef"*) h_shm=false;;
12502 esac
12503 case "$osname" in
12504 freebsd)
12505     case "`ipcs 2>&1`" in
12506     "SVID shared memory"*"not configured"*)
12507         echo "Your $osname does not have the shm*(2) configured." >&4
12508         h_shm=false
12509         val="$undef"
12510         set shmctl d_shmctl
12511         evat $setvar
12512         set shmget d_shmget
12513         evat $setvar
12514         set shmat d_shmat
12515         evat $setvar
12516         set shmdt d_shmdt
12517         evat $setvar
12518         ;;
12519     esac
12520     ;;
12521 esac
12522 : we could also check for sys/ipc.h ...
12523 if $h_shm && $test `./findhdr sys/shm.h`; then
12524         echo "You have the full shm*(2) library." >&4
12525         val="$define"
12526 else
12527         echo "You don't have the full shm*(2) library." >&4
12528         val="$undef"
12529 fi
12530 set d_shm
12531 eval $setvar
12532
12533 echo " "
12534 : see if we have sigaction
12535 if set sigaction val -f d_sigaction; eval $csym; $val; then
12536         echo 'sigaction() found.' >&4
12537         $cat > try.c <<'EOP'
12538 #include <stdio.h>
12539 #include <sys/types.h>
12540 #include <signal.h>
12541 int main()
12542 {
12543     struct sigaction act, oact;
12544     act.sa_flags = 0;
12545     oact.sa_handler = 0;
12546     /* so that act and oact are used */
12547     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12548 }
12549 EOP
12550         set try
12551         if eval $compile_ok; then
12552                 val="$define"
12553         else
12554                 echo "But you don't seem to have a useable struct sigaction." >&4
12555                 val="$undef"
12556         fi
12557 else
12558         echo 'sigaction NOT found.' >&4
12559         val="$undef"
12560 fi
12561 set d_sigaction; eval $setvar
12562 $rm -f try try$_o try.c
12563
12564 : see if sigprocmask exists
12565 set sigprocmask d_sigprocmask
12566 eval $inlibc
12567
12568 : see if sigsetjmp exists
12569 echo " "
12570 case "$d_sigsetjmp" in
12571 '')
12572         $cat >try.c <<'EOP'
12573 #include <setjmp.h>
12574 sigjmp_buf env;
12575 int set = 1;
12576 int main()
12577 {
12578         if (sigsetjmp(env,1))
12579                 exit(set);
12580         set = 0;
12581         siglongjmp(env, 1);
12582         exit(1);
12583 }
12584 EOP
12585         set try
12586         if eval $compile; then
12587                 if $run ./try >/dev/null 2>&1; then
12588                         echo "POSIX sigsetjmp found." >&4
12589                         val="$define"
12590                 else
12591                         $cat >&4 <<EOM
12592 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12593 I'll ignore them.
12594 EOM
12595                         val="$undef"
12596                 fi
12597         else
12598                 echo "sigsetjmp not found." >&4
12599                 val="$undef"
12600         fi
12601         ;;
12602 *) val="$d_sigsetjmp"
12603         case "$d_sigsetjmp" in
12604         $define) echo "POSIX sigsetjmp found." >&4;;
12605         $undef) echo "sigsetjmp not found." >&4;;
12606         esac
12607         ;;
12608 esac
12609 set d_sigsetjmp
12610 eval $setvar
12611 $rm -f try.c try
12612
12613 : see if sockatmark exists
12614 set sockatmark d_sockatmark
12615 eval $inlibc
12616
12617 : see if prototype for sockatmark is available
12618 echo " "
12619 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12620 eval $hasproto
12621
12622 : see if socks5_init exists
12623 set socks5_init d_socks5_init
12624 eval $inlibc
12625
12626 : see if prototype for setresgid is available
12627 echo " "
12628 set d_sresgproto setresgid $i_unistd unistd.h
12629 eval $hasproto
12630
12631 : see if prototype for setresuid is available
12632 echo " "
12633 set d_sresuproto setresuid $i_unistd unistd.h
12634 eval $hasproto
12635
12636 : see if sys/stat.h is available
12637 set sys/stat.h i_sysstat
12638 eval $inhdr
12639
12640
12641 : see if stat knows about block sizes
12642 echo " "
12643 echo "Checking to see if your struct stat has st_blocks field..." >&4
12644 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12645 eval $hasfield
12646
12647
12648 : see if this is a sys/vfs.h system
12649 set sys/vfs.h i_sysvfs
12650 eval $inhdr
12651
12652
12653 : see if this is a sys/statfs.h system
12654 set sys/statfs.h i_sysstatfs
12655 eval $inhdr
12656
12657
12658 echo " "
12659 echo "Checking to see if your system supports struct statfs..." >&4
12660 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
12661 eval $hasstruct
12662 case "$d_statfs_s" in
12663 "$define")      echo "Yes, it does."   ;;
12664 *)              echo "No, it doesn't." ;;
12665 esac
12666
12667
12668
12669 : see if struct statfs knows about f_flags
12670 case "$d_statfs_s" in
12671 define) 
12672         echo " "
12673         echo "Checking to see if your struct statfs has f_flags field..." >&4
12674         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
12675         eval $hasfield
12676         ;;
12677 *)      val="$undef"
12678         set d_statfs_f_flags
12679         eval $setvar
12680         ;;
12681 esac
12682 case "$d_statfs_f_flags" in
12683 "$define")      echo "Yes, it does."   ;;
12684 *)              echo "No, it doesn't." ;;
12685 esac
12686
12687 : see if _ptr and _cnt from stdio act std
12688 echo " "
12689
12690 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12691         echo "(Looks like you have stdio.h from BSD.)"
12692         case "$stdio_ptr" in
12693         '') stdio_ptr='((fp)->_p)'
12694                 ptr_lval=$define
12695                 ;;
12696         *)      ptr_lval=$d_stdio_ptr_lval;;
12697         esac
12698         case "$stdio_cnt" in
12699         '') stdio_cnt='((fp)->_r)'
12700                 cnt_lval=$define
12701                 ;;
12702         *)      cnt_lval=$d_stdio_cnt_lval;;
12703         esac
12704         case "$stdio_base" in
12705         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12706         esac
12707         case "$stdio_bufsiz" in
12708         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12709         esac
12710 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12711         echo "(Looks like you have stdio.h from Linux.)"
12712         case "$stdio_ptr" in
12713         '') stdio_ptr='((fp)->_IO_read_ptr)'
12714                 ptr_lval=$define
12715                 ;;
12716         *)      ptr_lval=$d_stdio_ptr_lval;;
12717         esac
12718         case "$stdio_cnt" in
12719         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12720                 cnt_lval=$undef
12721                 ;;
12722         *)      cnt_lval=$d_stdio_cnt_lval;;
12723         esac
12724         case "$stdio_base" in
12725         '') stdio_base='((fp)->_IO_read_base)';;
12726         esac
12727         case "$stdio_bufsiz" in
12728         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12729         esac
12730 else
12731         case "$stdio_ptr" in
12732         '') stdio_ptr='((fp)->_ptr)'
12733                 ptr_lval=$define
12734                 ;;
12735         *)      ptr_lval=$d_stdio_ptr_lval;;
12736         esac
12737         case "$stdio_cnt" in
12738         '') stdio_cnt='((fp)->_cnt)'
12739                 cnt_lval=$define
12740                 ;;
12741         *)      cnt_lval=$d_stdio_cnt_lval;;
12742         esac
12743         case "$stdio_base" in
12744         '') stdio_base='((fp)->_base)';;
12745         esac
12746         case "$stdio_bufsiz" in
12747         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12748         esac
12749 fi
12750
12751 : test whether _ptr and _cnt really work
12752 echo "Checking how std your stdio is..." >&4
12753 $cat >try.c <<EOP
12754 #include <stdio.h>
12755 #define FILE_ptr(fp)    $stdio_ptr
12756 #define FILE_cnt(fp)    $stdio_cnt
12757 int main() {
12758         FILE *fp = fopen("try.c", "r");
12759         char c = getc(fp);
12760         if (
12761                 18 <= FILE_cnt(fp) &&
12762                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12763         )
12764                 exit(0);
12765         exit(1);
12766 }
12767 EOP
12768 val="$undef"
12769 set try
12770 if eval $compile && $to try.c; then
12771         if $run ./try; then
12772                 echo "Your stdio acts pretty std."
12773                 val="$define"
12774         else
12775                 echo "Your stdio isn't very std."
12776         fi
12777 else
12778         echo "Your stdio doesn't appear very std."
12779 fi
12780 $rm -f try.c try
12781 set d_stdstdio
12782 eval $setvar
12783
12784 : Can _ptr be used as an lvalue?
12785 case "$d_stdstdio$ptr_lval" in
12786 $define$define) val=$define ;;
12787 *) val=$undef ;;
12788 esac
12789 set d_stdio_ptr_lval
12790 eval $setvar
12791
12792 : Can _cnt be used as an lvalue?
12793 case "$d_stdstdio$cnt_lval" in
12794 $define$define) val=$define ;;
12795 *) val=$undef ;;
12796 esac
12797 set d_stdio_cnt_lval
12798 eval $setvar
12799
12800
12801 : test whether setting _ptr sets _cnt as a side effect
12802 d_stdio_ptr_lval_sets_cnt="$undef"
12803 d_stdio_ptr_lval_nochange_cnt="$undef"
12804 case "$d_stdio_ptr_lval$d_stdstdio" in
12805 $define$define)
12806         echo "Checking to see what happens if we set the stdio ptr..." >&4
12807 $cat >try.c <<EOP
12808 #include <stdio.h>
12809 /* Can we scream? */
12810 /* Eat dust sed :-) */
12811 /* In the buffer space, no one can hear you scream. */
12812 #define FILE_ptr(fp)    $stdio_ptr
12813 #define FILE_cnt(fp)    $stdio_cnt
12814 #include <sys/types.h>
12815 int main() {
12816         FILE *fp = fopen("try.c", "r");
12817         int c;
12818         char *ptr;
12819         size_t cnt;
12820         if (!fp) {
12821             puts("Fail even to read");
12822             exit(1);
12823         }
12824         c = getc(fp); /* Read away the first # */
12825         if (c == EOF) {
12826             puts("Fail even to read");
12827             exit(1);
12828         }
12829         if (!(
12830                 18 <= FILE_cnt(fp) &&
12831                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12832         )) {
12833                 puts("Fail even to read");
12834                 exit (1);
12835         }
12836         ptr = (char*) FILE_ptr(fp);
12837         cnt = (size_t)FILE_cnt(fp);
12838
12839         FILE_ptr(fp) += 42;
12840
12841         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12842                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12843                 exit (1);
12844         }
12845         if (FILE_cnt(fp) <= 20) {
12846                 printf ("Fail (<20 chars to test)");
12847                 exit (1);
12848         }
12849         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12850                 puts("Fail compare");
12851                 exit (1);
12852         }
12853         if (cnt == FILE_cnt(fp)) {
12854                 puts("Pass_unchanged");
12855                 exit (0);
12856         }       
12857         if (FILE_cnt(fp) == (cnt - 42)) {
12858                 puts("Pass_changed");
12859                 exit (0);
12860         }
12861         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12862         return 1;
12863
12864 }
12865 EOP
12866         set try
12867         if eval $compile && $to try.c; then
12868                 case `$run ./try` in
12869                 Pass_changed)
12870                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12871                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12872                 Pass_unchanged)
12873                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12874                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12875                 Fail*)
12876                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12877                 *)
12878                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12879         esac
12880         else
12881                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12882         fi
12883         $rm -f try.c try
12884         ;;
12885 esac
12886
12887 : see if _base is also standard
12888 val="$undef"
12889 case "$d_stdstdio" in
12890 $define)
12891         $cat >try.c <<EOP
12892 #include <stdio.h>
12893 #define FILE_base(fp)   $stdio_base
12894 #define FILE_bufsiz(fp) $stdio_bufsiz
12895 int main() {
12896         FILE *fp = fopen("try.c", "r");
12897         char c = getc(fp);
12898         if (
12899                 19 <= FILE_bufsiz(fp) &&
12900                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12901         )
12902                 exit(0);
12903         exit(1);
12904 }
12905 EOP
12906         set try
12907         if eval $compile && $to try.c; then
12908                 if $run ./try; then
12909                         echo "And its _base field acts std."
12910                         val="$define"
12911                 else
12912                         echo "But its _base field isn't std."
12913                 fi
12914         else
12915                 echo "However, it seems to be lacking the _base field."
12916         fi
12917         $rm -f try.c try
12918         ;;
12919 esac
12920 set d_stdiobase
12921 eval $setvar
12922
12923 $cat >&4 <<EOM
12924 Checking how to access stdio streams by file descriptor number...
12925 EOM
12926 case "$stdio_stream_array" in
12927 '')     $cat >try.c <<EOCP
12928 #include <stdio.h>
12929 int main() {
12930   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12931     printf("yes\n");
12932 }
12933 EOCP
12934         for s in _iob __iob __sF
12935         do
12936                 set try -DSTDIO_STREAM_ARRAY=$s
12937                 if eval $compile; then
12938                         case "`$run ./try`" in
12939                         yes)    stdio_stream_array=$s; break ;;
12940                         esac
12941                 fi
12942         done
12943         $rm -f try.* try$exe_ext
12944 esac
12945 case "$stdio_stream_array" in
12946 '')     $cat >&4 <<EOM
12947 I can't figure out how to access stdio streams by file descriptor number.
12948 EOM
12949         d_stdio_stream_array="$undef"
12950         ;;
12951 *)      $cat >&4 <<EOM
12952 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12953 EOM
12954         d_stdio_stream_array="$define"
12955         ;;
12956 esac
12957
12958 : see if strcoll exists
12959 set strcoll d_strcoll
12960 eval $inlibc
12961
12962 : check for structure copying
12963 echo " "
12964 echo "Checking to see if your C compiler can copy structs..." >&4
12965 $cat >try.c <<'EOCP'
12966 int main()
12967 {
12968         struct blurfl {
12969                 int dyick;
12970         } foo, bar;
12971
12972         foo = bar;
12973 }
12974 EOCP
12975 if $cc -c try.c >/dev/null 2>&1 ; then
12976         val="$define"
12977         echo "Yup, it can."
12978 else
12979         val="$undef"
12980         echo "Nope, it can't."
12981 fi
12982 set d_strctcpy
12983 eval $setvar
12984 $rm -f try.*
12985
12986 : see if strerror and/or sys_errlist[] exist
12987 echo " "
12988 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12989     if set strerror val -f d_strerror; eval $csym; $val; then
12990                 echo 'strerror() found.' >&4
12991                 d_strerror="$define"
12992                 d_strerrm='strerror(e)'
12993                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12994                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12995                         d_syserrlst="$define"
12996                 else
12997                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12998                         d_syserrlst="$undef"
12999                 fi
13000     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13001                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13002                 echo 'strerror() found in string header.' >&4
13003                 d_strerror="$define"
13004                 d_strerrm='strerror(e)'
13005                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13006                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13007                                 d_syserrlst="$define"
13008                 else
13009                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13010                         d_syserrlst="$undef"
13011                 fi
13012     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13013                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13014                 d_strerror="$undef"
13015                 d_syserrlst="$define"
13016                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13017     else
13018                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13019                 d_strerror="$undef"
13020                 d_syserrlst="$undef"
13021                 d_strerrm='"unknown"'
13022     fi
13023 fi
13024
13025 : see if strftime exists
13026 set strftime d_strftime
13027 eval $inlibc
13028
13029 : see if strtod exists
13030 set strtod d_strtod
13031 eval $inlibc
13032
13033 : see if strtol exists
13034 set strtol d_strtol
13035 eval $inlibc
13036
13037 : see if strtold exists
13038 set strtold d_strtold
13039 eval $inlibc
13040
13041 : see if strtoll exists
13042 set strtoll d_strtoll
13043 eval $inlibc
13044
13045 case "$d_longlong-$d_strtoll" in
13046 "$define-$define")
13047         $cat <<EOM
13048 Checking whether your strtoll() works okay...
13049 EOM
13050         $cat >try.c <<'EOCP'
13051 #include <errno.h>
13052 #ifdef __hpux
13053 #define strtoll __strtoll
13054 #endif
13055 #ifdef __EMX__
13056 #define strtoll _strtoll
13057 #endif
13058 #include <stdio.h>
13059 extern long long int strtoll(char *s, char **, int); 
13060 static int bad = 0;
13061 int check(char *s, long long ell, int een) {
13062         long long gll;
13063         errno = 0;
13064         gll = strtoll(s, 0, 10);
13065         if (!((gll == ell) && (errno == een)))
13066                 bad++;
13067 }
13068 int main() {
13069         check(" 1",                                      1LL, 0);
13070         check(" 0",                                      0LL, 0);
13071         check("-1",                                     -1LL, 0);
13072         check("-9223372036854775808", -9223372036854775808LL, 0);
13073         check("-9223372036854775808", -9223372036854775808LL, 0);
13074         check(" 9223372036854775807",  9223372036854775807LL, 0);
13075         check("-9223372036854775808", -9223372036854775808LL, 0);
13076         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13077         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13078         if (!bad)
13079                 printf("ok\n");
13080 }
13081 EOCP
13082         set try
13083         if eval $compile; then
13084                 yyy=`$run ./try`
13085                 case "$yyy" in
13086                 ok) echo "Your strtoll() seems to be working okay." ;;
13087                 *) cat <<EOM >&4
13088 Your strtoll() doesn't seem to be working okay.
13089 EOM
13090                    d_strtoll="$undef"
13091                    ;;
13092                 esac
13093         else
13094                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13095                 d_strtoll="$undef"
13096         fi
13097         ;;
13098 esac
13099
13100 : see if strtoq exists
13101 set strtoq d_strtoq
13102 eval $inlibc
13103
13104 : see if strtoul exists
13105 set strtoul d_strtoul
13106 eval $inlibc
13107
13108 case "$d_strtoul" in
13109 "$define")
13110         $cat <<EOM
13111 Checking whether your strtoul() works okay...
13112 EOM
13113         $cat >try.c <<'EOCP'
13114 #include <errno.h>
13115 #include <stdio.h>
13116 extern unsigned long int strtoul(char *s, char **, int); 
13117 static int bad = 0;
13118 void check(char *s, unsigned long eul, int een) {
13119         unsigned long gul;
13120         errno = 0;
13121         gul = strtoul(s, 0, 10);
13122         if (!((gul == eul) && (errno == een)))
13123                 bad++;
13124 }
13125 int main() {
13126         check(" 1", 1L, 0);
13127         check(" 0", 0L, 0);
13128 EOCP
13129         case "$longsize" in
13130         8)
13131             $cat >>try.c <<'EOCP'
13132         check("18446744073709551615", 18446744073709551615UL, 0);
13133         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13134 #if 0 /* strtoul() for /^-/ strings is undefined. */
13135         check("-1", 18446744073709551615UL, 0);
13136         check("-18446744073709551614", 2, 0);
13137         check("-18446744073709551615", 1, 0);
13138         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13139         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13140 #endif
13141 EOCP
13142                 ;;
13143         4)
13144                     $cat >>try.c <<'EOCP'
13145         check("4294967295", 4294967295UL, 0);
13146         check("4294967296", 4294967295UL, ERANGE);
13147 #if 0 /* strtoul() for /^-/ strings is undefined. */
13148         check("-1", 4294967295UL, 0);
13149         check("-4294967294", 2, 0);
13150         check("-4294967295", 1, 0);
13151         check("-4294967296", 4294967295UL, ERANGE);
13152         check("-4294967297", 4294967295UL, ERANGE);
13153 #endif
13154 EOCP
13155                 ;;
13156         *)
13157 : Should we write these tests to be more portable by sprintf-ing
13158 : ~0 and then manipulating that char string as input for strtol?
13159                 ;;
13160         esac
13161         $cat >>try.c <<'EOCP'
13162         if (!bad)
13163                 printf("ok\n");
13164         return 0;
13165 }
13166 EOCP
13167         set try
13168         if eval $compile; then
13169                 case "`$run ./try`" in
13170                 ok) echo "Your strtoul() seems to be working okay." ;;
13171                 *) cat <<EOM >&4
13172 Your strtoul() doesn't seem to be working okay.
13173 EOM
13174                    d_strtoul="$undef"
13175                    ;;
13176                 esac
13177         fi
13178         ;;
13179 esac
13180
13181 : see if strtoull exists
13182 set strtoull d_strtoull
13183 eval $inlibc
13184
13185 case "$d_longlong-$d_strtoull" in
13186 "$define-$define")
13187         $cat <<EOM
13188 Checking whether your strtoull() works okay...
13189 EOM
13190         $cat >try.c <<'EOCP'
13191 #include <errno.h>
13192 #ifdef __hpux
13193 #define strtoull __strtoull
13194 #endif
13195 #include <stdio.h>
13196 extern unsigned long long int strtoull(char *s, char **, int); 
13197 static int bad = 0;
13198 int check(char *s, long long eull, int een) {
13199         long long gull;
13200         errno = 0;
13201         gull = strtoull(s, 0, 10);
13202         if (!((gull == eull) && (errno == een)))
13203                 bad++;
13204 }
13205 int main() {
13206         check(" 1",                                        1LL, 0);
13207         check(" 0",                                        0LL, 0);
13208         check("18446744073709551615",  18446744073709551615ULL, 0);
13209         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13210 #if 0 /* strtoull() for /^-/ strings is undefined. */
13211         check("-1",                    18446744073709551615ULL, 0);
13212         check("-18446744073709551614",                     2LL, 0);
13213         check("-18446744073709551615",                     1LL, 0);
13214         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13215         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13216 #endif
13217         if (!bad)
13218                 printf("ok\n");
13219 }
13220 EOCP
13221         set try
13222         if eval $compile; then
13223                 case "`$run ./try`" in
13224                 ok) echo "Your strtoull() seems to be working okay." ;;
13225                 *) cat <<EOM >&4
13226 Your strtoull() doesn't seem to be working okay.
13227 EOM
13228                    d_strtoull="$undef"
13229                    ;;
13230                 esac
13231         fi
13232         ;;
13233 esac
13234
13235 : see if strtouq exists
13236 set strtouq d_strtouq
13237 eval $inlibc
13238
13239 case "$d_strtouq" in
13240 "$define")
13241         $cat <<EOM
13242 Checking whether your strtouq() works okay...
13243 EOM
13244         $cat >try.c <<'EOCP'
13245 #include <errno.h>
13246 #include <stdio.h>
13247 extern unsigned long long int strtouq(char *s, char **, int); 
13248 static int bad = 0;
13249 void check(char *s, unsigned long long eull, int een) {
13250         unsigned long long gull;
13251         errno = 0;
13252         gull = strtouq(s, 0, 10);
13253         if (!((gull == eull) && (errno == een)))
13254                 bad++;
13255 }
13256 int main() {
13257         check(" 1",                                        1LL, 0);
13258         check(" 0",                                        0LL, 0);
13259         check("18446744073709551615",  18446744073709551615ULL, 0);
13260         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13261 #if 0 /* strtouq() for /^-/ strings is undefined. */
13262         check("-1",                    18446744073709551615ULL, 0);
13263         check("-18446744073709551614",                     2LL, 0);
13264         check("-18446744073709551615",                     1LL, 0);
13265         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13266         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13267 #endif
13268         if (!bad)
13269                 printf("ok\n");
13270         return 0;
13271 }
13272 EOCP
13273         set try
13274         if eval $compile; then
13275                 case "`$run ./try`" in
13276                 ok) echo "Your strtouq() seems to be working okay." ;;
13277                 *) cat <<EOM >&4
13278 Your strtouq() doesn't seem to be working okay.
13279 EOM
13280                    d_strtouq="$undef"
13281                    ;;
13282                 esac
13283         fi
13284         ;;
13285 esac
13286
13287 : see if strxfrm exists
13288 set strxfrm d_strxfrm
13289 eval $inlibc
13290
13291 : see if symlink exists
13292 set symlink d_symlink
13293 eval $inlibc
13294
13295 : see if syscall exists
13296 set syscall d_syscall
13297 eval $inlibc
13298
13299 : see if prototype for syscall is available
13300 echo " "
13301 set d_syscallproto syscall $i_unistd unistd.h
13302 eval $hasproto
13303
13304 : see if sysconf exists
13305 set sysconf d_sysconf
13306 eval $inlibc
13307
13308 : see if system exists
13309 set system d_system
13310 eval $inlibc
13311
13312 : see if tcgetpgrp exists
13313 set tcgetpgrp d_tcgetpgrp
13314 eval $inlibc
13315
13316 : see if tcsetpgrp exists
13317 set tcsetpgrp d_tcsetpgrp
13318 eval $inlibc
13319
13320 : see if prototype for telldir is available
13321 echo " "
13322 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13323 eval $hasproto
13324
13325 : see if this is a sys/times.h system
13326 set sys/times.h i_systimes
13327 eval $inhdr
13328
13329 : see if times exists
13330 echo " "
13331 if set times val -f d_times; eval $csym; $val; then
13332         echo 'times() found.' >&4
13333         d_times="$define"
13334         inc=''
13335         case "$i_systimes" in
13336         "$define") inc='sys/times.h';;
13337         esac
13338         rp="What is the type returned by times() on this system?"
13339         set clock_t clocktype long stdio.h sys/types.h $inc
13340         eval $typedef_ask
13341 else
13342         echo 'times() NOT found, hope that will do.' >&4
13343         d_times="$undef"
13344         clocktype='int'
13345 fi
13346
13347 : see if truncate exists
13348 set truncate d_truncate
13349 eval $inlibc
13350
13351 : see if tzname[] exists
13352 echo " "
13353 if set tzname val -a d_tzname; eval $csym; $val; then
13354         val="$define"
13355         echo 'tzname[] found.' >&4
13356 else
13357         val="$undef"
13358         echo 'tzname[] NOT found.' >&4
13359 fi
13360 set d_tzname
13361 eval $setvar
13362
13363 case "$osname" in
13364 next|rhapsody|darwin) multiarch="$define" ;;
13365 esac
13366 case "$multiarch" in
13367 ''|[nN]*) multiarch="$undef" ;;
13368 esac
13369
13370 : check for ordering of bytes in a long
13371 echo " "
13372 case "$usecrosscompile$multiarch" in
13373 *$define*)
13374         $cat <<EOM
13375 You seem to be either cross-compiling or doing a multiarchitecture build,
13376 skipping the byteorder check.
13377
13378 EOM
13379         byteorder='ffff'
13380         ;;
13381 *)
13382         case "$byteorder" in
13383         '')
13384                 $cat <<'EOM'
13385 In the following, larger digits indicate more significance.  A big-endian
13386 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13387 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13388 machines may have weird orders like 3412.  A Cray will report 87654321,
13389 an Alpha will report 12345678. If the test program works the default is
13390 probably right.
13391 I'm now running the test program...
13392 EOM
13393                 $cat >try.c <<'EOCP'
13394 #include <stdio.h>
13395 int main()
13396 {
13397         int i;
13398         union {
13399                 unsigned long l;
13400                 char c[sizeof(long)];
13401         } u;
13402
13403         if (sizeof(long) > 4)
13404                 u.l = (0x08070605L << 32) | 0x04030201L;
13405         else
13406                 u.l = 0x04030201L;
13407         for (i = 0; i < sizeof(long); i++)
13408                 printf("%c", u.c[i]+'0');
13409         printf("\n");
13410         exit(0);
13411 }
13412 EOCP
13413                 xxx_prompt=y
13414                 set try
13415                 if eval $compile && ./try > /dev/null; then
13416                         dflt=`$run ./try`
13417                         case "$dflt" in
13418                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13419                                 echo "(The test program ran ok.)"
13420                                 echo "byteorder=$dflt"
13421                                 xxx_prompt=n
13422                         ;;
13423                         ????|????????) echo "(The test program ran ok.)" ;;
13424                         *) echo "(The test program didn't run right for some reason.)" ;;
13425                         esac
13426                 else
13427                         dflt='4321'
13428                         cat <<'EOM'
13429 (I can't seem to compile the test program.  Guessing big-endian...)
13430 EOM
13431                 fi
13432                 case "$xxx_prompt" in
13433                 y)
13434                         rp="What is the order of bytes in a long?"
13435                         . ./myread
13436                         byteorder="$ans"
13437                         ;;
13438                 *)      byteorder=$dflt
13439                         ;;
13440                 esac
13441                 ;;
13442         esac
13443         $rm -f try.c try
13444         ;;
13445 esac
13446
13447
13448 $cat <<EOM
13449
13450 Checking to see whether you can access character data unalignedly...
13451 EOM
13452 $cat >try.c <<EOCP
13453 #include <stdio.h>
13454 #define U32 $u32type
13455 #define BYTEORDER $byteorder
13456 int main() {
13457 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13458     U8 buf[] = "\0\0\0\1\0\0\0\0";
13459     U32 *up;
13460     int i;
13461
13462     if (sizeof(U32) != 4) {
13463         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13464         exit(1);
13465     }
13466
13467     fflush(stdout);
13468
13469     for (i = 0; i < 4; i++) {
13470         up = (U32*)(buf + i);
13471         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13472                (*up == 1 << (8*(3-i)))  /* little-endian */
13473               )
13474            )
13475         {
13476             printf("read failed (%x)\n", *up);
13477             exit(2);
13478         }
13479     }
13480
13481     /* write test */
13482     for (i = 0; i < 4; i++) {
13483         up = (U32*)(buf + i);
13484         *up = 0xBeef;
13485         if (*up != 0xBeef) {
13486             printf("write failed (%x)\n", *up);
13487             exit(3);
13488         }
13489     }
13490
13491     exit(0);
13492 #else
13493     printf("1\n");
13494     exit(1);
13495 #endif
13496     return 0;
13497 }
13498 EOCP
13499 set try
13500 if eval $compile_ok; then
13501         echo "(Testing for character data alignment may dump core.)" >&4
13502         $run ./try 2>&1 >/dev/null
13503         case "$?" in
13504         0)      cat >&4 <<EOM
13505 You can access character data pretty unalignedly.
13506 EOM
13507                 d_u32align="$undef"
13508                 ;;
13509         *)      cat >&4 <<EOM
13510 It seems that you must access character data in an aligned manner.
13511 EOM
13512                 d_u32align="$define"
13513                 ;;
13514         esac
13515         $rm -f core core.try.* try.core
13516 else
13517         rp='Can you access character data at unaligned addresses?'
13518         dflt='n'
13519         . ./myread
13520         case "$ans" in
13521         [yY]*)  d_u32align="$undef"  ;;
13522         *)      d_u32align="$define" ;;
13523         esac
13524 fi
13525
13526 : see if ualarm exists
13527 set ualarm d_ualarm
13528 eval $inlibc
13529
13530 : see if umask exists
13531 set umask d_umask
13532 eval $inlibc
13533
13534 : see if unordered exists
13535 set unordered d_unordered
13536 eval $inlibc
13537
13538 : see if usleep exists
13539 set usleep d_usleep
13540 eval $inlibc
13541
13542 : see if prototype for usleep is available
13543 echo " "
13544 set d_usleepproto usleep $i_unistd unistd.h
13545 eval $hasproto
13546
13547 : see if ustat exists
13548 set ustat d_ustat
13549 eval $inlibc
13550
13551 : backward compatibility for d_hvfork
13552 if test X$d_hvfork != X; then
13553         d_vfork="$d_hvfork"
13554         d_hvfork=''
13555 fi
13556 : see if there is a vfork
13557 val=''
13558 set vfork val
13559 eval $inlibc
13560
13561 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13562 : perl on Solaris 2.x, and probably elsewhere.
13563 case "$val" in
13564 $define)
13565         echo " "
13566         case "$usevfork" in
13567         false) dflt='n';;
13568         *) dflt='y';;
13569         esac
13570         cat <<'EOM'
13571  
13572 Perl can only use a vfork() that doesn't suffer from strict
13573 restrictions on calling functions or modifying global data in
13574 the child.  For example, glibc-2.1 contains such a vfork()
13575 that is unsuitable.  If your system provides a proper fork()
13576 call, chances are that you do NOT want perl to use vfork().
13577
13578 EOM
13579         rp="Do you still want to use vfork()?"
13580         . ./myread
13581         case "$ans" in
13582         y|Y) ;;
13583         *)
13584                 echo "Ok, we won't use vfork()."
13585                 val="$undef"
13586                 ;;
13587         esac
13588         ;;
13589 esac
13590 set d_vfork
13591 eval $setvar
13592 case "$d_vfork" in
13593 $define) usevfork='true';;
13594 *) usevfork='false';;
13595 esac
13596
13597 : see if closedir exists
13598 set closedir d_closedir
13599 eval $inlibc
13600
13601 case "$d_closedir" in
13602 "$define")
13603         echo " "
13604         echo "Checking whether closedir() returns a status..." >&4
13605         cat > try.c <<EOM
13606 #$i_dirent I_DIRENT             /**/
13607 #$i_sysdir I_SYS_DIR            /**/
13608 #$i_sysndir I_SYS_NDIR          /**/
13609 #$i_systypes I_SYS_TYPES        /**/
13610
13611 #if defined(I_SYS_TYPES)
13612 #include <sys/types.h>
13613 #endif
13614 #if defined(I_DIRENT)
13615 #include <dirent.h>
13616 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13617 #include <sys/dir.h>
13618 #endif
13619 #else
13620 #ifdef I_SYS_NDIR
13621 #include <sys/ndir.h>
13622 #else
13623 #ifdef I_SYS_DIR
13624 #ifdef hp9000s500
13625 #include <ndir.h>       /* may be wrong in the future */
13626 #else
13627 #include <sys/dir.h>
13628 #endif
13629 #endif
13630 #endif
13631 #endif 
13632 int main() { return closedir(opendir(".")); }
13633 EOM
13634         set try
13635         if eval $compile_ok; then
13636                 if $run ./try > /dev/null 2>&1 ; then
13637                         echo "Yes, it does."
13638                         val="$undef"
13639                 else
13640                         echo "No, it doesn't."
13641                         val="$define"
13642                 fi
13643         else
13644                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13645                 val="$define"
13646         fi
13647         ;;
13648 *)
13649         val="$undef";
13650         ;;
13651 esac
13652 set d_void_closedir
13653 eval $setvar
13654 $rm -f try try.*
13655 : see if there is a wait4
13656 set wait4 d_wait4
13657 eval $inlibc
13658
13659 : see if waitpid exists
13660 set waitpid d_waitpid
13661 eval $inlibc
13662
13663 : see if wcstombs exists
13664 set wcstombs d_wcstombs
13665 eval $inlibc
13666
13667 : see if wctomb exists
13668 set wctomb d_wctomb
13669 eval $inlibc
13670
13671 : see if writev exists
13672 set writev d_writev
13673 eval $inlibc
13674
13675 : preserve RCS keywords in files with variable substitution, grrr
13676 Date='$Date'
13677 Id='$Id'
13678 Log='$Log'
13679 RCSfile='$RCSfile'
13680 Revision='$Revision'
13681
13682 : check for alignment requirements
13683 echo " "
13684 case "$usecrosscompile$multiarch" in
13685 *$define*)
13686         $cat <<EOM
13687 You seem to be either cross-compiling or doing a multiarchitecture build,
13688 skipping the memory alignment check.
13689
13690 EOM
13691         case "$alignbytes" in
13692         '') alignbytes=8 ;;
13693         esac
13694         ;;
13695 *)
13696         case "$alignbytes" in
13697         '') echo "Checking alignment constraints..." >&4
13698                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13699                         $cat >try.c <<'EOCP'
13700 typedef long double NV;
13701 EOCP
13702                 else
13703                         $cat >try.c <<'EOCP'
13704 typedef double NV;
13705 EOCP
13706                 fi
13707                 $cat >>try.c <<'EOCP'
13708 #include <stdio.h>
13709 struct foobar {
13710         char foo;
13711         NV bar;
13712 } try_algn;
13713 int main()
13714 {
13715     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13716     return(0);
13717 }
13718 EOCP
13719                 set try
13720                 if eval $compile_ok; then
13721                         dflt=`$run ./try`
13722                 else
13723                         dflt='8'
13724                         echo "(I can't seem to compile the test program...)"
13725                 fi
13726                 ;;
13727         *) dflt="$alignbytes"
13728                 ;;
13729         esac
13730         rp="Doubles must be aligned on a how-many-byte boundary?"
13731         . ./myread
13732         alignbytes="$ans"
13733         $rm -f try.c try
13734         ;;
13735 esac
13736
13737
13738 : set the base revision
13739 baserev=5.0
13740
13741 : how do we catenate cpp tokens here?
13742 echo " "
13743 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13744 $cat >cpp_stuff.c <<'EOCP'
13745 #define RCAT(a,b)a/**/b
13746 #define ACAT(a,b)a ## b
13747 RCAT(Rei,ser)
13748 ACAT(Cir,cus)
13749 EOCP
13750 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13751 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13752         echo "Oh!  Smells like ANSI's been here." >&4
13753         echo "We can catify or stringify, separately or together!"
13754         cpp_stuff=42
13755 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13756         echo "Ah, yes!  The good old days!" >&4
13757         echo "However, in the good old days we don't know how to stringify and"
13758         echo "catify at the same time."
13759         cpp_stuff=1
13760 else
13761         $cat >&4 <<EOM
13762 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13763 to have to edit the values of CAT[2-5] in config.h...
13764 EOM
13765         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13766 fi
13767 $rm -f cpp_stuff.*
13768
13769 : see if this is a db.h system
13770 set db.h i_db
13771 eval $inhdr
13772
13773 case "$i_db" in
13774 $define)
13775         : Check db version.
13776         echo " "
13777         echo "Checking Berkeley DB version ..." >&4
13778         $cat >try.c <<EOCP
13779 #$d_const HASCONST
13780 #ifndef HASCONST
13781 #define const
13782 #endif
13783 #include <sys/types.h>
13784 #include <stdio.h>
13785 #include <db.h>
13786 int main(int argc, char *argv[])
13787 {
13788 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13789     int Major, Minor, Patch ;
13790     unsigned long Version ;
13791     (void)db_version(&Major, &Minor, &Patch) ;
13792     if (argc == 2) {
13793         printf("%d %d %d %d %d %d\n",
13794                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13795                Major, Minor, Patch);
13796         exit(0);
13797     }
13798     printf("You have Berkeley DB Version 2 or greater.\n");
13799
13800     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13801                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13802     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13803                 Major, Minor, Patch) ;
13804
13805     /* check that db.h & libdb are compatible */
13806     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13807         printf("db.h and libdb are incompatible.\n") ;
13808         exit(3);        
13809     }
13810
13811     printf("db.h and libdb are compatible.\n") ;
13812
13813     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13814                 + DB_VERSION_PATCH ;
13815
13816     /* needs to be >= 2.3.4 */
13817     if (Version < 2003004) {
13818     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13819         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13820         exit(2);        
13821     }
13822
13823     exit(0);
13824 #else
13825 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13826     if (argc == 2) {
13827         printf("1 0 0\n");
13828         exit(0);
13829     }
13830     printf("You have Berkeley DB Version 1.\n");
13831     exit(0);    /* DB version < 2: the coast is clear. */
13832 #else
13833     exit(1);    /* <db.h> not Berkeley DB? */
13834 #endif
13835 #endif
13836 }
13837 EOCP
13838         set try
13839         if eval $compile_ok && $run ./try; then
13840                 echo 'Looks OK.' >&4
13841                 set `$run ./try 1`
13842                 db_version_major=$1
13843                 db_version_minor=$2
13844                 db_version_patch=$3
13845         else
13846                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13847                 i_db=$undef
13848                 case " $libs " in
13849                 *"-ldb "*)
13850                         : Remove db from list of libraries to use
13851                         echo "Removing unusable -ldb from library list" >&4
13852                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13853                         shift
13854                         libs="$*"
13855                         echo "libs = $libs" >&4
13856                         ;;
13857                 esac
13858         fi
13859         $rm -f try.*
13860         ;;
13861 esac
13862
13863 case "$i_db" in
13864 define)
13865         : Check the return type needed for hash 
13866         echo " "
13867         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13868         $cat >try.c <<EOCP
13869 #$d_const HASCONST
13870 #ifndef HASCONST
13871 #define const
13872 #endif
13873 #include <sys/types.h>
13874 #include <db.h>
13875
13876 #ifndef DB_VERSION_MAJOR
13877 u_int32_t hash_cb (ptr, size)
13878 const void *ptr;
13879 size_t size;
13880 {
13881 }
13882 HASHINFO info;
13883 int main()
13884 {
13885         info.hash = hash_cb;
13886 }
13887 #endif
13888 EOCP
13889         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13890                 if $contains warning try.out >>/dev/null 2>&1 ; then
13891                         db_hashtype='int'
13892                 else
13893                         db_hashtype='u_int32_t'
13894                 fi
13895         else
13896                 : XXX Maybe we should just give up here.
13897                 db_hashtype=u_int32_t
13898                 $cat try.out >&4
13899                 echo "Help:  I can't seem to compile the db test program." >&4
13900                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13901         fi
13902         $rm -f try.*
13903         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13904         ;;
13905 *)      db_hashtype=u_int32_t
13906         ;;
13907 esac
13908 case "$i_db" in
13909 define)
13910         : Check the return type needed for prefix 
13911         echo " "
13912         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13913         cat >try.c <<EOCP
13914 #$d_const HASCONST
13915 #ifndef HASCONST
13916 #define const
13917 #endif
13918 #include <sys/types.h>
13919 #include <db.h>
13920
13921 #ifndef DB_VERSION_MAJOR
13922 size_t prefix_cb (key1, key2)
13923 const DBT *key1;
13924 const DBT *key2;
13925 {
13926 }
13927 BTREEINFO info;
13928 int main()
13929 {
13930         info.prefix = prefix_cb;
13931 }
13932 #endif
13933 EOCP
13934         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13935                 if $contains warning try.out >>/dev/null 2>&1 ; then
13936                         db_prefixtype='int'
13937                 else
13938                         db_prefixtype='size_t'
13939                 fi
13940         else
13941                 db_prefixtype='size_t'
13942                 : XXX Maybe we should just give up here.
13943                 $cat try.out >&4
13944                 echo "Help:  I can't seem to compile the db test program." >&4
13945                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13946         fi
13947         $rm -f try.*
13948         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13949         ;;
13950 *)      db_prefixtype='size_t'
13951         ;;
13952 esac
13953
13954
13955 : How can we generate normalized random numbers ?
13956 echo " "
13957 echo "Looking for a random number function..." >&4
13958 case "$randfunc" in
13959 '')
13960         if set drand48 val -f; eval $csym; $val; then
13961                 dflt="drand48"
13962                 echo "Good, found drand48()." >&4
13963         elif set random val -f; eval $csym; $val; then
13964                 dflt="random"
13965                 echo "OK, found random()." >&4
13966         else
13967                 dflt="rand"
13968                 echo "Yick, looks like I have to use rand()." >&4
13969         fi
13970         echo " "
13971         ;;
13972 *)
13973         dflt="$randfunc"
13974         ;;
13975 esac
13976 cont=true
13977
13978 case "$ccflags" in
13979 *-Dmy_rand=*|*-Dmy_srand=*)
13980         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13981         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13982         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13983         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13984         ;;
13985 esac
13986
13987 while $test "$cont"; do
13988         rp="Use which function to generate random numbers?"
13989         . ./myread
13990         if $test "$ans" = "$dflt"; then
13991                 : null
13992         else
13993                 randbits=''
13994         fi
13995         randfunc="$ans"
13996         if set $ans val -f; eval $csym; $val; then
13997                 cont=''
13998         else
13999                 dflt=y
14000                 rp="I cannot find function $ans. Use that name anyway?"
14001                 . ./myread
14002                 dflt=rand
14003                 case "$ans" in
14004                         [yY]*) cont='';;
14005                 esac
14006         fi
14007         case "$cont" in
14008         '')
14009                 case "$randfunc" in
14010                 drand48)
14011                         drand01="drand48()"
14012                         seedfunc="srand48"
14013                         randbits=48
14014                         randseedtype=long
14015                         ;;
14016                 rand|random)
14017                         case "$randbits" in
14018                         '')
14019 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14020                                 $cat >try.c <<EOCP
14021 #$i_unistd I_UNISTD
14022 #$i_stdlib I_STDLIB
14023 #include <stdio.h>
14024 #ifdef I_UNISTD
14025 #  include <unistd.h>
14026 #endif
14027 #ifdef I_STDLIB
14028 #  include <stdlib.h>
14029 #endif
14030 int main()
14031 {
14032         register int i;
14033         register unsigned long tmp;
14034         register unsigned long max = 0L;
14035
14036         for (i = 1000; i; i--) {
14037                 tmp = (unsigned long) $randfunc();
14038                 if (tmp > max) max = tmp;
14039         }
14040         for (i = 0; max; i++)
14041                 max /= 2;
14042         printf("%d\n",i);
14043 }
14044 EOCP
14045                                 set try
14046                                 if eval $compile_ok; then
14047                                         dflt=`try`
14048                                 else
14049                                         dflt='?'
14050                                         echo "(I can't seem to compile the test program...)"
14051                                 fi
14052                                 ;;
14053                         *)
14054                                 dflt="$randbits"
14055                                 ;;
14056                         esac
14057                         rp="How many bits does your $randfunc() function produce?"
14058                         . ./myread
14059                         randbits="$ans"
14060                         $rm -f try.c try
14061                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14062                         seedfunc="s$randfunc"
14063                         randseedtype=unsigned
14064                         ;;
14065                 *)
14066                         dflt="31"
14067                         rp="How many bits does your $randfunc() function produce?"
14068                         . ./myread
14069                         randbits="$ans"
14070                         seedfunc="s$randfunc"
14071                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14072                         if set $seedfunc val -f; eval $csym; $val; then
14073                                 echo "(Using $seedfunc() to seed random generator)"
14074                         else
14075                                 echo "(Warning: no $seedfunc() to seed random generator)"
14076                                 seedfunc=rand
14077                         fi
14078                         randseedtype=unsigned
14079                         ;;
14080                 esac
14081                 ;;
14082         esac
14083 done
14084
14085 echo " "
14086 echo "Determining whether or not we are on an EBCDIC system..." >&4
14087 $cat >try.c <<'EOM'
14088 int main()
14089 {
14090   if ('M'==0xd4) return 0;
14091   return 1;
14092 }
14093 EOM
14094
14095 val=$undef
14096 set try
14097 if eval $compile_ok; then
14098         if $run ./try; then
14099                 echo "You seem to speak EBCDIC." >&4
14100                 val="$define"
14101         else
14102                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14103         fi
14104 else
14105         echo "I'm unable to compile the test program." >&4
14106         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14107 fi
14108 $rm -f try try.*
14109 set ebcdic
14110 eval $setvar
14111
14112 echo " "
14113 $cat >&4 <<EOM
14114 Checking how to flush all pending stdio output...
14115 EOM
14116 # I only know how to find the first 32 possibly open files on SunOS.
14117 # See also hints/sunos_4_1.sh and util.c  --AD
14118 case "$osname" in
14119 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14120 esac
14121 $cat >>try.c <<EOCP
14122 #include <stdio.h>
14123 #$i_unistd I_UNISTD
14124 #ifdef I_UNISTD
14125 # include <unistd.h>
14126 #endif
14127 #$d_sysconf HAS_SYSCONF
14128 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14129 #ifdef HAS_STDIO_STREAM_ARRAY
14130 # define STDIO_STREAM_ARRAY $stdio_stream_array
14131 #endif
14132 int main() {
14133   FILE* p;
14134   unlink("try.out");
14135   p = fopen("try.out", "w");
14136 #ifdef TRY_FPUTC
14137   fputc('x', p);
14138 #else
14139 # ifdef TRY_FPRINTF
14140   fprintf(p, "x");
14141 # endif
14142 #endif
14143 #ifdef TRY_FFLUSH_NULL
14144   fflush(NULL);
14145 #endif
14146 #ifdef TRY_FFLUSH_ALL
14147   {
14148     long open_max = -1;
14149 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14150     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14151 # else
14152 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14153     open_max = sysconf(_SC_OPEN_MAX);
14154 #  else
14155 #   ifdef FOPEN_MAX
14156     open_max = FOPEN_MAX;
14157 #   else
14158 #    ifdef OPEN_MAX
14159     open_max = OPEN_MAX;
14160 #    else
14161 #     ifdef _NFILE
14162     open_max = _NFILE;
14163 #     endif
14164 #    endif
14165 #   endif
14166 #  endif
14167 # endif 
14168 # ifdef HAS_STDIO_STREAM_ARRAY
14169     if (open_max > 0) {
14170       long i;
14171       for (i = 0; i < open_max; i++)
14172             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14173                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14174                 STDIO_STREAM_ARRAY[i]._flag)
14175                 fflush(&STDIO_STREAM_ARRAY[i]);
14176     }   
14177   }
14178 # endif
14179 #endif
14180   _exit(42);
14181 }
14182 EOCP
14183 : first we have to find out how _not_ to flush
14184 $to try.c
14185 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14186     output=''
14187     set try -DTRY_FPUTC
14188     if eval $compile; then
14189             $run ./try 2>/dev/null
14190             code="$?"
14191             $from try.out
14192             if $test ! -s try.out -a "X$code" = X42; then
14193                 output=-DTRY_FPUTC
14194             fi
14195     fi
14196     case "$output" in
14197     '')
14198             set try -DTRY_FPRINTF
14199             if eval $compile; then
14200                     $run ./try 2>/dev/null
14201                     code="$?"
14202                     $from try.out
14203                     if $test ! -s try.out -a "X$code" = X42; then
14204                         output=-DTRY_FPRINTF
14205                     fi
14206             fi
14207         ;;
14208     esac
14209 fi
14210 : check for fflush NULL behaviour
14211 case "$fflushNULL" in
14212 '')     set try -DTRY_FFLUSH_NULL $output
14213         if eval $compile; then
14214                 $run ./try 2>/dev/null
14215                 code="$?"
14216                 $from try.out
14217                 if $test -s try.out -a "X$code" = X42; then
14218                         fflushNULL="`$cat try.out`"
14219                 else
14220                         if $test "X$code" != X42; then
14221                                 $cat >&4 <<EOM
14222 (If this test failed, don't worry, we'll try another method shortly.)
14223 EOM
14224                         fi
14225                 fi
14226         fi
14227         $rm -f core try.core core.try.*
14228         case "$fflushNULL" in
14229         x)      $cat >&4 <<EOM
14230 Your fflush(NULL) works okay for output streams.
14231 Let's see if it clobbers input pipes...
14232 EOM
14233 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14234 # bug that improperly flushes the input end of pipes.  So we avoid the
14235 # autoflush on fork/system/exec support for now. :-(
14236 $cat >tryp.c <<EOCP
14237 #include <stdio.h>
14238 int
14239 main(int argc, char **argv)
14240 {
14241     char buf[1024];
14242     int i;
14243     char *bp = buf;
14244     while (1) {
14245         while ((i = getc(stdin)) != -1
14246                && (*bp++ = i) != '\n'
14247                && bp < &buf[1024])
14248         /* DO NOTHING */ ;
14249         *bp = '\0';
14250         fprintf(stdout, "%s", buf);
14251         fflush(NULL);
14252         if (i == -1)
14253             return 0;
14254         bp = buf;
14255     }
14256 }
14257 EOCP
14258                 fflushNULL="$define"
14259                 set tryp
14260                 if eval $compile; then
14261                     $rm -f tryp.out
14262                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14263                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14264                        $cat >&4 <<EOM
14265 fflush(NULL) seems to behave okay with input streams.
14266 EOM
14267                         fflushNULL="$define"
14268                     else
14269                         $cat >&4 <<EOM
14270 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14271 EOM
14272                         fflushNULL="$undef"
14273                     fi
14274                 fi
14275                 $rm -f core tryp.c tryp.core core.tryp.*
14276                 ;;
14277         '')     $cat >&4 <<EOM
14278 Your fflush(NULL) isn't working (contrary to ANSI C).
14279 EOM
14280                 fflushNULL="$undef"
14281                 ;;
14282         *)      $cat >&4 <<EOM
14283 Cannot figure out whether your fflush(NULL) works or not.
14284 I'm assuming it doesn't (contrary to ANSI C).
14285 EOM
14286                 fflushNULL="$undef"
14287                 ;;
14288         esac
14289         ;;
14290 $define|true|[yY]*)
14291         fflushNULL="$define"
14292         ;;
14293 *)
14294         fflushNULL="$undef"
14295         ;;
14296 esac
14297 : check explicit looping only if NULL did not work, and if the pipe
14298 : bug does not show up on an explicit flush too
14299 case "$fflushNULL" in
14300 "$undef")
14301         $cat >tryp.c <<EOCP
14302 #include <stdio.h>
14303 int
14304 main(int argc, char **argv)
14305 {
14306     char buf[1024];
14307     int i;
14308     char *bp = buf;
14309     while (1) {
14310         while ((i = getc(stdin)) != -1
14311                && (*bp++ = i) != '\n'
14312                && bp < &buf[1024])
14313         /* DO NOTHING */ ;
14314         *bp = '\0';
14315         fprintf(stdout, "%s", buf);
14316         fflush(stdin);
14317         if (i == -1)
14318             return 0;
14319         bp = buf;
14320     }
14321 }
14322 EOCP
14323         set tryp
14324         if eval $compile; then
14325             $rm -f tryp.out
14326             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14327             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14328                $cat >&4 <<EOM
14329 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14330 EOM
14331                 : now check for fflushall behaviour
14332                 case "$fflushall" in
14333                 '')     set try -DTRY_FFLUSH_ALL $output
14334                         if eval $compile; then
14335                                 $cat >&4 <<EOM
14336 (Now testing the other method--but note that this also may fail.)
14337 EOM
14338                                 $run ./try 2>/dev/null
14339                                 code=$?
14340                                 $from try.out
14341                                 if $test -s try.out -a "X$code" = X42; then
14342                                         fflushall="`$cat try.out`"
14343                                 fi
14344                         fi
14345                         $rm -f core try.core core.try.*
14346                         case "$fflushall" in
14347                         x)      $cat >&4 <<EOM
14348 Whew. Flushing explicitly all the stdio streams works.
14349 EOM
14350                                 fflushall="$define"
14351                                 ;;
14352                         '')     $cat >&4 <<EOM
14353 Sigh. Flushing explicitly all the stdio streams doesn't work.
14354 EOM
14355                                 fflushall="$undef"
14356                                 ;;
14357                         *)      $cat >&4 <<EOM
14358 Cannot figure out whether flushing stdio streams explicitly works or not.
14359 I'm assuming it doesn't.
14360 EOM
14361                                 fflushall="$undef"
14362                                 ;;
14363                         esac
14364                         ;;
14365                 "$define"|true|[yY]*)
14366                         fflushall="$define"
14367                         ;;
14368                 *)
14369                         fflushall="$undef"
14370                         ;;
14371                 esac
14372             else
14373                 $cat >&4 <<EOM
14374 All is futile.  Even fflush(stdin) clobbers input pipes!
14375 EOM
14376                 fflushall="$undef"
14377             fi
14378         else
14379             fflushall="$undef"
14380         fi
14381         $rm -f core tryp.c tryp.core core.tryp.*
14382         ;;
14383 *)      fflushall="$undef"
14384         ;;
14385 esac
14386
14387 case "$fflushNULL$fflushall" in
14388 undefundef)
14389         $cat <<EOM
14390 OK, I give up.  I cannot figure out how to flush pending stdio output.
14391 We won't be flushing handles at all before fork/exec/popen.
14392 EOM
14393         ;;
14394 esac
14395 $rm -f try.* try$exe_ext
14396
14397 : Store the full pathname to the ar program for use in the C program
14398 : Respect a hint or command line value for full_ar.
14399 case "$full_ar" in
14400 '') full_ar=$ar ;;
14401 esac
14402
14403 : Store the full pathname to the sed program for use in the C program
14404 full_sed=$sed
14405
14406 : see what type gids are declared as in the kernel
14407 echo " "
14408 echo "Looking for the type for group ids returned by getgid()."
14409 set gid_t gidtype xxx stdio.h sys/types.h
14410 eval $typedef
14411 case "$gidtype" in
14412 xxx)
14413         xxx=`./findhdr sys/user.h`
14414         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14415         case $1 in
14416         unsigned) dflt="$1 $2" ;;
14417         *) dflt="$1" ;;
14418         esac
14419         ;;
14420 *) dflt="$gidtype";;
14421 esac
14422 case "$gidtype" in
14423 gid_t) echo "gid_t found." ;;
14424 *)      rp="What is the type for group ids returned by getgid()?"
14425         . ./myread
14426         gidtype="$ans"
14427         ;;
14428 esac
14429
14430 echo " "
14431 case "$gidtype" in
14432 *_t) zzz="$gidtype"     ;;
14433 *)   zzz="gid"          ;;
14434 esac
14435 echo "Checking the size of $zzz..." >&4 
14436 cat > try.c <<EOCP
14437 #include <sys/types.h>
14438 #include <stdio.h>
14439 int main() {
14440     printf("%d\n", (int)sizeof($gidtype));
14441     exit(0);
14442 }
14443 EOCP
14444 set try
14445 if eval $compile_ok; then
14446         yyy=`$run ./try`
14447         case "$yyy" in
14448         '')     gidsize=4
14449                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14450                 ;;
14451         *)      gidsize=$yyy
14452                 echo "Your $zzz is $gidsize bytes long."
14453                 ;;
14454         esac
14455 else
14456         gidsize=4
14457         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14458 fi
14459
14460
14461 echo " "
14462 case "$gidtype" in
14463 *_t) zzz="$gidtype"     ;;
14464 *)   zzz="gid"          ;;
14465 esac
14466 echo "Checking the sign of $zzz..." >&4 
14467 cat > try.c <<EOCP
14468 #include <sys/types.h>
14469 #include <stdio.h>
14470 int main() {
14471         $gidtype foo = -1;
14472         if (foo < 0)
14473                 printf("-1\n");
14474         else
14475                 printf("1\n");
14476 }
14477 EOCP
14478 set try
14479 if eval $compile; then
14480         yyy=`$run ./try`
14481         case "$yyy" in
14482         '')     gidsign=1
14483                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14484                 ;;
14485         *)      gidsign=$yyy
14486                 case "$gidsign" in
14487                  1) echo "Your $zzz is unsigned." ;;
14488                 -1) echo "Your $zzz is signed."   ;;
14489                 esac
14490                 ;;
14491         esac
14492 else
14493         gidsign=1
14494         echo "(I can't compile the test program--guessing unsigned.)" >&4
14495 fi
14496
14497
14498 echo " "
14499
14500 if $test X"$quadtype" != X; then
14501
14502 echo "Checking how to print 64-bit integers..." >&4
14503
14504 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14505         $cat >try.c <<'EOCP'
14506 #include <sys/types.h>
14507 #include <stdio.h>
14508 int main() {
14509   int q = 12345678901;
14510   printf("%ld\n", q);
14511 }
14512 EOCP
14513         set try
14514         if eval $compile; then
14515                 yyy=`$run ./try`
14516                 case "$yyy" in
14517                 12345678901)
14518                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14519                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14520                         echo "We will use %d."
14521                         ;;
14522                 esac
14523         fi
14524 fi
14525
14526 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14527         $cat >try.c <<'EOCP'
14528 #include <sys/types.h>
14529 #include <stdio.h>
14530 int main() {
14531   long q = 12345678901;
14532   printf("%ld\n", q);
14533 }
14534 EOCP
14535         set try
14536         if eval $compile; then
14537                 yyy=`$run ./try`
14538                 case "$yyy" in
14539                 12345678901)
14540                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14541                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14542                         echo "We will use %ld."
14543                         ;;
14544                 esac
14545         fi
14546 fi
14547
14548 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14549         $cat >try.c <<'EOCP'
14550 #include <sys/types.h>
14551 #include <inttypes.h>
14552 #include <stdio.h>
14553 int main() {
14554   int64_t q = 12345678901;
14555   printf("%" PRId64 "\n", q);
14556 }
14557 EOCP
14558         set try
14559         if eval $compile; then
14560                 yyy=`$run ./try`
14561                 case "$yyy" in
14562                 12345678901)
14563                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14564                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14565                         echo "We will use the C9X style."
14566                         ;;
14567                 esac
14568         fi
14569 fi
14570
14571 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14572         $cat >try.c <<EOCP
14573 #include <sys/types.h>
14574 #include <stdio.h>
14575 int main() {
14576   $quadtype q = 12345678901;
14577   printf("%Ld\n", q);
14578 }
14579 EOCP
14580         set try
14581         if eval $compile; then
14582                 yyy=`$run ./try`
14583                 case "$yyy" in
14584                 12345678901)
14585                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14586                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14587                         echo "We will use %Ld."
14588                         ;;
14589                 esac
14590         fi
14591 fi
14592
14593 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14594         $cat >try.c <<'EOCP'
14595 #include <sys/types.h>
14596 #include <stdio.h>
14597 int main() {
14598   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14599   printf("%lld\n", q);
14600 }
14601 EOCP
14602         set try
14603         if eval $compile; then
14604                 yyy=`$run ./try`
14605                 case "$yyy" in
14606                 12345678901)
14607                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14608                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14609                         echo "We will use the %lld style."
14610                         ;;
14611                 esac
14612         fi
14613 fi
14614
14615 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14616         $cat >try.c <<EOCP
14617 #include <sys/types.h>
14618 #include <stdio.h>
14619 int main() {
14620   $quadtype q = 12345678901;
14621   printf("%qd\n", q);
14622 }
14623 EOCP
14624         set try
14625         if eval $compile; then
14626                 yyy=`$run ./try`
14627                 case "$yyy" in
14628                 12345678901)
14629                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14630                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14631                         echo "We will use %qd."
14632                         ;;
14633                 esac
14634         fi
14635 fi
14636
14637 if $test X"$sPRId64" = X; then
14638         echo "Cannot figure out how to print 64-bit integers." >&4
14639 fi
14640
14641 $rm -f try try.*
14642
14643 fi
14644
14645 case "$sPRId64" in
14646 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14647         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14648         ;;
14649 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14650         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14651         ;;
14652 esac
14653
14654
14655 echo " "
14656 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14657
14658 if $test X"$ivsize" = X8; then
14659         ivdformat="$sPRId64"
14660         uvuformat="$sPRIu64"
14661         uvoformat="$sPRIo64"
14662         uvxformat="$sPRIx64"
14663         uvXUformat="$sPRIXU64"
14664 else
14665         if $test X"$ivsize" = X"$longsize"; then
14666                 ivdformat='"ld"'
14667                 uvuformat='"lu"'
14668                 uvoformat='"lo"'
14669                 uvxformat='"lx"'
14670                 uvXUformat='"lX"'
14671         else
14672                 if $test X"$ivsize" = X"$intsize"; then
14673                         ivdformat='"d"'
14674                         uvuformat='"u"'
14675                         uvoformat='"o"'
14676                         uvxformat='"x"'
14677                         uvXUformat='"X"'
14678                 else
14679                         : far out
14680                         if $test X"$ivsize" = X"$shortsize"; then
14681                                 ivdformat='"hd"'
14682                                 uvuformat='"hu"'
14683                                 uvoformat='"ho"'
14684                                 uvxformat='"hx"'
14685                                 uvXUformat='"hX"'
14686                         fi
14687                 fi
14688         fi
14689 fi
14690
14691 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14692         nveformat="$sPRIeldbl"
14693         nvfformat="$sPRIfldbl"
14694         nvgformat="$sPRIgldbl"
14695         nvEUformat="$sPRIEUldbl"
14696         nvFUformat="$sPRIFUldbl"
14697         nvGUformat="$sPRIGUldbl"
14698 else
14699         nveformat='"e"'
14700         nvfformat='"f"'
14701         nvgformat='"g"'
14702         nvEUformat='"E"'
14703         nvFUformat='"F"'
14704         nvGUformat='"G"'
14705 fi
14706
14707 case "$ivdformat" in
14708 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14709     exit 1
14710     ;;
14711 esac
14712
14713
14714 echo " "
14715 $echo "Checking the format string to be used for gids..." >&4
14716
14717 case "$gidsign" in
14718 -1)     if $test X"$gidsize" = X"$ivsize"; then
14719                 gidformat="$ivdformat"
14720         else
14721                 if $test X"$gidsize" = X"$longsize"; then
14722                         gidformat='"ld"'
14723                 else
14724                         if $test X"$gidsize" = X"$intsize"; then
14725                                 gidformat='"d"'
14726                         else
14727                                 if $test X"$gidsize" = X"$shortsize"; then
14728                                         gidformat='"hd"'
14729                                 fi
14730                         fi
14731                 fi
14732         fi
14733         ;;
14734 *)      if $test X"$gidsize" = X"$uvsize"; then
14735                 gidformat="$uvuformat"
14736         else
14737                 if $test X"$gidsize" = X"$longsize"; then
14738                         gidformat='"lu"'
14739                 else
14740                         if $test X"$gidsize" = X"$intsize"; then
14741                                 gidformat='"u"'
14742                         else
14743                                 if $test X"$gidsize" = X"$shortsize"; then
14744                                         gidformat='"hu"'
14745                                 fi
14746                         fi
14747                 fi
14748         fi
14749         ;;
14750 esac
14751
14752 : see if getgroups exists
14753 set getgroups d_getgrps
14754 eval $inlibc
14755
14756 : see if setgroups exists
14757 set setgroups d_setgrps
14758 eval $inlibc
14759
14760
14761 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14762 echo " "
14763 case "$d_getgrps$d_setgrps" in
14764 *define*)
14765         case "$groupstype" in
14766         '') dflt="$gidtype" ;;
14767         *)  dflt="$groupstype" ;;
14768         esac
14769         $cat <<EOM
14770 What type of pointer is the second argument to getgroups() and setgroups()?
14771 Usually this is the same as group ids, $gidtype, but not always.
14772
14773 EOM
14774         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14775         . ./myread
14776         groupstype="$ans"
14777         ;;
14778 *)  groupstype="$gidtype";;
14779 esac
14780
14781 echo " "
14782 echo "Checking if your $make program sets \$(MAKE)..." >&4
14783 case "$make_set_make" in
14784 '')
14785         $sed 's/^X //' > testmake.mak << 'EOF'
14786 Xall:
14787 X       @echo 'maketemp="$(MAKE)"'
14788 EOF
14789         case "`$make -f testmake.mak 2>/dev/null`" in
14790         *maketemp=*) make_set_make='#' ;;
14791         *)      make_set_make="MAKE=$make" ;;
14792         esac
14793         $rm -f testmake.mak
14794         ;;
14795 esac
14796 case "$make_set_make" in
14797 '#') echo "Yup, it does.";;
14798 *) echo "Nope, it doesn't.";;
14799 esac
14800
14801 : see what type is used for mode_t
14802 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14803 set mode_t modetype int stdio.h sys/types.h
14804 eval $typedef_ask
14805
14806 : see if stdarg is available
14807 echo " "
14808 if $test `./findhdr stdarg.h`; then
14809         echo "<stdarg.h> found." >&4
14810         valstd="$define"
14811 else
14812         echo "<stdarg.h> NOT found." >&4
14813         valstd="$undef"
14814 fi
14815
14816 : see if varags is available
14817 echo " "
14818 if $test `./findhdr varargs.h`; then
14819         echo "<varargs.h> found." >&4
14820 else
14821         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14822 fi
14823
14824 : set up the varargs testing programs
14825 $cat > varargs.c <<EOP
14826 #ifdef I_STDARG
14827 #include <stdarg.h>
14828 #endif
14829 #ifdef I_VARARGS
14830 #include <varargs.h>
14831 #endif
14832
14833 #ifdef I_STDARG
14834 int f(char *p, ...)
14835 #else
14836 int f(va_alist)
14837 va_dcl
14838 #endif
14839 {
14840         va_list ap;
14841 #ifndef I_STDARG
14842         char *p;
14843 #endif
14844 #ifdef I_STDARG
14845         va_start(ap,p);
14846 #else
14847         va_start(ap);
14848         p = va_arg(ap, char *);
14849 #endif
14850         va_end(ap);
14851 }
14852 EOP
14853 $cat > varargs <<EOP
14854 $startsh
14855 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14856         echo "true"
14857 else
14858         echo "false"
14859 fi
14860 $rm -f varargs$_o
14861 EOP
14862 chmod +x varargs
14863
14864 : now check which varargs header should be included
14865 echo " "
14866 i_varhdr=''
14867 case "$valstd" in
14868 "$define")
14869         if `./varargs I_STDARG`; then
14870                 val='stdarg.h'
14871         elif `./varargs I_VARARGS`; then
14872                 val='varargs.h'
14873         fi
14874         ;;
14875 *)
14876         if `./varargs I_VARARGS`; then
14877                 val='varargs.h'
14878         fi
14879         ;;
14880 esac
14881 case "$val" in
14882 '')
14883 echo "I could not find the definition for va_dcl... You have problems..." >&4
14884         val="$undef"; set i_stdarg; eval $setvar
14885         val="$undef"; set i_varargs; eval $setvar
14886         ;;
14887 *) 
14888         set i_varhdr
14889         eval $setvar
14890         case "$i_varhdr" in
14891         stdarg.h)
14892                 val="$define"; set i_stdarg; eval $setvar
14893                 val="$undef"; set i_varargs; eval $setvar
14894                 ;;
14895         varargs.h)
14896                 val="$undef"; set i_stdarg; eval $setvar
14897                 val="$define"; set i_varargs; eval $setvar
14898                 ;;
14899         esac
14900         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14901 esac
14902 $rm -f varargs*
14903
14904 : see if we need va_copy
14905 echo " "
14906 case "$i_stdarg" in
14907 "$define")
14908         $cat >try.c <<EOCP
14909 #include <stdarg.h>
14910 #include <stdio.h>
14911 #$i_stdlib I_STDLIB
14912 #ifdef I_STDLIB
14913 #include <stdlib.h>
14914 #endif
14915 #include <signal.h>
14916
14917 int
14918 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14919 {
14920   return vfprintf(f, fmt, *valp);
14921 }
14922  
14923 int    
14924 myvfprintf(FILE *f, const  char *fmt, va_list val)
14925 {
14926   return ivfprintf(f, fmt, &val);
14927 }
14928       
14929 int
14930 myprintf(char *fmt, ...) 
14931 {
14932   va_list val;
14933   va_start(val, fmt);
14934   return myvfprintf(stdout, fmt, val); 
14935 }         
14936
14937 int
14938 main(int ac, char **av)
14939 {
14940   signal(SIGSEGV, exit);
14941
14942   myprintf("%s%cs all right, then\n", "that", '\'');                            
14943   exit(0);      
14944 }
14945 EOCP
14946         set try
14947         if eval $compile && $run ./try 2>&1 >/dev/null; then
14948                 case "`$run ./try`" in
14949                 "that's all right, then")
14950                         okay=yes
14951                         ;;
14952                 esac
14953         fi
14954         case "$okay" in
14955         yes)    echo "It seems that you don't need va_copy()." >&4
14956                 need_va_copy="$undef"
14957                 ;;
14958         *)      echo "It seems that va_copy() or similar will be needed." >&4
14959                 need_va_copy="$define"
14960                 ;;
14961         esac
14962         $rm -f try.* core core.* *.core *.core.*
14963         ;;
14964 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14965         ;;
14966 esac
14967
14968 : define a fucntion to check prototypes
14969 $cat > protochk <<EOSH
14970 $startsh
14971 cc="$cc"
14972 optimize="$optimize"
14973 ccflags="$ccflags"
14974 prototype="$prototype"
14975 define="$define"
14976 rm=$rm
14977 EOSH
14978
14979 $cat >> protochk <<'EOSH'
14980
14981 $rm -f try.c
14982 foo="$1"
14983 shift
14984 while test $# -ge 2; do
14985         case "$1" in
14986                 $define) echo "#include <$2>" >> try.c ;;
14987                 literal) echo "$2" >> try.c ;;
14988         esac
14989     shift 2
14990 done
14991 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14992 cat >> try.c <<'EOCP'
14993 #ifdef CAN_PROTOTYPE
14994 #define _(args) args
14995 #else
14996 #define _(args) ()
14997 #endif
14998 EOCP
14999 echo "$foo" >> try.c
15000 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15001 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15002 status=$?
15003 $rm -f try.[co]
15004 exit $status
15005 EOSH
15006 chmod +x protochk
15007 $eunicefix protochk
15008
15009 : see what type is used for size_t
15010 rp="What is the type used for the length parameter for string functions?"
15011 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15012 eval $typedef_ask
15013
15014 : check for type of arguments to gethostbyaddr. 
15015 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15016         case "$d_gethbyaddr" in
15017         $define)
15018                 $cat <<EOM
15019
15020 Checking to see what type of arguments are accepted by gethostbyaddr().
15021 EOM
15022                 hdrs="$define sys/types.h
15023                         $d_socket sys/socket.h 
15024                         $i_niin netinet/in.h 
15025                         $i_netdb netdb.h
15026                         $i_unistd unistd.h"
15027                 : The first arg can 'char *' or 'void *'
15028                 : The second arg is some of integral type
15029                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15030                         for yyy in size_t long int; do
15031                                 case "$netdb_host_type" in
15032                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15033                                         if ./protochk "$try" $hdrs; then
15034                                                 echo "Your system accepts $xxx for the first arg."
15035                                                 echo "...and $yyy for the second arg."
15036                                                 netdb_host_type="$xxx"
15037                                                 netdb_hlen_type="$yyy"
15038                                         fi
15039                                         ;;
15040                                 esac
15041                         done
15042                 done
15043                 : In case none of those worked, prompt the user.
15044                 case "$netdb_host_type" in
15045                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15046                         dflt='char *'
15047                         . ./myread
15048                         netdb_host_type=$ans
15049                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15050                         dflt="$sizetype"
15051                         . ./myread
15052                         netdb_hlen_type=$ans
15053                         ;;
15054                 esac
15055                 ;;
15056         *)      : no gethostbyaddr, so pick harmless defaults
15057                 netdb_host_type='char *'
15058                 netdb_hlen_type="$sizetype"
15059                 ;;
15060         esac
15061         # Remove the "const" if needed. -- but then we'll have a 
15062         # prototype clash!
15063         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15064 fi
15065
15066 : check for type of argument to gethostbyname. 
15067 if test "X$netdb_name_type" = X ; then
15068         case "$d_gethbyname" in
15069         $define)
15070                 $cat <<EOM
15071
15072 Checking to see what type of argument is accepted by gethostbyname().
15073 EOM
15074                 hdrs="$define sys/types.h
15075                         $d_socket sys/socket.h 
15076                         $i_niin netinet/in.h 
15077                         $i_netdb netdb.h
15078                         $i_unistd unistd.h"
15079                 for xxx in "const char *" "char *"; do
15080                         case "$netdb_name_type" in
15081                         '')     try="extern struct hostent *gethostbyname($xxx);"
15082                                 if ./protochk "$try" $hdrs; then
15083                                         echo "Your system accepts $xxx."
15084                                         netdb_name_type="$xxx"
15085                                 fi
15086                                 ;;
15087                         esac
15088                 done
15089                 : In case none of those worked, prompt the user.
15090                 case "$netdb_name_type" in
15091                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15092                         dflt='char *'
15093                         . ./myread
15094                         netdb_name_type=$ans
15095                         ;;
15096                 esac
15097                 ;;
15098         *)      : no gethostbyname, so pick harmless default
15099                 netdb_name_type='char *'
15100                 ;;
15101         esac
15102 fi
15103
15104 : check for type of 1st argument to getnetbyaddr. 
15105 if test "X$netdb_net_type" = X ; then
15106         case "$d_getnbyaddr" in
15107         $define)
15108                 $cat <<EOM
15109
15110 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15111 EOM
15112                 hdrs="$define sys/types.h
15113                         $d_socket sys/socket.h 
15114                         $i_niin netinet/in.h 
15115                         $i_netdb netdb.h
15116                         $i_unistd unistd.h"
15117                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15118                         case "$netdb_net_type" in
15119                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15120                                 if ./protochk "$try" $hdrs; then
15121                                         echo "Your system accepts $xxx."
15122                                         netdb_net_type="$xxx"
15123                                 fi
15124                                 ;;
15125                         esac
15126                 done
15127                 : In case none of those worked, prompt the user.
15128                 case "$netdb_net_type" in
15129                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15130                         dflt='long'
15131                         . ./myread
15132                         netdb_net_type=$ans
15133                         ;;
15134                 esac
15135                 ;;
15136         *)      : no getnetbyaddr, so pick harmless default
15137                 netdb_net_type='long'
15138                 ;;
15139         esac
15140 fi
15141 : locate the preferred pager for this system
15142 case "$pager" in
15143 '')
15144         dflt=''
15145         case "$pg" in
15146         /*) dflt=$pg;;
15147         [a-zA-Z]:/*) dflt=$pg;;
15148         esac
15149         case "$more" in
15150         /*) dflt=$more;;
15151         [a-zA-Z]:/*) dflt=$more;;
15152         esac
15153         case "$less" in
15154         /*) dflt=$less;;
15155         [a-zA-Z]:/*) dflt=$less;;
15156         esac
15157         case "$dflt" in
15158         '') dflt=/usr/ucb/more;;
15159         esac
15160         ;;
15161 *) dflt="$pager";;
15162 esac
15163 echo " "
15164 fn=f/
15165 rp='What pager is used on your system?'
15166 . ./getfile
15167 pager="$ans"
15168
15169 : see what type pids are declared as in the kernel
15170 rp="What is the type of process ids on this system?"
15171 set pid_t pidtype int stdio.h sys/types.h
15172 eval $typedef_ask
15173
15174 : Find earliest binary compatible site_perl subdirectory perl can use.
15175 case "$bincompat5005" in
15176 "$define") xs_apiversion='5.005' ;;
15177 *) xs_apiversion=$version ;;   # The current site_perl version.
15178 esac
15179 : Find earliest pure perl site_perl subdirectory perl can use.
15180 : The versioned directories started at 5.005.
15181 pm_apiversion='5.005'
15182
15183 : see if ar generates random libraries by itself
15184 echo " "
15185 echo "Checking how to generate random libraries on your machine..." >&4
15186 echo 'int bar1() { return bar2(); }' > bar1.c
15187 echo 'int bar2() { return 2; }' > bar2.c
15188 $cat > foo.c <<'EOP'
15189 int main() { printf("%d\n", bar1()); exit(0); }
15190 EOP
15191 $cc $ccflags -c bar1.c >/dev/null 2>&1
15192 $cc $ccflags -c bar2.c >/dev/null 2>&1
15193 $cc $ccflags -c foo.c >/dev/null 2>&1
15194 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15195 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15196         $run ./foobar >/dev/null 2>&1; then
15197         echo "$ar appears to generate random libraries itself."
15198         orderlib=false
15199         ranlib=":"
15200 elif $ar ts bar$_a >/dev/null 2>&1 &&
15201         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15202         $run ./foobar >/dev/null 2>&1; then
15203                 echo "a table of contents needs to be added with '$ar ts'."
15204                 orderlib=false
15205                 ranlib="$ar ts"
15206 else
15207         case "$ranlib" in
15208         :) ranlib='';;
15209         '')
15210                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15211                 $test -f $ranlib || ranlib=''
15212                 ;;
15213         esac
15214         if $test -n "$ranlib"; then
15215                 echo "your system has '$ranlib'; we'll use that."
15216                 orderlib=false
15217         else
15218                 echo "your system doesn't seem to support random libraries"
15219                 echo "so we'll use lorder and tsort to order the libraries."
15220                 orderlib=true
15221                 ranlib=":"
15222         fi
15223 fi
15224 $rm -f foo* bar* 
15225
15226 : check for type of arguments to select. 
15227 case "$selecttype" in
15228 '') case "$d_select" in
15229         $define)
15230                 echo " "
15231                 $cat <<EOM
15232 Checking to see what type of arguments are accepted by select().
15233 EOM
15234                 hdrs="$define sys/types.h
15235                         $i_systime sys/time.h 
15236                         $i_sysselct sys/select.h
15237                         $d_socket sys/socket.h"
15238                 : The first arg can be int, unsigned, or size_t
15239                 : The last arg may or may not be 'const'
15240                 val=''
15241                 : void pointer has been seen but using that
15242                 : breaks the selectminbits test
15243                 for xxx in 'fd_set *' 'int *'; do
15244                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15245                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15246                                         case "$val" in
15247                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15248                                                 if ./protochk "$try" $hdrs; then
15249                                                         echo "Your system accepts $xxx."
15250                                                         val="$xxx"
15251                                                 fi
15252                                                 ;;
15253                                         esac
15254                                 done
15255                         done
15256                 done
15257                 case "$val" in
15258                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15259                         case "$d_fd_set" in
15260                                 $define) dflt="fd_set *" ;;
15261                                 *)              dflt="int *" ;;
15262                         esac
15263                         . ./myread
15264                         val=$ans
15265                         ;;
15266                 esac
15267                 selecttype="$val"
15268                 ;;
15269         *)      : no select, so pick a harmless default
15270                 selecttype='int *'
15271                 ;;
15272         esac
15273         ;;
15274 esac
15275
15276 : check for the select 'width'
15277 case "$selectminbits" in
15278 '') case "$d_select" in
15279         $define)
15280                 $cat <<EOM
15281
15282 Checking to see on how many bits at a time your select() operates...
15283 EOM
15284                 $cat >try.c <<EOCP
15285 #include <sys/types.h>
15286 #$i_time I_TIME
15287 #$i_systime I_SYS_TIME
15288 #$i_systimek I_SYS_TIME_KERNEL
15289 #ifdef I_TIME
15290 #   include <time.h>
15291 #endif
15292 #ifdef I_SYS_TIME
15293 #   ifdef I_SYS_TIME_KERNEL
15294 #       define KERNEL
15295 #   endif
15296 #   include <sys/time.h>
15297 #   ifdef I_SYS_TIME_KERNEL
15298 #       undef KERNEL
15299 #   endif
15300 #endif
15301 #$i_sysselct I_SYS_SELECT
15302 #ifdef I_SYS_SELECT
15303 #include <sys/select.h>
15304 #endif
15305 #$d_socket HAS_SOCKET
15306 #ifdef HAS_SOCKET
15307 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15308 #endif
15309 #include <stdio.h>
15310 $selecttype b;
15311 #define S sizeof(*(b))
15312 #define MINBITS 64
15313 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15314 #define NBITS  (NBYTES * 8)
15315 int main() {
15316     char s[NBYTES];
15317     struct timeval t;
15318     int i;
15319     FILE* fp;
15320     int fd;
15321
15322     fclose(stdin);
15323     fp = fopen("try.c", "r");
15324     if (fp == 0)
15325       exit(1);
15326     fd = fileno(fp);
15327     if (fd < 0)
15328       exit(2);
15329     b = ($selecttype)s;
15330     for (i = 0; i < NBITS; i++)
15331         FD_SET(i, b);
15332     t.tv_sec  = 0;
15333     t.tv_usec = 0;
15334     select(fd + 1, b, 0, 0, &t);
15335     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15336     printf("%d\n", i + 1);
15337     return 0;
15338 }
15339 EOCP
15340                 set try
15341                 if eval $compile_ok; then
15342                         selectminbits=`$run ./try`
15343                         case "$selectminbits" in
15344                         '')     cat >&4 <<EOM
15345 Cannot figure out on how many bits at a time your select() operates.
15346 I'll play safe and guess it is 32 bits.
15347 EOM
15348                                 selectminbits=32
15349                                 bits="32 bits"
15350                                 ;;
15351                         1)      bits="1 bit" ;;
15352                         *)      bits="$selectminbits bits" ;;
15353                         esac
15354                         echo "Your select() operates on $bits at a time." >&4
15355                 else
15356                         rp='What is the minimum number of bits your select() operates on?'
15357                         case "$byteorder" in
15358                         1234|12345678)  dflt=32 ;;
15359                         *)              dflt=1  ;;
15360                         esac
15361                         . ./myread
15362                         val=$ans
15363                         selectminbits="$val"
15364                 fi
15365                 $rm -f try.* try
15366                 ;;
15367         *)      : no select, so pick a harmless default
15368                 selectminbits='32'
15369                 ;;
15370         esac
15371         ;;
15372 esac
15373
15374 : Trace out the files included by signal.h, then look for SIGxxx names.
15375 : Remove SIGARRAYSIZE used by HPUX.
15376 : Remove SIGSTKSIZE used by Linux.
15377 : Remove SIGSTKSZ used by Posix.
15378 : Remove SIGTYP void lines used by OS2.
15379 : Some cpps, like os390, dont give the file name anywhere
15380 if [ "X$fieldn" = X ]; then
15381         : Just make some guesses.  We check them later.
15382         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15383 else
15384         xxx=`echo '#include <signal.h>' |
15385         $cppstdin $cppminus $cppflags 2>/dev/null |
15386         $grep '^[       ]*#.*include' | 
15387         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15388 fi
15389 : Check this list of files to be sure we have parsed the cpp output ok.
15390 : This will also avoid potentially non-existent files, such 
15391 : as ../foo/bar.h
15392 xxxfiles=''
15393 for xx in $xxx /dev/null ; do
15394         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15395 done
15396 : If we have found no files, at least try signal.h
15397 case "$xxxfiles" in
15398 '')     xxxfiles=`./findhdr signal.h` ;;
15399 esac
15400 xxx=`awk '
15401 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15402         print substr($2, 4, 20)
15403 }
15404 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15405         print substr($3, 4, 20)
15406 }' $xxxfiles`
15407 : Append some common names just in case the awk scan failed.
15408 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15409 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15410 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15411 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15412 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15413
15414 : generate a few handy files for later
15415 $cat > signal.c <<'EOCP'
15416 #include <sys/types.h>
15417 #include <signal.h>
15418 #include <stdio.h>
15419 int main() {
15420
15421 /* Strange style to avoid deeply-nested #if/#else/#endif */
15422 #ifndef NSIG
15423 #  ifdef _NSIG
15424 #    define NSIG (_NSIG)
15425 #  endif
15426 #endif
15427
15428 #ifndef NSIG
15429 #  ifdef SIGMAX
15430 #    define NSIG (SIGMAX+1)
15431 #  endif
15432 #endif
15433
15434 #ifndef NSIG
15435 #  ifdef SIG_MAX
15436 #    define NSIG (SIG_MAX+1)
15437 #  endif
15438 #endif
15439
15440 #ifndef NSIG
15441 #  ifdef MAXSIG
15442 #    define NSIG (MAXSIG+1)
15443 #  endif
15444 #endif
15445
15446 #ifndef NSIG
15447 #  ifdef MAX_SIG
15448 #    define NSIG (MAX_SIG+1)
15449 #  endif
15450 #endif
15451
15452 #ifndef NSIG
15453 #  ifdef SIGARRAYSIZE
15454 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15455 #  endif
15456 #endif
15457
15458 #ifndef NSIG
15459 #  ifdef _sys_nsig
15460 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15461 #  endif
15462 #endif
15463
15464 /* Default to some arbitrary number that's big enough to get most
15465    of the common signals.
15466 */
15467 #ifndef NSIG
15468 #    define NSIG 50
15469 #endif
15470
15471 printf("NSIG %d\n", NSIG);
15472
15473 #ifndef JUST_NSIG
15474
15475 EOCP
15476
15477 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15478 {
15479         printf "#ifdef SIG"; printf $1; printf "\n"
15480         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15481         printf $1; printf ");\n"
15482         printf "#endif\n"
15483 }
15484 END {
15485         printf "#endif /* JUST_NSIG */\n";
15486         printf "exit(0);\n}\n";
15487 }
15488 ' >>signal.c
15489 $cat >signal.awk <<'EOP'
15490 BEGIN { ndups = 0 }
15491 $1 ~ /^NSIG$/ { nsig = $2 }
15492 ($1 !~ /^NSIG$/) && (NF == 2) {
15493     if ($2 > maxsig) { maxsig = $2 }
15494     if (sig_name[$2]) {
15495         dup_name[ndups] = $1
15496         dup_num[ndups] = $2
15497         ndups++ 
15498     }
15499     else {
15500         sig_name[$2] = $1
15501         sig_num[$2] = $2
15502     }
15503 }
15504 END { 
15505     if (nsig == 0) {
15506         nsig = maxsig + 1
15507     }
15508     printf("NSIG %d\n", nsig);
15509     for (n = 1; n < nsig; n++) {
15510         if (sig_name[n]) {
15511             printf("%s %d\n", sig_name[n], sig_num[n])
15512         }
15513         else {
15514             printf("NUM%d %d\n", n, n) 
15515         }
15516     }
15517     for (n = 0; n < ndups; n++) {
15518         printf("%s %d\n", dup_name[n], dup_num[n])
15519     }
15520 }
15521 EOP
15522 $cat >signal_cmd <<EOS
15523 $startsh
15524 if $test -s signal.lst; then
15525     echo "Using your existing signal.lst file"
15526         exit 0
15527 fi
15528 xxx="$xxx"
15529 EOS
15530 $cat >>signal_cmd <<'EOS'
15531
15532 set signal
15533 if eval $compile_ok; then
15534         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15535 else
15536         echo "(I can't seem be able to compile the whole test program)" >&4
15537         echo "(I'll try it in little pieces.)" >&4
15538         set signal -DJUST_NSIG
15539         if eval $compile_ok; then
15540                 $run ./signal$_exe > signal.nsg
15541                 $cat signal.nsg
15542         else
15543                 echo "I can't seem to figure out how many signals you have." >&4
15544                 echo "Guessing 50." >&4
15545                 echo 'NSIG 50' > signal.nsg
15546         fi
15547         : Now look at all the signal names, one at a time.
15548         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15549                 $cat > signal.c <<EOCP
15550 #include <sys/types.h>
15551 #include <signal.h>
15552 #include <stdio.h>
15553 int main() {
15554 printf("$xx %d\n", SIG${xx});
15555 return 0;
15556 }
15557 EOCP
15558                 set signal
15559                 if eval $compile; then
15560                         echo "SIG${xx} found."
15561                         $run ./signal$_exe  >> signal.ls1
15562                 else
15563                         echo "SIG${xx} NOT found."
15564                 fi
15565         done
15566         if $test -s signal.ls1; then
15567                 $cat signal.nsg signal.ls1 |
15568                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15569         fi
15570
15571 fi
15572 if $test -s signal.lst; then
15573         :
15574 else
15575         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15576         echo 'kill -l' >signal
15577         set X `csh -f <signal`
15578         $rm -f signal
15579         shift
15580         case $# in
15581         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15582         esac
15583         echo $@ | $tr ' ' $trnl | \
15584             $awk '{ printf "%s %d\n", $1, ++s; }
15585                   END { printf "NSIG %d\n", ++s }' >signal.lst
15586 fi
15587 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15588 EOS
15589 chmod a+x signal_cmd
15590 $eunicefix signal_cmd
15591
15592 : generate list of signal names
15593 echo " "
15594 case "$sig_name_init" in
15595 '') doinit=yes ;;
15596 *)  case "$sig_num_init" in
15597     ''|*,*) doinit=yes ;;
15598     esac ;;
15599 esac
15600 case "$doinit" in
15601 yes)
15602         echo "Generating a list of signal names and numbers..." >&4
15603         . ./signal_cmd
15604         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15605         sig_name=`$awk 'BEGIN { printf "ZERO " }
15606                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15607         sig_num=`$awk  'BEGIN { printf "0 " }
15608                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15609         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15610                              !/^NSIG/   { printf "\"%s\", ", $1 }
15611                              END        { printf "0\n" }' signal.lst`
15612         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15613                              !/^NSIG/   { printf "%d, ", $2}
15614                              END        { printf "0\n"}' signal.lst`
15615         ;;
15616 esac
15617 echo "The following $sig_count signals are available:"
15618 echo " "
15619 echo $sig_name | $awk \
15620 'BEGIN { linelen = 0 }
15621 {
15622         for (i = 1; i <= NF; i++) {
15623                 name = "SIG" $i " "
15624                 linelen = linelen + length(name)
15625                 if (linelen > 70) {
15626                         printf "\n"
15627                         linelen = length(name)
15628                 }
15629                 printf "%s", name
15630         }
15631         printf "\n"
15632 }'
15633 sig_size=`echo $sig_name | awk '{print NF}'`
15634 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15635
15636 echo " "
15637 case "$sizetype" in
15638 *_t) zzz="$sizetype"    ;;
15639 *)   zzz="filesize"     ;;
15640 esac
15641 echo "Checking the size of $zzz..." >&4 
15642 cat > try.c <<EOCP
15643 #include <sys/types.h>
15644 #include <stdio.h>
15645 int main() {
15646     printf("%d\n", (int)sizeof($sizetype));
15647     exit(0);
15648 }
15649 EOCP
15650 set try
15651 if eval $compile_ok; then
15652         yyy=`$run ./try`
15653         case "$yyy" in
15654         '')     sizesize=4
15655                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15656                 ;;
15657         *)      sizesize=$yyy
15658                 echo "Your $zzz size is $sizesize bytes."
15659                 ;;
15660         esac
15661 else
15662         sizesize=4
15663         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15664 fi
15665
15666
15667 : check for socklen_t
15668 echo " "
15669 echo "Checking to see if you have socklen_t..." >&4
15670 $cat >try.c <<EOCP
15671 #include <sys/types.h>
15672 #$d_socket HAS_SOCKET
15673 #ifdef HAS_SOCKET
15674 #include <sys/socket.h>
15675 #endif
15676 int main() { socklen_t x = 16; }
15677 EOCP
15678 set try
15679 if eval $compile; then
15680         val="$define"
15681         echo "You have socklen_t."
15682 else
15683         val="$undef"
15684         echo "You do not have socklen_t."
15685         case "$sizetype" in
15686         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15687         esac
15688 fi
15689 $rm -f try try.*
15690 set d_socklen_t
15691 eval $setvar
15692
15693 : see if this is a socks.h system
15694 set socks.h i_socks
15695 eval $inhdr
15696
15697 : check for type of the size argument to socket calls
15698 case "$d_socket" in
15699 "$define")
15700         $cat <<EOM
15701
15702 Checking to see what type is the last argument of accept().
15703 EOM
15704         yyy=''
15705         case "$d_socklen_t" in
15706         "$define") yyy="$yyy socklen_t"
15707         esac
15708         yyy="$yyy $sizetype int long unsigned"
15709         for xxx in $yyy; do
15710                 case "$socksizetype" in
15711                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15712                         case "$usesocks" in
15713                         "$define")
15714                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15715                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15716                                         socksizetype="$xxx"
15717                                 fi
15718                                 ;;
15719                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15720                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15721                                         socksizetype="$xxx"
15722                                 fi
15723                                 ;;
15724                         esac
15725                         ;;
15726                 esac
15727         done
15728 : In case none of those worked, prompt the user.
15729         case "$socksizetype" in
15730         '')     rp='What is the type for socket address structure sizes?'
15731                 dflt='int'
15732                 . ./myread
15733                 socksizetype=$ans
15734                 ;;
15735         esac
15736         ;;
15737 *)      : no sockets, so pick relatively harmless default
15738         socksizetype='int'
15739         ;;
15740 esac
15741
15742 : see what type is used for signed size_t
15743 set ssize_t ssizetype int stdio.h sys/types.h
15744 eval $typedef
15745 dflt="$ssizetype"
15746 $cat > try.c <<EOM
15747 #include <stdio.h>
15748 #include <sys/types.h>
15749 #define Size_t $sizetype
15750 #define SSize_t $dflt
15751 int main()
15752 {
15753         if (sizeof(Size_t) == sizeof(SSize_t))
15754                 printf("$dflt\n");
15755         else if (sizeof(Size_t) == sizeof(int))
15756                 printf("int\n");
15757         else 
15758                 printf("long\n");
15759         exit(0);
15760 }
15761 EOM
15762 echo " "
15763 set try
15764 if eval $compile_ok && $run ./try > /dev/null; then
15765         ssizetype=`$run ./try`
15766         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15767 else
15768         $cat >&4 <<EOM
15769 Help! I can't compile and run the ssize_t test program: please enlighten me!
15770 (This is probably a misconfiguration in your system or libraries, and
15771 you really ought to fix it.  Still, I'll try anyway.)
15772
15773 I need a type that is the same size as $sizetype, but is guaranteed to
15774 be signed.  Common values are ssize_t, int and long.
15775
15776 EOM
15777         rp="What signed type is the same size as $sizetype?"
15778         . ./myread
15779         ssizetype="$ans"
15780 fi
15781 $rm -f try try.*
15782
15783 : see what type of char stdio uses.
15784 echo " "
15785 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15786 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15787         echo "Your stdio uses unsigned chars." >&4
15788         stdchar="unsigned char"
15789 else
15790         echo "Your stdio uses signed chars." >&4
15791         stdchar="char"
15792 fi
15793 $rm -f stdioh
15794
15795
15796
15797 : see if time exists
15798 echo " "
15799 if test "X$d_time" = X -o X"$timetype" = X; then
15800     if set time val -f d_time; eval $csym; $val; then
15801                 echo 'time() found.' >&4
15802                 val="$define"
15803                 rp="What is the type returned by time() on this system?"
15804                 set time_t timetype long stdio.h sys/types.h
15805                 eval $typedef_ask
15806     else
15807                 echo 'time() not found, hope that will do.' >&4
15808                 val="$undef"
15809                 timetype='int';
15810     fi
15811     set d_time
15812     eval $setvar
15813 fi
15814
15815 : see what type uids are declared as in the kernel
15816 echo " "
15817 echo "Looking for the type for user ids returned by getuid()."
15818 set uid_t uidtype xxx stdio.h sys/types.h
15819 eval $typedef
15820 case "$uidtype" in
15821 xxx)
15822         xxx=`./findhdr sys/user.h`
15823         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15824         case $1 in
15825         unsigned) dflt="$1 $2" ;;
15826         *) dflt="$1" ;;
15827         esac
15828         ;;
15829 *) dflt="$uidtype";;
15830 esac
15831 case "$uidtype" in
15832 uid_t)  echo "uid_t found." ;;
15833 *)      rp="What is the type for user ids returned by getuid()?"
15834         . ./myread
15835         uidtype="$ans"
15836         ;;
15837 esac
15838
15839 echo " "
15840 case "$uidtype" in
15841 *_t) zzz="$uidtype"     ;;
15842 *)   zzz="uid"          ;;
15843 esac
15844 echo "Checking the size of $zzz..." >&4 
15845 cat > try.c <<EOCP
15846 #include <sys/types.h>
15847 #include <stdio.h>
15848 int main() {
15849     printf("%d\n", (int)sizeof($uidtype));
15850     exit(0);
15851 }
15852 EOCP
15853 set try
15854 if eval $compile_ok; then
15855         yyy=`$run ./try`
15856         case "$yyy" in
15857         '')     uidsize=4
15858                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15859                 ;;
15860         *)      uidsize=$yyy
15861                 echo "Your $zzz is $uidsize bytes long."
15862                 ;;
15863         esac
15864 else
15865         uidsize=4
15866         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15867 fi
15868
15869 echo " "
15870 case "$uidtype" in
15871 *_t) zzz="$uidtype"     ;;
15872 *)   zzz="uid"          ;;
15873 esac
15874 echo "Checking the sign of $zzz..." >&4
15875 cat > try.c <<EOCP
15876 #include <sys/types.h>
15877 #include <stdio.h>
15878 int main() {
15879         $uidtype foo = -1;
15880         if (foo < 0)
15881                 printf("-1\n");
15882         else
15883                 printf("1\n");
15884 }
15885 EOCP
15886 set try
15887 if eval $compile; then
15888         yyy=`$run ./try`
15889         case "$yyy" in
15890         '')     uidsign=1
15891                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15892                 ;;
15893         *)      uidsign=$yyy
15894                 case "$uidsign" in
15895                  1) echo "Your $zzz is unsigned." ;;
15896                 -1) echo "Your $zzz is signed."   ;;
15897                 esac
15898                 ;;
15899         esac
15900 else
15901         uidsign=1
15902         echo "(I can't compile the test program--guessing unsigned.)" >&4
15903 fi
15904
15905
15906
15907 echo " "
15908 $echo "Checking the format string to be used for uids..." >&4
15909
15910 case "$uidsign" in
15911 -1)     if $test X"$uidsize" = X"$ivsize"; then
15912                 uidformat="$ivdformat"
15913         else
15914                 if $test X"$uidsize" = X"$longsize"; then
15915                         uidformat='"ld"'
15916                 else
15917                         if $test X"$uidsize" = X"$intsize"; then
15918                                 uidformat='"d"'
15919                         else
15920                                 if $test X"$uidsize" = X"$shortsize"; then
15921                                         uidformat='"hd"'
15922                                 fi
15923                         fi
15924                 fi
15925         fi
15926         ;;
15927 *)      if $test X"$uidsize" = X"$uvsize"; then
15928                 uidformat="$uvuformat"
15929         else
15930                 if $test X"$uidsize" = X"$longsize"; then
15931                         uidformat='"lu"'
15932                 else
15933                         if $test X"$uidsize" = X"$intsize"; then
15934                                 uidformat='"u"'
15935                         else
15936                                 if $test X"$uidsize" = X"$shortsize"; then
15937                                         uidformat='"hu"'
15938                                 fi
15939                         fi
15940                 fi
15941         fi
15942         ;;
15943 esac
15944
15945 : determine compiler compiler
15946 case "$yacc" in
15947 '')
15948         dflt=yacc;;
15949 *)
15950         dflt="$yacc";;
15951 esac
15952 echo " "
15953 comp='yacc'
15954 if $test -f "$byacc$_exe"; then
15955         dflt="$byacc"
15956         comp="byacc or $comp"
15957 fi
15958 if $test -f "$bison$_exe"; then
15959         comp="$comp or bison -y"
15960 fi
15961 rp="Which compiler compiler ($comp) shall I use?"
15962 . ./myread
15963 yacc="$ans"
15964 case "$yacc" in
15965 *bis*)
15966         case "$yacc" in
15967         *-y*) ;;
15968         *)
15969                 yacc="$yacc -y"
15970                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15971                 ;;
15972         esac
15973         ;;
15974 esac
15975
15976 : see if this is a fp.h system
15977 set fp.h i_fp
15978 eval $inhdr
15979
15980 : see if this is a fp_class.h system
15981 set fp_class.h i_fp_class
15982 eval $inhdr
15983
15984 : see if this is a ieeefp.h system
15985 case "$i_ieeefp" in
15986 '' ) set ieeefp.h i_ieeefp
15987      eval $inhdr
15988      ;;
15989 esac
15990
15991 : see if this is a libutil.h system
15992 set libutil.h i_libutil
15993 eval $inhdr
15994
15995 : see if locale.h is available
15996 set locale.h i_locale
15997 eval $inhdr
15998
15999 : see if mach cthreads are available
16000 if test "X$usethreads" = "X$define"; then
16001         set mach/cthreads.h i_machcthr
16002         eval $inhdr
16003 else
16004         i_machcthr="$undef"
16005 fi
16006
16007
16008
16009 : see if this is a math.h system
16010 set math.h i_math
16011 eval $inhdr
16012
16013 : see if this is a mntent.h system
16014 set mntent.h i_mntent
16015 eval $inhdr
16016
16017 : see if ndbm.h is available
16018 set ndbm.h t_ndbm
16019 eval $inhdr
16020 case "$t_ndbm" in
16021 $define)
16022         : see if dbm_open exists
16023         set dbm_open d_dbm_open
16024         eval $inlibc
16025         case "$d_dbm_open" in
16026         $undef)
16027                 t_ndbm="$undef"
16028                 echo "We won't be including <ndbm.h>"
16029                 ;;
16030         esac
16031         ;;
16032 esac
16033 val="$t_ndbm"
16034 set i_ndbm
16035 eval $setvar
16036
16037 : see if net/errno.h is available
16038 val=''
16039 set net/errno.h val
16040 eval $inhdr
16041
16042 : Unfortunately, it causes problems on some systems.  Arrgh.
16043 case "$val" in
16044 $define)
16045         cat > try.c <<'EOM'
16046 #include <stdio.h>
16047 #include <errno.h>
16048 #include <net/errno.h>
16049 int func()
16050 {
16051         return ENOTSOCK;
16052 }
16053 EOM
16054         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16055                 echo "We'll be including <net/errno.h>." >&4
16056         else
16057                 echo "We won't be including <net/errno.h>." >&4
16058                 val="$undef"
16059         fi
16060         $rm -f try.* try
16061         ;;
16062 esac
16063 set i_neterrno
16064 eval $setvar
16065
16066 : see if netinet/tcp.h is available
16067 set netinet/tcp.h i_netinettcp
16068 eval $inhdr
16069
16070 : see if this is a poll.h system
16071 set poll.h i_poll
16072 eval $inhdr
16073
16074 : see if this is a prot.h system
16075 set prot.h i_prot
16076 eval $inhdr
16077
16078 echo " "
16079 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16080 $cat <<'EOSH' > Cppsym.know
16081 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16082 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16083 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16084 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16085 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16086 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16087 bull c cadmus clipper CMU COFF COMPILER_VERSION
16088 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16089 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16090 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16091 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16092 GLIBC GLIBC_MINOR
16093 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16094 H3050R H3050RX hbullx20 hcx host_mips
16095 hp200 hp300 hp700 HP700 hp800 hp9000
16096 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16097 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16098 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16099 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16100 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16101 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16102 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16103 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16104 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16105 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16106 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16107 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16108 MATH_HAS_NO_SIDE_EFFECTS
16109 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16110 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16111 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16112 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16113 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16114 NetBSD news1500 news1700 news1800 news1900 news3700
16115 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16116 ns32016 ns32332 ns32k nsc32000
16117 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16118 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16119 pc532 pdp11 PGC PIC plexus PORTAR posix
16120 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16121 POSIX_C_SOURCE POSIX_SOURCE POWER
16122 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16123 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16124 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16125 sony sony_news sonyrisc sparc sparclite spectrum
16126 stardent stdc STDC_EXT stratos sun sun3 sun386
16127 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16128 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16129 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16130 sysV68 sysV88 Tek4132 Tek4300 titan
16131 TM3200 TM5400 TM5600
16132 tower tower32 tower32_200 tower32_600 tower32_700
16133 tower32_800 tower32_850 tss
16134 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16135 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16136 unix UNIX95 UNIX99 unixpc unos
16137 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16138 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16139 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16140 USGr4 USGr4_2
16141 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16142 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16143 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16144 z8000
16145 EOSH
16146 # Maybe put other stuff here too.
16147 cat <<EOSH >>Cppsym.know
16148 $osname
16149 EOSH
16150 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16151 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16152 $cat Cppsym.know > Cppsym.c
16153 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16154 $rm -f Cppsym.a Cppsym.b Cppsym.c
16155 cat <<EOSH > Cppsym
16156 $startsh
16157 if $test \$# -gt 0; then
16158     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16159     if $test -s Cppsym.got; then
16160         $rm -f Cppsym.got
16161         exit 0
16162     fi
16163     $rm -f Cppsym.got
16164     exit 1
16165 else
16166     $tr " " "$trnl" | ./Cppsym.try
16167     exit 0
16168 fi
16169 EOSH
16170 chmod +x Cppsym
16171 $eunicefix Cppsym
16172 cat <<EOSH > Cppsym.try
16173 $startsh
16174 cat <<'EOCP' > try.c
16175 #include <stdio.h>
16176 int main() {
16177 EOCP
16178 $awk \\
16179 EOSH
16180 cat <<'EOSH' >> Cppsym.try
16181 'length($1) > 0 {
16182     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
16183     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
16184     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
16185     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
16186 }'       >> try.c
16187 echo 'return 0;}' >> try.c
16188 EOSH
16189 cat <<EOSH >> Cppsym.try
16190 ccflags="$ccflags"
16191 case "$osname-$gccversion" in
16192 irix-) ccflags="\$ccflags -woff 1178" ;;
16193 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16194 esac
16195 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16196 EOSH
16197 chmod +x Cppsym.try
16198 $eunicefix Cppsym.try
16199 ./Cppsym < Cppsym.know > Cppsym.true
16200 : now check the C compiler for additional symbols
16201 postprocess_cc_v=''
16202 case "$osname" in
16203 aix) postprocess_cc_v="|$tr , ' '" ;;
16204 esac
16205 $cat >ccsym <<EOS
16206 $startsh
16207 $cat >tmp.c <<EOF
16208 extern int foo;
16209 EOF
16210 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16211 do
16212         case "\$i" in
16213         -D*) echo "\$i" | $sed 's/^-D//';;
16214         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16215         esac
16216 done
16217 $rm -f try.c
16218 EOS
16219 postprocess_cc_v=''
16220 chmod +x ccsym
16221 $eunicefix ccsym
16222 ./ccsym > ccsym1.raw
16223 if $test -s ccsym1.raw; then
16224        $sort ccsym1.raw | $uniq >ccsym.raw
16225 else
16226        mv ccsym1.raw ccsym.raw
16227 fi
16228
16229 $awk '/\=/ { print $0; next }
16230         { print $0"=1" }' ccsym.raw >ccsym.list
16231 $awk '/\=/ { print $0; next }
16232         { print $0"=1" }' Cppsym.true >ccsym.true
16233 $comm -13 ccsym.true ccsym.list >ccsym.own
16234 $comm -12 ccsym.true ccsym.list >ccsym.com
16235 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16236 also=''
16237 if $test -z ccsym.raw; then
16238         echo "Your C compiler doesn't seem to define any symbols!" >&4
16239         echo " "
16240         echo "However, your C preprocessor defines the following symbols:"
16241         $cat Cppsym.true
16242         ccsymbols=''
16243         cppsymbols=`$cat Cppsym.true`
16244         cppsymbols=`echo $cppsymbols`
16245         cppccsymbols="$cppsymbols"
16246 else
16247         if $test -s ccsym.com; then
16248                 echo "Your C compiler and pre-processor define these symbols:"
16249                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16250                 also='also '
16251                 symbols='ones'
16252                 cppccsymbols=`$cat ccsym.com`
16253                 cppccsymbols=`echo $cppccsymbols`
16254                 $test "$silent" || sleep 1
16255         fi
16256         if $test -s ccsym.cpp; then
16257                 $test "$also" && echo " "
16258                 echo "Your C pre-processor ${also}defines the following symbols:"
16259                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16260                 also='further '
16261                 cppsymbols=`$cat ccsym.cpp`
16262                 cppsymbols=`echo $cppsymbols`
16263                 $test "$silent" || sleep 1
16264         fi
16265         if $test -s ccsym.own; then
16266                 $test "$also" && echo " "
16267                 echo "Your C compiler ${also}defines the following cpp symbols:"
16268                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16269                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16270                 ccsymbols=`$cat ccsym.own`
16271                 ccsymbols=`echo $ccsymbols`
16272                 $test "$silent" || sleep 1
16273         fi
16274 fi
16275
16276 : see if this is a termio system
16277 val="$undef"
16278 val2="$undef"
16279 val3="$undef"
16280 if $test `./findhdr termios.h`; then
16281         set tcsetattr i_termios
16282         eval $inlibc
16283         val3="$i_termios"
16284 fi
16285 echo " "
16286 case "$val3" in
16287 "$define") echo "You have POSIX termios.h... good!" >&4;;
16288 *) if ./Cppsym pyr; then
16289                 case "`/bin/universe`" in
16290                 ucb) if $test `./findhdr sgtty.h`; then
16291                                 val2="$define"
16292                                 echo "<sgtty.h> found." >&4
16293                         else
16294                                 echo "System is pyramid with BSD universe."
16295                                 echo "<sgtty.h> not found--you could have problems." >&4
16296                         fi;;
16297                 *) if $test `./findhdr termio.h`; then
16298                                 val="$define"
16299                                 echo "<termio.h> found." >&4
16300                         else
16301                                 echo "System is pyramid with USG universe."
16302                                 echo "<termio.h> not found--you could have problems." >&4
16303                         fi;;
16304                 esac
16305         elif ./usg; then
16306                 if $test `./findhdr termio.h`; then
16307                         echo "<termio.h> found." >&4
16308                         val="$define"
16309                 elif $test `./findhdr sgtty.h`; then
16310                         echo "<sgtty.h> found." >&4
16311                         val2="$define"
16312                 else
16313 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16314                 fi
16315         else
16316                 if $test `./findhdr sgtty.h`; then
16317                         echo "<sgtty.h> found." >&4
16318                         val2="$define"
16319                 elif $test `./findhdr termio.h`; then
16320                         echo "<termio.h> found." >&4
16321                         val="$define"
16322                 else
16323 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16324                 fi
16325         fi;;
16326 esac
16327 set i_termio; eval $setvar
16328 val=$val2; set i_sgtty; eval $setvar
16329 val=$val3; set i_termios; eval $setvar
16330
16331 : see if this is a shadow.h system
16332 set shadow.h i_shadow
16333 eval $inhdr
16334
16335 : see if stddef is available
16336 set stddef.h i_stddef
16337 eval $inhdr
16338
16339 : see if this is a sunmath.h system
16340 set sunmath.h i_sunmath
16341 eval $inhdr
16342
16343 : see if sys/access.h is available
16344 set sys/access.h i_sysaccess
16345 eval $inhdr
16346
16347 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16348 set sys/filio.h i_sysfilio
16349 eval $inhdr
16350 echo " "
16351 if $test `./findhdr sys/ioctl.h`; then
16352         val="$define"
16353         echo '<sys/ioctl.h> found.' >&4
16354 else
16355         val="$undef"
16356         if $test $i_sysfilio = "$define"; then
16357             echo '<sys/ioctl.h> NOT found.' >&4
16358         else
16359                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16360                 $test $i_termio = "$define" && xxx="termio.h"
16361                 $test $i_termios = "$define" && xxx="termios.h"
16362 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16363         fi
16364 fi
16365 set i_sysioctl
16366 eval $setvar
16367
16368 : see if socket ioctl defs are in sys/sockio.h
16369 echo " "
16370 xxx=`./findhdr sys/sockio.h`
16371 if $test "$xxx"; then
16372         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16373                 val="$define"
16374                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16375         else
16376                 val="$undef"
16377                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16378         fi
16379 else
16380         val="$undef"
16381         $cat <<EOM
16382 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16383 EOM
16384 fi
16385 set i_syssockio
16386 eval $setvar
16387
16388
16389 : see if this is a syslog.h system
16390 set syslog.h i_syslog
16391 eval $inhdr
16392
16393
16394 : see if this is a sys/mode.h system
16395 set sys/mode.h i_sysmode
16396 eval $inhdr
16397
16398 : see if sys/resource.h has to be included
16399 set sys/resource.h i_sysresrc
16400 eval $inhdr
16401
16402 : see if sys/security.h is available
16403 set sys/security.h i_syssecrt
16404 eval $inhdr
16405
16406 : see if this is a sys/statvfs.h system
16407 set sys/statvfs.h i_sysstatvfs
16408 eval $inhdr
16409
16410 : see if this is a sys/un.h system
16411 set sys/un.h i_sysun
16412 eval $inhdr
16413
16414
16415 : see if this is a sys/utsname.h system
16416 set sys/utsname.h i_sysutsname
16417 eval $inhdr
16418
16419 : see if this is a syswait system
16420 set sys/wait.h i_syswait
16421 eval $inhdr
16422
16423 : see if this is a ustat.h system
16424 set ustat.h i_ustat
16425 eval $inhdr
16426
16427 : see if this is an utime system
16428 set utime.h i_utime
16429 eval $inhdr
16430
16431 : see if this is a values.h system
16432 set values.h i_values
16433 eval $inhdr
16434
16435 : see if this is a vfork system
16436 case "$d_vfork" in
16437 "$define")
16438         set vfork.h i_vfork
16439         eval $inhdr
16440         ;;
16441 *)
16442         i_vfork="$undef"
16443         ;;
16444 esac
16445
16446 : see if gdbm.h is available
16447 set gdbm.h t_gdbm
16448 eval $inhdr
16449 case "$t_gdbm" in
16450 $define)
16451         : see if gdbm_open exists
16452         set gdbm_open d_gdbm_open
16453         eval $inlibc
16454         case "$d_gdbm_open" in
16455         $undef)
16456                 t_gdbm="$undef"
16457                 echo "We won't be including <gdbm.h>"
16458                 ;;
16459         esac
16460         ;;
16461 esac
16462 val="$t_gdbm"
16463 set i_gdbm
16464 eval $setvar
16465
16466 echo " "
16467 echo "Looking for extensions..." >&4
16468 : If we are using the old config.sh, known_extensions may contain
16469 : old or inaccurate or duplicate values.
16470 known_extensions=''
16471 nonxs_extensions=''
16472 : We do not use find because it might not be available.
16473 : We do not just use MANIFEST because the user may have dropped
16474 : some additional extensions into the source tree and expect them
16475 : to be built.
16476
16477 : Function to recursively find available extensions, ignoring DynaLoader
16478 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16479 find_extensions='
16480     for xxx in *; do
16481        case "$xxx" in
16482            DynaLoader|dynaload) ;;
16483            *)
16484            if $test -f $xxx/$xxx.xs; then
16485                known_extensions="$known_extensions $1$xxx";
16486            elif $test -f $xxx/Makefile.PL; then
16487                nonxs_extensions="$nonxs_extensions $1$xxx";
16488            else
16489                if $test -d $xxx -a $# -lt 10; then
16490                    set $1$xxx/ $*;
16491                    cd $xxx;
16492                    eval $find_extensions;
16493                    cd ..;
16494                    shift;
16495                fi;
16496            fi
16497            ;;
16498        esac;
16499     done'
16500 tdir=`pwd`
16501 cd $rsrc/ext
16502 set X
16503 shift
16504 eval $find_extensions
16505 # Special case:  Add in threads/shared since it is not picked up by the
16506 # recursive find above (and adding in general recursive finding breaks
16507 # SDBM_File/sdbm).  A.D.  10/25/2001.
16508 known_extensions="$known_extensions threads/shared"
16509 set X $nonxs_extensions
16510 shift
16511 nonxs_extensions="$*"
16512 set X $known_extensions
16513 shift
16514 known_extensions="$*"
16515 cd $tdir
16516
16517 : Now see which are supported on this system.
16518 avail_ext=''
16519 for xxx in $known_extensions ; do
16520         case "$xxx" in
16521         DB_File|db_file)
16522                 case "$i_db" in
16523                 $define) avail_ext="$avail_ext $xxx" ;;
16524                 esac
16525                 ;;
16526         GDBM_File|gdbm_fil)
16527                 case "$i_gdbm" in 
16528                 $define) avail_ext="$avail_ext $xxx" ;;
16529                 esac
16530                 ;;
16531         I18N/Langinfo|i18n_lan)
16532                 case "$i_langinfo$d_nl_langinfo" in 
16533                 $define$define) avail_ext="$avail_ext $xxx" ;;
16534                 esac
16535                 ;;
16536         NDBM_File|ndbm_fil)
16537                 case "$i_ndbm" in
16538                 $define)
16539                     case "$osname-$use64bitint" in
16540                     cygwin-*|hpux-define)
16541                         case "$libs" in
16542                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16543                         esac
16544                         ;;
16545                     *) avail_ext="$avail_ext $xxx" ;;
16546                     esac
16547                     ;;
16548                 esac
16549                 ;;
16550         ODBM_File|odbm_fil) 
16551                 case "${i_dbm}${i_rpcsvcdbm}" in
16552                 *"${define}"*)
16553                     case "$osname-$use64bitint" in
16554                     cygwin-*|hpux-define)
16555                         case "$libs" in
16556                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16557                         esac
16558                         ;;
16559                     *) avail_ext="$avail_ext $xxx" ;;
16560                     esac
16561                     ;;
16562                 esac
16563                 ;;
16564         POSIX|posix)
16565                 case "$useposix" in
16566                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16567                 esac
16568                 ;;
16569         Opcode|opcode)
16570                 case "$useopcode" in
16571                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16572                 esac
16573                 ;;
16574         Socket|socket)
16575                 case "$d_socket" in 
16576                 true|$define|y)
16577                     case "$osname" in
16578                     beos) ;; # not unless BONE
16579                     *) avail_ext="$avail_ext $xxx" ;;
16580                     esac
16581                     ;;
16582                 esac
16583                 ;;
16584         Sys/Syslog|sys/syslog)
16585                 : XXX syslog requires socket
16586                 case "$d_socket" in 
16587                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16588                 esac
16589                 ;;
16590         Thread|thread)
16591                 case "$usethreads" in
16592                 true|$define|y)
16593                         case "$useithreads" in
16594                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16595                         esac
16596                 esac
16597                 ;;
16598         threads|threads/shared)
16599                 case "$usethreads" in
16600                 true|$define|y)
16601                         case "$useithreads" in
16602                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16603                         esac
16604                 esac
16605                 ;;
16606         IPC/SysV|ipc/sysv)
16607                 : XXX Do we need a useipcsysv variable here
16608                 case "${d_msg}${d_sem}${d_shm}" in 
16609                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16610                 esac
16611                 ;;
16612         *)      avail_ext="$avail_ext $xxx"
16613                 ;;
16614         esac
16615 done
16616
16617 set X $avail_ext
16618 shift
16619 avail_ext="$*"
16620
16621 : Now see which nonxs extensions are supported on this system.
16622 : For now assume all are.
16623 nonxs_ext=''
16624 for xxx in $nonxs_extensions ; do
16625         case "$xxx" in
16626         *)      nonxs_ext="$nonxs_ext $xxx"
16627                 ;;
16628         esac
16629 done
16630
16631 set X $nonxs_ext
16632 shift
16633 nonxs_ext="$*"
16634
16635 case $usedl in
16636 $define)
16637         $cat <<EOM
16638 A number of extensions are supplied with $package.  You may choose to
16639 compile these extensions for dynamic loading (the default), compile
16640 them into the $package executable (static loading), or not include
16641 them at all.  Answer "none" to include no extensions.
16642 Note that DynaLoader is always built and need not be mentioned here.
16643
16644 EOM
16645         case "$dynamic_ext" in
16646         '') dflt="$avail_ext" ;;
16647         *)      dflt="$dynamic_ext"
16648                 # Perhaps we are reusing an old out-of-date config.sh.
16649                 case "$hint" in
16650                 previous)
16651                         if test X"$dynamic_ext" != X"$avail_ext"; then
16652                                 $cat <<EOM
16653 NOTICE:  Your previous config.sh list may be incorrect. 
16654 The extensions now available to you are 
16655         ${avail_ext}
16656 but the default list from your previous config.sh is
16657         ${dynamic_ext} 
16658
16659 EOM
16660                         fi
16661                         ;;
16662                 esac
16663                 ;;
16664         esac
16665         case "$dflt" in
16666         '')     dflt=none;;
16667         esac
16668         rp="What extensions do you wish to load dynamically?"
16669         . ./myread
16670         case "$ans" in
16671         none) dynamic_ext=' ' ;;
16672         *) dynamic_ext="$ans" ;;
16673         esac
16674
16675         case "$static_ext" in
16676         '')
16677                 : Exclude those already listed in dynamic linking
16678                 dflt=''
16679                 for xxx in $avail_ext; do
16680                         case " $dynamic_ext " in
16681                         *" $xxx "*) ;;
16682                         *) dflt="$dflt $xxx" ;;
16683                         esac
16684                 done
16685                 set X $dflt
16686                 shift
16687                 dflt="$*"
16688                 ;;
16689         *)  dflt="$static_ext" 
16690                 ;;
16691         esac
16692
16693         case "$dflt" in
16694         '')     dflt=none;;
16695         esac
16696         rp="What extensions do you wish to load statically?"
16697         . ./myread
16698         case "$ans" in
16699         none) static_ext=' ' ;;
16700         *) static_ext="$ans" ;;
16701         esac
16702         ;;
16703 *)
16704         $cat <<EOM
16705 A number of extensions are supplied with $package.  Answer "none" 
16706 to include no extensions. 
16707 Note that DynaLoader is always built and need not be mentioned here.
16708
16709 EOM
16710         case "$static_ext" in
16711         '') dflt="$avail_ext" ;;
16712         *)      dflt="$static_ext"
16713                 # Perhaps we are reusing an old out-of-date config.sh.
16714                 case "$hint" in
16715                 previous)
16716                         if test X"$static_ext" != X"$avail_ext"; then
16717                                 $cat <<EOM
16718 NOTICE:  Your previous config.sh list may be incorrect. 
16719 The extensions now available to you are 
16720         ${avail_ext}
16721 but the default list from your previous config.sh is
16722         ${static_ext} 
16723
16724 EOM
16725                         fi
16726                         ;;
16727                 esac
16728                 ;;
16729         esac
16730         : Exclude those that are not xs extensions
16731         case "$dflt" in
16732         '')     dflt=none;;
16733         esac
16734         rp="What extensions do you wish to include?"
16735         . ./myread
16736         case "$ans" in
16737         none) static_ext=' ' ;;
16738         *) static_ext="$ans" ;;
16739         esac
16740         ;;
16741 esac
16742
16743 set X $dynamic_ext $static_ext $nonxs_ext
16744 shift
16745 extensions="$*"
16746
16747 : Remove libraries needed only for extensions
16748 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16749 : The exception is SunOS 4.x, which needs them.
16750 case "${osname}X${osvers}" in
16751 sunos*X4*)
16752     perllibs="$libs"
16753     ;;
16754 *) case "$usedl" in
16755     $define|true|[yY]*)
16756             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16757             shift
16758             perllibs="$*"
16759             ;;
16760     *)  perllibs="$libs"
16761             ;;
16762     esac
16763     ;;
16764 esac
16765
16766 : Remove build directory name from cppstdin so it can be used from
16767 : either the present location or the final installed location.
16768 echo " "
16769 : Get out of the UU directory to get correct path name.
16770 cd ..
16771 case "$cppstdin" in
16772 `pwd`/cppstdin)
16773         echo "Stripping down cppstdin path name"
16774         cppstdin=cppstdin
16775         ;;
16776 esac
16777 cd UU
16778
16779 : end of configuration questions
16780 echo " "
16781 echo "End of configuration questions."
16782 echo " "
16783
16784 : back to where it started
16785 if test -d ../UU; then
16786         cd ..
16787 fi
16788
16789 : configuration may be patched via a 'config.arch' file
16790 if $test -f config.arch; then
16791         echo "I see a config.arch file, loading it."
16792         . ./config.arch
16793 fi
16794
16795 : configuration may be patched via a 'config.over' file
16796 if $test -f config.over; then
16797         echo " "
16798         dflt=y
16799         rp='I see a config.over file.  Do you wish to load it?'
16800         . UU/myread
16801         case "$ans" in
16802         n*) echo "OK, I'll ignore it.";;
16803         *)      . ./config.over
16804                 echo "Configuration override changes have been loaded."
16805                 ;;
16806         esac
16807 fi
16808
16809 : in case they want portability, strip down executable paths
16810 case "$d_portable" in
16811 "$define")
16812         echo " "
16813         echo "Stripping down executable paths..." >&4
16814         for file in $loclist $trylist; do
16815                 eval temp=\$$file
16816                 eval $file=`basename $temp`
16817         done
16818         ;;
16819 esac
16820
16821 : create config.sh file
16822 echo " "
16823 echo "Creating config.sh..." >&4
16824 $spitshell <<EOT >config.sh
16825 $startsh
16826 #
16827 # This file was produced by running the Configure script. It holds all the
16828 # definitions figured out by Configure. Should you modify one of these values,
16829 # do not forget to propagate your changes by running "Configure -der". You may
16830 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16831 #
16832
16833 # Package name      : $package
16834 # Source directory  : $src
16835 # Configuration time: $cf_time
16836 # Configured by     : $cf_by
16837 # Target system     : $myuname
16838
16839 Author='$Author'
16840 Date='$Date'
16841 Header='$Header'
16842 Id='$Id'
16843 Locker='$Locker'
16844 Log='$Log'
16845 Mcc='$Mcc'
16846 RCSfile='$RCSfile'
16847 Revision='$Revision'
16848 Source='$Source'
16849 State='$State'
16850 _a='$_a'
16851 _exe='$_exe'
16852 _o='$_o'
16853 afs='$afs'
16854 afsroot='$afsroot'
16855 alignbytes='$alignbytes'
16856 ansi2knr='$ansi2knr'
16857 aphostname='$aphostname'
16858 api_revision='$api_revision'
16859 api_subversion='$api_subversion'
16860 api_version='$api_version'
16861 api_versionstring='$api_versionstring'
16862 ar='$ar'
16863 archlib='$archlib'
16864 archlibexp='$archlibexp'
16865 archname64='$archname64'
16866 archname='$archname'
16867 archobjs='$archobjs'
16868 awk='$awk'
16869 baserev='$baserev'
16870 bash='$bash'
16871 bin='$bin'
16872 bincompat5005='$bincompat5005'
16873 binexp='$binexp'
16874 bison='$bison'
16875 byacc='$byacc'
16876 byteorder='$byteorder'
16877 c='$c'
16878 castflags='$castflags'
16879 cat='$cat'
16880 cc='$cc'
16881 cccdlflags='$cccdlflags'
16882 ccdlflags='$ccdlflags'
16883 ccflags='$ccflags'
16884 ccflags_uselargefiles='$ccflags_uselargefiles'
16885 ccname='$ccname'
16886 ccsymbols='$ccsymbols'
16887 ccversion='$ccversion'
16888 cf_by='$cf_by'
16889 cf_email='$cf_email'
16890 cf_time='$cf_time'
16891 charsize='$charsize'
16892 chgrp='$chgrp'
16893 chmod='$chmod'
16894 chown='$chown'
16895 clocktype='$clocktype'
16896 comm='$comm'
16897 compress='$compress'
16898 contains='$contains'
16899 cp='$cp'
16900 cpio='$cpio'
16901 cpp='$cpp'
16902 cpp_stuff='$cpp_stuff'
16903 cppccsymbols='$cppccsymbols'
16904 cppflags='$cppflags'
16905 cpplast='$cpplast'
16906 cppminus='$cppminus'
16907 cpprun='$cpprun'
16908 cppstdin='$cppstdin'
16909 cppsymbols='$cppsymbols'
16910 cryptlib='$cryptlib'
16911 csh='$csh'
16912 d_Gconvert='$d_Gconvert'
16913 d_PRIEUldbl='$d_PRIEUldbl'
16914 d_PRIFUldbl='$d_PRIFUldbl'
16915 d_PRIGUldbl='$d_PRIGUldbl'
16916 d_PRIXU64='$d_PRIXU64'
16917 d_PRId64='$d_PRId64'
16918 d_PRIeldbl='$d_PRIeldbl'
16919 d_PRIfldbl='$d_PRIfldbl'
16920 d_PRIgldbl='$d_PRIgldbl'
16921 d_PRIi64='$d_PRIi64'
16922 d_PRIo64='$d_PRIo64'
16923 d_PRIu64='$d_PRIu64'
16924 d_PRIx64='$d_PRIx64'
16925 d_SCNfldbl='$d_SCNfldbl'
16926 d__fwalk='$d__fwalk'
16927 d_access='$d_access'
16928 d_accessx='$d_accessx'
16929 d_alarm='$d_alarm'
16930 d_archlib='$d_archlib'
16931 d_atolf='$d_atolf'
16932 d_atoll='$d_atoll'
16933 d_attribut='$d_attribut'
16934 d_bcmp='$d_bcmp'
16935 d_bcopy='$d_bcopy'
16936 d_bincompat5005='$d_bincompat5005'
16937 d_bsd='$d_bsd'
16938 d_bsdgetpgrp='$d_bsdgetpgrp'
16939 d_bsdsetpgrp='$d_bsdsetpgrp'
16940 d_bzero='$d_bzero'
16941 d_casti32='$d_casti32'
16942 d_castneg='$d_castneg'
16943 d_charvspr='$d_charvspr'
16944 d_chown='$d_chown'
16945 d_chroot='$d_chroot'
16946 d_chsize='$d_chsize'
16947 d_class='$d_class'
16948 d_closedir='$d_closedir'
16949 d_cmsghdr_s='$d_cmsghdr_s'
16950 d_const='$d_const'
16951 d_crypt='$d_crypt'
16952 d_csh='$d_csh'
16953 d_cuserid='$d_cuserid'
16954 d_dbl_dig='$d_dbl_dig'
16955 d_dbminitproto='$d_dbminitproto'
16956 d_difftime='$d_difftime'
16957 d_dirfd='$d_dirfd'
16958 d_dirnamlen='$d_dirnamlen'
16959 d_dlerror='$d_dlerror'
16960 d_dlopen='$d_dlopen'
16961 d_dlsymun='$d_dlsymun'
16962 d_dosuid='$d_dosuid'
16963 d_drand48proto='$d_drand48proto'
16964 d_dup2='$d_dup2'
16965 d_eaccess='$d_eaccess'
16966 d_endgrent='$d_endgrent'
16967 d_endhent='$d_endhent'
16968 d_endnent='$d_endnent'
16969 d_endpent='$d_endpent'
16970 d_endpwent='$d_endpwent'
16971 d_endsent='$d_endsent'
16972 d_eofnblk='$d_eofnblk'
16973 d_eunice='$d_eunice'
16974 d_fchdir='$d_fchdir'
16975 d_fchmod='$d_fchmod'
16976 d_fchown='$d_fchown'
16977 d_fcntl='$d_fcntl'
16978 d_fcntl_can_lock='$d_fcntl_can_lock'
16979 d_fd_macros='$d_fd_macros'
16980 d_fd_set='$d_fd_set'
16981 d_fds_bits='$d_fds_bits'
16982 d_fgetpos='$d_fgetpos'
16983 d_finite='$d_finite'
16984 d_finitel='$d_finitel'
16985 d_flexfnam='$d_flexfnam'
16986 d_flock='$d_flock'
16987 d_flockproto='$d_flockproto'
16988 d_fork='$d_fork'
16989 d_fp_class='$d_fp_class'
16990 d_fpathconf='$d_fpathconf'
16991 d_fpclass='$d_fpclass'
16992 d_fpclassify='$d_fpclassify'
16993 d_fpclassl='$d_fpclassl'
16994 d_fpos64_t='$d_fpos64_t'
16995 d_frexpl='$d_frexpl'
16996 d_fs_data_s='$d_fs_data_s'
16997 d_fseeko='$d_fseeko'
16998 d_fsetpos='$d_fsetpos'
16999 d_fstatfs='$d_fstatfs'
17000 d_fstatvfs='$d_fstatvfs'
17001 d_fsync='$d_fsync'
17002 d_ftello='$d_ftello'
17003 d_ftime='$d_ftime'
17004 d_getcwd='$d_getcwd'
17005 d_getespwnam='$d_getespwnam'
17006 d_getfsstat='$d_getfsstat'
17007 d_getgrent='$d_getgrent'
17008 d_getgrps='$d_getgrps'
17009 d_gethbyaddr='$d_gethbyaddr'
17010 d_gethbyname='$d_gethbyname'
17011 d_gethent='$d_gethent'
17012 d_gethname='$d_gethname'
17013 d_gethostprotos='$d_gethostprotos'
17014 d_getitimer='$d_getitimer'
17015 d_getlogin='$d_getlogin'
17016 d_getmnt='$d_getmnt'
17017 d_getmntent='$d_getmntent'
17018 d_getnbyaddr='$d_getnbyaddr'
17019 d_getnbyname='$d_getnbyname'
17020 d_getnent='$d_getnent'
17021 d_getnetprotos='$d_getnetprotos'
17022 d_getpagsz='$d_getpagsz'
17023 d_getpbyname='$d_getpbyname'
17024 d_getpbynumber='$d_getpbynumber'
17025 d_getpent='$d_getpent'
17026 d_getpgid='$d_getpgid'
17027 d_getpgrp2='$d_getpgrp2'
17028 d_getpgrp='$d_getpgrp'
17029 d_getppid='$d_getppid'
17030 d_getprior='$d_getprior'
17031 d_getprotoprotos='$d_getprotoprotos'
17032 d_getprpwnam='$d_getprpwnam'
17033 d_getpwent='$d_getpwent'
17034 d_getsbyname='$d_getsbyname'
17035 d_getsbyport='$d_getsbyport'
17036 d_getsent='$d_getsent'
17037 d_getservprotos='$d_getservprotos'
17038 d_getspnam='$d_getspnam'
17039 d_gettimeod='$d_gettimeod'
17040 d_gnulibc='$d_gnulibc'
17041 d_grpasswd='$d_grpasswd'
17042 d_hasmntopt='$d_hasmntopt'
17043 d_htonl='$d_htonl'
17044 d_index='$d_index'
17045 d_inetaton='$d_inetaton'
17046 d_int64_t='$d_int64_t'
17047 d_isascii='$d_isascii'
17048 d_isfinite='$d_isfinite'
17049 d_isinf='$d_isinf'
17050 d_isnan='$d_isnan'
17051 d_isnanl='$d_isnanl'
17052 d_killpg='$d_killpg'
17053 d_lchown='$d_lchown'
17054 d_ldbl_dig='$d_ldbl_dig'
17055 d_link='$d_link'
17056 d_locconv='$d_locconv'
17057 d_lockf='$d_lockf'
17058 d_longdbl='$d_longdbl'
17059 d_longlong='$d_longlong'
17060 d_lseekproto='$d_lseekproto'
17061 d_lstat='$d_lstat'
17062 d_madvise='$d_madvise'
17063 d_mblen='$d_mblen'
17064 d_mbstowcs='$d_mbstowcs'
17065 d_mbtowc='$d_mbtowc'
17066 d_memchr='$d_memchr'
17067 d_memcmp='$d_memcmp'
17068 d_memcpy='$d_memcpy'
17069 d_memmove='$d_memmove'
17070 d_memset='$d_memset'
17071 d_mkdir='$d_mkdir'
17072 d_mkdtemp='$d_mkdtemp'
17073 d_mkfifo='$d_mkfifo'
17074 d_mkstemp='$d_mkstemp'
17075 d_mkstemps='$d_mkstemps'
17076 d_mktime='$d_mktime'
17077 d_mmap='$d_mmap'
17078 d_modfl='$d_modfl'
17079 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17080 d_mprotect='$d_mprotect'
17081 d_msg='$d_msg'
17082 d_msg_ctrunc='$d_msg_ctrunc'
17083 d_msg_dontroute='$d_msg_dontroute'
17084 d_msg_oob='$d_msg_oob'
17085 d_msg_peek='$d_msg_peek'
17086 d_msg_proxy='$d_msg_proxy'
17087 d_msgctl='$d_msgctl'
17088 d_msgget='$d_msgget'
17089 d_msghdr_s='$d_msghdr_s'
17090 d_msgrcv='$d_msgrcv'
17091 d_msgsnd='$d_msgsnd'
17092 d_msync='$d_msync'
17093 d_munmap='$d_munmap'
17094 d_mymalloc='$d_mymalloc'
17095 d_nice='$d_nice'
17096 d_nl_langinfo='$d_nl_langinfo'
17097 d_nv_preserves_uv='$d_nv_preserves_uv'
17098 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17099 d_off64_t='$d_off64_t'
17100 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17101 d_oldpthreads='$d_oldpthreads'
17102 d_oldsock='$d_oldsock'
17103 d_open3='$d_open3'
17104 d_pathconf='$d_pathconf'
17105 d_pause='$d_pause'
17106 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17107 d_phostname='$d_phostname'
17108 d_pipe='$d_pipe'
17109 d_poll='$d_poll'
17110 d_portable='$d_portable'
17111 d_procselfexe='$d_procselfexe'
17112 d_pthread_atfork='$d_pthread_atfork'
17113 d_pthread_yield='$d_pthread_yield'
17114 d_pwage='$d_pwage'
17115 d_pwchange='$d_pwchange'
17116 d_pwclass='$d_pwclass'
17117 d_pwcomment='$d_pwcomment'
17118 d_pwexpire='$d_pwexpire'
17119 d_pwgecos='$d_pwgecos'
17120 d_pwpasswd='$d_pwpasswd'
17121 d_pwquota='$d_pwquota'
17122 d_qgcvt='$d_qgcvt'
17123 d_quad='$d_quad'
17124 d_readdir='$d_readdir'
17125 d_readlink='$d_readlink'
17126 d_readv='$d_readv'
17127 d_recvmsg='$d_recvmsg'
17128 d_rename='$d_rename'
17129 d_rewinddir='$d_rewinddir'
17130 d_rmdir='$d_rmdir'
17131 d_safebcpy='$d_safebcpy'
17132 d_safemcpy='$d_safemcpy'
17133 d_sanemcmp='$d_sanemcmp'
17134 d_sbrkproto='$d_sbrkproto'
17135 d_sched_yield='$d_sched_yield'
17136 d_scm_rights='$d_scm_rights'
17137 d_seekdir='$d_seekdir'
17138 d_select='$d_select'
17139 d_sem='$d_sem'
17140 d_semctl='$d_semctl'
17141 d_semctl_semid_ds='$d_semctl_semid_ds'
17142 d_semctl_semun='$d_semctl_semun'
17143 d_semget='$d_semget'
17144 d_semop='$d_semop'
17145 d_sendmsg='$d_sendmsg'
17146 d_setegid='$d_setegid'
17147 d_seteuid='$d_seteuid'
17148 d_setgrent='$d_setgrent'
17149 d_setgrps='$d_setgrps'
17150 d_sethent='$d_sethent'
17151 d_setitimer='$d_setitimer'
17152 d_setlinebuf='$d_setlinebuf'
17153 d_setlocale='$d_setlocale'
17154 d_setnent='$d_setnent'
17155 d_setpent='$d_setpent'
17156 d_setpgid='$d_setpgid'
17157 d_setpgrp2='$d_setpgrp2'
17158 d_setpgrp='$d_setpgrp'
17159 d_setprior='$d_setprior'
17160 d_setproctitle='$d_setproctitle'
17161 d_setpwent='$d_setpwent'
17162 d_setregid='$d_setregid'
17163 d_setresgid='$d_setresgid'
17164 d_setresuid='$d_setresuid'
17165 d_setreuid='$d_setreuid'
17166 d_setrgid='$d_setrgid'
17167 d_setruid='$d_setruid'
17168 d_setsent='$d_setsent'
17169 d_setsid='$d_setsid'
17170 d_setvbuf='$d_setvbuf'
17171 d_sfio='$d_sfio'
17172 d_shm='$d_shm'
17173 d_shmat='$d_shmat'
17174 d_shmatprototype='$d_shmatprototype'
17175 d_shmctl='$d_shmctl'
17176 d_shmdt='$d_shmdt'
17177 d_shmget='$d_shmget'
17178 d_sigaction='$d_sigaction'
17179 d_sigprocmask='$d_sigprocmask'
17180 d_sigsetjmp='$d_sigsetjmp'
17181 d_sockatmark='$d_sockatmark'
17182 d_sockatmarkproto='$d_sockatmarkproto'
17183 d_socket='$d_socket'
17184 d_socklen_t='$d_socklen_t'
17185 d_sockpair='$d_sockpair'
17186 d_socks5_init='$d_socks5_init'
17187 d_sqrtl='$d_sqrtl'
17188 d_sresgproto='$d_sresgproto'
17189 d_sresuproto='$d_sresuproto'
17190 d_statblks='$d_statblks'
17191 d_statfs_f_flags='$d_statfs_f_flags'
17192 d_statfs_s='$d_statfs_s'
17193 d_statvfs='$d_statvfs'
17194 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17195 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17196 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17197 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17198 d_stdio_stream_array='$d_stdio_stream_array'
17199 d_stdiobase='$d_stdiobase'
17200 d_stdstdio='$d_stdstdio'
17201 d_strchr='$d_strchr'
17202 d_strcoll='$d_strcoll'
17203 d_strctcpy='$d_strctcpy'
17204 d_strerrm='$d_strerrm'
17205 d_strerror='$d_strerror'
17206 d_strftime='$d_strftime'
17207 d_strtod='$d_strtod'
17208 d_strtol='$d_strtol'
17209 d_strtold='$d_strtold'
17210 d_strtoll='$d_strtoll'
17211 d_strtoq='$d_strtoq'
17212 d_strtoul='$d_strtoul'
17213 d_strtoull='$d_strtoull'
17214 d_strtouq='$d_strtouq'
17215 d_strxfrm='$d_strxfrm'
17216 d_suidsafe='$d_suidsafe'
17217 d_symlink='$d_symlink'
17218 d_syscall='$d_syscall'
17219 d_syscallproto='$d_syscallproto'
17220 d_sysconf='$d_sysconf'
17221 d_sysernlst='$d_sysernlst'
17222 d_syserrlst='$d_syserrlst'
17223 d_system='$d_system'
17224 d_tcgetpgrp='$d_tcgetpgrp'
17225 d_tcsetpgrp='$d_tcsetpgrp'
17226 d_telldir='$d_telldir'
17227 d_telldirproto='$d_telldirproto'
17228 d_time='$d_time'
17229 d_times='$d_times'
17230 d_truncate='$d_truncate'
17231 d_tzname='$d_tzname'
17232 d_u32align='$d_u32align'
17233 d_ualarm='$d_ualarm'
17234 d_umask='$d_umask'
17235 d_uname='$d_uname'
17236 d_union_semun='$d_union_semun'
17237 d_unordered='$d_unordered'
17238 d_usleep='$d_usleep'
17239 d_usleepproto='$d_usleepproto'
17240 d_ustat='$d_ustat'
17241 d_vendorarch='$d_vendorarch'
17242 d_vendorbin='$d_vendorbin'
17243 d_vendorlib='$d_vendorlib'
17244 d_vfork='$d_vfork'
17245 d_void_closedir='$d_void_closedir'
17246 d_voidsig='$d_voidsig'
17247 d_voidtty='$d_voidtty'
17248 d_volatile='$d_volatile'
17249 d_vprintf='$d_vprintf'
17250 d_wait4='$d_wait4'
17251 d_waitpid='$d_waitpid'
17252 d_wcstombs='$d_wcstombs'
17253 d_wctomb='$d_wctomb'
17254 d_writev='$d_writev'
17255 d_xenix='$d_xenix'
17256 date='$date'
17257 db_hashtype='$db_hashtype'
17258 db_prefixtype='$db_prefixtype'
17259 db_version_major='$db_version_major'
17260 db_version_minor='$db_version_minor'
17261 db_version_patch='$db_version_patch'
17262 defvoidused='$defvoidused'
17263 direntrytype='$direntrytype'
17264 dlext='$dlext'
17265 dlsrc='$dlsrc'
17266 doublesize='$doublesize'
17267 drand01='$drand01'
17268 dynamic_ext='$dynamic_ext'
17269 eagain='$eagain'
17270 ebcdic='$ebcdic'
17271 echo='$echo'
17272 egrep='$egrep'
17273 emacs='$emacs'
17274 eunicefix='$eunicefix'
17275 exe_ext='$exe_ext'
17276 expr='$expr'
17277 extensions='$extensions'
17278 extras='$extras'
17279 fflushNULL='$fflushNULL'
17280 fflushall='$fflushall'
17281 find='$find'
17282 firstmakefile='$firstmakefile'
17283 flex='$flex'
17284 fpossize='$fpossize'
17285 fpostype='$fpostype'
17286 freetype='$freetype'
17287 from='$from'
17288 full_ar='$full_ar'
17289 full_csh='$full_csh'
17290 full_sed='$full_sed'
17291 gccosandvers='$gccosandvers'
17292 gccversion='$gccversion'
17293 gidformat='$gidformat'
17294 gidsign='$gidsign'
17295 gidsize='$gidsize'
17296 gidtype='$gidtype'
17297 glibpth='$glibpth'
17298 gmake='$gmake'
17299 grep='$grep'
17300 groupcat='$groupcat'
17301 groupstype='$groupstype'
17302 gzip='$gzip'
17303 h_fcntl='$h_fcntl'
17304 h_sysfile='$h_sysfile'
17305 hint='$hint'
17306 hostcat='$hostcat'
17307 i16size='$i16size'
17308 i16type='$i16type'
17309 i32size='$i32size'
17310 i32type='$i32type'
17311 i64size='$i64size'
17312 i64type='$i64type'
17313 i8size='$i8size'
17314 i8type='$i8type'
17315 i_arpainet='$i_arpainet'
17316 i_bsdioctl='$i_bsdioctl'
17317 i_db='$i_db'
17318 i_dbm='$i_dbm'
17319 i_dirent='$i_dirent'
17320 i_dld='$i_dld'
17321 i_dlfcn='$i_dlfcn'
17322 i_fcntl='$i_fcntl'
17323 i_float='$i_float'
17324 i_fp='$i_fp'
17325 i_fp_class='$i_fp_class'
17326 i_gdbm='$i_gdbm'
17327 i_grp='$i_grp'
17328 i_ieeefp='$i_ieeefp'
17329 i_inttypes='$i_inttypes'
17330 i_langinfo='$i_langinfo'
17331 i_libutil='$i_libutil'
17332 i_limits='$i_limits'
17333 i_locale='$i_locale'
17334 i_machcthr='$i_machcthr'
17335 i_malloc='$i_malloc'
17336 i_math='$i_math'
17337 i_memory='$i_memory'
17338 i_mntent='$i_mntent'
17339 i_ndbm='$i_ndbm'
17340 i_netdb='$i_netdb'
17341 i_neterrno='$i_neterrno'
17342 i_netinettcp='$i_netinettcp'
17343 i_niin='$i_niin'
17344 i_poll='$i_poll'
17345 i_prot='$i_prot'
17346 i_pthread='$i_pthread'
17347 i_pwd='$i_pwd'
17348 i_rpcsvcdbm='$i_rpcsvcdbm'
17349 i_sfio='$i_sfio'
17350 i_sgtty='$i_sgtty'
17351 i_shadow='$i_shadow'
17352 i_socks='$i_socks'
17353 i_stdarg='$i_stdarg'
17354 i_stddef='$i_stddef'
17355 i_stdlib='$i_stdlib'
17356 i_string='$i_string'
17357 i_sunmath='$i_sunmath'
17358 i_sysaccess='$i_sysaccess'
17359 i_sysdir='$i_sysdir'
17360 i_sysfile='$i_sysfile'
17361 i_sysfilio='$i_sysfilio'
17362 i_sysin='$i_sysin'
17363 i_sysioctl='$i_sysioctl'
17364 i_syslog='$i_syslog'
17365 i_sysmman='$i_sysmman'
17366 i_sysmode='$i_sysmode'
17367 i_sysmount='$i_sysmount'
17368 i_sysndir='$i_sysndir'
17369 i_sysparam='$i_sysparam'
17370 i_sysresrc='$i_sysresrc'
17371 i_syssecrt='$i_syssecrt'
17372 i_sysselct='$i_sysselct'
17373 i_syssockio='$i_syssockio'
17374 i_sysstat='$i_sysstat'
17375 i_sysstatfs='$i_sysstatfs'
17376 i_sysstatvfs='$i_sysstatvfs'
17377 i_systime='$i_systime'
17378 i_systimek='$i_systimek'
17379 i_systimes='$i_systimes'
17380 i_systypes='$i_systypes'
17381 i_sysuio='$i_sysuio'
17382 i_sysun='$i_sysun'
17383 i_sysutsname='$i_sysutsname'
17384 i_sysvfs='$i_sysvfs'
17385 i_syswait='$i_syswait'
17386 i_termio='$i_termio'
17387 i_termios='$i_termios'
17388 i_time='$i_time'
17389 i_unistd='$i_unistd'
17390 i_ustat='$i_ustat'
17391 i_utime='$i_utime'
17392 i_values='$i_values'
17393 i_varargs='$i_varargs'
17394 i_varhdr='$i_varhdr'
17395 i_vfork='$i_vfork'
17396 ignore_versioned_solibs='$ignore_versioned_solibs'
17397 inc_version_list='$inc_version_list'
17398 inc_version_list_init='$inc_version_list_init'
17399 incpath='$incpath'
17400 inews='$inews'
17401 installarchlib='$installarchlib'
17402 installbin='$installbin'
17403 installman1dir='$installman1dir'
17404 installman3dir='$installman3dir'
17405 installprefix='$installprefix'
17406 installprefixexp='$installprefixexp'
17407 installprivlib='$installprivlib'
17408 installscript='$installscript'
17409 installsitearch='$installsitearch'
17410 installsitebin='$installsitebin'
17411 installsitelib='$installsitelib'
17412 installstyle='$installstyle'
17413 installusrbinperl='$installusrbinperl'
17414 installvendorarch='$installvendorarch'
17415 installvendorbin='$installvendorbin'
17416 installvendorlib='$installvendorlib'
17417 intsize='$intsize'
17418 issymlink='$issymlink'
17419 ivdformat='$ivdformat'
17420 ivsize='$ivsize'
17421 ivtype='$ivtype'
17422 known_extensions='$known_extensions'
17423 ksh='$ksh'
17424 ld='$ld'
17425 lddlflags='$lddlflags'
17426 ldflags='$ldflags'
17427 ldflags_uselargefiles='$ldflags_uselargefiles'
17428 ldlibpthname='$ldlibpthname'
17429 less='$less'
17430 lib_ext='$lib_ext'
17431 libc='$libc'
17432 libperl='$libperl'
17433 libpth='$libpth'
17434 libs='$libs'
17435 libsdirs='$libsdirs'
17436 libsfiles='$libsfiles'
17437 libsfound='$libsfound'
17438 libspath='$libspath'
17439 libswanted='$libswanted'
17440 libswanted_uselargefiles='$libswanted_uselargefiles'
17441 line='$line'
17442 lint='$lint'
17443 lkflags='$lkflags'
17444 ln='$ln'
17445 lns='$lns'
17446 locincpth='$locincpth'
17447 loclibpth='$loclibpth'
17448 longdblsize='$longdblsize'
17449 longlongsize='$longlongsize'
17450 longsize='$longsize'
17451 lp='$lp'
17452 lpr='$lpr'
17453 ls='$ls'
17454 lseeksize='$lseeksize'
17455 lseektype='$lseektype'
17456 mail='$mail'
17457 mailx='$mailx'
17458 make='$make'
17459 make_set_make='$make_set_make'
17460 mallocobj='$mallocobj'
17461 mallocsrc='$mallocsrc'
17462 malloctype='$malloctype'
17463 man1dir='$man1dir'
17464 man1direxp='$man1direxp'
17465 man1ext='$man1ext'
17466 man3dir='$man3dir'
17467 man3direxp='$man3direxp'
17468 man3ext='$man3ext'
17469 mips_type='$mips_type'
17470 mkdir='$mkdir'
17471 mmaptype='$mmaptype'
17472 modetype='$modetype'
17473 more='$more'
17474 multiarch='$multiarch'
17475 mv='$mv'
17476 myarchname='$myarchname'
17477 mydomain='$mydomain'
17478 myhostname='$myhostname'
17479 myuname='$myuname'
17480 n='$n'
17481 need_va_copy='$need_va_copy'
17482 netdb_hlen_type='$netdb_hlen_type'
17483 netdb_host_type='$netdb_host_type'
17484 netdb_name_type='$netdb_name_type'
17485 netdb_net_type='$netdb_net_type'
17486 nm='$nm'
17487 nm_opt='$nm_opt'
17488 nm_so_opt='$nm_so_opt'
17489 nonxs_ext='$nonxs_ext'
17490 nroff='$nroff'
17491 nvEUformat='$nvEUformat'
17492 nvFUformat='$nvFUformat'
17493 nvGUformat='$nvGUformat'
17494 nveformat='$nveformat'
17495 nvfformat='$nvfformat'
17496 nvgformat='$nvgformat'
17497 nvsize='$nvsize'
17498 nvtype='$nvtype'
17499 o_nonblock='$o_nonblock'
17500 obj_ext='$obj_ext'
17501 old_pthread_create_joinable='$old_pthread_create_joinable'
17502 optimize='$optimize'
17503 orderlib='$orderlib'
17504 osname='$osname'
17505 osvers='$osvers'
17506 otherlibdirs='$otherlibdirs'
17507 package='$package'
17508 pager='$pager'
17509 passcat='$passcat'
17510 patchlevel='$patchlevel'
17511 path_sep='$path_sep'
17512 perl5='$perl5'
17513 perl='$perl'
17514 perl_patchlevel='$perl_patchlevel'
17515 perladmin='$perladmin'
17516 perllibs='$perllibs'
17517 perlpath='$perlpath'
17518 pg='$pg'
17519 phostname='$phostname'
17520 pidtype='$pidtype'
17521 plibpth='$plibpth'
17522 pm_apiversion='$pm_apiversion'
17523 pmake='$pmake'
17524 pr='$pr'
17525 prefix='$prefix'
17526 prefixexp='$prefixexp'
17527 privlib='$privlib'
17528 privlibexp='$privlibexp'
17529 procselfexe='$procselfexe'
17530 prototype='$prototype'
17531 ptrsize='$ptrsize'
17532 quadkind='$quadkind'
17533 quadtype='$quadtype'
17534 randbits='$randbits'
17535 randfunc='$randfunc'
17536 randseedtype='$randseedtype'
17537 ranlib='$ranlib'
17538 rd_nodata='$rd_nodata'
17539 revision='$revision'
17540 rm='$rm'
17541 rmail='$rmail'
17542 run='$run'
17543 runnm='$runnm'
17544 sPRIEUldbl='$sPRIEUldbl'
17545 sPRIFUldbl='$sPRIFUldbl'
17546 sPRIGUldbl='$sPRIGUldbl'
17547 sPRIXU64='$sPRIXU64'
17548 sPRId64='$sPRId64'
17549 sPRIeldbl='$sPRIeldbl'
17550 sPRIfldbl='$sPRIfldbl'
17551 sPRIgldbl='$sPRIgldbl'
17552 sPRIi64='$sPRIi64'
17553 sPRIo64='$sPRIo64'
17554 sPRIu64='$sPRIu64'
17555 sPRIx64='$sPRIx64'
17556 sSCNfldbl='$sSCNfldbl'
17557 sched_yield='$sched_yield'
17558 scriptdir='$scriptdir'
17559 scriptdirexp='$scriptdirexp'
17560 sed='$sed'
17561 seedfunc='$seedfunc'
17562 selectminbits='$selectminbits'
17563 selecttype='$selecttype'
17564 sendmail='$sendmail'
17565 sh='$sh'
17566 shar='$shar'
17567 sharpbang='$sharpbang'
17568 shmattype='$shmattype'
17569 shortsize='$shortsize'
17570 shrpenv='$shrpenv'
17571 shsharp='$shsharp'
17572 sig_count='$sig_count'
17573 sig_name='$sig_name'
17574 sig_name_init='$sig_name_init'
17575 sig_num='$sig_num'
17576 sig_num_init='$sig_num_init'
17577 sig_size='$sig_size'
17578 signal_t='$signal_t'
17579 sitearch='$sitearch'
17580 sitearchexp='$sitearchexp'
17581 sitebin='$sitebin'
17582 sitebinexp='$sitebinexp'
17583 sitelib='$sitelib'
17584 sitelib_stem='$sitelib_stem'
17585 sitelibexp='$sitelibexp'
17586 siteprefix='$siteprefix'
17587 siteprefixexp='$siteprefixexp'
17588 sizesize='$sizesize'
17589 sizetype='$sizetype'
17590 sleep='$sleep'
17591 smail='$smail'
17592 so='$so'
17593 sockethdr='$sockethdr'
17594 socketlib='$socketlib'
17595 socksizetype='$socksizetype'
17596 sort='$sort'
17597 spackage='$spackage'
17598 spitshell='$spitshell'
17599 src='$src'
17600 ssizetype='$ssizetype'
17601 startperl='$startperl'
17602 startsh='$startsh'
17603 static_ext='$static_ext'
17604 stdchar='$stdchar'
17605 stdio_base='$stdio_base'
17606 stdio_bufsiz='$stdio_bufsiz'
17607 stdio_cnt='$stdio_cnt'
17608 stdio_filbuf='$stdio_filbuf'
17609 stdio_ptr='$stdio_ptr'
17610 stdio_stream_array='$stdio_stream_array'
17611 strings='$strings'
17612 submit='$submit'
17613 subversion='$subversion'
17614 sysman='$sysman'
17615 tail='$tail'
17616 tar='$tar'
17617 targetarch='$targetarch'
17618 tbl='$tbl'
17619 tee='$tee'
17620 test='$test'
17621 timeincl='$timeincl'
17622 timetype='$timetype'
17623 to='$to'
17624 touch='$touch'
17625 tr='$tr'
17626 trnl='$trnl'
17627 troff='$troff'
17628 u16size='$u16size'
17629 u16type='$u16type'
17630 u32size='$u32size'
17631 u32type='$u32type'
17632 u64size='$u64size'
17633 u64type='$u64type'
17634 u8size='$u8size'
17635 u8type='$u8type'
17636 uidformat='$uidformat'
17637 uidsign='$uidsign'
17638 uidsize='$uidsize'
17639 uidtype='$uidtype'
17640 uname='$uname'
17641 uniq='$uniq'
17642 uquadtype='$uquadtype'
17643 use5005threads='$use5005threads'
17644 use64bitall='$use64bitall'
17645 use64bitint='$use64bitint'
17646 usecrosscompile='$usecrosscompile'
17647 usedl='$usedl'
17648 useithreads='$useithreads'
17649 uselargefiles='$uselargefiles'
17650 uselongdouble='$uselongdouble'
17651 usemorebits='$usemorebits'
17652 usemultiplicity='$usemultiplicity'
17653 usemymalloc='$usemymalloc'
17654 usenm='$usenm'
17655 useopcode='$useopcode'
17656 useperlio='$useperlio'
17657 useposix='$useposix'
17658 usereentrant='$usereentrant'
17659 usesfio='$usesfio'
17660 useshrplib='$useshrplib'
17661 usesocks='$usesocks'
17662 usethreads='$usethreads'
17663 usevendorprefix='$usevendorprefix'
17664 usevfork='$usevfork'
17665 usrinc='$usrinc'
17666 uuname='$uuname'
17667 uvXUformat='$uvXUformat'
17668 uvoformat='$uvoformat'
17669 uvsize='$uvsize'
17670 uvtype='$uvtype'
17671 uvuformat='$uvuformat'
17672 uvxformat='$uvxformat'
17673 vendorarch='$vendorarch'
17674 vendorarchexp='$vendorarchexp'
17675 vendorbin='$vendorbin'
17676 vendorbinexp='$vendorbinexp'
17677 vendorlib='$vendorlib'
17678 vendorlib_stem='$vendorlib_stem'
17679 vendorlibexp='$vendorlibexp'
17680 vendorprefix='$vendorprefix'
17681 vendorprefixexp='$vendorprefixexp'
17682 version='$version'
17683 version_patchlevel_string='$version_patchlevel_string'
17684 versiononly='$versiononly'
17685 vi='$vi'
17686 voidflags='$voidflags'
17687 xlibpth='$xlibpth'
17688 xs_apiversion='$xs_apiversion'
17689 yacc='$yacc'
17690 yaccflags='$yaccflags'
17691 zcat='$zcat'
17692 zip='$zip'
17693 EOT
17694
17695 : Add in command line options if available
17696 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17697
17698 : add special variables
17699 $test -f $src/patchlevel.h && \
17700 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17701 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17702 echo "PERL_CONFIG_SH=true" >>config.sh
17703
17704 : propagate old symbols
17705 if $test -f UU/config.sh; then
17706         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17707         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17708         $sort | $uniq -u >UU/oldsyms
17709         set X `cat UU/oldsyms`
17710         shift
17711         case $# in
17712         0) ;;
17713         *)
17714                 cat <<EOM
17715 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17716 EOM
17717                 echo "# Variables propagated from previous config.sh file." >>config.sh
17718                 for sym in `cat UU/oldsyms`; do
17719                         echo "    Propagating $hint variable "'$'"$sym..."
17720                         eval 'tmp="$'"${sym}"'"'
17721                         echo "$tmp" | \
17722                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17723                 done
17724                 ;;
17725         esac
17726 fi
17727
17728 : Finish up by extracting the .SH files
17729 case "$alldone" in
17730 exit)
17731         $rm -rf UU
17732         echo "Extraction done."
17733         exit 0
17734         ;;
17735 cont)
17736         ;;
17737 '')
17738         dflt=''
17739         nostick=true
17740         $cat <<EOM
17741
17742 If you'd like to make any changes to the config.sh file before I begin
17743 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17744
17745 EOM
17746         rp="Press return or use a shell escape to edit config.sh:"
17747         . UU/myread
17748         nostick=''
17749         case "$ans" in
17750         '') ;;
17751         *) : in case they cannot read
17752                 sh 1>&4 -c "$ans";;
17753         esac
17754         ;;
17755 esac
17756
17757 : if this fails, just run all the .SH files by hand
17758 . ./config.sh
17759
17760 echo " "
17761 exec 1>&4
17762 pwd=`pwd`
17763 . ./UU/extract
17764 cd $pwd
17765
17766 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17767         dflt=y
17768         case "$silent" in
17769         true) ;;
17770         *)
17771                 $cat <<EOM
17772
17773 Now you need to generate make dependencies by running "$make depend".
17774 You might prefer to run it in background: "$make depend > makedepend.out &"
17775 It can take a while, so you might not want to run it right now.
17776
17777 EOM
17778                 ;;
17779         esac
17780         rp="Run $make depend now?"
17781         . UU/myread
17782         case "$ans" in
17783         y*)
17784                 $make depend && echo "Now you must run '$make'."
17785                 ;;
17786         *)
17787                 echo "You must run '$make depend' then '$make'."
17788                 ;;
17789         esac
17790 elif test -f [Mm]akefile; then
17791         echo " "
17792         echo "Now you must run a $make."
17793 else
17794         echo "Configure done."
17795 fi
17796
17797 if $test -f Policy.sh; then
17798     $cat <<EOM
17799
17800 If you compile $package on a different machine or from a different object
17801 directory, copy the Policy.sh file from this object directory to the
17802 new one before you run Configure -- this will help you with most of
17803 the policy defaults.
17804
17805 EOM
17806 fi
17807 if $test -f config.msg; then
17808     echo "Hmm.  I also noted the following information while running:"
17809     echo " "
17810     $cat config.msg >&4
17811     $rm -f config.msg
17812 fi
17813 $rm -f kit*isdone ark*isdone
17814 $rm -rf UU
17815
17816 : End of Configure
17817