Update Changes.
[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 Tue Nov 21 20:33:35 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >/tmp/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 >/tmp/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 /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/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                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 perllibs=''
169 dynamic_ext=''
170 extensions=''
171 known_extensions=''
172 nonxs_ext=''
173 static_ext=''
174 useopcode=''
175 useposix=''
176 d_bsd=''
177 d_eunice=''
178 d_xenix=''
179 eunicefix=''
180 Mcc=''
181 ar=''
182 awk=''
183 bash=''
184 bison=''
185 byacc=''
186 cat=''
187 chgrp=''
188 chmod=''
189 chown=''
190 comm=''
191 compress=''
192 cp=''
193 cpio=''
194 cpp=''
195 csh=''
196 date=''
197 echo=''
198 egrep=''
199 emacs=''
200 expr=''
201 find=''
202 flex=''
203 grep=''
204 gzip=''
205 inews=''
206 ksh=''
207 less=''
208 line=''
209 lint=''
210 ln=''
211 lp=''
212 lpr=''
213 ls=''
214 mail=''
215 mailx=''
216 make=''
217 mkdir=''
218 more=''
219 mv=''
220 nm=''
221 nroff=''
222 perl=''
223 pg=''
224 pmake=''
225 pr=''
226 rm=''
227 rmail=''
228 sed=''
229 sendmail=''
230 shar=''
231 sleep=''
232 smail=''
233 sort=''
234 submit=''
235 tail=''
236 tar=''
237 tbl=''
238 tee=''
239 test=''
240 touch=''
241 tr=''
242 troff=''
243 uname=''
244 uniq=''
245 uuname=''
246 vi=''
247 zcat=''
248 zip=''
249 full_ar=''
250 full_sed=''
251 libswanted=''
252 hint=''
253 myuname=''
254 osname=''
255 osvers=''
256 Author=''
257 Date=''
258 Header=''
259 Id=''
260 Locker=''
261 Log=''
262 RCSfile=''
263 Revision=''
264 Source=''
265 State=''
266 _a=''
267 _exe=''
268 _o=''
269 archobjs=''
270 exe_ext=''
271 firstmakefile=''
272 lib_ext=''
273 obj_ext=''
274 path_sep=''
275 afs=''
276 alignbytes=''
277 ansi2knr=''
278 archlib=''
279 archlibexp=''
280 d_archlib=''
281 installarchlib=''
282 archname=''
283 myarchname=''
284 d_atolf=''
285 d_atoll=''
286 baserev=''
287 bin=''
288 binexp=''
289 installbin=''
290 bincompat5005=''
291 d_bincompat5005=''
292 byteorder=''
293 cc=''
294 ccflags=''
295 cppflags=''
296 ldflags=''
297 lkflags=''
298 locincpth=''
299 optimize=''
300 cf_email=''
301 cf_by=''
302 cf_time=''
303 charsize=''
304 contains=''
305 cpp_stuff=''
306 cpplast=''
307 cppminus=''
308 cpprun=''
309 cppstdin=''
310 crosscompile=''
311 d__fwalk=''
312 d_access=''
313 d_accessx=''
314 d_alarm=''
315 d_attribut=''
316 d_bcmp=''
317 d_bcopy=''
318 d_bzero=''
319 d_casti32=''
320 castflags=''
321 d_castneg=''
322 d_chown=''
323 d_chroot=''
324 d_chsize=''
325 d_closedir=''
326 d_void_closedir=''
327 d_const=''
328 cryptlib=''
329 d_crypt=''
330 d_csh=''
331 full_csh=''
332 d_cuserid=''
333 d_dbl_dig=''
334 d_difftime=''
335 d_dlerror=''
336 d_dlopen=''
337 d_dlsymun=''
338 d_dosuid=''
339 d_suidsafe=''
340 d_drand48proto=''
341 d_dup2=''
342 d_eaccess=''
343 d_endgrent=''
344 d_endhent=''
345 d_endnent=''
346 d_endpent=''
347 d_endpwent=''
348 d_endsent=''
349 d_fchmod=''
350 d_fchown=''
351 d_fcntl=''
352 d_fcntl_can_lock=''
353 d_fd_macros=''
354 d_fd_set=''
355 d_fds_bits=''
356 d_fgetpos=''
357 d_flexfnam=''
358 d_flock=''
359 d_fork=''
360 d_fpos64_t=''
361 d_frexpl=''
362 d_fs_data_s=''
363 d_fseeko=''
364 d_fsetpos=''
365 d_fstatfs=''
366 d_fsync=''
367 d_ftello=''
368 d_ftime=''
369 d_gettimeod=''
370 d_Gconvert=''
371 d_getcwd=''
372 d_getespwnam=''
373 d_getfsstat=''
374 d_getgrent=''
375 d_getgrps=''
376 d_gethbyaddr=''
377 d_gethbyname=''
378 d_gethent=''
379 aphostname=''
380 d_gethname=''
381 d_phostname=''
382 d_uname=''
383 d_gethostprotos=''
384 d_getlogin=''
385 d_getmnt=''
386 d_getmntent=''
387 d_getnbyaddr=''
388 d_getnbyname=''
389 d_getnent=''
390 d_getnetprotos=''
391 d_getpagsz=''
392 d_getpent=''
393 d_getpgid=''
394 d_getpgrp2=''
395 d_bsdgetpgrp=''
396 d_getpgrp=''
397 d_getppid=''
398 d_getprior=''
399 d_getpbyname=''
400 d_getpbynumber=''
401 d_getprotoprotos=''
402 d_getprpwnam=''
403 d_getpwent=''
404 d_getsent=''
405 d_getservprotos=''
406 d_getspnam=''
407 d_getsbyname=''
408 d_getsbyport=''
409 d_gnulibc=''
410 d_hasmntopt=''
411 d_htonl=''
412 d_iconv=''
413 d_inetaton=''
414 d_int64_t=''
415 d_isascii=''
416 d_isnan=''
417 d_isnanl=''
418 d_killpg=''
419 d_lchown=''
420 d_ldbl_dig=''
421 d_link=''
422 d_locconv=''
423 d_lockf=''
424 d_longdbl=''
425 longdblsize=''
426 d_longlong=''
427 longlongsize=''
428 d_lseekproto=''
429 d_lstat=''
430 d_madvise=''
431 d_mblen=''
432 d_mbstowcs=''
433 d_mbtowc=''
434 d_memchr=''
435 d_memcmp=''
436 d_memcpy=''
437 d_memmove=''
438 d_memset=''
439 d_mkdir=''
440 d_mkdtemp=''
441 d_mkfifo=''
442 d_mkstemp=''
443 d_mkstemps=''
444 d_mktime=''
445 d_mmap=''
446 mmaptype=''
447 d_modfl=''
448 d_mprotect=''
449 d_msg=''
450 d_msgctl=''
451 d_msgget=''
452 d_msgrcv=''
453 d_msgsnd=''
454 d_msync=''
455 d_munmap=''
456 d_nice=''
457 d_off64_t=''
458 d_open3=''
459 d_fpathconf=''
460 d_pathconf=''
461 d_pause=''
462 d_pipe=''
463 d_poll=''
464 d_portable=''
465 d_old_pthread_create_joinable=''
466 old_pthread_create_joinable=''
467 d_pthread_yield=''
468 d_sched_yield=''
469 sched_yield=''
470 d_qgcvt=''
471 d_readdir=''
472 d_rewinddir=''
473 d_seekdir=''
474 d_telldir=''
475 d_readlink=''
476 d_rename=''
477 d_rmdir=''
478 d_safebcpy=''
479 d_safemcpy=''
480 d_sanemcmp=''
481 d_sbrkproto=''
482 d_select=''
483 d_sem=''
484 d_semctl=''
485 d_semget=''
486 d_semop=''
487 d_setegid=''
488 d_seteuid=''
489 d_setgrent=''
490 d_setgrps=''
491 d_sethent=''
492 d_setlinebuf=''
493 d_setlocale=''
494 d_setnent=''
495 d_setpent=''
496 d_setpgid=''
497 d_setpgrp2=''
498 d_bsdsetpgrp=''
499 d_setpgrp=''
500 d_setprior=''
501 d_setproctitle=''
502 d_setpwent=''
503 d_setregid=''
504 d_setresgid=''
505 d_setresuid=''
506 d_setreuid=''
507 d_setrgid=''
508 d_setruid=''
509 d_setsent=''
510 d_setsid=''
511 d_setvbuf=''
512 d_sfio=''
513 usesfio=''
514 d_shm=''
515 d_shmat=''
516 d_shmatprototype=''
517 shmattype=''
518 d_shmctl=''
519 d_shmdt=''
520 d_shmget=''
521 d_sigaction=''
522 d_sigsetjmp=''
523 d_msg_ctrunc=''
524 d_msg_dontroute=''
525 d_msg_oob=''
526 d_msg_peek=''
527 d_msg_proxy=''
528 d_oldsock=''
529 d_scm_rights=''
530 d_socket=''
531 d_sockpair=''
532 sockethdr=''
533 socketlib=''
534 d_socklen_t=''
535 d_socks5_init=''
536 d_sqrtl=''
537 d_statblks=''
538 d_statfs_f_flags=''
539 d_statfs_s=''
540 d_fstatvfs=''
541 d_statvfs=''
542 d_stdio_cnt_lval=''
543 d_stdio_ptr_lval=''
544 d_stdio_ptr_lval_nochange_cnt=''
545 d_stdio_ptr_lval_sets_cnt=''
546 d_stdiobase=''
547 d_stdstdio=''
548 stdio_base=''
549 stdio_bufsiz=''
550 stdio_cnt=''
551 stdio_filbuf=''
552 stdio_ptr=''
553 d_index=''
554 d_strchr=''
555 d_strcoll=''
556 d_strctcpy=''
557 d_strerrm=''
558 d_strerror=''
559 d_sysernlst=''
560 d_syserrlst=''
561 d_strtod=''
562 d_strtol=''
563 d_strtold=''
564 d_strtoll=''
565 d_strtoul=''
566 d_strtoull=''
567 d_strtouq=''
568 d_strxfrm=''
569 d_symlink=''
570 d_syscall=''
571 d_sysconf=''
572 d_system=''
573 d_tcgetpgrp=''
574 d_tcsetpgrp=''
575 d_telldirproto=''
576 d_time=''
577 timetype=''
578 clocktype=''
579 d_times=''
580 d_truncate=''
581 d_tzname=''
582 d_umask=''
583 d_semctl_semid_ds=''
584 d_semctl_semun=''
585 d_union_semun=''
586 d_ustat=''
587 d_vfork=''
588 usevfork=''
589 d_voidsig=''
590 signal_t=''
591 d_volatile=''
592 d_charvspr=''
593 d_vprintf=''
594 d_wait4=''
595 d_waitpid=''
596 d_wcstombs=''
597 d_wctomb=''
598 dlext=''
599 cccdlflags=''
600 ccdlflags=''
601 dlsrc=''
602 ld=''
603 lddlflags=''
604 usedl=''
605 doublesize=''
606 ebcdic=''
607 fflushNULL=''
608 fflushall=''
609 fpossize=''
610 fpostype=''
611 gccosandvers=''
612 gccversion=''
613 gidformat=''
614 gidsign=''
615 gidsize=''
616 gidtype=''
617 groupstype=''
618 h_fcntl=''
619 h_sysfile=''
620 i_arpainet=''
621 db_hashtype=''
622 db_prefixtype=''
623 i_db=''
624 i_dbm=''
625 i_rpcsvcdbm=''
626 d_dirnamlen=''
627 direntrytype=''
628 i_dirent=''
629 i_dld=''
630 i_dlfcn=''
631 i_fcntl=''
632 i_float=''
633 i_gdbm=''
634 d_grpasswd=''
635 i_grp=''
636 i_iconv=''
637 i_ieeefp=''
638 i_inttypes=''
639 i_libutil=''
640 i_limits=''
641 i_locale=''
642 i_machcthr=''
643 i_malloc=''
644 i_math=''
645 i_memory=''
646 i_mntent=''
647 i_ndbm=''
648 i_netdb=''
649 i_neterrno=''
650 i_netinettcp=''
651 i_niin=''
652 i_sysin=''
653 i_poll=''
654 i_prot=''
655 i_pthread=''
656 d_pwage=''
657 d_pwchange=''
658 d_pwclass=''
659 d_pwcomment=''
660 d_pwexpire=''
661 d_pwgecos=''
662 d_pwpasswd=''
663 d_pwquota=''
664 i_pwd=''
665 i_sfio=''
666 i_shadow=''
667 i_socks=''
668 i_stddef=''
669 i_stdlib=''
670 i_string=''
671 strings=''
672 i_sunmath=''
673 i_sysaccess=''
674 i_sysdir=''
675 i_sysfile=''
676 d_voidtty=''
677 i_bsdioctl=''
678 i_sysfilio=''
679 i_sysioctl=''
680 i_syssockio=''
681 i_syslog=''
682 i_sysmman=''
683 i_sysmode=''
684 i_sysmount=''
685 i_sysndir=''
686 i_sysparam=''
687 i_sysresrc=''
688 i_syssecrt=''
689 i_sysselct=''
690 i_sysstat=''
691 i_sysstatfs=''
692 i_sysstatvfs=''
693 i_systimes=''
694 i_systypes=''
695 i_sysuio=''
696 i_sysun=''
697 i_sysutsname=''
698 i_sysvfs=''
699 i_syswait=''
700 i_sgtty=''
701 i_termio=''
702 i_termios=''
703 i_systime=''
704 i_systimek=''
705 i_time=''
706 timeincl=''
707 i_unistd=''
708 i_ustat=''
709 i_utime=''
710 i_values=''
711 i_stdarg=''
712 i_varargs=''
713 i_varhdr=''
714 i_vfork=''
715 inc_version_list=''
716 inc_version_list_init=''
717 installprefix=''
718 installprefixexp=''
719 installstyle=''
720 installusrbinperl=''
721 intsize=''
722 longsize=''
723 shortsize=''
724 libc=''
725 ldlibpthname=''
726 libperl=''
727 shrpenv=''
728 useshrplib=''
729 glibpth=''
730 libpth=''
731 loclibpth=''
732 plibpth=''
733 xlibpth=''
734 ignore_versioned_solibs=''
735 libs=''
736 libsdirs=''
737 libsfiles=''
738 libsfound=''
739 libspath=''
740 lns=''
741 d_PRIEUldbl=''
742 d_PRIFUldbl=''
743 d_PRIGUldbl=''
744 d_PRIeldbl=''
745 d_PRIfldbl=''
746 d_PRIgldbl=''
747 d_SCNfldbl=''
748 sPRIEUldbl=''
749 sPRIFUldbl=''
750 sPRIGUldbl=''
751 sPRIeldbl=''
752 sPRIfldbl=''
753 sPRIgldbl=''
754 sSCNfldbl=''
755 lseeksize=''
756 lseektype=''
757 make_set_make=''
758 d_mymalloc=''
759 freetype=''
760 mallocobj=''
761 mallocsrc=''
762 malloctype=''
763 usemymalloc=''
764 installman1dir=''
765 man1dir=''
766 man1direxp=''
767 man1ext=''
768 installman3dir=''
769 man3dir=''
770 man3direxp=''
771 man3ext=''
772 modetype=''
773 multiarch=''
774 mydomain=''
775 myhostname=''
776 phostname=''
777 c=''
778 n=''
779 d_eofnblk=''
780 eagain=''
781 o_nonblock=''
782 rd_nodata=''
783 need_va_copy=''
784 netdb_hlen_type=''
785 netdb_host_type=''
786 netdb_name_type=''
787 netdb_net_type=''
788 groupcat=''
789 hostcat=''
790 passcat=''
791 orderlib=''
792 ranlib=''
793 d_perl_otherlibdirs=''
794 otherlibdirs=''
795 package=''
796 spackage=''
797 pager=''
798 api_revision=''
799 api_subversion=''
800 api_version=''
801 api_versionstring=''
802 patchlevel=''
803 revision=''
804 subversion=''
805 version=''
806 perl5=''
807 perladmin=''
808 perlpath=''
809 d_nv_preserves_uv=''
810 d_nv_preserves_uv_bits=''
811 i16size=''
812 i16type=''
813 i32size=''
814 i32type=''
815 i64size=''
816 i64type=''
817 i8size=''
818 i8type=''
819 ivsize=''
820 ivtype=''
821 nvsize=''
822 nvtype=''
823 u16size=''
824 u16type=''
825 u32size=''
826 u32type=''
827 u64size=''
828 u64type=''
829 u8size=''
830 u8type=''
831 uvsize=''
832 uvtype=''
833 ivdformat=''
834 nvEUformat=''
835 nvFUformat=''
836 nvGUformat=''
837 nveformat=''
838 nvfformat=''
839 nvgformat=''
840 uvXUformat=''
841 uvoformat=''
842 uvuformat=''
843 uvxformat=''
844 pidtype=''
845 prefix=''
846 prefixexp=''
847 installprivlib=''
848 privlib=''
849 privlibexp=''
850 prototype=''
851 ptrsize=''
852 d_PRIXU64=''
853 d_PRId64=''
854 d_PRIi64=''
855 d_PRIo64=''
856 d_PRIu64=''
857 d_PRIx64=''
858 sPRIXU64=''
859 sPRId64=''
860 sPRIi64=''
861 sPRIo64=''
862 sPRIu64=''
863 sPRIx64=''
864 d_quad=''
865 quadkind=''
866 quadtype=''
867 uquadtype=''
868 drand01=''
869 randbits=''
870 randfunc=''
871 randseedtype=''
872 seedfunc=''
873 installscript=''
874 scriptdir=''
875 scriptdirexp=''
876 selectminbits=''
877 selecttype=''
878 sh=''
879 sig_count=''
880 sig_name=''
881 sig_name_init=''
882 sig_num=''
883 sig_num_init=''
884 installsitearch=''
885 sitearch=''
886 sitearchexp=''
887 installsitebin=''
888 sitebin=''
889 sitebinexp=''
890 installsitelib=''
891 sitelib=''
892 sitelib_stem=''
893 sitelibexp=''
894 siteprefix=''
895 siteprefixexp=''
896 sizesize=''
897 sizetype=''
898 so=''
899 socksizetype=''
900 sharpbang=''
901 shsharp=''
902 spitshell=''
903 src=''
904 ssizetype=''
905 startperl=''
906 startsh=''
907 stdchar=''
908 d_stdio_stream_array=''
909 stdio_stream_array=''
910 sysman=''
911 trnl=''
912 uidformat=''
913 uidsign=''
914 uidsize=''
915 uidtype=''
916 archname64=''
917 use64bitall=''
918 use64bitint=''
919 ccflags_uselargefiles=''
920 ldflags_uselargefiles=''
921 libswanted_uselargefiles=''
922 uselargefiles=''
923 uselongdouble=''
924 usemorebits=''
925 usemultiplicity=''
926 nm_opt=''
927 nm_so_opt=''
928 runnm=''
929 usenm=''
930 useperlio=''
931 usesocks=''
932 d_oldpthreads=''
933 use5005threads=''
934 useithreads=''
935 usethreads=''
936 incpath=''
937 mips_type=''
938 usrinc=''
939 d_vendorarch=''
940 installvendorarch=''
941 vendorarch=''
942 vendorarchexp=''
943 d_vendorbin=''
944 installvendorbin=''
945 vendorbin=''
946 vendorbinexp=''
947 d_vendorlib=''
948 installvendorlib=''
949 vendorlib=''
950 vendorlib_stem=''
951 vendorlibexp=''
952 usevendorprefix=''
953 vendorprefix=''
954 vendorprefixexp=''
955 versiononly=''
956 defvoidused=''
957 voidflags=''
958 pm_apiversion=''
959 xs_apiversion=''
960 CONFIG=''
961
962 define='define'
963 undef='undef'
964 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
965 rmlist=''
966
967 : We must find out about Eunice early
968 eunicefix=':'
969 if test -f /etc/unixtovms; then
970         eunicefix=/etc/unixtovms
971 fi
972 if test -f /etc/unixtovms.exe; then
973         eunicefix=/etc/unixtovms.exe
974 fi
975
976 i_whoami=''
977 ccname=''
978 ccversion=''
979 perllibs=''
980 : set useposix=false in your hint file to disable the POSIX extension.
981 useposix=true
982 : set useopcode=false in your hint file to disable the Opcode extension.
983 useopcode=true
984 : Trailing extension.  Override this in a hint file, if needed.
985 _exe=''
986 : Extra object files, if any, needed on this platform.
987 archobjs=''
988 archname=''
989 : Possible local include directories to search.
990 : Set locincpth to "" in a hint file to defeat local include searches.
991 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
992 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
993 :
994 : no include file wanted by default
995 inclwanted=''
996
997 groupstype=''
998 : change the next line if compiling for Xenix/286 on Xenix/386
999 xlibpth='/usr/lib/386 /lib/386'
1000 : Possible local library directories to search.
1001 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1002 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1003
1004 : general looking path for locating libraries
1005 glibpth="/lib /usr/lib $xlibpth"
1006 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1007 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1008 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1009
1010 : Private path used by Configure to find libraries.  Its value
1011 : is prepended to libpth. This variable takes care of special
1012 : machines, like the mips.  Usually, it should be empty.
1013 plibpth=''
1014
1015 : default library list
1016 libswanted=''
1017 : some systems want to use only the non-versioned libso:s
1018 ignore_versioned_solibs=''
1019 archname64=''
1020 ccflags_uselargefiles=''
1021 ldflags_uselargefiles=''
1022 libswanted_uselargefiles=''
1023 : set usemultiplicity on the Configure command line to enable multiplicity.
1024 : set usesocks on the Configure command line to enable socks.
1025 : set usethreads on the Configure command line to enable threads.
1026 : full support for void wanted by default
1027 defvoidused=15
1028
1029 : List of libraries we want.
1030 : If anyone needs -lnet, put it in a hint file.
1031 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1032 libswanted="$libswanted dld ld sun m c cposix posix"
1033 libswanted="$libswanted ndir dir crypt sec"
1034 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1035 : We probably want to search /usr/shlib before most other libraries.
1036 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1037 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1038 glibpth="/usr/shlib $glibpth"
1039 : Do not use vfork unless overridden by a hint file.
1040 usevfork=false
1041
1042 : Find the basic shell for Bourne shell scripts
1043 case "$sh" in
1044 '')
1045         case "$SYSTYPE" in
1046         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1047         *) xxx='/bin/sh';;
1048         esac
1049         if test -f "$xxx"; then
1050                 sh="$xxx"
1051         else
1052                 : Build up a list and do a single loop so we can 'break' out.
1053                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1054                 for xxx in sh bash ksh pdksh ash; do
1055                         for p in $pth; do
1056                                 try="$try ${p}/${xxx}"
1057                         done
1058                 done
1059                 for xxx in $try; do
1060                         if test -f "$xxx"; then
1061                                 sh="$xxx";
1062                                 break
1063                         elif test -f "$xxx.exe"; then
1064                                 sh="$xxx";
1065                                 break
1066                         fi
1067                 done
1068         fi
1069         ;;
1070 esac
1071
1072 case "$sh" in
1073 '')     cat <<EOM >&2
1074 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1075
1076 Usually it's in /bin/sh.  How did you even get this far?
1077 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1078 we'll try to straighten this all out.
1079 EOM
1080         exit 1
1081         ;;
1082 esac
1083
1084 : see if sh knows # comments
1085 if `$sh -c '#' >/dev/null 2>&1`; then
1086         shsharp=true
1087         spitshell=cat
1088         xcat=/bin/cat
1089         test -f $xcat || xcat=/usr/bin/cat
1090         echo "#!$xcat" >try
1091         $eunicefix try
1092         chmod +x try
1093         ./try > today
1094         if test -s today; then
1095                 sharpbang='#!'
1096         else
1097                 echo "#! $xcat" > try
1098                 $eunicefix try
1099                 chmod +x try
1100                 ./try > today
1101                 if test -s today; then
1102                         sharpbang='#! '
1103                 else
1104                         sharpbang=': use '
1105                 fi
1106         fi
1107 else
1108         echo " "
1109         echo "Your $sh doesn't grok # comments--I will strip them later on."
1110         shsharp=false
1111         cd ..
1112         echo "exec grep -v '^[  ]*#'" >spitshell
1113         chmod +x spitshell
1114         $eunicefix spitshell
1115         spitshell=`pwd`/spitshell
1116         cd UU
1117         echo "I presume that if # doesn't work, #! won't work either!"
1118         sharpbang=': use '
1119 fi
1120 rm -f try today
1121
1122 : figure out how to guarantee sh startup
1123 case "$startsh" in
1124 '') startsh=${sharpbang}${sh} ;;
1125 *)
1126 esac
1127 cat >try <<EOSS
1128 $startsh
1129 set abc
1130 test "$?abc" != 1
1131 EOSS
1132
1133 chmod +x try
1134 $eunicefix try
1135 if ./try; then
1136         : echo "Yup, it does."
1137 else
1138         echo "Hmm... '$startsh' does not guarantee sh startup..."
1139         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1140 fi
1141 rm -f try
1142
1143
1144 : Save command line options in file UU/cmdline.opt for later use in
1145 : generating config.sh.
1146 cat > cmdline.opt <<EOSH
1147 # Configure command line arguments.
1148 config_arg0='$0'
1149 config_args='$*'
1150 config_argc=$#
1151 EOSH
1152 argn=1
1153 for arg in "$@"; do
1154         cat >>cmdline.opt <<EOSH
1155 config_arg$argn='$arg'
1156 EOSH
1157         argn=`expr $argn + 1`
1158 done
1159
1160 : produce awk script to parse command line options
1161 cat >options.awk <<'EOF'
1162 BEGIN {
1163         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1164
1165         len = length(optstr);
1166         for (i = 1; i <= len; i++) {
1167                 c = substr(optstr, i, 1);
1168                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1169                 if (a == ":") {
1170                         arg[c] = 1;
1171                         i++;
1172                 }
1173                 opt[c] = 1;
1174         }
1175 }
1176 {
1177         expect = 0;
1178         str = $0;
1179         if (substr(str, 1, 1) != "-") {
1180                 printf("'%s'\n", str);
1181                 next;
1182         }
1183         len = length($0);
1184         for (i = 2; i <= len; i++) {
1185                 c = substr(str, i, 1);
1186                 if (!opt[c]) {
1187                         printf("-%s\n", substr(str, i));
1188                         next;
1189                 }
1190                 printf("-%s\n", c);
1191                 if (arg[c]) {
1192                         if (i < len)
1193                                 printf("'%s'\n", substr(str, i + 1));
1194                         else
1195                                 expect = 1;
1196                         next;
1197                 }
1198         }
1199 }
1200 END {
1201         if (expect)
1202                 print "?";
1203 }
1204 EOF
1205
1206 : process the command line options
1207 set X `for arg in "$@"; do echo "X$arg"; done |
1208         sed -e s/X// | awk -f options.awk`
1209 eval "set $*"
1210 shift
1211 rm -f options.awk
1212
1213 : set up default values
1214 fastread=''
1215 reuseval=false
1216 config_sh=''
1217 alldone=''
1218 error=''
1219 silent=''
1220 extractsh=''
1221 override=''
1222 knowitall=''
1223 rm -f optdef.sh posthint.sh
1224 cat >optdef.sh <<EOS
1225 $startsh
1226 EOS
1227
1228
1229 : option parsing
1230 while test $# -gt 0; do
1231         case "$1" in
1232         -d) shift; fastread=yes;;
1233         -e) shift; alldone=cont;;
1234         -f)
1235                 shift
1236                 cd ..
1237                 if test -r "$1"; then
1238                         config_sh="$1"
1239                 else
1240                         echo "$me: cannot read config file $1." >&2
1241                         error=true
1242                 fi
1243                 cd UU
1244                 shift;;
1245         -h) shift; error=true;;
1246         -r) shift; reuseval=true;;
1247         -s) shift; silent=true; realsilent=true;;
1248         -E) shift; alldone=exit;;
1249         -K) shift; knowitall=true;;
1250         -O) shift; override=true;;
1251         -S) shift; silent=true; extractsh=true;;
1252         -D)
1253                 shift
1254                 case "$1" in
1255                 *=)
1256                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1257                         echo "$me: ignoring -D $1" >&2
1258                         ;;
1259                 *=*) echo "$1" | \
1260                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1261                 *) echo "$1='define'" >> optdef.sh;;
1262                 esac
1263                 shift
1264                 ;;
1265         -U)
1266                 shift
1267                 case "$1" in
1268                 *=) echo "$1" >> optdef.sh;;
1269                 *=*)
1270                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1271                         echo "$me: ignoring -U $1" >&2
1272                         ;;
1273                 *) echo "$1='undef'" >> optdef.sh;;
1274                 esac
1275                 shift
1276                 ;;
1277         -A)
1278             shift
1279             xxx=''
1280             yyy="$1"
1281             zzz=''
1282             uuu=undef
1283             case "$yyy" in
1284             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1285                  case "$zzz" in
1286                  *:*) zzz='' ;;
1287                  *)   xxx=append
1288                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1289                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1290                  esac
1291                  ;;
1292             esac
1293             case "$xxx" in
1294             '')  case "$yyy" in
1295                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1296                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1297                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1298                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1299                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1300                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1301                  esac
1302                  ;;       
1303             esac
1304             case "$xxx" in
1305             append)
1306                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1307             clear)
1308                 echo "$yyy=''"                  >> posthint.sh ;;
1309             define)
1310                 case "$zzz" in
1311                 '') zzz=define ;;
1312                 esac
1313                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1314             eval)
1315                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1316             prepend)
1317                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1318             undef)
1319                 case "$zzz" in
1320                 '') zzz="$uuu" ;;
1321                 esac
1322                 echo "$yyy=$zzz"                >> posthint.sh ;;
1323             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1324             esac
1325             shift
1326             ;;
1327         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1328             exit 0;;
1329         --) break;;
1330         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1331         *) break;;
1332         esac
1333 done
1334
1335 case "$error" in
1336 true)
1337         cat >&2 <<EOM
1338 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1339                  [-U symbol] [-U symbol=] [-A command:symbol...]
1340   -d : use defaults for all answers.
1341   -e : go on without questioning past the production of config.sh.
1342   -f : specify an alternate default configuration file.
1343   -h : print this help message and exit (with an error status).
1344   -r : reuse C symbols value if possible (skips costly nm extraction).
1345   -s : silent mode, only echoes questions and essential information.
1346   -D : define symbol to have some value:
1347          -D symbol         symbol gets the value 'define'
1348          -D symbol=value   symbol gets the value 'value'
1349   -E : stop at the end of questions, after having produced config.sh.
1350   -K : do not use unless you know what you are doing.
1351   -O : let -D and -U override definitions from loaded configuration file.
1352   -S : perform variable substitutions on all .SH files (can mix with -f)
1353   -U : undefine symbol:
1354          -U symbol    symbol gets the value 'undef'
1355          -U symbol=   symbol gets completely empty
1356   -A : manipulate symbol after the platform specific hints have been applied:
1357          -A symbol=value                append " "value to symbol
1358          -A append:symbol=value         append value to symbol
1359          -A define:symbol=value         define symbol to have value
1360          -A clear:symbol                define symbol to be ''
1361          -A define:symbol               define symbol to be 'define'
1362          -A eval:symbol=value           define symbol to be eval of value
1363          -A prepend:symbol=value        prepend value to symbol
1364          -A undef:symbol                define symbol to be 'undef'
1365          -A undef:symbol=               define symbol to be ''
1366   -V : print version number and exit (with a zero status).
1367 EOM
1368         exit 1
1369         ;;
1370 esac
1371
1372 : Sanity checks
1373 case "$fastread$alldone" in
1374 yescont|yesexit) ;;
1375 *)
1376         case "$extractsh" in
1377         true) ;;
1378         *)
1379                 if test ! -t 0; then
1380                         echo "Say 'sh Configure', not 'sh <Configure'"
1381                         exit 1
1382                 fi
1383                 ;;
1384         esac
1385         ;;
1386 esac
1387
1388 exec 4>&1
1389 case "$silent" in
1390 true) exec 1>/dev/null;;
1391 esac
1392
1393 : run the defines and the undefines, if any, but leave the file out there...
1394 touch optdef.sh
1395 . ./optdef.sh
1396 : create the posthint manipulation script and leave the file out there...
1397 touch posthint.sh
1398
1399 : set package name
1400 package=perl5
1401 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1402 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1403 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1404 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1405 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1406 esac
1407
1408 : Some greps do not return status, grrr.
1409 echo "grimblepritz" >grimble
1410 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1411         contains=contains
1412 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1413         contains=grep
1414 else
1415         contains=contains
1416 fi
1417 rm -f grimble
1418 : the following should work in any shell
1419 case "$contains" in
1420 contains*)
1421         echo " "
1422         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1423         cat >contains <<'EOSS'
1424 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1425 EOSS
1426 chmod +x contains
1427 esac
1428
1429 : Find the path to the source tree
1430 case "$src" in
1431 '') case "$0" in
1432     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1433          case "$src" in
1434          /*)    ;;
1435          *)     src=`cd ../$src && pwd` ;;
1436          esac
1437          ;;
1438     *)   src='.';;
1439     esac;;
1440 esac
1441 case "$src" in
1442 '')     src=/
1443         rsrc=/
1444         ;;
1445 /*) rsrc="$src";;
1446 *) rsrc="../$src";;
1447 esac
1448 if test -f $rsrc/Configure && \
1449         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1450 then
1451    : found it, so we are ok.
1452 else
1453         rsrc=''
1454         for src in . .. ../.. ../../.. ../../../..; do
1455                 if test -f ../$src/Configure && \
1456                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1457                 then
1458                         rsrc=../$src
1459                         break
1460                 fi
1461         done
1462 fi
1463 case "$rsrc" in
1464 '')
1465         cat <<EOM >&4
1466
1467 Sorry, I can't seem to locate the source dir for $package.  Please start
1468 Configure with an explicit path -- i.e. /some/path/Configure.
1469
1470 EOM
1471         exit 1
1472         ;;
1473 ../.)   rsrc='..';;
1474 *)
1475         echo " "
1476         echo "Sources for $package found in \"$src\"." >&4
1477         ;;
1478 esac
1479
1480 : script used to extract .SH files with variable substitutions
1481 cat >extract <<'EOS'
1482 CONFIGDOTSH=true
1483 echo "Doing variable substitutions on .SH files..."
1484 if test -f $src/MANIFEST; then
1485         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1486 else
1487         echo "(Looking for .SH files under the source directory.)"
1488         set x `(cd $src; find . -name "*.SH" -print)`
1489 fi
1490 shift
1491 case $# in
1492 0) set x `(cd $src; echo *.SH)`; shift;;
1493 esac
1494 if test ! -f $src/$1; then
1495         shift
1496 fi
1497 mkdir_p='
1498 name=$1;
1499 create="";
1500 while test $name; do
1501         if test ! -d "$name"; then
1502                 create="$name $create";
1503                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1504                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1505         else
1506                 name="";
1507         fi;
1508 done;
1509 for file in $create; do
1510         mkdir $file;
1511 done
1512 '
1513 for file in $*; do
1514         case "$src" in
1515         ".")
1516                 case "$file" in
1517                 */*)
1518                         dir=`expr X$file : 'X\(.*\)/'`
1519                         file=`expr X$file : 'X.*/\(.*\)'`
1520                         (cd $dir && . ./$file)
1521                         ;;
1522                 *)
1523                         . ./$file
1524                         ;;
1525                 esac
1526                 ;;
1527         *)
1528                 case "$file" in
1529                 */*)
1530                         dir=`expr X$file : 'X\(.*\)/'`
1531                         file=`expr X$file : 'X.*/\(.*\)'`
1532                         (set x $dir; shift; eval $mkdir_p)
1533                         sh <$src/$dir/$file
1534                         ;;
1535                 *)
1536                         sh <$src/$file
1537                         ;;
1538                 esac
1539                 ;;
1540         esac
1541 done
1542 if test -f $src/config_h.SH; then
1543         if test ! -f config.h; then
1544         : oops, they left it out of MANIFEST, probably, so do it anyway.
1545         . $src/config_h.SH
1546         fi
1547 fi
1548 EOS
1549
1550 : extract files and exit if asked to do so
1551 case "$extractsh" in
1552 true)
1553         case "$realsilent" in
1554         true) ;;
1555         *) exec 1>&4;;
1556         esac
1557         case "$config_sh" in
1558         '') config_sh='config.sh';;
1559         esac
1560         echo " "
1561         echo "Fetching answers from $config_sh..."
1562         cd ..
1563         . $config_sh
1564         test "$override" && . ./optdef.sh
1565         echo " "
1566         . UU/extract
1567         rm -rf UU
1568         echo "Done."
1569         exit 0
1570         ;;
1571 esac
1572
1573 : Eunice requires " " instead of "", can you believe it
1574 echo " "
1575 : Here we go...
1576 echo "Beginning of configuration questions for $package."
1577
1578 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1579
1580 : first determine how to suppress newline on echo command
1581 echo " "
1582 echo "Checking echo to see how to suppress newlines..."
1583 (echo "hi there\c" ; echo " ") >.echotmp
1584 if $contains c .echotmp >/dev/null 2>&1 ; then
1585         echo "...using -n."
1586         n='-n'
1587         c=''
1588 else
1589         cat <<'EOM'
1590 ...using \c
1591 EOM
1592         n=''
1593         c='\c'
1594 fi
1595 echo $n "The star should be here-->$c"
1596 echo '*'
1597 rm -f .echotmp
1598
1599 : Now test for existence of everything in MANIFEST
1600 echo " "
1601 if test -f $rsrc/MANIFEST; then
1602         echo "First let's make sure your kit is complete.  Checking..." >&4
1603         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1604         rm -f missing
1605         tmppwd=`pwd`
1606         for filelist in x??; do
1607                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1608         done
1609         if test -s missing; then
1610                 cat missing >&4
1611                 cat >&4 <<'EOM'
1612
1613 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1614
1615 You have the option of continuing the configuration process, despite the
1616 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1617 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1618 and contact the author (perlbug@perl.org).
1619
1620 EOM
1621                 echo $n "Continue? [n] $c" >&4
1622                 read ans
1623                 case "$ans" in
1624                 y*)
1625                         echo "Continuing..." >&4
1626                         rm -f missing
1627                         ;;
1628                 *)
1629                         echo "ABORTING..." >&4
1630                         kill $$
1631                         ;;
1632                 esac
1633         else
1634                 echo "Looks good..."
1635         fi
1636 else
1637         echo "There is no MANIFEST file.  I hope your kit is complete !"
1638 fi
1639 rm -f missing x??
1640
1641 echo " "
1642 : Find the appropriate value for a newline for tr
1643 if test -n "$DJGPP"; then
1644        trnl='\012'
1645 fi
1646 if test X"$trnl" = X; then
1647         case "`echo foo|tr '\n' x 2>/dev/null`" in
1648         foox) trnl='\n' ;;
1649         esac
1650 fi
1651 if test X"$trnl" = X; then
1652         case "`echo foo|tr '\012' x 2>/dev/null`" in
1653         foox) trnl='\012' ;;
1654         esac
1655 fi
1656 if test X"$trnl" = X; then
1657         cat <<EOM >&2
1658
1659 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1660
1661 EOM
1662         exit 1
1663 fi
1664
1665 : compute the number of columns on the terminal for proper question formatting
1666 case "$COLUMNS" in
1667 '') COLUMNS='80';;
1668 esac
1669
1670 : set up the echo used in my read
1671 myecho="case \"\$xxxm\" in
1672 '') echo $n \"\$rp $c\" >&4;;
1673 *) case \"\$rp\" in
1674         '') echo $n \"[\$xxxm] $c\";;
1675         *)
1676                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1677                         echo \"\$rp\" >&4
1678                         echo $n \"[\$xxxm] $c\" >&4
1679                 else
1680                         echo $n \"\$rp [\$xxxm] $c\" >&4
1681                 fi
1682                 ;;
1683         esac;;
1684 esac"
1685
1686 : now set up to do reads with possible shell escape and default assignment
1687 cat <<EOSC >myread
1688 $startsh
1689 xxxm=\$dflt
1690 $myecho
1691 ans='!'
1692 case "\$fastread" in
1693 yes) case "\$dflt" in
1694         '') ;;
1695         *) ans='';
1696                 case "\$silent-\$rp" in
1697                 true-) ;;
1698                 *) echo " " >&4;;
1699                 esac;;
1700         esac;;
1701 *) case "\$silent" in
1702         true) case "\$rp" in
1703                 '') ans='';;
1704                 esac;;
1705         esac;;
1706 esac
1707 while expr "X\$ans" : "X!" >/dev/null; do
1708         read answ
1709         set x \$xxxm
1710         shift
1711         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1712         case  "\$answ" in
1713         "!")
1714                 sh 1>&4
1715                 echo " "
1716                 $myecho
1717                 ;;
1718         !*)
1719                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1720                 shift
1721                 sh 1>&4 -c "\$*"
1722                 echo " "
1723                 $myecho
1724                 ;;
1725         "\$ans")
1726                 case "\$ans" in
1727                 \\&*)
1728                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1729                         shift
1730                         case "\$1" in
1731                         -d)
1732                                 fastread=yes
1733                                 echo "(OK, I'll run with -d after this question.)" >&4
1734                                 ;;
1735                         -*)
1736                                 echo "*** Sorry, \$1 not supported yet." >&4
1737                                 ;;
1738                         esac
1739                         $myecho
1740                         ans=!
1741                         ;;
1742                 esac;;
1743         *)
1744                 case "\$aok" in
1745                 y)
1746                         echo "*** Substitution done -- please confirm."
1747                         xxxm="\$ans"
1748                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1749                         xxxm="\$ans"
1750                         ans=!
1751                         ;;
1752                 *)
1753                         echo "*** Error -- try again."
1754                         ans=!
1755                         ;;
1756                 esac
1757                 $myecho
1758                 ;;
1759         esac
1760         case "\$ans\$xxxm\$nostick" in
1761         '')
1762                 ans=!
1763                 $myecho
1764                 ;;
1765         esac
1766 done
1767 case "\$ans" in
1768 '') ans="\$xxxm";;
1769 esac
1770 EOSC
1771
1772 : create .config dir to save info across Configure sessions
1773 test -d ../.config || mkdir ../.config
1774 cat >../.config/README <<EOF
1775 This directory created by Configure to save information that should
1776 persist across sessions for $package.
1777
1778 You may safely delete it if you wish.
1779 EOF
1780
1781 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1782 case "$usedevel" in
1783 $define|true|[yY]*) ;;
1784 *) case "$xversion" in
1785    *[13579])
1786         cat >&4 <<EOH
1787 *** WHOA THERE!!! ***
1788
1789     This is an UNSTABLE DEVELOPMENT release.
1790     The version of this $package distribution is $xversion, that is, odd,
1791     (as opposed to even) and that signifies a development release.
1792     If you want a maintenance release, you want an even-numbered version.
1793
1794     Do ***NOT*** install this into production use.
1795     Data corruption and crashes are possible.
1796
1797     It is most seriously suggested that you do not continue any further
1798     unless you want to help in developing and debugging Perl.
1799
1800 EOH
1801         rp='Do you really want to continue?'
1802         dflt='n'
1803         . ./myread
1804         case "$ans" in
1805         [yY]) echo >&4 "Okay, continuing." ;;
1806         *) echo >&4 "Okay, bye."
1807            exit 1
1808            ;;
1809         esac
1810         ;;
1811     esac
1812     ;;
1813 esac
1814
1815 : general instructions
1816 needman=true
1817 firsttime=true
1818 user=`(logname) 2>/dev/null`
1819 case "$user" in
1820 '') user=`whoami 2>&1`;;
1821 esac
1822 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1823         firsttime=false
1824         echo " "
1825         rp='Would you like to see the instructions?'
1826         dflt=n
1827         . ./myread
1828         case "$ans" in
1829         [yY]*) ;;
1830         *) needman=false;;
1831         esac
1832 fi
1833 if $needman; then
1834         cat <<EOH
1835
1836 This installation shell script will examine your system and ask you questions
1837 to determine how the perl5 package should be installed. If you get
1838 stuck on a question, you may use a ! shell escape to start a subshell or
1839 execute a command.  Many of the questions will have default answers in square
1840 brackets; typing carriage return will give you the default.
1841
1842 On some of the questions which ask for file or directory names you are allowed
1843 to use the ~name construct to specify the login directory belonging to "name",
1844 even if you don't have a shell which knows about that.  Questions where this is
1845 allowed will be marked "(~name ok)".
1846
1847 EOH
1848         rp=''
1849         dflt='Type carriage return to continue'
1850         . ./myread
1851         cat <<'EOH'
1852
1853 The prompter used in this script allows you to use shell variables and
1854 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1855 in the default answer, as if the default line was a set of arguments given to a
1856 script shell.  This means you may also use $* to repeat the whole default line,
1857 so you do not have to re-type everything to add something to the default.
1858
1859 Everytime there is a substitution, you will have to confirm.  If there is an
1860 error (e.g. an unmatched backtick), the default answer will remain unchanged
1861 and you will be prompted again.
1862
1863 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1864 the questions and use the computed defaults (or the previous answers if there
1865 was already a config.sh file). Type 'Configure -h' for a list of options.
1866 You may also start interactively and then answer '& -d' at any prompt to turn
1867 on the non-interactive behaviour for the remainder of the execution.
1868
1869 EOH
1870         . ./myread
1871         cat <<EOH
1872
1873 Much effort has been expended to ensure that this shell script will run on any
1874 Unix system.  If despite that it blows up on yours, your best bet is to edit
1875 Configure and run it again.  If you can't run Configure for some reason,
1876 you'll have to generate a config.sh file by hand.  Whatever problems you
1877 have, let me (perlbug@perl.org) know how I blew it.
1878
1879 This installation script affects things in two ways:
1880
1881 1) it may do direct variable substitutions on some of the files included
1882    in this kit.
1883 2) it builds a config.h file for inclusion in C programs.  You may edit
1884    any of these files as the need arises after running this script.
1885
1886 If you make a mistake on a question, there is no easy way to back up to it
1887 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1888 files.  Configure will offer to let you do this before it runs the SH files.
1889
1890 EOH
1891         dflt='Type carriage return to continue'
1892         . ./myread
1893         case "$firsttime" in
1894         true) echo $user >>../.config/instruct;;
1895         esac
1896 fi
1897
1898 : find out where common programs are
1899 echo " "
1900 echo "Locating common programs..." >&4
1901 cat <<EOSC >loc
1902 $startsh
1903 case \$# in
1904 0) exit 1;;
1905 esac
1906 thing=\$1
1907 shift
1908 dflt=\$1
1909 shift
1910 for dir in \$*; do
1911         case "\$thing" in
1912         .)
1913         if test -d \$dir/\$thing; then
1914                 echo \$dir
1915                 exit 0
1916         fi
1917         ;;
1918         *)
1919         for thisthing in \$dir/\$thing; do
1920                 : just loop through to pick last item
1921         done
1922         if test -f \$thisthing; then
1923                 echo \$thisthing
1924                 exit 0
1925         elif test -f \$dir/\$thing.exe; then
1926                 if test -n "$DJGPP"; then
1927                         echo \$dir/\$thing.exe
1928                 else
1929                         : on Eunice apparently
1930                         echo \$dir/\$thing
1931                 fi
1932                 exit 0
1933         fi
1934         ;;
1935         esac
1936 done
1937 echo \$dflt
1938 exit 1
1939 EOSC
1940 chmod +x loc
1941 $eunicefix loc
1942 loclist="
1943 awk
1944 cat
1945 comm
1946 cp
1947 echo
1948 expr
1949 grep
1950 ls
1951 make
1952 mkdir
1953 rm
1954 sed
1955 sort
1956 touch
1957 tr
1958 uniq
1959 "
1960 trylist="
1961 Mcc
1962 ar
1963 byacc
1964 cpp
1965 csh
1966 date
1967 egrep
1968 gzip
1969 less
1970 ln
1971 more
1972 nm
1973 nroff
1974 pg
1975 test
1976 uname
1977 zip
1978 "
1979 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1980 pth="$pth /lib /usr/lib"
1981 for file in $loclist; do
1982         eval xxx=\$$file
1983         case "$xxx" in
1984         /*|?:[\\/]*)
1985                 if test -f "$xxx"; then
1986                         : ok
1987                 else
1988                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1989                         xxx=`./loc $file $file $pth`
1990                 fi
1991                 ;;
1992         '') xxx=`./loc $file $file $pth`;;
1993         *) xxx=`./loc $xxx $xxx $pth`;;
1994         esac
1995         eval $file=$xxx
1996         eval _$file=$xxx
1997         case "$xxx" in
1998         /*)
1999                 echo $file is in $xxx.
2000                 ;;
2001         ?:[\\/]*)
2002                 echo $file is in $xxx.
2003                 ;;
2004         *)
2005                 echo "I don't know where '$file' is, and my life depends on it." >&4
2006                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2007                 exit 1
2008                 ;;
2009         esac
2010 done
2011 echo " "
2012 echo "Don't worry if any of the following aren't found..."
2013 say=offhand
2014 for file in $trylist; do
2015         eval xxx=\$$file
2016         case "$xxx" in
2017         /*|?:[\\/]*)
2018                 if test -f "$xxx"; then
2019                         : ok
2020                 else
2021                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2022                         xxx=`./loc $file $file $pth`
2023                 fi
2024                 ;;
2025         '') xxx=`./loc $file $file $pth`;;
2026         *) xxx=`./loc $xxx $xxx $pth`;;
2027         esac
2028         eval $file=$xxx
2029         eval _$file=$xxx
2030         case "$xxx" in
2031         /*)
2032                 echo $file is in $xxx.
2033                 ;;
2034         ?:[\\/]*)
2035                 echo $file is in $xxx.
2036                 ;;
2037         *)
2038                 echo "I don't see $file out there, $say."
2039                 say=either
2040                 ;;
2041         esac
2042 done
2043 case "$egrep" in
2044 egrep)
2045         echo "Substituting grep for egrep."
2046         egrep=$grep
2047         ;;
2048 esac
2049 case "$ln" in
2050 ln)
2051         echo "Substituting cp for ln."
2052         ln=$cp
2053         ;;
2054 esac
2055 case "$test" in
2056 test)
2057         echo "Hopefully test is built into your sh."
2058         ;;
2059 *)
2060         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2061                 echo "Using the test built into your sh."
2062                 test=test
2063                 _test=test
2064         fi
2065         ;;
2066 esac
2067 case "$echo" in
2068 echo)
2069         echo "Hopefully echo is built into your sh."
2070         ;;
2071 '') ;;
2072 *)
2073         echo " "
2074 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2075         $echo $n "hi there$c" >foo1
2076         echo $n "hi there$c" >foo2
2077         if cmp foo1 foo2 >/dev/null 2>&1; then
2078                 echo "They are compatible.  In fact, they may be identical."
2079         else
2080                 case "$n" in
2081                 '-n') n='' c='\c';;
2082                 *) n='-n' c='';;
2083                 esac
2084                 cat <<FOO
2085 They are not compatible!  You are probably running ksh on a non-USG system.
2086 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2087 have echo built in and we may have to run some Bourne shell scripts.  That
2088 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2089
2090 FOO
2091                 $echo $n "The star should be here-->$c"
2092                 $echo "*"
2093         fi
2094         $rm -f foo1 foo2
2095         ;;
2096 esac
2097
2098 cat <<EOS >checkcc
2099 $startsh
2100 EOS
2101 cat <<'EOSC' >>checkcc
2102 case "$cc" in
2103 '') ;;
2104 *)  $rm -f try try.*
2105     $cat >try.c <<EOM
2106 int main(int argc, char *argv[]) {
2107   return 0;
2108 }
2109 EOM
2110     if $cc -o try $ccflags try.c; then
2111        :
2112     else
2113         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2114         despair=yes
2115         trygcc=yes
2116         case "$cc" in
2117         *gcc*) trygcc=no ;;
2118         esac
2119         case "`$cc -v -c try.c 2>&1`" in
2120         *gcc*) trygcc=no ;;
2121         esac
2122         if $test X"$trygcc" = Xyes; then
2123             if gcc -o try -c try.c; then
2124                 echo " "
2125                 echo "You seem to have a working gcc, though." >&4
2126                 rp="Would you like to use it?"
2127                 dflt=y
2128                 if $test -f myread; then
2129                     . ./myread
2130                 else
2131                     if $test -f UU/myread; then
2132                         . ./UU/myread
2133                     else
2134                         echo "Cannot find myread, sorry.  Aborting." >&2
2135                         exit 1
2136                     fi
2137                 fi  
2138                 case "$ans" in
2139                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2140                 esac
2141             fi
2142         fi
2143         if $test X"$despair" = Xyes; then
2144             $cat >&4 <<EOM
2145 You need to find a working C compiler.
2146 Either (purchase and) install the C compiler supplied by your OS vendor,
2147 or for a free C compiler try http://gcc.gnu.org/
2148 I cannot continue any further, aborting.
2149 EOM
2150             exit 1
2151         fi
2152     fi
2153     $rm -f try try.*
2154     ;;
2155 esac
2156 EOSC
2157
2158 : determine whether symbolic links are supported
2159 echo " "
2160 $touch blurfl
2161 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2162         echo "Symbolic links are supported." >&4
2163         lns="$ln -s"
2164 else
2165         echo "Symbolic links are NOT supported." >&4
2166         lns="$ln"
2167 fi
2168 $rm -f blurfl sym
2169
2170 : see whether [:lower:] and [:upper:] are supported character classes
2171 echo " "
2172 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2173 ABYZ)
2174         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2175         up='[:upper:]'
2176         low='[:lower:]'
2177         ;;
2178 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2179         # (0xc9 and 0xd1), therefore that is a nice testing point.
2180         if test "X$up" = X -o "X$low" = X; then
2181             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2182             ij) up='[A-Z]'
2183                 low='[a-z]'
2184                 ;;
2185             esac
2186         fi
2187         if test "X$up" = X -o "X$low" = X; then
2188             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2189             ij) up='A-Z'
2190                 low='a-z'
2191                 ;;
2192             esac
2193         fi
2194         if test "X$up" = X -o "X$low" = X; then
2195             case "`echo IJ | od -x 2>/dev/null`" in
2196             *C9D1*|*c9d1*)
2197                 echo "Hey, this might be EBCDIC." >&4
2198                 if test "X$up" = X -o "X$low" = X; then
2199                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2200                     ij) up='[A-IJ-RS-Z]'
2201                         low='[a-ij-rs-z]'
2202                         ;;
2203                     esac
2204                 fi
2205                 if test "X$up" = X -o "X$low" = X; then
2206                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2207                     ij) up='A-IJ-RS-Z'
2208                         low='a-ij-rs-z'
2209                         ;;
2210                     esac
2211                 fi
2212                 ;;
2213             esac
2214         fi
2215 esac
2216 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2217 ij)
2218     echo "Using $up and $low to convert case." >&4
2219     ;;
2220 *)
2221     echo "I don't know how to translate letters from upper to lower case." >&4
2222     echo "Your tr is not acting any way I know of." >&4
2223     exit 1
2224     ;;
2225 esac
2226 : set up the translation script tr, must be called with ./tr of course
2227 cat >tr <<EOSC
2228 $startsh
2229 case "\$1\$2" in
2230 '[A-Z][a-z]') exec $tr '$up' '$low';;
2231 '[a-z][A-Z]') exec $tr '$low' '$up';;
2232 esac
2233 exec $tr "\$@"
2234 EOSC
2235 chmod +x tr
2236 $eunicefix tr
2237
2238 : Try to determine whether config.sh was made on this system
2239 case "$config_sh" in
2240 '')
2241 myuname=`$uname -a 2>/dev/null`
2242 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2243 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2244 # because the A-Z/a-z are not consecutive.
2245 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2246         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2247 newmyuname="$myuname"
2248 dflt=n
2249 case "$knowitall" in
2250 '')
2251         if test -f ../config.sh; then
2252                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2253                         eval "`grep myuname= ../config.sh`"
2254                 fi
2255                 if test "X$myuname" = "X$newmyuname"; then
2256                         dflt=y
2257                 fi
2258         fi
2259         ;;
2260 *) dflt=y;;
2261 esac
2262
2263 : Get old answers from old config file if Configure was run on the
2264 : same system, otherwise use the hints.
2265 hint=default
2266 cd ..
2267 if test -f config.sh; then
2268         echo " "
2269         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2270         . UU/myread
2271         case "$ans" in
2272         n*|N*) echo "OK, I'll ignore it."
2273                 mv config.sh config.sh.old
2274                 myuname="$newmyuname"
2275                 ;;
2276         *)  echo "Fetching default answers from your old config.sh file..." >&4
2277                 tmp_n="$n"
2278                 tmp_c="$c"
2279                 tmp_sh="$sh"
2280                 . ./config.sh
2281                 cp config.sh UU
2282                 n="$tmp_n"
2283                 c="$tmp_c"
2284                 : Older versions did not always set $sh.  Catch re-use of such
2285                 : an old config.sh.
2286                 case "$sh" in
2287                 '') sh="$tmp_sh" ;;
2288                 esac
2289                 hint=previous
2290                 ;;
2291         esac
2292 fi
2293 . ./UU/checkcc
2294 if test ! -f config.sh; then
2295         $cat <<EOM
2296
2297 First time through, eh?  I have some defaults handy for some systems
2298 that need some extra help getting the Configure answers right:
2299
2300 EOM
2301         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2302         dflt=''
2303         : Half the following guesses are probably wrong... If you have better
2304         : tests or hints, please send them to perlbug@perl.org
2305         : The metaconfig authors would also appreciate a copy...
2306         $test -f /irix && osname=irix
2307         $test -f /xenix && osname=sco_xenix
2308         $test -f /dynix && osname=dynix
2309         $test -f /dnix && osname=dnix
2310         $test -f /lynx.os && osname=lynxos
2311         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2312         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2313         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2314         $test -f /bin/mips && /bin/mips && osname=mips
2315         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2316                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2317         $test -d /usr/apollo/bin && osname=apollo
2318         $test -f /etc/saf/_sactab && osname=svr4
2319         $test -d /usr/include/minix && osname=minix
2320         if $test -d /MachTen -o -d /MachTen_Folder; then
2321                 osname=machten
2322                 if $test -x /sbin/version; then
2323                         osvers=`/sbin/version | $awk '{print $2}' |
2324                         $sed -e 's/[A-Za-z]$//'`
2325                 elif $test -x /usr/etc/version; then
2326                         osvers=`/usr/etc/version | $awk '{print $2}' |
2327                         $sed -e 's/[A-Za-z]$//'`
2328                 else
2329                         osvers="$2.$3"
2330                 fi
2331         fi
2332
2333         $test -f /sys/posix.dll &&
2334                 $test -f /usr/bin/what &&
2335                 set X `/usr/bin/what /sys/posix.dll` &&
2336                 $test "$3" = UWIN &&
2337                 osname=uwin &&
2338                 osvers="$5"
2339
2340         if $test -f $uname; then
2341                 set X $myuname
2342                 shift
2343
2344                 case "$5" in
2345                 fps*) osname=fps ;;
2346                 mips*)
2347                         case "$4" in
2348                         umips) osname=umips ;;
2349                         *) osname=mips ;;
2350                         esac;;
2351                 [23]100) osname=mips ;;
2352                 next*) osname=next ;;
2353                 i386*)
2354                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2355                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2356                                 osname='sco'
2357                                 osvers=$tmp
2358                         elif $test -f /etc/kconfig; then
2359                                 osname=isc
2360                                 if test "$lns" = "$ln -s"; then
2361                                         osvers=4
2362                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2363                                         osvers=3
2364                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2365                                         osvers=2
2366                                 fi
2367                         fi
2368                         tmp=''
2369                         ;;
2370                 pc*)
2371                         if test -n "$DJGPP"; then
2372                                 osname=dos
2373                                 osvers=djgpp
2374                         fi
2375                         ;;
2376                 esac
2377
2378                 case "$1" in
2379                 aix) osname=aix
2380                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2381                         case "$tmp" in
2382                         'not found') osvers="$4"."$3" ;;
2383                         '<3240'|'<>3240') osvers=3.2.0 ;;
2384                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2385                         '=3250'|'>3250') osvers=3.2.5 ;;
2386                         *) osvers=$tmp;;
2387                         esac
2388                         ;;
2389                 bsd386) osname=bsd386
2390                         osvers=`$uname -r`
2391                         ;;
2392                 cygwin*) osname=cygwin
2393                         osvers="$3"
2394                         ;;
2395                 *dc.osx) osname=dcosx
2396                         osvers="$3"
2397                         ;;
2398                 dnix) osname=dnix
2399                         osvers="$3"
2400                         ;;
2401                 domainos) osname=apollo
2402                         osvers="$3"
2403                         ;;
2404                 dgux) osname=dgux 
2405                         osvers="$3"
2406                         ;;
2407                 dynixptx*) osname=dynixptx
2408                         osvers=`echo "$4"|sed 's/^v//'`
2409                         ;;
2410                 freebsd) osname=freebsd 
2411                         osvers="$3" ;;
2412                 genix) osname=genix ;;
2413                 hp*) osname=hpux 
2414                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2415                         ;;
2416                 irix*) osname=irix
2417                         case "$3" in
2418                         4*) osvers=4 ;;
2419                         5*) osvers=5 ;;
2420                         *)      osvers="$3" ;;
2421                         esac
2422                         ;;
2423                 linux) osname=linux
2424                         case "$3" in
2425                         *)      osvers="$3" ;;
2426                         esac
2427                         ;;
2428                 MiNT) osname=mint
2429                         ;;
2430                 netbsd*) osname=netbsd
2431                         osvers="$3"
2432                         ;;
2433                 news-os) osvers="$3"
2434                         case "$3" in
2435                         4*) osname=newsos4 ;;
2436                         *) osname=newsos ;;
2437                         esac
2438                         ;;
2439                 next*) osname=next ;;
2440                 nonstop-ux) osname=nonstopux ;;
2441                 POSIX-BC | posix-bc ) osname=posix-bc
2442                         osvers="$3"
2443                         ;;
2444                 powerux | power_ux | powermax_os | powermaxos | \
2445                 powerunix | power_unix) osname=powerux
2446                         osvers="$3"
2447                         ;;
2448                 qnx) osname=qnx
2449                         osvers="$4"
2450                         ;;
2451                 solaris) osname=solaris
2452                         case "$3" in
2453                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2454                         *)      osvers="$3" ;;
2455                         esac
2456                         ;;
2457                 sunos) osname=sunos
2458                         case "$3" in
2459                         5*) osname=solaris
2460                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2461                         *)      osvers="$3" ;;
2462                         esac
2463                         ;;
2464                 titanos) osname=titanos
2465                         case "$3" in
2466                         1*) osvers=1 ;;
2467                         2*) osvers=2 ;;
2468                         3*) osvers=3 ;;
2469                         4*) osvers=4 ;;
2470                         *)      osvers="$3" ;;
2471                         esac
2472                         ;;
2473                 ultrix) osname=ultrix
2474                         osvers="$3"
2475                         ;;
2476                 osf1|mls+)      case "$5" in
2477                                 alpha)
2478                                         osname=dec_osf
2479                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2480                                         case "$osvers" in
2481                                         [1-9].[0-9]*) ;;
2482                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2483                                         esac
2484                                         ;;
2485                         hp*)    osname=hp_osf1  ;;
2486                         mips)   osname=mips_osf1 ;;
2487                         esac
2488                         ;;
2489                 unixware) osname=svr5
2490                         osvers="$4"
2491                         ;;
2492                 uts) osname=uts
2493                         osvers="$3"
2494                         ;;
2495                 $2) case "$osname" in
2496                         *isc*) ;;
2497                         *freebsd*) ;;
2498                         svr*)
2499                                 : svr4.x or possibly later
2500                                 case "svr$3" in 
2501                                 ${osname}*)
2502                                         osname=svr$3
2503                                         osvers=$4
2504                                         ;;
2505                                 esac
2506                                 case "$osname" in
2507                                 svr4.0)
2508                                         : Check for ESIX
2509                                         if test -f /stand/boot ; then
2510                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2511                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2512                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2513                                                         if test -n "$isesix"; then
2514                                                                 osname=esix4
2515                                                         fi
2516                                                 fi
2517                                         fi
2518                                         ;;
2519                                 esac
2520                                 ;;
2521                         *)      if test -f /etc/systemid; then
2522                                         osname=sco
2523                                         set `echo $3 | $sed 's/\./ /g'` $4
2524                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2525                                                 osvers=$1.$2.$3
2526                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2527                                                 osvers=$1.$2
2528                                         elif $test -f $src/hints/sco_$1.sh; then
2529                                                 osvers=$1
2530                                         fi
2531                                 else
2532                                         case "$osname" in
2533                                         '') : Still unknown.  Probably a generic Sys V.
2534                                                 osname="sysv"
2535                                                 osvers="$3"
2536                                                 ;;
2537                                         esac
2538                                 fi
2539                                 ;;
2540                         esac
2541                         ;;
2542                 *)      case "$osname" in
2543                         '') : Still unknown.  Probably a generic BSD.
2544                                 osname="$1"
2545                                 osvers="$3"
2546                                 ;;
2547                         esac
2548                         ;;
2549                 esac
2550         else
2551                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2552                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2553                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2554                                 osname=news_os
2555                         fi
2556                         $rm -f UU/kernel.what
2557                 elif test -d c:/.; then
2558                         set X $myuname
2559                         osname=os2
2560                         osvers="$5"
2561                 fi
2562         fi
2563         
2564         : Now look for a hint file osname_osvers, unless one has been
2565         : specified already.
2566         case "$hintfile" in
2567         ''|' ')
2568                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2569                 : Also try without trailing minor version numbers.
2570                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2571                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2572                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2573                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2574                 case "$file" in
2575                 '') dflt=none ;;
2576                 *)  case "$osvers" in
2577                         '') dflt=$file
2578                                 ;;
2579                         *)  if $test -f $src/hints/$file.sh ; then
2580                                         dflt=$file
2581                                 elif $test -f $src/hints/$xfile.sh ; then
2582                                         dflt=$xfile
2583                                 elif $test -f $src/hints/$xxfile.sh ; then
2584                                         dflt=$xxfile
2585                                 elif $test -f $src/hints/$xxxfile.sh ; then
2586                                         dflt=$xxxfile
2587                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2588                                         dflt=$xxxxfile
2589                                 elif $test -f "$src/hints/${osname}.sh" ; then
2590                                         dflt="${osname}"
2591                                 else
2592                                         dflt=none
2593                                 fi
2594                                 ;;
2595                         esac
2596                         ;;
2597                 esac
2598                 if $test -f Policy.sh ; then
2599                         case "$dflt" in
2600                         *Policy*) ;;
2601                         none) dflt="Policy" ;;
2602                         *) dflt="Policy $dflt" ;;
2603                         esac
2604                 fi
2605                 ;;
2606         *)
2607                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2608                 ;;
2609         esac
2610
2611         if $test -f Policy.sh ; then
2612                 $cat <<EOM
2613
2614 There's also a Policy hint file available, which should make the
2615 site-specific (policy) questions easier to answer.
2616 EOM
2617
2618         fi
2619
2620         $cat <<EOM
2621
2622 You may give one or more space-separated answers, or "none" if appropriate.
2623 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2624 is a good thing.  DO NOT give a wrong version or a wrong OS.
2625
2626 EOM
2627
2628         rp="Which of these apply, if any?"
2629         . UU/myread
2630         tans=$ans
2631         for file in $tans; do
2632                 if $test X$file = XPolicy -a -f Policy.sh; then
2633                         . Policy.sh
2634                         $cat Policy.sh >> UU/config.sh
2635                 elif $test -f $src/hints/$file.sh; then
2636                         . $src/hints/$file.sh
2637                         $cat $src/hints/$file.sh >> UU/config.sh
2638                 elif $test X$tans = X -o X$tans = Xnone ; then
2639                         : nothing
2640                 else
2641                         : Give one chance to correct a possible typo.
2642                         echo "$file.sh does not exist"
2643                         dflt=$file
2644                         rp="hint to use instead?"
2645                         . UU/myread
2646                         for file in $ans; do
2647                                 if $test -f "$src/hints/$file.sh"; then
2648                                         . $src/hints/$file.sh
2649                                         $cat $src/hints/$file.sh >> UU/config.sh
2650                                 elif $test X$ans = X -o X$ans = Xnone ; then
2651                                         : nothing
2652                                 else
2653                                         echo "$file.sh does not exist -- ignored."
2654                                 fi
2655                         done
2656                 fi
2657         done
2658
2659         hint=recommended
2660         : Remember our hint file for later.
2661         if $test -f "$src/hints/$file.sh" ; then
2662                 hintfile="$file"
2663         else
2664                 hintfile=''
2665         fi
2666 fi
2667 cd UU
2668 ;;
2669 *)
2670         echo " "
2671         echo "Fetching default answers from $config_sh..." >&4
2672         tmp_n="$n"
2673         tmp_c="$c"
2674         cd ..
2675         cp $config_sh config.sh 2>/dev/null
2676         chmod +w config.sh
2677         . ./config.sh
2678         cd UU
2679         cp ../config.sh .
2680         n="$tmp_n"
2681         c="$tmp_c"
2682         hint=previous
2683         ;;
2684 esac
2685 test "$override" && . ./optdef.sh
2686
2687 : Restore computed paths
2688 for file in $loclist $trylist; do
2689         eval $file="\$_$file"
2690 done
2691
2692 cat << EOM
2693
2694 Configure uses the operating system name and version to set some defaults.
2695 The default value is probably right if the name rings a bell. Otherwise,
2696 since spelling matters for me, either accept the default or answer "none"
2697 to leave it blank.
2698
2699 EOM
2700 case "$osname" in
2701         ''|' ')
2702                 case "$hintfile" in
2703                 ''|' '|none) dflt=none ;;
2704                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2705                 esac
2706                 ;;
2707         *) dflt="$osname" ;;
2708 esac
2709 rp="Operating system name?"
2710 . ./myread
2711 case "$ans" in
2712 none)  osname='' ;;
2713 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2714 esac
2715 echo " "
2716 case "$osvers" in
2717         ''|' ')
2718                 case "$hintfile" in
2719                 ''|' '|none) dflt=none ;;
2720                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2721                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2722                         case "$dflt" in
2723                         ''|' ') dflt=none ;;
2724                         esac
2725                         ;;
2726                 esac
2727                 ;;
2728         *) dflt="$osvers" ;;
2729 esac
2730 rp="Operating system version?"
2731 . ./myread
2732 case "$ans" in
2733 none)  osvers='' ;;
2734 *) osvers="$ans" ;;
2735 esac
2736
2737
2738 . ./posthint.sh
2739
2740 : who configured the system
2741 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2742 cf_by=`(logname) 2>/dev/null`
2743 case "$cf_by" in
2744 "")
2745         cf_by=`(whoami) 2>/dev/null`
2746         case "$cf_by" in
2747         "") cf_by=unknown ;;
2748         esac ;;
2749 esac
2750
2751 : set up the script used to warn in case of inconsistency
2752 cat <<EOS >whoa
2753 $startsh
2754 EOS
2755 cat <<'EOSC' >>whoa
2756 dflt=y
2757 echo " "
2758 echo "*** WHOA THERE!!! ***" >&4
2759 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2760 rp="    Keep the $hint value?"
2761 . ./myread
2762 case "$ans" in
2763 y) td=$was; tu=$was;;
2764 esac
2765 EOSC
2766
2767 : function used to set $1 to $val
2768 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2769 case "$val$was" in
2770 $define$undef) . ./whoa; eval "$var=\$td";;
2771 $undef$define) . ./whoa; eval "$var=\$tu";;
2772 *) eval "$var=$val";;
2773 esac'
2774
2775 case "$usethreads" in
2776 $define|true|[yY]*)     dflt='y';;
2777 *) dflt='n';;
2778 esac
2779 cat <<EOM
2780
2781 Perl can be built to take advantage of threads on some systems.
2782 To do so, Configure can be run with -Dusethreads.
2783
2784 Note that threading is a highly experimental feature, and
2785 some known race conditions still remain.  If you choose to try
2786 it, be very sure to not actually deploy it for production
2787 purposes.  README.threads has more details, and is required
2788 reading if you enable threads.
2789
2790 If this doesn't make any sense to you, just accept the default '$dflt'.
2791 EOM
2792 rp='Build a threading Perl?'
2793 . ./myread
2794 case "$ans" in
2795 y|Y)    val="$define" ;;
2796 *)      val="$undef" ;;
2797 esac
2798 set usethreads
2799 eval $setvar
2800
2801 case "$usethreads" in
2802 $define)
2803         $cat <<EOM
2804
2805 As of 5.5.640, Perl has two different internal threading implementations,
2806 the 5.005 version (5005threads) and an interpreter-based version
2807 (ithreads) that has one interpreter per thread.  Both are very 
2808 experimental.  This arrangement exists to help developers work out
2809 which one is better.
2810
2811 If you're a casual user, you probably don't want interpreter-threads
2812 at this time.  There doesn't yet exist a way to create threads from
2813 within Perl in this model, i.e., "use Thread;" will NOT work.
2814 EOM
2815         : Default to ithreads unless overridden on command line or with
2816         : old config.sh
2817         dflt='y'
2818         case "$use5005threads" in
2819                 $define|true|[yY]*) dflt='n';;
2820         esac
2821         case "$useithreads" in
2822                 $undef|false|[nN]*) dflt='n';;
2823         esac
2824         rp='Use interpreter-based ithreads?'
2825         . ./myread
2826         case "$ans" in
2827         y|Y)    val="$define" ;;
2828         *)      val="$undef" ;;
2829         esac
2830         set useithreads
2831         eval $setvar
2832         : Now set use5005threads to the opposite value.
2833         case "$useithreads" in
2834         $define) val="$undef" ;;
2835         *) val="$define" ;;
2836         esac
2837         set use5005threads
2838         eval $setvar
2839         ;;
2840 *)
2841         useithreads="$undef"
2842         use5005threads="$undef"
2843         ;;
2844 esac
2845
2846 case "$d_oldpthreads" in
2847 '')     : Configure tests would be welcome here.  For now, assume undef.
2848         val="$undef" ;;
2849 *)      val="$d_oldpthreads" ;;
2850 esac
2851 set d_oldpthreads
2852 eval $setvar
2853
2854
2855 case "$usethreads" in
2856 "$define"|true|[yY]*)
2857 : Look for a hint-file generated 'call-back-unit'.  If the
2858 : user has specified that a threading perl is to be built,
2859 : we may need to set or change some other defaults.
2860         if $test -f usethreads.cbu; then
2861                 echo "Your platform has some specific hints for threaded builds, using them..."
2862                 . ./usethreads.cbu
2863         else
2864                 $cat <<EOM
2865 (Your platform doesn't have any specific hints for threaded builds.
2866  Assuming POSIX threads, then.)
2867 EOM
2868         fi
2869         ;;
2870 esac
2871
2872 cat <<EOM
2873
2874 Perl can be built so that multiple Perl interpreters can coexist
2875 within the same Perl executable.
2876 EOM
2877
2878 case "$useithreads" in
2879 $define)
2880         cat <<EOM
2881 This multiple interpreter support is required for interpreter-based threads.
2882 EOM
2883         val="$define"
2884         ;;
2885 *)      case "$usemultiplicity" in
2886         $define|true|[yY]*)     dflt='y';;
2887         *) dflt='n';;
2888         esac
2889         echo " "
2890         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2891         rp='Build Perl for multiplicity?'
2892         . ./myread
2893         case "$ans" in
2894         y|Y)    val="$define" ;;
2895         *)      val="$undef" ;;
2896         esac
2897         ;;
2898 esac
2899 set usemultiplicity
2900 eval $setvar
2901
2902 : make some quick guesses about what we are up against
2903 echo " "
2904 $echo $n "Hmm...  $c"
2905 echo exit 1 >bsd
2906 echo exit 1 >usg
2907 echo exit 1 >v7
2908 echo exit 1 >osf1
2909 echo exit 1 >eunice
2910 echo exit 1 >xenix
2911 echo exit 1 >venix
2912 echo exit 1 >os2
2913 d_bsd="$undef"
2914 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2915 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2916 then
2917         echo "Looks kind of like an OSF/1 system, but we'll see..."
2918         echo exit 0 >osf1
2919 elif test `echo abc | $tr a-z A-Z` = Abc ; then
2920         xxx=`./loc addbib blurfl $pth`
2921         if $test -f $xxx; then
2922         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2923                 echo exit 0 >bsd
2924                 echo exit 0 >usg
2925         else
2926                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2927                         echo "Looks kind of like an extended USG system, but we'll see..."
2928                 else
2929                         echo "Looks kind of like a USG system, but we'll see..."
2930                 fi
2931                 echo exit 0 >usg
2932         fi
2933 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2934         echo "Looks kind of like a BSD system, but we'll see..."
2935         d_bsd="$define"
2936         echo exit 0 >bsd
2937 else
2938         echo "Looks kind of like a Version 7 system, but we'll see..."
2939         echo exit 0 >v7
2940 fi
2941 case "$eunicefix" in
2942 *unixtovms*)
2943         $cat <<'EOI'
2944 There is, however, a strange, musty smell in the air that reminds me of
2945 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2946 EOI
2947         echo exit 0 >eunice
2948         d_eunice="$define"
2949 : it so happens the Eunice I know will not run shell scripts in Unix format
2950         ;;
2951 *)
2952         echo " "
2953         echo "Congratulations.  You aren't running Eunice."
2954         d_eunice="$undef"
2955         ;;
2956 esac
2957 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2958 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
2959 : semicolon as a patch separator
2960 case "$p_" in
2961 :) ;;
2962 *)
2963         $cat <<'EOI'
2964 I have the feeling something is not exactly right, however...don't tell me...
2965 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2966 (Or you may be running DOS with DJGPP.)
2967 EOI
2968         echo exit 0 >os2
2969         ;;
2970 esac
2971 if test -f /xenix; then
2972         echo "Actually, this looks more like a XENIX system..."
2973         echo exit 0 >xenix
2974         d_xenix="$define"
2975 else
2976         echo " "
2977         echo "It's not Xenix..."
2978         d_xenix="$undef"
2979 fi
2980 chmod +x xenix
2981 $eunicefix xenix
2982 if test -f /venix; then
2983         echo "Actually, this looks more like a VENIX system..."
2984         echo exit 0 >venix
2985 else
2986         echo " "
2987         if ./xenix; then
2988                 : null
2989         else
2990                 echo "Nor is it Venix..."
2991         fi
2992 fi
2993 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2994 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2995 $rm -f foo
2996
2997 case "$cc" in
2998 '') dflt=cc;;
2999 *) dflt="$cc";;
3000 esac
3001 rp="Use which C compiler?"
3002 . ./myread
3003 cc="$ans"
3004 : Look for a hint-file generated 'call-back-unit'.  Now that the
3005 : user has specified the compiler, we may need to set or change some
3006 : other defaults.
3007 if $test -f cc.cbu; then
3008     . ./cc.cbu
3009 fi
3010 . ./checkcc
3011
3012 echo " "
3013 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3014 $cat >gccvers.c <<EOM
3015 #include <stdio.h>
3016 int main() {
3017 #ifdef __GNUC__
3018 #ifdef __VERSION__
3019         printf("%s\n", __VERSION__);
3020 #else
3021         printf("%s\n", "1");
3022 #endif
3023 #endif
3024         exit(0);
3025 }
3026 EOM
3027 if $cc -o gccvers $ldflags gccvers.c; then
3028         gccversion=`./gccvers`
3029         case "$gccversion" in
3030         '') echo "You are not using GNU cc." ;;
3031         *)  echo "You are using GNU cc $gccversion."
3032             ccname=gcc  
3033             ;;
3034         esac
3035 else
3036         echo " "
3037         echo "*** WHOA THERE!!! ***" >&4
3038         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3039         case "$knowitall" in
3040         '')
3041         echo "    You'd better start hunting for one and let me know about it." >&4
3042                 exit 1
3043                 ;;
3044         esac
3045 fi
3046 $rm -f gccvers*
3047 case "$gccversion" in
3048 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3049 esac
3050 case "$gccversion" in
3051 '') gccosandvers='' ;;
3052 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3053    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3054    gccshortvers=''
3055    case "$gccosandvers" in
3056    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3057    $osname$osvers) ;; # looking good
3058    $osname*) cat <<EOM >&4
3059
3060 *** WHOA THERE!!! ***
3061
3062     Your gcc has not been compiled for the exact release of
3063     your operating system ($gccosandvers versus $osname$osvers).
3064
3065     In general it is a good idea to keep gcc synchronized with
3066     the operating system because otherwise serious problems
3067     may ensue when trying to compile software, like Perl.
3068
3069     I'm trying to be optimistic here, though, and will continue.
3070     If later during the configuration and build icky compilation
3071     problems appear (headerfile conflicts being the most common
3072     manifestation), I suggest reinstalling the gcc to match
3073     your operating system release.
3074
3075 EOM
3076       ;;
3077    *) gccosandvers='' ;; # failed to parse, better be silent
3078    esac
3079    ;;
3080 esac
3081 case "$ccname" in
3082 '') ccname="$cc" ;;
3083 esac
3084
3085 : see how we invoke the C preprocessor
3086 echo " "
3087 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3088 cat <<'EOT' >testcpp.c
3089 #define ABC abc
3090 #define XYZ xyz
3091 ABC.XYZ
3092 EOT
3093 cd ..
3094 if test ! -f cppstdin; then
3095         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3096                 # AIX cc -E doesn't show the absolute headerfile
3097                 # locations but we'll cheat by using the -M flag.
3098                 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
3099         else
3100                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3101         fi
3102 else
3103         echo "Keeping your $hint cppstdin wrapper."
3104 fi
3105 chmod 755 cppstdin
3106 wrapper=`pwd`/cppstdin
3107 ok='false'
3108 cd UU
3109
3110 if $test "X$cppstdin" != "X" && \
3111         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3112         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3113 then
3114         echo "You used to use $cppstdin $cppminus so we'll use that again."
3115         case "$cpprun" in
3116         '') echo "But let's see if we can live without a wrapper..." ;;
3117         *)
3118                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3119                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3120                 then
3121                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3122                         ok='true'
3123                 else
3124                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3125                 fi
3126                 ;;
3127         esac
3128 else
3129         case "$cppstdin" in
3130         '') ;;
3131         *)
3132                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3133                 ;;
3134         esac
3135 fi
3136
3137 if $ok; then
3138         : nothing
3139 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3140         $cc -E <testcpp.c >testcpp.out 2>&1; \
3141         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3142         echo "Yup, it does."
3143         x_cpp="$cc -E"
3144         x_minus='';
3145 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3146         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3147         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3148         echo "Yup, it does."
3149         x_cpp="$cc -E"
3150         x_minus='-';
3151 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3152         $cc -P <testcpp.c >testcpp.out 2>&1; \
3153         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3154         echo "Yipee, that works!"
3155         x_cpp="$cc -P"
3156         x_minus='';
3157 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3158         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3159         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3160         echo "At long last!"
3161         x_cpp="$cc -P"
3162         x_minus='-';
3163 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3164         $cpp <testcpp.c >testcpp.out 2>&1; \
3165         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3166         echo "It works!"
3167         x_cpp="$cpp"
3168         x_minus='';
3169 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3170         $cpp - <testcpp.c >testcpp.out 2>&1; \
3171         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3172         echo "Hooray, it works!  I was beginning to wonder."
3173         x_cpp="$cpp"
3174         x_minus='-';
3175 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3176         $wrapper <testcpp.c >testcpp.out 2>&1; \
3177         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3178         x_cpp="$wrapper"
3179         x_minus=''
3180         echo "Eureka!"
3181 else
3182         dflt=''
3183         rp="No dice.  I can't find a C preprocessor.  Name one:"
3184         . ./myread
3185         x_cpp="$ans"
3186         x_minus=''
3187         $x_cpp <testcpp.c >testcpp.out 2>&1
3188         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3189                 echo "OK, that will do." >&4
3190         else
3191 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3192                 exit 1
3193         fi
3194 fi
3195
3196 case "$ok" in
3197 false)
3198         cppstdin="$x_cpp"
3199         cppminus="$x_minus"
3200         cpprun="$x_cpp"
3201         cpplast="$x_minus"
3202         set X $x_cpp
3203         shift
3204         case "$1" in
3205         "$cpp")
3206                 echo "Perhaps can we force $cc -E using a wrapper..."
3207                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3208                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3209                 then
3210                         echo "Yup, we can."
3211                         cppstdin="$wrapper"
3212                         cppminus='';
3213                 else
3214                         echo "Nope, we'll have to live without it..."
3215                 fi
3216                 ;;
3217         esac
3218         case "$cpprun" in
3219         "$wrapper")
3220                 cpprun=''
3221                 cpplast=''
3222                 ;;
3223         esac
3224         ;;
3225 esac
3226
3227 case "$cppstdin" in
3228 "$wrapper"|'cppstdin') ;;
3229 *) $rm -f $wrapper;;
3230 esac
3231 $rm -f testcpp.c testcpp.out
3232
3233 : decide how portable to be.  Allow command line overrides.
3234 case "$d_portable" in
3235 "$undef") ;;
3236 *)      d_portable="$define" ;;
3237 esac
3238
3239 : set up shell script to do ~ expansion
3240 cat >filexp <<EOSS
3241 $startsh
3242 : expand filename
3243 case "\$1" in
3244  ~/*|~)
3245         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3246         ;;
3247  ~*)
3248         if $test -f /bin/csh; then
3249                 /bin/csh -f -c "glob \$1"
3250                 failed=\$?
3251                 echo ""
3252                 exit \$failed
3253         else
3254                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3255                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3256                 if $test ! -d "\$dir"; then
3257                         me=\`basename \$0\`
3258                         echo "\$me: can't locate home directory for: \$name" >&2
3259                         exit 1
3260                 fi
3261                 case "\$1" in
3262                 */*)
3263                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3264                         ;;
3265                 *)
3266                         echo \$dir
3267                         ;;
3268                 esac
3269         fi
3270         ;;
3271 *)
3272         echo \$1
3273         ;;
3274 esac
3275 EOSS
3276 chmod +x filexp
3277 $eunicefix filexp
3278
3279 : now set up to get a file name
3280 cat <<EOS >getfile
3281 $startsh
3282 EOS
3283 cat <<'EOSC' >>getfile
3284 tilde=''
3285 fullpath=''
3286 already=''
3287 skip=''
3288 none_ok=''
3289 exp_file=''
3290 nopath_ok=''
3291 orig_rp="$rp"
3292 orig_dflt="$dflt"
3293 case "$gfpth" in
3294 '') gfpth='.' ;;
3295 esac
3296
3297 case "$fn" in
3298 *\(*)
3299         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3300         fn=`echo $fn | sed 's/(.*)//'`
3301         ;;
3302 esac
3303
3304 case "$fn" in
3305 *:*)
3306         loc_file=`expr $fn : '.*:\(.*\)'`
3307         fn=`expr $fn : '\(.*\):.*'`
3308         ;;
3309 esac
3310
3311 case "$fn" in
3312 *~*) tilde=true;;
3313 esac
3314 case "$fn" in
3315 */*) fullpath=true;;
3316 esac
3317 case "$fn" in
3318 *+*) skip=true;;
3319 esac
3320 case "$fn" in
3321 *n*) none_ok=true;;
3322 esac
3323 case "$fn" in
3324 *e*) exp_file=true;;
3325 esac
3326 case "$fn" in
3327 *p*) nopath_ok=true;;
3328 esac
3329
3330 case "$fn" in
3331 *f*) type='File';;
3332 *d*) type='Directory';;
3333 *l*) type='Locate';;
3334 esac
3335
3336 what="$type"
3337 case "$what" in
3338 Locate) what='File';;
3339 esac
3340
3341 case "$exp_file" in
3342 '')
3343         case "$d_portable" in
3344         "$define") ;;
3345         *) exp_file=true;;
3346         esac
3347         ;;
3348 esac
3349
3350 cd ..
3351 while test "$type"; do
3352         redo=''
3353         rp="$orig_rp"
3354         dflt="$orig_dflt"
3355         case "$tilde" in
3356         true) rp="$rp (~name ok)";;
3357         esac
3358         . UU/myread
3359         if test -f UU/getfile.ok && \
3360                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3361         then
3362                 value="$ans"
3363                 ansexp="$ans"
3364                 break
3365         fi
3366         case "$ans" in
3367         none)
3368                 value=''
3369                 ansexp=''
3370                 case "$none_ok" in
3371                 true) type='';;
3372                 esac
3373                 ;;
3374         *)
3375                 case "$tilde" in
3376                 '') value="$ans"
3377                         ansexp="$ans";;
3378                 *)
3379                         value=`UU/filexp $ans`
3380                         case $? in
3381                         0)
3382                                 if test "$ans" != "$value"; then
3383                                         echo "(That expands to $value on this system.)"
3384                                 fi
3385                                 ;;
3386                         *) value="$ans";;
3387                         esac
3388                         ansexp="$value"
3389                         case "$exp_file" in
3390                         '') value="$ans";;
3391                         esac
3392                         ;;
3393                 esac
3394                 case "$fullpath" in
3395                 true)
3396                         case "$ansexp" in
3397                         /*) value="$ansexp" ;;
3398                         [a-zA-Z]:/*) value="$ansexp" ;;
3399                         *)
3400                                 redo=true
3401                                 case "$already" in
3402                                 true)
3403                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3404                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3405                                         ;;
3406                                 *)
3407                                 echo "Please give a full path name, starting with slash." >&4
3408                                         case "$tilde" in
3409                                         true)
3410                                 echo "Note that using ~name is ok provided it expands well." >&4
3411                                                 already=true
3412                                                 ;;
3413                                         esac
3414                                 esac
3415                                 ;;
3416                         esac
3417                         ;;
3418                 esac
3419                 case "$redo" in
3420                 '')
3421                         case "$type" in
3422                         File)
3423                                 for fp in $gfpth; do
3424                                         if test "X$fp" = X.; then
3425                                             pf="$ansexp"
3426                                         else    
3427                                             pf="$fp/$ansexp"
3428                                         fi
3429                                         if test -f "$pf"; then
3430                                                 type=''
3431                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3432                                         then
3433                                                 echo "($value is not a plain file, but that's ok.)"
3434                                                 type=''
3435                                         fi
3436                                         if test X"$type" = X; then
3437                                             value="$pf"
3438                                             break
3439                                         fi
3440                                 done
3441                                 ;;
3442                         Directory)
3443                                 for fp in $gfpth; do
3444                                         if test "X$fp" = X.; then
3445                                             dir="$ans"
3446                                             direxp="$ansexp"
3447                                         else    
3448                                             dir="$fp/$ansexp"
3449                                             direxp="$fp/$ansexp"
3450                                         fi
3451                                         if test -d "$direxp"; then
3452                                                 type=''
3453                                                 value="$dir"
3454                                                 break
3455                                         fi
3456                                 done
3457                                 ;;
3458                         Locate)
3459                                 if test -d "$ansexp"; then
3460                                         echo "(Looking for $loc_file in directory $value.)"
3461                                         value="$value/$loc_file"
3462                                         ansexp="$ansexp/$loc_file"
3463                                 fi
3464                                 if test -f "$ansexp"; then
3465                                         type=''
3466                                 fi
3467                                 case "$nopath_ok" in
3468                                 true)   case "$value" in
3469                                         */*) ;;
3470                                         *)      echo "Assuming $value will be in people's path."
3471                                                 type=''
3472                                                 ;;
3473                                         esac
3474                                         ;;
3475                                 esac
3476                                 ;;
3477                         esac
3478
3479                         case "$skip" in
3480                         true) type='';
3481                         esac
3482
3483                         case "$type" in
3484                         '') ;;
3485                         *)
3486                                 if test "$fastread" = yes; then
3487                                         dflt=y
3488                                 else
3489                                         dflt=n
3490                                 fi
3491                                 rp="$what $value doesn't exist.  Use that name anyway?"
3492                                 . UU/myread
3493                                 dflt=''
3494                                 case "$ans" in
3495                                 y*) type='';;
3496                                 *) echo " ";;
3497                                 esac
3498                                 ;;
3499                         esac
3500                         ;;
3501                 esac
3502                 ;;
3503         esac
3504 done
3505 cd UU
3506 ans="$value"
3507 rp="$orig_rp"
3508 dflt="$orig_dflt"
3509 rm -f getfile.ok
3510 test "X$gfpthkeep" != Xy && gfpth=""
3511 EOSC
3512
3513 : What should the include directory be ?
3514 echo " "
3515 $echo $n "Hmm...  $c"
3516 dflt='/usr/include'
3517 incpath=''
3518 mips_type=''
3519 if $test -f /bin/mips && /bin/mips; then
3520         echo "Looks like a MIPS system..."
3521         $cat >usr.c <<'EOCP'
3522 #ifdef SYSTYPE_BSD43
3523 /bsd43
3524 #endif
3525 EOCP
3526         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3527                 dflt='/bsd43/usr/include'
3528                 incpath='/bsd43'
3529                 mips_type='BSD 4.3'
3530         else
3531                 mips_type='System V'
3532         fi
3533         $rm -f usr.c usr.out
3534         echo "and you're compiling with the $mips_type compiler and libraries."
3535         xxx_prompt=y
3536         echo "exit 0" >mips
3537 else
3538         echo "Doesn't look like a MIPS system."
3539         xxx_prompt=n
3540         echo "exit 1" >mips
3541 fi
3542 chmod +x mips
3543 $eunicefix mips
3544 case "$usrinc" in
3545 '') ;;
3546 *) dflt="$usrinc";;
3547 esac
3548 case "$xxx_prompt" in
3549 y)      fn=d/
3550         echo " "
3551         rp='Where are the include files you want to use?'
3552         . ./getfile
3553         usrinc="$ans"
3554         ;;
3555 *)      usrinc="$dflt"
3556         ;;
3557 esac
3558
3559 : Set private lib path
3560 case "$plibpth" in
3561 '') if ./mips; then
3562                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3563         fi;;
3564 esac
3565 case "$libpth" in
3566 ' ') dlist='';;
3567 '') dlist="$loclibpth $plibpth $glibpth";;
3568 *) dlist="$libpth";;
3569 esac
3570
3571 : Now check and see which directories actually exist, avoiding duplicates
3572 libpth=''
3573 for xxx in $dlist
3574 do
3575     if $test -d $xxx; then
3576                 case " $libpth " in
3577                 *" $xxx "*) ;;
3578                 *) libpth="$libpth $xxx";;
3579                 esac
3580     fi
3581 done
3582 $cat <<'EOM'
3583
3584 Some systems have incompatible or broken versions of libraries.  Among
3585 the directories listed in the question below, please remove any you
3586 know not to be holding relevant libraries, and add any that are needed.
3587 Say "none" for none.
3588
3589 EOM
3590 case "$libpth" in
3591 '') dflt='none';;
3592 *)
3593         set X $libpth
3594         shift
3595         dflt=${1+"$@"}
3596         ;;
3597 esac
3598 rp="Directories to use for library searches?"
3599 . ./myread
3600 case "$ans" in
3601 none) libpth=' ';;
3602 *) libpth="$ans";;
3603 esac
3604
3605 : compute shared library extension
3606 case "$so" in
3607 '')
3608         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3609                 dflt='sl'
3610         else
3611                 dflt='so'
3612         fi
3613         ;;
3614 *) dflt="$so";;
3615 esac
3616 $cat <<EOM
3617
3618 On some systems, shared libraries may be available.  Answer 'none' if
3619 you want to suppress searching of shared libraries for the remainder
3620 of this configuration.
3621
3622 EOM
3623 rp='What is the file extension used for shared libraries?'
3624 . ./myread
3625 so="$ans"
3626
3627 : Define several unixisms.
3628 : Hints files or command line option can be used to override them.
3629 : The convoluted testing is in case hints files set either the old
3630 : or the new name.
3631 case "$_exe" in
3632 '')     case "$exe_ext" in
3633     '') ;;
3634         *)      _exe="$exe_ext" ;;
3635         esac
3636         ;;
3637 esac
3638 case "$_a" in
3639 '')     case "$lib_ext" in
3640     '') _a='.a';;
3641         *)      _a="$lib_ext" ;;
3642         esac
3643         ;;
3644 esac
3645 case "$_o" in
3646 '') case "$obj_ext" in
3647         '')     _o='.o';;
3648         *)      _o="$obj_ext";;
3649         esac
3650         ;;
3651 esac
3652 case "$p_" in
3653 '') case "$path_sep" in
3654         '')     p_=':';;
3655         *)      p_="$path_sep";;
3656         esac
3657         ;;
3658 esac
3659 exe_ext=$_exe
3660 lib_ext=$_a
3661 obj_ext=$_o
3662 path_sep=$p_
3663
3664 : Which makefile gets called first.  This is used by make depend.
3665 case "$firstmakefile" in
3666 '') firstmakefile='makefile';;
3667 esac
3668
3669 case "$usesocks" in
3670 $define|true|[yY]*)     dflt='y';;
3671 *) dflt='n';;
3672 esac
3673 cat <<EOM
3674
3675 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3676 Configure must be run with -Dusesocks.
3677
3678 If this doesn't make any sense to you, just accept the default '$dflt'.
3679 EOM
3680 rp='Build Perl for SOCKS?'
3681 . ./myread
3682 case "$ans" in
3683 y|Y)    val="$define" ;;     
3684 *)      val="$undef" ;;
3685 esac
3686 set usesocks
3687 eval $setvar
3688
3689 : Looking for optional libraries
3690 echo " "
3691 echo "Checking for optional libraries..." >&4
3692 case "$libs" in
3693 ' '|'') dflt='';;
3694 *) dflt="$libs";;
3695 esac
3696 case "$libswanted" in
3697 '') libswanted='c_s';;
3698 esac
3699 case "$usesocks" in
3700 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3701 esac
3702 libsfound=''
3703 libsfiles=''
3704 libsdirs=''
3705 libspath=''
3706 for thisdir in $libpth $xlibpth; do
3707   test -d $thisdir && libspath="$libspath $thisdir"
3708 done
3709 for thislib in $libswanted; do
3710         for thisdir in $libspath; do
3711             xxx=''
3712             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3713                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3714                 $test -f "$xxx" && eval $libscheck
3715                 $test -f "$xxx" && libstyle=shared
3716             fi
3717             if test ! -f "$xxx"; then
3718                 xxx=$thisdir/lib$thislib.$so
3719                 $test -f "$xxx" && eval $libscheck
3720                 $test -f "$xxx" && libstyle=shared
3721             fi  
3722             if test ! -f "$xxx"; then
3723                 xxx=$thisdir/lib$thislib$_a
3724                 $test -f "$xxx" && eval $libscheck
3725                 $test -f "$xxx" && libstyle=static
3726             fi
3727             if test ! -f "$xxx"; then
3728                 xxx=$thisdir/$thislib$_a
3729                 $test -f "$xxx" && eval $libscheck
3730                 $test -f "$xxx" && libstyle=static
3731             fi
3732             if test ! -f "$xxx"; then
3733                 xxx=$thisdir/lib${thislib}_s$_a
3734                 $test -f "$xxx" && eval $libscheck
3735                 $test -f "$xxx" && libstyle=static
3736                 $test -f "$xxx" && thislib=${thislib}_s
3737             fi
3738             if test ! -f "$xxx"; then
3739                 xxx=$thisdir/Slib$thislib$_a
3740                 $test -f "$xxx" && eval $libscheck
3741                 $test -f "$xxx" && libstyle=static
3742             fi
3743             if $test -f "$xxx"; then
3744                 case "$libstyle" in
3745                 shared) echo "Found -l$thislib (shared)." ;;
3746                 static) echo "Found -l$thislib." ;;
3747                 *)      echo "Found -l$thislib ($libstyle)." ;;
3748                 esac
3749                 case " $dflt " in
3750                 *"-l$thislib "*);;
3751                 *) dflt="$dflt -l$thislib"
3752                    libsfound="$libsfound $xxx"
3753                    yyy=`basename $xxx`
3754                    libsfiles="$libsfiles $yyy"
3755                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3756                    case " $libsdirs " in
3757                    *" $yyy "*) ;;
3758                    *) libsdirs="$libsdirs $yyy" ;;
3759                    esac
3760                    ;;
3761                 esac
3762                 break
3763             fi  
3764         done
3765         if $test ! -f "$xxx"; then
3766             echo "No -l$thislib."
3767         fi
3768 done
3769 set X $dflt
3770 shift
3771 dflt="$*"
3772 case "$libs" in
3773 '') dflt="$dflt";;
3774 *) dflt="$libs";;
3775 esac
3776 case "$dflt" in
3777 ' '|'') dflt='none';;
3778 esac
3779
3780 $cat <<EOM
3781
3782 In order to compile $package on your machine, a number of libraries
3783 are usually needed.  Include any other special libraries here as well.
3784 Say "none" for none.  The default list is almost always right.
3785 EOM
3786
3787 echo " "
3788 rp="What libraries to use?"
3789 . ./myread
3790 case "$ans" in
3791 none) libs=' ';;
3792 *) libs="$ans";;
3793 esac
3794
3795 : determine optimization, if desired, or use for debug flag also
3796 case "$optimize" in
3797 ' '|$undef) dflt='none';;
3798 '') dflt='-O';;
3799 *) dflt="$optimize";;
3800 esac
3801 $cat <<EOH
3802
3803 By default, $package compiles with the -O flag to use the optimizer.
3804 Alternately, you might want to use the symbolic debugger, which uses
3805 the -g flag (on traditional Unix systems).  Either flag can be
3806 specified here.  To use neither flag, specify the word "none".
3807
3808 EOH
3809 rp="What optimizer/debugger flag should be used?"
3810 . ./myread
3811 optimize="$ans"
3812 case "$optimize" in
3813 'none') optimize=" ";;
3814 esac
3815
3816 dflt=''
3817 : We will not override a previous value, but we might want to
3818 : augment a hint file
3819 case "$hint" in
3820 default|recommended)
3821         case "$gccversion" in
3822         1*) dflt='-fpcc-struct-return' ;;
3823         esac
3824         case "$optimize" in
3825         *-g*) dflt="$dflt -DDEBUGGING";;
3826         esac
3827         case "$gccversion" in
3828         2*) if test -d /etc/conf/kconfig.d &&
3829                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3830                 then
3831                         dflt="$dflt -posix"
3832                 fi
3833                 ;;
3834         esac
3835         case "$gccversion" in
3836         1*) ;;
3837         2.[0-8]*) ;;
3838         ?*)     echo " "
3839                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3840                 echo 'int main(void) { return 0; }' > gcctest.c
3841                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3842                         echo "Yes, it does." 2>&1
3843                         case "$ccflags" in
3844                         *strict-aliasing*) 
3845                                 echo "Leaving current flags $ccflags alone." 2>&1
3846                                 ;;
3847                         *) dflt="$dflt -fno-strict-aliasing" ;;
3848                         esac
3849                 else
3850                         echo "Nope, it doesn't, but that's ok." 2>&1
3851                 fi
3852                 ;;
3853         esac
3854         ;;
3855 esac
3856
3857 case "$mips_type" in
3858 *BSD*|'') inclwanted="$locincpth $usrinc";;
3859 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3860 esac
3861 for thisincl in $inclwanted; do
3862         if $test -d $thisincl; then
3863                 if $test x$thisincl != x$usrinc; then
3864                         case "$dflt" in
3865                         *" -I$thisincl "*);;
3866                         *) dflt="$dflt -I$thisincl ";;
3867                         esac
3868                 fi
3869         fi
3870 done
3871
3872 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3873         xxx=true;
3874 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3875         xxx=true;
3876 else
3877         xxx=false;
3878 fi;
3879 if $xxx; then
3880         case "$dflt" in
3881         *$2*);;
3882         *) dflt="$dflt -D$2";;
3883         esac;
3884 fi'
3885
3886 set signal.h LANGUAGE_C; eval $inctest
3887
3888 case "$usesocks" in
3889 $define)
3890         ccflags="$ccflags -DSOCKS"
3891         ;;
3892 esac
3893
3894 case "$hint" in
3895 default|recommended) dflt="$ccflags $dflt" ;;
3896 *) dflt="$ccflags";;
3897 esac
3898
3899 case "$dflt" in
3900 ''|' ') dflt=none;;
3901 esac
3902
3903 $cat <<EOH
3904
3905 Your C compiler may want other flags.  For this question you should include
3906 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3907 but you should NOT include libraries or ld flags like -lwhatever.  If you
3908 want $package to honor its debug switch, you should include -DDEBUGGING here.
3909 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3910
3911 To use no flags, specify the word "none".
3912
3913 EOH
3914 set X $dflt
3915 shift
3916 dflt=${1+"$@"}
3917 rp="Any additional cc flags?"
3918 . ./myread
3919 case "$ans" in
3920 none) ccflags='';;
3921 *) ccflags="$ans";;
3922 esac
3923
3924 : the following weeds options from ccflags that are of no interest to cpp
3925 cppflags="$ccflags"
3926 case "$gccversion" in
3927 1*) cppflags="$cppflags -D__GNUC__"
3928 esac
3929 case "$mips_type" in
3930 '');;
3931 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3932 esac
3933 case "$cppflags" in
3934 '');;
3935 *)
3936         echo " "
3937         echo "Let me guess what the preprocessor flags are..." >&4
3938         set X $cppflags
3939         shift
3940         cppflags=''
3941         $cat >cpp.c <<'EOM'
3942 #define BLURFL foo
3943
3944 BLURFL xx LFRULB
3945 EOM
3946         previous=''
3947         for flag in $*
3948         do
3949                 case "$flag" in
3950                 -*) ftry="$flag";;
3951                 *) ftry="$previous $flag";;
3952                 esac
3953                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3954                         >cpp1.out 2>/dev/null && \
3955                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3956                         >cpp2.out 2>/dev/null && \
3957                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3958                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3959                 then
3960                         cppflags="$cppflags $ftry"
3961                         previous=''
3962                 else
3963                         previous="$flag"
3964                 fi
3965         done
3966         set X $cppflags
3967         shift
3968         cppflags=${1+"$@"}
3969         case "$cppflags" in
3970         *-*)  echo "They appear to be: $cppflags";;
3971         esac
3972         $rm -f cpp.c cpp?.out
3973         ;;
3974 esac
3975
3976 : flags used in final linking phase
3977 case "$ldflags" in
3978 '') if ./venix; then
3979                 dflt='-i -z'
3980         else
3981                 dflt=''
3982         fi
3983         case "$ccflags" in
3984         *-posix*) dflt="$dflt -posix" ;;
3985         esac
3986         ;;
3987 *) dflt="$ldflags";;
3988 esac
3989
3990 : Try to guess additional flags to pick up local libraries.
3991 for thislibdir in $libpth; do
3992         case " $loclibpth " in
3993         *" $thislibdir "*)
3994                 case "$dflt " in 
3995                 *"-L$thislibdir "*) ;;
3996                 *)  dflt="$dflt -L$thislibdir" ;;
3997                 esac
3998                 ;;
3999         esac
4000 done
4001
4002 case "$dflt" in
4003 '') dflt='none' ;;
4004 esac
4005
4006 $cat <<EOH
4007
4008 Your C linker may need flags.  For this question you should
4009 include -L/whatever and any other flags used by the C linker, but you
4010 should NOT include libraries like -lwhatever.
4011
4012 Make sure you include the appropriate -L/path flags if your C linker
4013 does not normally search all of the directories you specified above,
4014 namely
4015         $libpth
4016 To use no flags, specify the word "none".
4017
4018 EOH
4019
4020 rp="Any additional ld flags (NOT including libraries)?"
4021 . ./myread
4022 case "$ans" in
4023 none) ldflags='';;
4024 *) ldflags="$ans";;
4025 esac
4026 rmlist="$rmlist pdp11"
4027
4028 : coherency check
4029 echo " "
4030 echo "Checking your choice of C compiler and flags for coherency..." >&4
4031 $cat > try.c <<'EOF'
4032 #include <stdio.h>
4033 int main() { printf("Ok\n"); exit(0); }
4034 EOF
4035 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4036 shift
4037 $cat >try.msg <<'EOM'
4038 I've tried to compile and run the following simple program:
4039
4040 EOM
4041 $cat try.c >> try.msg
4042
4043 $cat >> try.msg <<EOM
4044
4045 I used the command:
4046
4047         $*
4048         ./try
4049
4050 and I got the following output:
4051
4052 EOM
4053 dflt=y
4054 if sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4055         if sh -c './try' >>try.msg 2>&1; then
4056                 xxx=`./try`
4057                 case "$xxx" in
4058                 "Ok") dflt=n ;;
4059                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4060                         case " $libs " in
4061                         *" -lsfio "*)
4062                                 cat >> try.msg <<'EOQS'
4063 If $libs contains -lsfio, and sfio is mis-configured, then it
4064 sometimes (apparently) runs and exits with a 0 status, but with no
4065 output!  It may have to do with sfio's use of _exit vs. exit.
4066
4067 EOQS
4068                                 rp="You have a big problem.  Shall I abort Configure"
4069                                 dflt=y
4070                                 ;;
4071                         esac
4072                         ;;
4073                 esac
4074         else
4075                 echo "The program compiled OK, but exited with status $?." >>try.msg
4076                 rp="You have a problem.  Shall I abort Configure"
4077                 dflt=y
4078         fi
4079 else
4080         echo "I can't compile the test program." >>try.msg
4081         rp="You have a BIG problem.  Shall I abort Configure"
4082         dflt=y
4083 fi
4084 case "$dflt" in
4085 y)
4086         $cat try.msg >&4
4087         case "$knowitall" in
4088         '')
4089                 echo "(The supplied flags or libraries might be incorrect.)"
4090                 ;;
4091         *) dflt=n;;
4092         esac
4093         echo " "
4094         . ./myread
4095         case "$ans" in
4096         n*|N*) ;;
4097         *)      echo "Ok.  Stopping Configure." >&4
4098                 exit 1
4099                 ;;
4100         esac
4101         ;;
4102 n) echo "OK, that should do.";;
4103 esac
4104 $rm -f try try.* core
4105
4106 : define an is-a-typedef? function
4107 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4108 case "$inclist" in
4109 "") inclist="sys/types.h";;
4110 esac;
4111 eval "varval=\$$var";
4112 case "$varval" in
4113 "")
4114         $rm -f temp.c;
4115         for inc in $inclist; do
4116                 echo "#include <$inc>" >>temp.c;
4117         done;
4118         echo "#ifdef $type" >> temp.c;
4119         echo "printf(\"We have $type\");" >> temp.c;
4120         echo "#endif" >> temp.c;
4121         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4122         if $contains $type temp.E >/dev/null 2>&1; then
4123                 eval "$var=\$type";
4124         else
4125                 eval "$var=\$def";
4126         fi;
4127         $rm -f temp.?;;
4128 *) eval "$var=\$varval";;
4129 esac'
4130
4131 : define an is-a-typedef? function that prompts if the type is not available.
4132 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4133 case "$inclist" in
4134 "") inclist="sys/types.h";;
4135 esac;
4136 eval "varval=\$$var";
4137 case "$varval" in
4138 "")
4139         $rm -f temp.c;
4140         for inc in $inclist; do
4141                 echo "#include <$inc>" >>temp.c;
4142         done;
4143         echo "#ifdef $type" >> temp.c;
4144         echo "printf(\"We have $type\");" >> temp.c;
4145         echo "#endif" >> temp.c;
4146         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4147         echo " " ;
4148         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4149         if $contains $type temp.E >/dev/null 2>&1; then
4150                 echo "$type found." >&4;
4151                 eval "$var=\$type";
4152         else
4153                 echo "$type NOT found." >&4;
4154                 dflt="$def";
4155                 . ./myread ;
4156                 eval "$var=\$ans";
4157         fi;
4158         $rm -f temp.?;;
4159 *) eval "$var=\$varval";;
4160 esac'
4161
4162 : define a shorthand compile call
4163 compile='
4164 mc_file=$1;
4165 shift;
4166 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4167 : define a shorthand compile call for compilations that should be ok.
4168 compile_ok='
4169 mc_file=$1;
4170 shift;
4171 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4172
4173 : check for lengths of integral types
4174 echo " "
4175 case "$intsize" in
4176 '')
4177         echo "Checking to see how big your integers are..." >&4
4178         $cat >intsize.c <<'EOCP'
4179 #include <stdio.h>
4180 int main()
4181 {
4182         printf("intsize=%d;\n", (int)sizeof(int));
4183         printf("longsize=%d;\n", (int)sizeof(long));
4184         printf("shortsize=%d;\n", (int)sizeof(short));
4185         exit(0);
4186 }
4187 EOCP
4188         set intsize
4189         if eval $compile_ok && ./intsize > /dev/null; then
4190                 eval `./intsize`
4191                 echo "Your integers are $intsize bytes long."
4192                 echo "Your long integers are $longsize bytes long."
4193                 echo "Your short integers are $shortsize bytes long."
4194         else
4195                 $cat >&4 <<EOM
4196 !
4197 Help! I can't compile and run the intsize test program: please enlighten me!
4198 (This is probably a misconfiguration in your system or libraries, and
4199 you really ought to fix it.  Still, I'll try anyway.)
4200 !
4201 EOM
4202                 dflt=4
4203                 rp="What is the size of an integer (in bytes)?"
4204                 . ./myread
4205                 intsize="$ans"
4206                 dflt=$intsize
4207                 rp="What is the size of a long integer (in bytes)?"
4208                 . ./myread
4209                 longsize="$ans"
4210                 dflt=2
4211                 rp="What is the size of a short integer (in bytes)?"
4212                 . ./myread
4213                 shortsize="$ans"
4214         fi
4215         ;;
4216 esac
4217 $rm -f intsize intsize.*
4218
4219 : see what type lseek is declared as in the kernel
4220 rp="What is the type used for lseek's offset on this system?"
4221 set off_t lseektype long stdio.h sys/types.h
4222 eval $typedef_ask
4223
4224 echo " "
4225 echo "Checking to see how big your file offsets are..." >&4
4226 $cat >try.c <<EOCP
4227 #include <sys/types.h>
4228 #include <stdio.h>
4229 int main()
4230 {
4231     printf("%d\n", (int)sizeof($lseektype));
4232     return(0); 
4233 }
4234 EOCP
4235 set try
4236 if eval $compile_ok; then
4237         lseeksize=`./try`
4238         echo "Your file offsets are $lseeksize bytes long."
4239 else
4240         dflt=$longsize
4241         echo " "
4242         echo "(I can't seem to compile the test program.  Guessing...)"
4243         rp="What is the size of your file offsets (in bytes)?"
4244         . ./myread
4245         lseeksize="$ans"
4246 fi
4247 $rm -f try.c try
4248
4249 : see what type file positions are declared as in the library
4250 rp="What is the type for file position used by fsetpos()?"
4251 set fpos_t fpostype long stdio.h sys/types.h
4252 eval $typedef_ask
4253
4254 echo " "
4255 case "$fpostype" in
4256 *_t) zzz="$fpostype"    ;;
4257 *)   zzz="fpos_t"       ;;
4258 esac
4259 echo "Checking the size of $zzz..." >&4 
4260 cat > try.c <<EOCP
4261 #include <sys/types.h>
4262 #include <stdio.h>
4263 int main() {
4264     printf("%d\n", (int)sizeof($fpostype));
4265     exit(0);
4266 }
4267 EOCP
4268 set try
4269 if eval $compile_ok; then
4270         yyy=`./try`
4271         case "$yyy" in
4272         '')     fpossize=4
4273                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4274                 ;;
4275         *)      fpossize=$yyy
4276                 echo "Your $zzz is $fpossize bytes long."
4277                 ;;
4278         esac
4279 else
4280         dflt="$longsize"
4281         echo " " >&4
4282         echo "(I can't compile the test program.  Guessing...)" >&4
4283         rp="What is the size of your file positions (in bytes)?"
4284         . ./myread
4285         fpossize="$ans"
4286 fi
4287
4288
4289
4290 # Backward compatibility (uselfs is deprecated).
4291 case "$uselfs" in
4292 "$define"|true|[yY]*)
4293         cat <<EOM >&4
4294
4295 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4296 EOM
4297         uselargefiles="$define"
4298         ;;
4299 esac                          
4300
4301 case "$lseeksize:$fpossize" in
4302 8:8) cat <<EOM
4303
4304 You can have files larger than 2 gigabytes.
4305 EOM
4306    val="$define" ;;
4307 *)    case "$uselargefiles" in
4308    "$undef"|false|[nN]*) dflt='n' ;;
4309    *)   dflt='y' ;;
4310    esac
4311    cat <<EOM
4312
4313 Perl can be built to understand large files (files larger than 2 gigabytes)
4314 on some systems.  To do so, Configure can be run with -Duselargefiles.
4315
4316 If this doesn't make any sense to you, just accept the default '$dflt'.
4317 EOM
4318    rp='Try to understand large files, if available?'
4319    . ./myread
4320    case "$ans" in
4321    y|Y)         val="$define" ;;
4322    *)           val="$undef"  ;;
4323    esac
4324    ;;
4325 esac
4326 set uselargefiles
4327 eval $setvar
4328 case "$uselargefiles" in
4329 "$define")
4330 : Look for a hint-file generated 'call-back-unit'.  If the
4331 : user has specified that a large files perl is to be built,
4332 : we may need to set or change some other defaults.
4333         if $test -f uselargefiles.cbu; then
4334                 echo "Your platform has some specific hints for large file builds, using them..."
4335                 . ./uselargefiles.cbu
4336                 echo " "
4337                 echo "Rechecking to see how big your file offsets are..." >&4
4338                 $cat >try.c <<EOCP
4339 #include <sys/types.h>
4340 #include <stdio.h>
4341 int main()
4342 {
4343     printf("%d\n", (int)sizeof($lseektype));
4344     return(0); 
4345 }
4346 EOCP
4347                 set try
4348                 if eval $compile_ok; then
4349                         lseeksize=`./try`
4350                         $echo "Your file offsets are now $lseeksize bytes long."
4351                 else
4352                         dflt="$lseeksize"
4353                         echo " "
4354                         echo "(I can't seem to compile the test program.  Guessing...)"
4355                         rp="What is the size of your file offsets (in bytes)?"
4356                         . ./myread
4357                         lseeksize="$ans"
4358                 fi
4359                 case "$fpostype" in
4360                 *_t) zzz="$fpostype"    ;;
4361                 *)   zzz="fpos_t"       ;;
4362                 esac
4363                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4364                 $cat > try.c <<EOCP
4365 #include <sys/types.h>
4366 #include <stdio.h>
4367 int main() {
4368     printf("%d\n", (int)sizeof($fpostype));
4369     exit(0);
4370 }
4371 EOCP
4372                 set try
4373                 if eval $compile_ok; then
4374                         yyy=`./try`
4375                         dflt="$lseeksize"
4376                         case "$yyy" in
4377                         '')     echo " "
4378                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4379                                 ;;
4380                         *)      fpossize=$yyy
4381                                 echo " $fpossize bytes." >&4
4382                                 ;;
4383                         esac
4384                 else
4385                         dflt="$fpossize"
4386                         echo " "
4387                         echo "(I can't compile the test program.  Guessing...)" >&4
4388                         rp="What is the size of your file positions (in bytes)?"
4389                         . ./myread
4390                         fpossize="$ans"
4391                 fi
4392                 $rm -f try.c try
4393         fi
4394         ;;
4395 esac
4396
4397
4398 case "$usemorebits" in
4399 "$define"|true|[yY]*)
4400         use64bitint="$define"
4401         uselongdouble="$define"
4402         usemorebits="$define"
4403         ;;
4404 *)      usemorebits="$undef"
4405         ;;
4406 esac
4407
4408
4409 case "$uselonglong" in
4410 "$define"|true|[yY]*)
4411         cat <<EOM >&4
4412
4413 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4414 EOM
4415         use64bitint="$define"
4416         ;;
4417 esac                          
4418 case "$use64bits" in
4419 "$define"|true|[yY]*)
4420         cat <<EOM >&4
4421
4422 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4423 EOM
4424         use64bitint="$define"
4425         ;;
4426 esac                          
4427 case "$use64bitints" in
4428 "$define"|true|[yY]*)
4429         cat <<EOM >&4
4430
4431 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4432 EOM
4433         use64bitint="$define"
4434         ;;
4435 esac                          
4436 case "$use64bitsint" in
4437 "$define"|true|[yY]*)
4438         cat <<EOM >&4
4439
4440 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4441 EOM
4442         use64bitint="$define"
4443         ;;
4444 esac                          
4445 case "$uselonglongs" in
4446 "$define"|true|[yY]*)
4447         cat <<EOM >&4
4448
4449 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4450 EOM
4451         use64bitint="$define"
4452         ;;
4453 esac                          
4454 case "$use64bitsall" in
4455 "$define"|true|[yY]*)
4456         cat <<EOM >&4
4457
4458 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4459 EOM
4460         use64bitall="$define"
4461         ;;
4462 esac                          
4463
4464 case "$ccflags" in
4465 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4466 esac
4467 case "$use64bitall" in
4468 "$define"|true|[yY]*) use64bitint="$define" ;;
4469 esac
4470
4471 case "$longsize" in
4472 8) cat <<EOM
4473
4474 You have natively 64-bit long integers.
4475 EOM
4476    val="$define"
4477    ;;
4478 *) case "$use64bitint" in
4479    "$define"|true|[yY]*) dflt='y';;
4480    *) dflt='n';;
4481    esac
4482    cat <<EOM
4483
4484 Perl can be built to take advantage of 64-bit integer types
4485 on some systems.  To do so, Configure can be run with -Duse64bitint.
4486 Choosing this option will most probably introduce binary incompatibilities.
4487
4488 If this doesn't make any sense to you, just accept the default '$dflt'.
4489 EOM
4490    rp='Try to use 64-bit integers, if available?'
4491    . ./myread
4492    case "$ans" in
4493    [yY]*) val="$define" ;;
4494    *)     val="$undef"  ;;
4495    esac
4496    ;;
4497 esac
4498 set use64bitint
4499 eval $setvar
4500
4501 case "$use64bitall" in
4502 "$define"|true|[yY]*) dflt='y' ;;
4503 *) case "$longsize" in
4504    8) dflt='y' ;;
4505    *) dflt='n' ;;
4506    esac
4507    ;;
4508 esac    
4509 cat <<EOM
4510
4511 You may also choose to try maximal 64-bitness.  It means using as much
4512 64-bitness as possible on the platform.  This in turn means even more
4513 binary incompatibilities.  On the other hand, your platform may not
4514 have any more 64-bitness available than what you already have chosen.
4515
4516 If this doesn't make any sense to you, just accept the default '$dflt'.
4517 EOM
4518 rp='Try to use maximal 64-bit support, if available?'
4519 . ./myread
4520 case "$ans" in
4521 [yY]*) val="$define" ;;
4522 *)     val="$undef"  ;;
4523 esac
4524 set use64bitall
4525 eval $setvar
4526 case "$use64bitall" in
4527 "$define")
4528         case "$use64bitint" in
4529         "$undef")
4530                 cat <<EOM
4531
4532 Since you have chosen a maximally 64-bit build, I'm also turning on
4533 the use of 64-bit integers.
4534 EOM
4535                 use64bitint="$define" ;;
4536         esac
4537         ;;
4538 esac
4539
4540 case "$use64bitint" in
4541 "$define"|true|[yY]*)
4542 : Look for a hint-file generated 'call-back-unit'.  If the
4543 : user has specified that a 64-bit perl is to be built,
4544 : we may need to set or change some other defaults.
4545         if $test -f use64bitint.cbu; then
4546                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4547                 . ./use64bitint.cbu
4548         fi
4549         case "$longsize" in
4550         4) case "$archname64" in
4551            '') archname64=64int ;;
4552            esac
4553            ;;
4554         esac
4555         ;;
4556 esac
4557
4558 case "$use64bitall" in
4559 "$define"|true|[yY]*)
4560 : Look for a hint-file generated 'call-back-unit'.  If the
4561 : user has specified that a maximally 64-bit perl is to be built,
4562 : we may need to set or change some other defaults.
4563         if $test -f use64bitall.cbu; then
4564                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4565                 . ./use64bitall.cbu
4566         fi
4567         case "$longsize" in
4568         4) case "$archname64" in
4569            ''|64int) archname64=64all ;;
4570            esac
4571            ;;
4572         esac
4573         ;;
4574 esac
4575
4576 echo " "
4577 echo "Checking for GNU C Library..." >&4
4578 cat >gnulibc.c <<EOM
4579 #include <stdio.h>
4580 int main()
4581 {
4582 #ifdef __GLIBC__
4583     exit(0);
4584 #else
4585     exit(1);
4586 #endif
4587 }
4588 EOM
4589 set gnulibc
4590 if eval $compile_ok && ./gnulibc; then
4591         val="$define"
4592         echo "You are using the GNU C Library"
4593 else
4594         val="$undef"
4595         echo "You are not using the GNU C Library"
4596 fi
4597 $rm -f gnulibc*
4598 set d_gnulibc
4599 eval $setvar
4600
4601 : see if nm is to be used to determine whether a symbol is defined or not
4602 case "$usenm" in
4603 '')
4604         dflt=''
4605         case "$d_gnulibc" in
4606         "$define")
4607                 echo " "
4608                 echo "nm probably won't work on the GNU C Library." >&4
4609                 dflt=n
4610                 ;;
4611         esac
4612         case "$dflt" in
4613         '') 
4614                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4615                         echo " "
4616                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4617                         echo "'nm' won't be sufficient on this sytem." >&4
4618                         dflt=n
4619                 fi
4620                 ;;
4621         esac
4622         case "$dflt" in
4623         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4624                 if $test $dflt -gt 20; then
4625                         dflt=y
4626                 else
4627                         dflt=n
4628                 fi
4629                 ;;
4630         esac
4631         ;;
4632 *)
4633         case "$usenm" in
4634         true|$define) dflt=y;;
4635         *) dflt=n;;
4636         esac
4637         ;;
4638 esac
4639 $cat <<EOM
4640
4641 I can use $nm to extract the symbols from your C libraries. This
4642 is a time consuming task which may generate huge output on the disk (up
4643 to 3 megabytes) but that should make the symbols extraction faster. The
4644 alternative is to skip the 'nm' extraction part and to compile a small
4645 test program instead to determine whether each symbol is present. If
4646 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4647 this may be the best solution.
4648
4649 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4650
4651 EOM
4652 rp="Shall I use $nm to extract C symbols from the libraries?"
4653 . ./myread
4654 case "$ans" in
4655 [Nn]*) usenm=false;;
4656 *) usenm=true;;
4657 esac
4658
4659 runnm=$usenm
4660 case "$reuseval" in
4661 true) runnm=false;;
4662 esac
4663
4664 : nm options which may be necessary
4665 case "$nm_opt" in
4666 '') if $test -f /mach_boot; then
4667                 nm_opt=''       # Mach
4668         elif $test -d /usr/ccs/lib; then
4669                 nm_opt='-p'     # Solaris (and SunOS?)
4670         elif $test -f /dgux; then
4671                 nm_opt='-p'     # DG-UX
4672         elif $test -f /lib64/rld; then
4673                 nm_opt='-p'     # 64-bit Irix
4674         else
4675                 nm_opt=''
4676         fi;;
4677 esac
4678
4679 : nm options which may be necessary for shared libraries but illegal
4680 : for archive libraries.  Thank you, Linux.
4681 case "$nm_so_opt" in
4682 '')     case "$myuname" in
4683         *linux*)
4684                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4685                         nm_so_opt='--dynamic'
4686                 fi
4687                 ;;
4688         esac
4689         ;;
4690 esac
4691
4692 case "$runnm" in
4693 true)
4694 : get list of predefined functions in a handy place
4695 echo " "
4696 case "$libc" in
4697 '') libc=unknown
4698         case "$libs" in
4699         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4700         esac
4701         ;;
4702 esac
4703 libnames='';
4704 case "$libs" in
4705 '') ;;
4706 *)  for thislib in $libs; do
4707         case "$thislib" in
4708         -lc|-lc_s)
4709                 : Handle C library specially below.
4710                 ;;
4711         -l*)
4712                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4713                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4714                         :
4715                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4716                         :
4717                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4718                         :
4719                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4720                         :
4721                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4722                         :
4723                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4724                         :
4725                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4726                         :
4727                 else
4728                         try=''
4729                 fi
4730                 libnames="$libnames $try"
4731                 ;;
4732         *) libnames="$libnames $thislib" ;;
4733         esac
4734         done
4735         ;;
4736 esac
4737 xxx=normal
4738 case "$libc" in
4739 unknown)
4740         set /lib/libc.$so
4741         for xxx in $libpth; do
4742                 $test -r $1 || set $xxx/libc.$so
4743                 : The messy sed command sorts on library version numbers.
4744                 $test -r $1 || \
4745                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4746                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4747                                 h
4748                                 s/[0-9][0-9]*/0000&/g
4749                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4750                                 G
4751                                 s/\n/ /' | \
4752                          $sort | $sed -e 's/^.* //'`
4753                 eval set \$$#
4754         done
4755         $test -r $1 || set /usr/ccs/lib/libc.$so
4756         $test -r $1 || set /lib/libsys_s$_a
4757         ;;
4758 *)
4759         set blurfl
4760         ;;
4761 esac
4762 if $test -r "$1"; then
4763         echo "Your (shared) C library seems to be in $1."
4764         libc="$1"
4765 elif $test -r /lib/libc && $test -r /lib/clib; then
4766         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4767         xxx=apollo
4768         libc='/lib/clib /lib/libc'
4769         if $test -r /lib/syslib; then
4770                 echo "(Your math library is in /lib/syslib.)"
4771                 libc="$libc /lib/syslib"
4772         fi
4773 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4774         echo "Your C library seems to be in $libc, as you said before."
4775 elif $test -r $incpath/usr/lib/libc$_a; then
4776         libc=$incpath/usr/lib/libc$_a;
4777         echo "Your C library seems to be in $libc.  That's fine."
4778 elif $test -r /lib/libc$_a; then
4779         libc=/lib/libc$_a;
4780         echo "Your C library seems to be in $libc.  You're normal."
4781 else
4782         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4783                 :
4784         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4785                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4786         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4787                 :
4788         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4789                 :
4790         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4791                 :
4792         else
4793                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4794         fi
4795         if $test -r "$tans"; then
4796                 echo "Your C library seems to be in $tans, of all places."
4797                 libc=$tans
4798         else
4799                 libc='blurfl'
4800         fi
4801 fi
4802 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4803         dflt="$libc"
4804         cat <<EOM
4805
4806 If the guess above is wrong (which it might be if you're using a strange
4807 compiler, or your machine supports multiple models), you can override it here.
4808
4809 EOM
4810 else
4811         dflt=''
4812         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
4813         cat >&4 <<EOM
4814 I can't seem to find your C library.  I've looked in the following places:
4815
4816 EOM
4817         $sed 's/^/      /' libpath
4818         cat <<EOM
4819
4820 None of these seems to contain your C library. I need to get its name...
4821
4822 EOM
4823 fi
4824 fn=f
4825 rp='Where is your C library?'
4826 . ./getfile
4827 libc="$ans"
4828
4829 echo " "
4830 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
4831 set X `cat libnames`
4832 shift
4833 xxx=files
4834 case $# in 1) xxx=file; esac
4835 echo "Extracting names from the following $xxx for later perusal:" >&4
4836 echo " "
4837 $sed 's/^/      /' libnames >&4
4838 echo " "
4839 $echo $n "This may take a while...$c" >&4
4840
4841 for file in $*; do
4842         case $file in
4843         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4844         *) $nm $nm_opt $file 2>/dev/null;;
4845         esac
4846 done >libc.tmp
4847
4848 $echo $n ".$c"
4849 $grep fprintf libc.tmp > libc.ptf
4850 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4851 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4852 xxx='[ADTSIW]'
4853 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4854         eval $xscan;\
4855         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4856                 eval $xrun
4857 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4858         eval $xscan;\
4859         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4860                 eval $xrun
4861 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4862         eval $xscan;\
4863         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4864                 eval $xrun
4865 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4866         eval $xscan;\
4867         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4868                 eval $xrun
4869 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4870         eval $xscan;\
4871         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4872                 eval $xrun
4873 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4874         eval $xscan;\
4875         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4876                 eval $xrun
4877 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4878                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4879         eval $xscan;\
4880         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4881                 eval $xrun
4882 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4883         eval $xscan;\
4884         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4885                 eval $xrun
4886 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4887         eval $xscan;\
4888         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4889                 eval $xrun
4890 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4891         eval $xscan;\
4892         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4893                 eval $xrun
4894 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4895         eval $xscan;\
4896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4897                 eval $xrun
4898 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4899         eval $xscan;\
4900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4901                 eval $xrun
4902 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4903         eval $xscan;\
4904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4905                 eval $xrun
4906 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4907         eval $xscan;\
4908         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4909                 eval $xrun
4910 else
4911         $nm -p $* 2>/dev/null >libc.tmp
4912         $grep fprintf libc.tmp > libc.ptf
4913         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4914                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4915         then
4916                 nm_opt='-p'
4917                 eval $xrun
4918         else
4919                 echo " "
4920                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4921                 com=''
4922                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4923                         for thisname in $libnames $libc; do
4924                                 $ar t $thisname >>libc.tmp
4925                         done
4926                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4927                         echo "Ok." >&4
4928                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4929                         # Repeat libc to extract forwarders to DLL entries too
4930                         for thisname in $libnames $libc; do
4931                                 $ar tv $thisname >>libc.tmp
4932                                 # Revision 50 of EMX has bug in $ar.
4933                                 # it will not extract forwarders to DLL entries
4934                                 # Use emximp which will extract exactly them.
4935                                 emximp -o tmp.imp $thisname \
4936                                     2>/dev/null && \
4937                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4938                                     < tmp.imp >>libc.tmp
4939                                 $rm tmp.imp
4940                         done
4941                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4942                         echo "Ok." >&4
4943                 else
4944                         echo "$ar didn't seem to work right." >&4
4945                         echo "Maybe this is a Cray...trying bld instead..." >&4
4946                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4947                         then
4948                                 for thisname in $libnames; do
4949                                         bld t $libnames | \
4950                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4951                                         $ar t $thisname >>libc.tmp
4952                                 done
4953                                 echo "Ok." >&4
4954                         else
4955                                 echo "That didn't work either.  Giving up." >&4
4956                                 exit 1
4957                         fi
4958                 fi
4959         fi
4960 fi
4961 nm_extract="$com"
4962 if $test -f /lib/syscalls.exp; then
4963         echo " "
4964         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4965         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4966 fi
4967 ;;
4968 esac
4969 $rm -f libnames libpath
4970
4971 : is a C symbol defined?
4972 csym='tlook=$1;
4973 case "$3" in
4974 -v) tf=libc.tmp; tc=""; tdc="";;
4975 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4976 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4977 esac;
4978 tx=yes;
4979 case "$reuseval-$4" in
4980 true-) ;;
4981 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4982 esac;
4983 case "$tx" in
4984 yes)
4985         case "$runnm" in
4986         true)
4987                 if $contains $tlook $tf >/dev/null 2>&1;
4988                 then tval=true;
4989                 else tval=false;
4990                 fi;;
4991         *)
4992                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
4993                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
4994                 then tval=true;
4995                 else tval=false;
4996                 fi;
4997                 $rm -f t t.c;;
4998         esac;;
4999 *)
5000         case "$tval" in
5001         $define) tval=true;;
5002         *) tval=false;;
5003         esac;;
5004 esac;
5005 eval "$2=$tval"'
5006
5007 : define an is-in-libc? function
5008 inlibc='echo " "; td=$define; tu=$undef;
5009 sym=$1; var=$2; eval "was=\$$2";
5010 tx=yes;
5011 case "$reuseval$was" in
5012 true) ;;
5013 true*) tx=no;;
5014 esac;
5015 case "$tx" in
5016 yes)
5017         set $sym tres -f;
5018         eval $csym;
5019         case "$tres" in
5020         true)
5021                 echo "$sym() found." >&4;
5022                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5023         *)
5024                 echo "$sym() NOT found." >&4;
5025                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5026         esac;;
5027 *)
5028         case "$was" in
5029         $define) echo "$sym() found." >&4;;
5030         *) echo "$sym() NOT found." >&4;;
5031         esac;;
5032 esac'
5033
5034 : see if sqrtl exists
5035 set sqrtl d_sqrtl
5036 eval $inlibc
5037
5038 case "$ccflags" in
5039 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5040 esac
5041
5042 case "$uselongdouble" in
5043 $define|true|[yY]*)     dflt='y';;
5044 *) dflt='n';;
5045 esac
5046 cat <<EOM
5047
5048 Perl can be built to take advantage of long doubles which
5049 (if available) may give more accuracy and range for floating point numbers.
5050
5051 If this doesn't make any sense to you, just accept the default '$dflt'.
5052 EOM
5053 rp='Try to use long doubles if available?'
5054 . ./myread
5055 case "$ans" in
5056 y|Y)    val="$define"   ;;
5057 *)      val="$undef"    ;;
5058 esac
5059 set uselongdouble
5060 eval $setvar
5061
5062 case "$uselongdouble" in
5063 true|[yY]*) uselongdouble="$define" ;;
5064 esac
5065
5066 case "$uselongdouble" in
5067 $define)
5068 : Look for a hint-file generated 'call-back-unit'.  If the
5069 : user has specified that long doubles should be used,
5070 : we may need to set or change some other defaults.
5071         if $test -f uselongdouble.cbu; then
5072                 echo "Your platform has some specific hints for long doubles, using them..."
5073                 . ./uselongdouble.cbu
5074         else
5075                 $cat <<EOM
5076 (Your platform doesn't have any specific hints for long doubles.)
5077 EOM
5078         fi
5079         ;;
5080 esac
5081
5082 case "$uselongdouble:$d_sqrtl" in
5083 $define:$undef)
5084                 $cat <<EOM >&4
5085
5086 *** You requested the use of long doubles but you do not seem to have
5087 *** the mathematic functions for long doubles.  I'm disabling the use
5088 *** of long doubles.
5089
5090 EOM
5091         uselongdouble=$undef
5092         ;;
5093 esac
5094
5095 : check for length of double
5096 echo " "
5097 case "$doublesize" in
5098 '')
5099         echo "Checking to see how big your double precision numbers are..." >&4
5100         $cat >try.c <<'EOCP'
5101 #include <stdio.h>
5102 int main()
5103 {
5104     printf("%d\n", (int)sizeof(double));
5105     exit(0);
5106 }
5107 EOCP
5108         set try
5109         if eval $compile_ok; then
5110                 doublesize=`./try`
5111                 echo "Your double is $doublesize bytes long."
5112         else
5113                 dflt='8'
5114                 echo "(I can't seem to compile the test program.  Guessing...)"
5115                 rp="What is the size of a double precision number (in bytes)?"
5116                 . ./myread
5117                 doublesize="$ans"
5118         fi
5119         ;;
5120 esac
5121 $rm -f try.c try
5122
5123 : check for long doubles
5124 echo " "
5125 echo "Checking to see if you have long double..." >&4
5126 echo 'int main() { long double x = 7.0; }' > try.c
5127 set try
5128 if eval $compile; then
5129         val="$define"
5130         echo "You have long double."
5131 else
5132         val="$undef"
5133         echo "You do not have long double."
5134 fi
5135 $rm try.*
5136 set d_longdbl
5137 eval $setvar
5138
5139 : check for length of long double
5140 case "${d_longdbl}${longdblsize}" in
5141 $define)
5142         echo " "
5143         echo "Checking to see how big your long doubles are..." >&4
5144         $cat >try.c <<'EOCP'
5145 #include <stdio.h>
5146 int main()
5147 {
5148         printf("%d\n", sizeof(long double));
5149 }
5150 EOCP
5151         set try
5152         set try
5153         if eval $compile; then
5154                 longdblsize=`./try$exe_ext`
5155                 echo "Your long doubles are $longdblsize bytes long."
5156         else
5157                 dflt='8'
5158                 echo " "
5159                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5160                 rp="What is the size of a long double (in bytes)?"
5161                 . ./myread
5162                 longdblsize="$ans"
5163         fi
5164         if $test "X$doublesize" = "X$longdblsize"; then
5165                 echo "(That isn't any different from an ordinary double.)"
5166         fi      
5167         ;;
5168 esac
5169 $rm -f try.* try
5170
5171 : determine the architecture name
5172 echo " "
5173 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5174         tarch=`arch`"-$osname"
5175 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5176         if uname -m > tmparch 2>&1 ; then
5177                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5178                         -e 's/$/'"-$osname/" tmparch`
5179         else
5180                 tarch="$osname"
5181         fi
5182         $rm -f tmparch
5183 else
5184         tarch="$osname"
5185 fi
5186 case "$myarchname" in
5187 ''|"$tarch") ;;
5188 *)
5189         echo "(Your architecture name used to be $myarchname.)"
5190         archname=''
5191         ;;
5192 esac
5193 myarchname="$tarch"
5194 case "$archname" in
5195 '') dflt="$tarch";;
5196 *) dflt="$archname";;
5197 esac
5198 rp='What is your architecture name'
5199 . ./myread
5200 archname="$ans"
5201 case "$usethreads" in
5202 $define)
5203         echo "Threads selected." >&4
5204         case "$archname" in
5205         *-thread*) echo "...and architecture name already has -thread." >&4
5206                 ;;
5207         *)      archname="$archname-thread"
5208                 echo "...setting architecture name to $archname." >&4
5209                 ;;
5210         esac
5211         ;;
5212 esac
5213 case "$usemultiplicity" in
5214 $define)
5215         echo "Multiplicity selected." >&4
5216         case "$archname" in
5217         *-multi*) echo "...and architecture name already has -multi." >&4
5218                 ;;
5219         *)      archname="$archname-multi"
5220                 echo "...setting architecture name to $archname." >&4
5221                 ;;
5222         esac
5223         ;;
5224 esac
5225 case "$use64bitint$use64bitall" in
5226 *"$define"*)
5227         case "$archname64" in
5228         '')
5229                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5230                 ;;
5231         *)
5232                 case "$use64bitint" in
5233                 "$define") echo "64 bit integers selected." >&4 ;;
5234                 esac
5235                 case "$use64bitall" in
5236                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5237                 esac
5238                 case "$archname" in
5239                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5240                         ;;
5241                 *)      archname="$archname-$archname64"
5242                         echo "...setting architecture name to $archname." >&4
5243                         ;;
5244                 esac
5245                 ;;
5246         esac
5247 esac
5248 case "$uselongdouble" in
5249 $define)
5250         echo "Long doubles selected." >&4
5251         case "$longdblsize" in
5252         $doublesize)
5253                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5254                 ;;
5255         *)
5256                 case "$archname" in
5257                 *-ld*) echo "...and architecture name already has -ld." >&4
5258                         ;;
5259                 *)      archname="$archname-ld"
5260                         echo "...setting architecture name to $archname." >&4
5261                         ;;
5262                 esac
5263                 ;;
5264         esac
5265         ;;
5266 esac
5267
5268 : determine root of directory hierarchy where package will be installed.
5269 case "$prefix" in
5270 '')
5271         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5272         ;;
5273 *)
5274         dflt="$prefix"
5275         ;;
5276 esac
5277 $cat <<EOM
5278
5279 By default, $package will be installed in $dflt/bin, manual pages
5280 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5281 installation directories. Typically this is something like /usr/local.
5282 If you wish to have binaries under /usr/bin but other parts of the
5283 installation under /usr/local, that's ok: you will be prompted
5284 separately for each of the installation directories, the prefix being
5285 only used to set the defaults.
5286
5287 EOM
5288 fn=d~
5289 rp='Installation prefix to use?'
5290 . ./getfile
5291 oldprefix=''
5292 case "$prefix" in
5293 '') ;;
5294 *)
5295         case "$ans" in
5296         "$prefix") ;;
5297         *) oldprefix="$prefix";;
5298         esac
5299         ;;
5300 esac
5301 prefix="$ans"
5302 prefixexp="$ansexp"
5303
5304 : is AFS running?
5305 echo " "
5306 case "$afs" in
5307 $define|true)   afs=true ;;
5308 $undef|false)   afs=false ;;
5309 *)      if test -d /afs; then
5310                 afs=true
5311         else
5312                 afs=false
5313         fi
5314         ;;
5315 esac
5316 if $afs; then
5317         echo "AFS may be running... I'll be extra cautious then..." >&4
5318 else
5319         echo "AFS does not seem to be running..." >&4
5320 fi
5321
5322 : determine installation prefix for where package is to be installed.
5323 if $afs; then 
5324 $cat <<EOM
5325
5326 Since you are running AFS, I need to distinguish the directory in which
5327 files will reside from the directory in which they are installed (and from
5328 which they are presumably copied to the former directory by occult means).
5329
5330 EOM
5331         case "$installprefix" in
5332         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5333         *) dflt="$installprefix";;
5334         esac
5335 else
5336 $cat <<EOM
5337
5338 In some special cases, particularly when building $package for distribution,
5339 it is convenient to distinguish between the directory in which files should 
5340 be installed from the directory ($prefix) in which they 
5341 will eventually reside.  For most users, these two directories are the same.
5342
5343 EOM
5344         case "$installprefix" in
5345         '') dflt=$prefix ;;
5346         *) dflt=$installprefix;;
5347         esac
5348 fi
5349 fn=d~
5350 rp='What installation prefix should I use for installing files?'
5351 . ./getfile
5352 installprefix="$ans"
5353 installprefixexp="$ansexp"
5354
5355 : set the prefixit variable, to compute a suitable default value
5356 prefixit='case "$3" in
5357 ""|none)
5358         case "$oldprefix" in
5359         "") eval "$1=\"\$$2\"";;
5360         *)
5361                 case "$3" in
5362                 "") eval "$1=";;
5363                 none)
5364                         eval "tp=\"\$$2\"";
5365                         case "$tp" in
5366                         ""|" ") eval "$1=\"\$$2\"";;
5367                         *) eval "$1=";;
5368                         esac;;
5369                 esac;;
5370         esac;;
5371 *)
5372         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5373         case "$tp" in
5374         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5375         /*-$oldprefix/*|\~*-$oldprefix/*)
5376                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5377         *) eval "$1=\"\$$2\"";;
5378         esac;;
5379 esac'
5380
5381
5382 : get the patchlevel
5383 echo " "
5384 echo "Getting the current patchlevel..." >&4
5385 if $test -r $rsrc/patchlevel.h;then
5386         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5387         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5388         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5389         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5390         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5391         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5392 else
5393         revision=0
5394         patchlevel=0
5395         subversion=0
5396         api_revision=0
5397         api_version=0
5398         api_subversion=0
5399 fi
5400 $echo "(You have $package version $patchlevel subversion $subversion.)"
5401 case "$osname" in
5402 dos|vms)
5403         : XXX Should be a Configure test for double-dots in filenames.
5404         version=`echo $revision $patchlevel $subversion | \
5405                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5406         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5407                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5408         ;;
5409 *)
5410         version=`echo $revision $patchlevel $subversion | \
5411                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5412         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5413                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5414         ;;
5415 esac
5416 : Special case the 5.005_xx maintenance series, which used 5.005
5417 : without any subversion label as a subdirectory in $sitelib
5418 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5419         api_versionstring='5.005'
5420 fi
5421
5422 : determine installation style
5423 : For now, try to deduce it from prefix unless it is already set.
5424 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5425 case "$installstyle" in
5426 '')     case "$prefix" in
5427                 *perl*) dflt='lib';;
5428                 *) dflt='lib/perl5' ;;
5429         esac
5430         ;;
5431 *)      dflt="$installstyle" ;;
5432 esac
5433 : Probably not worth prompting for this since we prompt for all
5434 : the directories individually, and the prompt would be too long and
5435 : confusing anyway.
5436 installstyle=$dflt
5437
5438 : determine where private library files go
5439 : Usual default is /usr/local/lib/perl5/$version.
5440 : Also allow things like /opt/perl/lib/$version, since 
5441 : /opt/perl/lib/perl5... would be redundant.
5442 : The default "style" setting is made in installstyle.U
5443 case "$installstyle" in
5444 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5445 *)       set dflt privlib lib/$version ;;
5446 esac
5447 eval $prefixit
5448 $cat <<EOM
5449
5450 There are some auxiliary files for $package that need to be put into a
5451 private library directory that is accessible by everyone.
5452
5453 EOM
5454 fn=d~+
5455 rp='Pathname where the private library files will reside?'
5456 . ./getfile
5457 privlib="$ans"
5458 privlibexp="$ansexp"
5459 : Change installation prefix, if necessary.
5460 if $test X"$prefix" != X"$installprefix"; then
5461         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5462 else
5463         installprivlib="$privlibexp"
5464 fi
5465
5466 : set the prefixup variable, to restore leading tilda escape
5467 prefixup='case "$prefixexp" in
5468 "$prefix") ;;
5469 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5470 esac'
5471
5472 : determine where public architecture dependent libraries go
5473 set archlib archlib
5474 eval $prefixit
5475 : privlib default is /usr/local/lib/$package/$version
5476 : archlib default is /usr/local/lib/$package/$version/$archname
5477 : privlib may have an optional trailing /share.
5478 tdflt=`echo $privlib | $sed 's,/share$,,'`
5479 tdflt=$tdflt/$archname
5480 case "$archlib" in
5481 '')     dflt=$tdflt
5482         ;;
5483 *)      dflt="$archlib"
5484     ;;
5485 esac
5486 $cat <<EOM
5487
5488 $spackage contains architecture-dependent library files.  If you are
5489 sharing libraries in a heterogeneous environment, you might store
5490 these files in a separate location.  Otherwise, you can just include
5491 them with the rest of the public library files.
5492
5493 EOM
5494 fn=d+~
5495 rp='Where do you want to put the public architecture-dependent libraries?'
5496 . ./getfile
5497 archlib="$ans"
5498 archlibexp="$ansexp"
5499 if $test X"$archlib" = X"$privlib"; then
5500         d_archlib="$undef"
5501 else
5502         d_archlib="$define"
5503 fi
5504 : Change installation prefix, if necessary.
5505 if $test X"$prefix" != X"$installprefix"; then
5506         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5507 else
5508         installarchlib="$archlibexp"
5509 fi
5510
5511
5512 : Binary compatibility with 5.005 is not possible for builds
5513 : with advanced features
5514 case "$usethreads$usemultiplicity" in
5515 *define*)
5516         bincompat5005="$undef"
5517         d_bincompat5005="$undef"
5518         ;;
5519 *)      $cat <<EOM
5520
5521 This version of Perl can be compiled for binary compatibility with 5.005.
5522 If you decide to do so, you will be able to continue using most of the
5523 extensions that were compiled for Perl 5.005.
5524
5525 EOM
5526         case "$bincompat5005$d_bincompat5005" in
5527         *"$undef"*) dflt=n ;;
5528         *) dflt=y ;;
5529         esac
5530         rp='Binary compatibility with Perl 5.005?'
5531         . ./myread
5532         case "$ans" in
5533         y*) val="$define" ;;
5534         *)  val="$undef" ;;
5535         esac
5536         set d_bincompat5005
5537         eval $setvar
5538         case "$d_bincompat5005" in
5539         "$define")
5540                 bincompat5005="$define"
5541                 ;;
5542         *)      bincompat5005="$undef"
5543                 d_bincompat5005="$undef"
5544                 ;;
5545         esac
5546         ;;
5547 esac
5548
5549
5550 : see if setuid scripts can be secure
5551 $cat <<EOM
5552
5553 Some kernels have a bug that prevents setuid #! scripts from being
5554 secure.  Some sites have disabled setuid #! scripts because of this.
5555
5556 First let's decide if your kernel supports secure setuid #! scripts.
5557 (If setuid #! scripts would be secure but have been disabled anyway,
5558 don't say that they are secure if asked.)
5559
5560 EOM
5561
5562 val="$undef"
5563 if $test -d /dev/fd; then
5564         echo "#!$ls" >reflect
5565         chmod +x,u+s reflect
5566         ./reflect >flect 2>&1
5567         if $contains "/dev/fd" flect >/dev/null; then
5568                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5569                 val="$define"
5570         else
5571                 $cat <<EOM
5572 If you are not sure if they are secure, I can check but I'll need a
5573 username and password different from the one you are using right now.
5574 If you don't have such a username or don't want me to test, simply
5575 enter 'none'.
5576
5577 EOM
5578                 rp='Other username to test security of setuid scripts with?'
5579                 dflt='none'
5580                 . ./myread
5581                 case "$ans" in
5582                 n|none)
5583                         case "$d_suidsafe" in
5584                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5585                                 dflt=n;;
5586                         "$undef")
5587                                 echo "Well, the $hint value is *not* secure." >&4
5588                                 dflt=n;;
5589                         *)      echo "Well, the $hint value *is* secure." >&4
5590                                 dflt=y;;
5591                         esac
5592                         ;;
5593                 *)
5594                         $rm -f reflect flect
5595                         echo "#!$ls" >reflect
5596                         chmod +x,u+s reflect
5597                         echo >flect
5598                         chmod a+w flect
5599                         echo '"su" will (probably) prompt you for '"$ans's password."
5600                         su $ans -c './reflect >flect'
5601                         if $contains "/dev/fd" flect >/dev/null; then
5602                                 echo "Okay, it looks like setuid scripts are secure." >&4
5603                                 dflt=y
5604                         else
5605                                 echo "I don't think setuid scripts are secure." >&4
5606                                 dflt=n
5607                         fi
5608                         ;;
5609                 esac
5610                 rp='Does your kernel have *secure* setuid scripts?'
5611                 . ./myread
5612                 case "$ans" in
5613                 [yY]*)  val="$define";;
5614                 *)      val="$undef";;
5615                 esac
5616         fi
5617 else
5618         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5619         echo "(That's for file descriptors, not floppy disks.)"
5620         val="$undef"
5621 fi
5622 set d_suidsafe
5623 eval $setvar
5624
5625 $rm -f reflect flect
5626
5627 : now see if they want to do setuid emulation
5628 echo " "
5629 val="$undef"
5630 case "$d_suidsafe" in
5631 "$define")
5632         val="$undef"
5633         echo "No need to emulate SUID scripts since they are secure here." >& 4
5634         ;;
5635 *)
5636         $cat <<EOM
5637 Some systems have disabled setuid scripts, especially systems where
5638 setuid scripts cannot be secure.  On systems where setuid scripts have
5639 been disabled, the setuid/setgid bits on scripts are currently
5640 useless.  It is possible for $package to detect those bits and emulate
5641 setuid/setgid in a secure fashion.  This emulation will only work if
5642 setuid scripts have been disabled in your kernel.
5643
5644 EOM
5645         case "$d_dosuid" in
5646         "$define") dflt=y ;;
5647         *) dflt=n ;;
5648         esac
5649         rp="Do you want to do setuid/setgid emulation?"
5650         . ./myread
5651         case "$ans" in
5652         [yY]*)  val="$define";;
5653         *)      val="$undef";;
5654         esac
5655         ;;
5656 esac
5657 set d_dosuid
5658 eval $setvar
5659
5660 : determine filename position in cpp output
5661 echo " "
5662 echo "Computing filename position in cpp output for #include directives..." >&4
5663 echo '#include <stdio.h>' > foo.c
5664 $cat >fieldn <<EOF
5665 $startsh
5666 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5667 $grep '^[       ]*#.*stdio\.h' | \
5668 while read cline; do
5669         pos=1
5670         set \$cline
5671         while $test \$# -gt 0; do
5672                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5673                         echo "\$pos"
5674                         exit 0
5675                 fi
5676                 shift
5677                 pos=\`expr \$pos + 1\`
5678         done
5679 done
5680 EOF
5681 chmod +x fieldn
5682 fieldn=`./fieldn`
5683 $rm -f foo.c fieldn
5684 case $fieldn in
5685 '') pos='???';;
5686 1) pos=first;;
5687 2) pos=second;;
5688 3) pos=third;;
5689 *) pos="${fieldn}th";;
5690 esac
5691 echo "Your cpp writes the filename in the $pos field of the line."
5692
5693 : locate header file
5694 $cat >findhdr <<EOF
5695 $startsh
5696 wanted=\$1
5697 name=''
5698 for usrincdir in $usrinc
5699 do
5700         if test -f \$usrincdir/\$wanted; then
5701                 echo "\$usrincdir/\$wanted"
5702                 exit 0
5703         fi
5704 done
5705 awkprg='{ print \$$fieldn }'
5706 echo "#include <\$wanted>" > foo\$\$.c
5707 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5708 $grep "^[       ]*#.*\$wanted" | \
5709 while read cline; do
5710         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5711         case "\$name" in
5712         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5713         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5714         *) exit 2;;
5715         esac;
5716 done;
5717 #
5718 # status = 0: grep returned 0 lines, case statement not executed
5719 # status = 1: headerfile found
5720 # status = 2: while loop executed, no headerfile found
5721 #
5722 status=\$?
5723 $rm -f foo\$\$.c;
5724 if test \$status -eq 1; then
5725         exit 0;
5726 fi
5727 exit 1
5728 EOF
5729 chmod +x findhdr
5730
5731 : define an alternate in-header-list? function
5732 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5733 cont=true; xxf="echo \"<\$1> found.\" >&4";
5734 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5735 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5736 esac;
5737 case $# in 4) instead=instead;; *) instead="at last";; esac;
5738 while $test "$cont"; do
5739         xxx=`./findhdr $1`
5740         var=$2; eval "was=\$$2";
5741         if $test "$xxx" && $test -r "$xxx";
5742         then eval $xxf;
5743         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5744                 cont="";
5745         else eval $xxnf;
5746         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5747         set $yyy; shift; shift; yyy=$@;
5748         case $# in 0) cont="";;
5749         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5750                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5751         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5752                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5753         esac;
5754 done;
5755 while $test "$yyy";
5756 do set $yyy; var=$2; eval "was=\$$2";
5757         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5758         set $yyy; shift; shift; yyy=$@;
5759 done'
5760
5761 : see if this is a malloc.h system
5762 set malloc.h i_malloc
5763 eval $inhdr
5764
5765 : see if stdlib is available
5766 set stdlib.h i_stdlib
5767 eval $inhdr
5768
5769 : determine which malloc to compile in
5770 echo " "
5771 case "$usemymalloc" in
5772 ''|[yY]*|true|$define)  dflt='y' ;;
5773 *)      dflt='n' ;;
5774 esac
5775 rp="Do you wish to attempt to use the malloc that comes with $package?"
5776 . ./myread
5777 usemymalloc="$ans"
5778 case "$ans" in
5779 y*|true)
5780         usemymalloc='y'
5781         mallocsrc='malloc.c'
5782         mallocobj="malloc$_o"
5783         d_mymalloc="$define"
5784         case "$libs" in
5785         *-lmalloc*)
5786                 : Remove malloc from list of libraries to use
5787                 echo "Removing unneeded -lmalloc from library list" >&4
5788                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5789                 shift
5790                 libs="$*"
5791                 echo "libs = $libs" >&4
5792                 ;;
5793         esac
5794         ;;
5795 *)
5796         usemymalloc='n'
5797         mallocsrc=''
5798         mallocobj=''
5799         d_mymalloc="$undef"
5800         ;;
5801 esac
5802
5803 : compute the return types of malloc and free
5804 echo " "
5805 $cat >malloc.c <<END
5806 #$i_malloc I_MALLOC
5807 #$i_stdlib I_STDLIB
5808 #include <stdio.h>
5809 #include <sys/types.h>
5810 #ifdef I_MALLOC
5811 #include <malloc.h>
5812 #endif
5813 #ifdef I_STDLIB
5814 #include <stdlib.h>
5815 #endif
5816 #ifdef TRY_MALLOC
5817 void *malloc();
5818 #endif
5819 #ifdef TRY_FREE
5820 void free();
5821 #endif
5822 END
5823 case "$malloctype" in
5824 '')
5825         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5826                 malloctype='void *'
5827         else
5828                 malloctype='char *'
5829         fi
5830         ;;
5831 esac
5832 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5833
5834 case "$freetype" in
5835 '')
5836         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5837                 freetype='void'
5838         else
5839                 freetype='int'
5840         fi
5841         ;;
5842 esac
5843 echo "Your system uses $freetype free(), it would seem." >&4
5844 $rm -f malloc.[co]
5845 $cat <<EOM
5846
5847 After $package is installed, you may wish to install various
5848 add-on modules and utilities.  Typically, these add-ons will
5849 be installed under $prefix with the rest
5850 of this package.  However, you may wish to install such add-ons
5851 elsewhere under a different prefix.
5852
5853 If you do not wish to put everything under a single prefix, that's
5854 ok.  You will be prompted for the individual locations; this siteprefix
5855 is only used to suggest the defaults.
5856
5857 The default should be fine for most people.
5858
5859 EOM
5860 fn=d~+
5861 rp='Installation prefix to use for add-on modules and utilities?'
5862 : XXX Here might be another good place for an installstyle setting.
5863 case "$siteprefix" in
5864 '') dflt=$prefix ;;
5865 *)  dflt=$siteprefix ;;
5866 esac
5867 . ./getfile
5868 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5869 oldsiteprefix=''
5870 case "$siteprefix" in
5871 '') ;;
5872 *)      case "$ans" in
5873         "$prefix") ;;
5874         *) oldsiteprefix="$prefix";;
5875         esac
5876         ;;
5877 esac
5878 siteprefix="$ans"
5879 siteprefixexp="$ansexp"
5880
5881 : determine where site specific libraries go.
5882 : Usual default is /usr/local/lib/perl5/site_perl/$version
5883 : The default "style" setting is made in installstyle.U
5884 : XXX No longer works with Prefixit stuff.
5885 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5886 case "$sitelib" in
5887 '') case "$installstyle" in
5888         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5889         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5890         esac
5891         ;;
5892 *)      dflt="$sitelib"
5893         ;;
5894 esac
5895 $cat <<EOM
5896
5897 The installation process will create a directory for
5898 site-specific extensions and modules.  Most users find it convenient
5899 to place all site-specific files in this directory rather than in the
5900 main distribution directory.
5901
5902 EOM
5903 fn=d~+
5904 rp='Pathname for the site-specific library files?'
5905 . ./getfile
5906 sitelib="$ans"
5907 sitelibexp="$ansexp"
5908 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5909 : Change installation prefix, if necessary.
5910 if $test X"$prefix" != X"$installprefix"; then
5911         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5912 else
5913         installsitelib="$sitelibexp"
5914 fi
5915
5916 : determine where site specific architecture-dependent libraries go.
5917 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5918 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5919 : sitelib may have an optional trailing /share.
5920 case "$sitearch" in
5921 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5922         dflt="$dflt/$archname"
5923         ;;
5924 *)      dflt="$sitearch"
5925         ;;
5926 esac
5927 set sitearch sitearch none
5928 eval $prefixit
5929 $cat <<EOM
5930
5931 The installation process will also create a directory for
5932 architecture-dependent site-specific extensions and modules.
5933
5934 EOM
5935 fn=d~+
5936 rp='Pathname for the site-specific architecture-dependent library files?'
5937 . ./getfile
5938 sitearch="$ans"
5939 sitearchexp="$ansexp"
5940 : Change installation prefix, if necessary.
5941 if $test X"$prefix" != X"$installprefix"; then
5942         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5943 else
5944         installsitearch="$sitearchexp"
5945 fi
5946
5947 $cat <<EOM
5948
5949 The installation process will also create a directory for
5950 vendor-supplied add-ons.  Vendors who supply perl with their system
5951 may find it convenient to place all vendor-supplied files in this
5952 directory rather than in the main distribution directory.  This will
5953 ease upgrades between binary-compatible maintenance versions of perl.
5954
5955 Of course you may also use these directories in whatever way you see
5956 fit.  For example, you might use them to access modules shared over a
5957 company-wide network.
5958
5959 The default answer should be fine for most people.
5960 This causes further questions about vendor add-ons to be skipped
5961 and no vendor-specific directories will be configured for perl.
5962
5963 EOM
5964 rp='Do you want to configure vendor-specific add-on directories?'
5965 case "$usevendorprefix" in
5966 define|true|[yY]*) dflt=y ;;
5967 *)      : User may have set vendorprefix directly on Configure command line.
5968         case "$vendorprefix" in
5969         ''|' ') dflt=n ;;
5970         *)      dflt=y ;;
5971         esac
5972         ;;
5973 esac
5974 . ./myread
5975 case "$ans" in
5976 [yY]*)  fn=d~+
5977         rp='Installation prefix to use for vendor-supplied add-ons?'
5978         case "$vendorprefix" in
5979         '') dflt='' ;;
5980         *)  dflt=$vendorprefix ;;
5981         esac
5982         . ./getfile
5983         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5984         oldvendorprefix=''
5985         case "$vendorprefix" in
5986         '') ;;
5987         *)      case "$ans" in
5988                 "$prefix") ;;
5989                 *) oldvendorprefix="$prefix";;
5990                 esac
5991                 ;;
5992         esac
5993         usevendorprefix="$define"
5994         vendorprefix="$ans"
5995         vendorprefixexp="$ansexp"
5996         ;;
5997 *)      usevendorprefix="$undef"
5998         vendorprefix=''
5999         vendorprefixexp=''
6000         ;;
6001 esac
6002
6003 case "$vendorprefix" in
6004 '')     d_vendorlib="$undef"
6005         vendorlib=''
6006         vendorlibexp=''
6007         ;;
6008 *)      d_vendorlib="$define"
6009         : determine where vendor-supplied modules go.
6010         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6011         case "$vendorlib" in
6012         '')
6013                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6014                 case "$installstyle" in
6015                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6016                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6017                 esac
6018                 ;;
6019         *)      dflt="$vendorlib"
6020                 ;;
6021         esac
6022         fn=d~+
6023         rp='Pathname for the vendor-supplied library files?'
6024         . ./getfile
6025         vendorlib="$ans"
6026         vendorlibexp="$ansexp"
6027         ;;
6028 esac
6029 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6030 : Change installation prefix, if necessary.
6031 if $test X"$prefix" != X"$installprefix"; then
6032         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6033 else
6034         installvendorlib="$vendorlibexp"
6035 fi
6036
6037 case "$vendorprefix" in
6038 '')     d_vendorarch="$undef"
6039         vendorarch=''
6040         vendorarchexp=''
6041         ;;
6042 *)      d_vendorarch="$define"
6043         : determine where vendor-supplied architecture-dependent libraries go.
6044         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6045         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6046         : vendorlib may have an optional trailing /share.
6047         case "$vendorarch" in
6048         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6049                 dflt="$dflt/$archname"
6050                 ;;
6051         *)      dflt="$vendorarch" ;;
6052         esac
6053         fn=d~+
6054         rp='Pathname for vendor-supplied architecture-dependent files?'
6055         . ./getfile
6056         vendorarch="$ans"
6057         vendorarchexp="$ansexp"
6058         ;;
6059 esac
6060 : Change installation prefix, if necessary.
6061 if $test X"$prefix" != X"$installprefix"; then
6062         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6063 else
6064         installvendorarch="$vendorarchexp"
6065 fi
6066
6067 : Final catch-all directories to search
6068 $cat <<EOM
6069
6070 Lastly, you can have perl look in other directories for extensions and
6071 modules in addition to those already specified.
6072 These directories will be searched after 
6073         $sitearch 
6074         $sitelib 
6075 EOM
6076 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6077 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6078 echo ' '
6079 case "$otherlibdirs" in
6080 ''|' ') dflt='none' ;;
6081 *)      dflt="$otherlibdirs" ;;
6082 esac
6083 $cat <<EOM
6084 Enter a colon-separated set of extra paths to include in perl's @INC
6085 search path, or enter 'none' for no extra paths.
6086
6087 EOM
6088
6089 rp='Colon-separated list of additional directories for perl to search?'
6090 . ./myread
6091 case "$ans" in
6092 ' '|''|none)    otherlibdirs=' ' ;;     
6093 *)      otherlibdirs="$ans" ;;
6094 esac
6095 case "$otherlibdirs" in
6096 ' ') val=$undef ;;
6097 *)      val=$define ;;
6098 esac
6099 set d_perl_otherlibdirs
6100 eval $setvar
6101
6102 : Cruising for prototypes
6103 echo " "
6104 echo "Checking out function prototypes..." >&4
6105 $cat >prototype.c <<'EOCP'
6106 int main(int argc, char *argv[]) {
6107         exit(0);}
6108 EOCP
6109 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6110         echo "Your C compiler appears to support function prototypes."
6111         val="$define"
6112 else
6113         echo "Your C compiler doesn't seem to understand function prototypes."
6114         val="$undef"
6115 fi
6116 set prototype
6117 eval $setvar
6118 $rm -f prototype*
6119
6120 case "$prototype" in
6121 "$define") ;;
6122 *)      ansi2knr='ansi2knr'
6123         echo " "
6124         cat <<EOM >&4
6125
6126 $me:  FATAL ERROR:
6127 This version of $package can only be compiled by a compiler that 
6128 understands function prototypes.  Unfortunately, your C compiler 
6129         $cc $ccflags
6130 doesn't seem to understand them.  Sorry about that.
6131
6132 If GNU cc is available for your system, perhaps you could try that instead.  
6133
6134 Eventually, we hope to support building Perl with pre-ANSI compilers.
6135 If you would like to help in that effort, please contact <perlbug@perl.org>.
6136
6137 Aborting Configure now.
6138 EOM
6139         exit 2
6140         ;;
6141 esac
6142
6143 : determine where public executables go
6144 echo " "
6145 set dflt bin bin
6146 eval $prefixit
6147 fn=d~
6148 rp='Pathname where the public executables will reside?'
6149 . ./getfile
6150 if $test "X$ansexp" != "X$binexp"; then
6151         installbin=''
6152 fi
6153 bin="$ans"
6154 binexp="$ansexp"
6155 : Change installation prefix, if necessary.
6156 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6157 if $test X"$prefix" != X"$installprefix"; then
6158         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6159 else
6160         installbin="$binexp"
6161 fi
6162
6163 : Find perl5.005 or later.
6164 echo "Looking for a previously installed perl5.005 or later... "
6165 case "$perl5" in
6166 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6167                 : Check if this perl is recent and can load a simple module
6168                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6169                         perl5=$tdir/perl
6170                         break;
6171                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6172                         perl5=$tdir/perl
6173                         break;
6174                 fi
6175         done
6176         ;;
6177 *)      perl5="$perl5"
6178         ;;
6179 esac
6180 case "$perl5" in
6181 '')     echo "None found.  That's ok.";;
6182 *)      echo "Using $perl5." ;;
6183 esac
6184
6185 : Determine list of previous versions to include in @INC
6186 $cat > getverlist <<EOPL
6187 #!$perl5 -w
6188 use File::Basename;
6189 \$api_versionstring = "$api_versionstring";
6190 \$version = "$version";
6191 \$stem = "$sitelib_stem";
6192 \$archname = "$archname";
6193 EOPL
6194         $cat >> getverlist <<'EOPL'
6195 # Can't have leading @ because metaconfig interprets it as a command!
6196 ;@inc_version_list=();
6197 # XXX Redo to do opendir/readdir? 
6198 if (-d $stem) {
6199     chdir($stem);
6200     ;@candidates = glob("5.*");
6201 }
6202 else {
6203     ;@candidates = ();
6204 }
6205
6206 # XXX ToDo:  These comparisons must be reworked when two-digit
6207 # subversions come along, so that 5.7.10 compares as greater than
6208 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6209 # widespread that we can use the built-in version vectors rather
6210 # than reinventing them here.  For 5.6.0, however, we must
6211 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6212 foreach $d (@candidates) {
6213     if ($d lt $version) {
6214         if ($d ge $api_versionstring) {
6215             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6216         }
6217         elsif ($d ge "5.005") {
6218             unshift(@inc_version_list, grep { -d } $d);
6219         }
6220     }
6221     else {
6222         # Skip newer version.  I.e. don't look in
6223         # 5.7.0 if we're installing 5.6.1.
6224     }
6225 }
6226
6227 if (@inc_version_list) {
6228     print join(' ', @inc_version_list);
6229 }
6230 else {
6231     # Blank space to preserve value for next Configure run.
6232     print " ";
6233 }
6234 EOPL
6235 chmod +x getverlist
6236 case "$inc_version_list" in
6237 '')     if test -x "$perl5"; then
6238                 dflt=`$perl5 getverlist`
6239         else
6240                 dflt='none'
6241         fi
6242         ;;
6243 $undef) dflt='none' ;;
6244 *)  dflt="$inc_version_list" ;;
6245 esac
6246 case "$dflt" in
6247 ''|' ') dflt=none ;;
6248 esac
6249 case "$dflt" in
6250 5.005) case "$bincompat5005" in
6251        $define|true|[yY]*) ;;
6252        *) dflt=none ;;
6253        esac
6254        ;;
6255 esac
6256 $cat <<'EOM'
6257
6258 In order to ease the process of upgrading, this version of perl 
6259 can be configured to use modules built and installed with earlier 
6260 versions of perl that were installed under $prefix.  Specify here
6261 the list of earlier versions that this version of perl should check.
6262 If Configure detected no earlier versions of perl installed under
6263 $prefix, then the list will be empty.  Answer 'none' to tell perl
6264 to not search earlier versions.
6265
6266 The default should almost always be sensible, so if you're not sure,
6267 just accept the default.
6268 EOM
6269
6270 rp='List of earlier versions to include in @INC?'
6271 . ./myread
6272 case "$ans" in
6273 [Nn]one|''|' ') inc_version_list=' ' ;;
6274 *) inc_version_list="$ans" ;;
6275 esac
6276 case "$inc_version_list" in
6277 ''|' ') 
6278         inc_version_list_init='0';;
6279 *)      inc_version_list_init=`echo $inc_version_list |
6280                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6281         ;;
6282 esac
6283 $rm -f getverlist
6284
6285 : determine whether to install perl also as /usr/bin/perl
6286
6287 echo " "
6288 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6289         $cat <<EOM
6290 Many scripts expect perl to be installed as /usr/bin/perl.
6291 I can install the perl you are about to compile also as /usr/bin/perl
6292 (in addition to $installbin/perl).
6293 EOM
6294         case "$installusrbinperl" in
6295         "$undef"|[nN]*) dflt='n';;
6296         *)              dflt='y';;
6297         esac
6298         rp="Do you want to install perl as /usr/bin/perl?"
6299         . ./myread
6300         case "$ans" in
6301         [yY]*)  val="$define";;
6302         *)      val="$undef" ;;
6303         esac
6304 else
6305         val="$undef"
6306 fi
6307 set installusrbinperl
6308 eval $setvar
6309
6310 : see if dld is available
6311 set dld.h i_dld
6312 eval $inhdr
6313
6314 : see if dlopen exists
6315 xxx_runnm="$runnm"
6316 runnm=false
6317 set dlopen d_dlopen
6318 eval $inlibc
6319 runnm="$xxx_runnm"
6320
6321 : determine which dynamic loading, if any, to compile in
6322 echo " "
6323 dldir="ext/DynaLoader"
6324 case "$usedl" in
6325 $define|y|true)
6326         dflt='y'
6327         usedl="$define"
6328         ;;
6329 $undef|n|false)
6330         dflt='n'
6331         usedl="$undef"
6332         ;;
6333 *) 
6334         dflt='n'
6335         case "$d_dlopen" in
6336             $define) dflt='y' ;;
6337         esac
6338         case "$i_dld" in
6339             $define) dflt='y' ;;
6340         esac
6341         : Does a dl_xxx.xs file exist for this operating system
6342         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6343         ;;
6344 esac
6345 rp="Do you wish to use dynamic loading?"
6346 . ./myread
6347 usedl="$ans"
6348 case "$ans" in
6349 y*) usedl="$define"
6350         case "$dlsrc" in
6351         '')
6352                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6353                         dflt="$dldir/dl_${osname}.xs"
6354                 elif $test "$d_dlopen" = "$define" ; then
6355                         dflt="$dldir/dl_dlopen.xs"
6356                 elif $test "$i_dld" = "$define" ; then
6357                         dflt="$dldir/dl_dld.xs"
6358                 else
6359                         dflt=''
6360                 fi
6361                 ;;
6362         *)      dflt="$dldir/$dlsrc"
6363                 ;;
6364         esac
6365     echo "The following dynamic loading files are available:"
6366         : Can not go over to $dldir because getfile has path hard-coded in.
6367         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6368         rp="Source file to use for dynamic loading"
6369         fn="fne"
6370         gfpth="$src"
6371         . ./getfile
6372         usedl="$define"
6373         : emulate basename
6374         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6375
6376         $cat << EOM
6377
6378 Some systems may require passing special flags to $cc -c to
6379 compile modules that will be used to create a shared library.
6380 To use no flags, say "none".
6381
6382 EOM
6383     case "$cccdlflags" in
6384     '') case "$gccversion" in
6385                 '') case "$osname" in
6386                         hpux)   dflt='+z' ;;
6387                         next)   dflt='none' ;;
6388                         irix*)  dflt='-KPIC' ;;
6389                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6390                         sunos)  dflt='-pic' ;;
6391                         *)      dflt='none' ;;
6392                     esac
6393                         ;;
6394                 *)  case "$osname" in
6395                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6396                         *)      dflt='-fpic' ;;
6397                     esac ;;
6398             esac ;;
6399         ' ') dflt='none' ;;
6400     *)  dflt="$cccdlflags" ;;
6401     esac
6402     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6403     . ./myread
6404     case "$ans" in
6405     none) cccdlflags=' ' ;;
6406     *) cccdlflags="$ans" ;;
6407     esac
6408
6409     cat << EOM
6410
6411 Some systems use ld to create libraries that can be dynamically loaded,
6412 while other systems (such as those using ELF) use $cc.
6413
6414 EOM
6415         case "$ld" in
6416         '')     $cat >try.c <<'EOM'
6417 /* Test for whether ELF binaries are produced */
6418 #include <fcntl.h>
6419 #include <stdlib.h>
6420 int main() {
6421         char b[4];
6422         int i = open("a.out",O_RDONLY);
6423         if(i == -1) 
6424                 exit(1); /* fail */
6425         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6426                 exit(0); /* succeed (yes, it's ELF) */
6427         else
6428                 exit(1); /* fail */
6429 }
6430 EOM
6431                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6432                         cat <<EOM
6433 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6434 EOM
6435                         dflt="$cc"
6436                 else
6437                         echo "I'll use ld to build dynamic libraries."
6438                         dflt='ld'
6439                 fi
6440                 rm -f try.c a.out
6441                 ;;
6442         *)      dflt="$ld"
6443                 ;;
6444         esac
6445
6446     rp="What command should be used to create dynamic libraries?"
6447     . ./myread
6448         ld="$ans"
6449
6450     cat << EOM
6451
6452 Some systems may require passing special flags to $ld to create a
6453 library that can be dynamically loaded.  If your ld flags include
6454 -L/other/path options to locate libraries outside your loader's normal
6455 search path, you may need to specify those -L options here as well.  To
6456 use no flags, say "none".
6457
6458 EOM
6459     case "$lddlflags" in
6460     '') case "$osname" in
6461                         beos) dflt='-nostart' ;;
6462                         hpux) dflt='-b';
6463                               case "$gccversion" in
6464                               '') dflt="$dflt +vnocompatwarnings" ;;
6465                               esac
6466                               ;;        
6467                         linux|irix*)    dflt='-shared' ;;
6468                         next)  dflt='none' ;;
6469                         solaris) dflt='-G' ;;
6470                         sunos) dflt='-assert nodefinitions' ;;
6471                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6472                 *)     dflt='none' ;;
6473                         esac
6474                         ;;
6475     *) dflt="$lddlflags" ;;
6476     esac
6477
6478         : Try to guess additional flags to pick up local libraries.
6479         : Be careful not to append to a plain 'none'
6480         case "$dflt" in
6481         none) dflt='' ;;
6482         esac
6483         for thisflag in $ldflags; do
6484                 case "$thisflag" in
6485                 -L*|-R*)
6486                         case " $dflt " in
6487                         *" $thisflag "*) ;;
6488                         *) dflt="$dflt $thisflag" ;;
6489                         esac
6490                         ;;
6491                 esac
6492         done
6493
6494         case "$dflt" in
6495         ''|' ') dflt='none' ;;
6496         esac
6497
6498     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6499     . ./myread
6500     case "$ans" in
6501     none) lddlflags=' ' ;;
6502     *) lddlflags="$ans" ;;
6503     esac
6504
6505         cat <<EOM
6506
6507 Some systems may require passing special flags to $cc to indicate that
6508 the resulting executable will use dynamic linking.  To use no flags,
6509 say "none".
6510
6511 EOM
6512     case "$ccdlflags" in
6513     '') case "$osname" in
6514                 hpux)   dflt='-Wl,-E' ;;
6515                 linux)  dflt='-rdynamic' ;;
6516                 next)   dflt='none' ;;
6517                 sunos)  dflt='none' ;;
6518                 *)      dflt='none' ;;
6519             esac ;;
6520     ' ')  dflt='none' ;;
6521     *)  dflt="$ccdlflags" ;;
6522     esac
6523     rp="Any special flags to pass to $cc to use dynamic linking?"
6524     . ./myread
6525     case "$ans" in
6526     none) ccdlflags=' ' ;;
6527     *) ccdlflags="$ans" ;;
6528     esac
6529     ;;
6530 *)  usedl="$undef"
6531         ld='ld'
6532     dlsrc='dl_none.xs'
6533     lddlflags=''
6534     ccdlflags=''
6535     ;;
6536 esac
6537
6538 also=''
6539 case "$usedl" in
6540 $undef)
6541         # No dynamic loading being used, so don't bother even to prompt.
6542         useshrplib='false'
6543         ;;
6544 *)      case "$useshrplib" in
6545         '')     case "$osname" in
6546                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
6547                         dflt=y
6548                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6549                         ;;
6550                 next*)
6551                         case "$osvers" in
6552                         4*)     dflt=y
6553                                 also='Building a shared libperl is needed for MAB support.'
6554                                 ;;
6555                         *)      dflt=n
6556                                 ;;
6557                         esac
6558                         ;;
6559                 *)      dflt=n
6560                         ;;
6561                 esac
6562                 ;;
6563         $define|true|[Yy]*)
6564                 dflt=y
6565                 ;;
6566         *)      dflt=n
6567                 ;;
6568         esac
6569         $cat << EOM
6570
6571 The perl executable is normally obtained by linking perlmain.c with
6572 libperl${_a}, any static extensions (usually just DynaLoader), and
6573 any other libraries needed on this system (such as -lm, etc.).  Since
6574 your system supports dynamic loading, it is probably possible to build
6575 a shared libperl.$so.  If you will have more than one executable linked
6576 to libperl.$so, this will significantly reduce the size of each
6577 executable, but it may have a noticeable affect on performance.  The
6578 default is probably sensible for your system.
6579 $also
6580
6581 EOM
6582         rp="Build a shared libperl.$so (y/n)"
6583         . ./myread
6584         case "$ans" in
6585         true|$define|[Yy]*)
6586                 useshrplib='true'  ;;
6587         *)      useshrplib='false' ;;
6588         esac
6589         ;;
6590 esac
6591
6592 case "$useshrplib" in
6593 true)
6594         case "$libperl" in
6595         '')
6596                 # Figure out a good name for libperl.so.  Since it gets stored in
6597                 # a version-specific architecture-dependent library, the version
6598                 # number isn't really that important, except for making cc/ld happy.
6599                 #
6600                 # A name such as libperl.so.3.1
6601                 majmin="libperl.$so.$patchlevel.$subversion"
6602                 # A name such as libperl.so.301
6603                 majonly=`echo $patchlevel $subversion |
6604                         $awk '{printf "%d%02d", $1, $2}'`
6605                 majonly=libperl.$so.$majonly
6606                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6607                 # rely on figuring it out from the naming of libc.
6608                 case "${osname}${osvers}" in
6609                 next4*)
6610                         dflt=libperl.5.$so
6611                         # XXX How handle the --version stuff for MAB?
6612                         ;;
6613                 linux*)  # ld won't link with a bare -lperl otherwise.
6614                         dflt=libperl.$so
6615                         ;;
6616                 cygwin*) # include version
6617                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6618                         ;;
6619                 *)      # Try to guess based on whether libc has major.minor.
6620                         case "$libc" in
6621                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6622                         *libc.$so.[0-9]*) dflt=$majonly ;;
6623                         *)      dflt=libperl.$so ;;
6624                         esac
6625                         ;;
6626                 esac
6627                 ;;
6628         *)      dflt=$libperl
6629                 ;;
6630         esac
6631         cat << EOM
6632
6633 I need to select a good name for the shared libperl.  If your system uses
6634 library names with major and minor numbers, then you might want something
6635 like $majmin.  Alternatively, if your system uses a single version
6636 number for shared libraries, then you might want to use $majonly.
6637 Or, your system might be quite happy with a simple libperl.$so.
6638
6639 Since the shared libperl will get installed into a version-specific
6640 architecture-dependent directory, the version number of the shared perl
6641 library probably isn't important, so the default should be o.k.
6642
6643 EOM
6644         rp='What name do you want to give to the shared libperl?'
6645         . ./myread
6646         libperl=$ans
6647         echo "Ok, I'll use $libperl"
6648         ;;
6649 *)
6650         libperl="libperl${_a}"
6651         ;;
6652 esac
6653
6654 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6655 case "$shrpdir" in
6656 '') ;;
6657 *)      $cat >&4 <<EOM
6658 WARNING:  Use of the shrpdir variable for the installation location of
6659 the shared $libperl is not supported.  It was never documented and
6660 will not work in this version.  Let me (perlbug@perl.org)
6661 know of any problems this may cause.
6662
6663 EOM
6664         case "$shrpdir" in
6665         "$archlibexp/CORE")
6666                 $cat >&4 <<EOM
6667 But your current setting of $shrpdir is
6668 the default anyway, so it's harmless.
6669 EOM
6670                 ;;
6671         *)
6672                 $cat >&4 <<EOM
6673 Further, your current attempted setting of $shrpdir
6674 conflicts with the value of $archlibexp/CORE
6675 that installperl will use.
6676 EOM
6677                 ;;
6678         esac
6679         ;;
6680 esac
6681
6682 # How will the perl executable find the installed shared $libperl?
6683 # Add $xxx to ccdlflags.
6684 # If we can't figure out a command-line option, use $shrpenv to
6685 # set env LD_RUN_PATH.  The main perl makefile uses this.
6686 shrpdir=$archlibexp/CORE
6687 xxx=''
6688 tmp_shrpenv=''
6689 if "$useshrplib"; then
6690     case "$osname" in 
6691         aix)
6692                 # We'll set it in Makefile.SH...
6693                 ;;
6694         solaris|netbsd)
6695                 xxx="-R $shrpdir"
6696                 ;;
6697         freebsd)
6698                 xxx="-Wl,-R$shrpdir"
6699                 ;;
6700         linux|irix*|dec_osf)
6701                 xxx="-Wl,-rpath,$shrpdir"
6702                 ;;
6703         next)
6704                 # next doesn't like the default...
6705                 ;;
6706         beos)
6707                 # beos doesn't like the default, either.
6708                 ;;
6709         hpux*)
6710                 # hpux doesn't like the default, either.
6711                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6712                 ;;
6713         *)
6714                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6715                 ;;
6716         esac
6717         case "$xxx" in
6718         '') ;;
6719         *)      
6720                 # Only add $xxx if it isn't already in ccdlflags.
6721                 case " $ccdlflags " in
6722                 *" $xxx "*)     ;;
6723                 *)      ccdlflags="$ccdlflags $xxx"
6724                         cat <<EOM >&4
6725
6726 Adding $xxx to the flags
6727 passed to $ld so that the perl executable will find the 
6728 installed shared $libperl.
6729
6730 EOM
6731                         ;;
6732                 esac
6733                 ;;
6734         esac
6735 fi
6736 # Fix ccdlflags in AIX for building external extensions.
6737 # (For building Perl itself bare -bE:perl.exp is needed,
6738 #  Makefile.SH takes care of this.)
6739 case "$osname" in
6740 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6741 esac
6742 # Respect a hint or command-line value.
6743 case "$shrpenv" in
6744 '') shrpenv="$tmp_shrpenv" ;;
6745 esac
6746 case "$ldlibpthname" in
6747 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6748 none)   ldlibpthname='' ;;
6749 esac
6750
6751 : determine where manual pages are on this system
6752 echo " "
6753 case "$sysman" in
6754 '') 
6755         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
6756         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
6757         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
6758         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
6759         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
6760         sysman=`./loc . /usr/man/man1 $syspath`
6761         ;;
6762 esac
6763 if $test -d "$sysman"; then
6764         echo "System manual is in $sysman." >&4
6765 else
6766         echo "Could not find manual pages in source form." >&4
6767 fi
6768
6769 : determine where manual pages go
6770 set man1dir man1dir none
6771 eval $prefixit
6772 $cat <<EOM
6773
6774 $spackage has manual pages available in source form.
6775 EOM
6776 case "$nroff" in
6777 nroff)
6778         echo "However, you don't have nroff, so they're probably useless to you."
6779         case "$man1dir" in
6780         '') man1dir="none";;
6781         esac;;
6782 esac
6783 echo "If you don't want the manual sources installed, answer 'none'."
6784 case "$man1dir" in
6785 ' ') dflt=none
6786         ;;
6787 '')
6788         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6789         lookpath="$lookpath $prefixexp/man/p_man/man1"
6790         lookpath="$lookpath $prefixexp/man/u_man/man1"
6791         lookpath="$lookpath $prefixexp/man/man.1"
6792         case "$sysman" in
6793         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6794         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6795         esac
6796         set dflt
6797         eval $prefixup
6798         ;;
6799 *)  dflt="$man1dir"
6800         ;;
6801 esac
6802 echo " "
6803 fn=dn+~
6804 rp="Where do the main $spackage manual pages (source) go?"
6805 . ./getfile
6806 if $test "X$man1direxp" != "X$ansexp"; then
6807         installman1dir=''
6808 fi
6809 man1dir="$ans"
6810 man1direxp="$ansexp"
6811 case "$man1dir" in
6812 '')     man1dir=' '
6813         installman1dir='';;
6814 esac
6815
6816 : Change installation prefix, if necessary.
6817 if $test X"$prefix" != X"$installprefix"; then
6818         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6819 else
6820         installman1dir="$man1direxp"
6821 fi
6822
6823 : What suffix to use on installed man pages
6824
6825 case "$man1dir" in
6826 ' ')
6827         man1ext='0'
6828         ;;
6829 *)
6830         rp="What suffix should be used for the main $spackage man pages?"
6831         case "$man1ext" in
6832         '')     case "$man1dir" in
6833                 *1)  dflt=1 ;;
6834                 *1p) dflt=1p ;;
6835                 *1pm) dflt=1pm ;;
6836                 *l) dflt=l;;
6837                 *n) dflt=n;;
6838                 *o) dflt=o;;
6839                 *p) dflt=p;;
6840                 *C) dflt=C;;
6841                 *L) dflt=L;;
6842                 *L1) dflt=L1;;
6843                 *) dflt=1;;
6844                 esac
6845                 ;;
6846         *)      dflt="$man1ext";;
6847         esac
6848         . ./myread
6849         man1ext="$ans"
6850         ;;
6851 esac
6852
6853 : see if we can have long filenames
6854 echo " "
6855 first=123456789abcdef
6856 $rm -f $first
6857 if (echo hi >$first) 2>/dev/null; then
6858         if $test -f 123456789abcde; then
6859                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6860                 val="$undef"
6861         else
6862                 echo 'You can have filenames longer than 14 characters.'>&4
6863                 val="$define"
6864         fi
6865 else
6866         $cat <<'EOM'
6867 You can't have filenames longer than 14 chars.
6868 You can't even think about them!
6869 EOM
6870         val="$undef"
6871 fi 
6872 set d_flexfnam
6873 eval $setvar
6874 $rm -rf 123456789abcde*
6875
6876 : determine where library module manual pages go
6877 set man3dir man3dir none
6878 eval $prefixit
6879 $cat <<EOM
6880
6881 $spackage has manual pages for many of the library modules.
6882 EOM
6883
6884 case "$nroff" in
6885 nroff)
6886         $cat <<'EOM'
6887 However, you don't have nroff, so they're probably useless to you.
6888 EOM
6889         case "$man3dir" in
6890         '') man3dir="none";;
6891         esac;;
6892 esac
6893
6894 case "$d_flexfnam" in
6895 undef)
6896         $cat <<'EOM'
6897 However, your system can't handle the long file names like File::Basename.3. 
6898 EOM
6899         case "$man3dir" in
6900         '') man3dir="none";;
6901         esac;;
6902 esac
6903
6904 echo "If you don't want the manual sources installed, answer 'none'."
6905 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6906 case "$man3dir" in
6907 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6908         if $test -d "$privlib/man/man3"; then
6909                 cat <<EOM >&4
6910
6911 WARNING:  Previous versions of perl installed man3 pages into
6912 $privlib/man/man3.  This version will suggest a 
6913 new default of $dflt.  
6914 EOM
6915                 tdflt=$dflt
6916                 dflt='n'
6917                 rp='Do you wish to preserve the old behavior?(y/n)'
6918                 . ./myread
6919                 case "$ans" in
6920                 y*) dflt="$privlib/man/man3" ;;
6921                 *)  dflt=$tdflt ;;
6922                 esac
6923     fi
6924         ;;
6925 *)      dflt="$man3dir" ;;
6926 esac
6927 case "$dflt" in
6928 ' ') dflt=none ;;
6929 esac
6930 echo " "
6931 fn=dn+~
6932 rp="Where do the $package library man pages (source) go?"
6933 . ./getfile
6934 man3dir="$ans"
6935 man3direxp="$ansexp"
6936 case "$man3dir" in
6937 '')     man3dir=' '
6938         installman3dir='';;
6939 esac
6940
6941 : Change installation prefix, if necessary.
6942 if $test X"$prefix" != X"$installprefix"; then
6943         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6944 else
6945         installman3dir="$man3direxp"
6946 fi
6947
6948 : What suffix to use on installed man pages
6949 case "$man3dir" in
6950 ' ')
6951         man3ext='0'
6952         ;;
6953 *)
6954         rp="What suffix should be used for the $package library man pages?"
6955         case "$man3ext" in
6956         '')     case "$man3dir" in
6957                 *3)  dflt=3 ;;
6958                 *3p) dflt=3p ;;
6959                 *3pm) dflt=3pm ;;
6960                 *l) dflt=l;;
6961                 *n) dflt=n;;
6962                 *o) dflt=o;;
6963                 *p) dflt=p;;
6964                 *C) dflt=C;;
6965                 *L) dflt=L;;
6966                 *L3) dflt=L3;;
6967                 *) dflt=3;;
6968                 esac
6969                 ;;
6970         *)      dflt="$man3ext";;
6971         esac
6972         . ./myread
6973         man3ext="$ans"
6974         ;;
6975 esac
6976
6977 : see if we have to deal with yellow pages, now NIS.
6978 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6979         if $test -f /usr/etc/nibindd; then
6980                 echo " "
6981                 echo "I'm fairly confident you're on a NeXT."
6982                 echo " "
6983                 rp='Do you get the hosts file via NetInfo?'
6984                 dflt=y
6985                 case "$hostcat" in
6986                 nidump*) ;;
6987                 '') ;;
6988                 *) dflt=n;;
6989                 esac
6990                 . ./myread
6991                 case "$ans" in
6992                 y*) hostcat='nidump hosts .';;
6993                 *)      case "$hostcat" in
6994                         nidump*) hostcat='';;
6995                         esac
6996                         ;;
6997                 esac
6998         fi
6999         case "$hostcat" in
7000         nidump*) ;;
7001         *)
7002                 case "$hostcat" in
7003                 *ypcat*) dflt=y;;
7004                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7005                                 dflt=y
7006                         else
7007                                 dflt=n
7008                         fi;;
7009                 *) dflt=n;;
7010                 esac
7011                 echo " "
7012                 rp='Are you getting the hosts file via yellow pages?'
7013                 . ./myread
7014                 case "$ans" in
7015                 y*) hostcat='ypcat hosts';;
7016                 *) hostcat='cat /etc/hosts';;
7017                 esac
7018                 ;;
7019         esac
7020 fi
7021 case "$hostcat" in
7022 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7023 esac
7024 case "$groupcat" in
7025 '') test -f /etc/group && groupcat='cat /etc/group';;
7026 esac
7027 case "$passcat" in
7028 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7029 esac
7030
7031 : now get the host name
7032 echo " "
7033 echo "Figuring out host name..." >&4
7034 case "$myhostname" in
7035 '') cont=true
7036         echo 'Maybe "hostname" will work...'
7037         if tans=`sh -c hostname 2>&1` ; then
7038                 myhostname=$tans
7039                 phostname=hostname
7040                 cont=''
7041         fi
7042         ;;
7043 *) cont='';;
7044 esac
7045 if $test "$cont"; then
7046         if ./xenix; then
7047                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7048                 if tans=`cat /etc/systemid 2>&1` ; then
7049                         myhostname=$tans
7050                         phostname='cat /etc/systemid'
7051                         echo "Whadyaknow.  Xenix always was a bit strange..."
7052                         cont=''
7053                 fi
7054         elif $test -r /etc/systemid; then
7055                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7056         fi
7057 fi
7058 if $test "$cont"; then
7059         echo 'No, maybe "uuname -l" will work...'
7060         if tans=`sh -c 'uuname -l' 2>&1` ; then
7061                 myhostname=$tans
7062                 phostname='uuname -l'
7063         else
7064                 echo 'Strange.  Maybe "uname -n" will work...'
7065                 if tans=`sh -c 'uname -n' 2>&1` ; then
7066                         myhostname=$tans
7067                         phostname='uname -n'
7068                 else
7069                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7070                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7071                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7072                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7073                         else
7074                                 case "$myhostname" in
7075                                 '') echo "Does this machine have an identity crisis or something?"
7076                                         phostname='';;
7077                                 *)
7078                                         echo "Well, you said $myhostname before..."
7079                                         phostname='echo $myhostname';;
7080                                 esac
7081                         fi
7082                 fi
7083         fi
7084 fi
7085 : you do not want to know about this
7086 set $myhostname
7087 myhostname=$1
7088
7089 : verify guess
7090 if $test "$myhostname" ; then
7091         dflt=y
7092         rp='Your host name appears to be "'$myhostname'".'" Right?"
7093         . ./myread
7094         case "$ans" in
7095         y*) ;;
7096         *) myhostname='';;
7097         esac
7098 fi
7099
7100 : bad guess or no guess
7101 while $test "X$myhostname" = X ; do
7102         dflt=''
7103         rp="Please type the (one word) name of your host:"
7104         . ./myread
7105         myhostname="$ans"
7106 done
7107
7108 : translate upper to lower if necessary
7109 case "$myhostname" in
7110 *[A-Z]*)
7111         echo "(Normalizing case in your host name)"
7112         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7113         ;;
7114 esac
7115
7116 case "$myhostname" in
7117 *.*)
7118         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7119         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7120         echo "(Trimming domain name from host name--host name is now $myhostname)"
7121         ;;
7122 *) case "$mydomain" in
7123         '')
7124                 {
7125                         test "X$hostcat" = "Xypcat hosts" &&
7126                         ypmatch "$myhostname" hosts 2>/dev/null |\
7127                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7128                         $test -s hosts
7129                 } || {
7130                         test "X$hostcat" != "X" &&
7131                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7132                                         /[       ]$myhostname[  . ]/p" > hosts
7133                 }
7134                 tmp_re="[       . ]"
7135                 if $test -f hosts; then
7136                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7137                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7138                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7139                                 hosts | $sort | $uniq | \
7140                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7141                         case `$echo X$dflt` in
7142                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7143                                 dflt=.
7144                                 ;;
7145                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7146                                 ;;
7147                         esac
7148                 else
7149                         echo "(I cannot locate a hosts database anywhere)"
7150                         dflt=.
7151                 fi
7152                 case "$dflt" in
7153                 .)
7154                         tans=`./loc resolv.conf X /etc /usr/etc`
7155                         if $test -f "$tans"; then
7156                                 echo "(Attempting domain name extraction from $tans)"
7157                                 dflt=.`$sed -n -e 's/   / /g' \
7158                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7159                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7160                                 case "$dflt" in
7161                                 .) dflt=.`$sed -n -e 's/        / /g' \
7162                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7163                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7164                                         ;;
7165                                 esac
7166                         fi
7167                         ;;
7168                 esac
7169                 case "$dflt" in
7170                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7171                         dflt=.`sh -c domainname 2>/dev/null`
7172                         case "$dflt" in
7173                         '') dflt='.';;
7174                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7175                         esac
7176                         ;;
7177                 esac
7178                 case "$dflt" in
7179                 .) echo "(Lost all hope -- silly guess then)"
7180                         dflt='.uucp'
7181                         ;;
7182                 esac
7183                 $rm -f hosts
7184                 ;;
7185         *) dflt="$mydomain";;
7186         esac;;
7187 esac
7188 echo " "
7189 rp="What is your domain name?"
7190 . ./myread
7191 tans="$ans"
7192 case "$ans" in
7193 '') ;;
7194 .*) ;;
7195 *) tans=".$tans";;
7196 esac
7197 mydomain="$tans"
7198
7199 : translate upper to lower if necessary
7200 case "$mydomain" in
7201 *[A-Z]*)
7202         echo "(Normalizing case in your domain name)"
7203         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7204         ;;
7205 esac
7206
7207 : a little sanity check here
7208 case "$phostname" in
7209 '') ;;
7210 *)
7211         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7212         $myhostname$mydomain|$myhostname) ;;
7213         *)
7214                 case "$phostname" in
7215                 sed*)
7216                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7217                         ;;
7218                 *)
7219                         echo "(That doesn't agree with your $phostname command, by the way.)"
7220                         ;;
7221                 esac
7222         ;;
7223         esac
7224         ;;
7225 esac
7226
7227 $cat <<EOM
7228
7229 I need to get your e-mail address in Internet format if possible, i.e.
7230 something like user@host.domain. Please answer accurately since I have
7231 no easy means to double check it. The default value provided below
7232 is most probably close to reality but may not be valid from outside
7233 your organization...
7234
7235 EOM
7236 cont=x
7237 while test "$cont"; do
7238         case "$cf_email" in
7239         '') dflt="$cf_by@$myhostname$mydomain";;
7240         *) dflt="$cf_email";;
7241         esac
7242         rp='What is your e-mail address?'
7243         . ./myread
7244         cf_email="$ans"
7245         case "$cf_email" in
7246         *@*.*) cont='' ;;
7247         *)
7248                 rp='Address does not look like an Internet one.  Use it anyway?'
7249                 case "$fastread" in
7250                 yes) dflt=y ;;
7251                 *) dflt=n ;;
7252                 esac
7253                 . ./myread
7254                 case "$ans" in
7255                 y*) cont='' ;;
7256                 *) echo " " ;;
7257                 esac
7258                 ;;
7259         esac
7260 done
7261
7262 $cat <<EOM
7263
7264 If you or somebody else will be maintaining perl at your site, please
7265 fill in the correct e-mail address here so that they may be contacted
7266 if necessary. Currently, the "perlbug" program included with perl
7267 will send mail to this address in addition to perlbug@perl.org. You may
7268 enter "none" for no administrator.
7269
7270 EOM
7271 case "$perladmin" in
7272 '') dflt="$cf_email";;
7273 *) dflt="$perladmin";;
7274 esac
7275 rp='Perl administrator e-mail address'
7276 . ./myread
7277 perladmin="$ans"
7278
7279 : determine whether to only install version-specific parts.
7280 echo " "
7281 $cat <<EOM
7282 Do you want to install only the version-specific parts of the perl
7283 distribution?  Usually you do *not* want to do this.
7284 EOM
7285 case "$versiononly" in
7286 "$define"|[Yy]*|true) dflt='y' ;;
7287 *) dflt='n';
7288 esac
7289 rp="Do you want to install only the version-specific parts of perl?"
7290 . ./myread
7291 case "$ans" in
7292 [yY]*)  val="$define";;
7293 *)      val="$undef" ;;
7294 esac
7295 set versiononly
7296 eval $setvar
7297
7298 : figure out how to guarantee perl startup
7299 case "$startperl" in
7300 '')
7301         case "$sharpbang" in
7302         *!)
7303                 $cat <<EOH
7304
7305 I can use the #! construct to start perl on your system. This will
7306 make startup of perl scripts faster, but may cause problems if you
7307 want to share those scripts and perl is not in a standard place
7308 ($binexp/perl) on all your platforms. The alternative is to force
7309 a shell by starting the script with a single ':' character.
7310
7311 EOH
7312                 case "$versiononly" in
7313                 "$define")      dflt="$binexp/perl$version";;  
7314                 *)              dflt="$binexp/perl";;
7315                 esac
7316                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7317                 . ./myread
7318                 case "$ans" in
7319                 none)   startperl=": # use perl";;
7320                 *)      startperl="#!$ans"
7321                         if $test 30 -lt `echo "$ans" | wc -c`; then
7322                                 $cat >&4 <<EOM
7323
7324 WARNING:  Some systems limit the #! command to 32 characters.
7325 If you experience difficulty running Perl scripts with #!, try
7326 installing Perl in a directory with a shorter pathname.
7327
7328 EOM
7329                         fi ;;
7330                 esac
7331                 ;;
7332         *) startperl=": # use perl"
7333                 ;;
7334         esac
7335         ;;
7336 esac
7337 echo "I'll use $startperl to start perl scripts."
7338
7339 : figure best path for perl in scripts
7340 case "$perlpath" in
7341 '')
7342         perlpath="$binexp/perl"
7343         case "$startperl" in
7344         *!*) ;;
7345         *)
7346                 $cat <<EOH
7347
7348 I will use the "eval 'exec'" idiom to start Perl on your system.
7349 I can use the full path of your Perl binary for this purpose, but
7350 doing so may cause problems if you want to share those scripts and
7351 Perl is not always in a standard place ($binexp/perl).
7352
7353 EOH
7354                 dflt="$binexp/perl"
7355                 rp="What path shall I use in \"eval 'exec'\"?"
7356                 . ./myread
7357                 perlpath="$ans"
7358                 ;;
7359         esac
7360         ;;
7361 esac
7362 case "$startperl" in
7363 *!*)    ;;
7364 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7365 esac
7366
7367 : determine where public executable scripts go
7368 set scriptdir scriptdir
7369 eval $prefixit
7370 case "$scriptdir" in
7371 '')
7372         dflt="$bin"
7373         : guess some guesses
7374         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7375         $test -d /usr/share/bin     && dflt=/usr/share/bin
7376         $test -d /usr/local/script  && dflt=/usr/local/script
7377         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7378         $test -d $prefixexp/script  && dflt=$prefixexp/script
7379         set dflt
7380         eval $prefixup
7381         ;;
7382 *)  dflt="$scriptdir"
7383         ;;
7384 esac
7385 $cat <<EOM
7386  
7387 Some installations have a separate directory just for executable scripts so
7388 that they can mount it across multiple architectures but keep the scripts in
7389 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7390 Or you might just lump your scripts in with all your other executables.
7391  
7392 EOM
7393 fn=d~
7394 rp='Where do you keep publicly executable scripts?'
7395 . ./getfile
7396 if $test "X$ansexp" != "X$scriptdirexp"; then
7397         installscript=''
7398 fi
7399 scriptdir="$ans"
7400 scriptdirexp="$ansexp"
7401 : Change installation prefix, if necessary.
7402 if $test X"$prefix" != X"$installprefix"; then
7403         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7404 else
7405         installscript="$scriptdirexp"
7406 fi
7407
7408 : determine where add-on public executables go
7409 case "$sitebin" in
7410 '')     dflt=$siteprefix/bin ;;
7411 *)      dflt=$sitebin ;;
7412 esac
7413 fn=d~
7414 rp='Pathname where the add-on public executables should be installed?'
7415 . ./getfile
7416 sitebin="$ans"
7417 sitebinexp="$ansexp"
7418 : Change installation prefix, if necessary.
7419 if $test X"$prefix" != X"$installprefix"; then
7420         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7421 else
7422         installsitebin="$sitebinexp"
7423 fi
7424
7425 case "$useperlio" in
7426 $define|true|[yY]*)     dflt='y';;
7427 *) dflt='n';;
7428 esac
7429 cat <<EOM
7430
7431 Previous version of $package used the standard IO mechanisms as defined
7432 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7433 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7434 the default.  This abstraction layer can use AT&T's sfio (if you already
7435 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7436 problems with some extension modules.  Using PerlIO with stdio is safe,
7437 but it is slower than plain stdio and therefore is not the default.
7438
7439 If this doesn't make any sense to you, just accept the default '$dflt'.
7440 EOM
7441 rp='Use the experimental PerlIO abstraction layer?'
7442 . ./myread
7443 case "$ans" in
7444 y|Y) 
7445         val="$define"
7446         ;;     
7447 *)      
7448         echo "Ok, doing things the stdio way"
7449         val="$undef"
7450         ;;
7451 esac
7452 set useperlio
7453 eval $setvar 
7454
7455 case "$vendorprefix" in
7456 '')     d_vendorbin="$undef"
7457         vendorbin=''
7458         vendorbinexp=''
7459         ;;
7460 *)      d_vendorbin="$define"
7461         : determine where vendor-supplied executables go.
7462         case "$vendorbin" in
7463         '') dflt=$vendorprefix/bin ;;
7464         *)      dflt="$vendorbin" ;;
7465         esac
7466         fn=d~+
7467         rp='Pathname for the vendor-supplied executables directory?'
7468         . ./getfile
7469         vendorbin="$ans"
7470         vendorbinexp="$ansexp"
7471         ;;
7472 esac
7473 : Change installation prefix, if necessary.
7474 if $test X"$prefix" != X"$installprefix"; then
7475         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7476 else
7477         installvendorbin="$vendorbinexp"
7478 fi
7479
7480 : see if qgcvt exists
7481 set qgcvt d_qgcvt
7482 eval $inlibc
7483
7484 echo " "
7485
7486 if $test X"$d_longdbl" = X"$define"; then
7487
7488 echo "Checking how to print long doubles..." >&4
7489
7490 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7491         $cat >try.c <<'EOCP'
7492 #include <sys/types.h>
7493 #include <stdio.h>
7494 int main() {
7495   double d = 123.456;
7496   printf("%.3f\n", d);
7497 }
7498 EOCP
7499         set try
7500         if eval $compile; then
7501                 yyy=`./try$exe_ext`
7502                 case "$yyy" in
7503                 123.456)
7504                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7505                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7506                         echo "We will use %f."
7507                         ;;
7508                 esac
7509         fi
7510 fi
7511
7512 if $test X"$sPRIfldbl" = X; then
7513         $cat >try.c <<'EOCP'
7514 #include <sys/types.h>
7515 #include <stdio.h>
7516 int main() {
7517   long double d = 123.456;
7518   printf("%.3llf\n", d);
7519 }
7520 EOCP
7521         set try
7522         if eval $compile; then
7523                 yyy=`./try$exe_ext`
7524                 case "$yyy" in
7525                 123.456)
7526                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7527                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
7528                         echo "We will use %llf."
7529                         ;;
7530                 esac
7531         fi
7532 fi
7533
7534 if $test X"$sPRIfldbl" = X; then
7535         $cat >try.c <<'EOCP'
7536 #include <sys/types.h>
7537 #include <stdio.h>
7538 int main() {
7539   long double d = 123.456;
7540   printf("%.3Lf\n", d);
7541 }
7542 EOCP
7543         set try
7544         if eval $compile; then
7545                 yyy=`./try$exe_ext`
7546                 case "$yyy" in
7547                 123.456)
7548                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7549                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
7550                         echo "We will use %Lf."
7551                         ;;
7552                 esac
7553         fi
7554 fi
7555
7556 if $test X"$sPRIfldbl" = X; then
7557         $cat >try.c <<'EOCP'
7558 #include <sys/types.h>
7559 #include <stdio.h>
7560 int main() {
7561   long double d = 123.456;
7562   printf("%.3lf\n", d);
7563 }
7564 EOCP
7565         set try
7566         if eval $compile; then
7567                 yyy=`./try$exe_ext`
7568                 case "$yyy" in
7569                 123.456)
7570                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7571                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
7572                         echo "We will use %lf."
7573                         ;;
7574                 esac
7575         fi
7576 fi
7577
7578 if $test X"$sPRIfldbl" = X; then
7579         echo "Cannot figure out how to print long doubles." >&4
7580 else
7581         sSCNfldbl=$sPRIfldbl    # expect consistency
7582 fi
7583
7584 $rm -f try try.*
7585
7586 fi # d_longdbl
7587
7588 case "$sPRIfldbl" in
7589 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7590         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
7591         d_SCNfldbl="$undef";
7592         ;;
7593 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7594         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
7595         d_SCNfldbl="$define";
7596         ;;
7597 esac
7598
7599 : Check how to convert floats to strings.
7600 echo " "
7601 echo "Checking for an efficient way to convert floats to strings."
7602 echo " " > try.c
7603 case "$uselongdouble" in
7604 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7605 esac
7606 case "$d_longdbl" in
7607 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7608 esac
7609 case "$d_PRIgldbl" in
7610 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7611 esac
7612 $cat >>try.c <<EOP
7613 #ifdef TRY_gconvert
7614 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7615 char *myname = "gconvert";
7616 #endif
7617 #ifdef TRY_gcvt
7618 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7619 char *myname = "gcvt";
7620 #endif
7621 #ifdef TRY_qgcvt
7622 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7623 char *myname = "qgcvt";
7624 #define DOUBLETYPE long double
7625 #endif
7626 #ifdef TRY_sprintf
7627 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7628 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7629 #else
7630 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7631 #endif
7632 char *myname = "sprintf";
7633 #endif
7634
7635 #ifndef DOUBLETYPE
7636 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7637 #define DOUBLETYPE long double
7638 #else
7639 #define DOUBLETYPE double
7640 #endif
7641 #endif
7642
7643 #include <stdio.h>
7644
7645 #define I_STDLIB $i_stdlib
7646 #ifdef I_STDLIB
7647 #include <stdlib.h>
7648 #endif
7649
7650 int
7651 checkit(expect, got)
7652 char *expect;
7653 char *got;
7654 {
7655     if (strcmp(expect, got)) {
7656                 printf("%s oddity:  Expected %s, got %s\n",
7657                         myname, expect, got);
7658                 exit(1);
7659         }
7660 }
7661
7662 int main()
7663
7664         char buf[64]; 
7665         buf[63] = '\0';
7666
7667         /* This must be 1st test on (which?) platform */
7668         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7669         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7670         checkit("0.1", buf);
7671
7672         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7673         checkit("1", buf);
7674
7675         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7676         checkit("1.1", buf);
7677
7678         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7679         checkit("1.01", buf);
7680
7681         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7682         checkit("1.001", buf);
7683
7684         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7685         checkit("1.0001", buf);
7686
7687         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7688         checkit("1.00001", buf);
7689
7690         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7691         checkit("1.000001", buf);
7692
7693         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7694         checkit("0", buf);
7695
7696         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7697         checkit("-1", buf);
7698
7699         /* Some Linux gcvt's give 1.e+5 here. */
7700         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7701         checkit("100000", buf);
7702         
7703         /* Some Linux gcvt's give -1.e+5 here. */
7704         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7705         checkit("-100000", buf);
7706
7707         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7708         checkit("123.456", buf);
7709
7710         exit(0);
7711 }
7712 EOP
7713 case "$d_Gconvert" in
7714 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7715 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7716 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7717 *) xxx_list='gconvert gcvt sprintf' ;;
7718 esac
7719
7720 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7721 "$define$define$define")
7722     # for long doubles prefer first qgcvt, then sprintf
7723     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7724     xxx_list="sprintf $xxx_list"
7725     case "$d_qgcvt" in
7726     "$define") xxx_list="qgcvt $xxx_list" ;;
7727     esac
7728     ;;
7729 esac
7730
7731 for xxx_convert in $xxx_list; do
7732         echo "Trying $xxx_convert..."
7733         $rm -f try try$_o
7734         set try -DTRY_$xxx_convert
7735         if eval $compile; then
7736                 echo "$xxx_convert() found." >&4
7737                 if ./try; then
7738                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7739                         break;
7740                 else
7741                         echo "...But $xxx_convert didn't work as I expected."
7742                 fi
7743         else
7744                 echo "$xxx_convert NOT found." >&4
7745         fi
7746 done
7747         
7748 case "$xxx_convert" in
7749 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7750 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7751 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7752 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7753    "$define$define$define")
7754       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7755    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7756    esac
7757    ;;  
7758 esac
7759
7760 : see if _fwalk exists
7761 set fwalk d__fwalk
7762 eval $inlibc
7763
7764 : Initialize h_fcntl
7765 h_fcntl=false
7766
7767 : Initialize h_sysfile
7768 h_sysfile=false
7769
7770 : access call always available on UNIX
7771 set access d_access
7772 eval $inlibc
7773
7774 : locate the flags for 'access()'
7775 case "$d_access" in
7776 "$define")
7777         echo " "
7778         $cat >access.c <<'EOCP'
7779 #include <sys/types.h>
7780 #ifdef I_FCNTL
7781 #include <fcntl.h>
7782 #endif
7783 #ifdef I_SYS_FILE
7784 #include <sys/file.h>
7785 #endif
7786 #ifdef I_UNISTD
7787 #include <unistd.h>
7788 #endif
7789 int main() {
7790         exit(R_OK);
7791 }
7792 EOCP
7793         : check sys/file.h first, no particular reason here
7794         if $test `./findhdr sys/file.h` && \
7795                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
7796                 h_sysfile=true;
7797                 echo "<sys/file.h> defines the *_OK access constants." >&4
7798         elif $test `./findhdr fcntl.h` && \
7799                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
7800                 h_fcntl=true;
7801                 echo "<fcntl.h> defines the *_OK access constants." >&4
7802         elif $test `./findhdr unistd.h` && \
7803                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
7804                 echo "<unistd.h> defines the *_OK access constants." >&4
7805         else
7806                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7807         fi
7808         ;;
7809 esac
7810 $rm -f access*
7811
7812 : see if accessx exists
7813 set accessx d_accessx
7814 eval $inlibc
7815
7816 : see if alarm exists
7817 set alarm d_alarm
7818 eval $inlibc
7819
7820 : see if atolf exists
7821 set atolf d_atolf
7822 eval $inlibc
7823
7824 : see if atoll exists
7825 set atoll d_atoll
7826 eval $inlibc
7827
7828 : Look for GNU-cc style attribute checking
7829 echo " "
7830 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7831 $cat >attrib.c <<'EOCP'
7832 #include <stdio.h>
7833 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7834 EOCP
7835 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7836         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7837                 echo "Your C compiler doesn't fully support __attribute__."
7838                 val="$undef"
7839         else
7840                 echo "Your C compiler supports __attribute__."
7841                 val="$define"
7842         fi
7843 else
7844         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7845         val="$undef"
7846 fi
7847 set d_attribut
7848 eval $setvar
7849 $rm -f attrib*
7850
7851 : see if bcmp exists
7852 set bcmp d_bcmp
7853 eval $inlibc
7854
7855 : see if bcopy exists
7856 set bcopy d_bcopy
7857 eval $inlibc
7858
7859 : see if this is a unistd.h system
7860 set unistd.h i_unistd
7861 eval $inhdr
7862
7863 : see if getpgrp exists
7864 set getpgrp d_getpgrp
7865 eval $inlibc
7866
7867 case "$d_getpgrp" in
7868 "$define")
7869         echo " "
7870         echo "Checking to see which flavor of getpgrp is in use..."
7871         $cat >set.c <<EOP
7872 #$i_unistd I_UNISTD
7873 #include <sys/types.h>
7874 #ifdef I_UNISTD
7875 #  include <unistd.h>
7876 #endif
7877 int main()
7878 {
7879         if (getuid() == 0) {
7880                 printf("(I see you are running Configure as super-user...)\n");
7881                 setuid(1);
7882         }
7883 #ifdef TRY_BSD_PGRP
7884         if (getpgrp(1) == 0)
7885                 exit(0);
7886 #else
7887         if (getpgrp() > 0)
7888                 exit(0);
7889 #endif
7890         exit(1);
7891 }
7892 EOP
7893         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7894                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7895                 val="$define"
7896         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7897                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7898                 val="$undef"
7899         else
7900                 echo "I can't seem to compile and run the test program."
7901                 if ./usg; then
7902                         xxx="a USG one, i.e. you use getpgrp()."
7903                 else
7904                         # SVR4 systems can appear rather BSD-ish.
7905                         case "$i_unistd" in
7906                         $undef)
7907                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7908                                 val="$define"
7909                                 ;;
7910                         $define)
7911                                 xxx="probably a USG one, i.e. you use getpgrp()."
7912                                 val="$undef"
7913                                 ;;
7914                         esac
7915                 fi
7916                 echo "Assuming your getpgrp is $xxx" >&4
7917         fi
7918         ;;
7919 *) val="$undef";;
7920 esac
7921 set d_bsdgetpgrp
7922 eval $setvar
7923 $rm -f set set.c
7924
7925 : see if setpgrp exists
7926 set setpgrp d_setpgrp
7927 eval $inlibc
7928
7929 case "$d_setpgrp" in
7930 "$define")
7931         echo " "
7932         echo "Checking to see which flavor of setpgrp is in use..."
7933         $cat >set.c <<EOP
7934 #$i_unistd I_UNISTD
7935 #include <sys/types.h>
7936 #ifdef I_UNISTD
7937 #  include <unistd.h>
7938 #endif
7939 int main()
7940 {
7941         if (getuid() == 0) {
7942                 printf("(I see you are running Configure as super-user...)\n");
7943                 setuid(1);
7944         }
7945 #ifdef TRY_BSD_PGRP
7946         if (-1 == setpgrp(1, 1))
7947                 exit(0);
7948 #else
7949         if (setpgrp() != -1)
7950                 exit(0);
7951 #endif
7952         exit(1);
7953 }
7954 EOP
7955         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7956                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7957                 val="$define"
7958         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
7959                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7960                 val="$undef"
7961         else
7962                 echo "(I can't seem to compile and run the test program.)"
7963                 if ./usg; then
7964                         xxx="a USG one, i.e. you use setpgrp()."
7965                 else
7966                         # SVR4 systems can appear rather BSD-ish.
7967                         case "$i_unistd" in
7968                         $undef)
7969                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7970                                 val="$define"
7971                                 ;;
7972                         $define)
7973                                 xxx="probably a USG one, i.e. you use setpgrp()."
7974                                 val="$undef"
7975                                 ;;
7976                         esac
7977                 fi
7978                 echo "Assuming your setpgrp is $xxx" >&4
7979         fi
7980         ;;
7981 *) val="$undef";;
7982 esac
7983 set d_bsdsetpgrp
7984 eval $setvar
7985 $rm -f set set.c
7986 : see if bzero exists
7987 set bzero d_bzero
7988 eval $inlibc
7989
7990 : see if signal is declared as pointer to function returning int or void
7991 echo " "
7992 xxx=`./findhdr signal.h`
7993 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7994 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7995         echo "You have int (*signal())() instead of void." >&4
7996         val="$undef"
7997 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7998         echo "You have void (*signal())()." >&4
7999         val="$define"
8000 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8001         echo "You have int (*signal())() instead of void." >&4
8002         val="$undef"
8003 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8004         echo "You have void (*signal())()." >&4
8005         val="$define"
8006 else
8007         case "$d_voidsig" in
8008         '')
8009         echo "I can't determine whether signal handler returns void or int..." >&4
8010                 dflt=void
8011                 rp="What type does your signal handler return?"
8012                 . ./myread
8013                 case "$ans" in
8014                 v*) val="$define";;
8015                 *) val="$undef";;
8016                 esac;;
8017         "$define")
8018                 echo "As you already told me, signal handler returns void." >&4
8019                 val="$define"
8020                 ;;
8021         *)      echo "As you already told me, signal handler returns int." >&4
8022                 val="$undef"
8023                 ;;
8024         esac
8025 fi
8026 set d_voidsig
8027 eval $setvar
8028 case "$d_voidsig" in
8029 "$define") signal_t="void";;
8030 *) signal_t="int";;
8031 esac
8032 $rm -f $$.tmp
8033
8034 : check for ability to cast large floats to 32-bit ints.
8035 echo " "
8036 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8037 if $test "$intsize" -ge 4; then
8038         xxx=int
8039 else
8040         xxx=long
8041 fi
8042 $cat >try.c <<EOCP
8043 #include <stdio.h>
8044 #include <sys/types.h>
8045 #include <signal.h>
8046 $signal_t blech(s) int s; { exit(3); }
8047 int main()
8048 {
8049         $xxx i32;
8050         double f, g;
8051         int result = 0;
8052         char str[16];
8053         signal(SIGFPE, blech);
8054
8055         /* Don't let compiler optimize the test away.  Store the number 
8056            in a writable string for gcc to pass to sscanf under HP/UX.
8057         */
8058         sprintf(str, "2147483647");
8059         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8060         g = 10 * f;
8061         i32  = ($xxx) g;
8062
8063         /* x86 processors will probably give 0x8000 0000, which is a
8064        sign change.  We don't want that.  We want to mimic SPARC
8065            behavior here, which is to preserve the sign and give
8066            back 0x7fff ffff.
8067         */
8068         if (i32 != ($xxx) f)
8069                 result |= 1;
8070         exit(result);
8071 }
8072 EOCP
8073 set try
8074 if eval $compile_ok; then
8075         ./try
8076         yyy=$?
8077 else
8078         echo "(I can't seem to compile the test program--assuming it can't)"
8079         yyy=1
8080 fi
8081 case "$yyy" in
8082 0)      val="$define"
8083         echo "Yup, it can."
8084         ;;
8085 *)      val="$undef"
8086         echo "Nope, it can't."
8087         ;;
8088 esac
8089 set d_casti32
8090 eval $setvar
8091 $rm -f try try.*
8092
8093 : check for ability to cast negative floats to unsigned
8094 echo " "
8095 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8096 $cat >try.c <<EOCP
8097 #include <stdio.h>
8098 #include <sys/types.h>
8099 #include <signal.h>
8100 $signal_t blech(s) int s; { exit(7); }
8101 $signal_t blech_in_list(s) int s; { exit(4); }
8102 unsigned long dummy_long(p) unsigned long p; { return p; }
8103 unsigned int dummy_int(p) unsigned int p; { return p; }
8104 unsigned short dummy_short(p) unsigned short p; { return p; }
8105 int main()
8106 {
8107         double f;
8108         unsigned long along;
8109         unsigned int aint;
8110         unsigned short ashort;
8111         int result = 0;
8112         char str[16];
8113         
8114         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8115            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8116            optimized the whole file away
8117         */
8118         /* Store the number in a writable string for gcc to pass to 
8119            sscanf under HP/UX.
8120         */
8121         sprintf(str, "-123");
8122         sscanf(str, "%lf", &f);  /* f = -123.; */
8123
8124         signal(SIGFPE, blech);
8125         along = (unsigned long)f;
8126         aint = (unsigned int)f;
8127         ashort = (unsigned short)f;
8128         if (along != (unsigned long)-123)
8129                 result |= 1;
8130         if (aint != (unsigned int)-123)
8131                 result |= 1;
8132         if (ashort != (unsigned short)-123)
8133                 result |= 1;
8134         sprintf(str, "1073741824.");
8135         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8136         f = f + f;
8137         along = 0;
8138         along = (unsigned long)f;
8139         if (along != 0x80000000)
8140                 result |= 2;
8141         f -= 1.;
8142         along = 0;
8143         along = (unsigned long)f;
8144         if (along != 0x7fffffff)
8145                 result |= 1;
8146         f += 2.;
8147         along = 0;
8148         along = (unsigned long)f;
8149         if (along != 0x80000001)
8150                 result |= 2;
8151         if (result)
8152                 exit(result);
8153         signal(SIGFPE, blech_in_list);
8154         sprintf(str, "123.");
8155         sscanf(str, "%lf", &f);  /* f = 123.; */
8156         along = dummy_long((unsigned long)f);
8157         aint = dummy_int((unsigned int)f);
8158         ashort = dummy_short((unsigned short)f);
8159         if (along != (unsigned long)123)
8160                 result |= 4;
8161         if (aint != (unsigned int)123)
8162                 result |= 4;
8163         if (ashort != (unsigned short)123)
8164                 result |= 4;
8165         exit(result);
8166
8167 }
8168 EOCP
8169 set try
8170 if eval $compile_ok; then
8171         ./try
8172         castflags=$?
8173 else
8174         echo "(I can't seem to compile the test program--assuming it can't)"
8175         castflags=7
8176 fi
8177 case "$castflags" in
8178 0)      val="$define"
8179         echo "Yup, it can."
8180         ;;
8181 *)      val="$undef"
8182         echo "Nope, it can't."
8183         ;;
8184 esac
8185 set d_castneg
8186 eval $setvar
8187 $rm -f try.*
8188
8189 : see if vprintf exists
8190 echo " "
8191 if set vprintf val -f d_vprintf; eval $csym; $val; then
8192         echo 'vprintf() found.' >&4
8193         val="$define"
8194         $cat >vprintf.c <<'EOF'
8195 #include <varargs.h>
8196
8197 int main() { xxx("foo"); }
8198
8199 xxx(va_alist)
8200 va_dcl
8201 {
8202         va_list args;
8203         char buf[10];
8204
8205         va_start(args);
8206         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8207 }
8208 EOF
8209         set vprintf
8210         if eval $compile && ./vprintf; then
8211                 echo "Your vsprintf() returns (int)." >&4
8212                 val2="$undef"
8213         else
8214                 echo "Your vsprintf() returns (char*)." >&4
8215                 val2="$define"
8216         fi
8217 else
8218         echo 'vprintf() NOT found.' >&4
8219                 val="$undef"
8220                 val2="$undef"
8221 fi
8222 set d_vprintf
8223 eval $setvar
8224 val=$val2
8225 set d_charvspr
8226 eval $setvar
8227
8228 : see if chown exists
8229 set chown d_chown
8230 eval $inlibc
8231
8232 : see if chroot exists
8233 set chroot d_chroot
8234 eval $inlibc
8235
8236 : see if chsize exists
8237 set chsize d_chsize
8238 eval $inlibc
8239
8240 : check for const keyword
8241 echo " "
8242 echo 'Checking to see if your C compiler knows about "const"...' >&4
8243 $cat >const.c <<'EOCP'
8244 typedef struct spug { int drokk; } spug;
8245 int main()
8246 {
8247         const char *foo;
8248         const spug y;
8249 }
8250 EOCP
8251 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8252         val="$define"
8253         echo "Yup, it does."
8254 else
8255         val="$undef"
8256         echo "Nope, it doesn't."
8257 fi
8258 set d_const
8259 eval $setvar
8260
8261 : see if crypt exists
8262 echo " "
8263 if set crypt val -f d_crypt; eval $csym; $val; then
8264         echo 'crypt() found.' >&4
8265         val="$define"
8266         cryptlib=''
8267 else
8268         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8269         if $test -z "$cryptlib"; then
8270                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8271         else
8272                 cryptlib=-lcrypt
8273         fi
8274         if $test -z "$cryptlib"; then
8275                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8276         else
8277                 cryptlib=-lcrypt
8278         fi
8279         if $test -z "$cryptlib"; then
8280                 cryptlib=`./loc libcrypt$_a "" $libpth`
8281         else
8282                 cryptlib=-lcrypt
8283         fi
8284         if $test -z "$cryptlib"; then
8285                 echo 'crypt() NOT found.' >&4
8286                 val="$undef"
8287         else
8288                 val="$define"
8289         fi
8290 fi
8291 set d_crypt
8292 eval $setvar
8293
8294 : get csh whereabouts
8295 case "$csh" in
8296 'csh') val="$undef" ;;
8297 *) val="$define" ;;
8298 esac
8299 set d_csh
8300 eval $setvar
8301 : Respect a hint or command line value for full_csh.
8302 case "$full_csh" in
8303 '') full_csh=$csh ;;
8304 esac
8305
8306 : see if cuserid exists
8307 set cuserid d_cuserid
8308 eval $inlibc
8309
8310 : see if this is a limits.h system
8311 set limits.h i_limits
8312 eval $inhdr
8313
8314 : see if this is a float.h system
8315 set float.h i_float
8316 eval $inhdr
8317
8318 : See if number of significant digits in a double precision number is known
8319 echo " "
8320 $cat >dbl_dig.c <<EOM
8321 #$i_limits I_LIMITS
8322 #$i_float I_FLOAT
8323 #ifdef I_LIMITS
8324 #include <limits.h>
8325 #endif
8326 #ifdef I_FLOAT
8327 #include <float.h>
8328 #endif
8329 #ifdef DBL_DIG
8330 printf("Contains DBL_DIG");
8331 #endif
8332 EOM
8333 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8334 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8335         echo "DBL_DIG found." >&4
8336         val="$define"
8337 else
8338         echo "DBL_DIG NOT found." >&4
8339         val="$undef"
8340 fi
8341 $rm -f dbl_dig.?
8342 set d_dbl_dig
8343 eval $setvar
8344
8345 : see if difftime exists
8346 set difftime d_difftime
8347 eval $inlibc
8348
8349 : see if this is a dirent system
8350 echo " "
8351 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8352         val="$define"
8353         echo "<dirent.h> found." >&4
8354 else
8355         val="$undef"
8356         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8357                 echo "<sys/dir.h> found." >&4
8358                 echo " "
8359         else
8360                 xinc=`./findhdr sys/ndir.h`
8361         fi
8362         echo "<dirent.h> NOT found." >&4
8363 fi
8364 set i_dirent
8365 eval $setvar
8366
8367 : Look for type of directory structure.
8368 echo " "
8369 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8370
8371 case "$direntrytype" in
8372 ''|' ')
8373         case "$i_dirent" in
8374         $define) guess1='struct dirent' ;;
8375         *) guess1='struct direct'  ;;
8376         esac
8377         ;;
8378 *)      guess1="$direntrytype"
8379         ;;
8380 esac
8381
8382 case "$guess1" in
8383 'struct dirent') guess2='struct direct' ;;
8384 *) guess2='struct dirent' ;;
8385 esac
8386                 
8387 if $contains "$guess1" try.c >/dev/null 2>&1; then
8388         direntrytype="$guess1"
8389         echo "Your directory entries are $direntrytype." >&4
8390 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8391         direntrytype="$guess2"
8392         echo "Your directory entries seem to be $direntrytype." >&4
8393 else
8394         echo "I don't recognize your system's directory entries." >&4
8395         rp="What type is used for directory entries on this system?"
8396         dflt="$guess1"
8397         . ./myread
8398         direntrytype="$ans"
8399 fi
8400 $rm -f try.c
8401
8402
8403 : see if the directory entry stores field length
8404 echo " "
8405 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8406 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8407         echo "Good, your directory entry keeps length information in d_namlen." >&4
8408         val="$define"
8409 else
8410         echo "Your directory entry does not know about the d_namlen field." >&4
8411         val="$undef"
8412 fi
8413 set d_dirnamlen
8414 eval $setvar
8415 $rm -f try.c
8416
8417 : see if dlerror exists
8418 xxx_runnm="$runnm"
8419 runnm=false
8420 set dlerror d_dlerror
8421 eval $inlibc
8422 runnm="$xxx_runnm"
8423
8424 : see if dlfcn is available
8425 set dlfcn.h i_dlfcn
8426 eval $inhdr
8427
8428 case "$usedl" in
8429 $define|y|true)
8430         $cat << EOM
8431
8432 On a few systems, the dynamically loaded modules that perl generates and uses
8433 will need a different extension than shared libs. The default will probably
8434 be appropriate.
8435
8436 EOM
8437         case "$dlext" in
8438         '')     dflt="$so" ;;
8439         *)      dflt="$dlext" ;;
8440         esac
8441         rp='What is the extension of dynamically loaded modules'
8442         . ./myread
8443         dlext="$ans"
8444         ;;
8445 *)
8446         dlext="none"
8447         ;;
8448 esac
8449
8450 : Check if dlsym need a leading underscore
8451 echo " "
8452 val="$undef"
8453
8454 case "$dlsrc" in
8455 dl_dlopen.xs)
8456         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8457         $cat >dyna.c <<'EOM'
8458 fred () { }
8459 EOM
8460
8461 $cat >fred.c<<EOM
8462
8463 #include <stdio.h>
8464 #$i_dlfcn I_DLFCN
8465 #ifdef I_DLFCN
8466 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8467 #else
8468 #include <sys/types.h>
8469 #include <nlist.h>
8470 #include <link.h>
8471 #endif
8472
8473 extern int fred() ;
8474
8475 int main()
8476 {
8477     void * handle ;
8478     void * symbol ;
8479 #ifndef RTLD_LAZY
8480     int mode = 1 ;
8481 #else
8482     int mode = RTLD_LAZY ;
8483 #endif
8484     handle = dlopen("./dyna.$dlext", mode) ;
8485     if (handle == NULL) {
8486         printf ("1\n") ;
8487         fflush (stdout) ;
8488         exit(0);
8489     }
8490     symbol = dlsym(handle, "fred") ;
8491     if (symbol == NULL) {
8492         /* try putting a leading underscore */
8493         symbol = dlsym(handle, "_fred") ;
8494         if (symbol == NULL) {
8495             printf ("2\n") ;
8496             fflush (stdout) ;
8497             exit(0);
8498         }
8499         printf ("3\n") ;
8500     }
8501     else
8502         printf ("4\n") ;
8503     fflush (stdout) ;
8504     exit(0);
8505 }
8506 EOM
8507         : Call the object file tmp-dyna.o in case dlext=o.
8508         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8509                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8510                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
8511                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8512                 xxx=`./fred`
8513                 case $xxx in
8514                 1)      echo "Test program failed using dlopen." >&4
8515                         echo "Perhaps you should not use dynamic loading." >&4;;
8516                 2)      echo "Test program failed using dlsym." >&4
8517                         echo "Perhaps you should not use dynamic loading." >&4;;
8518                 3)      echo "dlsym needs a leading underscore" >&4
8519                         val="$define" ;;
8520                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8521                 esac
8522         else
8523                 echo "I can't compile and run the test program." >&4
8524                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8525         fi
8526         ;;
8527 esac
8528                 
8529 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8530
8531 set d_dlsymun
8532 eval $setvar
8533
8534 hasproto='varname=$1; func=$2; shift; shift;
8535 while $test $# -ge 2; do
8536         case "$1" in
8537         $define) echo "#include <$2>";;
8538         esac ;
8539     shift 2;
8540 done > try.c;
8541 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8542 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8543         echo "$func() prototype found.";
8544         val="$define";
8545 else
8546         echo "$func() prototype NOT found.";
8547         val="$undef";
8548 fi;
8549 set $varname;
8550 eval $setvar;
8551 $rm -f try.c tryout.c'
8552
8553 : see if prototype for drand48 is available
8554 echo " "
8555 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8556 eval $hasproto
8557
8558 : see if dup2 exists
8559 set dup2 d_dup2
8560 eval $inlibc
8561
8562 : see if eaccess exists
8563 set eaccess d_eaccess
8564 eval $inlibc
8565
8566 : see if endgrent exists
8567 set endgrent d_endgrent
8568 eval $inlibc
8569
8570 : see if endhostent exists
8571 set endhostent d_endhent
8572 eval $inlibc
8573
8574 : see if endnetent exists
8575 set endnetent d_endnent
8576 eval $inlibc
8577
8578 : see if endprotoent exists
8579 set endprotoent d_endpent
8580 eval $inlibc
8581
8582 : see if endpwent exists
8583 set endpwent d_endpwent
8584 eval $inlibc
8585
8586 : see if endservent exists
8587 set endservent d_endsent
8588 eval $inlibc
8589
8590 : Locate the flags for 'open()'
8591 echo " "
8592 $cat >open3.c <<'EOCP'
8593 #include <sys/types.h>
8594 #ifdef I_FCNTL
8595 #include <fcntl.h>
8596 #endif
8597 #ifdef I_SYS_FILE
8598 #include <sys/file.h>
8599 #endif
8600 int main() {
8601         if(O_RDONLY);
8602 #ifdef O_TRUNC
8603         exit(0);
8604 #else
8605         exit(1);
8606 #endif
8607 }
8608 EOCP
8609 : check sys/file.h first to get FREAD on Sun
8610 if $test `./findhdr sys/file.h` && \
8611                 set open3 -DI_SYS_FILE && eval $compile; then
8612         h_sysfile=true;
8613         echo "<sys/file.h> defines the O_* constants..." >&4
8614         if ./open3; then
8615                 echo "and you have the 3 argument form of open()." >&4
8616                 val="$define"
8617         else
8618                 echo "but not the 3 argument form of open().  Oh, well." >&4
8619                 val="$undef"
8620         fi
8621 elif $test `./findhdr fcntl.h` && \
8622                 set open3 -DI_FCNTL && eval $compile; then
8623         h_fcntl=true;
8624         echo "<fcntl.h> defines the O_* constants..." >&4
8625         if ./open3; then
8626                 echo "and you have the 3 argument form of open()." >&4
8627                 val="$define"
8628         else
8629                 echo "but not the 3 argument form of open().  Oh, well." >&4
8630                 val="$undef"
8631         fi
8632 else
8633         val="$undef"
8634         echo "I can't find the O_* constant definitions!  You got problems." >&4
8635 fi
8636 set d_open3
8637 eval $setvar
8638 $rm -f open3*
8639
8640 : see which of string.h or strings.h is needed
8641 echo " "
8642 strings=`./findhdr string.h`
8643 if $test "$strings" && $test -r "$strings"; then
8644         echo "Using <string.h> instead of <strings.h>." >&4
8645         val="$define"
8646 else
8647         val="$undef"
8648         strings=`./findhdr strings.h`
8649         if $test "$strings" && $test -r "$strings"; then
8650                 echo "Using <strings.h> instead of <string.h>." >&4
8651         else
8652                 echo "No string header found -- You'll surely have problems." >&4
8653         fi
8654 fi
8655 set i_string
8656 eval $setvar
8657 case "$i_string" in
8658 "$undef") strings=`./findhdr strings.h`;;
8659 *)        strings=`./findhdr string.h`;;
8660 esac
8661
8662 : check for non-blocking I/O stuff
8663 case "$h_sysfile" in
8664 true) echo "#include <sys/file.h>" > head.c;;
8665 *)
8666         case "$h_fcntl" in
8667         true) echo "#include <fcntl.h>" > head.c;;
8668         *) echo "#include <sys/fcntl.h>" > head.c;;
8669         esac
8670         ;;
8671 esac
8672 echo " "
8673 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8674 case "$o_nonblock" in
8675 '')
8676         $cat head.c > try.c
8677         $cat >>try.c <<'EOCP'
8678 #include <stdio.h>
8679 int main() {
8680 #ifdef O_NONBLOCK
8681         printf("O_NONBLOCK\n");
8682         exit(0);
8683 #endif
8684 #ifdef O_NDELAY
8685         printf("O_NDELAY\n");
8686         exit(0);
8687 #endif
8688 #ifdef FNDELAY
8689         printf("FNDELAY\n");
8690         exit(0);
8691 #endif
8692         exit(0);
8693 }
8694 EOCP
8695         set try
8696         if eval $compile_ok; then
8697                 o_nonblock=`./try`
8698                 case "$o_nonblock" in
8699                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8700                 *) echo "Seems like we can use $o_nonblock.";;
8701                 esac
8702         else
8703                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8704         fi
8705         ;;
8706 *) echo "Using $hint value $o_nonblock.";;
8707 esac
8708 $rm -f try try.* .out core
8709
8710 echo " "
8711 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8712 case "$eagain" in
8713 '')
8714         $cat head.c > try.c
8715         $cat >>try.c <<EOCP
8716 #include <errno.h>
8717 #include <sys/types.h>
8718 #include <signal.h>
8719 #include <stdio.h> 
8720 #define MY_O_NONBLOCK $o_nonblock
8721 #ifndef errno  /* XXX need better Configure test */
8722 extern int errno;
8723 #endif
8724 #$i_unistd I_UNISTD
8725 #ifdef I_UNISTD
8726 #include <unistd.h>
8727 #endif
8728 #$i_string I_STRING
8729 #ifdef I_STRING
8730 #include <string.h>
8731 #else
8732 #include <strings.h>
8733 #endif
8734 $signal_t blech(x) int x; { exit(3); }
8735 EOCP
8736         $cat >> try.c <<'EOCP'
8737 int main()
8738 {
8739         int pd[2];
8740         int pu[2];
8741         char buf[1];
8742         char string[100];
8743
8744         pipe(pd);       /* Down: child -> parent */
8745         pipe(pu);       /* Up: parent -> child */
8746         if (0 != fork()) {
8747                 int ret;
8748                 close(pd[1]);   /* Parent reads from pd[0] */
8749                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8750                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8751                         exit(1);
8752                 signal(SIGALRM, blech);
8753                 alarm(5);
8754                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8755                         exit(2);
8756                 sprintf(string, "%d\n", ret);
8757                 write(2, string, strlen(string));
8758                 alarm(0);
8759 #ifdef EAGAIN
8760                 if (errno == EAGAIN) {
8761                         printf("EAGAIN\n");
8762                         goto ok;
8763                 }
8764 #endif
8765 #ifdef EWOULDBLOCK
8766                 if (errno == EWOULDBLOCK)
8767                         printf("EWOULDBLOCK\n");
8768 #endif
8769         ok:
8770                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8771                 sleep(2);                               /* Give it time to close our pipe */
8772                 alarm(5);
8773                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8774                 alarm(0);
8775                 sprintf(string, "%d\n", ret);
8776                 write(3, string, strlen(string));
8777                 exit(0);
8778         }
8779
8780         close(pd[0]);                   /* We write to pd[1] */
8781         close(pu[1]);                   /* We read from pu[0] */
8782         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8783         close(pd[1]);                   /* Pipe pd is now fully closed! */
8784         exit(0);                                /* Bye bye, thank you for playing! */
8785 }
8786 EOCP
8787         set try
8788         if eval $compile_ok; then
8789                 echo "$startsh" >mtry
8790                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8791                 chmod +x mtry
8792                 ./mtry >/dev/null 2>&1
8793                 case $? in
8794                 0) eagain=`$cat try.out`;;
8795                 1) echo "Could not perform non-blocking setting!";;
8796                 2) echo "I did a successful read() for something that was not there!";;
8797                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8798                 *) echo "Something terribly wrong happened during testing.";;
8799                 esac
8800                 rd_nodata=`$cat try.ret`
8801                 echo "A read() system call with no data present returns $rd_nodata."
8802                 case "$rd_nodata" in
8803                 0|-1) ;;
8804                 *)
8805                         echo "(That's peculiar, fixing that to be -1.)"
8806                         rd_nodata=-1
8807                         ;;
8808                 esac
8809                 case "$eagain" in
8810                 '')
8811                         echo "Forcing errno EAGAIN on read() with no data available."
8812                         eagain=EAGAIN
8813                         ;;
8814                 *)
8815                         echo "Your read() sets errno to $eagain when no data is available."
8816                         ;;
8817                 esac
8818                 status=`$cat try.err`
8819                 case "$status" in
8820                 0) echo "And it correctly returns 0 to signal EOF.";;
8821                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8822                 *) echo "However, your read() returns '$status' on EOF??";;
8823                 esac
8824                 val="$define"
8825                 if test "$status" = "$rd_nodata"; then
8826                         echo "WARNING: you can't distinguish between EOF and no data!"
8827                         val="$undef"
8828                 fi
8829         else
8830                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8831                 eagain=EAGAIN
8832         fi
8833         set d_eofnblk
8834         eval $setvar
8835         ;;
8836 *)
8837         echo "Using $hint value $eagain."
8838         echo "Your read() returns $rd_nodata when no data is present."
8839         case "$d_eofnblk" in
8840         "$define") echo "And you can see EOF because read() returns 0.";;
8841         "$undef") echo "But you can't see EOF status from read() returned value.";;
8842         *)
8843                 echo "(Assuming you can't see EOF status from read anyway.)"
8844                 d_eofnblk=$undef
8845                 ;;
8846         esac
8847         ;;
8848 esac
8849 $rm -f try try.* .out core head.c mtry
8850
8851 : see if fchmod exists
8852 set fchmod d_fchmod
8853 eval $inlibc
8854
8855 : see if fchown exists
8856 set fchown d_fchown
8857 eval $inlibc
8858
8859 : see if this is an fcntl system
8860 set fcntl d_fcntl
8861 eval $inlibc
8862
8863 echo " "
8864 : See if fcntl-based locking works.
8865 $cat >try.c <<'EOCP'
8866 #include <stdlib.h>
8867 #include <unistd.h>
8868 #include <fcntl.h>
8869 int main() {
8870 #if defined(F_SETLK) && defined(F_SETLKW)
8871      struct flock flock;
8872      int retval, fd;
8873      fd = open("try.c", O_RDONLY);
8874      flock.l_type = F_RDLCK;
8875      flock.l_whence = SEEK_SET;
8876      flock.l_start = flock.l_len = 0;
8877      retval = fcntl(fd, F_SETLK, &flock);
8878      close(fd);
8879      (retval < 0 ? exit(2) : exit(0));
8880 #else
8881      exit(2);
8882 #endif
8883 }
8884 EOCP
8885 echo "Checking if fcntl-based file locking works... "
8886 case "$d_fcntl" in
8887 "$define")
8888         set try
8889         if eval $compile_ok; then
8890                 if ./try; then
8891                         echo "Yes, it seems to work."
8892                         val="$define"
8893                 else
8894                         echo "Nope, it didn't work."
8895                         val="$undef"
8896                 fi
8897         else
8898                 echo "I'm unable to compile the test program, so I'll assume not."
8899                 val="$undef"
8900         fi
8901         ;;
8902 *) val="$undef";
8903         echo "Nope, since you don't even have fcntl()."
8904         ;;
8905 esac
8906 set d_fcntl_can_lock
8907 eval $setvar
8908 $rm -f try*
8909
8910
8911 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8912 while $test $# -ge 2; do
8913         case "$1" in
8914         $define) echo "#include <$2>";;
8915         esac ;
8916     shift 2;
8917 done > try.c;
8918 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8919 set try;
8920 if eval $compile; then
8921         val="$define";
8922 else
8923         val="$undef";
8924 fi;
8925 set $varname;
8926 eval $setvar;
8927 $rm -f try.c try.o'
8928
8929 socketlib=''
8930 sockethdr=''
8931 : see whether socket exists
8932 echo " "
8933 $echo $n "Hmm... $c" >&4
8934 if set socket val -f d_socket; eval $csym; $val; then
8935         echo "Looks like you have Berkeley networking support." >&4
8936         d_socket="$define"
8937         if set setsockopt val -f; eval $csym; $val; then
8938                 d_oldsock="$undef"
8939         else
8940                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8941                 d_oldsock="$define"
8942         fi
8943 else
8944         if $contains socklib libc.list >/dev/null 2>&1; then
8945                 echo "Looks like you have Berkeley networking support." >&4
8946                 d_socket="$define"
8947                 : we will have to assume that it supports the 4.2 BSD interface
8948                 d_oldsock="$undef"
8949         else
8950                 echo "You don't have Berkeley networking in libc$_a..." >&4
8951                 if test "X$d_socket" = "X$define"; then
8952                    echo "...but you seem to believe that you have sockets." >&4
8953                 else
8954                         for net in net socket
8955                         do
8956                                 if test -f /usr/lib/lib$net$_a; then
8957                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8958                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8959                                         if $contains socket libc.list >/dev/null 2>&1; then
8960                                                 d_socket="$define"
8961                                                 socketlib="-l$net"
8962                                                 case "$net" in
8963                                                 net)
8964                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8965                                                         sockethdr="-I/usr/netinclude"
8966                                                         ;;
8967                                                 esac
8968                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8969                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8970                                                         d_oldsock="$undef"
8971                                                 else
8972                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8973                                                         d_oldsock="$define"
8974                                                 fi
8975                                                 break
8976                                         fi
8977                                 fi
8978                         done
8979                         if test "X$d_socket" != "X$define"; then
8980                            echo "or anywhere else I see." >&4
8981                            d_socket="$undef"
8982                            d_oldsock="$undef"
8983                         fi
8984                 fi
8985         fi
8986 fi
8987
8988 : see if socketpair exists
8989 set socketpair d_sockpair
8990 eval $inlibc
8991
8992
8993 echo " "
8994 echo "Checking the availability of certain socket constants..." >& 4
8995 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8996         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8997         $cat >try.c <<EOF
8998 #include <sys/types.h>
8999 #include <sys/socket.h>
9000 int main() {
9001     int i = $ENUM;
9002 }
9003 EOF
9004         val="$undef"
9005         set try; if eval $compile; then
9006                 val="$define"
9007         fi
9008         set d_${enum}; eval $setvar
9009         $rm -f try.c try
9010 done
9011
9012 : see if sys/select.h has to be included
9013 set sys/select.h i_sysselct
9014 eval $inhdr
9015
9016 : see if we should include time.h, sys/time.h, or both
9017 echo " "
9018 if test "X$timeincl" = X; then
9019         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9020         $echo $n "I'm now running the test program...$c"
9021         $cat >try.c <<'EOCP'
9022 #include <sys/types.h>
9023 #ifdef I_TIME
9024 #include <time.h>
9025 #endif
9026 #ifdef I_SYSTIME
9027 #ifdef SYSTIMEKERNEL
9028 #define KERNEL
9029 #endif
9030 #include <sys/time.h>
9031 #endif
9032 #ifdef I_SYSSELECT
9033 #include <sys/select.h>
9034 #endif
9035 int main()
9036 {
9037         struct tm foo;
9038 #ifdef S_TIMEVAL
9039         struct timeval bar;
9040 #endif
9041 #ifdef S_TIMEZONE
9042         struct timezone tzp;
9043 #endif
9044         if (foo.tm_sec == foo.tm_sec)
9045                 exit(0);
9046 #ifdef S_TIMEVAL
9047         if (bar.tv_sec == bar.tv_sec)
9048                 exit(0);
9049 #endif
9050         exit(1);
9051 }
9052 EOCP
9053         flags=''
9054         for s_timezone in '-DS_TIMEZONE' ''; do
9055         sysselect=''
9056         for s_timeval in '-DS_TIMEVAL' ''; do
9057         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9058         for i_time in '' '-DI_TIME'; do
9059         for i_systime in '-DI_SYSTIME' ''; do
9060                 case "$flags" in
9061                 '') $echo $n ".$c"
9062                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9063                         if eval $compile; then
9064                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9065                                 shift
9066                                 flags="$*"
9067                                 echo " "
9068                                 $echo $n "Succeeded with $flags$c"
9069                         fi
9070                         ;;
9071                 esac
9072         done
9073         done
9074         done
9075         done
9076         done
9077         timeincl=''
9078         echo " "
9079         case "$flags" in
9080         *SYSTIMEKERNEL*) i_systimek="$define"
9081                 timeincl=`./findhdr sys/time.h`
9082                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9083         *) i_systimek="$undef";;
9084         esac
9085         case "$flags" in
9086         *I_TIME*) i_time="$define"
9087                 timeincl=`./findhdr time.h`" $timeincl"
9088                 echo "We'll include <time.h>." >&4;;
9089         *) i_time="$undef";;
9090         esac
9091         case "$flags" in
9092         *I_SYSTIME*) i_systime="$define"
9093                 timeincl=`./findhdr sys/time.h`" $timeincl"
9094                 echo "We'll include <sys/time.h>." >&4;;
9095         *) i_systime="$undef";;
9096         esac
9097         $rm -f try.c try
9098 fi
9099
9100 : check for fd_set items
9101 $cat <<EOM
9102
9103 Checking to see how well your C compiler handles fd_set and friends ...
9104 EOM
9105 $cat >fd_set.c <<EOCP
9106 #$i_systime I_SYS_TIME
9107 #$i_sysselct I_SYS_SELECT
9108 #$d_socket HAS_SOCKET
9109 #include <sys/types.h>
9110 #ifdef HAS_SOCKET
9111 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9112 #endif
9113 #ifdef I_SYS_TIME
9114 #include <sys/time.h>
9115 #endif
9116 #ifdef I_SYS_SELECT
9117 #include <sys/select.h>
9118 #endif
9119 int main() {
9120         fd_set fds;
9121
9122 #ifdef TRYBITS
9123         if(fds.fds_bits);
9124 #endif
9125
9126 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9127         exit(0);
9128 #else
9129         exit(1);
9130 #endif
9131 }
9132 EOCP
9133 set fd_set -DTRYBITS
9134 if eval $compile; then
9135         d_fds_bits="$define"
9136         d_fd_set="$define"
9137         echo "Well, your system knows about the normal fd_set typedef..." >&4
9138         if ./fd_set; then
9139                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9140                 d_fd_macros="$define"
9141         else
9142                 $cat >&4 <<'EOM'
9143 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9144 EOM
9145                 d_fd_macros="$undef"
9146         fi
9147 else
9148         $cat <<'EOM'
9149 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9150 EOM
9151         set fd_set
9152         if eval $compile; then
9153                 d_fds_bits="$undef"
9154                 d_fd_set="$define"
9155                 echo "Well, your system has some sort of fd_set available..." >&4
9156                 if ./fd_set; then
9157                         echo "and you have the normal fd_set macros." >&4
9158                         d_fd_macros="$define"
9159                 else
9160                         $cat <<'EOM'
9161 but not the normal fd_set macros!  Gross!  More work for me...
9162 EOM
9163                         d_fd_macros="$undef"
9164                 fi
9165         else
9166         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9167                 d_fd_set="$undef"
9168                 d_fds_bits="$undef"
9169                 d_fd_macros="$undef"
9170         fi
9171 fi
9172 $rm -f fd_set*
9173
9174 : see if fgetpos exists
9175 set fgetpos d_fgetpos
9176 eval $inlibc
9177
9178 : see if flock exists
9179 set flock d_flock
9180 eval $inlibc
9181
9182 : see if fork exists
9183 set fork d_fork
9184 eval $inlibc
9185
9186 : see if pathconf exists
9187 set pathconf d_pathconf
9188 eval $inlibc
9189
9190 : see if fpathconf exists
9191 set fpathconf d_fpathconf
9192 eval $inlibc
9193
9194
9195 : check for fpos64_t
9196 echo " "
9197 echo "Checking to see if you have fpos64_t..." >&4
9198 $cat >try.c <<EOCP
9199 #include <stdio.h>
9200 int main() { fpos64_t x = 7; }
9201 EOCP
9202 set try
9203 if eval $compile; then
9204         val="$define"
9205         echo "You have fpos64_t."
9206 else
9207         val="$undef"
9208         echo "You do not have fpos64_t."
9209         case "$fpossize" in
9210         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9211         esac
9212 fi
9213 $rm -f try.* try
9214 set d_fpos64_t
9215 eval $setvar
9216
9217 : see if frexpl exists
9218 set frexpl d_frexpl
9219 eval $inlibc
9220
9221 hasstruct='varname=$1; struct=$2; shift; shift;
9222 while $test $# -ge 2; do
9223         case "$1" in
9224         $define) echo "#include <$2>";;
9225         esac ;
9226     shift 2;
9227 done > try.c;
9228 echo "int main () { struct $struct foo; }" >> try.c;
9229 set try;
9230 if eval $compile; then
9231         val="$define";
9232 else
9233         val="$undef";
9234 fi;
9235 set $varname;
9236 eval $setvar;
9237 $rm -f try.c try.o'
9238
9239 : see if this is a sys/param system
9240 set sys/param.h i_sysparam
9241 eval $inhdr
9242
9243 : see if this is a sys/mount.h system
9244 set sys/mount.h i_sysmount
9245 eval $inhdr
9246
9247 : see if sys/types.h has to be included
9248 set sys/types.h i_systypes
9249 eval $inhdr
9250
9251
9252 echo " "
9253 echo "Checking to see if your system supports struct fs_data..." >&4
9254 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9255 eval $hasstruct
9256 case "$d_fs_data_s" in
9257 "$define")      echo "Yes, it does."   ;;
9258 *)              echo "No, it doesn't." ;;
9259 esac
9260
9261 : see if fseeko exists
9262 set fseeko d_fseeko
9263 eval $inlibc
9264 case "$longsize" in
9265 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9266 esac
9267
9268 : see if fsetpos exists
9269 set fsetpos d_fsetpos
9270 eval $inlibc
9271
9272
9273 : see if fstatfs exists
9274 set fstatfs d_fstatfs
9275 eval $inlibc
9276
9277
9278 : see if statvfs exists
9279 set statvfs d_statvfs
9280 eval $inlibc
9281
9282 : see if fstatvfs exists
9283 set fstatvfs d_fstatvfs
9284 eval $inlibc
9285
9286
9287 : see if fsync exists
9288 set fsync d_fsync
9289 eval $inlibc
9290
9291 : see if ftello exists
9292 set ftello d_ftello
9293 eval $inlibc
9294 case "$longsize" in
9295 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9296 esac
9297
9298 : see if getcwd exists
9299 set getcwd d_getcwd
9300 eval $inlibc
9301
9302 : see if getespwnam exists
9303 set getespwnam d_getespwnam
9304 eval $inlibc
9305
9306
9307 : see if getfsstat exists
9308 set getfsstat d_getfsstat
9309 eval $inlibc
9310
9311 : see if getgrent exists
9312 set getgrent d_getgrent
9313 eval $inlibc
9314
9315 : see if gethostbyaddr exists
9316 set gethostbyaddr d_gethbyaddr
9317 eval $inlibc
9318
9319 : see if gethostbyname exists
9320 set gethostbyname d_gethbyname
9321 eval $inlibc
9322
9323 : see if gethostent exists
9324 set gethostent d_gethent
9325 eval $inlibc
9326
9327 : see how we will look up host name
9328 echo " "
9329 call=''
9330 if set gethostname val -f d_gethname; eval $csym; $val; then
9331         echo 'gethostname() found.' >&4
9332         d_gethname="$define"
9333         call=gethostname
9334 fi
9335 if set uname val -f d_uname; eval $csym; $val; then
9336         if ./xenix; then
9337                 $cat <<'EOM'
9338 uname() was found, but you're running xenix, and older versions of xenix
9339 have a broken uname(). If you don't really know whether your xenix is old
9340 enough to have a broken system call, use the default answer.
9341
9342 EOM
9343                 dflt=y
9344                 case "$d_uname" in
9345                 "$define") dflt=n;;
9346                 esac
9347                 rp='Is your uname() broken?'
9348                 . ./myread
9349                 case "$ans" in
9350                 n*) d_uname="$define"; call=uname;;
9351                 esac
9352         else
9353                 echo 'uname() found.' >&4
9354                 d_uname="$define"
9355                 case "$call" in
9356                 '') call=uname ;;
9357                 esac
9358         fi
9359 fi
9360 case "$d_gethname" in
9361 '') d_gethname="$undef";;
9362 esac
9363 case "$d_uname" in
9364 '') d_uname="$undef";;
9365 esac
9366 case "$d_uname$d_gethname" in
9367 *define*)
9368         dflt=n
9369         cat <<EOM
9370  
9371 Every now and then someone has a $call() that lies about the hostname
9372 but can't be fixed for political or economic reasons.  If you wish, I can
9373 pretend $call() isn't there and maybe compute hostname at run-time
9374 thanks to the '$phostname' command.
9375
9376 EOM
9377         rp="Shall I ignore $call() from now on?"
9378         . ./myread
9379         case "$ans" in
9380         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9381         esac;;
9382 esac
9383 case "$phostname" in
9384 '') aphostname='';;
9385 *) case "$aphostname" in
9386         /*) ;;
9387         *) set X $phostname
9388                 shift
9389                 file=$1
9390                 shift
9391                 file=`./loc $file $file $pth`
9392                 aphostname=`echo $file $*`
9393                 ;;
9394         esac
9395         ;;
9396 esac
9397 case "$d_uname$d_gethname" in
9398 *define*) ;;
9399 *)
9400         case "$phostname" in
9401         '')
9402                 echo "There will be no way for $package to get your hostname." >&4;;
9403         *)
9404         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9405                 ;;
9406         esac;;
9407 esac
9408 case "$d_phostname" in
9409 '') d_phostname="$undef";;
9410 esac
9411
9412 : see if this is a netdb.h system
9413 set netdb.h i_netdb
9414 eval $inhdr
9415
9416 : see if prototypes for various gethostxxx netdb.h functions are available
9417 echo " "
9418 set d_gethostprotos gethostent $i_netdb netdb.h
9419 eval $hasproto
9420
9421 : see if getlogin exists
9422 set getlogin d_getlogin
9423 eval $inlibc
9424
9425 : see if getmnt exists
9426 set getmnt d_getmnt
9427 eval $inlibc
9428
9429 : see if getmntent exists
9430 set getmntent d_getmntent
9431 eval $inlibc
9432
9433 : see if getnetbyaddr exists
9434 set getnetbyaddr d_getnbyaddr
9435 eval $inlibc
9436
9437 : see if getnetbyname exists
9438 set getnetbyname d_getnbyname
9439 eval $inlibc
9440
9441 : see if getnetent exists
9442 set getnetent d_getnent
9443 eval $inlibc
9444
9445 : see if prototypes for various getnetxxx netdb.h functions are available
9446 echo " "
9447 set d_getnetprotos getnetent $i_netdb netdb.h
9448 eval $hasproto
9449
9450 : see if getpagesize exists
9451 set getpagesize d_getpagsz
9452 eval $inlibc
9453
9454
9455 : see if getprotobyname exists
9456 set getprotobyname d_getpbyname
9457 eval $inlibc
9458
9459 : see if getprotobynumber exists
9460 set getprotobynumber d_getpbynumber
9461 eval $inlibc
9462
9463 : see if getprotoent exists
9464 set getprotoent d_getpent
9465 eval $inlibc
9466
9467 : see if getpgid exists
9468 set getpgid d_getpgid
9469 eval $inlibc
9470
9471 : see if getpgrp2 exists
9472 set getpgrp2 d_getpgrp2
9473 eval $inlibc
9474
9475 : see if getppid exists
9476 set getppid d_getppid
9477 eval $inlibc
9478
9479 : see if getpriority exists
9480 set getpriority d_getprior
9481 eval $inlibc
9482
9483 : see if prototypes for various getprotoxxx netdb.h functions are available
9484 echo " "
9485 set d_getprotoprotos getprotoent $i_netdb netdb.h
9486 eval $hasproto
9487
9488 : see if getprpwnam exists
9489 set getprpwnam d_getprpwnam
9490 eval $inlibc
9491
9492 : see if getpwent exists
9493 set getpwent d_getpwent
9494 eval $inlibc
9495
9496
9497 : see if getservbyname exists
9498 set getservbyname d_getsbyname
9499 eval $inlibc
9500
9501 : see if getservbyport exists
9502 set getservbyport d_getsbyport
9503 eval $inlibc
9504
9505 : see if getservent exists
9506 set getservent d_getsent
9507 eval $inlibc
9508
9509 : see if prototypes for various getservxxx netdb.h functions are available
9510 echo " "
9511 set d_getservprotos getservent $i_netdb netdb.h
9512 eval $hasproto
9513
9514 : see if getspnam exists
9515 set getspnam d_getspnam
9516 eval $inlibc
9517
9518 : see if gettimeofday or ftime exists
9519 set gettimeofday d_gettimeod
9520 eval $inlibc
9521 case "$d_gettimeod" in
9522 "$undef")
9523         set ftime d_ftime 
9524         eval $inlibc
9525         ;;
9526 *)
9527         val="$undef"; set d_ftime; eval $setvar
9528         ;;
9529 esac
9530 case "$d_gettimeod$d_ftime" in
9531 "$undef$undef")
9532         echo " "
9533         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9534         ;;
9535 esac
9536
9537 : see if this is an grp system
9538 set grp.h i_grp
9539 eval $inhdr
9540
9541 case "$i_grp" in
9542 $define)
9543         xxx=`./findhdr grp.h`
9544         $cppstdin $cppflags $cppminus < $xxx >$$.h
9545
9546         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9547                 val="$define"
9548         else
9549                 val="$undef"
9550         fi
9551         set d_grpasswd
9552         eval $setvar
9553
9554         $rm -f $$.h
9555         ;;
9556 *)
9557         val="$undef";
9558         set d_grpasswd; eval $setvar
9559         ;;
9560 esac
9561
9562 : see if hasmntopt exists
9563 set hasmntopt d_hasmntopt
9564 eval $inlibc
9565
9566 : see if this is a netinet/in.h or sys/in.h system
9567 set netinet/in.h i_niin sys/in.h i_sysin
9568 eval $inhdr
9569
9570 : see if arpa/inet.h has to be included
9571 set arpa/inet.h i_arpainet
9572 eval $inhdr
9573
9574 : see if htonl --and friends-- exists
9575 val=''
9576 set htonl val
9577 eval $inlibc
9578
9579 : Maybe they are macros.
9580 case "$val" in
9581 $undef)
9582         $cat >htonl.c <<EOM
9583 #include <stdio.h>
9584 #include <sys/types.h>
9585 #$i_niin I_NETINET_IN
9586 #$i_sysin I_SYS_IN
9587 #$i_arpainet I_ARPA_INET
9588 #ifdef I_NETINET_IN
9589 #include <netinet/in.h>
9590 #endif
9591 #ifdef I_SYS_IN
9592 #include <sys/in.h>
9593 #endif
9594 #ifdef I_ARPA_INET
9595 #include <arpa/inet.h>
9596 #endif
9597 #ifdef htonl
9598 printf("Defined as a macro.");
9599 #endif
9600 EOM
9601         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9602         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9603                 val="$define"
9604                 echo "But it seems to be defined as a macro." >&4
9605         fi
9606         $rm -f htonl.?
9607         ;;
9608 esac
9609 set d_htonl
9610 eval $setvar
9611
9612 : see if iconv exists
9613 set iconv d_iconv
9614 eval $inlibc
9615
9616 : index or strchr
9617 echo " "
9618 if set index val -f; eval $csym; $val; then
9619         if set strchr val -f d_strchr; eval $csym; $val; then
9620                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9621                         val="$define"
9622                         vali="$undef"
9623                         echo "strchr() found." >&4
9624                 else
9625                         val="$undef"
9626                         vali="$define"
9627                         echo "index() found." >&4
9628                 fi
9629         else
9630                 val="$undef"
9631                 vali="$define"
9632                 echo "index() found." >&4
9633         fi
9634 else
9635         if set strchr val -f d_strchr; eval $csym; $val; then
9636                 val="$define"
9637                 vali="$undef"
9638                 echo "strchr() found." >&4
9639         else
9640                 echo "No index() or strchr() found!" >&4
9641                 val="$undef"
9642                 vali="$undef"
9643         fi
9644 fi
9645 set d_strchr; eval $setvar
9646 val="$vali"
9647 set d_index; eval $setvar
9648
9649 : check whether inet_aton exists
9650 set inet_aton d_inetaton
9651 eval $inlibc
9652
9653 : see if inttypes.h is available
9654 : we want a real compile instead of Inhdr because some systems
9655 : have an inttypes.h which includes non-existent headers
9656 echo " "
9657 $cat >try.c <<EOCP
9658 #include <inttypes.h>
9659 int main() {
9660         static int32_t foo32 = 0x12345678;
9661 }
9662 EOCP
9663 set try
9664 if eval $compile; then
9665         echo "<inttypes.h> found." >&4
9666         val="$define"
9667 else
9668         echo "<inttypes.h> NOT found." >&4
9669         val="$undef"
9670 fi
9671 $rm -f try.c try
9672 set i_inttypes
9673 eval $setvar
9674
9675 : check for int64_t
9676 echo " "
9677 echo "Checking to see if you have int64_t..." >&4
9678 $cat >try.c <<EOCP
9679 #include <sys/types.h>
9680 #$i_inttypes I_INTTYPES
9681 #ifdef I_INTTYPES
9682 #include <inttypes.h>
9683 #endif
9684 int main() { int64_t x = 7; }
9685 EOCP
9686 set try
9687 if eval $compile; then
9688         val="$define"
9689         echo "You have int64_t."
9690 else
9691         val="$undef"
9692         echo "You do not have int64_t."
9693 fi
9694 $rm -f try try.*
9695 set d_int64_t
9696 eval $setvar
9697
9698 : Look for isascii
9699 echo " "
9700 $cat >isascii.c <<'EOCP'
9701 #include <stdio.h>
9702 #include <ctype.h>
9703 int main() {
9704         int c = 'A';
9705         if (isascii(c))
9706                 exit(0);
9707         else
9708                 exit(1);
9709 }
9710 EOCP
9711 set isascii
9712 if eval $compile; then
9713         echo "isascii() found." >&4
9714         val="$define"
9715 else
9716         echo "isascii() NOT found." >&4
9717         val="$undef"
9718 fi
9719 set d_isascii
9720 eval $setvar
9721 $rm -f isascii*
9722
9723 : see if isnan exists
9724 set isnan d_isnan
9725 eval $inlibc
9726
9727 : see if isnanl exists
9728 set isnanl d_isnanl
9729 eval $inlibc
9730
9731 : see if killpg exists
9732 set killpg d_killpg
9733 eval $inlibc
9734
9735 : see if lchown exists
9736 echo " "
9737 $cat > try.c <<'EOCP'
9738 /* System header to define __stub macros and hopefully few prototypes,
9739     which can conflict with char lchown(); below.  */
9740 #include <assert.h>
9741 /* Override any gcc2 internal prototype to avoid an error.  */
9742 /* We use char because int might match the return type of a gcc2
9743    builtin and then its argument prototype would still apply.  */
9744 char lchown();
9745 int main() {
9746     /*  The GNU C library defines this for functions which it implements
9747         to always fail with ENOSYS.  Some functions are actually named
9748         something starting with __ and the normal name is an alias.  */
9749 #if defined (__stub_lchown) || defined (__stub___lchown)
9750 choke me
9751 #else
9752 lchown();
9753 #endif
9754 ; return 0; }
9755 EOCP
9756 set try
9757 if eval $compile; then
9758     $echo "lchown() found." >&4
9759     val="$define"
9760 else
9761     $echo "lchown() NOT found." >&4
9762     val="$undef"
9763 fi
9764 set d_lchown
9765 eval $setvar
9766
9767 : See if number of significant digits in a double precision number is known
9768 echo " "
9769 $cat >ldbl_dig.c <<EOM
9770 #$i_limits I_LIMITS
9771 #$i_float I_FLOAT
9772 #ifdef I_LIMITS
9773 #include <limits.h>
9774 #endif
9775 #ifdef I_FLOAT
9776 #include <float.h>
9777 #endif
9778 #ifdef LDBL_DIG
9779 printf("Contains LDBL_DIG");
9780 #endif
9781 EOM
9782 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9783 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9784         echo "LDBL_DIG found." >&4
9785         val="$define"
9786 else
9787         echo "LDBL_DIG NOT found." >&4
9788         val="$undef"
9789 fi
9790 $rm -f ldbl_dig.?
9791 set d_ldbl_dig
9792 eval $setvar
9793
9794 : see if link exists
9795 set link d_link
9796 eval $inlibc
9797
9798 : see if localeconv exists
9799 set localeconv d_locconv
9800 eval $inlibc
9801
9802 : see if lockf exists
9803 set lockf d_lockf
9804 eval $inlibc
9805
9806 : check for long long
9807 echo " "
9808 echo "Checking to see if you have long long..." >&4
9809 echo 'int main() { long long x = 7; return 0; }' > try.c
9810 set try
9811 if eval $compile; then
9812         val="$define"
9813         echo "You have long long."
9814 else
9815         val="$undef"
9816         echo "You do not have long long."
9817 fi
9818 $rm try.*
9819 set d_longlong
9820 eval $setvar
9821
9822 : check for length of long long
9823 case "${d_longlong}${longlongsize}" in
9824 $define)
9825         echo " "
9826         echo "Checking to see how big your long longs are..." >&4
9827         $cat >try.c <<'EOCP'
9828 #include <stdio.h>
9829 int main()
9830 {
9831     printf("%d\n", (int)sizeof(long long));
9832     return(0);
9833 }
9834 EOCP
9835         set try
9836         if eval $compile_ok; then
9837                 longlongsize=`./try$exe_ext`
9838                 echo "Your long longs are $longlongsize bytes long."
9839         else
9840                 dflt='8'
9841                 echo " "
9842                 echo "(I can't seem to compile the test program.  Guessing...)"
9843                 rp="What is the size of a long long (in bytes)?"
9844                 . ./myread
9845                 longlongsize="$ans"
9846         fi
9847         if $test "X$longsize" = "X$longlongsize"; then
9848                 echo "(That isn't any different from an ordinary long.)"
9849         fi      
9850         ;;
9851 esac
9852 $rm -f try.* try
9853
9854 : see if prototype for lseek is available
9855 echo " "
9856 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9857 eval $hasproto
9858
9859 : see if lstat exists
9860 set lstat d_lstat
9861 eval $inlibc
9862
9863 : see if madvise exists
9864 set madvise d_madvise
9865 eval $inlibc
9866
9867 : see if mblen exists
9868 set mblen d_mblen
9869 eval $inlibc
9870
9871 : see if mbstowcs exists
9872 set mbstowcs d_mbstowcs
9873 eval $inlibc
9874
9875 : see if mbtowc exists
9876 set mbtowc d_mbtowc
9877 eval $inlibc
9878
9879 : see if memchr exists
9880 set memchr d_memchr
9881 eval $inlibc
9882
9883 : see if memcmp exists
9884 set memcmp d_memcmp
9885 eval $inlibc
9886
9887 : see if memcpy exists
9888 set memcpy d_memcpy
9889 eval $inlibc
9890
9891 : see if memmove exists
9892 set memmove d_memmove
9893 eval $inlibc
9894
9895 : see if memset exists
9896 set memset d_memset
9897 eval $inlibc
9898
9899 : see if mkdir exists
9900 set mkdir d_mkdir
9901 eval $inlibc
9902
9903 : see if mkdtemp exists
9904 set mkdtemp d_mkdtemp
9905 eval $inlibc
9906
9907 : see if mkfifo exists
9908 set mkfifo d_mkfifo
9909 eval $inlibc
9910
9911 : see if mkstemp exists
9912 set mkstemp d_mkstemp
9913 eval $inlibc
9914
9915 : see if mkstemps exists
9916 set mkstemps d_mkstemps
9917 eval $inlibc
9918
9919 : see if mktime exists
9920 set mktime d_mktime
9921 eval $inlibc
9922
9923 : see if this is a sys/mman.h system
9924 set sys/mman.h i_sysmman
9925 eval $inhdr
9926
9927 : see if mmap exists
9928 set mmap d_mmap
9929 eval $inlibc
9930 : see what shmat returns
9931 : default to something harmless
9932 mmaptype='void *'
9933 case "$i_sysmman$d_mmap" in
9934 "$define$define")
9935         $cat >mmap.c <<'END'
9936 #include <sys/mman.h>
9937 void *mmap();
9938 END
9939         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9940                 mmaptype='void *'
9941         else
9942                 mmaptype='caddr_t'
9943         fi
9944         echo "and it returns ($mmaptype)." >&4
9945         ;;
9946 esac
9947
9948
9949
9950 : see if modfl exists
9951 set modfl d_modfl
9952 eval $inlibc
9953
9954 : see if mprotect exists
9955 set mprotect d_mprotect
9956 eval $inlibc
9957
9958 : see if msgctl exists
9959 set msgctl d_msgctl
9960 eval $inlibc
9961
9962 : see if msgget exists
9963 set msgget d_msgget
9964 eval $inlibc
9965
9966 : see if msgsnd exists
9967 set msgsnd d_msgsnd
9968 eval $inlibc
9969
9970 : see if msgrcv exists
9971 set msgrcv d_msgrcv
9972 eval $inlibc
9973
9974 : see how much of the 'msg*(2)' library is present.
9975 h_msg=true
9976 echo " "
9977 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9978 *"$undef"*) h_msg=false;;
9979 esac
9980 case "$osname" in
9981 freebsd)
9982     case "`ipcs 2>&1`" in
9983     "SVID messages"*"not configured"*)
9984         echo "Your $osname does not have the msg*(2) configured." >&4
9985         h_msg=false
9986         val="$undef"
9987         set msgctl d_msgctl
9988         eval $setvar
9989         set msgget d_msgget
9990         eval $setvar
9991         set msgsnd d_msgsnd
9992         eval $setvar
9993         set msgrcv d_msgrcv
9994         eval $setvar
9995         ;;
9996     esac
9997     ;;
9998 esac
9999 : we could also check for sys/ipc.h ...
10000 if $h_msg && $test `./findhdr sys/msg.h`; then
10001         echo "You have the full msg*(2) library." >&4
10002         val="$define"
10003 else
10004         echo "You don't have the full msg*(2) library." >&4
10005         val="$undef"
10006 fi
10007 set d_msg
10008 eval $setvar
10009
10010 : see if msync exists
10011 set msync d_msync
10012 eval $inlibc
10013
10014 : see if munmap exists
10015 set munmap d_munmap
10016 eval $inlibc
10017
10018 : see if nice exists
10019 set nice d_nice
10020 eval $inlibc
10021
10022
10023 echo " "
10024 echo "Checking which 64-bit integer type we could use..." >&4
10025
10026 case "$intsize" in
10027 8) val=int
10028    set quadtype
10029    eval $setvar
10030    val='"unsigned int"'
10031    set uquadtype
10032    eval $setvar
10033    quadkind=1
10034    ;;
10035 *) case "$longsize" in
10036    8) val=long
10037       set quadtype
10038       eval $setvar
10039       val='"unsigned long"'
10040       set uquadtype
10041       eval $setvar
10042       quadkind=2
10043       ;;
10044    *) case "$d_longlong:$longlongsize" in
10045       define:8)
10046         val='"long long"'
10047         set quadtype
10048         eval $setvar
10049         val='"unsigned long long"'
10050         set uquadtype
10051         eval $setvar
10052         quadkind=3
10053         ;;
10054       *) case "$d_int64_t" in
10055          define)
10056            val=int64_t
10057            set quadtype
10058            eval $setvar
10059            val=uint64_t
10060            set uquadtype
10061            eval $setvar
10062            quadkind=4
10063            ;;
10064          esac
10065          ;;
10066       esac
10067       ;;
10068    esac
10069    ;;
10070 esac
10071
10072 case "$quadtype" in
10073 '')     echo "Alas, no 64-bit integer types in sight." >&4
10074         d_quad="$undef"
10075         ;;
10076 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10077             verb="will"
10078         else
10079             verb="could"
10080         fi
10081         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10082         d_quad="$define"
10083         ;;
10084 esac
10085
10086 : check for length of character
10087 echo " "
10088 case "$charsize" in
10089 '')
10090         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10091         $cat >try.c <<'EOCP'
10092 #include <stdio.h>
10093 int main()
10094 {
10095     printf("%d\n", (int)sizeof(char));
10096     exit(0);
10097 }
10098 EOCP
10099         set try
10100         if eval $compile_ok; then
10101                 dflt=`./try`
10102         else
10103                 dflt='1'
10104                 echo "(I can't seem to compile the test program.  Guessing...)"
10105         fi
10106         ;;
10107 *)
10108         dflt="$charsize"
10109         ;;
10110 esac
10111 rp="What is the size of a character (in bytes)?"
10112 . ./myread
10113 charsize="$ans"
10114 $rm -f try.c try
10115
10116 : check for volatile keyword
10117 echo " "
10118 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10119 $cat >try.c <<'EOCP'
10120 int main()
10121 {
10122         typedef struct _goo_struct goo_struct;
10123         goo_struct * volatile goo = ((goo_struct *)0);
10124         struct _goo_struct {
10125                 long long_int;
10126                 int reg_int;
10127                 char char_var;
10128         };
10129         typedef unsigned short foo_t;
10130         char *volatile foo;
10131         volatile int bar;
10132         volatile foo_t blech;
10133         foo = foo;
10134 }
10135 EOCP
10136 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10137         val="$define"
10138         echo "Yup, it does."
10139 else
10140         val="$undef"
10141         echo "Nope, it doesn't."
10142 fi
10143 set d_volatile
10144 eval $setvar
10145 $rm -f try.*
10146
10147
10148 echo " "
10149 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10150
10151 case "$use64bitint:$d_quad:$quadtype" in
10152 define:define:?*)
10153         ivtype="$quadtype"
10154         uvtype="$uquadtype"
10155         ivsize=8
10156         uvsize=8
10157         ;;
10158 *)      ivtype="long"
10159         uvtype="unsigned long"
10160         ivsize=$longsize
10161         uvsize=$longsize
10162         ;;
10163 esac
10164
10165 case "$uselongdouble:$d_longdbl" in
10166 define:define)
10167         nvtype="long double"
10168         nvsize=$longdblsize
10169         ;;
10170 *)      nvtype=double
10171         nvsize=$doublesize
10172         ;;
10173 esac
10174
10175 $echo "(IV will be "$ivtype", $ivsize bytes)"
10176 $echo "(UV will be "$uvtype", $uvsize bytes)"
10177 $echo "(NV will be "$nvtype", $nvsize bytes)"
10178
10179 $cat >try.c <<EOCP
10180 #$i_inttypes I_INTTYPES
10181 #ifdef I_INTTYPES
10182 #include <inttypes.h>
10183 #endif
10184 #include <stdio.h>
10185 int main() {
10186 #ifdef INT8
10187    int8_t i =  INT8_MAX;
10188   uint8_t u = UINT8_MAX;
10189   printf("int8_t\n");
10190 #endif
10191 #ifdef INT16
10192    int16_t i =  INT16_MAX;
10193   uint16_t i = UINT16_MAX;
10194   printf("int16_t\n");
10195 #endif
10196 #ifdef INT32
10197    int32_t i =  INT32_MAX;
10198   uint32_t u = UINT32_MAX;
10199   printf("int32_t\n");
10200 #endif
10201 }
10202 EOCP
10203
10204 case "$i8type" in
10205 '')     case "$charsize" in
10206         1)      i8type=char
10207                 u8type="unsigned char"
10208                 i8size=$charsize
10209                 u8size=$charsize
10210                 ;;
10211         esac
10212         ;;
10213 esac
10214 case "$i8type" in
10215 '')     set try -DINT8
10216         if eval $compile; then
10217                 case "`./try$exe_ext`" in
10218                 int8_t) i8type=int8_t
10219                         u8type=uint8_t
10220                         i8size=1
10221                         u8size=1
10222                         ;;
10223                 esac
10224         fi
10225         ;;
10226 esac
10227 case "$i8type" in
10228 '')     if $test $charsize -ge 1; then
10229                 i8type=char
10230                 u8type="unsigned char"
10231                 i8size=$charsize
10232                 u8size=$charsize
10233         fi
10234         ;;
10235 esac
10236
10237 case "$i16type" in
10238 '')     case "$shortsize" in
10239         2)      i16type=short
10240                 u16type="unsigned short"
10241                 i16size=$shortsize
10242                 u16size=$shortsize
10243                 ;;
10244         esac
10245         ;;
10246 esac
10247 case "$i16type" in
10248 '')     set try -DINT16
10249         if eval $compile; then
10250                 case "`./try$exe_ext`" in
10251                 int16_t)
10252                         i16type=int16_t
10253                         u16type=uint16_t
10254                         i16size=2
10255                         u16size=2
10256                         ;;
10257                 esac
10258         fi
10259         ;;
10260 esac
10261 case "$i16type" in
10262 '')     if $test $shortsize -ge 2; then
10263                 i16type=short
10264                 u16type="unsigned short"
10265                 i16size=$shortsize
10266                 u16size=$shortsize
10267         fi
10268         ;;
10269 esac
10270
10271 case "$i32type" in
10272 '')     case "$longsize" in
10273         4)      i32type=long
10274                 u32type="unsigned long"
10275                 i32size=$longsize
10276                 u32size=$longsize
10277                 ;;
10278         *)      case "$intsize" in
10279                 4)      i32type=int
10280                         u32type="unsigned int"
10281                         i32size=$intsize
10282                         u32size=$intsize
10283                         ;;
10284                 esac
10285                 ;;
10286         esac
10287         ;;
10288 esac
10289 case "$i32type" in
10290 '')     set try -DINT32
10291         if eval $compile; then
10292                 case "`./try$exe_ext`" in
10293                 int32_t)
10294                         i32type=int32_t
10295                         u32type=uint32_t
10296                         i32size=4
10297                         u32size=4
10298                         ;;
10299                 esac
10300         fi
10301         ;;
10302 esac
10303 case "$i32type" in
10304 '')     if $test $intsize -ge 4; then
10305                 i32type=int
10306                 u32type="unsigned int"
10307                 i32size=$intsize
10308                 u32size=$intsize
10309         fi
10310         ;;
10311 esac
10312
10313 case "$i64type" in
10314 '')     case "$d_quad:$quadtype" in
10315         define:?*)
10316                 i64type="$quadtype"
10317                 u64type="$uquadtype"
10318                 i64size=8
10319                 u64size=8
10320                 ;;
10321         esac
10322         ;;
10323 esac
10324
10325 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10326 : volatile so that the compiler has to store it out to memory.
10327 if test X"$d_volatile" = X"$define"; then
10328         volatile=volatile
10329 fi
10330 $cat <<EOP >try.c
10331 #include <stdio.h>
10332 #include <sys/types.h>
10333 #include <signal.h>
10334 #ifdef SIGFPE
10335 $volatile int bletched = 0;
10336 $signal_t blech(s) int s; { bletched = 1; }
10337 #endif
10338 int main() {
10339     $uvtype u = 0;
10340     $nvtype d;
10341     int     n = 8 * $uvsize;
10342     int     i;
10343 #ifdef SIGFPE
10344     signal(SIGFPE, blech);
10345 #endif
10346
10347     for (i = 0; i < n; i++) {
10348       u = u << 1 | ($uvtype)1;
10349       d = ($nvtype)u;
10350       if (($uvtype)d != u)
10351         break;
10352       if (d <= 0)
10353         break;
10354       d = ($nvtype)(u - 1);
10355       if (($uvtype)d != (u - 1))
10356         break;
10357 #ifdef SIGFPE
10358       if (bletched) {
10359         break;
10360 #endif
10361       } 
10362     }
10363     printf("%d\n", ((i == n) ? -n : i));
10364     exit(0);
10365 }
10366 EOP
10367 set try
10368
10369 d_nv_preserves_uv="$undef"
10370 if eval $compile; then
10371         d_nv_preserves_uv_bits="`./try$exe_ext`"
10372 fi
10373 case "$d_nv_preserves_uv_bits" in
10374 \-[1-9]*)       
10375         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10376         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10377         d_nv_preserves_uv="$define"
10378         ;;
10379 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10380         d_nv_preserves_uv="$undef" ;;
10381 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10382         d_nv_preserves_uv_bits="$undef" ;;
10383 esac
10384
10385 $rm -f try.* try
10386
10387
10388 : check for off64_t
10389 echo " "
10390 echo "Checking to see if you have off64_t..." >&4
10391 $cat >try.c <<EOCP
10392 #include <sys/types.h>
10393 #include <unistd.h>
10394 int main() { off64_t x = 7; }
10395 EOCP
10396 set try
10397 if eval $compile; then
10398         val="$define"
10399         echo "You have off64_t."
10400 else
10401         val="$undef"
10402         echo "You do not have off64_t."
10403         case "$lseeksize" in
10404         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10405         esac
10406 fi
10407 $rm -f try.* try
10408 set d_off64_t
10409 eval $setvar
10410
10411 : see if POSIX threads are available
10412 set pthread.h i_pthread
10413 eval $inhdr
10414
10415
10416
10417
10418 : how to create joinable pthreads
10419 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10420         echo " "
10421         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10422         $cat >try.c <<'EOCP'
10423 #include <pthread.h>
10424 int main() {
10425     int detachstate = JOINABLE;
10426 }
10427 EOCP
10428         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10429         if eval $compile; then
10430                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10431                 val="$undef" # Yes, undef.
10432                 set d_old_pthread_create_joinable
10433                 eval $setvar
10434                 val=""
10435                 set old_pthread_create_joinable
10436                 eval $setvar
10437         else
10438                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10439                 if eval $compile; then
10440                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10441                         val="$define"
10442                         set d_old_pthread_create_joinable
10443                         eval $setvar
10444                         val=PTHREAD_CREATE_UNDETACHED
10445                         set old_pthread_create_joinable
10446                         eval $setvar
10447                 else            
10448                         set try -DJOINABLE=__UNDETACHED
10449                         if eval $compile; then
10450                                 echo "You seem to use __UNDETACHED." >&4
10451                                 val="$define"
10452                                 set d_old_pthread_create_joinable
10453                                 eval $setvar
10454                                 val=__UNDETACHED
10455                                 set old_pthread_create_joinable
10456                                 eval $setvar
10457                         else
10458                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10459                                 val="$define"
10460                                 set d_old_pthread_create_joinable
10461                                 eval $setvar
10462                                 val=0
10463                                 set old_pthread_create_joinable
10464                                 eval $setvar
10465                         fi
10466                 fi
10467         fi
10468         $rm -f try try.*
10469 else
10470     d_old_pthread_create_joinable="$undef"
10471     old_pthread_create_joinable=""
10472 fi
10473
10474 : see if pause exists
10475 set pause d_pause
10476 eval $inlibc
10477
10478 : see if pipe exists
10479 set pipe d_pipe
10480 eval $inlibc
10481
10482 : see if poll exists
10483 set poll d_poll
10484 eval $inlibc
10485
10486
10487 : see whether the various POSIXish _yields exist
10488 $cat >try.c <<EOP
10489 #include <pthread.h>
10490 #include <stdio.h>
10491 int main() {
10492 #ifdef SCHED_YIELD
10493         sched_yield();
10494 #else
10495 #ifdef PTHREAD_YIELD
10496         pthread_yield();
10497 #else
10498 #ifdef PTHREAD_YIELD_NULL
10499         pthread_yield(NULL);
10500 #endif
10501 #endif
10502 #endif
10503 }
10504 EOP
10505 : see if sched_yield exists
10506 set try -DSCHED_YIELD
10507 if eval $compile; then
10508     val="$define"
10509     sched_yield='sched_yield()'
10510 else
10511     val="$undef"
10512 fi
10513 case "$usethreads" in
10514 $define)
10515         case "$val" in
10516         $define) echo 'sched_yield() found.' >&4        ;;
10517         *)       echo 'sched_yield() NOT found.' >&4    ;;
10518         esac
10519 esac
10520 set d_sched_yield
10521 eval $setvar
10522
10523 : see if pthread_yield exists
10524 set try -DPTHREAD_YIELD
10525 if eval $compile; then
10526     val="$define"
10527     case "$sched_yield" in
10528     '') sched_yield='pthread_yield()' ;;
10529     esac
10530 else
10531     set try -DPTHREAD_YIELD_NULL
10532     if eval $compile; then
10533         val="$define"
10534         case "$sched_yield" in
10535         '') sched_yield='pthread_yield(NULL)' ;;
10536         esac
10537     else
10538         val="$undef"
10539     fi
10540 fi
10541 case "$usethreads" in
10542 $define)
10543         case "$val" in
10544         $define) echo 'pthread_yield() found.' >&4      ;;
10545         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10546         esac
10547         ;;
10548 esac
10549 set d_pthread_yield
10550 eval $setvar
10551
10552 case "$sched_yield" in
10553 '') sched_yield=undef ;;
10554 esac
10555
10556 $rm -f try try.*
10557
10558 : see if this is a pwd.h system
10559 set pwd.h i_pwd
10560 eval $inhdr
10561
10562 case "$i_pwd" in
10563 $define)
10564         xxx=`./findhdr pwd.h`
10565         $cppstdin $cppflags $cppminus < $xxx >$$.h
10566
10567         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10568                 val="$define"
10569         else
10570                 val="$undef"
10571         fi
10572         set d_pwquota
10573         eval $setvar
10574
10575         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10576                 val="$define"
10577         else
10578                 val="$undef"
10579         fi
10580         set d_pwage
10581         eval $setvar
10582
10583         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10584                 val="$define"
10585         else
10586                 val="$undef"
10587         fi
10588         set d_pwchange
10589         eval $setvar
10590
10591         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10592                 val="$define"
10593         else
10594                 val="$undef"
10595         fi
10596         set d_pwclass
10597         eval $setvar
10598
10599         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10600                 val="$define"
10601         else
10602                 val="$undef"
10603         fi
10604         set d_pwexpire
10605         eval $setvar
10606
10607         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10608                 val="$define"
10609         else
10610                 val="$undef"
10611         fi
10612         set d_pwcomment
10613         eval $setvar
10614
10615         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10616                 val="$define"
10617         else
10618                 val="$undef"
10619         fi
10620         set d_pwgecos
10621         eval $setvar
10622
10623         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10624                 val="$define"
10625         else
10626                 val="$undef"
10627         fi
10628         set d_pwpasswd
10629         eval $setvar
10630
10631         $rm -f $$.h
10632         ;;
10633 *)
10634         val="$undef"; 
10635         set d_pwquota; eval $setvar
10636         set d_pwage; eval $setvar
10637         set d_pwchange; eval $setvar
10638         set d_pwclass; eval $setvar
10639         set d_pwexpire; eval $setvar
10640         set d_pwcomment; eval $setvar
10641         set d_pwgecos; eval $setvar
10642         set d_pwpasswd; eval $setvar
10643         ;;
10644 esac
10645
10646 : see if readdir and friends exist
10647 set readdir d_readdir
10648 eval $inlibc
10649 set seekdir d_seekdir
10650 eval $inlibc
10651 set telldir d_telldir
10652 eval $inlibc
10653 set rewinddir d_rewinddir
10654 eval $inlibc
10655
10656 : see if readlink exists
10657 set readlink d_readlink
10658 eval $inlibc
10659
10660 : see if rename exists
10661 set rename d_rename
10662 eval $inlibc
10663
10664 : see if rmdir exists
10665 set rmdir d_rmdir
10666 eval $inlibc
10667
10668 : see if memory.h is available.
10669 val=''
10670 set memory.h val
10671 eval $inhdr
10672
10673 : See if it conflicts with string.h
10674 case "$val" in
10675 $define)
10676         case "$strings" in
10677         '') ;;
10678         *)
10679                 $cppstdin $cppflags $cppminus < $strings > mem.h
10680                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10681                         echo " "
10682                         echo "We won't be including <memory.h>."
10683                         val="$undef"
10684                 fi
10685                 $rm -f mem.h
10686                 ;;
10687         esac
10688 esac
10689 set i_memory
10690 eval $setvar
10691
10692 : can bcopy handle overlapping blocks?
10693 val="$undef"
10694 case "$d_bcopy" in
10695 "$define")
10696         echo " "
10697         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10698         $cat >try.c <<EOCP
10699 #$i_memory I_MEMORY
10700 #$i_stdlib I_STDLIB
10701 #$i_string I_STRING
10702 #$i_unistd I_UNISTD
10703 EOCP
10704         $cat >>try.c <<'EOCP'
10705 #include <stdio.h>
10706 #ifdef I_MEMORY
10707 #  include <memory.h>
10708 #endif
10709 #ifdef I_STDLIB
10710 #  include <stdlib.h>
10711 #endif
10712 #ifdef I_STRING
10713 #  include <string.h>
10714 #else
10715 #  include <strings.h>
10716 #endif
10717 #ifdef I_UNISTD
10718 #  include <unistd.h>  /* Needed for NetBSD */
10719 #endif
10720 int main()
10721 {
10722 char buf[128], abc[128];
10723 char *b;
10724 int len;
10725 int off;
10726 int align;
10727
10728 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10729
10730 for (align = 7; align >= 0; align--) {
10731         for (len = 36; len; len--) {
10732                 b = buf+align;
10733                 bcopy(abc, b, len);
10734                 for (off = 1; off <= len; off++) {
10735                         bcopy(b, b+off, len);
10736                         bcopy(b+off, b, len);
10737                         if (bcmp(b, abc, len))
10738                                 exit(1);
10739                 }
10740         }
10741 }
10742 exit(0);
10743 }
10744 EOCP
10745         set try
10746         if eval $compile_ok; then
10747                 if ./try 2>/dev/null; then
10748                         echo "Yes, it can."
10749                         val="$define"
10750                 else
10751                         echo "It can't, sorry."
10752                         case "$d_memmove" in
10753                         "$define") echo "But that's Ok since you have memmove()." ;;
10754                         esac
10755                 fi
10756         else
10757                 echo "(I can't compile the test program, so we'll assume not...)"
10758                 case "$d_memmove" in
10759                 "$define") echo "But that's Ok since you have memmove()." ;;
10760                 esac
10761         fi
10762         ;;
10763 esac
10764 $rm -f try.* try core
10765 set d_safebcpy
10766 eval $setvar
10767
10768 : can memcpy handle overlapping blocks?
10769 val="$undef"
10770 case "$d_memcpy" in
10771 "$define")
10772         echo " "
10773         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10774         $cat >try.c <<EOCP
10775 #$i_memory I_MEMORY
10776 #$i_stdlib I_STDLIB
10777 #$i_string I_STRING
10778 #$i_unistd I_UNISTD
10779 EOCP
10780         $cat >>try.c <<'EOCP'
10781 #include <stdio.h>
10782 #ifdef I_MEMORY
10783 #  include <memory.h>
10784 #endif
10785 #ifdef I_STDLIB
10786 #  include <stdlib.h>
10787 #endif
10788 #ifdef I_STRING
10789 #  include <string.h>
10790 #else
10791 #  include <strings.h>
10792 #endif
10793 #ifdef I_UNISTD
10794 #  include <unistd.h>  /* Needed for NetBSD */
10795 #endif
10796 int main()
10797 {
10798 char buf[128], abc[128];
10799 char *b;
10800 int len;
10801 int off;
10802 int align;
10803
10804 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10805    try to store the string in read-only memory. */
10806 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10807
10808 for (align = 7; align >= 0; align--) {
10809         for (len = 36; len; len--) {
10810                 b = buf+align;
10811                 memcpy(b, abc, len);
10812                 for (off = 1; off <= len; off++) {
10813                         memcpy(b+off, b, len);
10814                         memcpy(b, b+off, len);
10815                         if (memcmp(b, abc, len))
10816                                 exit(1);
10817                 }
10818         }
10819 }
10820 exit(0);
10821 }
10822 EOCP
10823         set try
10824         if eval $compile_ok; then
10825                 if ./try 2>/dev/null; then
10826                         echo "Yes, it can."
10827                         val="$define"
10828                 else
10829                         echo "It can't, sorry."
10830                         case "$d_memmove" in
10831                         "$define") echo "But that's Ok since you have memmove()." ;;
10832                         esac
10833                 fi
10834         else
10835                 echo "(I can't compile the test program, so we'll assume not...)"
10836                 case "$d_memmove" in
10837                 "$define") echo "But that's Ok since you have memmove()." ;;
10838                 esac
10839         fi
10840         ;;
10841 esac
10842 $rm -f try.* try core
10843 set d_safemcpy
10844 eval $setvar
10845
10846 : can memcmp be trusted to compare relative magnitude?
10847 val="$undef"
10848 case "$d_memcmp" in
10849 "$define")
10850         echo " "
10851         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10852         $cat >try.c <<EOCP
10853 #$i_memory I_MEMORY
10854 #$i_stdlib I_STDLIB
10855 #$i_string I_STRING
10856 #$i_unistd I_UNISTD
10857 EOCP
10858         $cat >>try.c <<'EOCP'
10859 #include <stdio.h>
10860 #ifdef I_MEMORY
10861 #  include <memory.h>
10862 #endif
10863 #ifdef I_STDLIB
10864 #  include <stdlib.h>
10865 #endif
10866 #ifdef I_STRING
10867 #  include <string.h>
10868 #else
10869 #  include <strings.h>
10870 #endif
10871 #ifdef I_UNISTD
10872 #  include <unistd.h>  /* Needed for NetBSD */
10873 #endif
10874 int main()
10875 {
10876 char a = -1;
10877 char b = 0;
10878 if ((a < b) && memcmp(&a, &b, 1) < 0)
10879         exit(1);
10880 exit(0);
10881 }
10882 EOCP
10883         set try
10884         if eval $compile_ok; then
10885                 if ./try 2>/dev/null; then
10886                         echo "Yes, it can."
10887                         val="$define"
10888                 else
10889                         echo "No, it can't (it uses signed chars)."
10890                 fi
10891         else
10892                 echo "(I can't compile the test program, so we'll assume not...)"
10893         fi
10894         ;;
10895 esac
10896 $rm -f try.* try core
10897 set d_sanemcmp
10898 eval $setvar
10899
10900 : see if prototype for sbrk is available
10901 echo " "
10902 set d_sbrkproto sbrk $i_unistd unistd.h
10903 eval $hasproto
10904
10905 : see if select exists
10906 set select d_select
10907 eval $inlibc
10908
10909 : see if semctl exists
10910 set semctl d_semctl
10911 eval $inlibc
10912
10913 : see if semget exists
10914 set semget d_semget
10915 eval $inlibc
10916
10917 : see if semop exists
10918 set semop d_semop
10919 eval $inlibc
10920
10921 : see how much of the 'sem*(2)' library is present.
10922 h_sem=true
10923 echo " "
10924 case "$d_semctl$d_semget$d_semop" in
10925 *"$undef"*) h_sem=false;;
10926 esac
10927 case "$osname" in
10928 freebsd)
10929     case "`ipcs 2>&1`" in
10930     "SVID messages"*"not configured"*)
10931         echo "Your $osname does not have the sem*(2) configured." >&4
10932         h_sem=false
10933         val="$undef"
10934         set semctl d_semctl
10935         eval $setvar
10936         set semget d_semget
10937         eval $setvar
10938         set semop d_semop
10939         eval $setvar
10940         ;;
10941     esac
10942     ;;
10943 esac
10944 : we could also check for sys/ipc.h ...
10945 if $h_sem && $test `./findhdr sys/sem.h`; then
10946         echo "You have the full sem*(2) library." >&4
10947         val="$define"
10948 else
10949         echo "You don't have the full sem*(2) library." >&4
10950         val="$undef"
10951 fi
10952 set d_sem
10953 eval $setvar
10954
10955 : see whether sys/sem.h defines union semun
10956 echo " "
10957 $cat > try.c <<'END'
10958 #include <sys/types.h>
10959 #include <sys/ipc.h>
10960 #include <sys/sem.h>
10961 int main () { union semun semun; semun.buf = 0; }
10962 END
10963 set try
10964 if eval $compile; then
10965     echo "You have union semun in <sys/sem.h>." >&4
10966     val="$define"
10967 else
10968     echo "You do not have union semun in <sys/sem.h>." >&4
10969     val="$undef"
10970 fi
10971 $rm -f try try.c try.h
10972 set d_union_semun
10973 eval $setvar
10974
10975 : see how to do semctl IPC_STAT
10976 case "$d_sem" in
10977 $define)
10978     : see whether semctl IPC_STAT can use union semun
10979     echo " "
10980     $cat > try.h <<END
10981 #ifndef S_IRUSR
10982 #   ifdef S_IREAD
10983 #       define S_IRUSR S_IREAD
10984 #       define S_IWUSR S_IWRITE
10985 #       define S_IXUSR S_IEXEC
10986 #   else
10987 #       define S_IRUSR 0400
10988 #       define S_IWUSR 0200
10989 #       define S_IXUSR 0100
10990 #   endif
10991 #   define S_IRGRP (S_IRUSR>>3)
10992 #   define S_IWGRP (S_IWUSR>>3)
10993 #   define S_IXGRP (S_IXUSR>>3)
10994 #   define S_IROTH (S_IRUSR>>6)
10995 #   define S_IWOTH (S_IWUSR>>6)
10996 #   define S_IXOTH (S_IXUSR>>6)
10997 #endif
10998 #ifndef S_IRWXU
10999 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11000 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11001 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11002 #endif
11003 END
11004
11005     $cat > try.c <<END
11006 #include <sys/types.h>
11007 #include <sys/ipc.h>
11008 #include <sys/sem.h>
11009 #include <sys/stat.h>
11010 #include <stdio.h>
11011 #include <errno.h>
11012 #include "try.h"
11013 #ifndef errno
11014 extern int errno;
11015 #endif
11016 #$d_union_semun HAS_UNION_SEMUN
11017 int main() {
11018     union semun
11019 #ifndef HAS_UNION_SEMUN
11020     {
11021         int val;
11022         struct semid_ds *buf;
11023         unsigned short *array;
11024     }
11025 #endif
11026     arg;
11027     int sem, st;
11028
11029 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11030     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11031     if (sem > -1) {
11032         struct semid_ds argbuf;
11033         arg.buf = &argbuf;
11034 #       ifdef IPC_STAT
11035         st = semctl(sem, 0, IPC_STAT, arg);
11036         if (st == 0)
11037             printf("semun\n");
11038         else
11039 #       endif /* IPC_STAT */
11040             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11041 #       ifdef IPC_RMID
11042         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11043 #       endif /* IPC_RMID */
11044             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11045     } else
11046 #endif /* IPC_PRIVATE && ... */
11047         printf("semget failed: errno = %d\n", errno);
11048   return 0;
11049 }
11050 END
11051     val="$undef"
11052     set try
11053     if eval $compile; then
11054         xxx=`./try`
11055         case "$xxx" in
11056         semun) val="$define" ;;
11057         esac
11058     fi
11059     $rm -f try try.c
11060     set d_semctl_semun
11061     eval $setvar
11062     case "$d_semctl_semun" in
11063     $define)
11064         echo "You can use union semun for semctl IPC_STAT." >&4
11065         also='also'
11066         ;;
11067     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11068         also=''
11069         ;;
11070     esac
11071
11072     : see whether semctl IPC_STAT can use struct semid_ds pointer
11073     $cat > try.c <<'END'
11074 #include <sys/types.h>
11075 #include <sys/ipc.h>
11076 #include <sys/sem.h>
11077 #include <sys/stat.h>
11078 #include "try.h"
11079 #include <stdio.h>
11080 #include <errno.h>
11081 #ifndef errno
11082 extern int errno;
11083 #endif
11084 int main() {
11085     struct semid_ds arg;
11086     int sem, st;
11087
11088 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11089     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11090     if (sem > -1) {
11091 #       ifdef IPC_STAT
11092         st = semctl(sem, 0, IPC_STAT, &arg);
11093         if (st == 0)
11094             printf("semid_ds\n");
11095         else
11096 #       endif /* IPC_STAT */
11097             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11098 #       ifdef IPC_RMID
11099         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11100 #       endif /* IPC_RMID */
11101             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11102     } else
11103 #endif /* IPC_PRIVATE && ... */
11104         printf("semget failed: errno = %d\n", errno);
11105
11106     return 0;
11107 }
11108 END
11109     val="$undef"
11110     set try
11111     if eval $compile; then
11112         xxx=`./try`
11113         case "$xxx" in
11114         semid_ds) val="$define" ;;
11115         esac
11116     fi
11117     $rm -f try try.c
11118     set d_semctl_semid_ds
11119     eval $setvar
11120     case "$d_semctl_semid_ds" in
11121     $define)
11122         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11123         ;;
11124     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11125         ;;
11126     esac
11127     $rm -f try.h
11128     ;;
11129 *)  val="$undef"
11130
11131     # We do not have the full sem*(2) library, so assume we can not
11132     # use either.
11133
11134     set d_semctl_semun
11135     eval $setvar
11136
11137     set d_semctl_semid_ds
11138     eval $setvar
11139     ;;
11140 esac
11141
11142 : see if setegid exists
11143 set setegid d_setegid
11144 eval $inlibc
11145
11146 : see if seteuid exists
11147 set seteuid d_seteuid
11148 eval $inlibc
11149
11150 : see if setgrent exists
11151 set setgrent d_setgrent
11152 eval $inlibc
11153
11154 : see if sethostent exists
11155 set sethostent d_sethent
11156 eval $inlibc
11157
11158 : see if setlinebuf exists
11159 set setlinebuf d_setlinebuf
11160 eval $inlibc
11161
11162 : see if setlocale exists
11163 set setlocale d_setlocale
11164 eval $inlibc
11165
11166 : see if setnetent exists
11167 set setnetent d_setnent
11168 eval $inlibc
11169
11170 : see if setprotoent exists
11171 set setprotoent d_setpent
11172 eval $inlibc
11173
11174 : see if setpgid exists
11175 set setpgid d_setpgid
11176 eval $inlibc
11177
11178 : see if setpgrp2 exists
11179 set setpgrp2 d_setpgrp2
11180 eval $inlibc
11181
11182 : see if setpriority exists
11183 set setpriority d_setprior
11184 eval $inlibc
11185
11186 : see if setproctitle exists
11187 set setproctitle d_setproctitle
11188 eval $inlibc
11189
11190 : see if setpwent exists
11191 set setpwent d_setpwent
11192 eval $inlibc
11193
11194 : see if setregid exists
11195 set setregid d_setregid
11196 eval $inlibc
11197 set setresgid d_setresgid
11198 eval $inlibc
11199
11200 : see if setreuid exists
11201 set setreuid d_setreuid
11202 eval $inlibc
11203 set setresuid d_setresuid
11204 eval $inlibc
11205
11206 : see if setrgid exists
11207 set setrgid d_setrgid
11208 eval $inlibc
11209
11210 : see if setruid exists
11211 set setruid d_setruid
11212 eval $inlibc
11213
11214 : see if setservent exists
11215 set setservent d_setsent
11216 eval $inlibc
11217
11218 : see if setsid exists
11219 set setsid d_setsid
11220 eval $inlibc
11221
11222 : see if setvbuf exists
11223 set setvbuf d_setvbuf
11224 eval $inlibc
11225
11226 : see if sfio.h is available
11227 set sfio.h i_sfio
11228 eval $inhdr
11229
11230
11231 : see if sfio library is available
11232 case "$i_sfio" in
11233 $define)
11234         val=''
11235         set sfreserve val
11236         eval $inlibc
11237         ;;
11238 *)
11239         val="$undef"
11240         ;;
11241 esac
11242 : Ok, but do we want to use it.
11243 case "$val" in
11244 $define)
11245         case "$usesfio" in
11246         true|$define|[yY]*) dflt='y';;
11247         *) dflt='n';;
11248         esac
11249         echo "$package can use the sfio library, but it is experimental."
11250         case "$useperlio" in
11251         "$undef")
11252             echo "For sfio also the PerlIO abstraction layer is needed."
11253             echo "Earlier you said you wouldn't want that."
11254             ;;
11255         esac
11256         rp="You seem to have sfio available, do you want to try using it?"
11257         . ./myread
11258         case "$ans" in
11259         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11260                 useperlio="$define"
11261                 val="$define"
11262                 ;;
11263         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11264                 val="$undef"
11265                 : Remove sfio from list of libraries to use
11266                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11267                 shift
11268                 libs="$*"
11269                 echo "libs = $libs" >&4
11270                 ;;
11271         esac
11272         ;;
11273 *)      case "$usesfio" in
11274         true|$define|[yY]*)
11275                 echo "Sorry, cannot find sfio on this machine." >&4
11276                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11277                 val="$undef"
11278                 ;;
11279         esac
11280         ;;
11281 esac
11282 set d_sfio
11283 eval $setvar
11284 case "$d_sfio" in
11285 $define) usesfio='true';;
11286 *) usesfio='false';;
11287 esac
11288
11289 : see if shmctl exists
11290 set shmctl d_shmctl
11291 eval $inlibc
11292
11293 : see if shmget exists
11294 set shmget d_shmget
11295 eval $inlibc
11296
11297 : see if shmat exists
11298 set shmat d_shmat
11299 eval $inlibc
11300 : see what shmat returns
11301 case "$d_shmat" in
11302 "$define")
11303         $cat >shmat.c <<'END'
11304 #include <sys/shm.h>
11305 void *shmat();
11306 END
11307         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11308                 shmattype='void *'
11309         else
11310                 shmattype='char *'
11311         fi
11312         echo "and it returns ($shmattype)." >&4
11313         : see if a prototype for shmat is available
11314         xxx=`./findhdr sys/shm.h`
11315         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11316         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11317                 val="$define"
11318         else
11319                 val="$undef"
11320         fi
11321         $rm -f shmat.[co]
11322         ;;
11323 *)
11324         val="$undef"
11325         ;;
11326 esac
11327 set d_shmatprototype
11328 eval $setvar
11329
11330 : see if shmdt exists
11331 set shmdt d_shmdt
11332 eval $inlibc
11333
11334 : see how much of the 'shm*(2)' library is present.
11335 h_shm=true
11336 echo " "
11337 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11338 *"$undef"*) h_shm=false;;
11339 esac
11340 case "$osname" in
11341 freebsd)
11342     case "`ipcs 2>&1`" in
11343     "SVID shared memory"*"not configured"*)
11344         echo "Your $osname does not have the shm*(2) configured." >&4
11345         h_shm=false
11346         val="$undef"
11347         set shmctl d_shmctl
11348         evat $setvar
11349         set shmget d_shmget
11350         evat $setvar
11351         set shmat d_shmat
11352         evat $setvar
11353         set shmdt d_shmdt
11354         evat $setvar
11355         ;;
11356     esac
11357     ;;
11358 esac
11359 : we could also check for sys/ipc.h ...
11360 if $h_shm && $test `./findhdr sys/shm.h`; then
11361         echo "You have the full shm*(2) library." >&4
11362         val="$define"
11363 else
11364         echo "You don't have the full shm*(2) library." >&4
11365         val="$undef"
11366 fi
11367 set d_shm
11368 eval $setvar
11369
11370 echo " "
11371 : see if we have sigaction
11372 if set sigaction val -f d_sigaction; eval $csym; $val; then
11373         echo 'sigaction() found.' >&4
11374         $cat > try.c <<'EOP'
11375 #include <stdio.h>
11376 #include <sys/types.h>
11377 #include <signal.h>
11378 int main()
11379 {
11380     struct sigaction act, oact;
11381     act.sa_flags = 0;
11382     oact.sa_handler = 0;
11383     /* so that act and oact are used */
11384     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11385 }
11386 EOP
11387         set try
11388         if eval $compile_ok; then
11389                 val="$define"
11390         else
11391                 echo "But you don't seem to have a useable struct sigaction." >&4
11392                 val="$undef"
11393         fi
11394 else
11395         echo 'sigaction NOT found.' >&4
11396         val="$undef"
11397 fi
11398 set d_sigaction; eval $setvar
11399 $rm -f try try$_o try.c
11400
11401 : see if sigsetjmp exists
11402 echo " "
11403 case "$d_sigsetjmp" in
11404 '')
11405         $cat >try.c <<'EOP'
11406 #include <setjmp.h>
11407 sigjmp_buf env;
11408 int set = 1;
11409 int main()
11410 {
11411         if (sigsetjmp(env,1))
11412                 exit(set);
11413         set = 0;
11414         siglongjmp(env, 1);
11415         exit(1);
11416 }
11417 EOP
11418         set try
11419         if eval $compile; then
11420                 if ./try >/dev/null 2>&1; then
11421                         echo "POSIX sigsetjmp found." >&4
11422                         val="$define"
11423                 else
11424                         $cat >&4 <<EOM
11425 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11426 I'll ignore them.
11427 EOM
11428                         val="$undef"
11429                 fi
11430         else
11431                 echo "sigsetjmp not found." >&4
11432                 val="$undef"
11433         fi
11434         ;;
11435 *) val="$d_sigsetjmp"
11436         case "$d_sigsetjmp" in
11437         $define) echo "POSIX sigsetjmp found." >&4;;
11438         $undef) echo "sigsetjmp not found." >&4;;
11439         esac
11440         ;;
11441 esac
11442 set d_sigsetjmp
11443 eval $setvar
11444 $rm -f try.c try
11445
11446 : see if socks5_init exists
11447 set socks5_init d_socks5_init
11448 eval $inlibc
11449
11450 : see if sys/stat.h is available
11451 set sys/stat.h i_sysstat
11452 eval $inhdr
11453
11454
11455 : see if stat knows about block sizes
11456 echo " "
11457 echo "Checking to see if your struct stat has st_blocks field..." >&4
11458 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11459 eval $hasfield
11460
11461
11462 : see if this is a sys/vfs.h system
11463 set sys/vfs.h i_sysvfs
11464 eval $inhdr
11465
11466
11467 : see if this is a sys/statfs.h system
11468 set sys/statfs.h i_sysstatfs
11469 eval $inhdr
11470
11471
11472 echo " "
11473 echo "Checking to see if your system supports struct statfs..." >&4
11474 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
11475 eval $hasstruct
11476 case "$d_statfs_s" in
11477 "$define")      echo "Yes, it does."   ;;
11478 *)              echo "No, it doesn't." ;;
11479 esac
11480
11481
11482
11483 : see if struct statfs knows about f_flags
11484 case "$d_statfs_s" in
11485 define) 
11486         echo " "
11487         echo "Checking to see if your struct statfs has f_flags field..." >&4
11488         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
11489         eval $hasfield
11490         ;;
11491 *)      val="$undef"
11492         set d_statfs_f_flags
11493         eval $setvar
11494         ;;
11495 esac
11496 case "$d_statfs_f_flags" in
11497 "$define")      echo "Yes, it does."   ;;
11498 *)              echo "No, it doesn't." ;;
11499 esac
11500
11501 : see if _ptr and _cnt from stdio act std
11502 echo " "
11503
11504 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11505         echo "(Looks like you have stdio.h from BSD.)"
11506         case "$stdio_ptr" in
11507         '') stdio_ptr='((fp)->_p)'
11508                 ptr_lval=$define
11509                 ;;
11510         *)      ptr_lval=$d_stdio_ptr_lval;;
11511         esac
11512         case "$stdio_cnt" in
11513         '') stdio_cnt='((fp)->_r)'
11514                 cnt_lval=$define
11515                 ;;
11516         *)      cnt_lval=$d_stdio_cnt_lval;;
11517         esac
11518         case "$stdio_base" in
11519         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11520         esac
11521         case "$stdio_bufsiz" in
11522         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11523         esac
11524 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11525         echo "(Looks like you have stdio.h from Linux.)"
11526         case "$stdio_ptr" in
11527         '') stdio_ptr='((fp)->_IO_read_ptr)'
11528                 ptr_lval=$define
11529                 ;;
11530         *)      ptr_lval=$d_stdio_ptr_lval;;
11531         esac
11532         case "$stdio_cnt" in
11533         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11534                 cnt_lval=$undef
11535                 ;;
11536         *)      cnt_lval=$d_stdio_cnt_lval;;
11537         esac
11538         case "$stdio_base" in
11539         '') stdio_base='((fp)->_IO_read_base)';;
11540         esac
11541         case "$stdio_bufsiz" in
11542         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11543         esac
11544 else
11545         case "$stdio_ptr" in
11546         '') stdio_ptr='((fp)->_ptr)'
11547                 ptr_lval=$define
11548                 ;;
11549         *)      ptr_lval=$d_stdio_ptr_lval;;
11550         esac
11551         case "$stdio_cnt" in
11552         '') stdio_cnt='((fp)->_cnt)'
11553                 cnt_lval=$define
11554                 ;;
11555         *)      cnt_lval=$d_stdio_cnt_lval;;
11556         esac
11557         case "$stdio_base" in
11558         '') stdio_base='((fp)->_base)';;
11559         esac
11560         case "$stdio_bufsiz" in
11561         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11562         esac
11563 fi
11564
11565 : test whether _ptr and _cnt really work
11566 echo "Checking how std your stdio is..." >&4
11567 $cat >try.c <<EOP
11568 #include <stdio.h>
11569 #define FILE_ptr(fp)    $stdio_ptr
11570 #define FILE_cnt(fp)    $stdio_cnt
11571 int main() {
11572         FILE *fp = fopen("try.c", "r");
11573         char c = getc(fp);
11574         if (
11575                 18 <= FILE_cnt(fp) &&
11576                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11577         )
11578                 exit(0);
11579         exit(1);
11580 }
11581 EOP
11582 val="$undef"
11583 set try
11584 if eval $compile; then
11585         if ./try; then
11586                 echo "Your stdio acts pretty std."
11587                 val="$define"
11588         else
11589                 echo "Your stdio isn't very std."
11590         fi
11591 else
11592         echo "Your stdio doesn't appear very std."
11593 fi
11594 $rm -f try.c try
11595 set d_stdstdio
11596 eval $setvar
11597
11598 : Can _ptr be used as an lvalue?
11599 case "$d_stdstdio$ptr_lval" in
11600 $define$define) val=$define ;;
11601 *) val=$undef ;;
11602 esac
11603 set d_stdio_ptr_lval
11604 eval $setvar
11605
11606 : Can _cnt be used as an lvalue?
11607 case "$d_stdstdio$cnt_lval" in
11608 $define$define) val=$define ;;
11609 *) val=$undef ;;
11610 esac
11611 set d_stdio_cnt_lval
11612 eval $setvar
11613
11614
11615 : test whether setting _ptr sets _cnt as a side effect
11616 d_stdio_ptr_lval_sets_cnt="$undef"
11617 d_stdio_ptr_lval_nochange_cnt="$undef"
11618 case "$d_stdio_ptr_lval$d_stdstdio" in
11619 $define$define)
11620         echo "Checking to see what happens if we set the stdio ptr..." >&4
11621 $cat >try.c <<EOP
11622 #include <stdio.h>
11623 /* Can we scream? */
11624 /* Eat dust sed :-) */
11625 /* In the buffer space, no one can hear you scream. */
11626 #define FILE_ptr(fp)    $stdio_ptr
11627 #define FILE_cnt(fp)    $stdio_cnt
11628 #include <sys/types.h>
11629 int main() {
11630         FILE *fp = fopen("try.c", "r");
11631         int c;
11632         char *ptr;
11633         size_t cnt;
11634         if (!fp) {
11635             puts("Fail even to read");
11636             exit(1);
11637         }
11638         c = getc(fp); /* Read away the first # */
11639         if (c == EOF) {
11640             puts("Fail even to read");
11641             exit(1);
11642         }
11643         if (!(
11644                 18 <= FILE_cnt(fp) &&
11645                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11646         )) {
11647                 puts("Fail even to read");
11648                 exit (1);
11649         }
11650         ptr = (char*) FILE_ptr(fp);
11651         cnt = (size_t)FILE_cnt(fp);
11652
11653         FILE_ptr(fp) += 42;
11654
11655         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
11656                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
11657                 exit (1);
11658         }
11659         if (FILE_cnt(fp) <= 20) {
11660                 printf ("Fail (<20 chars to test)");
11661                 exit (1);
11662         }
11663         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
11664                 puts("Fail compare");
11665                 exit (1);
11666         }
11667         if (cnt == FILE_cnt(fp)) {
11668                 puts("Pass_unchanged");
11669                 exit (0);
11670         }       
11671         if (FILE_cnt(fp) == (cnt - 42)) {
11672                 puts("Pass_changed");
11673                 exit (0);
11674         }
11675         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
11676         return 1;
11677
11678 }
11679 EOP
11680         set try
11681         if eval $compile; then
11682                 case `./try$exe_ext` in
11683                 Pass_changed)
11684                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
11685                         d_stdio_ptr_lval_sets_cnt="$define" ;;
11686                 Pass_unchanged)
11687                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
11688                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
11689                 Fail*)
11690                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
11691                 *)
11692                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
11693         esac
11694         else
11695                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
11696         fi
11697         $rm -f try.c try
11698         ;;
11699 esac
11700
11701 : see if _base is also standard
11702 val="$undef"
11703 case "$d_stdstdio" in
11704 $define)
11705         $cat >try.c <<EOP
11706 #include <stdio.h>
11707 #define FILE_base(fp)   $stdio_base
11708 #define FILE_bufsiz(fp) $stdio_bufsiz
11709 int main() {
11710         FILE *fp = fopen("try.c", "r");
11711         char c = getc(fp);
11712         if (
11713                 19 <= FILE_bufsiz(fp) &&
11714                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11715         )
11716                 exit(0);
11717         exit(1);
11718 }
11719 EOP
11720         set try
11721         if eval $compile; then
11722                 if ./try; then
11723                         echo "And its _base field acts std."
11724                         val="$define"
11725                 else
11726                         echo "But its _base field isn't std."
11727                 fi
11728         else
11729                 echo "However, it seems to be lacking the _base field."
11730         fi
11731         $rm -f try.c try
11732         ;;
11733 esac
11734 set d_stdiobase
11735 eval $setvar
11736
11737 $cat >&4 <<EOM
11738 Checking how to access stdio streams by file descriptor number...
11739 EOM
11740 case "$stdio_stream_array" in
11741 '')     $cat >try.c <<EOCP
11742 #include <stdio.h>
11743 int main() {
11744   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11745     printf("yes\n");
11746 }
11747 EOCP
11748         for s in _iob __iob __sF
11749         do
11750                 set try -DSTDIO_STREAM_ARRAY=$s
11751                 if eval $compile; then
11752                         case "`./try$exe_ext`" in
11753                         yes)    stdio_stream_array=$s; break ;;
11754                         esac
11755                 fi
11756         done
11757         $rm -f try.* try$exe_ext
11758 esac
11759 case "$stdio_stream_array" in
11760 '')     $cat >&4 <<EOM
11761 I can't figure out how to access stdio streams by file descriptor number.
11762 EOM
11763         d_stdio_stream_array="$undef"
11764         ;;
11765 *)      $cat >&4 <<EOM
11766 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11767 EOM
11768         d_stdio_stream_array="$define"
11769         ;;
11770 esac
11771
11772 : see if strcoll exists
11773 set strcoll d_strcoll
11774 eval $inlibc
11775
11776 : check for structure copying
11777 echo " "
11778 echo "Checking to see if your C compiler can copy structs..." >&4
11779 $cat >try.c <<'EOCP'
11780 int main()
11781 {
11782         struct blurfl {
11783                 int dyick;
11784         } foo, bar;
11785
11786         foo = bar;
11787 }
11788 EOCP
11789 if $cc -c try.c >/dev/null 2>&1 ; then
11790         val="$define"
11791         echo "Yup, it can."
11792 else
11793         val="$undef"
11794         echo "Nope, it can't."
11795 fi
11796 set d_strctcpy
11797 eval $setvar
11798 $rm -f try.*
11799
11800 : see if strerror and/or sys_errlist[] exist
11801 echo " "
11802 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11803     if set strerror val -f d_strerror; eval $csym; $val; then
11804                 echo 'strerror() found.' >&4
11805                 d_strerror="$define"
11806                 d_strerrm='strerror(e)'
11807                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11808                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11809                         d_syserrlst="$define"
11810                 else
11811                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11812                         d_syserrlst="$undef"
11813                 fi
11814     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11815                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11816                 echo 'strerror() found in string header.' >&4
11817                 d_strerror="$define"
11818                 d_strerrm='strerror(e)'
11819                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11820                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11821                                 d_syserrlst="$define"
11822                 else
11823                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11824                         d_syserrlst="$undef"
11825                 fi
11826     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11827                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11828                 d_strerror="$undef"
11829                 d_syserrlst="$define"
11830                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11831     else
11832                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11833                 d_strerror="$undef"
11834                 d_syserrlst="$undef"
11835                 d_strerrm='"unknown"'
11836     fi
11837 fi
11838
11839 : see if strtod exists
11840 set strtod d_strtod
11841 eval $inlibc
11842
11843 : see if strtol exists
11844 set strtol d_strtol
11845 eval $inlibc
11846
11847 : see if strtold exists
11848 set strtold d_strtold
11849 eval $inlibc
11850
11851 : see if strtoll exists
11852 set strtoll d_strtoll
11853 eval $inlibc
11854
11855 case "$d_longlong-$d_strtoll" in
11856 "$define-$define")
11857         $cat <<EOM
11858 Checking whether your strtoll() works okay...
11859 EOM
11860         $cat >try.c <<'EOCP'
11861 #include <errno.h>
11862 #ifdef __hpux
11863 #define strtoll __strtoll
11864 #endif
11865 #ifdef __EMX__
11866 #define strtoll _strtoll
11867 #endif
11868 #include <stdio.h>
11869 extern long long int strtoll(char *s, char **, int); 
11870 static int bad = 0;
11871 int check(char *s, long long ell, int een) {
11872         long long gll;
11873         errno = 0;
11874         gll = strtoll(s, 0, 10);
11875         if (!((gll == ell) && (errno == een)))
11876                 bad++;
11877 }
11878 int main() {
11879         check(" 1",                                      1LL, 0);
11880         check(" 0",                                      0LL, 0);
11881         check("-1",                                     -1LL, 0);
11882         check("-9223372036854775808", -9223372036854775808LL, 0);
11883         check("-9223372036854775808", -9223372036854775808LL, 0);
11884         check(" 9223372036854775807",  9223372036854775807LL, 0);
11885         check("-9223372036854775808", -9223372036854775808LL, 0);
11886         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11887         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11888         if (!bad)
11889                 printf("ok\n");
11890 }
11891 EOCP
11892         set try
11893         if eval $compile; then
11894                 yyy=`./try`
11895                 case "$yyy" in
11896                 ok) echo "Your strtoll() seems to be working okay." ;;
11897                 *) cat <<EOM >&4
11898 Your strtoll() doesn't seem to be working okay.
11899 EOM
11900                    d_strtoll="$undef"
11901                    ;;
11902                 esac
11903         else
11904                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11905                 d_strtoll="$undef"
11906         fi
11907         ;;
11908 esac
11909
11910 : see if strtoul exists
11911 set strtoul d_strtoul
11912 eval $inlibc
11913
11914 : see if strtoull exists
11915 set strtoull d_strtoull
11916 eval $inlibc
11917
11918 case "$d_longlong-$d_strtoull" in
11919 "$define-$define")
11920         $cat <<EOM
11921 Checking whether your strtoull() works okay...
11922 EOM
11923         $cat >try.c <<'EOCP'
11924 #include <errno.h>
11925 #ifdef __hpux
11926 #define strtoull __strtoull
11927 #endif
11928 #include <stdio.h>
11929 extern unsigned long long int strtoull(char *s, char **, int); 
11930 static int bad = 0;
11931 int check(char *s, long long eull, int een) {
11932         long long gull;
11933         errno = 0;
11934         gull = strtoull(s, 0, 10);
11935         if (!((gull == eull) && (errno == een)))
11936                 bad++;
11937 }
11938 int main() {
11939         check(" 1",                                       1LL, 0);
11940         check(" 0",                                       0LL, 0);
11941         check("18446744073709551615", 18446744073709551615ULL, 0);
11942         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11943         if (!bad)
11944                 printf("ok\n");
11945 }
11946 EOCP
11947         set try
11948         if eval $compile; then
11949                 case "`./try`" in
11950                 ok) echo "Your strtoull() seems to be working okay." ;;
11951                 *) cat <<EOM >&4
11952 Your strtoull() doesn't seem to be working okay.
11953 EOM
11954                    d_strtoull="$undef"
11955                    ;;
11956                 esac
11957         fi
11958         ;;
11959 esac
11960
11961 : see if strtouq exists
11962 set strtouq d_strtouq
11963 eval $inlibc
11964
11965 : see if strxfrm exists
11966 set strxfrm d_strxfrm
11967 eval $inlibc
11968
11969 : see if symlink exists
11970 set symlink d_symlink
11971 eval $inlibc
11972
11973 : see if syscall exists
11974 set syscall d_syscall
11975 eval $inlibc
11976
11977 : see if sysconf exists
11978 set sysconf d_sysconf
11979 eval $inlibc
11980
11981 : see if system exists
11982 set system d_system
11983 eval $inlibc
11984
11985 : see if tcgetpgrp exists
11986 set tcgetpgrp d_tcgetpgrp
11987 eval $inlibc
11988
11989 : see if tcsetpgrp exists
11990 set tcsetpgrp d_tcsetpgrp
11991 eval $inlibc
11992
11993 : see if prototype for telldir is available
11994 echo " "
11995 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11996 eval $hasproto
11997
11998 : see if this is a sys/times.h system
11999 set sys/times.h i_systimes
12000 eval $inhdr
12001
12002 : see if times exists
12003 echo " "
12004 if set times val -f d_times; eval $csym; $val; then
12005         echo 'times() found.' >&4
12006         d_times="$define"
12007         inc=''
12008         case "$i_systimes" in
12009         "$define") inc='sys/times.h';;
12010         esac
12011         rp="What is the type returned by times() on this system?"
12012         set clock_t clocktype long stdio.h sys/types.h $inc
12013         eval $typedef_ask
12014 else
12015         echo 'times() NOT found, hope that will do.' >&4
12016         d_times="$undef"
12017         clocktype='int'
12018 fi
12019
12020 : see if truncate exists
12021 set truncate d_truncate
12022 eval $inlibc
12023
12024 : see if tzname[] exists
12025 echo " "
12026 if set tzname val -a d_tzname; eval $csym; $val; then
12027         val="$define"
12028         echo 'tzname[] found.' >&4
12029 else
12030         val="$undef"
12031         echo 'tzname[] NOT found.' >&4
12032 fi
12033 set d_tzname
12034 eval $setvar
12035
12036 : see if umask exists
12037 set umask d_umask
12038 eval $inlibc
12039
12040 : see if ustat exists
12041 set ustat d_ustat
12042 eval $inlibc
12043
12044 : backward compatibility for d_hvfork
12045 if test X$d_hvfork != X; then
12046         d_vfork="$d_hvfork"
12047         d_hvfork=''
12048 fi
12049 : see if there is a vfork
12050 val=''
12051 set vfork val
12052 eval $inlibc
12053
12054 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12055 : perl on Solaris 2.x, and probably elsewhere.
12056 case "$val" in
12057 $define)
12058         echo " "
12059         case "$usevfork" in
12060         false) dflt='n';;
12061         *) dflt='y';;
12062         esac
12063         cat <<'EOM'
12064  
12065 Perl can only use a vfork() that doesn't suffer from strict
12066 restrictions on calling functions or modifying global data in
12067 the child.  For example, glibc-2.1 contains such a vfork()
12068 that is unsuitable.  If your system provides a proper fork()
12069 call, chances are that you do NOT want perl to use vfork().
12070
12071 EOM
12072         rp="Do you still want to use vfork()?"
12073         . ./myread
12074         case "$ans" in
12075         y|Y) ;;
12076         *)
12077                 echo "Ok, we won't use vfork()."
12078                 val="$undef"
12079                 ;;
12080         esac
12081         ;;
12082 esac
12083 set d_vfork
12084 eval $setvar
12085 case "$d_vfork" in
12086 $define) usevfork='true';;
12087 *) usevfork='false';;
12088 esac
12089
12090 : see if this is an sysdir system
12091 set sys/dir.h i_sysdir
12092 eval $inhdr
12093
12094 : see if this is an sysndir system
12095 set sys/ndir.h i_sysndir
12096 eval $inhdr
12097
12098 : see if closedir exists
12099 set closedir d_closedir
12100 eval $inlibc
12101
12102 case "$d_closedir" in
12103 "$define")
12104         echo " "
12105         echo "Checking whether closedir() returns a status..." >&4
12106         cat > closedir.c <<EOM
12107 #$i_dirent I_DIRENT             /**/
12108 #$i_sysdir I_SYS_DIR            /**/
12109 #$i_sysndir I_SYS_NDIR          /**/
12110 #$i_systypes I_SYS_TYPES        /**/
12111
12112 #if defined(I_SYS_TYPES)
12113 #include <sys/types.h>
12114 #endif
12115 #if defined(I_DIRENT)
12116 #include <dirent.h>
12117 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12118 #include <sys/dir.h>
12119 #endif
12120 #else
12121 #ifdef I_SYS_NDIR
12122 #include <sys/ndir.h>
12123 #else
12124 #ifdef I_SYS_DIR
12125 #ifdef hp9000s500
12126 #include <ndir.h>       /* may be wrong in the future */
12127 #else
12128 #include <sys/dir.h>
12129 #endif
12130 #endif
12131 #endif
12132 #endif 
12133 int main() { return closedir(opendir(".")); }
12134 EOM
12135         set closedir
12136         if eval $compile_ok; then
12137                 if ./closedir > /dev/null 2>&1 ; then
12138                         echo "Yes, it does."
12139                         val="$undef"
12140                 else
12141                         echo "No, it doesn't."
12142                         val="$define"
12143                 fi
12144         else
12145                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12146                 val="$define"
12147         fi
12148         ;;
12149 *)
12150         val="$undef";
12151         ;;
12152 esac
12153 set d_void_closedir
12154 eval $setvar
12155 $rm -f closedir*
12156 : see if there is a wait4
12157 set wait4 d_wait4
12158 eval $inlibc
12159
12160 : see if waitpid exists
12161 set waitpid d_waitpid
12162 eval $inlibc
12163
12164 : see if wcstombs exists
12165 set wcstombs d_wcstombs
12166 eval $inlibc
12167
12168 : see if wctomb exists
12169 set wctomb d_wctomb
12170 eval $inlibc
12171
12172 : preserve RCS keywords in files with variable substitution, grrr
12173 Date='$Date'
12174 Id='$Id'
12175 Log='$Log'
12176 RCSfile='$RCSfile'
12177 Revision='$Revision'
12178
12179 case "$crosscompile" in
12180 ''|[nN]*) crosscompile="$undef" ;;
12181 esac
12182
12183 case "$osname" in
12184 next|rhapsody|darwin) multiarch="$define" ;;
12185 esac
12186 case "$multiarch" in
12187 ''|[nN]*) multiarch="$undef" ;;
12188 esac
12189
12190 : check for alignment requirements
12191 echo " "
12192 case "$crosscompile$multiarch" in
12193 *$define*)
12194         $cat <<EOM
12195 You seem to be either cross-compiling or doing a multiarchitecture build,
12196 skipping the memory alignment check.
12197
12198 EOM
12199         case "$alignbytes" in
12200         '') alignbytes=8 ;;
12201         esac
12202         ;;
12203 *)
12204         case "$alignbytes" in
12205         '') echo "Checking alignment constraints..." >&4
12206                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12207                         $cat >try.c <<'EOCP'
12208 typedef long double NV;
12209 EOCP
12210                 else
12211                         $cat >try.c <<'EOCP'
12212 typedef double NV;
12213 EOCP
12214                 fi
12215                 $cat >>try.c <<'EOCP'
12216 #include <stdio.h>
12217 struct foobar {
12218         char foo;
12219         NV bar;
12220 } try_algn;
12221 int main()
12222 {
12223     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12224     return(0);
12225 }
12226 EOCP
12227                 set try
12228                 if eval $compile_ok; then
12229                         dflt=`./try`
12230                 else
12231                         dflt='8'
12232                         echo "(I can't seem to compile the test program...)"
12233                 fi
12234                 ;;
12235         *) dflt="$alignbytes"
12236                 ;;
12237         esac
12238         rp="Doubles must be aligned on a how-many-byte boundary?"
12239         . ./myread
12240         alignbytes="$ans"
12241         $rm -f try.c try
12242         ;;
12243 esac
12244
12245
12246 : set the base revision
12247 baserev=5.0
12248
12249 : check for ordering of bytes in a long
12250 echo " "
12251 case "$crosscompile$multiarch" in
12252 *$define*)
12253         $cat <<EOM
12254 You seem to be either cross-compiling or doing a multiarchitecture build,
12255 skipping the byteorder check.
12256
12257 EOM
12258         byteorder='0xffff'
12259         ;;
12260 *)
12261         case "$byteorder" in
12262         '')
12263                 $cat <<'EOM'
12264 In the following, larger digits indicate more significance.  A big-endian
12265 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12266 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12267 machines may have weird orders like 3412.  A Cray will report 87654321,
12268 an Alpha will report 12345678. If the test program works the default is
12269 probably right.
12270 I'm now running the test program...
12271 EOM
12272                 $cat >try.c <<'EOCP'
12273 #include <stdio.h>
12274 int main()
12275 {
12276         int i;
12277         union {
12278                 unsigned long l;
12279                 char c[sizeof(long)];
12280         } u;
12281
12282         if (sizeof(long) > 4)
12283                 u.l = (0x08070605L << 32) | 0x04030201L;
12284         else
12285                 u.l = 0x04030201L;
12286         for (i = 0; i < sizeof(long); i++)
12287                 printf("%c", u.c[i]+'0');
12288         printf("\n");
12289         exit(0);
12290 }
12291 EOCP
12292                 xxx_prompt=y
12293                 set try
12294                 if eval $compile && ./try > /dev/null; then
12295                         dflt=`./try`
12296                         case "$dflt" in
12297                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12298                                 echo "(The test program ran ok.)"
12299                                 echo "byteorder=$dflt"
12300                                 xxx_prompt=n
12301                         ;;
12302                         ????|????????) echo "(The test program ran ok.)" ;;
12303                         *) echo "(The test program didn't run right for some reason.)" ;;
12304                         esac
12305                 else
12306                         dflt='4321'
12307                         cat <<'EOM'
12308 (I can't seem to compile the test program.  Guessing big-endian...)
12309 EOM
12310                 fi
12311                 case "$xxx_prompt" in
12312                 y)
12313                         rp="What is the order of bytes in a long?"
12314                         . ./myread
12315                         byteorder="$ans"
12316                         ;;
12317                 *)      byteorder=$dflt
12318                         ;;
12319                 esac
12320                 ;;
12321         esac
12322         $rm -f try.c try
12323         ;;
12324 esac
12325
12326
12327 : how do we catenate cpp tokens here?
12328 echo " "
12329 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12330 $cat >cpp_stuff.c <<'EOCP'
12331 #define RCAT(a,b)a/**/b
12332 #define ACAT(a,b)a ## b
12333 RCAT(Rei,ser)
12334 ACAT(Cir,cus)
12335 EOCP
12336 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12337 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12338         echo "Oh!  Smells like ANSI's been here." >&4
12339         echo "We can catify or stringify, separately or together!"
12340         cpp_stuff=42
12341 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12342         echo "Ah, yes!  The good old days!" >&4
12343         echo "However, in the good old days we don't know how to stringify and"
12344         echo "catify at the same time."
12345         cpp_stuff=1
12346 else
12347         $cat >&4 <<EOM
12348 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12349 to have to edit the values of CAT[2-5] in config.h...
12350 EOM
12351         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12352 fi
12353 $rm -f cpp_stuff.*
12354
12355 : see if this is a db.h system
12356 set db.h i_db
12357 eval $inhdr
12358
12359 case "$i_db" in
12360 $define)
12361         : Check db version.
12362         echo " "
12363         echo "Checking Berkeley DB version ..." >&4
12364         $cat >try.c <<EOCP
12365 #$d_const HASCONST
12366 #ifndef HASCONST
12367 #define const
12368 #endif
12369 #include <sys/types.h>
12370 #include <stdio.h>
12371 #include <db.h>
12372 int main()
12373 {
12374 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12375     int Major, Minor, Patch ;
12376     unsigned long Version ;
12377     (void)db_version(&Major, &Minor, &Patch) ;
12378     printf("You have Berkeley DB Version 2 or greater\n");
12379
12380     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12381                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12382     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12383                 Major, Minor, Patch) ;
12384
12385     /* check that db.h & libdb are compatible */
12386     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12387         printf("db.h and libdb are incompatible\n") ;
12388         exit(3);        
12389     }
12390
12391     printf("db.h and libdb are compatible\n") ;
12392
12393     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12394                 + DB_VERSION_PATCH ;
12395
12396     /* needs to be >= 2.3.4 */
12397     if (Version < 2003004) {
12398     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12399         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12400         exit(2);        
12401     }
12402
12403     exit(0);
12404 #else
12405 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12406     printf("You have Berkeley DB Version 1\n");
12407     exit(0);    /* DB version < 2: the coast is clear. */
12408 #else
12409     exit(1);    /* <db.h> not Berkeley DB? */
12410 #endif
12411 #endif
12412 }
12413 EOCP
12414         set try
12415         if eval $compile_ok && ./try; then
12416                 echo 'Looks OK.' >&4
12417         else
12418                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12419                 i_db=$undef
12420                 case " $libs " in
12421                 *"-ldb "*)
12422                         : Remove db from list of libraries to use
12423                         echo "Removing unusable -ldb from library list" >&4
12424                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12425                         shift
12426                         libs="$*"
12427                         echo "libs = $libs" >&4
12428                         ;;
12429                 esac
12430         fi
12431         $rm -f try.*
12432         ;;
12433 esac
12434
12435 case "$i_db" in
12436 define)
12437         : Check the return type needed for hash 
12438         echo " "
12439         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12440         $cat >try.c <<EOCP
12441 #$d_const HASCONST
12442 #ifndef HASCONST
12443 #define const
12444 #endif
12445 #include <sys/types.h>
12446 #include <db.h>
12447
12448 #ifndef DB_VERSION_MAJOR
12449 u_int32_t hash_cb (ptr, size)
12450 const void *ptr;
12451 size_t size;
12452 {
12453 }
12454 HASHINFO info;
12455 int main()
12456 {
12457         info.hash = hash_cb;
12458 }
12459 #endif
12460 EOCP
12461         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12462                 if $contains warning try.out >>/dev/null 2>&1 ; then
12463                         db_hashtype='int'
12464                 else
12465                         db_hashtype='u_int32_t'
12466                 fi
12467         else
12468                 : XXX Maybe we should just give up here.
12469                 db_hashtype=u_int32_t
12470                 $cat try.out >&4
12471                 echo "Help:  I can't seem to compile the db test program." >&4
12472                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12473         fi
12474         $rm -f try.*
12475         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12476         ;;
12477 *)      db_hashtype=u_int32_t
12478         ;;
12479 esac
12480 case "$i_db" in
12481 define)
12482         : Check the return type needed for prefix 
12483         echo " "
12484         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12485         cat >try.c <<EOCP
12486 #$d_const HASCONST
12487 #ifndef HASCONST
12488 #define const
12489 #endif
12490 #include <sys/types.h>
12491 #include <db.h>
12492
12493 #ifndef DB_VERSION_MAJOR
12494 size_t prefix_cb (key1, key2)
12495 const DBT *key1;
12496 const DBT *key2;
12497 {
12498 }
12499 BTREEINFO info;
12500 int main()
12501 {
12502         info.prefix = prefix_cb;
12503 }
12504 #endif
12505 EOCP
12506         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12507                 if $contains warning try.out >>/dev/null 2>&1 ; then
12508                         db_prefixtype='int'
12509                 else
12510                         db_prefixtype='size_t'
12511                 fi
12512         else
12513                 db_prefixtype='size_t'
12514                 : XXX Maybe we should just give up here.
12515                 $cat try.out >&4
12516                 echo "Help:  I can't seem to compile the db test program." >&4
12517                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12518         fi
12519         $rm -f try.*
12520         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12521         ;;
12522 *)      db_prefixtype='size_t'
12523         ;;
12524 esac
12525
12526 : check for void type
12527 echo " "
12528 echo "Checking to see how well your C compiler groks the void type..." >&4
12529 case "$voidflags" in
12530 '')
12531         $cat >try.c <<'EOCP'
12532 #if TRY & 1
12533 void sub() {
12534 #else
12535 sub() {
12536 #endif
12537         extern void moo();      /* function returning void */
12538         void (*goo)();          /* ptr to func returning void */
12539 #if TRY & 8
12540         void *hue;              /* generic ptr */
12541 #endif
12542 #if TRY & 2
12543         void (*foo[10])();
12544 #endif
12545
12546 #if TRY & 4
12547         if(goo == moo) {
12548                 exit(0);
12549         }
12550 #endif
12551         exit(0);
12552 }
12553 int main() { sub(); }
12554 EOCP
12555         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12556                 voidflags=$defvoidused
12557         echo "Good.  It appears to support void to the level $package wants.">&4
12558                 if $contains warning .out >/dev/null 2>&1; then
12559                         echo "However, you might get some warnings that look like this:"
12560                         $cat .out
12561                 fi
12562         else
12563 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12564                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12565                         echo "It supports 1..."
12566                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12567                                 echo "It also supports 2..."
12568                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12569                                         voidflags=7
12570                                         echo "And it supports 4 but not 8 definitely."
12571                                 else
12572                                         echo "It doesn't support 4..."
12573                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12574                                                 voidflags=11
12575                                                 echo "But it supports 8."
12576                                         else
12577                                                 voidflags=3
12578                                                 echo "Neither does it support 8."
12579                                         fi
12580                                 fi
12581                         else
12582                                 echo "It does not support 2..."
12583                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12584                                         voidflags=13
12585                                         echo "But it supports 4 and 8."
12586                                 else
12587                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12588                                                 voidflags=5
12589                                                 echo "And it supports 4 but has not heard about 8."
12590                                         else
12591                                                 echo "However it supports 8 but not 4."
12592                                         fi
12593                                 fi
12594                         fi
12595                 else
12596                         echo "There is no support at all for void."
12597                         voidflags=0
12598                 fi
12599         fi
12600 esac
12601 case "$voidflags" in
12602 "$defvoidused") ;;
12603 *)      $cat >&4 <<'EOM'
12604   Support flag bits are:
12605     1: basic void declarations.
12606     2: arrays of pointers to functions returning void.
12607     4: operations between pointers to and addresses of void functions.
12608     8: generic void pointers.
12609 EOM
12610         dflt="$voidflags";
12611         rp="Your void support flags add up to what?"
12612         . ./myread
12613         voidflags="$ans"
12614         ;;
12615 esac
12616 $rm -f try.* .out
12617
12618
12619 : How can we generate normalized random numbers ?
12620 echo " "
12621 echo "Looking for a random number function..." >&4
12622 case "$randfunc" in
12623 '')
12624         if set drand48 val -f; eval $csym; $val; then
12625                 dflt="drand48"
12626                 echo "Good, found drand48()." >&4
12627         elif set random val -f; eval $csym; $val; then
12628                 dflt="random"
12629                 echo "OK, found random()." >&4
12630         else
12631                 dflt="rand"
12632                 echo "Yick, looks like I have to use rand()." >&4
12633         fi
12634         echo " "
12635         ;;
12636 *)
12637         dflt="$randfunc"
12638         ;;
12639 esac
12640 cont=true
12641
12642 case "$ccflags" in
12643 *-Dmy_rand=*|*-Dmy_srand=*)
12644         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12645         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12646         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12647         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12648         ;;
12649 esac
12650
12651 while $test "$cont"; do
12652         rp="Use which function to generate random numbers?"
12653         . ./myread
12654         if $test "$ans" = "$dflt"; then
12655                 : null
12656         else
12657                 randbits=''
12658         fi
12659         randfunc="$ans"
12660         if set $ans val -f; eval $csym; $val; then
12661                 cont=''
12662         else
12663                 dflt=y
12664                 rp="I cannot find function $ans. Use that name anyway?"
12665                 . ./myread
12666                 dflt=rand
12667                 case "$ans" in
12668                         [yY]*) cont='';;
12669                 esac
12670         fi
12671         case "$cont" in
12672         '')
12673                 case "$randfunc" in
12674                 drand48)
12675                         drand01="drand48()"
12676                         seedfunc="srand48"
12677                         randbits=48
12678                         randseedtype=long
12679                         ;;
12680                 rand|random)
12681                         case "$randbits" in
12682                         '')
12683 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12684                                 $cat >try.c <<EOCP
12685 #$i_unistd I_UNISTD
12686 #$i_stdlib I_STDLIB
12687 #include <stdio.h>
12688 #ifdef I_UNISTD
12689 #  include <unistd.h>
12690 #endif
12691 #ifdef I_STDLIB
12692 #  include <stdlib.h>
12693 #endif
12694 int main()
12695 {
12696         register int i;
12697         register unsigned long tmp;
12698         register unsigned long max = 0L;
12699
12700         for (i = 1000; i; i--) {
12701                 tmp = (unsigned long) $randfunc();
12702                 if (tmp > max) max = tmp;
12703         }
12704         for (i = 0; max; i++)
12705                 max /= 2;
12706         printf("%d\n",i);
12707 }
12708 EOCP
12709                                 set try
12710                                 if eval $compile_ok; then
12711                                         dflt=`try`
12712                                 else
12713                                         dflt='?'
12714                                         echo "(I can't seem to compile the test program...)"
12715                                 fi
12716                                 ;;
12717                         *)
12718                                 dflt="$randbits"
12719                                 ;;
12720                         esac
12721                         rp="How many bits does your $randfunc() function produce?"
12722                         . ./myread
12723                         randbits="$ans"
12724                         $rm -f try.c try
12725                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12726                         seedfunc="s$randfunc"
12727                         randseedtype=unsigned
12728                         ;;
12729                 *)
12730                         dflt="31"
12731                         rp="How many bits does your $randfunc() function produce?"
12732                         . ./myread
12733                         randbits="$ans"
12734                         seedfunc="s$randfunc"
12735                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12736                         if set $seedfunc val -f; eval $csym; $val; then
12737                                 echo "(Using $seedfunc() to seed random generator)"
12738                         else
12739                                 echo "(Warning: no $seedfunc() to seed random generator)"
12740                                 seedfunc=rand
12741                         fi
12742                         randseedtype=unsigned
12743                         ;;
12744                 esac
12745                 ;;
12746         esac
12747 done
12748
12749 echo " "
12750 echo "Determining whether or not we are on an EBCDIC system..." >&4
12751 $cat >tebcdic.c <<'EOM'
12752 int main()
12753 {
12754   if ('M'==0xd4) return 0;
12755   return 1;
12756 }
12757 EOM
12758
12759 val=$undef
12760 set tebcdic
12761 if eval $compile_ok; then
12762         if ./tebcdic; then
12763                 echo "You seem to speak EBCDIC." >&4
12764                 val="$define"
12765         else
12766                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
12767         fi
12768 else
12769         echo "I'm unable to compile the test program." >&4
12770         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
12771 fi
12772 $rm -f tebcdic.c tebcdic
12773 set ebcdic
12774 eval $setvar
12775
12776 echo " "
12777 $cat >&4 <<EOM
12778 Checking how to flush all pending stdio output...
12779 EOM
12780 # I only know how to find the first 32 possibly open files on SunOS.
12781 # See also hints/sunos_4_1.sh and util.c  --AD
12782 case "$osname" in
12783 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12784 esac
12785 $cat >>try.c <<EOCP
12786 #include <stdio.h>
12787 #$i_unistd I_UNISTD
12788 #ifdef I_UNISTD
12789 # include <unistd.h>
12790 #endif
12791 #$d_sysconf HAS_SYSCONF
12792 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12793 #ifdef HAS_STDIO_STREAM_ARRAY
12794 # define STDIO_STREAM_ARRAY $stdio_stream_array
12795 #endif
12796 int main() {
12797   FILE* p = fopen("try.out", "w");
12798 #ifdef TRY_FPUTC
12799   fputc('x', p);
12800 #else
12801 # ifdef TRY_FPRINTF
12802   fprintf(p, "x");
12803 # endif
12804 #endif
12805 #ifdef TRY_FFLUSH_NULL
12806   fflush(NULL);
12807 #endif
12808 #ifdef TRY_FFLUSH_ALL
12809   {
12810     long open_max = -1;
12811 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12812     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12813 # else
12814 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12815     open_max = sysconf(_SC_OPEN_MAX);
12816 #  else
12817 #   ifdef FOPEN_MAX
12818     open_max = FOPEN_MAX;
12819 #   else
12820 #    ifdef OPEN_MAX
12821     open_max = OPEN_MAX;
12822 #    else
12823 #     ifdef _NFILE
12824     open_max = _NFILE;
12825 #     endif
12826 #    endif
12827 #   endif
12828 #  endif
12829 # endif 
12830 # ifdef HAS_STDIO_STREAM_ARRAY
12831     if (open_max > 0) {
12832       long i;
12833       for (i = 0; i < open_max; i++)
12834             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12835                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12836                 STDIO_STREAM_ARRAY[i]._flag)
12837                 fflush(&STDIO_STREAM_ARRAY[i]);
12838     }   
12839   }
12840 # endif
12841 #endif
12842   _exit(42);
12843 }
12844 EOCP
12845 : first we have to find out how _not_ to flush
12846 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12847     output=''
12848     set try -DTRY_FPUTC
12849     if eval $compile; then
12850             $rm -f try.out
12851             ./try$exe_ext 2>/dev/null
12852             if $test ! -s try.out -a "X$?" = X42; then
12853                 output=-DTRY_FPUTC
12854             fi
12855     fi
12856     case "$output" in
12857     '')
12858             set try -DTRY_FPRINTF
12859             $rm -f try.out
12860             if eval $compile; then
12861                     $rm -f try.out
12862                     ./try$exe_ext 2>/dev/null
12863                     if $test ! -s try.out -a "X$?" = X42; then
12864                         output=-DTRY_FPRINTF
12865                     fi
12866             fi
12867         ;;
12868     esac
12869 fi
12870 : check for fflush NULL behaviour
12871 case "$fflushNULL" in
12872 '')     set try -DTRY_FFLUSH_NULL $output
12873         if eval $compile; then
12874                 $rm -f try.out
12875                 ./try$exe_ext 2>/dev/null
12876                 code="$?"
12877                 if $test -s try.out -a "X$code" = X42; then
12878                         fflushNULL="`$cat try.out`"
12879                 else
12880                         if $test "X$code" != X42; then
12881                                 $cat >&4 <<EOM
12882 (If this test failed, don't worry, we'll try another method shortly.)
12883 EOM
12884                         fi
12885                 fi
12886         fi
12887         $rm -f core try.core core.try.*
12888         case "$fflushNULL" in
12889         x)      $cat >&4 <<EOM
12890 Your fflush(NULL) works okay for output streams.
12891 Let's see if it clobbers input pipes...
12892 EOM
12893 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12894 # bug that improperly flushes the input end of pipes.  So we avoid the
12895 # autoflush on fork/system/exec support for now. :-(
12896 $cat >tryp.c <<EOCP
12897 #include <stdio.h>
12898 int
12899 main(int argc, char **argv)
12900 {
12901     char buf[1024];
12902     int i;
12903     char *bp = buf;
12904     while (1) {
12905         while ((i = getc(stdin)) != -1
12906                && (*bp++ = i) != '\n'
12907                && bp < &buf[1024])
12908         /* DO NOTHING */ ;
12909         *bp = '\0';
12910         fprintf(stdout, "%s", buf);
12911         fflush(NULL);
12912         if (i == -1)
12913             return 0;
12914         bp = buf;
12915     }
12916 }
12917 EOCP
12918                 fflushNULL="$define"
12919                 set tryp
12920                 if eval $compile; then
12921                     $rm -f tryp.out
12922                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12923                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12924                        $cat >&4 <<EOM
12925 fflush(NULL) seems to behave okay with input streams.
12926 EOM
12927                         fflushNULL="$define"
12928                     else
12929                         $cat >&4 <<EOM
12930 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12931 EOM
12932                         fflushNULL="$undef"
12933                     fi
12934                 fi
12935                 $rm -f core tryp.c tryp.core core.tryp.*
12936                 ;;
12937         '')     $cat >&4 <<EOM
12938 Your fflush(NULL) isn't working (contrary to ANSI C).
12939 EOM
12940                 fflushNULL="$undef"
12941                 ;;
12942         *)      $cat >&4 <<EOM
12943 Cannot figure out whether your fflush(NULL) works or not.
12944 I'm assuming it doesn't (contrary to ANSI C).
12945 EOM
12946                 fflushNULL="$undef"
12947                 ;;
12948         esac
12949         ;;
12950 $define|true|[yY]*)
12951         fflushNULL="$define"
12952         ;;
12953 *)
12954         fflushNULL="$undef"
12955         ;;
12956 esac
12957 : check explicit looping only if NULL did not work, and if the pipe
12958 : bug does not show up on an explicit flush too
12959 case "$fflushNULL" in
12960 "$undef")
12961         $cat >tryp.c <<EOCP
12962 #include <stdio.h>
12963 int
12964 main(int argc, char **argv)
12965 {
12966     char buf[1024];
12967     int i;
12968     char *bp = buf;
12969     while (1) {
12970         while ((i = getc(stdin)) != -1
12971                && (*bp++ = i) != '\n'
12972                && bp < &buf[1024])
12973         /* DO NOTHING */ ;
12974         *bp = '\0';
12975         fprintf(stdout, "%s", buf);
12976         fflush(stdin);
12977         if (i == -1)
12978             return 0;
12979         bp = buf;
12980     }
12981 }
12982 EOCP
12983         set tryp
12984         if eval $compile; then
12985             $rm -f tryp.out
12986             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12987             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12988                $cat >&4 <<EOM
12989 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12990 EOM
12991                 : now check for fflushall behaviour
12992                 case "$fflushall" in
12993                 '')     set try -DTRY_FFLUSH_ALL $output
12994                         if eval $compile; then
12995                                 $cat >&4 <<EOM
12996 (Now testing the other method--but note that this also may fail.)
12997 EOM
12998                                 $rm -f try.out
12999                                 ./try$exe_ext 2>/dev/null
13000                                 if $test -s try.out -a "X$?" = X42; then
13001                                         fflushall="`$cat try.out`"
13002                                 fi
13003                         fi
13004                         $rm -f core try.core core.try.*
13005                         case "$fflushall" in
13006                         x)      $cat >&4 <<EOM
13007 Whew. Flushing explicitly all the stdio streams works.
13008 EOM
13009                                 fflushall="$define"
13010                                 ;;
13011                         '')     $cat >&4 <<EOM
13012 Sigh. Flushing explicitly all the stdio streams doesn't work.
13013 EOM
13014                                 fflushall="$undef"
13015                                 ;;
13016                         *)      $cat >&4 <<EOM
13017 Cannot figure out whether flushing stdio streams explicitly works or not.
13018 I'm assuming it doesn't.
13019 EOM
13020                                 fflushall="$undef"
13021                                 ;;
13022                         esac
13023                         ;;
13024                 "$define"|true|[yY]*)
13025                         fflushall="$define"
13026                         ;;
13027                 *)
13028                         fflushall="$undef"
13029                         ;;
13030                 esac
13031             else
13032                 $cat >&4 <<EOM
13033 All is futile.  Even fflush(stdin) clobbers input pipes!
13034 EOM
13035                 fflushall="$undef"
13036             fi
13037         else
13038             fflushall="$undef"
13039         fi
13040         $rm -f core tryp.c tryp.core core.tryp.*
13041         ;;
13042 *)      fflushall="$undef"
13043         ;;
13044 esac
13045
13046 case "$fflushNULL$fflushall" in
13047 undefundef)
13048         $cat <<EOM
13049 OK, I give up.  I cannot figure out how to flush pending stdio output.
13050 We won't be flushing handles at all before fork/exec/popen.
13051 EOM
13052         ;;
13053 esac
13054 $rm -f try.* try$exe_ext
13055
13056 : Store the full pathname to the ar program for use in the C program
13057 : Respect a hint or command line value for full_ar.
13058 case "$full_ar" in
13059 '') full_ar=$ar ;;
13060 esac
13061
13062 : Store the full pathname to the sed program for use in the C program
13063 full_sed=$sed
13064
13065 : see what type gids are declared as in the kernel
13066 echo " "
13067 echo "Looking for the type for group ids returned by getgid()."
13068 set gid_t gidtype xxx stdio.h sys/types.h
13069 eval $typedef
13070 case "$gidtype" in
13071 xxx)
13072         xxx=`./findhdr sys/user.h`
13073         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13074         case $1 in
13075         unsigned) dflt="$1 $2" ;;
13076         *) dflt="$1" ;;
13077         esac
13078         ;;
13079 *) dflt="$gidtype";;
13080 esac
13081 case "$gidtype" in
13082 gid_t) echo "gid_t found." ;;
13083 *)      rp="What is the type for group ids returned by getgid()?"
13084         . ./myread
13085         gidtype="$ans"
13086         ;;
13087 esac
13088
13089 echo " "
13090 case "$gidtype" in
13091 *_t) zzz="$gidtype"     ;;
13092 *)   zzz="gid"          ;;
13093 esac
13094 echo "Checking the size of $zzz..." >&4 
13095 cat > try.c <<EOCP
13096 #include <sys/types.h>
13097 #include <stdio.h>
13098 int main() {
13099     printf("%d\n", (int)sizeof($gidtype));
13100     exit(0);
13101 }
13102 EOCP
13103 set try
13104 if eval $compile_ok; then
13105         yyy=`./try`
13106         case "$yyy" in
13107         '')     gidsize=4
13108                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13109                 ;;
13110         *)      gidsize=$yyy
13111                 echo "Your $zzz is $gidsize bytes long."
13112                 ;;
13113         esac
13114 else
13115         gidsize=4
13116         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13117 fi
13118
13119
13120 echo " "
13121 case "$gidtype" in
13122 *_t) zzz="$gidtype"     ;;
13123 *)   zzz="gid"          ;;
13124 esac
13125 echo "Checking the sign of $zzz..." >&4 
13126 cat > try.c <<EOCP
13127 #include <sys/types.h>
13128 #include <stdio.h>
13129 int main() {
13130         $gidtype foo = -1;
13131         if (foo < 0)
13132                 printf("-1\n");
13133         else
13134                 printf("1\n");
13135 }
13136 EOCP
13137 set try
13138 if eval $compile; then
13139         yyy=`./try`
13140         case "$yyy" in
13141         '')     gidsign=1
13142                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13143                 ;;
13144         *)      gidsign=$yyy
13145                 case "$gidsign" in
13146                  1) echo "Your $zzz is unsigned." ;;
13147                 -1) echo "Your $zzz is signed."   ;;
13148                 esac
13149                 ;;
13150         esac
13151 else
13152         gidsign=1
13153         echo "(I can't compile the test program--guessing unsigned.)" >&4
13154 fi
13155
13156
13157 echo " "
13158
13159 if $test X"$quadtype" != X; then
13160
13161 echo "Checking how to print 64-bit integers..." >&4
13162
13163 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13164         $cat >try.c <<'EOCP'
13165 #include <sys/types.h>
13166 #include <stdio.h>
13167 int main() {
13168   int q = 12345678901;
13169   printf("%ld\n", q);
13170 }
13171 EOCP
13172         set try
13173         if eval $compile; then
13174                 yyy=`./try$exe_ext`
13175                 case "$yyy" in
13176                 12345678901)
13177                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13178                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13179                         echo "We will use %d."
13180                         ;;
13181                 esac
13182         fi
13183 fi
13184
13185 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13186         $cat >try.c <<'EOCP'
13187 #include <sys/types.h>
13188 #include <stdio.h>
13189 int main() {
13190   long q = 12345678901;
13191   printf("%ld\n", q);
13192 }
13193 EOCP
13194         set try
13195         if eval $compile; then
13196                 yyy=`./try$exe_ext`
13197                 case "$yyy" in
13198                 12345678901)
13199                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13200                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13201                         echo "We will use %ld."
13202                         ;;
13203                 esac
13204         fi
13205 fi
13206
13207 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13208         $cat >try.c <<'EOCP'
13209 #include <sys/types.h>
13210 #include <inttypes.h>
13211 #include <stdio.h>
13212 int main() {
13213   int64_t q = 12345678901;
13214   printf("%" PRId64 "\n", q);
13215 }
13216 EOCP
13217         set try
13218         if eval $compile; then
13219                 yyy=`./try$exe_ext`
13220                 case "$yyy" in
13221                 12345678901)
13222                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13223                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13224                         echo "We will use the C9X style."
13225                         ;;
13226                 esac
13227         fi
13228 fi
13229
13230 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13231         $cat >try.c <<'EOCP'
13232 #include <sys/types.h>
13233 #include <stdio.h>
13234 int main() {
13235   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13236   printf("%lld\n", q);
13237 }
13238 EOCP
13239         set try
13240         if eval $compile; then
13241                 yyy=`./try$exe_ext`
13242                 case "$yyy" in
13243                 12345678901)
13244                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13245                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13246                         echo "We will use the %lld style."
13247                         ;;
13248                 esac
13249         fi
13250 fi
13251
13252 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13253         $cat >try.c <<EOCP
13254 #include <sys/types.h>
13255 #include <stdio.h>
13256 int main() {
13257   $quadtype q = 12345678901;
13258   printf("%Ld\n", q);
13259 }
13260 EOCP
13261         set try
13262         if eval $compile; then
13263                 yyy=`./try$exe_ext`
13264                 case "$yyy" in
13265                 12345678901)
13266                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13267                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13268                         echo "We will use %Ld."
13269                         ;;
13270                 esac
13271         fi
13272 fi
13273
13274 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13275         $cat >try.c <<EOCP
13276 #include <sys/types.h>
13277 #include <stdio.h>
13278 int main() {
13279   $quadtype q = 12345678901;
13280   printf("%qd\n", q);
13281 }
13282 EOCP
13283         set try
13284         if eval $compile; then
13285                 yyy=`./try$exe_ext`
13286                 case "$yyy" in
13287                 12345678901)
13288                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13289                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13290                         echo "We will use %qd."
13291                         ;;
13292                 esac
13293         fi
13294 fi
13295
13296 if $test X"$sPRId64" = X; then
13297         echo "Cannot figure out how to print 64-bit integers." >&4
13298 fi
13299
13300 $rm -f try try.*
13301
13302 fi
13303
13304 case "$sPRId64" in
13305 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13306         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13307         ;;
13308 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13309         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13310         ;;
13311 esac
13312
13313
13314 echo " "
13315 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13316
13317 if $test X"$ivsize" = X8; then
13318         ivdformat="$sPRId64"
13319         uvuformat="$sPRIu64"
13320         uvoformat="$sPRIo64"
13321         uvxformat="$sPRIx64"
13322         uvXUformat="$sPRIXU64"
13323 else
13324         if $test X"$ivsize" = X"$longsize"; then
13325                 ivdformat='"ld"'
13326                 uvuformat='"lu"'
13327                 uvoformat='"lo"'
13328                 uvxformat='"lx"'
13329                 uvXUformat='"lX"'
13330         else
13331                 if $test X"$ivsize" = X"$intsize"; then
13332                         ivdformat='"d"'
13333                         uvuformat='"u"'
13334                         uvoformat='"o"'
13335                         uvxformat='"x"'
13336                         uvXUformat='"X"'
13337                 else
13338                         : far out
13339                         if $test X"$ivsize" = X"$shortsize"; then
13340                                 ivdformat='"hd"'
13341                                 uvuformat='"hu"'
13342                                 uvoformat='"ho"'
13343                                 uvxformat='"hx"'
13344                                 uvXUformat='"hX"'
13345                         fi
13346                 fi
13347         fi
13348 fi
13349
13350 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13351         nveformat="$sPRIeldbl"
13352         nvfformat="$sPRIfldbl"
13353         nvgformat="$sPRIgldbl"
13354         nvEUformat="$sPRIEUldbl"
13355         nvFUformat="$sPRIFUldbl"
13356         nvGUformat="$sPRIGUldbl"
13357 else
13358         nveformat='"e"'
13359         nvfformat='"f"'
13360         nvgformat='"g"'
13361         nvEUformat='"E"'
13362         nvFUformat='"F"'
13363         nvGUformat='"G"'
13364 fi
13365
13366 case "$ivdformat" in
13367 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13368     exit 1
13369     ;;
13370 esac
13371
13372
13373 echo " "
13374 $echo "Checking the format string to be used for gids..." >&4
13375
13376 case "$gidsign" in
13377 -1)     if $test X"$gidsize" = X"$ivsize"; then
13378                 gidformat="$ivdformat"
13379         else
13380                 if $test X"$gidsize" = X"$longsize"; then
13381                         gidformat='"ld"'
13382                 else
13383                         if $test X"$gidsize" = X"$intsize"; then
13384                                 gidformat='"d"'
13385                         else
13386                                 if $test X"$gidsize" = X"$shortsize"; then
13387                                         gidformat='"hd"'
13388                                 fi
13389                         fi
13390                 fi
13391         fi
13392         ;;
13393 *)      if $test X"$gidsize" = X"$uvsize"; then
13394                 gidformat="$uvuformat"
13395         else
13396                 if $test X"$gidsize" = X"$longsize"; then
13397                         gidformat='"lu"'
13398                 else
13399                         if $test X"$gidsize" = X"$intsize"; then
13400                                 gidformat='"u"'
13401                         else
13402                                 if $test X"$gidsize" = X"$shortsize"; then
13403                                         gidformat='"hu"'
13404                                 fi
13405                         fi
13406                 fi
13407         fi
13408         ;;
13409 esac
13410
13411 : see if getgroups exists
13412 set getgroups d_getgrps
13413 eval $inlibc
13414
13415 : see if setgroups exists
13416 set setgroups d_setgrps
13417 eval $inlibc
13418
13419
13420 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13421 echo " "
13422 case "$d_getgrps$d_setgrps" in
13423 *define*)
13424         case "$groupstype" in
13425         '') dflt="$gidtype" ;;
13426         *)  dflt="$groupstype" ;;
13427         esac
13428         $cat <<EOM
13429 What type of pointer is the second argument to getgroups() and setgroups()?
13430 Usually this is the same as group ids, $gidtype, but not always.
13431
13432 EOM
13433         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13434         . ./myread
13435         groupstype="$ans"
13436         ;;
13437 *)  groupstype="$gidtype";;
13438 esac
13439
13440 echo " "
13441 echo "Checking if your $make program sets \$(MAKE)..." >&4
13442 case "$make_set_make" in
13443 '')
13444         $sed 's/^X //' > testmake.mak << 'EOF'
13445 Xall:
13446 X       @echo 'maketemp="$(MAKE)"'
13447 EOF
13448         case "`$make -f testmake.mak 2>/dev/null`" in
13449         *maketemp=*) make_set_make='#' ;;
13450         *)      make_set_make="MAKE=$make" ;;
13451         esac
13452         $rm -f testmake.mak
13453         ;;
13454 esac
13455 case "$make_set_make" in
13456 '#') echo "Yup, it does.";;
13457 *) echo "Nope, it doesn't.";;
13458 esac
13459
13460 : see what type is used for mode_t
13461 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13462 set mode_t modetype int stdio.h sys/types.h
13463 eval $typedef_ask
13464
13465 : see if stdarg is available
13466 echo " "
13467 if $test `./findhdr stdarg.h`; then
13468         echo "<stdarg.h> found." >&4
13469         valstd="$define"
13470 else
13471         echo "<stdarg.h> NOT found." >&4
13472         valstd="$undef"
13473 fi
13474
13475 : see if varags is available
13476 echo " "
13477 if $test `./findhdr varargs.h`; then
13478         echo "<varargs.h> found." >&4
13479 else
13480         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13481 fi
13482
13483 : set up the varargs testing programs
13484 $cat > varargs.c <<EOP
13485 #ifdef I_STDARG
13486 #include <stdarg.h>
13487 #endif
13488 #ifdef I_VARARGS
13489 #include <varargs.h>
13490 #endif
13491
13492 #ifdef I_STDARG
13493 int f(char *p, ...)
13494 #else
13495 int f(va_alist)
13496 va_dcl
13497 #endif
13498 {
13499         va_list ap;
13500 #ifndef I_STDARG
13501         char *p;
13502 #endif
13503 #ifdef I_STDARG
13504         va_start(ap,p);
13505 #else
13506         va_start(ap);
13507         p = va_arg(ap, char *);
13508 #endif
13509         va_end(ap);
13510 }
13511 EOP
13512 $cat > varargs <<EOP
13513 $startsh
13514 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13515         echo "true"
13516 else
13517         echo "false"
13518 fi
13519 $rm -f varargs$_o
13520 EOP
13521 chmod +x varargs
13522
13523 : now check which varargs header should be included
13524 echo " "
13525 i_varhdr=''
13526 case "$valstd" in
13527 "$define")
13528         if `./varargs I_STDARG`; then
13529                 val='stdarg.h'
13530         elif `./varargs I_VARARGS`; then
13531                 val='varargs.h'
13532         fi
13533         ;;
13534 *)
13535         if `./varargs I_VARARGS`; then
13536                 val='varargs.h'
13537         fi
13538         ;;
13539 esac
13540 case "$val" in
13541 '')
13542 echo "I could not find the definition for va_dcl... You have problems..." >&4
13543         val="$undef"; set i_stdarg; eval $setvar
13544         val="$undef"; set i_varargs; eval $setvar
13545         ;;
13546 *) 
13547         set i_varhdr
13548         eval $setvar
13549         case "$i_varhdr" in
13550         stdarg.h)
13551                 val="$define"; set i_stdarg; eval $setvar
13552                 val="$undef"; set i_varargs; eval $setvar
13553                 ;;
13554         varargs.h)
13555                 val="$undef"; set i_stdarg; eval $setvar
13556                 val="$define"; set i_varargs; eval $setvar
13557                 ;;
13558         esac
13559         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13560 esac
13561 $rm -f varargs*
13562
13563 : see if we need va_copy
13564 echo " "
13565 case "$i_stdarg" in
13566 "$define")
13567         $cat >try.c <<EOCP
13568 #include <stdarg.h>
13569 #include <stdio.h>
13570
13571 int
13572 ivfprintf(FILE *f, const char *fmt, va_list *valp)
13573 {
13574   return vfprintf(f, fmt, *valp);
13575 }
13576  
13577 int    
13578 myvfprintf(FILE *f, const  char *fmt, va_list val)
13579 {
13580   return ivfprintf(f, fmt, &val);
13581 }
13582       
13583 int
13584 myprintf(char *fmt, ...) 
13585 {
13586   va_list val;
13587   va_start(val, fmt);
13588   return myvfprintf(stdout, fmt, val); 
13589 }         
13590
13591 int
13592 main(int ac, char **av)
13593 {
13594   myprintf("%s%cs all right, then\n", "that", '\'');                            
13595   exit(0);      
13596 }
13597 EOCP
13598         set try
13599         if eval $compile_ok && ./try >/dev/null; then
13600                 case "`./try`" in
13601                 "that's all right, then")
13602                         okay=yes
13603                         ;;
13604                 esac
13605         fi
13606         case "$okay" in
13607         yes)    echo "It seems that you don't need va_copy()." >&4
13608                 need_va_copy="$undef"
13609                 ;;
13610         *)      echo "It seems that va_copy() or similar will be needed." >&4
13611                 need_va_copy="$define"
13612                 ;;
13613         esac
13614         $rm -f try.* core core.* *.core *.core.*
13615         ;;
13616 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
13617         ;;
13618 esac
13619
13620 : define a fucntion to check prototypes
13621 $cat > protochk <<EOSH
13622 $startsh
13623 cc="$cc"
13624 optimize="$optimize"
13625 ccflags="$ccflags"
13626 prototype="$prototype"
13627 define="$define"
13628 rm=$rm
13629 EOSH
13630
13631 $cat >> protochk <<'EOSH'
13632
13633 $rm -f try.c
13634 foo="$1"
13635 shift
13636 while test $# -ge 2; do
13637         case "$1" in
13638                 $define) echo "#include <$2>" >> try.c ;;
13639                 literal) echo "$2" >> try.c ;;
13640         esac
13641     shift 2
13642 done
13643 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13644 cat >> try.c <<'EOCP'
13645 #ifdef CAN_PROTOTYPE
13646 #define _(args) args
13647 #else
13648 #define _(args) ()
13649 #endif
13650 EOCP
13651 echo "$foo" >> try.c
13652 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13653 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13654 status=$?
13655 $rm -f try.[co]
13656 exit $status
13657 EOSH
13658 chmod +x protochk
13659 $eunicefix protochk
13660
13661 : see what type is used for size_t
13662 rp="What is the type used for the length parameter for string functions?"
13663 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13664 eval $typedef_ask
13665
13666 : check for type of arguments to gethostbyaddr. 
13667 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13668         case "$d_gethbyaddr" in
13669         $define)
13670                 $cat <<EOM
13671
13672 Checking to see what type of arguments are accepted by gethostbyaddr().
13673 EOM
13674                 hdrs="$define sys/types.h
13675                         $d_socket sys/socket.h 
13676                         $i_niin netinet/in.h 
13677                         $i_netdb netdb.h
13678                         $i_unistd unistd.h"
13679                 : The first arg can 'char *' or 'void *'
13680                 : The second arg is some of integral type
13681                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13682                         for yyy in size_t long int; do
13683                                 case "$netdb_host_type" in
13684                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13685                                         if ./protochk "$try" $hdrs; then
13686                                                 echo "Your system accepts $xxx for the first arg."
13687                                                 echo "...and $yyy for the second arg."
13688                                                 netdb_host_type="$xxx"
13689                                                 netdb_hlen_type="$yyy"
13690                                         fi
13691                                         ;;
13692                                 esac
13693                         done
13694                 done
13695                 : In case none of those worked, prompt the user.
13696                 case "$netdb_host_type" in
13697                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13698                         dflt='char *'
13699                         . ./myread
13700                         netdb_host_type=$ans
13701                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13702                         dflt="$sizetype"
13703                         . ./myread
13704                         netdb_hlen_type=$ans
13705                         ;;
13706                 esac
13707                 ;;
13708         *)      : no gethostbyaddr, so pick harmless defaults
13709                 netdb_host_type='char *'
13710                 netdb_hlen_type="$sizetype"
13711                 ;;
13712         esac
13713         # Remove the "const" if needed. -- but then we'll have a 
13714         # prototype clash!
13715         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13716 fi
13717
13718 : check for type of argument to gethostbyname. 
13719 if test "X$netdb_name_type" = X ; then
13720         case "$d_gethbyname" in
13721         $define)
13722                 $cat <<EOM
13723
13724 Checking to see what type of argument is accepted by gethostbyname().
13725 EOM
13726                 hdrs="$define sys/types.h
13727                         $d_socket sys/socket.h 
13728                         $i_niin netinet/in.h 
13729                         $i_netdb netdb.h
13730                         $i_unistd unistd.h"
13731                 for xxx in "const char *" "char *"; do
13732                         case "$netdb_name_type" in
13733                         '')     try="extern struct hostent *gethostbyname($xxx);"
13734                                 if ./protochk "$try" $hdrs; then
13735                                         echo "Your system accepts $xxx."
13736                                         netdb_name_type="$xxx"
13737                                 fi
13738                                 ;;
13739                         esac
13740                 done
13741                 : In case none of those worked, prompt the user.
13742                 case "$netdb_name_type" in
13743                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13744                         dflt='char *'
13745                         . ./myread
13746                         netdb_name_type=$ans
13747                         ;;
13748                 esac
13749                 ;;
13750         *)      : no gethostbyname, so pick harmless default
13751                 netdb_name_type='char *'
13752                 ;;
13753         esac
13754 fi
13755
13756 : check for type of 1st argument to getnetbyaddr. 
13757 if test "X$netdb_net_type" = X ; then
13758         case "$d_getnbyaddr" in
13759         $define)
13760                 $cat <<EOM
13761
13762 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13763 EOM
13764                 hdrs="$define sys/types.h
13765                         $d_socket sys/socket.h 
13766                         $i_niin netinet/in.h 
13767                         $i_netdb netdb.h
13768                         $i_unistd unistd.h"
13769                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13770                         case "$netdb_net_type" in
13771                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13772                                 if ./protochk "$try" $hdrs; then
13773                                         echo "Your system accepts $xxx."
13774                                         netdb_net_type="$xxx"
13775                                 fi
13776                                 ;;
13777                         esac
13778                 done
13779                 : In case none of those worked, prompt the user.
13780                 case "$netdb_net_type" in
13781                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13782                         dflt='long'
13783                         . ./myread
13784                         netdb_net_type=$ans
13785                         ;;
13786                 esac
13787                 ;;
13788         *)      : no getnetbyaddr, so pick harmless default
13789                 netdb_net_type='long'
13790                 ;;
13791         esac
13792 fi
13793 : locate the preferred pager for this system
13794 case "$pager" in
13795 '')
13796         dflt=''
13797         case "$pg" in
13798         /*) dflt=$pg;;
13799         [a-zA-Z]:/*) dflt=$pg;;
13800         esac
13801         case "$more" in
13802         /*) dflt=$more;;
13803         [a-zA-Z]:/*) dflt=$more;;
13804         esac
13805         case "$less" in
13806         /*) dflt=$less;;
13807         [a-zA-Z]:/*) dflt=$less;;
13808         esac
13809         case "$dflt" in
13810         '') dflt=/usr/ucb/more;;
13811         esac
13812         ;;
13813 *) dflt="$pager";;
13814 esac
13815 echo " "
13816 fn=f/
13817 rp='What pager is used on your system?'
13818 . ./getfile
13819 pager="$ans"
13820
13821 : see what type pids are declared as in the kernel
13822 rp="What is the type of process ids on this system?"
13823 set pid_t pidtype int stdio.h sys/types.h
13824 eval $typedef_ask
13825
13826 : Find earliest binary compatible site_perl subdirectory perl can use.
13827 case "$bincompat5005" in
13828 "$define") xs_apiversion='5.005' ;;
13829 *) xs_apiversion=$version ;;   # The current site_perl version.
13830 esac
13831 : Find earliest pure perl site_perl subdirectory perl can use.
13832 : The versioned directories started at 5.005.
13833 pm_apiversion='5.005'
13834
13835 : check for length of pointer
13836 echo " "
13837 case "$ptrsize" in
13838 '')
13839         echo "Checking to see how big your pointers are..." >&4
13840         if test "$voidflags" -gt 7; then
13841                 echo '#define VOID_PTR char *' > try.c
13842         else
13843                 echo '#define VOID_PTR void *' > try.c
13844         fi
13845         $cat >>try.c <<'EOCP'
13846 #include <stdio.h>
13847 int main()
13848 {
13849     printf("%d\n", (int)sizeof(VOID_PTR));
13850     exit(0);
13851 }
13852 EOCP
13853         set try
13854         if eval $compile_ok; then
13855                 ptrsize=`./try`
13856                 echo "Your pointers are $ptrsize bytes long."
13857         else
13858                 dflt='4'
13859                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13860                 rp="What is the size of a pointer (in bytes)?"
13861                 . ./myread
13862                 ptrsize="$ans"
13863         fi
13864         ;;
13865 esac
13866 $rm -f try.c try
13867
13868 : see if ar generates random libraries by itself
13869 echo " "
13870 echo "Checking how to generate random libraries on your machine..." >&4
13871 echo 'int bar1() { return bar2(); }' > bar1.c
13872 echo 'int bar2() { return 2; }' > bar2.c
13873 $cat > foo.c <<'EOP'
13874 int main() { printf("%d\n", bar1()); exit(0); }
13875 EOP
13876 $cc $ccflags -c bar1.c >/dev/null 2>&1
13877 $cc $ccflags -c bar2.c >/dev/null 2>&1
13878 $cc $ccflags -c foo.c >/dev/null 2>&1
13879 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13880 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13881         ./foobar >/dev/null 2>&1; then
13882         echo "$ar appears to generate random libraries itself."
13883         orderlib=false
13884         ranlib=":"
13885 elif $ar ts bar$_a >/dev/null 2>&1 &&
13886         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
13887         ./foobar >/dev/null 2>&1; then
13888                 echo "a table of contents needs to be added with '$ar ts'."
13889                 orderlib=false
13890                 ranlib="$ar ts"
13891 else
13892         case "$ranlib" in
13893         :) ranlib='';;
13894         '')
13895                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13896                 $test -f $ranlib || ranlib=''
13897                 ;;
13898         esac
13899         if $test -n "$ranlib"; then
13900                 echo "your system has '$ranlib'; we'll use that."
13901                 orderlib=false
13902         else
13903                 echo "your system doesn't seem to support random libraries"
13904                 echo "so we'll use lorder and tsort to order the libraries."
13905                 orderlib=true
13906                 ranlib=":"
13907         fi
13908 fi
13909 $rm -f foo* bar* 
13910
13911 : check for type of arguments to select. 
13912 case "$selecttype" in
13913 '') case "$d_select" in
13914         $define)
13915                 echo " "
13916                 $cat <<EOM
13917 Checking to see what type of arguments are accepted by select().
13918 EOM
13919                 hdrs="$define sys/types.h
13920                         $i_systime sys/time.h 
13921                         $i_sysselct sys/select.h
13922                         $d_socket sys/socket.h"
13923                 : The first arg can be int, unsigned, or size_t
13924                 : The last arg may or may not be 'const'
13925                 val=''
13926                 : void pointer has been seen but using that
13927                 : breaks the selectminbits test
13928                 for xxx in 'fd_set *' 'int *'; do
13929                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13930                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13931                                         case "$val" in
13932                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13933                                                 if ./protochk "$try" $hdrs; then
13934                                                         echo "Your system accepts $xxx."
13935                                                         val="$xxx"
13936                                                 fi
13937                                                 ;;
13938                                         esac
13939                                 done
13940                         done
13941                 done
13942                 case "$val" in
13943                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13944                         case "$d_fd_set" in
13945                                 $define) dflt="fd_set *" ;;
13946                                 *)              dflt="int *" ;;
13947                         esac
13948                         . ./myread
13949                         val=$ans
13950                         ;;
13951                 esac
13952                 selecttype="$val"
13953                 ;;
13954         *)      : no select, so pick a harmless default
13955                 selecttype='int *'
13956                 ;;
13957         esac
13958         ;;
13959 esac
13960
13961 : check for the select 'width'
13962 case "$selectminbits" in
13963 '') case "$d_select" in
13964         $define)
13965                 $cat <<EOM
13966
13967 Checking to see on how many bits at a time your select() operates...
13968 EOM
13969                 $cat >try.c <<EOCP
13970 #include <sys/types.h>
13971 #$i_time I_TIME
13972 #$i_systime I_SYS_TIME
13973 #$i_systimek I_SYS_TIME_KERNEL
13974 #ifdef I_TIME
13975 #   include <time.h>
13976 #endif
13977 #ifdef I_SYS_TIME
13978 #   ifdef I_SYS_TIME_KERNEL
13979 #       define KERNEL
13980 #   endif
13981 #   include <sys/time.h>
13982 #   ifdef I_SYS_TIME_KERNEL
13983 #       undef KERNEL
13984 #   endif
13985 #endif
13986 #$i_sysselct I_SYS_SELECT
13987 #ifdef I_SYS_SELECT
13988 #include <sys/select.h>
13989 #endif
13990 #$d_socket HAS_SOCKET
13991 #ifdef HAS_SOCKET
13992 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13993 #endif
13994 #include <stdio.h>
13995 $selecttype b;
13996 #define S sizeof(*(b))
13997 #define MINBITS 64
13998 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13999 #define NBITS  (NBYTES * 8)
14000 int main() {
14001     char s[NBYTES];
14002     struct timeval t;
14003     int i;
14004     FILE* fp;
14005     int fd;
14006
14007     fclose(stdin);
14008     fp = fopen("try.c", "r");
14009     if (fp == 0)
14010       exit(1);
14011     fd = fileno(fp);
14012     if (fd < 0)
14013       exit(2);
14014     b = ($selecttype)s;
14015     for (i = 0; i < NBITS; i++)
14016         FD_SET(i, b);
14017     t.tv_sec  = 0;
14018     t.tv_usec = 0;
14019     select(fd + 1, b, 0, 0, &t);
14020     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14021     printf("%d\n", i + 1);
14022     return 0;
14023 }
14024 EOCP
14025                 set try
14026                 if eval $compile_ok; then
14027                         selectminbits=`./try`
14028                         case "$selectminbits" in
14029                         '')     cat >&4 <<EOM
14030 Cannot figure out on how many bits at a time your select() operates.
14031 I'll play safe and guess it is 32 bits.
14032 EOM
14033                                 selectminbits=32
14034                                 bits="32 bits"
14035                                 ;;
14036                         1)      bits="1 bit" ;;
14037                         *)      bits="$selectminbits bits" ;;
14038                         esac
14039                         echo "Your select() operates on $bits at a time." >&4
14040                 else
14041                         rp='What is the minimum number of bits your select() operates on?'
14042                         case "$byteorder" in
14043                         1234|12345678)  dflt=32 ;;
14044                         *)              dflt=1  ;;
14045                         esac
14046                         . ./myread
14047                         val=$ans
14048                         selectminbits="$val"
14049                 fi
14050                 $rm -f try.* try
14051                 ;;
14052         *)      : no select, so pick a harmless default
14053                 selectminbits='32'
14054                 ;;
14055         esac
14056         ;;
14057 esac
14058
14059 : Trace out the files included by signal.h, then look for SIGxxx names.
14060 : Remove SIGARRAYSIZE used by HPUX.
14061 : Remove SIGSTKSIZE used by Linux.
14062 : Remove SIGSTKSZ used by Posix.
14063 : Remove SIGTYP void lines used by OS2.
14064 : Some cpps, like os390, dont give the file name anywhere
14065 if [ "X$fieldn" = X ]; then
14066         : Just make some guesses.  We check them later.
14067         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14068 else
14069         xxx=`echo '#include <signal.h>' |
14070         $cppstdin $cppminus $cppflags 2>/dev/null |
14071         $grep '^[       ]*#.*include' | 
14072         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
14073 fi
14074 : Check this list of files to be sure we have parsed the cpp output ok.
14075 : This will also avoid potentially non-existent files, such 
14076 : as ../foo/bar.h
14077 xxxfiles=''
14078 for xx in $xxx /dev/null ; do
14079         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14080 done
14081 : If we have found no files, at least try signal.h
14082 case "$xxxfiles" in
14083 '')     xxxfiles=`./findhdr signal.h` ;;
14084 esac
14085 xxx=`awk '
14086 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14087         print substr($2, 4, 20)
14088 }
14089 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14090         print substr($3, 4, 20)
14091 }' $xxxfiles`
14092 : Append some common names just in case the awk scan failed.
14093 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14094 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14095 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14096 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14097 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14098
14099 : generate a few handy files for later
14100 $cat > signal.c <<'EOCP'
14101 #include <sys/types.h>
14102 #include <signal.h>
14103 #include <stdio.h>
14104 int main() {
14105
14106 /* Strange style to avoid deeply-nested #if/#else/#endif */
14107 #ifndef NSIG
14108 #  ifdef _NSIG
14109 #    define NSIG (_NSIG)
14110 #  endif
14111 #endif
14112
14113 #ifndef NSIG
14114 #  ifdef SIGMAX
14115 #    define NSIG (SIGMAX+1)
14116 #  endif
14117 #endif
14118
14119 #ifndef NSIG
14120 #  ifdef SIG_MAX
14121 #    define NSIG (SIG_MAX+1)
14122 #  endif
14123 #endif
14124
14125 #ifndef NSIG
14126 #  ifdef MAXSIG
14127 #    define NSIG (MAXSIG+1)
14128 #  endif
14129 #endif
14130
14131 #ifndef NSIG
14132 #  ifdef MAX_SIG
14133 #    define NSIG (MAX_SIG+1)
14134 #  endif
14135 #endif
14136
14137 #ifndef NSIG
14138 #  ifdef SIGARRAYSIZE
14139 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
14140 #  endif
14141 #endif
14142
14143 #ifndef NSIG
14144 #  ifdef _sys_nsig
14145 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
14146 #  endif
14147 #endif
14148
14149 /* Default to some arbitrary number that's big enough to get most
14150    of the common signals.
14151 */
14152 #ifndef NSIG
14153 #    define NSIG 50
14154 #endif
14155
14156 printf("NSIG %d\n", NSIG);
14157
14158 #ifndef JUST_NSIG
14159
14160 EOCP
14161
14162 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
14163 {
14164         printf "#ifdef SIG"; printf $1; printf "\n"
14165         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
14166         printf $1; printf ");\n"
14167         printf "#endif\n"
14168 }
14169 END {
14170         printf "#endif /* JUST_NSIG */\n";
14171         printf "exit(0);\n}\n";
14172 }
14173 ' >>signal.c
14174 $cat >signal.awk <<'EOP'
14175 BEGIN { ndups = 0 }
14176 $1 ~ /^NSIG$/ { nsig = $2 }
14177 ($1 !~ /^NSIG$/) && (NF == 2) {
14178     if ($2 > maxsig) { maxsig = $2 }
14179     if (sig_name[$2]) {
14180         dup_name[ndups] = $1
14181         dup_num[ndups] = $2
14182         ndups++ 
14183     }
14184     else {
14185         sig_name[$2] = $1
14186         sig_num[$2] = $2
14187     }
14188 }
14189 END { 
14190     if (nsig == 0) {
14191         nsig = maxsig + 1
14192     }
14193     printf("NSIG %d\n", nsig);
14194     for (n = 1; n < nsig; n++) {
14195         if (sig_name[n]) {
14196             printf("%s %d\n", sig_name[n], sig_num[n])
14197         }
14198         else {
14199             printf("NUM%d %d\n", n, n) 
14200         }
14201     }
14202     for (n = 0; n < ndups; n++) {
14203         printf("%s %d\n", dup_name[n], dup_num[n])
14204     }
14205 }
14206 EOP
14207 $cat >signal_cmd <<EOS
14208 $startsh
14209 if $test -s signal.lst; then
14210     echo "Using your existing signal.lst file"
14211         exit 0
14212 fi
14213 xxx="$xxx"
14214 EOS
14215 $cat >>signal_cmd <<'EOS'
14216
14217 set signal
14218 if eval $compile_ok; then
14219         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14220 else
14221         echo "(I can't seem be able to compile the whole test program)" >&4
14222         echo "(I'll try it in little pieces.)" >&4
14223         set signal -DJUST_NSIG
14224         if eval $compile_ok; then
14225                 ./signal$_exe > signal.nsg
14226                 $cat signal.nsg
14227         else
14228                 echo "I can't seem to figure out how many signals you have." >&4
14229                 echo "Guessing 50." >&4
14230                 echo 'NSIG 50' > signal.nsg
14231         fi
14232         : Now look at all the signal names, one at a time.
14233         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14234                 $cat > signal.c <<EOCP
14235 #include <sys/types.h>
14236 #include <signal.h>
14237 #include <stdio.h>
14238 int main() {
14239 printf("$xx %d\n", SIG${xx});
14240 return 0;
14241 }
14242 EOCP
14243                 set signal
14244                 if eval $compile; then
14245                         echo "SIG${xx} found."
14246                         ./signal$_exe  >> signal.ls1
14247                 else
14248                         echo "SIG${xx} NOT found."
14249                 fi
14250         done
14251         if $test -s signal.ls1; then
14252                 $cat signal.nsg signal.ls1 |
14253                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14254         fi
14255
14256 fi
14257 if $test -s signal.lst; then
14258         :
14259 else
14260         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14261         echo 'kill -l' >signal
14262         set X `csh -f <signal`
14263         $rm -f signal
14264         shift
14265         case $# in
14266         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14267         esac
14268         echo $@ | $tr ' ' $trnl | \
14269             $awk '{ printf "%s %d\n", $1, ++s; }
14270                   END { printf "NSIG %d\n", ++s }' >signal.lst
14271 fi
14272 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14273 EOS
14274 chmod a+x signal_cmd
14275 $eunicefix signal_cmd
14276
14277 : generate list of signal names
14278 echo " "
14279 case "$sig_name_init" in
14280 '') doinit=yes ;;
14281 *)  case "$sig_num_init" in
14282     ''|*,*) doinit=yes ;;
14283     esac ;;
14284 esac
14285 case "$doinit" in
14286 yes)
14287         echo "Generating a list of signal names and numbers..." >&4
14288         . ./signal_cmd
14289         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14290         sig_name=`$awk 'BEGIN { printf "ZERO " }
14291                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14292         sig_num=`$awk  'BEGIN { printf "0 " }
14293                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14294         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14295                              !/^NSIG/   { printf "\"%s\", ", $1 }
14296                              END        { printf "0\n" }' signal.lst`
14297         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14298                              !/^NSIG/   { printf "%d, ", $2}
14299                              END        { printf "0\n"}' signal.lst`
14300         ;;
14301 esac
14302 echo "The following $sig_count signals are available:"
14303 echo " "
14304 echo $sig_name | $awk \
14305 'BEGIN { linelen = 0 }
14306 {
14307         for (i = 1; i <= NF; i++) {
14308                 name = "SIG" $i " "
14309                 linelen = linelen + length(name)
14310                 if (linelen > 70) {
14311                         printf "\n"
14312                         linelen = length(name)
14313                 }
14314                 printf "%s", name
14315         }
14316         printf "\n"
14317 }'
14318 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14319
14320 echo " "
14321 case "$sizetype" in
14322 *_t) zzz="$sizetype"    ;;
14323 *)   zzz="filesize"     ;;
14324 esac
14325 echo "Checking the size of $zzz..." >&4 
14326 cat > try.c <<EOCP
14327 #include <sys/types.h>
14328 #include <stdio.h>
14329 int main() {
14330     printf("%d\n", (int)sizeof($sizetype));
14331     exit(0);
14332 }
14333 EOCP
14334 set try
14335 if eval $compile_ok; then
14336         yyy=`./try`
14337         case "$yyy" in
14338         '')     sizesize=4
14339                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14340                 ;;
14341         *)      sizesize=$yyy
14342                 echo "Your $zzz size is $sizesize bytes."
14343                 ;;
14344         esac
14345 else
14346         sizesize=4
14347         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14348 fi
14349
14350
14351 : check for socklen_t
14352 echo " "
14353 echo "Checking to see if you have socklen_t..." >&4
14354 $cat >try.c <<EOCP
14355 #include <sys/types.h>
14356 #$d_socket HAS_SOCKET
14357 #ifdef HAS_SOCKET
14358 #include <sys/socket.h>
14359 #endif
14360 int main() { socklen_t x = 16; }
14361 EOCP
14362 set try
14363 if eval $compile; then
14364         val="$define"
14365         echo "You have socklen_t."
14366 else
14367         val="$undef"
14368         echo "You do not have socklen_t."
14369         case "$sizetype" in
14370         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14371         esac
14372 fi
14373 $rm -f try try.*
14374 set d_socklen_t
14375 eval $setvar
14376
14377 : see if this is a socks.h system
14378 set socks.h i_socks
14379 eval $inhdr
14380
14381 : check for type of the size argument to socket calls
14382 case "$d_socket" in
14383 "$define")
14384         $cat <<EOM
14385
14386 Checking to see what type is the last argument of accept().
14387 EOM
14388         yyy=''
14389         case "$d_socklen_t" in
14390         "$define") yyy="$yyy socklen_t"
14391         esac
14392         yyy="$yyy $sizetype int long unsigned"
14393         for xxx in $yyy; do
14394                 case "$socksizetype" in
14395                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14396                         case "$usesocks" in
14397                         "$define")
14398                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
14399                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14400                                         socksizetype="$xxx"
14401                                 fi
14402                                 ;;
14403                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
14404                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14405                                         socksizetype="$xxx"
14406                                 fi
14407                                 ;;
14408                         esac
14409                         ;;
14410                 esac
14411         done
14412 : In case none of those worked, prompt the user.
14413         case "$socksizetype" in
14414         '')     rp='What is the type for socket address structure sizes?'
14415                 dflt='int'
14416                 . ./myread
14417                 socksizetype=$ans
14418                 ;;
14419         esac
14420         ;;
14421 *)      : no sockets, so pick relatively harmless default
14422         socksizetype='int'
14423         ;;
14424 esac
14425
14426 : see what type is used for signed size_t
14427 set ssize_t ssizetype int stdio.h sys/types.h
14428 eval $typedef
14429 dflt="$ssizetype"
14430 $cat > ssize.c <<EOM
14431 #include <stdio.h>
14432 #include <sys/types.h>
14433 #define Size_t $sizetype
14434 #define SSize_t $dflt
14435 int main()
14436 {
14437         if (sizeof(Size_t) == sizeof(SSize_t))
14438                 printf("$dflt\n");
14439         else if (sizeof(Size_t) == sizeof(int))
14440                 printf("int\n");
14441         else 
14442                 printf("long\n");
14443         exit(0);
14444 }
14445 EOM
14446 echo " "
14447 set ssize
14448 if eval $compile_ok && ./ssize > /dev/null; then
14449         ssizetype=`./ssize`
14450         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14451 else
14452         $cat >&4 <<EOM
14453 Help! I can't compile and run the ssize_t test program: please enlighten me!
14454 (This is probably a misconfiguration in your system or libraries, and
14455 you really ought to fix it.  Still, I'll try anyway.)
14456
14457 I need a type that is the same size as $sizetype, but is guaranteed to
14458 be signed.  Common values are ssize_t, int and long.
14459
14460 EOM
14461         rp="What signed type is the same size as $sizetype?"
14462         . ./myread
14463         ssizetype="$ans"
14464 fi
14465 $rm -f ssize ssize.*
14466
14467 : see what type of char stdio uses.
14468 echo " "
14469 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14470         echo "Your stdio uses unsigned chars." >&4
14471         stdchar="unsigned char"
14472 else
14473         echo "Your stdio uses signed chars." >&4
14474         stdchar="char"
14475 fi
14476
14477 : see if time exists
14478 echo " "
14479 if test "X$d_time" = X -o X"$timetype" = X; then
14480     if set time val -f d_time; eval $csym; $val; then
14481                 echo 'time() found.' >&4
14482                 val="$define"
14483                 rp="What is the type returned by time() on this system?"
14484                 set time_t timetype long stdio.h sys/types.h
14485                 eval $typedef_ask
14486     else
14487                 echo 'time() not found, hope that will do.' >&4
14488                 val="$undef"
14489                 timetype='int';
14490     fi
14491     set d_time
14492     eval $setvar
14493 fi
14494
14495 : see what type uids are declared as in the kernel
14496 echo " "
14497 echo "Looking for the type for user ids returned by getuid()."
14498 set uid_t uidtype xxx stdio.h sys/types.h
14499 eval $typedef
14500 case "$uidtype" in
14501 xxx)
14502         xxx=`./findhdr sys/user.h`
14503         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14504         case $1 in
14505         unsigned) dflt="$1 $2" ;;
14506         *) dflt="$1" ;;
14507         esac
14508         ;;
14509 *) dflt="$uidtype";;
14510 esac
14511 case "$uidtype" in
14512 uid_t)  echo "uid_t found." ;;
14513 *)      rp="What is the type for user ids returned by getuid()?"
14514         . ./myread
14515         uidtype="$ans"
14516         ;;
14517 esac
14518
14519 echo " "
14520 case "$uidtype" in
14521 *_t) zzz="$uidtype"     ;;
14522 *)   zzz="uid"          ;;
14523 esac
14524 echo "Checking the size of $zzz..." >&4 
14525 cat > try.c <<EOCP
14526 #include <sys/types.h>
14527 #include <stdio.h>
14528 int main() {
14529     printf("%d\n", (int)sizeof($uidtype));
14530     exit(0);
14531 }
14532 EOCP
14533 set try
14534 if eval $compile_ok; then
14535         yyy=`./try`
14536         case "$yyy" in
14537         '')     uidsize=4
14538                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14539                 ;;
14540         *)      uidsize=$yyy
14541                 echo "Your $zzz is $uidsize bytes long."
14542                 ;;
14543         esac
14544 else
14545         uidsize=4
14546         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14547 fi
14548
14549 echo " "
14550 case "$uidtype" in
14551 *_t) zzz="$uidtype"     ;;
14552 *)   zzz="uid"          ;;
14553 esac
14554 echo "Checking the sign of $zzz..." >&4
14555 cat > try.c <<EOCP
14556 #include <sys/types.h>
14557 #include <stdio.h>
14558 int main() {
14559         $uidtype foo = -1;
14560         if (foo < 0)
14561                 printf("-1\n");
14562         else
14563                 printf("1\n");
14564 }
14565 EOCP
14566 set try
14567 if eval $compile; then
14568         yyy=`./try`
14569         case "$yyy" in
14570         '')     uidsign=1
14571                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14572                 ;;
14573         *)      uidsign=$yyy
14574                 case "$uidsign" in
14575                  1) echo "Your $zzz is unsigned." ;;
14576                 -1) echo "Your $zzz is signed."   ;;
14577                 esac
14578                 ;;
14579         esac
14580 else
14581         uidsign=1
14582         echo "(I can't compile the test program--guessing unsigned.)" >&4
14583 fi
14584
14585
14586
14587 echo " "
14588 $echo "Checking the format string to be used for uids..." >&4
14589
14590 case "$uidsign" in
14591 -1)     if $test X"$uidsize" = X"$ivsize"; then
14592                 uidformat="$ivdformat"
14593         else
14594                 if $test X"$uidsize" = X"$longsize"; then
14595                         uidformat='"ld"'
14596                 else
14597                         if $test X"$uidsize" = X"$intsize"; then
14598                                 uidformat='"d"'
14599                         else
14600                                 if $test X"$uidsize" = X"$shortsize"; then
14601                                         uidformat='"hd"'
14602                                 fi
14603                         fi
14604                 fi
14605         fi
14606         ;;
14607 *)      if $test X"$uidsize" = X"$uvsize"; then
14608                 uidformat="$uvuformat"
14609         else
14610                 if $test X"$uidsize" = X"$longsize"; then
14611                         uidformat='"lu"'
14612                 else
14613                         if $test X"$uidsize" = X"$intsize"; then
14614                                 uidformat='"u"'
14615                         else
14616                                 if $test X"$uidsize" = X"$shortsize"; then
14617                                         uidformat='"hu"'
14618                                 fi
14619                         fi
14620                 fi
14621         fi
14622         ;;
14623 esac
14624
14625 : see if dbm.h is available
14626 : see if dbmclose exists
14627 set dbmclose d_dbmclose
14628 eval $inlibc
14629
14630 case "$d_dbmclose" in
14631 $define)
14632         set dbm.h i_dbm
14633         eval $inhdr
14634         case "$i_dbm" in
14635         $define)
14636                 val="$undef"
14637                 set i_rpcsvcdbm
14638                 eval $setvar
14639                 ;;
14640         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14641                 eval $inhdr
14642                 ;;
14643         esac
14644         ;;
14645 *)      echo "We won't be including <dbm.h>"
14646         val="$undef"
14647         set i_dbm
14648         eval $setvar
14649         val="$undef"
14650         set i_rpcsvcdbm
14651         eval $setvar
14652         ;;
14653 esac
14654
14655 : see if this is a sys/file.h system
14656 val=''
14657 set sys/file.h val
14658 eval $inhdr
14659
14660 : do we need to include sys/file.h ?
14661 case "$val" in
14662 "$define")
14663         echo " "
14664         if $h_sysfile; then
14665                 val="$define"
14666                 echo "We'll be including <sys/file.h>." >&4
14667         else
14668                 val="$undef"
14669                 echo "We won't be including <sys/file.h>." >&4
14670         fi
14671         ;;
14672 *)
14673         h_sysfile=false
14674         ;;
14675 esac
14676 set i_sysfile
14677 eval $setvar
14678
14679 : see if fcntl.h is there
14680 val=''
14681 set fcntl.h val
14682 eval $inhdr
14683
14684 : see if we can include fcntl.h
14685 case "$val" in
14686 "$define")
14687         echo " "
14688         if $h_fcntl; then
14689                 val="$define"
14690                 echo "We'll be including <fcntl.h>." >&4
14691         else
14692                 val="$undef"
14693                 if $h_sysfile; then
14694         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14695                 else
14696                         echo "We won't be including <fcntl.h>." >&4
14697                 fi
14698         fi
14699         ;;
14700 *)
14701         h_fcntl=false
14702         val="$undef"
14703         ;;
14704 esac
14705 set i_fcntl
14706 eval $setvar
14707
14708 : see if this is a iconv.h system
14709 set iconv.h i_iconv
14710 eval $inhdr
14711
14712 : see if this is a ieeefp.h system
14713 set ieeefp.h i_ieeefp
14714 eval $inhdr
14715
14716 : see if this is a libutil.h system
14717 set libutil.h i_libutil
14718 eval $inhdr
14719
14720 : see if locale.h is available
14721 set locale.h i_locale
14722 eval $inhdr
14723
14724 : see if mach cthreads are available
14725 if test "X$usethreads" = "X$define"; then
14726         set mach/cthreads.h i_machcthr
14727         eval $inhdr
14728 else
14729         i_machcthr="$undef"
14730 fi
14731
14732
14733
14734 : see if this is a math.h system
14735 set math.h i_math
14736 eval $inhdr
14737
14738 : see if this is a mntent.h system
14739 set mntent.h i_mntent
14740 eval $inhdr
14741
14742 : see if ndbm.h is available
14743 set ndbm.h t_ndbm
14744 eval $inhdr
14745 case "$t_ndbm" in
14746 $define)
14747         : see if dbm_open exists
14748         set dbm_open d_dbm_open
14749         eval $inlibc
14750         case "$d_dbm_open" in
14751         $undef)
14752                 t_ndbm="$undef"
14753                 echo "We won't be including <ndbm.h>"
14754                 ;;
14755         esac
14756         ;;
14757 esac
14758 val="$t_ndbm"
14759 set i_ndbm
14760 eval $setvar
14761
14762 : see if net/errno.h is available
14763 val=''
14764 set net/errno.h val
14765 eval $inhdr
14766
14767 : Unfortunately, it causes problems on some systems.  Arrgh.
14768 case "$val" in
14769 $define)
14770         cat > try.c <<'EOM'
14771 #include <stdio.h>
14772 #include <errno.h>
14773 #include <net/errno.h>
14774 int func()
14775 {
14776         return ENOTSOCK;
14777 }
14778 EOM
14779         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14780                 echo "We'll be including <net/errno.h>." >&4
14781         else
14782                 echo "We won't be including <net/errno.h>." >&4
14783                 val="$undef"
14784         fi
14785         $rm -f try.* try
14786         ;;
14787 esac
14788 set i_neterrno
14789 eval $setvar
14790
14791 : see if netinet/tcp.h is available
14792 set netinet/tcp.h i_netinettcp
14793 eval $inhdr
14794
14795 : see if this is a poll.h system
14796 set poll.h i_poll
14797 eval $inhdr
14798
14799 : see if this is a prot.h system
14800 set prot.h i_prot
14801 eval $inhdr
14802
14803 echo " "
14804 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14805 $cat <<'EOSH' > Cppsym.know
14806 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14807 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14808 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14809 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14810 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14811 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14812 bull c cadmus clipper CMU COFF COMPILER_VERSION
14813 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14814 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14815 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14816 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14817 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14818 H3050R H3050RX hbullx20 hcx host_mips
14819 hp200 hp300 hp700 HP700 hp800 hp9000
14820 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14821 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14822 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14823 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14824 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14825 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14826 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14827 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14828 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14829 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14830 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14831 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14832 MATH_HAS_NO_SIDE_EFFECTS
14833 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14834 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14835 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14836 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14837 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14838 NetBSD news1500 news1700 news1800 news1900 news3700
14839 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
14840 ns32016 ns32332 ns32k nsc32000
14841 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14842 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14843 pc532 pdp11 PGC PIC plexus PORTAR posix
14844 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14845 POSIX_C_SOURCE POSIX_SOURCE POWER
14846 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14847 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14848 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14849 sony sony_news sonyrisc sparc sparclite spectrum
14850 stardent stdc STDC_EXT stratos sun sun3 sun386
14851 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14852 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14853 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14854 sysV68 sysV88 Tek4132 Tek4300 titan
14855 tower tower32 tower32_200 tower32_600 tower32_700
14856 tower32_800 tower32_850 tss
14857 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14858 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14859 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14860 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14861 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14862 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14863 z8000
14864 EOSH
14865 # Maybe put other stuff here too.
14866 cat <<EOSH >>Cppsym.know
14867 $osname
14868 EOSH
14869 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14870 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14871 $cat Cppsym.know > Cppsym.c
14872 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
14873 $rm -f Cppsym.a Cppsym.b Cppsym.c
14874 cat <<EOSH > Cppsym
14875 $startsh
14876 if $test \$# -gt 0; then
14877     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14878     if $test -s Cppsym.got; then
14879         $rm -f Cppsym.got
14880         exit 0
14881     fi
14882     $rm -f Cppsym.got
14883     exit 1
14884 else
14885     $tr " " "$trnl" | ./Cppsym.try
14886     exit 0
14887 fi
14888 EOSH
14889 chmod +x Cppsym
14890 $eunicefix Cppsym
14891 cat <<EOSH > Cppsym.try
14892 $startsh
14893 cat <<'EOCP' > try.c
14894 #include <stdio.h>
14895 int main() {
14896 EOCP
14897 $awk \\
14898 EOSH
14899 cat <<'EOSH' >> Cppsym.try
14900 'length($1) > 0 {
14901     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14902     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14903     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14904     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
14905 }'       >> try.c
14906 echo '}' >> try.c
14907 EOSH
14908 cat <<EOSH >> Cppsym.try
14909 ccflags="$ccflags"
14910 case "$osname-$gccversion" in
14911 irix-) ccflags="\$ccflags -woff 1178" ;;
14912 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14913 esac
14914 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
14915 EOSH
14916 chmod +x Cppsym.try
14917 $eunicefix Cppsym.try
14918 ./Cppsym < Cppsym.know > Cppsym.true
14919 : now check the C compiler for additional symbols
14920 postprocess_cc_v=''
14921 case "$osname" in
14922 aix) postprocess_cc_v="|$tr , ' '" ;;
14923 esac
14924 $cat >ccsym <<EOS
14925 $startsh
14926 $cat >tmp.c <<EOF
14927 extern int foo;
14928 EOF
14929 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14930 do
14931         case "\$i" in
14932         -D*) echo "\$i" | $sed 's/^-D//';;
14933         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14934         esac
14935 done
14936 $rm -f try.c
14937 EOS
14938 postprocess_cc_v=''
14939 chmod +x ccsym
14940 $eunicefix ccsym
14941 ./ccsym > ccsym1.raw
14942 if $test -s ccsym1.raw; then
14943        $sort ccsym1.raw | $uniq >ccsym.raw
14944 else
14945        mv ccsym1.raw ccsym.raw
14946 fi
14947
14948 $awk '/\=/ { print $0; next }
14949         { print $0"=1" }' ccsym.raw >ccsym.list
14950 $awk '/\=/ { print $0; next }
14951         { print $0"=1" }' Cppsym.true >ccsym.true
14952 $comm -13 ccsym.true ccsym.list >ccsym.own
14953 $comm -12 ccsym.true ccsym.list >ccsym.com
14954 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14955 also=''
14956 if $test -z ccsym.raw; then
14957         echo "Your C compiler doesn't seem to define any symbols!" >&4
14958         echo " "
14959         echo "However, your C preprocessor defines the following symbols:"
14960         $cat Cppsym.true
14961         ccsymbols=''
14962         cppsymbols=`$cat Cppsym.true`
14963         cppsymbols=`echo $cppsymbols`
14964         cppccsymbols="$cppsymbols"
14965 else
14966         if $test -s ccsym.com; then
14967                 echo "Your C compiler and pre-processor define these symbols:"
14968                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14969                 also='also '
14970                 symbols='ones'
14971                 cppccsymbols=`$cat ccsym.com`
14972                 cppccsymbols=`echo $cppccsymbols`
14973                 $test "$silent" || sleep 1
14974         fi
14975         if $test -s ccsym.cpp; then
14976                 $test "$also" && echo " "
14977                 echo "Your C pre-processor ${also}defines the following symbols:"
14978                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14979                 also='further '
14980                 cppsymbols=`$cat ccsym.cpp`
14981                 cppsymbols=`echo $cppsymbols`
14982                 $test "$silent" || sleep 1
14983         fi
14984         if $test -s ccsym.own; then
14985                 $test "$also" && echo " "
14986                 echo "Your C compiler ${also}defines the following cpp symbols:"
14987                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14988                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14989                 ccsymbols=`$cat ccsym.own`
14990                 ccsymbols=`echo $ccsymbols`
14991                 $test "$silent" || sleep 1
14992         fi
14993 fi
14994 $rm -f ccsym* Cppsym.*
14995
14996 : see if this is a termio system
14997 val="$undef"
14998 val2="$undef"
14999 val3="$undef"
15000 if $test `./findhdr termios.h`; then
15001         set tcsetattr i_termios
15002         eval $inlibc
15003         val3="$i_termios"
15004 fi
15005 echo " "
15006 case "$val3" in
15007 "$define") echo "You have POSIX termios.h... good!" >&4;;
15008 *) if ./Cppsym pyr; then
15009                 case "`/bin/universe`" in
15010                 ucb) if $test `./findhdr sgtty.h`; then
15011                                 val2="$define"
15012                                 echo "<sgtty.h> found." >&4
15013                         else
15014                                 echo "System is pyramid with BSD universe."
15015                                 echo "<sgtty.h> not found--you could have problems." >&4
15016                         fi;;
15017                 *) if $test `./findhdr termio.h`; then
15018                                 val="$define"
15019                                 echo "<termio.h> found." >&4
15020                         else
15021                                 echo "System is pyramid with USG universe."
15022                                 echo "<termio.h> not found--you could have problems." >&4
15023                         fi;;
15024                 esac
15025         elif ./usg; then
15026                 if $test `./findhdr termio.h`; then
15027                         echo "<termio.h> found." >&4
15028                         val="$define"
15029                 elif $test `./findhdr sgtty.h`; then
15030                         echo "<sgtty.h> found." >&4
15031                         val2="$define"
15032                 else
15033 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15034                 fi
15035         else
15036                 if $test `./findhdr sgtty.h`; then
15037                         echo "<sgtty.h> found." >&4
15038                         val2="$define"
15039                 elif $test `./findhdr termio.h`; then
15040                         echo "<termio.h> found." >&4
15041                         val="$define"
15042                 else
15043 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15044                 fi
15045         fi;;
15046 esac
15047 set i_termio; eval $setvar
15048 val=$val2; set i_sgtty; eval $setvar
15049 val=$val3; set i_termios; eval $setvar
15050
15051 : see if this is a shadow.h system
15052 set shadow.h i_shadow
15053 eval $inhdr
15054
15055 : see if stddef is available
15056 set stddef.h i_stddef
15057 eval $inhdr
15058
15059 : see if this is a sunmath.h system
15060 set sunmath.h i_sunmath
15061 eval $inhdr
15062
15063 : see if sys/access.h is available
15064 set sys/access.h i_sysaccess
15065 eval $inhdr
15066
15067 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15068 set sys/filio.h i_sysfilio
15069 eval $inhdr
15070 echo " "
15071 if $test `./findhdr sys/ioctl.h`; then
15072         val="$define"
15073         echo '<sys/ioctl.h> found.' >&4
15074 else
15075         val="$undef"
15076         if $test $i_sysfilio = "$define"; then
15077             echo '<sys/ioctl.h> NOT found.' >&4
15078         else
15079                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15080                 $test $i_termio = "$define" && xxx="termio.h"
15081                 $test $i_termios = "$define" && xxx="termios.h"
15082 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15083         fi
15084 fi
15085 set i_sysioctl
15086 eval $setvar
15087
15088
15089 : see if this is a syslog.h system
15090 set syslog.h i_syslog
15091 eval $inhdr
15092
15093
15094 : see if this is a sys/mode.h system
15095 set sys/mode.h i_sysmode
15096 eval $inhdr
15097
15098 : see if sys/resource.h has to be included
15099 set sys/resource.h i_sysresrc
15100 eval $inhdr
15101
15102 : see if sys/security.h is available
15103 set sys/security.h i_syssecrt
15104 eval $inhdr
15105
15106 : see if this is a sys/statvfs.h system
15107 set sys/statvfs.h i_sysstatvfs
15108 eval $inhdr
15109
15110 : see if this is a sys/uio.h system
15111 set sys/uio.h i_sysuio
15112 eval $inhdr
15113
15114 : see if this is a sys/un.h system
15115 set sys/un.h i_sysun
15116 eval $inhdr
15117
15118
15119 : see if this is a sys/utsname.h system
15120 set sys/utsname.h i_sysutsname
15121 eval $inhdr
15122
15123 : see if this is a syswait system
15124 set sys/wait.h i_syswait
15125 eval $inhdr
15126
15127 : see if this is a ustat.h system
15128 set ustat.h i_ustat
15129 eval $inhdr
15130
15131 : see if this is an utime system
15132 set utime.h i_utime
15133 eval $inhdr
15134
15135 : see if this is a values.h system
15136 set values.h i_values
15137 eval $inhdr
15138
15139 : see if this is a vfork system
15140 case "$d_vfork" in
15141 "$define")
15142         set vfork.h i_vfork
15143         eval $inhdr
15144         ;;
15145 *)
15146         i_vfork="$undef"
15147         ;;
15148 esac
15149
15150 : see if gdbm.h is available
15151 set gdbm.h t_gdbm
15152 eval $inhdr
15153 case "$t_gdbm" in
15154 $define)
15155         : see if gdbm_open exists
15156         set gdbm_open d_gdbm_open
15157         eval $inlibc
15158         case "$d_gdbm_open" in
15159         $undef)
15160                 t_gdbm="$undef"
15161                 echo "We won't be including <gdbm.h>"
15162                 ;;
15163         esac
15164         ;;
15165 esac
15166 val="$t_gdbm"
15167 set i_gdbm
15168 eval $setvar
15169
15170 echo " "
15171 echo "Looking for extensions..." >&4
15172 : If we are using the old config.sh, known_extensions may contain
15173 : old or inaccurate or duplicate values.
15174 known_extensions=''
15175 nonxs_extensions=''
15176 : We do not use find because it might not be available.
15177 : We do not just use MANIFEST because the user may have dropped
15178 : some additional extensions into the source tree and expect them
15179 : to be built.
15180
15181 : Function to recursively find available extensions, ignoring DynaLoader
15182 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15183 find_extensions='
15184     for xxx in *; do
15185        case "$xxx" in
15186            DynaLoader|dynaload) ;;
15187            *)
15188            if $test -f $xxx/$xxx.xs; then
15189                known_extensions="$known_extensions $1$xxx";
15190            elif $test -f $xxx/Makefile.PL; then
15191                nonxs_extensions="$nonxs_extensions $1$xxx";
15192            else
15193                if $test -d $xxx -a $# -lt 10; then
15194                    set $1$xxx/ $*;
15195                    cd $xxx;
15196                    eval $find_extensions;
15197                    cd ..;
15198                    shift;
15199                fi;
15200            fi
15201            ;;
15202        esac;
15203     done'
15204 tdir=`pwd`
15205 cd $rsrc/ext
15206 set X
15207 shift
15208 eval $find_extensions
15209 set X $nonxs_extensions
15210 shift
15211 nonxs_extensions="$*"
15212 set X $known_extensions
15213 shift
15214 known_extensions="$*"
15215 cd $tdir
15216
15217 : Now see which are supported on this system.
15218 avail_ext=''
15219 for xxx in $known_extensions ; do
15220         case "$xxx" in
15221         DB_File|db_file)
15222                 case "$i_db" in
15223                 $define) avail_ext="$avail_ext $xxx" ;;
15224                 esac
15225                 ;;
15226         GDBM_File|gdbm_fil)
15227                 case "$i_gdbm" in 
15228                 $define) avail_ext="$avail_ext $xxx" ;;
15229                 esac
15230                 ;;
15231         NDBM_File|ndbm_fil)
15232                 case "$i_ndbm" in
15233                 $define)
15234                     case "$osname-$use64bitint" in
15235                     hpux-define)
15236                         case "$libs" in
15237                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15238                         esac
15239                         ;;
15240                     *) avail_ext="$avail_ext $xxx" ;;
15241                     esac
15242                     ;;
15243                 esac
15244                 ;;
15245         ODBM_File|odbm_fil) 
15246                 case "${i_dbm}${i_rpcsvcdbm}" in
15247                 *"${define}"*)
15248                     case "$osname-$use64bitint" in
15249                     hpux-define)
15250                         case "$libs" in
15251                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15252                         esac
15253                         ;;
15254                     *) avail_ext="$avail_ext $xxx" ;;
15255                     esac
15256                     ;;
15257                 esac
15258                 ;;
15259         POSIX|posix)
15260                 case "$useposix" in
15261                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15262                 esac
15263                 ;;
15264         Opcode|opcode)
15265                 case "$useopcode" in
15266                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15267                 esac
15268                 ;;
15269         Socket|socket)
15270                 case "$d_socket" in 
15271                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15272                 esac
15273                 ;;
15274         Sys/Syslog|sys/syslog)
15275                 : XXX syslog requires socket
15276                 case "$d_socket" in 
15277                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15278                 esac
15279                 ;;
15280         Thread|thread)
15281                 case "$usethreads" in 
15282                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15283                 esac
15284                 ;;
15285         IPC/SysV|ipc/sysv)
15286                 : XXX Do we need a useipcsysv variable here
15287                 case "${d_msg}${d_sem}${d_shm}" in 
15288                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15289                 esac
15290                 ;;
15291         *)      avail_ext="$avail_ext $xxx"
15292                 ;;
15293         esac
15294 done
15295
15296 set X $avail_ext
15297 shift
15298 avail_ext="$*"
15299
15300 : Now see which nonxs extensions are supported on this system.
15301 : For now assume all are.
15302 nonxs_ext=''
15303 for xxx in $nonxs_extensions ; do
15304         case "$xxx" in
15305         *)      nonxs_ext="$nonxs_ext $xxx"
15306                 ;;
15307         esac
15308 done
15309
15310 set X $nonxs_ext
15311 shift
15312 nonxs_ext="$*"
15313
15314 case $usedl in
15315 $define)
15316         $cat <<EOM
15317 A number of extensions are supplied with $package.  You may choose to
15318 compile these extensions for dynamic loading (the default), compile
15319 them into the $package executable (static loading), or not include
15320 them at all.  Answer "none" to include no extensions.
15321 Note that DynaLoader is always built and need not be mentioned here.
15322
15323 EOM
15324         case "$dynamic_ext" in
15325         '') dflt="$avail_ext" ;;
15326         *)      dflt="$dynamic_ext"
15327                 # Perhaps we are reusing an old out-of-date config.sh.
15328                 case "$hint" in
15329                 previous)
15330                         if test X"$dynamic_ext" != X"$avail_ext"; then
15331                                 $cat <<EOM
15332 NOTICE:  Your previous config.sh list may be incorrect. 
15333 The extensions now available to you are 
15334         ${avail_ext}
15335 but the default list from your previous config.sh is
15336         ${dynamic_ext} 
15337
15338 EOM
15339                         fi
15340                         ;;
15341                 esac
15342                 ;;
15343         esac
15344         case "$dflt" in
15345         '')     dflt=none;;
15346         esac
15347         rp="What extensions do you wish to load dynamically?"
15348         . ./myread
15349         case "$ans" in
15350         none) dynamic_ext=' ' ;;
15351         *) dynamic_ext="$ans" ;;
15352         esac
15353
15354         case "$static_ext" in
15355         '')
15356                 : Exclude those already listed in dynamic linking
15357                 dflt=''
15358                 for xxx in $avail_ext; do
15359                         case " $dynamic_ext " in
15360                         *" $xxx "*) ;;
15361                         *) dflt="$dflt $xxx" ;;
15362                         esac
15363                 done
15364                 set X $dflt
15365                 shift
15366                 dflt="$*"
15367                 ;;
15368         *)  dflt="$static_ext" 
15369                 ;;
15370         esac
15371
15372         case "$dflt" in
15373         '')     dflt=none;;
15374         esac
15375         rp="What extensions do you wish to load statically?"
15376         . ./myread
15377         case "$ans" in
15378         none) static_ext=' ' ;;
15379         *) static_ext="$ans" ;;
15380         esac
15381         ;;
15382 *)
15383         $cat <<EOM
15384 A number of extensions are supplied with $package.  Answer "none" 
15385 to include no extensions. 
15386 Note that DynaLoader is always built and need not be mentioned here.
15387
15388 EOM
15389         case "$static_ext" in
15390         '') dflt="$avail_ext" ;;
15391         *)      dflt="$static_ext"
15392                 # Perhaps we are reusing an old out-of-date config.sh.
15393                 case "$hint" in
15394                 previous)
15395                         if test X"$static_ext" != X"$avail_ext"; then
15396                                 $cat <<EOM
15397 NOTICE:  Your previous config.sh list may be incorrect. 
15398 The extensions now available to you are 
15399         ${avail_ext}
15400 but the default list from your previous config.sh is
15401         ${static_ext} 
15402
15403 EOM
15404                         fi
15405                         ;;
15406                 esac
15407                 ;;
15408         esac
15409         : Exclude those that are not xs extensions
15410         case "$dflt" in
15411         '')     dflt=none;;
15412         esac
15413         rp="What extensions do you wish to include?"
15414         . ./myread
15415         case "$ans" in
15416         none) static_ext=' ' ;;
15417         *) static_ext="$ans" ;;
15418         esac
15419         ;;
15420 esac
15421
15422 set X $dynamic_ext $static_ext $nonxs_ext
15423 shift
15424 extensions="$*"
15425
15426 : Remove libraries needed only for extensions
15427 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15428 : The exception is SunOS 4.x, which needs them.
15429 case "${osname}X${osvers}" in
15430 sunos*X4*)
15431     perllibs="$libs"
15432     ;;
15433 *) case "$usedl" in
15434     $define|true|[yY]*)
15435             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15436             shift
15437             perllibs="$*"
15438             ;;
15439     *)  perllibs="$libs"
15440             ;;
15441     esac
15442     ;;
15443 esac
15444
15445 : Remove build directory name from cppstdin so it can be used from
15446 : either the present location or the final installed location.
15447 echo " "
15448 : Get out of the UU directory to get correct path name.
15449 cd ..
15450 case "$cppstdin" in
15451 `pwd`/cppstdin)
15452         echo "Stripping down cppstdin path name"
15453         cppstdin=cppstdin
15454         ;;
15455 esac
15456 cd UU
15457
15458 : end of configuration questions
15459 echo " "
15460 echo "End of configuration questions."
15461 echo " "
15462
15463 : back to where it started
15464 if test -d ../UU; then
15465         cd ..
15466 fi
15467
15468 : configuration may be patched via a 'config.over' file
15469 if $test -f config.over; then
15470         echo " "
15471         dflt=y
15472         rp='I see a config.over file.  Do you wish to load it?'
15473         . UU/myread
15474         case "$ans" in
15475         n*) echo "OK, I'll ignore it.";;
15476         *)      . ./config.over
15477                 echo "Configuration override changes have been loaded."
15478                 ;;
15479         esac
15480 fi
15481
15482 : in case they want portability, strip down executable paths
15483 case "$d_portable" in
15484 "$define")
15485         echo " "
15486         echo "Stripping down executable paths..." >&4
15487         for file in $loclist $trylist; do
15488                 eval temp=\$$file
15489                 eval $file=`basename $temp`
15490         done
15491         ;;
15492 esac
15493
15494 : create config.sh file
15495 echo " "
15496 echo "Creating config.sh..." >&4
15497 $spitshell <<EOT >config.sh
15498 $startsh
15499 #
15500 # This file was produced by running the Configure script. It holds all the
15501 # definitions figured out by Configure. Should you modify one of these values,
15502 # do not forget to propagate your changes by running "Configure -der". You may
15503 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15504 #
15505
15506 # Package name      : $package
15507 # Source directory  : $src
15508 # Configuration time: $cf_time
15509 # Configured by     : $cf_by
15510 # Target system     : $myuname
15511
15512 Author='$Author'
15513 Date='$Date'
15514 Header='$Header'
15515 Id='$Id'
15516 Locker='$Locker'
15517 Log='$Log'
15518 Mcc='$Mcc'
15519 RCSfile='$RCSfile'
15520 Revision='$Revision'
15521 Source='$Source'
15522 State='$State'
15523 _a='$_a'
15524 _exe='$_exe'
15525 _o='$_o'
15526 afs='$afs'
15527 alignbytes='$alignbytes'
15528 ansi2knr='$ansi2knr'
15529 aphostname='$aphostname'
15530 api_revision='$api_revision'
15531 api_subversion='$api_subversion'
15532 api_version='$api_version'
15533 api_versionstring='$api_versionstring'
15534 ar='$ar'
15535 archlib='$archlib'
15536 archlibexp='$archlibexp'
15537 archname64='$archname64'
15538 archname='$archname'
15539 archobjs='$archobjs'
15540 awk='$awk'
15541 baserev='$baserev'
15542 bash='$bash'
15543 bin='$bin'
15544 bincompat5005='$bincompat5005'
15545 binexp='$binexp'
15546 bison='$bison'
15547 byacc='$byacc'
15548 byteorder='$byteorder'
15549 c='$c'
15550 castflags='$castflags'
15551 cat='$cat'
15552 cc='$cc'
15553 cccdlflags='$cccdlflags'
15554 ccdlflags='$ccdlflags'
15555 ccflags='$ccflags'
15556 ccflags_uselargefiles='$ccflags_uselargefiles'
15557 ccname='$ccname'
15558 ccsymbols='$ccsymbols'
15559 ccversion='$ccversion'
15560 cf_by='$cf_by'
15561 cf_email='$cf_email'
15562 cf_time='$cf_time'
15563 charsize='$charsize'
15564 chgrp='$chgrp'
15565 chmod='$chmod'
15566 chown='$chown'
15567 clocktype='$clocktype'
15568 comm='$comm'
15569 compress='$compress'
15570 contains='$contains'
15571 cp='$cp'
15572 cpio='$cpio'
15573 cpp='$cpp'
15574 cpp_stuff='$cpp_stuff'
15575 cppccsymbols='$cppccsymbols'
15576 cppflags='$cppflags'
15577 cpplast='$cpplast'
15578 cppminus='$cppminus'
15579 cpprun='$cpprun'
15580 cppstdin='$cppstdin'
15581 cppsymbols='$cppsymbols'
15582 crosscompile='$crosscompile'
15583 cryptlib='$cryptlib'
15584 csh='$csh'
15585 d_Gconvert='$d_Gconvert'
15586 d_PRIEUldbl='$d_PRIEUldbl'
15587 d_PRIFUldbl='$d_PRIFUldbl'
15588 d_PRIGUldbl='$d_PRIGUldbl'
15589 d_PRIXU64='$d_PRIXU64'
15590 d_PRId64='$d_PRId64'
15591 d_PRIeldbl='$d_PRIeldbl'
15592 d_PRIfldbl='$d_PRIfldbl'
15593 d_PRIgldbl='$d_PRIgldbl'
15594 d_PRIi64='$d_PRIi64'
15595 d_PRIo64='$d_PRIo64'
15596 d_PRIu64='$d_PRIu64'
15597 d_PRIx64='$d_PRIx64'
15598 d_SCNfldbl='$d_SCNfldbl'
15599 d__fwalk='$d__fwalk'
15600 d_access='$d_access'
15601 d_accessx='$d_accessx'
15602 d_alarm='$d_alarm'
15603 d_archlib='$d_archlib'
15604 d_atolf='$d_atolf'
15605 d_atoll='$d_atoll'
15606 d_attribut='$d_attribut'
15607 d_bcmp='$d_bcmp'
15608 d_bcopy='$d_bcopy'
15609 d_bincompat5005='$d_bincompat5005'
15610 d_bsd='$d_bsd'
15611 d_bsdgetpgrp='$d_bsdgetpgrp'
15612 d_bsdsetpgrp='$d_bsdsetpgrp'
15613 d_bzero='$d_bzero'
15614 d_casti32='$d_casti32'
15615 d_castneg='$d_castneg'
15616 d_charvspr='$d_charvspr'
15617 d_chown='$d_chown'
15618 d_chroot='$d_chroot'
15619 d_chsize='$d_chsize'
15620 d_closedir='$d_closedir'
15621 d_const='$d_const'
15622 d_crypt='$d_crypt'
15623 d_csh='$d_csh'
15624 d_cuserid='$d_cuserid'
15625 d_dbl_dig='$d_dbl_dig'
15626 d_difftime='$d_difftime'
15627 d_dirnamlen='$d_dirnamlen'
15628 d_dlerror='$d_dlerror'
15629 d_dlopen='$d_dlopen'
15630 d_dlsymun='$d_dlsymun'
15631 d_dosuid='$d_dosuid'
15632 d_drand48proto='$d_drand48proto'
15633 d_dup2='$d_dup2'
15634 d_eaccess='$d_eaccess'
15635 d_endgrent='$d_endgrent'
15636 d_endhent='$d_endhent'
15637 d_endnent='$d_endnent'
15638 d_endpent='$d_endpent'
15639 d_endpwent='$d_endpwent'
15640 d_endsent='$d_endsent'
15641 d_eofnblk='$d_eofnblk'
15642 d_eunice='$d_eunice'
15643 d_fchmod='$d_fchmod'
15644 d_fchown='$d_fchown'
15645 d_fcntl='$d_fcntl'
15646 d_fcntl_can_lock='$d_fcntl_can_lock'
15647 d_fd_macros='$d_fd_macros'
15648 d_fd_set='$d_fd_set'
15649 d_fds_bits='$d_fds_bits'
15650 d_fgetpos='$d_fgetpos'
15651 d_flexfnam='$d_flexfnam'
15652 d_flock='$d_flock'
15653 d_fork='$d_fork'
15654 d_fpathconf='$d_fpathconf'
15655 d_fpos64_t='$d_fpos64_t'
15656 d_frexpl='$d_frexpl'
15657 d_fs_data_s='$d_fs_data_s'
15658 d_fseeko='$d_fseeko'
15659 d_fsetpos='$d_fsetpos'
15660 d_fstatfs='$d_fstatfs'
15661 d_fstatvfs='$d_fstatvfs'
15662 d_fsync='$d_fsync'
15663 d_ftello='$d_ftello'
15664 d_ftime='$d_ftime'
15665 d_getcwd='$d_getcwd'
15666 d_getespwnam='$d_getespwnam'
15667 d_getfsstat='$d_getfsstat'
15668 d_getgrent='$d_getgrent'
15669 d_getgrps='$d_getgrps'
15670 d_gethbyaddr='$d_gethbyaddr'
15671 d_gethbyname='$d_gethbyname'
15672 d_gethent='$d_gethent'
15673 d_gethname='$d_gethname'
15674 d_gethostprotos='$d_gethostprotos'
15675 d_getlogin='$d_getlogin'
15676 d_getmnt='$d_getmnt'
15677 d_getmntent='$d_getmntent'
15678 d_getnbyaddr='$d_getnbyaddr'
15679 d_getnbyname='$d_getnbyname'
15680 d_getnent='$d_getnent'
15681 d_getnetprotos='$d_getnetprotos'
15682 d_getpagsz='$d_getpagsz'
15683 d_getpbyname='$d_getpbyname'
15684 d_getpbynumber='$d_getpbynumber'
15685 d_getpent='$d_getpent'
15686 d_getpgid='$d_getpgid'
15687 d_getpgrp2='$d_getpgrp2'
15688 d_getpgrp='$d_getpgrp'
15689 d_getppid='$d_getppid'
15690 d_getprior='$d_getprior'
15691 d_getprotoprotos='$d_getprotoprotos'
15692 d_getprpwnam='$d_getprpwnam'
15693 d_getpwent='$d_getpwent'
15694 d_getsbyname='$d_getsbyname'
15695 d_getsbyport='$d_getsbyport'
15696 d_getsent='$d_getsent'
15697 d_getservprotos='$d_getservprotos'
15698 d_getspnam='$d_getspnam'
15699 d_gettimeod='$d_gettimeod'
15700 d_gnulibc='$d_gnulibc'
15701 d_grpasswd='$d_grpasswd'
15702 d_hasmntopt='$d_hasmntopt'
15703 d_htonl='$d_htonl'
15704 d_iconv='$d_iconv'
15705 d_index='$d_index'
15706 d_inetaton='$d_inetaton'
15707 d_int64_t='$d_int64_t'
15708 d_isascii='$d_isascii'
15709 d_isnan='$d_isnan'
15710 d_isnanl='$d_isnanl'
15711 d_killpg='$d_killpg'
15712 d_lchown='$d_lchown'
15713 d_ldbl_dig='$d_ldbl_dig'
15714 d_link='$d_link'
15715 d_locconv='$d_locconv'
15716 d_lockf='$d_lockf'
15717 d_longdbl='$d_longdbl'
15718 d_longlong='$d_longlong'
15719 d_lseekproto='$d_lseekproto'
15720 d_lstat='$d_lstat'
15721 d_madvise='$d_madvise'
15722 d_mblen='$d_mblen'
15723 d_mbstowcs='$d_mbstowcs'
15724 d_mbtowc='$d_mbtowc'
15725 d_memchr='$d_memchr'
15726 d_memcmp='$d_memcmp'
15727 d_memcpy='$d_memcpy'
15728 d_memmove='$d_memmove'
15729 d_memset='$d_memset'
15730 d_mkdir='$d_mkdir'
15731 d_mkdtemp='$d_mkdtemp'
15732 d_mkfifo='$d_mkfifo'
15733 d_mkstemp='$d_mkstemp'
15734 d_mkstemps='$d_mkstemps'
15735 d_mktime='$d_mktime'
15736 d_mmap='$d_mmap'
15737 d_modfl='$d_modfl'
15738 d_mprotect='$d_mprotect'
15739 d_msg='$d_msg'
15740 d_msg_ctrunc='$d_msg_ctrunc'
15741 d_msg_dontroute='$d_msg_dontroute'
15742 d_msg_oob='$d_msg_oob'
15743 d_msg_peek='$d_msg_peek'
15744 d_msg_proxy='$d_msg_proxy'
15745 d_msgctl='$d_msgctl'
15746 d_msgget='$d_msgget'
15747 d_msgrcv='$d_msgrcv'
15748 d_msgsnd='$d_msgsnd'
15749 d_msync='$d_msync'
15750 d_munmap='$d_munmap'
15751 d_mymalloc='$d_mymalloc'
15752 d_nice='$d_nice'
15753 d_nv_preserves_uv='$d_nv_preserves_uv'
15754 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15755 d_off64_t='$d_off64_t'
15756 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15757 d_oldpthreads='$d_oldpthreads'
15758 d_oldsock='$d_oldsock'
15759 d_open3='$d_open3'
15760 d_pathconf='$d_pathconf'
15761 d_pause='$d_pause'
15762 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15763 d_phostname='$d_phostname'
15764 d_pipe='$d_pipe'
15765 d_poll='$d_poll'
15766 d_portable='$d_portable'
15767 d_pthread_yield='$d_pthread_yield'
15768 d_pwage='$d_pwage'
15769 d_pwchange='$d_pwchange'
15770 d_pwclass='$d_pwclass'
15771 d_pwcomment='$d_pwcomment'
15772 d_pwexpire='$d_pwexpire'
15773 d_pwgecos='$d_pwgecos'
15774 d_pwpasswd='$d_pwpasswd'
15775 d_pwquota='$d_pwquota'
15776 d_qgcvt='$d_qgcvt'
15777 d_quad='$d_quad'
15778 d_readdir='$d_readdir'
15779 d_readlink='$d_readlink'
15780 d_rename='$d_rename'
15781 d_rewinddir='$d_rewinddir'
15782 d_rmdir='$d_rmdir'
15783 d_safebcpy='$d_safebcpy'
15784 d_safemcpy='$d_safemcpy'
15785 d_sanemcmp='$d_sanemcmp'
15786 d_sbrkproto='$d_sbrkproto'
15787 d_sched_yield='$d_sched_yield'
15788 d_scm_rights='$d_scm_rights'
15789 d_seekdir='$d_seekdir'
15790 d_select='$d_select'
15791 d_sem='$d_sem'
15792 d_semctl='$d_semctl'
15793 d_semctl_semid_ds='$d_semctl_semid_ds'
15794 d_semctl_semun='$d_semctl_semun'
15795 d_semget='$d_semget'
15796 d_semop='$d_semop'
15797 d_setegid='$d_setegid'
15798 d_seteuid='$d_seteuid'
15799 d_setgrent='$d_setgrent'
15800 d_setgrps='$d_setgrps'
15801 d_sethent='$d_sethent'
15802 d_setlinebuf='$d_setlinebuf'
15803 d_setlocale='$d_setlocale'
15804 d_setnent='$d_setnent'
15805 d_setpent='$d_setpent'
15806 d_setpgid='$d_setpgid'
15807 d_setpgrp2='$d_setpgrp2'
15808 d_setpgrp='$d_setpgrp'
15809 d_setprior='$d_setprior'
15810 d_setproctitle='$d_setproctitle'
15811 d_setpwent='$d_setpwent'
15812 d_setregid='$d_setregid'
15813 d_setresgid='$d_setresgid'
15814 d_setresuid='$d_setresuid'
15815 d_setreuid='$d_setreuid'
15816 d_setrgid='$d_setrgid'
15817 d_setruid='$d_setruid'
15818 d_setsent='$d_setsent'
15819 d_setsid='$d_setsid'
15820 d_setvbuf='$d_setvbuf'
15821 d_sfio='$d_sfio'
15822 d_shm='$d_shm'
15823 d_shmat='$d_shmat'
15824 d_shmatprototype='$d_shmatprototype'
15825 d_shmctl='$d_shmctl'
15826 d_shmdt='$d_shmdt'
15827 d_shmget='$d_shmget'
15828 d_sigaction='$d_sigaction'
15829 d_sigsetjmp='$d_sigsetjmp'
15830 d_socket='$d_socket'
15831 d_socklen_t='$d_socklen_t'
15832 d_sockpair='$d_sockpair'
15833 d_socks5_init='$d_socks5_init'
15834 d_sqrtl='$d_sqrtl'
15835 d_statblks='$d_statblks'
15836 d_statfs_f_flags='$d_statfs_f_flags'
15837 d_statfs_s='$d_statfs_s'
15838 d_statvfs='$d_statvfs'
15839 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15840 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15841 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
15842 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
15843 d_stdio_stream_array='$d_stdio_stream_array'
15844 d_stdiobase='$d_stdiobase'
15845 d_stdstdio='$d_stdstdio'
15846 d_strchr='$d_strchr'
15847 d_strcoll='$d_strcoll'
15848 d_strctcpy='$d_strctcpy'
15849 d_strerrm='$d_strerrm'
15850 d_strerror='$d_strerror'
15851 d_strtod='$d_strtod'
15852 d_strtol='$d_strtol'
15853 d_strtold='$d_strtold'
15854 d_strtoll='$d_strtoll'
15855 d_strtoul='$d_strtoul'
15856 d_strtoull='$d_strtoull'
15857 d_strtouq='$d_strtouq'
15858 d_strxfrm='$d_strxfrm'
15859 d_suidsafe='$d_suidsafe'
15860 d_symlink='$d_symlink'
15861 d_syscall='$d_syscall'
15862 d_sysconf='$d_sysconf'
15863 d_sysernlst='$d_sysernlst'
15864 d_syserrlst='$d_syserrlst'
15865 d_system='$d_system'
15866 d_tcgetpgrp='$d_tcgetpgrp'
15867 d_tcsetpgrp='$d_tcsetpgrp'
15868 d_telldir='$d_telldir'
15869 d_telldirproto='$d_telldirproto'
15870 d_time='$d_time'
15871 d_times='$d_times'
15872 d_truncate='$d_truncate'
15873 d_tzname='$d_tzname'
15874 d_umask='$d_umask'
15875 d_uname='$d_uname'
15876 d_union_semun='$d_union_semun'
15877 d_ustat='$d_ustat'
15878 d_vendorarch='$d_vendorarch'
15879 d_vendorbin='$d_vendorbin'
15880 d_vendorlib='$d_vendorlib'
15881 d_vfork='$d_vfork'
15882 d_void_closedir='$d_void_closedir'
15883 d_voidsig='$d_voidsig'
15884 d_voidtty='$d_voidtty'
15885 d_volatile='$d_volatile'
15886 d_vprintf='$d_vprintf'
15887 d_wait4='$d_wait4'
15888 d_waitpid='$d_waitpid'
15889 d_wcstombs='$d_wcstombs'
15890 d_wctomb='$d_wctomb'
15891 d_xenix='$d_xenix'
15892 date='$date'
15893 db_hashtype='$db_hashtype'
15894 db_prefixtype='$db_prefixtype'
15895 defvoidused='$defvoidused'
15896 direntrytype='$direntrytype'
15897 dlext='$dlext'
15898 dlsrc='$dlsrc'
15899 doublesize='$doublesize'
15900 drand01='$drand01'
15901 dynamic_ext='$dynamic_ext'
15902 eagain='$eagain'
15903 ebcdic='$ebcdic'
15904 echo='$echo'
15905 egrep='$egrep'
15906 emacs='$emacs'
15907 eunicefix='$eunicefix'
15908 exe_ext='$exe_ext'
15909 expr='$expr'
15910 extensions='$extensions'
15911 fflushNULL='$fflushNULL'
15912 fflushall='$fflushall'
15913 find='$find'
15914 firstmakefile='$firstmakefile'
15915 flex='$flex'
15916 fpossize='$fpossize'
15917 fpostype='$fpostype'
15918 freetype='$freetype'
15919 full_ar='$full_ar'
15920 full_csh='$full_csh'
15921 full_sed='$full_sed'
15922 gccosandvers='$gccosandvers'
15923 gccversion='$gccversion'
15924 gidformat='$gidformat'
15925 gidsign='$gidsign'
15926 gidsize='$gidsize'
15927 gidtype='$gidtype'
15928 glibpth='$glibpth'
15929 grep='$grep'
15930 groupcat='$groupcat'
15931 groupstype='$groupstype'
15932 gzip='$gzip'
15933 h_fcntl='$h_fcntl'
15934 h_sysfile='$h_sysfile'
15935 hint='$hint'
15936 hostcat='$hostcat'
15937 i16size='$i16size'
15938 i16type='$i16type'
15939 i32size='$i32size'
15940 i32type='$i32type'
15941 i64size='$i64size'
15942 i64type='$i64type'
15943 i8size='$i8size'
15944 i8type='$i8type'
15945 i_arpainet='$i_arpainet'
15946 i_bsdioctl='$i_bsdioctl'
15947 i_db='$i_db'
15948 i_dbm='$i_dbm'
15949 i_dirent='$i_dirent'
15950 i_dld='$i_dld'
15951 i_dlfcn='$i_dlfcn'
15952 i_fcntl='$i_fcntl'
15953 i_float='$i_float'
15954 i_gdbm='$i_gdbm'
15955 i_grp='$i_grp'
15956 i_iconv='$i_iconv'
15957 i_ieeefp='$i_ieeefp'
15958 i_inttypes='$i_inttypes'
15959 i_libutil='$i_libutil'
15960 i_limits='$i_limits'
15961 i_locale='$i_locale'
15962 i_machcthr='$i_machcthr'
15963 i_malloc='$i_malloc'
15964 i_math='$i_math'
15965 i_memory='$i_memory'
15966 i_mntent='$i_mntent'
15967 i_ndbm='$i_ndbm'
15968 i_netdb='$i_netdb'
15969 i_neterrno='$i_neterrno'
15970 i_netinettcp='$i_netinettcp'
15971 i_niin='$i_niin'
15972 i_poll='$i_poll'
15973 i_prot='$i_prot'
15974 i_pthread='$i_pthread'
15975 i_pwd='$i_pwd'
15976 i_rpcsvcdbm='$i_rpcsvcdbm'
15977 i_sfio='$i_sfio'
15978 i_sgtty='$i_sgtty'
15979 i_shadow='$i_shadow'
15980 i_socks='$i_socks'
15981 i_stdarg='$i_stdarg'
15982 i_stddef='$i_stddef'
15983 i_stdlib='$i_stdlib'
15984 i_string='$i_string'
15985 i_sunmath='$i_sunmath'
15986 i_sysaccess='$i_sysaccess'
15987 i_sysdir='$i_sysdir'
15988 i_sysfile='$i_sysfile'
15989 i_sysfilio='$i_sysfilio'
15990 i_sysin='$i_sysin'
15991 i_sysioctl='$i_sysioctl'
15992 i_syslog='$i_syslog'
15993 i_sysmman='$i_sysmman'
15994 i_sysmode='$i_sysmode'
15995 i_sysmount='$i_sysmount'
15996 i_sysndir='$i_sysndir'
15997 i_sysparam='$i_sysparam'
15998 i_sysresrc='$i_sysresrc'
15999 i_syssecrt='$i_syssecrt'
16000 i_sysselct='$i_sysselct'
16001 i_syssockio='$i_syssockio'
16002 i_sysstat='$i_sysstat'
16003 i_sysstatfs='$i_sysstatfs'
16004 i_sysstatvfs='$i_sysstatvfs'
16005 i_systime='$i_systime'
16006 i_systimek='$i_systimek'
16007 i_systimes='$i_systimes'
16008 i_systypes='$i_systypes'
16009 i_sysuio='$i_sysuio'
16010 i_sysun='$i_sysun'
16011 i_sysutsname='$i_sysutsname'
16012 i_sysvfs='$i_sysvfs'
16013 i_syswait='$i_syswait'
16014 i_termio='$i_termio'
16015 i_termios='$i_termios'
16016 i_time='$i_time'
16017 i_unistd='$i_unistd'
16018 i_ustat='$i_ustat'
16019 i_utime='$i_utime'
16020 i_values='$i_values'
16021 i_varargs='$i_varargs'
16022 i_varhdr='$i_varhdr'
16023 i_vfork='$i_vfork'
16024 ignore_versioned_solibs='$ignore_versioned_solibs'
16025 inc_version_list='$inc_version_list'
16026 inc_version_list_init='$inc_version_list_init'
16027 incpath='$incpath'
16028 inews='$inews'
16029 installarchlib='$installarchlib'
16030 installbin='$installbin'
16031 installman1dir='$installman1dir'
16032 installman3dir='$installman3dir'
16033 installprefix='$installprefix'
16034 installprefixexp='$installprefixexp'
16035 installprivlib='$installprivlib'
16036 installscript='$installscript'
16037 installsitearch='$installsitearch'
16038 installsitebin='$installsitebin'
16039 installsitelib='$installsitelib'
16040 installstyle='$installstyle'
16041 installusrbinperl='$installusrbinperl'
16042 installvendorarch='$installvendorarch'
16043 installvendorbin='$installvendorbin'
16044 installvendorlib='$installvendorlib'
16045 intsize='$intsize'
16046 ivdformat='$ivdformat'
16047 ivsize='$ivsize'
16048 ivtype='$ivtype'
16049 known_extensions='$known_extensions'
16050 ksh='$ksh'
16051 ld='$ld'
16052 lddlflags='$lddlflags'
16053 ldflags='$ldflags'
16054 ldflags_uselargefiles='$ldflags_uselargefiles'
16055 ldlibpthname='$ldlibpthname'
16056 less='$less'
16057 lib_ext='$lib_ext'
16058 libc='$libc'
16059 libperl='$libperl'
16060 libpth='$libpth'
16061 libs='$libs'
16062 libsdirs='$libsdirs'
16063 libsfiles='$libsfiles'
16064 libsfound='$libsfound'
16065 libspath='$libspath'
16066 libswanted='$libswanted'
16067 libswanted_uselargefiles='$libswanted_uselargefiles'
16068 line='$line'
16069 lint='$lint'
16070 lkflags='$lkflags'
16071 ln='$ln'
16072 lns='$lns'
16073 locincpth='$locincpth'
16074 loclibpth='$loclibpth'
16075 longdblsize='$longdblsize'
16076 longlongsize='$longlongsize'
16077 longsize='$longsize'
16078 lp='$lp'
16079 lpr='$lpr'
16080 ls='$ls'
16081 lseeksize='$lseeksize'
16082 lseektype='$lseektype'
16083 mail='$mail'
16084 mailx='$mailx'
16085 make='$make'
16086 make_set_make='$make_set_make'
16087 mallocobj='$mallocobj'
16088 mallocsrc='$mallocsrc'
16089 malloctype='$malloctype'
16090 man1dir='$man1dir'
16091 man1direxp='$man1direxp'
16092 man1ext='$man1ext'
16093 man3dir='$man3dir'
16094 man3direxp='$man3direxp'
16095 man3ext='$man3ext'
16096 mips_type='$mips_type'
16097 mkdir='$mkdir'
16098 mmaptype='$mmaptype'
16099 modetype='$modetype'
16100 more='$more'
16101 multiarch='$multiarch'
16102 mv='$mv'
16103 myarchname='$myarchname'
16104 mydomain='$mydomain'
16105 myhostname='$myhostname'
16106 myuname='$myuname'
16107 n='$n'
16108 need_va_copy='$need_va_copy'
16109 netdb_hlen_type='$netdb_hlen_type'
16110 netdb_host_type='$netdb_host_type'
16111 netdb_name_type='$netdb_name_type'
16112 netdb_net_type='$netdb_net_type'
16113 nm='$nm'
16114 nm_opt='$nm_opt'
16115 nm_so_opt='$nm_so_opt'
16116 nonxs_ext='$nonxs_ext'
16117 nroff='$nroff'
16118 nvEUformat='$nvEUformat'
16119 nvFUformat='$nvFUformat'
16120 nvGUformat='$nvGUformat'
16121 nveformat='$nveformat'
16122 nvfformat='$nvfformat'
16123 nvgformat='$nvgformat'
16124 nvsize='$nvsize'
16125 nvtype='$nvtype'
16126 o_nonblock='$o_nonblock'
16127 obj_ext='$obj_ext'
16128 old_pthread_create_joinable='$old_pthread_create_joinable'
16129 optimize='$optimize'
16130 orderlib='$orderlib'
16131 osname='$osname'
16132 osvers='$osvers'
16133 otherlibdirs='$otherlibdirs'
16134 package='$package'
16135 pager='$pager'
16136 passcat='$passcat'
16137 patchlevel='$patchlevel'
16138 path_sep='$path_sep'
16139 perl5='$perl5'
16140 perl='$perl'
16141 perladmin='$perladmin'
16142 perllibs='$perllibs'
16143 perlpath='$perlpath'
16144 pg='$pg'
16145 phostname='$phostname'
16146 pidtype='$pidtype'
16147 plibpth='$plibpth'
16148 pm_apiversion='$pm_apiversion'
16149 pmake='$pmake'
16150 pr='$pr'
16151 prefix='$prefix'
16152 prefixexp='$prefixexp'
16153 privlib='$privlib'
16154 privlibexp='$privlibexp'
16155 prototype='$prototype'
16156 ptrsize='$ptrsize'
16157 quadkind='$quadkind'
16158 quadtype='$quadtype'
16159 randbits='$randbits'
16160 randfunc='$randfunc'
16161 randseedtype='$randseedtype'
16162 ranlib='$ranlib'
16163 rd_nodata='$rd_nodata'
16164 revision='$revision'
16165 rm='$rm'
16166 rmail='$rmail'
16167 runnm='$runnm'
16168 sPRIEUldbl='$sPRIEUldbl'
16169 sPRIFUldbl='$sPRIFUldbl'
16170 sPRIGUldbl='$sPRIGUldbl'
16171 sPRIXU64='$sPRIXU64'
16172 sPRId64='$sPRId64'
16173 sPRIeldbl='$sPRIeldbl'
16174 sPRIfldbl='$sPRIfldbl'
16175 sPRIgldbl='$sPRIgldbl'
16176 sPRIi64='$sPRIi64'
16177 sPRIo64='$sPRIo64'
16178 sPRIu64='$sPRIu64'
16179 sPRIx64='$sPRIx64'
16180 sSCNfldbl='$sSCNfldbl'
16181 sched_yield='$sched_yield'
16182 scriptdir='$scriptdir'
16183 scriptdirexp='$scriptdirexp'
16184 sed='$sed'
16185 seedfunc='$seedfunc'
16186 selectminbits='$selectminbits'
16187 selecttype='$selecttype'
16188 sendmail='$sendmail'
16189 sh='$sh'
16190 shar='$shar'
16191 sharpbang='$sharpbang'
16192 shmattype='$shmattype'
16193 shortsize='$shortsize'
16194 shrpenv='$shrpenv'
16195 shsharp='$shsharp'
16196 sig_count='$sig_count'
16197 sig_name='$sig_name'
16198 sig_name_init='$sig_name_init'
16199 sig_num='$sig_num'
16200 sig_num_init='$sig_num_init'
16201 signal_t='$signal_t'
16202 sitearch='$sitearch'
16203 sitearchexp='$sitearchexp'
16204 sitebin='$sitebin'
16205 sitebinexp='$sitebinexp'
16206 sitelib='$sitelib'
16207 sitelib_stem='$sitelib_stem'
16208 sitelibexp='$sitelibexp'
16209 siteprefix='$siteprefix'
16210 siteprefixexp='$siteprefixexp'
16211 sizesize='$sizesize'
16212 sizetype='$sizetype'
16213 sleep='$sleep'
16214 smail='$smail'
16215 so='$so'
16216 sockethdr='$sockethdr'
16217 socketlib='$socketlib'
16218 socksizetype='$socksizetype'
16219 sort='$sort'
16220 spackage='$spackage'
16221 spitshell='$spitshell'
16222 src='$src'
16223 ssizetype='$ssizetype'
16224 startperl='$startperl'
16225 startsh='$startsh'
16226 static_ext='$static_ext'
16227 stdchar='$stdchar'
16228 stdio_base='$stdio_base'
16229 stdio_bufsiz='$stdio_bufsiz'
16230 stdio_cnt='$stdio_cnt'
16231 stdio_filbuf='$stdio_filbuf'
16232 stdio_ptr='$stdio_ptr'
16233 stdio_stream_array='$stdio_stream_array'
16234 strings='$strings'
16235 submit='$submit'
16236 subversion='$subversion'
16237 sysman='$sysman'
16238 tail='$tail'
16239 tar='$tar'
16240 tbl='$tbl'
16241 tee='$tee'
16242 test='$test'
16243 timeincl='$timeincl'
16244 timetype='$timetype'
16245 touch='$touch'
16246 tr='$tr'
16247 trnl='$trnl'
16248 troff='$troff'
16249 u16size='$u16size'
16250 u16type='$u16type'
16251 u32size='$u32size'
16252 u32type='$u32type'
16253 u64size='$u64size'
16254 u64type='$u64type'
16255 u8size='$u8size'
16256 u8type='$u8type'
16257 uidformat='$uidformat'
16258 uidsign='$uidsign'
16259 uidsize='$uidsize'
16260 uidtype='$uidtype'
16261 uname='$uname'
16262 uniq='$uniq'
16263 uquadtype='$uquadtype'
16264 use5005threads='$use5005threads'
16265 use64bitall='$use64bitall'
16266 use64bitint='$use64bitint'
16267 usedl='$usedl'
16268 useithreads='$useithreads'
16269 uselargefiles='$uselargefiles'
16270 uselongdouble='$uselongdouble'
16271 usemorebits='$usemorebits'
16272 usemultiplicity='$usemultiplicity'
16273 usemymalloc='$usemymalloc'
16274 usenm='$usenm'
16275 useopcode='$useopcode'
16276 useperlio='$useperlio'
16277 useposix='$useposix'
16278 usesfio='$usesfio'
16279 useshrplib='$useshrplib'
16280 usesocks='$usesocks'
16281 usethreads='$usethreads'
16282 usevendorprefix='$usevendorprefix'
16283 usevfork='$usevfork'
16284 usrinc='$usrinc'
16285 uuname='$uuname'
16286 uvXUformat='$uvXUformat'
16287 uvoformat='$uvoformat'
16288 uvsize='$uvsize'
16289 uvtype='$uvtype'
16290 uvuformat='$uvuformat'
16291 uvxformat='$uvxformat'
16292 vendorarch='$vendorarch'
16293 vendorarchexp='$vendorarchexp'
16294 vendorbin='$vendorbin'
16295 vendorbinexp='$vendorbinexp'
16296 vendorlib='$vendorlib'
16297 vendorlib_stem='$vendorlib_stem'
16298 vendorlibexp='$vendorlibexp'
16299 vendorprefix='$vendorprefix'
16300 vendorprefixexp='$vendorprefixexp'
16301 version='$version'
16302 versiononly='$versiononly'
16303 vi='$vi'
16304 voidflags='$voidflags'
16305 xlibpth='$xlibpth'
16306 xs_apiversion='$xs_apiversion'
16307 zcat='$zcat'
16308 zip='$zip'
16309 EOT
16310
16311 : Add in command line options if available
16312 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16313
16314 : add special variables
16315 $test -f $src/patchlevel.h && \
16316 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16317 echo "CONFIGDOTSH=true" >>config.sh
16318
16319 : propagate old symbols
16320 if $test -f UU/config.sh; then
16321         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16322         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16323         $sort | $uniq -u >UU/oldsyms
16324         set X `cat UU/oldsyms`
16325         shift
16326         case $# in
16327         0) ;;
16328         *)
16329                 cat <<EOM
16330 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16331 EOM
16332                 echo "# Variables propagated from previous config.sh file." >>config.sh
16333                 for sym in `cat UU/oldsyms`; do
16334                         echo "    Propagating $hint variable "'$'"$sym..."
16335                         eval 'tmp="$'"${sym}"'"'
16336                         echo "$tmp" | \
16337                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16338                 done
16339                 ;;
16340         esac
16341 fi
16342
16343 : Finish up by extracting the .SH files
16344 case "$alldone" in
16345 exit)
16346         $rm -rf UU
16347         echo "Done."
16348         exit 0
16349         ;;
16350 cont)
16351         ;;
16352 '')
16353         dflt=''
16354         nostick=true
16355         $cat <<EOM
16356
16357 If you'd like to make any changes to the config.sh file before I begin
16358 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16359
16360 EOM
16361         rp="Press return or use a shell escape to edit config.sh:"
16362         . UU/myread
16363         nostick=''
16364         case "$ans" in
16365         '') ;;
16366         *) : in case they cannot read
16367                 sh 1>&4 -c "$ans";;
16368         esac
16369         ;;
16370 esac
16371
16372 : if this fails, just run all the .SH files by hand
16373 . ./config.sh
16374
16375 echo " "
16376 exec 1>&4
16377 . ./UU/extract
16378
16379 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16380         dflt=y
16381         case "$silent" in
16382         true) ;;
16383         *)
16384                 $cat <<EOM
16385
16386 Now you need to generate make dependencies by running "$make depend".
16387 You might prefer to run it in background: "$make depend > makedepend.out &"
16388 It can take a while, so you might not want to run it right now.
16389
16390 EOM
16391                 ;;
16392         esac
16393         rp="Run $make depend now?"
16394         . UU/myread
16395         case "$ans" in
16396         y*)
16397                 $make depend && echo "Now you must run '$make'."
16398                 ;;
16399         *)
16400                 echo "You must run '$make depend' then '$make'."
16401                 ;;
16402         esac
16403 elif test -f [Mm]akefile; then
16404         echo " "
16405         echo "Now you must run a $make."
16406 else
16407         echo "Done."
16408 fi
16409
16410 if $test -f Policy.sh; then
16411     $cat <<EOM
16412
16413 If you compile $package on a different machine or from a different object
16414 directory, copy the Policy.sh file from this object directory to the
16415 new one before you run Configure -- this will help you with most of
16416 the policy defaults.
16417
16418 EOM
16419 fi
16420 if $test -f config.msg; then
16421     echo "Hmm.  I also noted the following information while running:"
16422     echo " "
16423     $cat config.msg >&4
16424     $rm -f config.msg
16425 fi
16426 $rm -f kit*isdone ark*isdone
16427 $rm -rf UU
16428
16429 : End of Configure
16430