make CAT2() portable for use as a macro argument with an extra
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Mar  3 16:54:03 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
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 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
357 d_fpos64_t=''
358 d_fs_data_s=''
359 d_fseeko=''
360 d_fsetpos=''
361 d_fstatfs=''
362 d_ftello=''
363 d_ftime=''
364 d_gettimeod=''
365 d_Gconvert=''
366 d_getcwd=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getpwent=''
396 d_getsent=''
397 d_getservprotos=''
398 d_getspent=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_killpg=''
410 d_lchown=''
411 d_ldbl_dig=''
412 d_link=''
413 d_locconv=''
414 d_lockf=''
415 d_longdbl=''
416 longdblsize=''
417 d_longlong=''
418 longlongsize=''
419 d_lseekproto=''
420 d_lstat=''
421 d_madvise=''
422 d_mblen=''
423 d_mbstowcs=''
424 d_mbtowc=''
425 d_memchr=''
426 d_memcmp=''
427 d_memcpy=''
428 d_memmove=''
429 d_memset=''
430 d_mkdir=''
431 d_mkdtemp=''
432 d_mkfifo=''
433 d_mkstemp=''
434 d_mkstemps=''
435 d_mktime=''
436 d_mmap=''
437 mmaptype=''
438 d_mprotect=''
439 d_msg=''
440 d_msgctl=''
441 d_msgget=''
442 d_msgrcv=''
443 d_msgsnd=''
444 d_msync=''
445 d_munmap=''
446 d_nice=''
447 d_off64_t=''
448 d_open3=''
449 d_fpathconf=''
450 d_pathconf=''
451 d_pause=''
452 d_pipe=''
453 d_poll=''
454 d_portable=''
455 d_old_pthread_create_joinable=''
456 old_pthread_create_joinable=''
457 d_pthread_yield=''
458 d_sched_yield=''
459 sched_yield=''
460 d_qgcvt=''
461 d_readdir=''
462 d_rewinddir=''
463 d_seekdir=''
464 d_telldir=''
465 d_readlink=''
466 d_rename=''
467 d_rmdir=''
468 d_safebcpy=''
469 d_safemcpy=''
470 d_sanemcmp=''
471 d_select=''
472 d_sem=''
473 d_semctl=''
474 d_semget=''
475 d_semop=''
476 d_setegid=''
477 d_seteuid=''
478 d_setgrent=''
479 d_setgrps=''
480 d_sethent=''
481 d_setlinebuf=''
482 d_setlocale=''
483 d_setnent=''
484 d_setpent=''
485 d_setpgid=''
486 d_setpgrp2=''
487 d_bsdsetpgrp=''
488 d_setpgrp=''
489 d_setprior=''
490 d_setpwent=''
491 d_setregid=''
492 d_setresgid=''
493 d_setresuid=''
494 d_setreuid=''
495 d_setrgid=''
496 d_setruid=''
497 d_setsent=''
498 d_setsid=''
499 d_setspent=''
500 d_setvbuf=''
501 d_sfio=''
502 usesfio=''
503 d_shm=''
504 d_shmat=''
505 d_shmatprototype=''
506 shmattype=''
507 d_shmctl=''
508 d_shmdt=''
509 d_shmget=''
510 d_sigaction=''
511 d_sigsetjmp=''
512 d_msg_ctrunc=''
513 d_msg_dontroute=''
514 d_msg_oob=''
515 d_msg_peek=''
516 d_msg_proxy=''
517 d_oldsock=''
518 d_scm_rights=''
519 d_socket=''
520 d_sockpair=''
521 sockethdr=''
522 socketlib=''
523 d_socklen_t=''
524 d_sqrtl=''
525 d_statblks=''
526 d_statfs_f_flags=''
527 d_statfs_s=''
528 d_fstatvfs=''
529 d_statvfs=''
530 d_stdio_cnt_lval=''
531 d_stdio_ptr_lval=''
532 d_stdiobase=''
533 d_stdstdio=''
534 stdio_base=''
535 stdio_bufsiz=''
536 stdio_cnt=''
537 stdio_filbuf=''
538 stdio_ptr=''
539 d_index=''
540 d_strchr=''
541 d_strcoll=''
542 d_strctcpy=''
543 d_strerrm=''
544 d_strerror=''
545 d_sysernlst=''
546 d_syserrlst=''
547 d_strtod=''
548 d_strtol=''
549 d_strtold=''
550 d_strtoll=''
551 d_strtoul=''
552 d_strtoull=''
553 d_strtouq=''
554 d_strxfrm=''
555 d_symlink=''
556 d_syscall=''
557 d_sysconf=''
558 d_system=''
559 d_tcgetpgrp=''
560 d_tcsetpgrp=''
561 d_telldirproto=''
562 d_time=''
563 timetype=''
564 clocktype=''
565 d_times=''
566 d_truncate=''
567 d_tzname=''
568 d_umask=''
569 d_semctl_semid_ds=''
570 d_semctl_semun=''
571 d_union_semun=''
572 d_ustat=''
573 d_vfork=''
574 usevfork=''
575 d_voidsig=''
576 signal_t=''
577 d_volatile=''
578 d_charvspr=''
579 d_vprintf=''
580 d_wait4=''
581 d_waitpid=''
582 d_wcstombs=''
583 d_wctomb=''
584 dlext=''
585 cccdlflags=''
586 ccdlflags=''
587 dlsrc=''
588 ld=''
589 lddlflags=''
590 usedl=''
591 doublesize=''
592 ebcdic=''
593 fflushNULL=''
594 fflushall=''
595 fpossize=''
596 fpostype=''
597 gidformat=''
598 gidsign=''
599 gidsize=''
600 gidtype=''
601 groupstype=''
602 h_fcntl=''
603 h_sysfile=''
604 i_arpainet=''
605 db_hashtype=''
606 db_prefixtype=''
607 i_db=''
608 i_dbm=''
609 i_rpcsvcdbm=''
610 d_dirnamlen=''
611 direntrytype=''
612 i_dirent=''
613 i_dld=''
614 i_dlfcn=''
615 i_fcntl=''
616 i_float=''
617 i_gdbm=''
618 d_grpasswd=''
619 i_grp=''
620 i_iconv=''
621 i_ieeefp=''
622 i_inttypes=''
623 i_limits=''
624 i_locale=''
625 i_machcthr=''
626 i_malloc=''
627 i_math=''
628 i_memory=''
629 i_mntent=''
630 i_ndbm=''
631 i_netdb=''
632 i_neterrno=''
633 i_netinettcp=''
634 i_niin=''
635 i_sysin=''
636 i_poll=''
637 i_pthread=''
638 d_pwage=''
639 d_pwchange=''
640 d_pwclass=''
641 d_pwcomment=''
642 d_pwexpire=''
643 d_pwgecos=''
644 d_pwpasswd=''
645 d_pwquota=''
646 i_pwd=''
647 i_sfio=''
648 i_shadow=''
649 i_socks=''
650 i_stddef=''
651 i_stdlib=''
652 i_string=''
653 strings=''
654 i_sunmath=''
655 i_sysaccess=''
656 i_sysdir=''
657 i_sysfile=''
658 d_voidtty=''
659 i_bsdioctl=''
660 i_sysfilio=''
661 i_sysioctl=''
662 i_syssockio=''
663 i_syslog=''
664 i_sysmman=''
665 i_sysmode=''
666 i_sysmount=''
667 i_sysndir=''
668 i_sysparam=''
669 i_sysresrc=''
670 i_syssecrt=''
671 i_sysselct=''
672 i_sysstat=''
673 i_sysstatfs=''
674 i_sysstatvfs=''
675 i_systimes=''
676 i_systypes=''
677 i_sysuio=''
678 i_sysun=''
679 i_sysutsname=''
680 i_sysvfs=''
681 i_syswait=''
682 i_sgtty=''
683 i_termio=''
684 i_termios=''
685 i_systime=''
686 i_systimek=''
687 i_time=''
688 timeincl=''
689 i_unistd=''
690 i_ustat=''
691 i_utime=''
692 i_values=''
693 i_stdarg=''
694 i_varargs=''
695 i_varhdr=''
696 i_vfork=''
697 inc_version_list=''
698 inc_version_list_init=''
699 installprefix=''
700 installprefixexp=''
701 installstyle=''
702 installusrbinperl=''
703 intsize=''
704 longsize=''
705 shortsize=''
706 libc=''
707 ldlibpthname=''
708 libperl=''
709 shrpenv=''
710 useshrplib=''
711 glibpth=''
712 libpth=''
713 loclibpth=''
714 plibpth=''
715 xlibpth=''
716 ignore_versioned_solibs=''
717 libs=''
718 libsdirs=''
719 libsfiles=''
720 libsfound=''
721 libspath=''
722 lns=''
723 d_PRIEldbl=''
724 d_PRIFldbl=''
725 d_PRIGldbl=''
726 d_PRIeldbl=''
727 d_PRIfldbl=''
728 d_PRIgldbl=''
729 sPRIEldbl=''
730 sPRIFldbl=''
731 sPRIGldbl=''
732 sPRIeldbl=''
733 sPRIfldbl=''
734 sPRIgldbl=''
735 lseeksize=''
736 lseektype=''
737 make_set_make=''
738 d_mymalloc=''
739 freetype=''
740 mallocobj=''
741 mallocsrc=''
742 malloctype=''
743 usemymalloc=''
744 installman1dir=''
745 man1dir=''
746 man1direxp=''
747 man1ext=''
748 installman3dir=''
749 man3dir=''
750 man3direxp=''
751 man3ext=''
752 huge=''
753 large=''
754 medium=''
755 models=''
756 small=''
757 split=''
758 modetype=''
759 multiarch=''
760 mydomain=''
761 myhostname=''
762 phostname=''
763 c=''
764 n=''
765 d_eofnblk=''
766 eagain=''
767 o_nonblock=''
768 rd_nodata=''
769 netdb_hlen_type=''
770 netdb_host_type=''
771 netdb_name_type=''
772 netdb_net_type=''
773 groupcat=''
774 hostcat=''
775 passcat=''
776 orderlib=''
777 ranlib=''
778 package=''
779 spackage=''
780 pager=''
781 api_revision=''
782 api_subversion=''
783 api_version=''
784 api_versionstring=''
785 patchlevel=''
786 revision=''
787 subversion=''
788 version=''
789 perl5=''
790 perladmin=''
791 perlpath=''
792 d_nv_preserves_uv=''
793 i16size=''
794 i16type=''
795 i32size=''
796 i32type=''
797 i64size=''
798 i64type=''
799 i8size=''
800 i8type=''
801 ivsize=''
802 ivtype=''
803 nvsize=''
804 nvtype=''
805 u16size=''
806 u16type=''
807 u32size=''
808 u32type=''
809 u64size=''
810 u64type=''
811 u8size=''
812 u8type=''
813 uvsize=''
814 uvtype=''
815 ivdformat=''
816 uvoformat=''
817 uvuformat=''
818 uvxformat=''
819 pidtype=''
820 prefix=''
821 prefixexp=''
822 installprivlib=''
823 privlib=''
824 privlibexp=''
825 prototype=''
826 ptrsize=''
827 d_PRIX64=''
828 d_PRId64=''
829 d_PRIi64=''
830 d_PRIo64=''
831 d_PRIu64=''
832 d_PRIx64=''
833 sPRIX64=''
834 sPRId64=''
835 sPRIi64=''
836 sPRIo64=''
837 sPRIu64=''
838 sPRIx64=''
839 d_quad=''
840 quadkind=''
841 quadtype=''
842 uquadtype=''
843 drand01=''
844 randbits=''
845 randfunc=''
846 randseedtype=''
847 seedfunc=''
848 installscript=''
849 scriptdir=''
850 scriptdirexp=''
851 selectminbits=''
852 selecttype=''
853 sh=''
854 sig_count=''
855 sig_name=''
856 sig_name_init=''
857 sig_num=''
858 sig_num_init=''
859 installsitearch=''
860 sitearch=''
861 sitearchexp=''
862 installsitebin=''
863 sitebin=''
864 sitebinexp=''
865 installsitelib=''
866 sitelib=''
867 sitelibexp=''
868 siteprefix=''
869 siteprefixexp=''
870 sizetype=''
871 so=''
872 socksizetype=''
873 sharpbang=''
874 shsharp=''
875 spitshell=''
876 src=''
877 ssizetype=''
878 startperl=''
879 startsh=''
880 stdchar=''
881 d_stdio_stream_array=''
882 stdio_stream_array=''
883 sysman=''
884 trnl=''
885 uidformat=''
886 uidsign=''
887 uidsize=''
888 uidtype=''
889 archname64=''
890 use64bitall=''
891 use64bitint=''
892 uselargefiles=''
893 uselongdouble=''
894 usemorebits=''
895 usemultiplicity=''
896 nm_opt=''
897 nm_so_opt=''
898 runnm=''
899 usenm=''
900 useperlio=''
901 usesocks=''
902 d_oldpthreads=''
903 use5005threads=''
904 useithreads=''
905 usethreads=''
906 incpath=''
907 mips_type=''
908 usrinc=''
909 d_vendorbin=''
910 installvendorbin=''
911 vendorbin=''
912 vendorbinexp=''
913 d_vendorlib=''
914 installvendorlib=''
915 vendorlib=''
916 vendorlibexp=''
917 usevendorprefix=''
918 vendorprefix=''
919 vendorprefixexp=''
920 defvoidused=''
921 voidflags=''
922 pm_apiversion=''
923 xs_apiversion=''
924 CONFIG=''
925
926 define='define'
927 undef='undef'
928 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
929 rmlist=''
930
931 : We must find out about Eunice early
932 eunicefix=':'
933 if test -f /etc/unixtovms; then
934         eunicefix=/etc/unixtovms
935 fi
936 if test -f /etc/unixtovms.exe; then
937         eunicefix=/etc/unixtovms.exe
938 fi
939
940 i_whoami=''
941 : set useposix=false in your hint file to disable the POSIX extension.
942 useposix=true
943 : set useopcode=false in your hint file to disable the Opcode extension.
944 useopcode=true
945 : Trailing extension.  Override this in a hint file, if needed.
946 _exe=''
947 : Extra object files, if any, needed on this platform.
948 archobjs=''
949 : Possible local include directories to search.
950 : Set locincpth to "" in a hint file to defeat local include searches.
951 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
952 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
953 :
954 : no include file wanted by default
955 inclwanted=''
956
957 groupstype=''
958 : change the next line if compiling for Xenix/286 on Xenix/386
959 xlibpth='/usr/lib/386 /lib/386'
960 : Possible local library directories to search.
961 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
962 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
963
964 : general looking path for locating libraries
965 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
966 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
967 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
968 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
969 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
970
971 : Private path used by Configure to find libraries.  Its value
972 : is prepended to libpth. This variable takes care of special
973 : machines, like the mips.  Usually, it should be empty.
974 plibpth=''
975
976 : default library list
977 libswanted=''
978 : some systems want to use only the non-versioned libso:s
979 ignore_versioned_solibs=''
980 : set usemultiplicity on the Configure command line to enable multiplicity.
981 : set usesocks on the Configure command line to enable socks.
982 : set usethreads on the Configure command line to enable threads.
983 : full support for void wanted by default
984 defvoidused=15
985
986 : List of libraries we want.
987 : If anyone needs -lnet, put it in a hint file.
988 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
989 libswanted="$libswanted dld ld sun m c cposix posix"
990 libswanted="$libswanted ndir dir crypt sec"
991 libswanted="$libswanted ucb bsd BSD PW x iconv"
992 : We probably want to search /usr/shlib before most other libraries.
993 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
994 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
995 glibpth="/usr/shlib $glibpth"
996 : Do not use vfork unless overridden by a hint file.
997 usevfork=false
998
999 : Find the basic shell for Bourne shell scripts
1000 case "$sh" in
1001 '')
1002         case "$SYSTYPE" in
1003         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1004         *) xxx='/bin/sh';;
1005         esac
1006         if test -f "$xxx"; then
1007                 sh="$xxx"
1008         else
1009                 : Build up a list and do a single loop so we can 'break' out.
1010                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1011                 for xxx in sh bash ksh pdksh ash; do
1012                         for p in $pth; do
1013                                 try="$try ${p}/${xxx}"
1014                         done
1015                 done
1016                 for xxx in $try; do
1017                         if test -f "$xxx"; then
1018                                 sh="$xxx";
1019                                 break
1020                         elif test -f "$xxx.exe"; then
1021                                 sh="$xxx";
1022                                 break
1023                         fi
1024                 done
1025         fi
1026         ;;
1027 esac
1028
1029 case "$sh" in
1030 '')     cat <<EOM >&2
1031 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1032
1033 Usually it's in /bin/sh.  How did you even get this far?
1034 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1035 we'll try to straighten this all out.
1036 EOM
1037         exit 1
1038         ;;
1039 esac
1040
1041 : see if sh knows # comments
1042 if `$sh -c '#' >/dev/null 2>&1`; then
1043         shsharp=true
1044         spitshell=cat
1045         xcat=/bin/cat
1046         test -f $xcat || xcat=/usr/bin/cat
1047         echo "#!$xcat" >try
1048         $eunicefix try
1049         chmod +x try
1050         ./try > today
1051         if test -s today; then
1052                 sharpbang='#!'
1053         else
1054                 echo "#! $xcat" > try
1055                 $eunicefix try
1056                 chmod +x try
1057                 ./try > today
1058                 if test -s today; then
1059                         sharpbang='#! '
1060                 else
1061                         sharpbang=': use '
1062                 fi
1063         fi
1064 else
1065         echo " "
1066         echo "Your $sh doesn't grok # comments--I will strip them later on."
1067         shsharp=false
1068         cd ..
1069         echo "exec grep -v '^[  ]*#'" >spitshell
1070         chmod +x spitshell
1071         $eunicefix spitshell
1072         spitshell=`pwd`/spitshell
1073         cd UU
1074         echo "I presume that if # doesn't work, #! won't work either!"
1075         sharpbang=': use '
1076 fi
1077 rm -f try today
1078
1079 : figure out how to guarantee sh startup
1080 case "$startsh" in
1081 '') startsh=${sharpbang}${sh} ;;
1082 *)
1083 esac
1084 cat >try <<EOSS
1085 $startsh
1086 set abc
1087 test "$?abc" != 1
1088 EOSS
1089
1090 chmod +x try
1091 $eunicefix try
1092 if ./try; then
1093         : echo "Yup, it does."
1094 else
1095         echo "Hmm... '$startsh' does not guarantee sh startup..."
1096         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1097 fi
1098 rm -f try
1099
1100
1101 : Save command line options in file UU/cmdline.opt for later use in
1102 : generating config.sh.
1103 cat > cmdline.opt <<EOSH
1104 # Configure command line arguments.
1105 config_arg0='$0'
1106 config_args='$*'
1107 config_argc=$#
1108 EOSH
1109 argn=1
1110 for arg in "$@"; do
1111         cat >>cmdline.opt <<EOSH
1112 config_arg$argn='$arg'
1113 EOSH
1114         argn=`expr $argn + 1`
1115 done
1116
1117 : produce awk script to parse command line options
1118 cat >options.awk <<'EOF'
1119 BEGIN {
1120         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1121
1122         len = length(optstr);
1123         for (i = 1; i <= len; i++) {
1124                 c = substr(optstr, i, 1);
1125                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1126                 if (a == ":") {
1127                         arg[c] = 1;
1128                         i++;
1129                 }
1130                 opt[c] = 1;
1131         }
1132 }
1133 {
1134         expect = 0;
1135         str = $0;
1136         if (substr(str, 1, 1) != "-") {
1137                 printf("'%s'\n", str);
1138                 next;
1139         }
1140         len = length($0);
1141         for (i = 2; i <= len; i++) {
1142                 c = substr(str, i, 1);
1143                 if (!opt[c]) {
1144                         printf("-%s\n", substr(str, i));
1145                         next;
1146                 }
1147                 printf("-%s\n", c);
1148                 if (arg[c]) {
1149                         if (i < len)
1150                                 printf("'%s'\n", substr(str, i + 1));
1151                         else
1152                                 expect = 1;
1153                         next;
1154                 }
1155         }
1156 }
1157 END {
1158         if (expect)
1159                 print "?";
1160 }
1161 EOF
1162
1163 : process the command line options
1164 set X `for arg in "$@"; do echo "X$arg"; done |
1165         sed -e s/X// | awk -f options.awk`
1166 eval "set $*"
1167 shift
1168 rm -f options.awk
1169
1170 : set up default values
1171 fastread=''
1172 reuseval=false
1173 config_sh=''
1174 alldone=''
1175 error=''
1176 silent=''
1177 extractsh=''
1178 override=''
1179 knowitall=''
1180 rm -f optdef.sh posthint.sh
1181 cat >optdef.sh <<EOS
1182 $startsh
1183 EOS
1184
1185
1186 : option parsing
1187 while test $# -gt 0; do
1188         case "$1" in
1189         -d) shift; fastread=yes;;
1190         -e) shift; alldone=cont;;
1191         -f)
1192                 shift
1193                 cd ..
1194                 if test -r "$1"; then
1195                         config_sh="$1"
1196                 else
1197                         echo "$me: cannot read config file $1." >&2
1198                         error=true
1199                 fi
1200                 cd UU
1201                 shift;;
1202         -h) shift; error=true;;
1203         -r) shift; reuseval=true;;
1204         -s) shift; silent=true; realsilent=true;;
1205         -E) shift; alldone=exit;;
1206         -K) shift; knowitall=true;;
1207         -O) shift; override=true;;
1208         -S) shift; silent=true; extractsh=true;;
1209         -D)
1210                 shift
1211                 case "$1" in
1212                 *=)
1213                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1214                         echo "$me: ignoring -D $1" >&2
1215                         ;;
1216                 *=*) echo "$1" | \
1217                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1218                 *) echo "$1='define'" >> optdef.sh;;
1219                 esac
1220                 shift
1221                 ;;
1222         -U)
1223                 shift
1224                 case "$1" in
1225                 *=) echo "$1" >> optdef.sh;;
1226                 *=*)
1227                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1228                         echo "$me: ignoring -U $1" >&2
1229                         ;;
1230                 *) echo "$1='undef'" >> optdef.sh;;
1231                 esac
1232                 shift
1233                 ;;
1234         -A)
1235             shift
1236             xxx=''
1237             yyy="$1"
1238             zzz=''
1239             uuu=undef
1240             case "$yyy" in
1241             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1242                  case "$zzz" in
1243                  *:*) zzz='' ;;
1244                  *)   xxx=append
1245                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1246                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1247                  esac
1248                  ;;
1249             esac
1250             case "$xxx" in
1251             '')  case "$yyy" in
1252                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1253                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1254                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1255                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1256                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1257                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1258                  esac
1259                  ;;       
1260             esac
1261             case "$xxx" in
1262             append)
1263                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1264             clear)
1265                 echo "$yyy=''"                  >> posthint.sh ;;
1266             define)
1267                 case "$zzz" in
1268                 '') zzz=define ;;
1269                 esac
1270                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1271             eval)
1272                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1273             prepend)
1274                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1275             undef)
1276                 case "$zzz" in
1277                 '') zzz="$uuu" ;;
1278                 esac
1279                 echo "$yyy=$zzz"                >> posthint.sh ;;
1280             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1281             esac
1282             shift
1283             ;;
1284         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1285             exit 0;;
1286         --) break;;
1287         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1288         *) break;;
1289         esac
1290 done
1291
1292 case "$error" in
1293 true)
1294         cat >&2 <<EOM
1295 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1296                  [-U symbol] [-U symbol=] [-A command:symbol...]
1297   -d : use defaults for all answers.
1298   -e : go on without questioning past the production of config.sh.
1299   -f : specify an alternate default configuration file.
1300   -h : print this help message and exit (with an error status).
1301   -r : reuse C symbols value if possible (skips costly nm extraction).
1302   -s : silent mode, only echoes questions and essential information.
1303   -D : define symbol to have some value:
1304          -D symbol         symbol gets the value 'define'
1305          -D symbol=value   symbol gets the value 'value'
1306   -E : stop at the end of questions, after having produced config.sh.
1307   -K : do not use unless you know what you are doing.
1308   -O : let -D and -U override definitions from loaded configuration file.
1309   -S : perform variable substitutions on all .SH files (can mix with -f)
1310   -U : undefine symbol:
1311          -U symbol    symbol gets the value 'undef'
1312          -U symbol=   symbol gets completely empty
1313   -A : manipulate symbol after the platform specific hints have been applied:
1314          -A symbol=value                append " "value to symbol
1315          -A append:symbol=value         append value to symbol
1316          -A define:symbol=value         define symbol to have value
1317          -A clear:symbol                define symbol to be ''
1318          -A define:symbol               define symbol to be 'define'
1319          -A eval:symbol=value           define symbol to be eval of value
1320          -A prepend:symbol=value        prepend value to symbol
1321          -A undef:symbol                define symbol to be 'undef'
1322          -A undef:symbol=               define symbol to be ''
1323   -V : print version number and exit (with a zero status).
1324 EOM
1325         exit 1
1326         ;;
1327 esac
1328
1329 : Sanity checks
1330 case "$fastread$alldone" in
1331 yescont|yesexit) ;;
1332 *)
1333         if test ! -t 0; then
1334                 echo "Say 'sh Configure', not 'sh <Configure'"
1335                 exit 1
1336         fi
1337         ;;
1338 esac
1339
1340 exec 4>&1
1341 case "$silent" in
1342 true) exec 1>/dev/null;;
1343 esac
1344
1345 : run the defines and the undefines, if any, but leave the file out there...
1346 touch optdef.sh
1347 . ./optdef.sh
1348 : create the posthint manipulation script and leave the file out there...
1349 touch posthint.sh
1350
1351 : set package name
1352 package=perl5
1353 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1354 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1355 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1356 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1357 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1358 esac
1359
1360 : Some greps do not return status, grrr.
1361 echo "grimblepritz" >grimble
1362 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1363         contains=contains
1364 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1365         contains=grep
1366 else
1367         contains=contains
1368 fi
1369 rm -f grimble
1370 : the following should work in any shell
1371 case "$contains" in
1372 contains*)
1373         echo " "
1374         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1375         cat >contains <<'EOSS'
1376 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1377 EOSS
1378 chmod +x contains
1379 esac
1380
1381 : Find the path to the source tree
1382 case "$src" in
1383 '') case "$0" in
1384     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1385          case "$src" in
1386          /*)    ;;
1387          *)     src=`cd ../$src && pwd` ;;
1388          esac
1389          ;;
1390     *)   src='.';;
1391     esac;;
1392 esac
1393 case "$src" in
1394 '')     src=/
1395         rsrc=/
1396         ;;
1397 /*) rsrc="$src";;
1398 *) rsrc="../$src";;
1399 esac
1400 if test -f $rsrc/Configure && \
1401         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1402 then
1403    : found it, so we are ok.
1404 else
1405         rsrc=''
1406         for src in . .. ../.. ../../.. ../../../..; do
1407                 if test -f ../$src/Configure && \
1408                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1409                 then
1410                         rsrc=../$src
1411                         break
1412                 fi
1413         done
1414 fi
1415 case "$rsrc" in
1416 '')
1417         cat <<EOM >&4
1418
1419 Sorry, I can't seem to locate the source dir for $package.  Please start
1420 Configure with an explicit path -- i.e. /some/path/Configure.
1421
1422 EOM
1423         exit 1
1424         ;;
1425 ../.)   rsrc='..';;
1426 *)
1427         echo " "
1428         echo "Sources for $package found in \"$src\"." >&4
1429         ;;
1430 esac
1431
1432 : script used to extract .SH files with variable substitutions
1433 cat >extract <<'EOS'
1434 CONFIGDOTSH=true
1435 echo "Doing variable substitutions on .SH files..."
1436 if test -f $src/MANIFEST; then
1437         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1438 else
1439         echo "(Looking for .SH files under the source directory.)"
1440         set x `(cd $src; find . -name "*.SH" -print)`
1441 fi
1442 shift
1443 case $# in
1444 0) set x `(cd $src; echo *.SH)`; shift;;
1445 esac
1446 if test ! -f $src/$1; then
1447         shift
1448 fi
1449 mkdir_p='
1450 name=$1;
1451 create="";
1452 while test $name; do
1453         if test ! -d "$name"; then
1454                 create="$name $create";
1455                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1456                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1457         else
1458                 name="";
1459         fi;
1460 done;
1461 for file in $create; do
1462         mkdir $file;
1463 done
1464 '
1465 for file in $*; do
1466         case "$src" in
1467         ".")
1468                 case "$file" in
1469                 */*)
1470                         dir=`expr X$file : 'X\(.*\)/'`
1471                         file=`expr X$file : 'X.*/\(.*\)'`
1472                         (cd $dir && . ./$file)
1473                         ;;
1474                 *)
1475                         . ./$file
1476                         ;;
1477                 esac
1478                 ;;
1479         *)
1480                 case "$file" in
1481                 */*)
1482                         dir=`expr X$file : 'X\(.*\)/'`
1483                         file=`expr X$file : 'X.*/\(.*\)'`
1484                         (set x $dir; shift; eval $mkdir_p)
1485                         sh <$src/$dir/$file
1486                         ;;
1487                 *)
1488                         sh <$src/$file
1489                         ;;
1490                 esac
1491                 ;;
1492         esac
1493 done
1494 if test -f $src/config_h.SH; then
1495         if test ! -f config.h; then
1496         : oops, they left it out of MANIFEST, probably, so do it anyway.
1497         . $src/config_h.SH
1498         fi
1499 fi
1500 EOS
1501
1502 : extract files and exit if asked to do so
1503 case "$extractsh" in
1504 true)
1505         case "$realsilent" in
1506         true) ;;
1507         *) exec 1>&4;;
1508         esac
1509         case "$config_sh" in
1510         '') config_sh='config.sh';;
1511         esac
1512         echo " "
1513         echo "Fetching answers from $config_sh..."
1514         cd ..
1515         . $config_sh
1516         test "$override" && . ./optdef.sh
1517         echo " "
1518         . UU/extract
1519         rm -rf UU
1520         echo "Done."
1521         exit 0
1522         ;;
1523 esac
1524
1525 : Eunice requires " " instead of "", can you believe it
1526 echo " "
1527 : Here we go...
1528 echo "Beginning of configuration questions for $package."
1529
1530 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1531
1532 : first determine how to suppress newline on echo command
1533 echo " "
1534 echo "Checking echo to see how to suppress newlines..."
1535 (echo "hi there\c" ; echo " ") >.echotmp
1536 if $contains c .echotmp >/dev/null 2>&1 ; then
1537         echo "...using -n."
1538         n='-n'
1539         c=''
1540 else
1541         cat <<'EOM'
1542 ...using \c
1543 EOM
1544         n=''
1545         c='\c'
1546 fi
1547 echo $n "The star should be here-->$c"
1548 echo '*'
1549 rm -f .echotmp
1550
1551 : Now test for existence of everything in MANIFEST
1552 echo " "
1553 if test -f $rsrc/MANIFEST; then
1554         echo "First let's make sure your kit is complete.  Checking..." >&4
1555         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1556         rm -f missing
1557         tmppwd=`pwd`
1558         for filelist in x??; do
1559                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1560         done
1561         if test -s missing; then
1562                 cat missing >&4
1563                 cat >&4 <<'EOM'
1564
1565 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1566
1567 You have the option of continuing the configuration process, despite the
1568 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1569 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1570 and contact the author (perlbug@perl.com).
1571
1572 EOM
1573                 echo $n "Continue? [n] $c" >&4
1574                 read ans
1575                 case "$ans" in
1576                 y*)
1577                         echo "Continuing..." >&4
1578                         rm -f missing
1579                         ;;
1580                 *)
1581                         echo "ABORTING..." >&4
1582                         kill $$
1583                         ;;
1584                 esac
1585         else
1586                 echo "Looks good..."
1587         fi
1588 else
1589         echo "There is no MANIFEST file.  I hope your kit is complete !"
1590 fi
1591 rm -f missing x??
1592
1593 echo " "
1594 : Find the appropriate value for a newline for tr
1595 if test -n "$DJGPP"; then
1596        trnl='\012'
1597 fi
1598 if test X"$trnl" = X; then
1599         case "`echo foo|tr '\n' x 2>/dev/null`" in
1600         foox) trnl='\n' ;;
1601         esac
1602 fi
1603 if test X"$trnl" = X; then
1604         case "`echo foo|tr '\012' x 2>/dev/null`" in
1605         foox) trnl='\012' ;;
1606         esac
1607 fi
1608 if test X"$trnl" = X; then
1609         cat <<EOM >&2
1610
1611 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1612
1613 EOM
1614         exit 1
1615 fi
1616
1617 : compute the number of columns on the terminal for proper question formatting
1618 case "$COLUMNS" in
1619 '') COLUMNS='80';;
1620 esac
1621
1622 : set up the echo used in my read
1623 myecho="case \"\$xxxm\" in
1624 '') echo $n \"\$rp $c\" >&4;;
1625 *) case \"\$rp\" in
1626         '') echo $n \"[\$xxxm] $c\";;
1627         *)
1628                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1629                         echo \"\$rp\" >&4
1630                         echo $n \"[\$xxxm] $c\" >&4
1631                 else
1632                         echo $n \"\$rp [\$xxxm] $c\" >&4
1633                 fi
1634                 ;;
1635         esac;;
1636 esac"
1637
1638 : now set up to do reads with possible shell escape and default assignment
1639 cat <<EOSC >myread
1640 $startsh
1641 xxxm=\$dflt
1642 $myecho
1643 ans='!'
1644 case "\$fastread" in
1645 yes) case "\$dflt" in
1646         '') ;;
1647         *) ans='';
1648                 case "\$silent-\$rp" in
1649                 true-) ;;
1650                 *) echo " " >&4;;
1651                 esac;;
1652         esac;;
1653 *) case "\$silent" in
1654         true) case "\$rp" in
1655                 '') ans='';;
1656                 esac;;
1657         esac;;
1658 esac
1659 while expr "X\$ans" : "X!" >/dev/null; do
1660         read answ
1661         set x \$xxxm
1662         shift
1663         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1664         case  "\$answ" in
1665         "!")
1666                 sh 1>&4
1667                 echo " "
1668                 $myecho
1669                 ;;
1670         !*)
1671                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1672                 shift
1673                 sh 1>&4 -c "\$*"
1674                 echo " "
1675                 $myecho
1676                 ;;
1677         "\$ans")
1678                 case "\$ans" in
1679                 \\&*)
1680                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1681                         shift
1682                         case "\$1" in
1683                         -d)
1684                                 fastread=yes
1685                                 echo "(OK, I'll run with -d after this question.)" >&4
1686                                 ;;
1687                         -*)
1688                                 echo "*** Sorry, \$1 not supported yet." >&4
1689                                 ;;
1690                         esac
1691                         $myecho
1692                         ans=!
1693                         ;;
1694                 esac;;
1695         *)
1696                 case "\$aok" in
1697                 y)
1698                         echo "*** Substitution done -- please confirm."
1699                         xxxm="\$ans"
1700                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1701                         xxxm="\$ans"
1702                         ans=!
1703                         ;;
1704                 *)
1705                         echo "*** Error -- try again."
1706                         ans=!
1707                         ;;
1708                 esac
1709                 $myecho
1710                 ;;
1711         esac
1712         case "\$ans\$xxxm\$nostick" in
1713         '')
1714                 ans=!
1715                 $myecho
1716                 ;;
1717         esac
1718 done
1719 case "\$ans" in
1720 '') ans="\$xxxm";;
1721 esac
1722 EOSC
1723
1724 : create .config dir to save info across Configure sessions
1725 test -d ../.config || mkdir ../.config
1726 cat >../.config/README <<EOF
1727 This directory created by Configure to save information that should
1728 persist across sessions for $package.
1729
1730 You may safely delete it if you wish.
1731 EOF
1732
1733 : general instructions
1734 needman=true
1735 firsttime=true
1736 user=`(logname) 2>/dev/null`
1737 case "$user" in
1738 '') user=`whoami 2>&1`;;
1739 esac
1740 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1741         firsttime=false
1742         echo " "
1743         rp='Would you like to see the instructions?'
1744         dflt=n
1745         . ./myread
1746         case "$ans" in
1747         [yY]*) ;;
1748         *) needman=false;;
1749         esac
1750 fi
1751 if $needman; then
1752         cat <<EOH
1753
1754 This installation shell script will examine your system and ask you questions
1755 to determine how the perl5 package should be installed. If you get
1756 stuck on a question, you may use a ! shell escape to start a subshell or
1757 execute a command.  Many of the questions will have default answers in square
1758 brackets; typing carriage return will give you the default.
1759
1760 On some of the questions which ask for file or directory names you are allowed
1761 to use the ~name construct to specify the login directory belonging to "name",
1762 even if you don't have a shell which knows about that.  Questions where this is
1763 allowed will be marked "(~name ok)".
1764
1765 EOH
1766         rp=''
1767         dflt='Type carriage return to continue'
1768         . ./myread
1769         cat <<'EOH'
1770
1771 The prompter used in this script allows you to use shell variables and
1772 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1773 in the default answer, as if the default line was a set of arguments given to a
1774 script shell.  This means you may also use $* to repeat the whole default line,
1775 so you do not have to re-type everything to add something to the default.
1776
1777 Everytime there is a substitution, you will have to confirm.  If there is an
1778 error (e.g. an unmatched backtick), the default answer will remain unchanged
1779 and you will be prompted again.
1780
1781 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1782 the questions and use the computed defaults (or the previous answers if there
1783 was already a config.sh file). Type 'Configure -h' for a list of options.
1784 You may also start interactively and then answer '& -d' at any prompt to turn
1785 on the non-interactive behaviour for the remainder of the execution.
1786
1787 EOH
1788         . ./myread
1789         cat <<EOH
1790
1791 Much effort has been expended to ensure that this shell script will run on any
1792 Unix system.  If despite that it blows up on yours, your best bet is to edit
1793 Configure and run it again.  If you can't run Configure for some reason,
1794 you'll have to generate a config.sh file by hand.  Whatever problems you
1795 have, let me (perlbug@perl.com) know how I blew it.
1796
1797 This installation script affects things in two ways:
1798
1799 1) it may do direct variable substitutions on some of the files included
1800    in this kit.
1801 2) it builds a config.h file for inclusion in C programs.  You may edit
1802    any of these files as the need arises after running this script.
1803
1804 If you make a mistake on a question, there is no easy way to back up to it
1805 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1806 files.  Configure will offer to let you do this before it runs the SH files.
1807
1808 EOH
1809         dflt='Type carriage return to continue'
1810         . ./myread
1811         case "$firsttime" in
1812         true) echo $user >>../.config/instruct;;
1813         esac
1814 fi
1815
1816 : find out where common programs are
1817 echo " "
1818 echo "Locating common programs..." >&4
1819 cat <<EOSC >loc
1820 $startsh
1821 case \$# in
1822 0) exit 1;;
1823 esac
1824 thing=\$1
1825 shift
1826 dflt=\$1
1827 shift
1828 for dir in \$*; do
1829         case "\$thing" in
1830         .)
1831         if test -d \$dir/\$thing; then
1832                 echo \$dir
1833                 exit 0
1834         fi
1835         ;;
1836         *)
1837         for thisthing in \$dir/\$thing; do
1838                 : just loop through to pick last item
1839         done
1840         if test -f \$thisthing; then
1841                 echo \$thisthing
1842                 exit 0
1843         elif test -f \$dir/\$thing.exe; then
1844                 if test -n "$DJGPP"; then
1845                         echo \$dir/\$thing.exe
1846                 else
1847                         : on Eunice apparently
1848                         echo \$dir/\$thing
1849                 fi
1850                 exit 0
1851         fi
1852         ;;
1853         esac
1854 done
1855 echo \$dflt
1856 exit 1
1857 EOSC
1858 chmod +x loc
1859 $eunicefix loc
1860 loclist="
1861 awk
1862 cat
1863 comm
1864 cp
1865 echo
1866 expr
1867 grep
1868 ls
1869 make
1870 mkdir
1871 rm
1872 sed
1873 sort
1874 touch
1875 tr
1876 uniq
1877 "
1878 trylist="
1879 Mcc
1880 ar
1881 byacc
1882 cpp
1883 csh
1884 date
1885 egrep
1886 gzip
1887 less
1888 ln
1889 more
1890 nm
1891 nroff
1892 pg
1893 test
1894 uname
1895 zip
1896 "
1897 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1898 pth="$pth /lib /usr/lib"
1899 for file in $loclist; do
1900         eval xxx=\$$file
1901         case "$xxx" in
1902         /*|?:[\\/]*)
1903                 if test -f "$xxx"; then
1904                         : ok
1905                 else
1906                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1907                         xxx=`./loc $file $file $pth`
1908                 fi
1909                 ;;
1910         '') xxx=`./loc $file $file $pth`;;
1911         *) xxx=`./loc $xxx $xxx $pth`;;
1912         esac
1913         eval $file=$xxx
1914         eval _$file=$xxx
1915         case "$xxx" in
1916         /*)
1917                 echo $file is in $xxx.
1918                 ;;
1919         ?:[\\/]*)
1920                 echo $file is in $xxx.
1921                 ;;
1922         *)
1923                 echo "I don't know where '$file' is, and my life depends on it." >&4
1924                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1925                 exit 1
1926                 ;;
1927         esac
1928 done
1929 echo " "
1930 echo "Don't worry if any of the following aren't found..."
1931 say=offhand
1932 for file in $trylist; do
1933         eval xxx=\$$file
1934         case "$xxx" in
1935         /*|?:[\\/]*)
1936                 if test -f "$xxx"; then
1937                         : ok
1938                 else
1939                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1940                         xxx=`./loc $file $file $pth`
1941                 fi
1942                 ;;
1943         '') xxx=`./loc $file $file $pth`;;
1944         *) xxx=`./loc $xxx $xxx $pth`;;
1945         esac
1946         eval $file=$xxx
1947         eval _$file=$xxx
1948         case "$xxx" in
1949         /*)
1950                 echo $file is in $xxx.
1951                 ;;
1952         ?:[\\/]*)
1953                 echo $file is in $xxx.
1954                 ;;
1955         *)
1956                 echo "I don't see $file out there, $say."
1957                 say=either
1958                 ;;
1959         esac
1960 done
1961 case "$egrep" in
1962 egrep)
1963         echo "Substituting grep for egrep."
1964         egrep=$grep
1965         ;;
1966 esac
1967 case "$ln" in
1968 ln)
1969         echo "Substituting cp for ln."
1970         ln=$cp
1971         ;;
1972 esac
1973 case "$test" in
1974 test)
1975         echo "Hopefully test is built into your sh."
1976         ;;
1977 *)
1978         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1979                 echo "Using the test built into your sh."
1980                 test=test
1981                 _test=test
1982         fi
1983         ;;
1984 esac
1985 case "$echo" in
1986 echo)
1987         echo "Hopefully echo is built into your sh."
1988         ;;
1989 '') ;;
1990 *)
1991         echo " "
1992 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1993         $echo $n "hi there$c" >foo1
1994         echo $n "hi there$c" >foo2
1995         if cmp foo1 foo2 >/dev/null 2>&1; then
1996                 echo "They are compatible.  In fact, they may be identical."
1997         else
1998                 case "$n" in
1999                 '-n') n='' c='\c';;
2000                 *) n='-n' c='';;
2001                 esac
2002                 cat <<FOO
2003 They are not compatible!  You are probably running ksh on a non-USG system.
2004 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2005 have echo built in and we may have to run some Bourne shell scripts.  That
2006 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2007
2008 FOO
2009                 $echo $n "The star should be here-->$c"
2010                 $echo "*"
2011         fi
2012         $rm -f foo1 foo2
2013         ;;
2014 esac
2015
2016 : determine whether symbolic links are supported
2017 echo " "
2018 $touch blurfl
2019 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2020         echo "Symbolic links are supported." >&4
2021         lns="$ln -s"
2022 else
2023         echo "Symbolic links are NOT supported." >&4
2024         lns="$ln"
2025 fi
2026 $rm -f blurfl sym
2027
2028 : see whether [:lower:] and [:upper:] are supported character classes
2029 echo " "
2030 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2031 ABYZ)
2032         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2033         up='[:upper:]'
2034         low='[:lower:]'
2035         ;;
2036 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2037         # (0xc9 and 0xd1), therefore that is a nice testing point.
2038         if test "X$up" = X -o "X$low" = X; then
2039             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2040             ij) up='[A-Z]'
2041                 low='[a-z]'
2042                 ;;
2043             esac
2044         fi
2045         if test "X$up" = X -o "X$low" = X; then
2046             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2047             ij) up='A-Z'
2048                 low='a-z'
2049                 ;;
2050             esac
2051         fi
2052         if test "X$up" = X -o "X$low" = X; then
2053             case "`echo IJ | od -x 2>/dev/null`" in
2054             *C9D1*|*c9d1*)
2055                 echo "Hey, this might be EBCDIC." >&4
2056                 if test "X$up" = X -o "X$low" = X; then
2057                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2058                     ij) up='[A-IJ-RS-Z]'
2059                         low='[a-ij-rs-z]'
2060                         ;;
2061                     esac
2062                 fi
2063                 if test "X$up" = X -o "X$low" = X; then
2064                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2065                     ij) up='A-IJ-RS-Z'
2066                         low='a-ij-rs-z'
2067                         ;;
2068                     esac
2069                 fi
2070                 ;;
2071             esac
2072         fi
2073 esac
2074 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2075 ij)
2076     echo "Using $up and $low to convert case." >&4
2077     ;;
2078 *)
2079     echo "I don't know how to translate letters from upper to lower case." >&4
2080     echo "Your tr is not acting any way I know of." >&4
2081     exit 1
2082     ;;
2083 esac
2084 : set up the translation script tr, must be called with ./tr of course
2085 cat >tr <<EOSC
2086 $startsh
2087 case "\$1\$2" in
2088 '[A-Z][a-z]') exec $tr '$up' '$low';;
2089 '[a-z][A-Z]') exec $tr '$low' '$up';;
2090 esac
2091 exec $tr "\$@"
2092 EOSC
2093 chmod +x tr
2094 $eunicefix tr
2095
2096 : Try to determine whether config.sh was made on this system
2097 case "$config_sh" in
2098 '')
2099 myuname=`$uname -a 2>/dev/null`
2100 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2101 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2102 # because the A-Z/a-z are not consecutive.
2103 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2104         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2105 newmyuname="$myuname"
2106 dflt=n
2107 case "$knowitall" in
2108 '')
2109         if test -f ../config.sh; then
2110                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2111                         eval "`grep myuname= ../config.sh`"
2112                 fi
2113                 if test "X$myuname" = "X$newmyuname"; then
2114                         dflt=y
2115                 fi
2116         fi
2117         ;;
2118 *) dflt=y;;
2119 esac
2120
2121 : Get old answers from old config file if Configure was run on the
2122 : same system, otherwise use the hints.
2123 hint=default
2124 cd ..
2125 if test -f config.sh; then
2126         echo " "
2127         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2128         . UU/myread
2129         case "$ans" in
2130         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2131         *)  echo "Fetching default answers from your old config.sh file..." >&4
2132                 tmp_n="$n"
2133                 tmp_c="$c"
2134                 tmp_sh="$sh"
2135                 . ./config.sh
2136                 cp config.sh UU
2137                 n="$tmp_n"
2138                 c="$tmp_c"
2139                 : Older versions did not always set $sh.  Catch re-use of such
2140                 : an old config.sh.
2141                 case "$sh" in
2142                 '') sh="$tmp_sh" ;;
2143                 esac
2144                 hint=previous
2145                 ;;
2146         esac
2147 fi
2148 if test ! -f config.sh; then
2149         $cat <<EOM
2150
2151 First time through, eh?  I have some defaults handy for some systems
2152 that need some extra help getting the Configure answers right:
2153
2154 EOM
2155         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2156         dflt=''
2157         : Half the following guesses are probably wrong... If you have better
2158         : tests or hints, please send them to perlbug@perl.com
2159         : The metaconfig authors would also appreciate a copy...
2160         $test -f /irix && osname=irix
2161         $test -f /xenix && osname=sco_xenix
2162         $test -f /dynix && osname=dynix
2163         $test -f /dnix && osname=dnix
2164         $test -f /lynx.os && osname=lynxos
2165         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2166         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2167         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2168         $test -f /bin/mips && /bin/mips && osname=mips
2169         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2170                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2171         $test -d /usr/apollo/bin && osname=apollo
2172         $test -f /etc/saf/_sactab && osname=svr4
2173         $test -d /usr/include/minix && osname=minix
2174         if $test -d /MachTen -o -d /MachTen_Folder; then
2175                 osname=machten
2176                 if $test -x /sbin/version; then
2177                         osvers=`/sbin/version | $awk '{print $2}' |
2178                         $sed -e 's/[A-Za-z]$//'`
2179                 elif $test -x /usr/etc/version; then
2180                         osvers=`/usr/etc/version | $awk '{print $2}' |
2181                         $sed -e 's/[A-Za-z]$//'`
2182                 else
2183                         osvers="$2.$3"
2184                 fi
2185         fi
2186
2187         $test -f /sys/posix.dll &&
2188                 $test -f /usr/bin/what &&
2189                 set X `/usr/bin/what /sys/posix.dll` &&
2190                 $test "$3" = UWIN &&
2191                 osname=uwin &&
2192                 osvers="$5"
2193
2194         if $test -f $uname; then
2195                 set X $myuname
2196                 shift
2197
2198                 case "$5" in
2199                 fps*) osname=fps ;;
2200                 mips*)
2201                         case "$4" in
2202                         umips) osname=umips ;;
2203                         *) osname=mips ;;
2204                         esac;;
2205                 [23]100) osname=mips ;;
2206                 next*) osname=next ;;
2207                 i386*)
2208                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2209                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2210                                 osname='sco'
2211                                 osvers=$tmp
2212                         elif $test -f /etc/kconfig; then
2213                                 osname=isc
2214                                 if test "$lns" = "$ln -s"; then
2215                                         osvers=4
2216                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2217                                         osvers=3
2218                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2219                                         osvers=2
2220                                 fi
2221                         fi
2222                         tmp=''
2223                         ;;
2224                 pc*)
2225                         if test -n "$DJGPP"; then
2226                                 osname=dos
2227                                 osvers=djgpp
2228                         fi
2229                         ;;
2230                 esac
2231
2232                 case "$1" in
2233                 aix) osname=aix
2234                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2235                         case "$tmp" in
2236                         'not found') osvers="$4"."$3" ;;
2237                         '<3240'|'<>3240') osvers=3.2.0 ;;
2238                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2239                         '=3250'|'>3250') osvers=3.2.5 ;;
2240                         *) osvers=$tmp;;
2241                         esac
2242                         ;;
2243                 bsd386) osname=bsd386
2244                         osvers=`$uname -r`
2245                         ;;
2246                 cygwin*) osname=cygwin
2247                         osvers="$3"
2248                         ;;
2249                 *dc.osx) osname=dcosx
2250                         osvers="$3"
2251                         ;;
2252                 dnix) osname=dnix
2253                         osvers="$3"
2254                         ;;
2255                 domainos) osname=apollo
2256                         osvers="$3"
2257                         ;;
2258                 dgux) osname=dgux 
2259                         osvers="$3"
2260                         ;;
2261                 dynixptx*) osname=dynixptx
2262                         osvers=`echo "$4"|sed 's/^v//'`
2263                         ;;
2264                 freebsd) osname=freebsd 
2265                         osvers="$3" ;;
2266                 genix) osname=genix ;;
2267                 hp*) osname=hpux 
2268                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2269                         ;;
2270                 irix*) osname=irix
2271                         case "$3" in
2272                         4*) osvers=4 ;;
2273                         5*) osvers=5 ;;
2274                         *)      osvers="$3" ;;
2275                         esac
2276                         ;;
2277                 linux) osname=linux
2278                         case "$3" in
2279                         *)      osvers="$3" ;;
2280                         esac
2281                         ;;
2282                 MiNT) osname=mint
2283                         ;;
2284                 netbsd*) osname=netbsd
2285                         osvers="$3"
2286                         ;;
2287                 news-os) osvers="$3"
2288                         case "$3" in
2289                         4*) osname=newsos4 ;;
2290                         *) osname=newsos ;;
2291                         esac
2292                         ;;
2293                 next*) osname=next ;;
2294                 POSIX-BC | posix-bc ) osname=posix-bc
2295                         osvers="$3"
2296                         ;;
2297                 powerux | power_ux | powermax_os | powermaxos | \
2298                 powerunix | power_unix) osname=powerux
2299                         osvers="$3"
2300                         ;;
2301                 qnx) osname=qnx
2302                         osvers="$4"
2303                         ;;
2304                 solaris) osname=solaris
2305                         case "$3" in
2306                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2307                         *)      osvers="$3" ;;
2308                         esac
2309                         ;;
2310                 sunos) osname=sunos
2311                         case "$3" in
2312                         5*) osname=solaris
2313                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2314                         *)      osvers="$3" ;;
2315                         esac
2316                         ;;
2317                 titanos) osname=titanos
2318                         case "$3" in
2319                         1*) osvers=1 ;;
2320                         2*) osvers=2 ;;
2321                         3*) osvers=3 ;;
2322                         4*) osvers=4 ;;
2323                         *)      osvers="$3" ;;
2324                         esac
2325                         ;;
2326                 ultrix) osname=ultrix
2327                         osvers="$3"
2328                         ;;
2329                 osf1|mls+)      case "$5" in
2330                                 alpha)
2331                                         osname=dec_osf
2332                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2333                                         ;;
2334                         hp*)    osname=hp_osf1  ;;
2335                         mips)   osname=mips_osf1 ;;
2336                         esac
2337                         ;;
2338                 unixware) osname=svr5
2339                         osvers="$4"
2340                         ;;
2341                 uts) osname=uts
2342                         osvers="$3"
2343                         ;;
2344                 $2) case "$osname" in
2345                         *isc*) ;;
2346                         *freebsd*) ;;
2347                         svr*)
2348                                 : svr4.x or possibly later
2349                                 case "svr$3" in 
2350                                 ${osname}*)
2351                                         osname=svr$3
2352                                         osvers=$4
2353                                         ;;
2354                                 esac
2355                                 case "$osname" in
2356                                 svr4.0)
2357                                         : Check for ESIX
2358                                         if test -f /stand/boot ; then
2359                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2360                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2361                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2362                                                         if test -n "$isesix"; then
2363                                                                 osname=esix4
2364                                                         fi
2365                                                 fi
2366                                         fi
2367                                         ;;
2368                                 esac
2369                                 ;;
2370                         *)      if test -f /etc/systemid; then
2371                                         osname=sco
2372                                         set `echo $3 | $sed 's/\./ /g'` $4
2373                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2374                                                 osvers=$1.$2.$3
2375                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2376                                                 osvers=$1.$2
2377                                         elif $test -f $src/hints/sco_$1.sh; then
2378                                                 osvers=$1
2379                                         fi
2380                                 else
2381                                         case "$osname" in
2382                                         '') : Still unknown.  Probably a generic Sys V.
2383                                                 osname="sysv"
2384                                                 osvers="$3"
2385                                                 ;;
2386                                         esac
2387                                 fi
2388                                 ;;
2389                         esac
2390                         ;;
2391                 *)      case "$osname" in
2392                         '') : Still unknown.  Probably a generic BSD.
2393                                 osname="$1"
2394                                 osvers="$3"
2395                                 ;;
2396                         esac
2397                         ;;
2398                 esac
2399         else
2400                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2401                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2402                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2403                                 osname=news_os
2404                         fi
2405                         $rm -f UU/kernel.what
2406                 elif test -d c:/.; then
2407                         set X $myuname
2408                         osname=os2
2409                         osvers="$5"
2410                 fi
2411         fi
2412         
2413         : Now look for a hint file osname_osvers, unless one has been
2414         : specified already.
2415         case "$hintfile" in
2416         ''|' ')
2417                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2418                 : Also try without trailing minor version numbers.
2419                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2420                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2421                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2422                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2423                 case "$file" in
2424                 '') dflt=none ;;
2425                 *)  case "$osvers" in
2426                         '') dflt=$file
2427                                 ;;
2428                         *)  if $test -f $src/hints/$file.sh ; then
2429                                         dflt=$file
2430                                 elif $test -f $src/hints/$xfile.sh ; then
2431                                         dflt=$xfile
2432                                 elif $test -f $src/hints/$xxfile.sh ; then
2433                                         dflt=$xxfile
2434                                 elif $test -f $src/hints/$xxxfile.sh ; then
2435                                         dflt=$xxxfile
2436                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2437                                         dflt=$xxxxfile
2438                                 elif $test -f "$src/hints/${osname}.sh" ; then
2439                                         dflt="${osname}"
2440                                 else
2441                                         dflt=none
2442                                 fi
2443                                 ;;
2444                         esac
2445                         ;;
2446                 esac
2447                 if $test -f Policy.sh ; then
2448                         case "$dflt" in
2449                         *Policy*) ;;
2450                         none) dflt="Policy" ;;
2451                         *) dflt="Policy $dflt" ;;
2452                         esac
2453                 fi
2454                 ;;
2455         *)
2456                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2457                 ;;
2458         esac
2459
2460         if $test -f Policy.sh ; then
2461                 $cat <<EOM
2462
2463 There's also a Policy hint file available, which should make the
2464 site-specific (policy) questions easier to answer.
2465 EOM
2466
2467         fi
2468
2469         $cat <<EOM
2470
2471 You may give one or more space-separated answers, or "none" if appropriate.
2472 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2473 is a good thing.  DO NOT give a wrong version or a wrong OS.
2474
2475 EOM
2476
2477         rp="Which of these apply, if any?"
2478         . UU/myread
2479         tans=$ans
2480         for file in $tans; do
2481                 if $test X$file = XPolicy -a -f Policy.sh; then
2482                         . Policy.sh
2483                         $cat Policy.sh >> UU/config.sh
2484                 elif $test -f $src/hints/$file.sh; then
2485                         . $src/hints/$file.sh
2486                         $cat $src/hints/$file.sh >> UU/config.sh
2487                 elif $test X$tans = X -o X$tans = Xnone ; then
2488                         : nothing
2489                 else
2490                         : Give one chance to correct a possible typo.
2491                         echo "$file.sh does not exist"
2492                         dflt=$file
2493                         rp="hint to use instead?"
2494                         . UU/myread
2495                         for file in $ans; do
2496                                 if $test -f "$src/hints/$file.sh"; then
2497                                         . $src/hints/$file.sh
2498                                         $cat $src/hints/$file.sh >> UU/config.sh
2499                                 elif $test X$ans = X -o X$ans = Xnone ; then
2500                                         : nothing
2501                                 else
2502                                         echo "$file.sh does not exist -- ignored."
2503                                 fi
2504                         done
2505                 fi
2506         done
2507
2508         hint=recommended
2509         : Remember our hint file for later.
2510         if $test -f "$src/hints/$file.sh" ; then
2511                 hintfile="$file"
2512         else
2513                 hintfile=''
2514         fi
2515 fi
2516 cd UU
2517 ;;
2518 *)
2519         echo " "
2520         echo "Fetching default answers from $config_sh..." >&4
2521         tmp_n="$n"
2522         tmp_c="$c"
2523         cd ..
2524         cp $config_sh config.sh 2>/dev/null
2525         chmod +w config.sh
2526         . ./config.sh
2527         cd UU
2528         cp ../config.sh .
2529         n="$tmp_n"
2530         c="$tmp_c"
2531         hint=previous
2532         ;;
2533 esac
2534 test "$override" && . ./optdef.sh
2535 myuname="$newmyuname"
2536
2537 : Restore computed paths
2538 for file in $loclist $trylist; do
2539         eval $file="\$_$file"
2540 done
2541
2542 cat << EOM
2543
2544 Configure uses the operating system name and version to set some defaults.
2545 The default value is probably right if the name rings a bell. Otherwise,
2546 since spelling matters for me, either accept the default or answer "none"
2547 to leave it blank.
2548
2549 EOM
2550 case "$osname" in
2551         ''|' ')
2552                 case "$hintfile" in
2553                 ''|' '|none) dflt=none ;;
2554                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2555                 esac
2556                 ;;
2557         *) dflt="$osname" ;;
2558 esac
2559 rp="Operating system name?"
2560 . ./myread
2561 case "$ans" in
2562 none)  osname='' ;;
2563 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2564 esac
2565 echo " "
2566 case "$osvers" in
2567         ''|' ')
2568                 case "$hintfile" in
2569                 ''|' '|none) dflt=none ;;
2570                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2571                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2572                         case "$dflt" in
2573                         ''|' ') dflt=none ;;
2574                         esac
2575                         ;;
2576                 esac
2577                 ;;
2578         *) dflt="$osvers" ;;
2579 esac
2580 rp="Operating system version?"
2581 . ./myread
2582 case "$ans" in
2583 none)  osvers='' ;;
2584 *) osvers="$ans" ;;
2585 esac
2586
2587
2588 . ./posthint.sh
2589
2590 : who configured the system
2591 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2592 cf_by=`(logname) 2>/dev/null`
2593 case "$cf_by" in
2594 "")
2595         cf_by=`(whoami) 2>/dev/null`
2596         case "$cf_by" in
2597         "") cf_by=unknown ;;
2598         esac ;;
2599 esac
2600
2601 : set up the script used to warn in case of inconsistency
2602 cat <<EOS >whoa
2603 $startsh
2604 EOS
2605 cat <<'EOSC' >>whoa
2606 dflt=y
2607 echo " "
2608 echo "*** WHOA THERE!!! ***" >&4
2609 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2610 rp="    Keep the $hint value?"
2611 . ./myread
2612 case "$ans" in
2613 y) td=$was; tu=$was;;
2614 esac
2615 EOSC
2616
2617 : function used to set $1 to $val
2618 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2619 case "$val$was" in
2620 $define$undef) . ./whoa; eval "$var=\$td";;
2621 $undef$define) . ./whoa; eval "$var=\$tu";;
2622 *) eval "$var=$val";;
2623 esac'
2624
2625 case "$usethreads" in
2626 $define|true|[yY]*)     dflt='y';;
2627 *) dflt='n';;
2628 esac
2629 cat <<EOM
2630
2631 Perl can be built to take advantage of threads on some systems.
2632 To do so, Configure can be run with -Dusethreads.
2633
2634 Note that threading is a highly experimental feature, and
2635 some known race conditions still remain.  If you choose to try
2636 it, be very sure to not actually deploy it for production
2637 purposes.  README.threads has more details, and is required
2638 reading if you enable threads.
2639
2640 If this doesn't make any sense to you, just accept the default '$dflt'.
2641 EOM
2642 rp='Build a threading Perl?'
2643 . ./myread
2644 case "$ans" in
2645 y|Y)    val="$define" ;;
2646 *)      val="$undef" ;;
2647 esac
2648 set usethreads
2649 eval $setvar
2650
2651 case "$usethreads" in
2652 $define)
2653         $cat <<EOM
2654
2655 As of 5.5.640, Perl has two different internal threading implementations,
2656 the 5.005 version (5005threads) and an interpreter-based version
2657 (ithreads) that has one interpreter per thread.  Both are very 
2658 experimental.  This arrangement exists to help developers work out
2659 which one is better.
2660
2661 If you're a casual user, you probably don't want interpreter-threads
2662 at this time.  There doesn't yet exist a way to create threads from
2663 within Perl in this model, i.e., "use Thread;" will NOT work.
2664 EOM
2665         : Default to ithreads unless overridden on command line or with
2666         : old config.sh
2667         dflt='y'
2668         case "$use5005threads" in
2669                 $define|true|[yY]*) dflt='n';;
2670         esac
2671         case "$useithreads" in
2672                 $undef|false|[nN]*) dflt='n';;
2673         esac
2674         rp='Use interpreter-based ithreads?'
2675         . ./myread
2676         case "$ans" in
2677         y|Y)    val="$define" ;;
2678         *)      val="$undef" ;;
2679         esac
2680         set useithreads
2681         eval $setvar
2682         : Now set use5005threads to the opposite value.
2683         case "$useithreads" in
2684         $define) val="$undef" ;;
2685         *) val="$define" ;;
2686         esac
2687         set use5005threads
2688         eval $setvar
2689         ;;
2690 *)
2691         useithreads="$undef"
2692         use5005threads="$undef"
2693         ;;
2694 esac
2695
2696 case "$d_oldpthreads" in
2697 '')     : Configure tests would be welcome here.  For now, assume undef.
2698         val="$undef" ;;
2699 *)      val="$d_oldpthreads" ;;
2700 esac
2701 set d_oldpthreads
2702 eval $setvar
2703
2704
2705 case "$usethreads" in
2706 "$define"|true|[yY]*)
2707 : Look for a hint-file generated 'call-back-unit'.  If the
2708 : user has specified that a threading perl is to be built,
2709 : we may need to set or change some other defaults.
2710         if $test -f usethreads.cbu; then
2711                 echo "Your platform has some specific hints for threaded builds, using them..."
2712                 . ./usethreads.cbu
2713         else
2714                 $cat <<EOM
2715 (Your platform doesn't have any specific hints for threaded builds.
2716  Assuming POSIX threads, then.)
2717 EOM
2718         fi
2719         ;;
2720 esac
2721
2722 cat <<EOM
2723
2724 Perl can be built so that multiple Perl interpreters can coexist
2725 within the same Perl executable.
2726 EOM
2727
2728 case "$useithreads" in
2729 $define)
2730         cat <<EOM
2731 This multiple interpreter support is required for interpreter-based threads.
2732 EOM
2733         val="$define"
2734         ;;
2735 *)      case "$usemultiplicity" in
2736         $define|true|[yY]*)     dflt='y';;
2737         *) dflt='n';;
2738         esac
2739         echo " "
2740         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2741         rp='Build Perl for multiplicity?'
2742         . ./myread
2743         case "$ans" in
2744         y|Y)    val="$define" ;;
2745         *)      val="$undef" ;;
2746         esac
2747         ;;
2748 esac
2749 set usemultiplicity
2750 eval $setvar
2751
2752 : determine where manual pages are on this system
2753 echo " "
2754 case "$sysman" in
2755 '') 
2756         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2757         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2758         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2759         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2760         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2761         sysman=`./loc . /usr/man/man1 $syspath`
2762         ;;
2763 esac
2764 if $test -d "$sysman"; then
2765         echo "System manual is in $sysman." >&4
2766 else
2767         echo "Could not find manual pages in source form." >&4
2768 fi
2769
2770 : see what memory models we can support
2771 case "$models" in
2772 '')
2773         $cat >pdp11.c <<'EOP'
2774 int main() {
2775 #ifdef pdp11
2776         exit(0);
2777 #else
2778         exit(1);
2779 #endif
2780 }
2781 EOP
2782         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2783         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2784                 dflt='unsplit split'
2785         else
2786                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2787                 case "$tans" in
2788                 X) dflt='none';;
2789                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2790                                 dflt='small'
2791                         else
2792                                 dflt=''
2793                         fi
2794                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2795                                 dflt="$dflt medium"
2796                         fi
2797                         if $test -d /lib/large || $test -d /usr/lib/large; then
2798                                 dflt="$dflt large"
2799                         fi
2800                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2801                                 dflt="$dflt huge"
2802                         fi
2803                 esac
2804         fi;;
2805 *) dflt="$models";;
2806 esac
2807 $cat <<EOM
2808  
2809 Some systems have different model sizes.  On most systems they are called
2810 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2811 split.  If your system doesn't support different memory models, say "none".
2812 If you wish to force everything to one memory model, say "none" here and
2813 put the appropriate flags later when it asks you for other cc and ld flags.
2814 Venix systems may wish to put "none" and let the compiler figure things out.
2815 (In the following question multiple model names should be space separated.)
2816
2817 The default for most systems is "none".
2818
2819 EOM
2820 rp="Which memory models are supported?"
2821 . ./myread
2822 models="$ans"
2823
2824 case "$models" in
2825 none)
2826         small=''
2827         medium=''
2828         large=''
2829         huge=''
2830         unsplit=''
2831         split=''
2832         ;;
2833 *split)
2834         case "$split" in
2835         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2836                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2837                         dflt='-i'
2838                 else
2839                         dflt='none'
2840                 fi;;
2841         *) dflt="$split";;
2842         esac
2843         rp="What flag indicates separate I and D space?"
2844         . ./myread
2845         tans="$ans"
2846         case "$tans" in
2847         none) tans='';;
2848         esac
2849         split="$tans"
2850         unsplit='';;
2851 *large*|*small*|*medium*|*huge*)
2852         case "$models" in
2853         *large*)
2854                 case "$large" in
2855                 '') dflt='-Ml';;
2856                 *) dflt="$large";;
2857                 esac
2858         rp="What flag indicates large model?"
2859         . ./myread
2860         tans="$ans"
2861         case "$tans" in
2862         none) tans='';
2863         esac
2864         large="$tans";;
2865         *) large='';;
2866         esac
2867         case "$models" in
2868         *huge*) case "$huge" in
2869                 '') dflt='-Mh';;
2870                 *) dflt="$huge";;
2871                 esac
2872                 rp="What flag indicates huge model?"
2873                 . ./myread
2874                 tans="$ans"
2875                 case "$tans" in
2876                 none) tans='';
2877                 esac
2878                 huge="$tans";;
2879         *) huge="$large";;
2880         esac
2881         case "$models" in
2882         *medium*) case "$medium" in
2883                 '') dflt='-Mm';;
2884                 *) dflt="$medium";;
2885                 esac
2886                 rp="What flag indicates medium model?"
2887                 . ./myread
2888                 tans="$ans"
2889                 case "$tans" in
2890                 none) tans='';
2891                 esac
2892                 medium="$tans";;
2893         *) medium="$large";;
2894         esac
2895         case "$models" in
2896         *small*) case "$small" in
2897                 '') dflt='none';;
2898                 *) dflt="$small";;
2899                 esac
2900                 rp="What flag indicates small model?"
2901                 . ./myread
2902                 tans="$ans"
2903                 case "$tans" in
2904                 none) tans='';
2905                 esac
2906                 small="$tans";;
2907         *) small='';;
2908         esac
2909         ;;
2910 *)
2911         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2912         ;;
2913 esac
2914 $rm -f pdp11.* pdp11
2915
2916 : make some quick guesses about what we are up against
2917 echo " "
2918 $echo $n "Hmm...  $c"
2919 echo exit 1 >bsd
2920 echo exit 1 >usg
2921 echo exit 1 >v7
2922 echo exit 1 >osf1
2923 echo exit 1 >eunice
2924 echo exit 1 >xenix
2925 echo exit 1 >venix
2926 echo exit 1 >os2
2927 d_bsd="$undef"
2928 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2929 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2930 then
2931         echo "Looks kind of like an OSF/1 system, but we'll see..."
2932         echo exit 0 >osf1
2933 elif test `echo abc | tr a-z A-Z` = Abc ; then
2934         xxx=`./loc addbib blurfl $pth`
2935         if $test -f $xxx; then
2936         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2937                 echo exit 0 >bsd
2938                 echo exit 0 >usg
2939         else
2940                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2941                         echo "Looks kind of like an extended USG system, but we'll see..."
2942                 else
2943                         echo "Looks kind of like a USG system, but we'll see..."
2944                 fi
2945                 echo exit 0 >usg
2946         fi
2947 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2948         echo "Looks kind of like a BSD system, but we'll see..."
2949         d_bsd="$define"
2950         echo exit 0 >bsd
2951 else
2952         echo "Looks kind of like a Version 7 system, but we'll see..."
2953         echo exit 0 >v7
2954 fi
2955 case "$eunicefix" in
2956 *unixtovms*)
2957         $cat <<'EOI'
2958 There is, however, a strange, musty smell in the air that reminds me of
2959 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2960 EOI
2961         echo exit 0 >eunice
2962         d_eunice="$define"
2963 : it so happens the Eunice I know will not run shell scripts in Unix format
2964         ;;
2965 *)
2966         echo " "
2967         echo "Congratulations.  You aren't running Eunice."
2968         d_eunice="$undef"
2969         ;;
2970 esac
2971 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2972 case "$p_" in
2973 :) ;;
2974 *)
2975         $cat <<'EOI'
2976 I have the feeling something is not exactly right, however...don't tell me...
2977 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2978 EOI
2979         echo exit 0 >os2
2980         ;;
2981 esac
2982 if test -f /xenix; then
2983         echo "Actually, this looks more like a XENIX system..."
2984         echo exit 0 >xenix
2985         d_xenix="$define"
2986 else
2987         echo " "
2988         echo "It's not Xenix..."
2989         d_xenix="$undef"
2990 fi
2991 chmod +x xenix
2992 $eunicefix xenix
2993 if test -f /venix; then
2994         echo "Actually, this looks more like a VENIX system..."
2995         echo exit 0 >venix
2996 else
2997         echo " "
2998         if ./xenix; then
2999                 : null
3000         else
3001                 echo "Nor is it Venix..."
3002         fi
3003 fi
3004 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3005 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3006 $rm -f foo
3007
3008 : see if we need a special compiler
3009 echo " "
3010 if ./usg; then
3011         case "$cc" in
3012         '') case "$Mcc" in
3013                 /*) dflt='Mcc';;
3014                 *) case "$large" in
3015                         -M*) dflt='cc';;
3016                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3017                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3018                                                 dflt='cc'
3019                                         else
3020                                                 dflt='cc -M'
3021                                         fi
3022                                 else
3023                                         dflt='cc'
3024                                 fi;;
3025                         esac;;
3026                 esac;;
3027         *)  dflt="$cc";;
3028         esac
3029         case "$dflt" in
3030         *M*)    $cat <<'EOM'
3031 On some older systems the default C compiler will not resolve multiple global
3032 references that happen to have the same name.  On some such systems the "Mcc"
3033 command may be used to force these to be resolved.  On other systems a "cc -M"
3034 command is required.  (Note that the -M flag on other systems indicates a
3035 memory model to use!) If you have the Gnu C compiler, you might wish to use
3036 that instead.
3037
3038 EOM
3039         ;;
3040         esac
3041         rp="Use which C compiler?"
3042         . ./myread
3043         cc="$ans"
3044 else
3045         case "$cc" in
3046         '') dflt=cc;;
3047         *) dflt="$cc";;
3048         esac
3049         rp="Use which C compiler?"
3050         . ./myread
3051         cc="$ans"
3052 fi
3053 : Look for a hint-file generated 'call-back-unit'.  Now that the
3054 : user has specified the compiler, we may need to set or change some
3055 : other defaults.
3056 if $test -f cc.cbu; then
3057     . ./cc.cbu
3058 fi
3059 echo " "
3060 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3061 $cat >gccvers.c <<EOM
3062 #include <stdio.h>
3063 int main() {
3064 #ifdef __GNUC__
3065 #ifdef __VERSION__
3066         printf("%s\n", __VERSION__);
3067 #else
3068         printf("%s\n", "1");
3069 #endif
3070 #endif
3071         exit(0);
3072 }
3073 EOM
3074 if $cc $ldflags -o gccvers gccvers.c; then
3075         gccversion=`./gccvers`
3076         case "$gccversion" in
3077         '') echo "You are not using GNU cc." ;;
3078         *)  echo "You are using GNU cc $gccversion."
3079             ;;
3080         esac
3081 else
3082         echo " "
3083         echo "*** WHOA THERE!!! ***" >&4
3084         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3085         case "$knowitall" in
3086         '')
3087         echo "    You'd better start hunting for one and let me know about it." >&4
3088                 exit 1
3089                 ;;
3090         esac
3091 fi
3092 $rm -f gccvers*
3093 case "$gccversion" in
3094 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3095 esac
3096
3097 : decide how portable to be.  Allow command line overrides.
3098 case "$d_portable" in
3099 "$undef") ;;
3100 *)      d_portable="$define" ;;
3101 esac
3102
3103 : set up shell script to do ~ expansion
3104 cat >filexp <<EOSS
3105 $startsh
3106 : expand filename
3107 case "\$1" in
3108  ~/*|~)
3109         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3110         ;;
3111  ~*)
3112         if $test -f /bin/csh; then
3113                 /bin/csh -f -c "glob \$1"
3114                 failed=\$?
3115                 echo ""
3116                 exit \$failed
3117         else
3118                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3119                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3120                 if $test ! -d "\$dir"; then
3121                         me=\`basename \$0\`
3122                         echo "\$me: can't locate home directory for: \$name" >&2
3123                         exit 1
3124                 fi
3125                 case "\$1" in
3126                 */*)
3127                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3128                         ;;
3129                 *)
3130                         echo \$dir
3131                         ;;
3132                 esac
3133         fi
3134         ;;
3135 *)
3136         echo \$1
3137         ;;
3138 esac
3139 EOSS
3140 chmod +x filexp
3141 $eunicefix filexp
3142
3143 : now set up to get a file name
3144 cat <<EOS >getfile
3145 $startsh
3146 EOS
3147 cat <<'EOSC' >>getfile
3148 tilde=''
3149 fullpath=''
3150 already=''
3151 skip=''
3152 none_ok=''
3153 exp_file=''
3154 nopath_ok=''
3155 orig_rp="$rp"
3156 orig_dflt="$dflt"
3157 case "$gfpth" in
3158 '') gfpth='.' ;;
3159 esac
3160
3161 case "$fn" in
3162 *\(*)
3163         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3164         fn=`echo $fn | sed 's/(.*)//'`
3165         ;;
3166 esac
3167
3168 case "$fn" in
3169 *:*)
3170         loc_file=`expr $fn : '.*:\(.*\)'`
3171         fn=`expr $fn : '\(.*\):.*'`
3172         ;;
3173 esac
3174
3175 case "$fn" in
3176 *~*) tilde=true;;
3177 esac
3178 case "$fn" in
3179 */*) fullpath=true;;
3180 esac
3181 case "$fn" in
3182 *+*) skip=true;;
3183 esac
3184 case "$fn" in
3185 *n*) none_ok=true;;
3186 esac
3187 case "$fn" in
3188 *e*) exp_file=true;;
3189 esac
3190 case "$fn" in
3191 *p*) nopath_ok=true;;
3192 esac
3193
3194 case "$fn" in
3195 *f*) type='File';;
3196 *d*) type='Directory';;
3197 *l*) type='Locate';;
3198 esac
3199
3200 what="$type"
3201 case "$what" in
3202 Locate) what='File';;
3203 esac
3204
3205 case "$exp_file" in
3206 '')
3207         case "$d_portable" in
3208         "$define") ;;
3209         *) exp_file=true;;
3210         esac
3211         ;;
3212 esac
3213
3214 cd ..
3215 while test "$type"; do
3216         redo=''
3217         rp="$orig_rp"
3218         dflt="$orig_dflt"
3219         case "$tilde" in
3220         true) rp="$rp (~name ok)";;
3221         esac
3222         . UU/myread
3223         if test -f UU/getfile.ok && \
3224                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3225         then
3226                 value="$ans"
3227                 ansexp="$ans"
3228                 break
3229         fi
3230         case "$ans" in
3231         none)
3232                 value=''
3233                 ansexp=''
3234                 case "$none_ok" in
3235                 true) type='';;
3236                 esac
3237                 ;;
3238         *)
3239                 case "$tilde" in
3240                 '') value="$ans"
3241                         ansexp="$ans";;
3242                 *)
3243                         value=`UU/filexp $ans`
3244                         case $? in
3245                         0)
3246                                 if test "$ans" != "$value"; then
3247                                         echo "(That expands to $value on this system.)"
3248                                 fi
3249                                 ;;
3250                         *) value="$ans";;
3251                         esac
3252                         ansexp="$value"
3253                         case "$exp_file" in
3254                         '') value="$ans";;
3255                         esac
3256                         ;;
3257                 esac
3258                 case "$fullpath" in
3259                 true)
3260                         case "$ansexp" in
3261                         /*) value="$ansexp" ;;
3262                         *)
3263                                 redo=true
3264                                 case "$already" in
3265                                 true)
3266                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3267                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3268                                         ;;
3269                                 *)
3270                                 echo "Please give a full path name, starting with slash." >&4
3271                                         case "$tilde" in
3272                                         true)
3273                                 echo "Note that using ~name is ok provided it expands well." >&4
3274                                                 already=true
3275                                                 ;;
3276                                         esac
3277                                 esac
3278                                 ;;
3279                         esac
3280                         ;;
3281                 esac
3282                 case "$redo" in
3283                 '')
3284                         case "$type" in
3285                         File)
3286                                 for fp in $gfpth; do
3287                                         if test "X$fp" = X.; then
3288                                             pf="$ansexp"
3289                                         else    
3290                                             pf="$fp/$ansexp"
3291                                         fi
3292                                         if test -f "$pf"; then
3293                                                 type=''
3294                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3295                                         then
3296                                                 echo "($value is not a plain file, but that's ok.)"
3297                                                 type=''
3298                                         fi
3299                                         if test X"$type" = X; then
3300                                             value="$pf"
3301                                             break
3302                                         fi
3303                                 done
3304                                 ;;
3305                         Directory)
3306                                 for fp in $gfpth; do
3307                                         if test "X$fp" = X.; then
3308                                             pf="$ansexp"
3309                                         else    
3310                                             pf="$fp/$ansexp"
3311                                         fi
3312                                         if test -d "$pf"; then
3313                                                 type=''
3314                                                 value="$pf"
3315                                                 break
3316                                         fi
3317                                 done
3318                                 ;;
3319                         Locate)
3320                                 if test -d "$ansexp"; then
3321                                         echo "(Looking for $loc_file in directory $value.)"
3322                                         value="$value/$loc_file"
3323                                         ansexp="$ansexp/$loc_file"
3324                                 fi
3325                                 if test -f "$ansexp"; then
3326                                         type=''
3327                                 fi
3328                                 case "$nopath_ok" in
3329                                 true)   case "$value" in
3330                                         */*) ;;
3331                                         *)      echo "Assuming $value will be in people's path."
3332                                                 type=''
3333                                                 ;;
3334                                         esac
3335                                         ;;
3336                                 esac
3337                                 ;;
3338                         esac
3339
3340                         case "$skip" in
3341                         true) type='';
3342                         esac
3343
3344                         case "$type" in
3345                         '') ;;
3346                         *)
3347                                 if test "$fastread" = yes; then
3348                                         dflt=y
3349                                 else
3350                                         dflt=n
3351                                 fi
3352                                 rp="$what $value doesn't exist.  Use that name anyway?"
3353                                 . UU/myread
3354                                 dflt=''
3355                                 case "$ans" in
3356                                 y*) type='';;
3357                                 *) echo " ";;
3358                                 esac
3359                                 ;;
3360                         esac
3361                         ;;
3362                 esac
3363                 ;;
3364         esac
3365 done
3366 cd UU
3367 ans="$value"
3368 rp="$orig_rp"
3369 dflt="$orig_dflt"
3370 rm -f getfile.ok
3371 test "X$gfpthkeep" != Xy && gfpth=""
3372 EOSC
3373
3374 : What should the include directory be ?
3375 echo " "
3376 $echo $n "Hmm...  $c"
3377 dflt='/usr/include'
3378 incpath=''
3379 mips_type=''
3380 if $test -f /bin/mips && /bin/mips; then
3381         echo "Looks like a MIPS system..."
3382         $cat >usr.c <<'EOCP'
3383 #ifdef SYSTYPE_BSD43
3384 /bsd43
3385 #endif
3386 EOCP
3387         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3388                 dflt='/bsd43/usr/include'
3389                 incpath='/bsd43'
3390                 mips_type='BSD 4.3'
3391         else
3392                 mips_type='System V'
3393         fi
3394         $rm -f usr.c usr.out
3395         echo "and you're compiling with the $mips_type compiler and libraries."
3396         xxx_prompt=y
3397         echo "exit 0" >mips
3398 else
3399         echo "Doesn't look like a MIPS system."
3400         xxx_prompt=n
3401         echo "exit 1" >mips
3402 fi
3403 chmod +x mips
3404 $eunicefix mips
3405 case "$usrinc" in
3406 '') ;;
3407 *) dflt="$usrinc";;
3408 esac
3409 case "$xxx_prompt" in
3410 y)      fn=d/
3411         echo " "
3412         rp='Where are the include files you want to use?'
3413         . ./getfile
3414         usrinc="$ans"
3415         ;;
3416 *)      usrinc="$dflt"
3417         ;;
3418 esac
3419
3420 : see how we invoke the C preprocessor
3421 echo " "
3422 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3423 cat <<'EOT' >testcpp.c
3424 #define ABC abc
3425 #define XYZ xyz
3426 ABC.XYZ
3427 EOT
3428 cd ..
3429 if test ! -f cppstdin; then
3430         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3431                 # AIX cc -E doesn't show the absolute headerfile
3432                 # locations but we'll cheat by using the -M flag.
3433                 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
3434         else
3435                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3436         fi
3437 else
3438         echo "Keeping your $hint cppstdin wrapper."
3439 fi
3440 chmod 755 cppstdin
3441 wrapper=`pwd`/cppstdin
3442 ok='false'
3443 cd UU
3444
3445 if $test "X$cppstdin" != "X" && \
3446         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3447         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3448 then
3449         echo "You used to use $cppstdin $cppminus so we'll use that again."
3450         case "$cpprun" in
3451         '') echo "But let's see if we can live without a wrapper..." ;;
3452         *)
3453                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3454                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3455                 then
3456                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3457                         ok='true'
3458                 else
3459                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3460                 fi
3461                 ;;
3462         esac
3463 else
3464         case "$cppstdin" in
3465         '') ;;
3466         *)
3467                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3468                 ;;
3469         esac
3470 fi
3471
3472 if $ok; then
3473         : nothing
3474 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3475         $cc -E <testcpp.c >testcpp.out 2>&1; \
3476         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3477         echo "Yup, it does."
3478         x_cpp="$cc -E"
3479         x_minus='';
3480 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3481         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3482         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3483         echo "Yup, it does."
3484         x_cpp="$cc -E"
3485         x_minus='-';
3486 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3487         $cc -P <testcpp.c >testcpp.out 2>&1; \
3488         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3489         echo "Yipee, that works!"
3490         x_cpp="$cc -P"
3491         x_minus='';
3492 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3493         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "At long last!"
3496         x_cpp="$cc -P"
3497         x_minus='-';
3498 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3499         $cpp <testcpp.c >testcpp.out 2>&1; \
3500         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3501         echo "It works!"
3502         x_cpp="$cpp"
3503         x_minus='';
3504 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3505         $cpp - <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "Hooray, it works!  I was beginning to wonder."
3508         x_cpp="$cpp"
3509         x_minus='-';
3510 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3511         $wrapper <testcpp.c >testcpp.out 2>&1; \
3512         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3513         x_cpp="$wrapper"
3514         x_minus=''
3515         echo "Eureka!"
3516 else
3517         dflt=''
3518         rp="No dice.  I can't find a C preprocessor.  Name one:"
3519         . ./myread
3520         x_cpp="$ans"
3521         x_minus=''
3522         $x_cpp <testcpp.c >testcpp.out 2>&1
3523         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3524                 echo "OK, that will do." >&4
3525         else
3526 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3527                 exit 1
3528         fi
3529 fi
3530
3531 case "$ok" in
3532 false)
3533         cppstdin="$x_cpp"
3534         cppminus="$x_minus"
3535         cpprun="$x_cpp"
3536         cpplast="$x_minus"
3537         set X $x_cpp
3538         shift
3539         case "$1" in
3540         "$cpp")
3541                 echo "Perhaps can we force $cc -E using a wrapper..."
3542                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3543                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3544                 then
3545                         echo "Yup, we can."
3546                         cppstdin="$wrapper"
3547                         cppminus='';
3548                 else
3549                         echo "Nope, we'll have to live without it..."
3550                 fi
3551                 ;;
3552         esac
3553         case "$cpprun" in
3554         "$wrapper")
3555                 cpprun=''
3556                 cpplast=''
3557                 ;;
3558         esac
3559         ;;
3560 esac
3561
3562 case "$cppstdin" in
3563 "$wrapper"|'cppstdin') ;;
3564 *) $rm -f $wrapper;;
3565 esac
3566 $rm -f testcpp.c testcpp.out
3567
3568 : Set private lib path
3569 case "$plibpth" in
3570 '') if ./mips; then
3571                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3572         fi;;
3573 esac
3574 case "$libpth" in
3575 ' ') dlist='';;
3576 '') dlist="$loclibpth $plibpth $glibpth";;
3577 *) dlist="$libpth";;
3578 esac
3579
3580 : Now check and see which directories actually exist, avoiding duplicates
3581 libpth=''
3582 for xxx in $dlist
3583 do
3584     if $test -d $xxx; then
3585                 case " $libpth " in
3586                 *" $xxx "*) ;;
3587                 *) libpth="$libpth $xxx";;
3588                 esac
3589     fi
3590 done
3591 $cat <<'EOM'
3592
3593 Some systems have incompatible or broken versions of libraries.  Among
3594 the directories listed in the question below, please remove any you
3595 know not to be holding relevant libraries, and add any that are needed.
3596 Say "none" for none.
3597
3598 EOM
3599 case "$libpth" in
3600 '') dflt='none';;
3601 *)
3602         set X $libpth
3603         shift
3604         dflt=${1+"$@"}
3605         ;;
3606 esac
3607 rp="Directories to use for library searches?"
3608 . ./myread
3609 case "$ans" in
3610 none) libpth=' ';;
3611 *) libpth="$ans";;
3612 esac
3613
3614 : compute shared library extension
3615 case "$so" in
3616 '')
3617         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3618                 dflt='sl'
3619         else
3620                 dflt='so'
3621         fi
3622         ;;
3623 *) dflt="$so";;
3624 esac
3625 $cat <<EOM
3626
3627 On some systems, shared libraries may be available.  Answer 'none' if
3628 you want to suppress searching of shared libraries for the remainder
3629 of this configuration.
3630
3631 EOM
3632 rp='What is the file extension used for shared libraries?'
3633 . ./myread
3634 so="$ans"
3635
3636 : Define several unixisms.
3637 : Hints files or command line option can be used to override them.
3638 : The convoluted testing is in case hints files set either the old
3639 : or the new name.
3640 case "$_exe" in
3641 '')     case "$exe_ext" in
3642     '') ;;
3643         *)      _exe="$exe_ext" ;;
3644         esac
3645         ;;
3646 esac
3647 case "$_a" in
3648 '')     case "$lib_ext" in
3649     '') _a='.a';;
3650         *)      _a="$lib_ext" ;;
3651         esac
3652         ;;
3653 esac
3654 case "$_o" in
3655 '') case "$obj_ext" in
3656         '')     _o='.o';;
3657         *)      _o="$obj_ext";;
3658         esac
3659         ;;
3660 esac
3661 case "$p_" in
3662 '') case "$path_sep" in
3663         '')     p_=':';;
3664         *)      p_="$path_sep";;
3665         esac
3666         ;;
3667 esac
3668 exe_ext=$_exe
3669 lib_ext=$_a
3670 obj_ext=$_o
3671 path_sep=$p_
3672
3673 : Which makefile gets called first.  This is used by make depend.
3674 case "$firstmakefile" in
3675 '') firstmakefile='makefile';;
3676 esac
3677
3678 case "$usesocks" in
3679 $define|true|[yY]*)     dflt='y';;
3680 *) dflt='n';;
3681 esac
3682 cat <<EOM
3683
3684 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3685 Configure must be run with -Dusesocks.
3686
3687 If this doesn't make any sense to you, just accept the default '$dflt'.
3688 EOM
3689 rp='Build Perl for SOCKS?'
3690 . ./myread
3691 case "$ans" in
3692 y|Y)    val="$define" ;;     
3693 *)      val="$undef" ;;
3694 esac
3695 set usesocks
3696 eval $setvar
3697
3698 : Looking for optional libraries
3699 echo " "
3700 echo "Checking for optional libraries..." >&4
3701 case "$libs" in
3702 ' '|'') dflt='';;
3703 *) dflt="$libs";;
3704 esac
3705 case "$libswanted" in
3706 '') libswanted='c_s';;
3707 esac
3708 case "$usesocks" in
3709 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3710 esac
3711 libsfound=''
3712 libsfiles=''
3713 libsdirs=''
3714 libspath=''
3715 for thisdir in $libpth $xlibpth; do
3716   test -d $thisdir && libspath="$libspath $thisdir"
3717 done
3718 for thislib in $libswanted; do
3719         for thisdir in $libspath; do
3720             xxx=''
3721             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3722                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3723                 $test -f "$xxx" && eval $libscheck
3724                 $test -f "$xxx" && libstyle=shared
3725             fi
3726             if test ! -f "$xxx"; then
3727                 xxx=$thisdir/lib$thislib.$so
3728                 $test -f "$xxx" && eval $libscheck
3729                 $test -f "$xxx" && libstyle=shared
3730             fi  
3731             if test ! -f "$xxx"; then
3732                 xxx=$thisdir/lib$thislib$_a
3733                 $test -f "$xxx" && eval $libscheck
3734                 $test -f "$xxx" && libstyle=static
3735             fi
3736             if test ! -f "$xxx"; then
3737                 xxx=$thisdir/$thislib$_a
3738                 $test -f "$xxx" && eval $libscheck
3739                 $test -f "$xxx" && libstyle=static
3740             fi
3741             if test ! -f "$xxx"; then
3742                 xxx=$thisdir/lib${thislib}_s$_a
3743                 $test -f "$xxx" && eval $libscheck
3744                 $test -f "$xxx" && libstyle=static
3745                 $test -f "$xxx" && thislib=${thislib}_s
3746             fi
3747             if test ! -f "$xxx"; then
3748                 xxx=$thisdir/Slib$thislib$_a
3749                 $test -f "$xxx" && eval $libscheck
3750                 $test -f "$xxx" && libstyle=static
3751             fi
3752             if $test -f "$xxx"; then
3753                 case "$libstyle" in
3754                 shared) echo "Found -l$thislib (shared)." ;;
3755                 static) echo "Found -l$thislib." ;;
3756                 *)      echo "Found -l$thislib ($libstyle)." ;;
3757                 esac
3758                 case " $dflt " in
3759                 *"-l$thislib "*);;
3760                 *) dflt="$dflt -l$thislib"
3761                    libsfound="$libsfound $xxx"
3762                    yyy=`basename $xxx`
3763                    libsfiles="$libsfiles $yyy"
3764                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3765                    case " $libsdirs " in
3766                    *" $yyy "*) ;;
3767                    *) libsdirs="$libsdirs $yyy" ;;
3768                    esac
3769                    ;;
3770                 esac
3771                 break
3772             fi  
3773         done
3774         if $test ! -f "$xxx"; then
3775             echo "No -l$thislib."
3776         fi
3777 done
3778 set X $dflt
3779 shift
3780 dflt="$*"
3781 case "$libs" in
3782 '') dflt="$dflt";;
3783 *) dflt="$libs";;
3784 esac
3785 case "$dflt" in
3786 ' '|'') dflt='none';;
3787 esac
3788
3789 $cat <<EOM
3790
3791 In order to compile $package on your machine, a number of libraries
3792 are usually needed.  Include any other special libraries here as well.
3793 Say "none" for none.  The default list is almost always right.
3794 EOM
3795
3796 echo " "
3797 rp="What libraries to use?"
3798 . ./myread
3799 case "$ans" in
3800 none) libs=' ';;
3801 *) libs="$ans";;
3802 esac
3803
3804 : determine optimization, if desired, or use for debug flag also
3805 case "$optimize" in
3806 ' '|$undef) dflt='none';;
3807 '') dflt='-O';;
3808 *) dflt="$optimize";;
3809 esac
3810 $cat <<EOH
3811
3812 By default, $package compiles with the -O flag to use the optimizer.
3813 Alternately, you might want to use the symbolic debugger, which uses
3814 the -g flag (on traditional Unix systems).  Either flag can be
3815 specified here.  To use neither flag, specify the word "none".
3816
3817 EOH
3818 rp="What optimizer/debugger flag should be used?"
3819 . ./myread
3820 optimize="$ans"
3821 case "$optimize" in
3822 'none') optimize=" ";;
3823 esac
3824
3825 dflt=''
3826 : We will not override a previous value, but we might want to
3827 : augment a hint file
3828 case "$hint" in
3829 default|recommended)
3830         case "$gccversion" in
3831         1*) dflt='-fpcc-struct-return' ;;
3832         esac
3833         case "$optimize" in
3834         *-g*) dflt="$dflt -DDEBUGGING";;
3835         esac
3836         case "$gccversion" in
3837         2*) if test -d /etc/conf/kconfig.d &&
3838                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3839                 then
3840                         dflt="$dflt -posix"
3841                 fi
3842                 ;;
3843         esac
3844         case "$gccversion" in
3845         1*) ;;
3846         2.[0-8]*) ;;
3847         ?*)     echo " "
3848                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3849                 echo 'int main(void) { return 0; }' > gcctest.c
3850                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3851                         echo "Yes, it does." 2>&1
3852                         case "$ccflags" in
3853                         *strict-aliasing*) 
3854                                 echo "Leaving current flags $ccflags alone." 2>&1
3855                                 ;;
3856                         *) dflt="$dflt -fno-strict-aliasing" ;;
3857                         esac
3858                 else
3859                         echo "Nope, it doesn't, but that's ok." 2>&1
3860                 fi
3861                 ;;
3862         esac
3863         ;;
3864 esac
3865
3866 case "$mips_type" in
3867 *BSD*|'') inclwanted="$locincpth $usrinc";;
3868 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3869 esac
3870 for thisincl in $inclwanted; do
3871         if $test -d $thisincl; then
3872                 if $test x$thisincl != x$usrinc; then
3873                         case "$dflt" in
3874                         *$thisincl*);;
3875                         *) dflt="$dflt -I$thisincl";;
3876                         esac
3877                 fi
3878         fi
3879 done
3880
3881 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3882         xxx=true;
3883 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3884         xxx=true;
3885 else
3886         xxx=false;
3887 fi;
3888 if $xxx; then
3889         case "$dflt" in
3890         *$2*);;
3891         *) dflt="$dflt -D$2";;
3892         esac;
3893 fi'
3894
3895 set signal.h LANGUAGE_C; eval $inctest
3896
3897 case "$usesocks" in
3898 $define)
3899         ccflags="$ccflags -DSOCKS"
3900         ;;
3901 esac
3902
3903 case "$hint" in
3904 default|recommended) dflt="$ccflags $dflt" ;;
3905 *) dflt="$ccflags";;
3906 esac
3907
3908 case "$dflt" in
3909 ''|' ') dflt=none;;
3910 esac
3911 $cat <<EOH
3912
3913 Your C compiler may want other flags.  For this question you should include
3914 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3915 but you should NOT include libraries or ld flags like -lwhatever.  If you
3916 want $package to honor its debug switch, you should include -DDEBUGGING here.
3917 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3918
3919 To use no flags, specify the word "none".
3920
3921 EOH
3922 set X $dflt
3923 shift
3924 dflt=${1+"$@"}
3925 rp="Any additional cc flags?"
3926 . ./myread
3927 case "$ans" in
3928 none) ccflags='';;
3929 *) ccflags="$ans";;
3930 esac
3931
3932 : the following weeds options from ccflags that are of no interest to cpp
3933 cppflags="$ccflags"
3934 case "$gccversion" in
3935 1*) cppflags="$cppflags -D__GNUC__"
3936 esac
3937 case "$mips_type" in
3938 '');;
3939 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3940 esac
3941 case "$cppflags" in
3942 '');;
3943 *)
3944         echo " "
3945         echo "Let me guess what the preprocessor flags are..." >&4
3946         set X $cppflags
3947         shift
3948         cppflags=''
3949         $cat >cpp.c <<'EOM'
3950 #define BLURFL foo
3951
3952 BLURFL xx LFRULB
3953 EOM
3954         previous=''
3955         for flag in $*
3956         do
3957                 case "$flag" in
3958                 -*) ftry="$flag";;
3959                 *) ftry="$previous $flag";;
3960                 esac
3961                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3962                         >cpp1.out 2>/dev/null && \
3963                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3964                         >cpp2.out 2>/dev/null && \
3965                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3966                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3967                 then
3968                         cppflags="$cppflags $ftry"
3969                         previous=''
3970                 else
3971                         previous="$flag"
3972                 fi
3973         done
3974         set X $cppflags
3975         shift
3976         cppflags=${1+"$@"}
3977         case "$cppflags" in
3978         *-*)  echo "They appear to be: $cppflags";;
3979         esac
3980         $rm -f cpp.c cpp?.out
3981         ;;
3982 esac
3983
3984 : flags used in final linking phase
3985 case "$ldflags" in
3986 '') if ./venix; then
3987                 dflt='-i -z'
3988         else
3989                 dflt=''
3990         fi
3991         case "$ccflags" in
3992         *-posix*) dflt="$dflt -posix" ;;
3993         esac
3994         ;;
3995 *) dflt="$ldflags";;
3996 esac
3997
3998 : Try to guess additional flags to pick up local libraries.
3999 for thislibdir in $libpth; do
4000         case " $loclibpth " in
4001         *" $thislibdir "*)
4002                 case "$dflt " in 
4003                 *"-L$thislibdir "*) ;;
4004                 *)  dflt="$dflt -L$thislibdir" ;;
4005                 esac
4006                 ;;
4007         esac
4008 done
4009
4010 case "$dflt" in
4011 '') dflt='none' ;;
4012 esac
4013
4014 $cat <<EOH
4015
4016 Your C linker may need flags.  For this question you should
4017 include -L/whatever and any other flags used by the C linker, but you
4018 should NOT include libraries like -lwhatever.
4019
4020 Make sure you include the appropriate -L/path flags if your C linker
4021 does not normally search all of the directories you specified above,
4022 namely
4023         $libpth
4024 To use no flags, specify the word "none".
4025
4026 EOH
4027
4028 rp="Any additional ld flags (NOT including libraries)?"
4029 . ./myread
4030 case "$ans" in
4031 none) ldflags='';;
4032 *) ldflags="$ans";;
4033 esac
4034 rmlist="$rmlist pdp11"
4035
4036 : coherency check
4037 echo " "
4038 echo "Checking your choice of C compiler and flags for coherency..." >&4
4039 $cat > try.c <<'EOF'
4040 #include <stdio.h>
4041 int main() { printf("Ok\n"); exit(0); }
4042 EOF
4043 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4044 shift
4045 $cat >try.msg <<'EOM'
4046 I've tried to compile and run the following simple program:
4047
4048 EOM
4049 $cat try.c >> try.msg
4050
4051 $cat >> try.msg <<EOM
4052
4053 I used the command:
4054
4055         $*
4056         ./try
4057
4058 and I got the following output:
4059
4060 EOM
4061 dflt=y
4062 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4063         if sh -c './try' >>try.msg 2>&1; then
4064                 xxx=`./try`
4065                 case "$xxx" in
4066                 "Ok") dflt=n ;;
4067                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4068                         case " $libs " in
4069                         *" -lsfio "*)
4070                                 cat >> try.msg <<'EOQS'
4071 If $libs contains -lsfio, and sfio is mis-configured, then it
4072 sometimes (apparently) runs and exits with a 0 status, but with no
4073 output!  It may have to do with sfio's use of _exit vs. exit.
4074
4075 EOQS
4076                                 rp="You have a big problem.  Shall I abort Configure"
4077                                 dflt=y
4078                                 ;;
4079                         esac
4080                         ;;
4081                 esac
4082         else
4083                 echo "The program compiled OK, but exited with status $?." >>try.msg
4084                 rp="You have a problem.  Shall I abort Configure"
4085                 dflt=y
4086         fi
4087 else
4088         echo "I can't compile the test program." >>try.msg
4089         rp="You have a BIG problem.  Shall I abort Configure"
4090         dflt=y
4091 fi
4092 case "$dflt" in
4093 y)
4094         $cat try.msg >&4
4095         case "$knowitall" in
4096         '')
4097                 echo "(The supplied flags or libraries might be incorrect.)"
4098                 ;;
4099         *) dflt=n;;
4100         esac
4101         echo " "
4102         . ./myread
4103         case "$ans" in
4104         n*|N*) ;;
4105         *)      echo "Ok.  Stopping Configure." >&4
4106                 exit 1
4107                 ;;
4108         esac
4109         ;;
4110 n) echo "OK, that should do.";;
4111 esac
4112 $rm -f try try.* core
4113
4114 : define an is-a-typedef? function
4115 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4116 case "$inclist" in
4117 "") inclist="sys/types.h";;
4118 esac;
4119 eval "varval=\$$var";
4120 case "$varval" in
4121 "")
4122         $rm -f temp.c;
4123         for inc in $inclist; do
4124                 echo "#include <$inc>" >>temp.c;
4125         done;
4126         echo "#ifdef $type" >> temp.c;
4127         echo "printf(\"We have $type\");" >> temp.c;
4128         echo "#endif" >> temp.c;
4129         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4130         if $contains $type temp.E >/dev/null 2>&1; then
4131                 eval "$var=\$type";
4132         else
4133                 eval "$var=\$def";
4134         fi;
4135         $rm -f temp.?;;
4136 *) eval "$var=\$varval";;
4137 esac'
4138
4139 : define an is-a-typedef? function that prompts if the type is not available.
4140 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4141 case "$inclist" in
4142 "") inclist="sys/types.h";;
4143 esac;
4144 eval "varval=\$$var";
4145 case "$varval" in
4146 "")
4147         $rm -f temp.c;
4148         for inc in $inclist; do
4149                 echo "#include <$inc>" >>temp.c;
4150         done;
4151         echo "#ifdef $type" >> temp.c;
4152         echo "printf(\"We have $type\");" >> temp.c;
4153         echo "#endif" >> temp.c;
4154         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4155         echo " " ;
4156         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4157         if $contains $type temp.E >/dev/null 2>&1; then
4158                 echo "$type found." >&4;
4159                 eval "$var=\$type";
4160         else
4161                 echo "$type NOT found." >&4;
4162                 dflt="$def";
4163                 . ./myread ;
4164                 eval "$var=\$ans";
4165         fi;
4166         $rm -f temp.?;;
4167 *) eval "$var=\$varval";;
4168 esac'
4169
4170 : define a shorthand compile call
4171 compile='
4172 mc_file=$1;
4173 shift;
4174 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4175 : define a shorthand compile call for compilations that should be ok.
4176 compile_ok='
4177 mc_file=$1;
4178 shift;
4179 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4180
4181 : check for lengths of integral types
4182 echo " "
4183 case "$intsize" in
4184 '')
4185         echo "Checking to see how big your integers are..." >&4
4186         $cat >intsize.c <<'EOCP'
4187 #include <stdio.h>
4188 int main()
4189 {
4190         printf("intsize=%d;\n", (int)sizeof(int));
4191         printf("longsize=%d;\n", (int)sizeof(long));
4192         printf("shortsize=%d;\n", (int)sizeof(short));
4193         exit(0);
4194 }
4195 EOCP
4196         set intsize
4197         if eval $compile_ok && ./intsize > /dev/null; then
4198                 eval `./intsize`
4199                 echo "Your integers are $intsize bytes long."
4200                 echo "Your long integers are $longsize bytes long."
4201                 echo "Your short integers are $shortsize bytes long."
4202         else
4203                 $cat >&4 <<EOM
4204 !
4205 Help! I can't compile and run the intsize test program: please enlighten me!
4206 (This is probably a misconfiguration in your system or libraries, and
4207 you really ought to fix it.  Still, I'll try anyway.)
4208 !
4209 EOM
4210                 dflt=4
4211                 rp="What is the size of an integer (in bytes)?"
4212                 . ./myread
4213                 intsize="$ans"
4214                 dflt=$intsize
4215                 rp="What is the size of a long integer (in bytes)?"
4216                 . ./myread
4217                 longsize="$ans"
4218                 dflt=2
4219                 rp="What is the size of a short integer (in bytes)?"
4220                 . ./myread
4221                 shortsize="$ans"
4222         fi
4223         ;;
4224 esac
4225 $rm -f intsize intsize.*
4226
4227 : see what type lseek is declared as in the kernel
4228 rp="What is the type used for lseek's offset on this system?"
4229 set off_t lseektype long stdio.h sys/types.h
4230 eval $typedef_ask
4231
4232 echo " "
4233 echo "Checking to see how big your file offsets are..." >&4
4234 $cat >try.c <<EOCP
4235 #include <sys/types.h>
4236 #include <stdio.h>
4237 int main()
4238 {
4239     printf("%d\n", (int)sizeof($lseektype));
4240     return(0); 
4241 }
4242 EOCP
4243 set try
4244 if eval $compile_ok; then
4245         lseeksize=`./try`
4246         echo "Your file offsets are $lseeksize bytes long."
4247 else
4248         dflt=$longsize
4249         echo " "
4250         echo "(I can't seem to compile the test program.  Guessing...)"
4251         rp="What is the size of your file offsets (in bytes)?"
4252         . ./myread
4253         lseeksize="$ans"
4254 fi
4255 $rm -f try.c try
4256
4257 : see what type file positions are declared as in the library
4258 rp="What is the type for file position used by fsetpos()?"
4259 set fpos_t fpostype long stdio.h sys/types.h
4260 eval $typedef_ask
4261
4262 echo " "
4263 case "$fpostype" in
4264 *_t) zzz="$fpostype"    ;;
4265 *)   zzz="fpos_t"       ;;
4266 esac
4267 echo "Checking the size of $zzz..." >&4 
4268 cat > try.c <<EOCP
4269 #include <sys/types.h>
4270 #include <stdio.h>
4271 int main() {
4272     printf("%d\n", (int)sizeof($fpostype));
4273     exit(0);
4274 }
4275 EOCP
4276 set try
4277 if eval $compile_ok; then
4278         yyy=`./try`
4279         case "$yyy" in
4280         '')     fpossize=4
4281                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4282                 ;;
4283         *)      fpossize=$yyy
4284                 echo "Your $zzz is $fpossize bytes long."
4285                 ;;
4286         esac
4287 else
4288         dflt="$longsize"
4289         echo " " >&4
4290         echo "(I can't compile the test program.  Guessing...)" >&4
4291         rp="What is the size of your file positions (in bytes)?"
4292         . ./myread
4293         fpossize="$ans"
4294 fi
4295
4296
4297
4298 # Backward compatibility (uselfs is deprecated).
4299 case "$uselfs" in
4300 "$define"|true|[yY]*)
4301         cat <<EOM >&4
4302
4303 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4304 EOM
4305         uselargefiles="$define"
4306         ;;
4307 esac                          
4308
4309 case "$lseeksize:$fpossize" in
4310 8:8) cat <<EOM
4311
4312 You can have files larger than 2 gigabytes.
4313 EOM
4314    val="$define" ;;
4315 *)    case "$uselargefiles" in
4316    "$undef"|false|[nN]*) dflt='n' ;;
4317    *)   dflt='y' ;;
4318    esac
4319    cat <<EOM
4320
4321 Perl can be built to understand large files (files larger than 2 gigabytes)
4322 on some systems.  To do so, Configure can be run with -Duselargefiles.
4323
4324 If this doesn't make any sense to you, just accept the default '$dflt'.
4325 EOM
4326    rp='Try to understand large files, if available?'
4327    . ./myread
4328    case "$ans" in
4329    y|Y)         val="$define" ;;
4330    *)           val="$undef"  ;;
4331    esac
4332    ;;
4333 esac
4334 set uselargefiles
4335 eval $setvar
4336 case "$uselargefiles" in
4337 "$define")
4338 : Look for a hint-file generated 'call-back-unit'.  If the
4339 : user has specified that a large files perl is to be built,
4340 : we may need to set or change some other defaults.
4341         if $test -f uselargefiles.cbu; then
4342                 echo "Your platform has some specific hints for large file builds, using them..."
4343                 . ./uselargefiles.cbu
4344                 echo " "
4345                 echo "Rechecking to see how big your file offsets are..." >&4
4346                 $cat >try.c <<EOCP
4347 #include <sys/types.h>
4348 #include <stdio.h>
4349 int main()
4350 {
4351     printf("%d\n", (int)sizeof($lseektype));
4352     return(0); 
4353 }
4354 EOCP
4355                 set try
4356                 if eval $compile_ok; then
4357                         lseeksize=`./try`
4358                         $echo "Your file offsets are now $lseeksize bytes long."
4359                 else
4360                         dflt="$lseeksize"
4361                         echo " "
4362                         echo "(I can't seem to compile the test program.  Guessing...)"
4363                         rp="What is the size of your file offsets (in bytes)?"
4364                         . ./myread
4365                         lseeksize="$ans"
4366                 fi
4367                 case "$fpostype" in
4368                 *_t) zzz="$fpostype"    ;;
4369                 *)   zzz="fpos_t"       ;;
4370                 esac
4371                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4372                 $cat > try.c <<EOCP
4373 #include <sys/types.h>
4374 #include <stdio.h>
4375 int main() {
4376     printf("%d\n", (int)sizeof($fpostype));
4377     exit(0);
4378 }
4379 EOCP
4380                 set try
4381                 if eval $compile_ok; then
4382                         yyy=`./try`
4383                         dflt="$lseeksize"
4384                         case "$yyy" in
4385                         '')     echo " "
4386                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4387                                 ;;
4388                         *)      fpossize=$yyy
4389                                 echo " $fpossize bytes." >&4
4390                                 ;;
4391                         esac
4392                 else
4393                         dflt="$fpossize"
4394                         echo " "
4395                         echo "(I can't compile the test program.  Guessing...)" >&4
4396                         rp="What is the size of your file positions (in bytes)?"
4397                         . ./myread
4398                         fpossize="$ans"
4399                 fi
4400                 $rm -f try.c try
4401         fi
4402         ;;
4403 esac
4404
4405
4406 case "$usemorebits" in
4407 "$define"|true|[yY]*)
4408         use64bitint="$define"
4409         uselongdouble="$define"
4410         usemorebits="$define"
4411         ;;
4412 *)      usemorebits="$undef"
4413         ;;
4414 esac
4415
4416
4417 case "$uselonglong" in
4418 "$define"|true|[yY]*)
4419         cat <<EOM >&4
4420
4421 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4422 EOM
4423         use64bitint="$define"
4424         ;;
4425 esac                          
4426 case "$use64bits" in
4427 "$define"|true|[yY]*)
4428         cat <<EOM >&4
4429
4430 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4431 EOM
4432         use64bitint="$define"
4433         ;;
4434 esac                          
4435 case "$use64bitints" in
4436 "$define"|true|[yY]*)
4437         cat <<EOM >&4
4438
4439 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4440 EOM
4441         use64bitint="$define"
4442         ;;
4443 esac                          
4444 case "$use64bitsint" in
4445 "$define"|true|[yY]*)
4446         cat <<EOM >&4
4447
4448 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4449 EOM
4450         use64bitint="$define"
4451         ;;
4452 esac                          
4453 case "$uselonglongs" in
4454 "$define"|true|[yY]*)
4455         cat <<EOM >&4
4456
4457 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4458 EOM
4459         use64bitint="$define"
4460         ;;
4461 esac                          
4462 case "$use64bitsall" in
4463 "$define"|true|[yY]*)
4464         cat <<EOM >&4
4465
4466 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4467 EOM
4468         use64bitall="$define"
4469         ;;
4470 esac                          
4471
4472 case "$ccflags" in
4473 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4474 esac
4475 case "$use64bitall" in
4476 "$define"|true|[yY]*) use64bitint="$define" ;;
4477 esac
4478
4479 case "$longsize" in
4480 8) cat <<EOM
4481
4482 You have natively 64-bit long integers.
4483 EOM
4484    val="$define"
4485    ;;
4486 *) case "$use64bitint" in
4487    "$define"|true|[yY]*) dflt='y';;
4488    *) dflt='n';;
4489    esac
4490    cat <<EOM
4491
4492 Perl can be built to take advantage of 64-bit integer types
4493 on some systems.  To do so, Configure can be run with -Duse64bitint.
4494 Choosing this option will most probably introduce binary incompatibilities.
4495
4496 If this doesn't make any sense to you, just accept the default '$dflt'.
4497 EOM
4498    rp='Try to use 64-bit integers, if available?'
4499    . ./myread
4500    case "$ans" in
4501    [yY]*) val="$define" ;;
4502    *)     val="$undef"  ;;
4503    esac
4504    ;;
4505 esac
4506 set use64bitint
4507 eval $setvar
4508
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 case "$use64bitall" in
4520 "$define"|true|[yY]*) dflt='y' ;;
4521 *) case "$longsize" in
4522    8) dflt='y' ;;
4523    *) dflt='n' ;;
4524    esac
4525    ;;
4526 esac    
4527 . ./myread
4528 case "$ans" in
4529 [yY]*) val="$define" ;;
4530 *)     val="$undef"  ;;
4531 esac
4532 set use64bitall
4533 eval $setvar
4534 case "$use64bitall" in
4535 "$define")
4536         case "$use64bitint" in
4537         "$undef")
4538                 cat <<EOM
4539
4540 Since you have chosen a maximally 64-bit build, I'm also turning on
4541 the use of 64-bit integers.
4542 EOM
4543                 use64bitint="$define" ;;
4544         esac
4545         ;;
4546 esac
4547
4548 case "$use64bitint" in
4549 "$define"|true|[yY]*)
4550 : Look for a hint-file generated 'call-back-unit'.  If the
4551 : user has specified that a 64-bit perl is to be built,
4552 : we may need to set or change some other defaults.
4553         if $test -f use64bitint.cbu; then
4554                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4555                 . ./use64bitint.cbu
4556         fi
4557         case "$longsize" in
4558         4) case "$archname64" in
4559            '') archname64=64int ;;
4560            esac
4561            ;;
4562         esac
4563         ;;
4564 esac
4565
4566 case "$use64bitall" in
4567 "$define"|true|[yY]*)
4568 : Look for a hint-file generated 'call-back-unit'.  If the
4569 : user has specified that a maximally 64-bit perl is to be built,
4570 : we may need to set or change some other defaults.
4571         if $test -f use64bitall.cbu; then
4572                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4573                 . ./use64bitall.cbu
4574         fi
4575         case "$longsize" in
4576         4) case "$archname64" in
4577            ''|64int) archname64=64all ;;
4578            esac
4579            ;;
4580         esac
4581         ;;
4582 esac
4583
4584 : determine the architecture name
4585 echo " "
4586 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4587         tarch=`arch`"-$osname"
4588 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4589         if uname -m > tmparch 2>&1 ; then
4590                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4591                         -e 's/$/'"-$osname/" tmparch`
4592         else
4593                 tarch="$osname"
4594         fi
4595         $rm -f tmparch
4596 else
4597         tarch="$osname"
4598 fi
4599 case "$myarchname" in
4600 ''|"$tarch") ;;
4601 *)
4602         echo "(Your architecture name used to be $myarchname.)"
4603         archname=''
4604         ;;
4605 esac
4606 myarchname="$tarch"
4607 case "$archname" in
4608 '') dflt="$tarch";;
4609 *) dflt="$archname";;
4610 esac
4611 rp='What is your architecture name'
4612 . ./myread
4613 archname="$ans"
4614 case "$usethreads" in
4615 $define)
4616         echo "Threads selected." >&4
4617         case "$archname" in
4618         *-thread*) echo "...and architecture name already has -thread." >&4
4619                 ;;
4620         *)      archname="$archname-thread"
4621                 echo "...setting architecture name to $archname." >&4
4622                 ;;
4623         esac
4624         ;;
4625 esac
4626 case "$usemultiplicity" in
4627 $define)
4628         echo "Multiplicity selected." >&4
4629         case "$archname" in
4630         *-multi*) echo "...and architecture name already has -multi." >&4
4631                 ;;
4632         *)      archname="$archname-multi"
4633                 echo "...setting architecture name to $archname." >&4
4634                 ;;
4635         esac
4636         ;;
4637 esac
4638 case "$use64bitint" in
4639 $define)
4640         case "$archname64" in
4641         '')
4642                 ;;
4643         *)
4644                 case "$archname" in
4645                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4646                         ;;
4647                 *)      archname="$archname-$archname64"
4648                         echo "...setting architecture name to $archname." >&4
4649                         ;;
4650                 esac
4651                 ;;
4652         esac
4653 esac
4654
4655 : determine root of directory hierarchy where package will be installed.
4656 case "$prefix" in
4657 '')
4658         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4659         ;;
4660 *)
4661         dflt="$prefix"
4662         ;;
4663 esac
4664 $cat <<EOM
4665
4666 By default, $package will be installed in $dflt/bin, manual pages
4667 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4668 installation directories. Typically this is something like /usr/local.
4669 If you wish to have binaries under /usr/bin but other parts of the
4670 installation under /usr/local, that's ok: you will be prompted
4671 separately for each of the installation directories, the prefix being
4672 only used to set the defaults.
4673
4674 EOM
4675 fn=d~
4676 rp='Installation prefix to use?'
4677 . ./getfile
4678 oldprefix=''
4679 case "$prefix" in
4680 '') ;;
4681 *)
4682         case "$ans" in
4683         "$prefix") ;;
4684         *) oldprefix="$prefix";;
4685         esac
4686         ;;
4687 esac
4688 prefix="$ans"
4689 prefixexp="$ansexp"
4690
4691 : is AFS running?
4692 echo " "
4693 case "$afs" in
4694 $define|true)   afs=true ;;
4695 $undef|false)   afs=false ;;
4696 *)      if test -d /afs; then
4697                 afs=true
4698         else
4699                 afs=false
4700         fi
4701         ;;
4702 esac
4703 if $afs; then
4704         echo "AFS may be running... I'll be extra cautious then..." >&4
4705 else
4706         echo "AFS does not seem to be running..." >&4
4707 fi
4708
4709 : determine installation prefix for where package is to be installed.
4710 if $afs; then 
4711 $cat <<EOM
4712
4713 Since you are running AFS, I need to distinguish the directory in which
4714 files will reside from the directory in which they are installed (and from
4715 which they are presumably copied to the former directory by occult means).
4716
4717 EOM
4718         case "$installprefix" in
4719         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4720         *) dflt="$installprefix";;
4721         esac
4722 else
4723 $cat <<EOM
4724
4725 In some special cases, particularly when building $package for distribution,
4726 it is convenient to distinguish between the directory in which files should 
4727 be installed from the directory ($prefix) in which they 
4728 will eventually reside.  For most users, these two directories are the same.
4729
4730 EOM
4731         case "$installprefix" in
4732         '') dflt=$prefix ;;
4733         *) dflt=$installprefix;;
4734         esac
4735 fi
4736 fn=d~
4737 rp='What installation prefix should I use for installing files?'
4738 . ./getfile
4739 installprefix="$ans"
4740 installprefixexp="$ansexp"
4741
4742 : set the prefixit variable, to compute a suitable default value
4743 prefixit='case "$3" in
4744 ""|none)
4745         case "$oldprefix" in
4746         "") eval "$1=\"\$$2\"";;
4747         *)
4748                 case "$3" in
4749                 "") eval "$1=";;
4750                 none)
4751                         eval "tp=\"\$$2\"";
4752                         case "$tp" in
4753                         ""|" ") eval "$1=\"\$$2\"";;
4754                         *) eval "$1=";;
4755                         esac;;
4756                 esac;;
4757         esac;;
4758 *)
4759         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4760         case "$tp" in
4761         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4762         /*-$oldprefix/*|\~*-$oldprefix/*)
4763                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4764         *) eval "$1=\"\$$2\"";;
4765         esac;;
4766 esac'
4767
4768
4769 : get the patchlevel
4770 echo " "
4771 echo "Getting the current patchlevel..." >&4
4772 if $test -r $rsrc/patchlevel.h;then
4773         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4774         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4775         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4776         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4777         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4778         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4779 else
4780         revision=0
4781         patchlevel=0
4782         subversion=0
4783         api_revision=0
4784         api_version=0
4785         api_subversion=0
4786 fi
4787 $echo $n "(You have $package revision $revision" $c
4788 $echo $n " patchlevel $patchlevel" $c
4789 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4790 echo ".)"
4791 case "$osname" in
4792 dos|vms)
4793         : XXX Should be a Configure test for double-dots in filenames.
4794         version=`echo $revision $patchlevel $subversion | \
4795                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4796         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4797                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4798         ;;
4799 *)
4800         version=`echo $revision $patchlevel $subversion | \
4801                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4802         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4803                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4804         ;;
4805 esac
4806 : Special case the 5.005_xx maintenance series, which used 5.005
4807 : without any subversion label as a subdirectory in $sitelib
4808 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4809         api_versionstring='5.005'
4810 fi
4811
4812 : determine installation style
4813 : For now, try to deduce it from prefix unless it is already set.
4814 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4815 case "$installstyle" in
4816 '')     case "$prefix" in
4817                 *perl*) dflt='lib';;
4818                 *) dflt='lib/perl5' ;;
4819         esac
4820         ;;
4821 *)      dflt="$installstyle" ;;
4822 esac
4823 : Probably not worth prompting for this since we prompt for all
4824 : the directories individually, and the prompt would be too long and
4825 : confusing anyway.
4826 installstyle=$dflt
4827
4828 : determine where private library files go
4829 : Usual default is /usr/local/lib/perl5/$version.
4830 : Also allow things like /opt/perl/lib/$version, since 
4831 : /opt/perl/lib/perl5... would be redundant.
4832 : The default "style" setting is made in installstyle.U
4833 case "$installstyle" in
4834 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4835 *)       set dflt privlib lib/$version ;;
4836 esac
4837 eval $prefixit
4838 $cat <<EOM
4839
4840 There are some auxiliary files for $package that need to be put into a
4841 private library directory that is accessible by everyone.
4842
4843 EOM
4844 fn=d~+
4845 rp='Pathname where the private library files will reside?'
4846 . ./getfile
4847 privlib="$ans"
4848 privlibexp="$ansexp"
4849 : Change installation prefix, if necessary.
4850 if $test X"$prefix" != X"$installprefix"; then
4851         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4852 else
4853         installprivlib="$privlibexp"
4854 fi
4855
4856 : set the prefixup variable, to restore leading tilda escape
4857 prefixup='case "$prefixexp" in
4858 "$prefix") ;;
4859 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4860 esac'
4861
4862 : determine where public architecture dependent libraries go
4863 set archlib archlib
4864 eval $prefixit
4865 : privlib default is /usr/local/lib/$package/$version
4866 : archlib default is /usr/local/lib/$package/$version/$archname
4867 : privlib may have an optional trailing /share.
4868 tdflt=`echo $privlib | $sed 's,/share$,,'`
4869 tdflt=$tdflt/$archname
4870 case "$archlib" in
4871 '')     dflt=$tdflt
4872         ;;
4873 *)      dflt="$archlib"
4874     ;;
4875 esac
4876 $cat <<EOM
4877
4878 $spackage contains architecture-dependent library files.  If you are
4879 sharing libraries in a heterogeneous environment, you might store
4880 these files in a separate location.  Otherwise, you can just include
4881 them with the rest of the public library files.
4882
4883 EOM
4884 fn=d+~
4885 rp='Where do you want to put the public architecture-dependent libraries?'
4886 . ./getfile
4887 archlib="$ans"
4888 archlibexp="$ansexp"
4889 if $test X"$archlib" = X"$privlib"; then
4890         d_archlib="$undef"
4891 else
4892         d_archlib="$define"
4893 fi
4894 : Change installation prefix, if necessary.
4895 if $test X"$prefix" != X"$installprefix"; then
4896         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4897 else
4898         installarchlib="$archlibexp"
4899 fi
4900
4901
4902 : Binary compatibility with 5.005 is not possible for builds
4903 : with advanced features
4904 case "$usethreads$usemultiplicity" in
4905 *define*)
4906         bincompat5005="$undef"
4907         d_bincompat5005="$undef"
4908         ;;
4909 *)      $cat <<EOM
4910
4911 Perl 5.006 can be compiled for binary compatibility with 5.005.
4912 If you decide to do so, you will be able to continue using most
4913 of the extensions that were compiled for Perl 5.005.
4914
4915 EOM
4916         case "$bincompat5005$d_bincompat5005" in
4917         *"$undef"*) dflt=n ;;
4918         *) dflt=y ;;
4919         esac
4920         rp='Binary compatibility with Perl 5.005?'
4921         . ./myread
4922         case "$ans" in
4923         y*) val="$define" ;;
4924         *)  val="$undef" ;;
4925         esac
4926         set d_bincompat5005
4927         eval $setvar
4928         case "$d_bincompat5005" in
4929         "$define")
4930                 bincompat5005="$define"
4931                 ;;
4932         *)      bincompat5005="$undef"
4933                 d_bincompat5005="$undef"
4934                 ;;
4935         esac
4936         ;;
4937 esac
4938
4939
4940 : see if setuid scripts can be secure
4941 $cat <<EOM
4942
4943 Some kernels have a bug that prevents setuid #! scripts from being
4944 secure.  Some sites have disabled setuid #! scripts because of this.
4945
4946 First let's decide if your kernel supports secure setuid #! scripts.
4947 (If setuid #! scripts would be secure but have been disabled anyway,
4948 don't say that they are secure if asked.)
4949
4950 EOM
4951
4952 val="$undef"
4953 if $test -d /dev/fd; then
4954         echo "#!$ls" >reflect
4955         chmod +x,u+s reflect
4956         ./reflect >flect 2>&1
4957         if $contains "/dev/fd" flect >/dev/null; then
4958                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4959                 val="$define"
4960         else
4961                 $cat <<EOM
4962 If you are not sure if they are secure, I can check but I'll need a
4963 username and password different from the one you are using right now.
4964 If you don't have such a username or don't want me to test, simply
4965 enter 'none'.
4966
4967 EOM
4968                 rp='Other username to test security of setuid scripts with?'
4969                 dflt='none'
4970                 . ./myread
4971                 case "$ans" in
4972                 n|none)
4973                         case "$d_suidsafe" in
4974                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4975                                 dflt=n;;
4976                         "$undef")
4977                                 echo "Well, the $hint value is *not* secure." >&4
4978                                 dflt=n;;
4979                         *)      echo "Well, the $hint value *is* secure." >&4
4980                                 dflt=y;;
4981                         esac
4982                         ;;
4983                 *)
4984                         $rm -f reflect flect
4985                         echo "#!$ls" >reflect
4986                         chmod +x,u+s reflect
4987                         echo >flect
4988                         chmod a+w flect
4989                         echo '"su" will (probably) prompt you for '"$ans's password."
4990                         su $ans -c './reflect >flect'
4991                         if $contains "/dev/fd" flect >/dev/null; then
4992                                 echo "Okay, it looks like setuid scripts are secure." >&4
4993                                 dflt=y
4994                         else
4995                                 echo "I don't think setuid scripts are secure." >&4
4996                                 dflt=n
4997                         fi
4998                         ;;
4999                 esac
5000                 rp='Does your kernel have *secure* setuid scripts?'
5001                 . ./myread
5002                 case "$ans" in
5003                 [yY]*)  val="$define";;
5004                 *)      val="$undef";;
5005                 esac
5006         fi
5007 else
5008         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5009         echo "(That's for file descriptors, not floppy disks.)"
5010         val="$undef"
5011 fi
5012 set d_suidsafe
5013 eval $setvar
5014
5015 $rm -f reflect flect
5016
5017 : now see if they want to do setuid emulation
5018 echo " "
5019 val="$undef"
5020 case "$d_suidsafe" in
5021 "$define")
5022         val="$undef"
5023         echo "No need to emulate SUID scripts since they are secure here." >& 4
5024         ;;
5025 *)
5026         $cat <<EOM
5027 Some systems have disabled setuid scripts, especially systems where
5028 setuid scripts cannot be secure.  On systems where setuid scripts have
5029 been disabled, the setuid/setgid bits on scripts are currently
5030 useless.  It is possible for $package to detect those bits and emulate
5031 setuid/setgid in a secure fashion.  This emulation will only work if
5032 setuid scripts have been disabled in your kernel.
5033
5034 EOM
5035         case "$d_dosuid" in
5036         "$define") dflt=y ;;
5037         *) dflt=n ;;
5038         esac
5039         rp="Do you want to do setuid/setgid emulation?"
5040         . ./myread
5041         case "$ans" in
5042         [yY]*)  val="$define";;
5043         *)      val="$undef";;
5044         esac
5045         ;;
5046 esac
5047 set d_dosuid
5048 eval $setvar
5049
5050 : determine filename position in cpp output
5051 echo " "
5052 echo "Computing filename position in cpp output for #include directives..." >&4
5053 echo '#include <stdio.h>' > foo.c
5054 $cat >fieldn <<EOF
5055 $startsh
5056 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5057 $grep '^[       ]*#.*stdio\.h' | \
5058 while read cline; do
5059         pos=1
5060         set \$cline
5061         while $test \$# -gt 0; do
5062                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5063                         echo "\$pos"
5064                         exit 0
5065                 fi
5066                 shift
5067                 pos=\`expr \$pos + 1\`
5068         done
5069 done
5070 EOF
5071 chmod +x fieldn
5072 fieldn=`./fieldn`
5073 $rm -f foo.c fieldn
5074 case $fieldn in
5075 '') pos='???';;
5076 1) pos=first;;
5077 2) pos=second;;
5078 3) pos=third;;
5079 *) pos="${fieldn}th";;
5080 esac
5081 echo "Your cpp writes the filename in the $pos field of the line."
5082
5083 : locate header file
5084 $cat >findhdr <<EOF
5085 $startsh
5086 wanted=\$1
5087 name=''
5088 for usrincdir in $usrinc
5089 do
5090         if test -f \$usrincdir/\$wanted; then
5091                 echo "\$usrincdir/\$wanted"
5092                 exit 0
5093         fi
5094 done
5095 awkprg='{ print \$$fieldn }'
5096 echo "#include <\$wanted>" > foo\$\$.c
5097 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5098 $grep "^[       ]*#.*\$wanted" | \
5099 while read cline; do
5100         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5101         case "\$name" in
5102         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5103         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5104         *) exit 2;;
5105         esac;
5106 done;
5107 #
5108 # status = 0: grep returned 0 lines, case statement not executed
5109 # status = 1: headerfile found
5110 # status = 2: while loop executed, no headerfile found
5111 #
5112 status=\$?
5113 $rm -f foo\$\$.c;
5114 if test \$status -eq 1; then
5115         exit 0;
5116 fi
5117 exit 1
5118 EOF
5119 chmod +x findhdr
5120
5121 : define an alternate in-header-list? function
5122 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5123 cont=true; xxf="echo \"<\$1> found.\" >&4";
5124 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5125 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5126 esac;
5127 case $# in 4) instead=instead;; *) instead="at last";; esac;
5128 while $test "$cont"; do
5129         xxx=`./findhdr $1`
5130         var=$2; eval "was=\$$2";
5131         if $test "$xxx" && $test -r "$xxx";
5132         then eval $xxf;
5133         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5134                 cont="";
5135         else eval $xxnf;
5136         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5137         set $yyy; shift; shift; yyy=$@;
5138         case $# in 0) cont="";;
5139         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5140                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5141         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5142                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5143         esac;
5144 done;
5145 while $test "$yyy";
5146 do set $yyy; var=$2; eval "was=\$$2";
5147         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5148         set $yyy; shift; shift; yyy=$@;
5149 done'
5150
5151 : see if this is a malloc.h system
5152 set malloc.h i_malloc
5153 eval $inhdr
5154
5155 : see if stdlib is available
5156 set stdlib.h i_stdlib
5157 eval $inhdr
5158
5159 : determine which malloc to compile in
5160 echo " "
5161 case "$usemymalloc" in
5162 ''|[yY]*|true|$define)  dflt='y' ;;
5163 *)      dflt='n' ;;
5164 esac
5165 rp="Do you wish to attempt to use the malloc that comes with $package?"
5166 . ./myread
5167 usemymalloc="$ans"
5168 case "$ans" in
5169 y*|true)
5170         usemymalloc='y'
5171         mallocsrc='malloc.c'
5172         mallocobj="malloc$_o"
5173         d_mymalloc="$define"
5174         case "$libs" in
5175         *-lmalloc*)
5176                 : Remove malloc from list of libraries to use
5177                 echo "Removing unneeded -lmalloc from library list" >&4
5178                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5179                 shift
5180                 libs="$*"
5181                 echo "libs = $libs" >&4
5182                 ;;
5183         esac
5184         ;;
5185 *)
5186         usemymalloc='n'
5187         mallocsrc=''
5188         mallocobj=''
5189         d_mymalloc="$undef"
5190         ;;
5191 esac
5192
5193 : compute the return types of malloc and free
5194 echo " "
5195 $cat >malloc.c <<END
5196 #$i_malloc I_MALLOC
5197 #$i_stdlib I_STDLIB
5198 #include <stdio.h>
5199 #include <sys/types.h>
5200 #ifdef I_MALLOC
5201 #include <malloc.h>
5202 #endif
5203 #ifdef I_STDLIB
5204 #include <stdlib.h>
5205 #endif
5206 #ifdef TRY_MALLOC
5207 void *malloc();
5208 #endif
5209 #ifdef TRY_FREE
5210 void free();
5211 #endif
5212 END
5213 case "$malloctype" in
5214 '')
5215         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5216                 malloctype='void *'
5217         else
5218                 malloctype='char *'
5219         fi
5220         ;;
5221 esac
5222 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5223
5224 case "$freetype" in
5225 '')
5226         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5227                 freetype='void'
5228         else
5229                 freetype='int'
5230         fi
5231         ;;
5232 esac
5233 echo "Your system uses $freetype free(), it would seem." >&4
5234 $rm -f malloc.[co]
5235 $cat <<EOM
5236
5237 The installation process will also create a directory for
5238 vendor-supplied add-ons.  Vendors who supply perl with their system
5239 may find it convenient to place all vendor-supplied files in this
5240 directory rather than in the main distribution directory.  This will
5241 ease upgrades between binary-compatible maintenance versions of perl.
5242
5243 Of course you may also use these directories in whatever way you see
5244 fit.  For example, you might use them to access modules shared over a
5245 company-wide network.
5246
5247 The default answer should be fine for most people.
5248 This causes further questions about vendor add-ons to be skipped
5249 and no vendor-specific directories will be configured for perl.
5250
5251 EOM
5252 rp='Do you want to configure vendor-specific add-on directories?'
5253 case "$usevendorprefix" in
5254 define|true|[yY]*) dflt=y ;;
5255 *)      : User may have set vendorprefix directly on Configure command line.
5256         case "$vendorprefix" in
5257         ''|' ') dflt=n ;;
5258         *)      dflt=y ;;
5259         esac
5260         ;;
5261 esac
5262 . ./myread
5263 case "$ans" in
5264 [yY]*)  fn=d~+
5265         rp='Installation prefix to use for vendor-supplied add-ons?'
5266         case "$vendorprefix" in
5267         '') dflt='' ;;
5268         *)  dflt=$vendorprefix ;;
5269         esac
5270         . ./getfile
5271         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5272         oldvendorprefix=''
5273         case "$vendorprefix" in
5274         '') ;;
5275         *)      case "$ans" in
5276                 "$prefix") ;;
5277                 *) oldvendorprefix="$prefix";;
5278                 esac
5279                 ;;
5280         esac
5281         usevendorprefix="$define"
5282         vendorprefix="$ans"
5283         vendorprefixexp="$ansexp"
5284         ;;
5285 *)      usevendorprefix="$undef"
5286         vendorprefix=''
5287         vendorprefixexp=''
5288         ;;
5289 esac
5290
5291 case "$vendorprefix" in
5292 '')     d_vendorlib="$undef"
5293         vendorlib=''
5294         vendorlibexp=''
5295         ;;
5296 *)      d_vendorlib="$define"
5297         : determine where vendor-supplied modules go.
5298         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5299         case "$vendorlib" in
5300         '')
5301                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5302                 case "$installstyle" in
5303                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5304                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5305                 esac
5306                 ;;
5307         *)      dflt="$vendorlib"
5308                 ;;
5309         esac
5310         fn=d~+
5311         rp='Pathname for the vendor-supplied library files?'
5312         . ./getfile
5313         vendorlib="$ans"
5314         vendorlibexp="$ansexp"
5315         ;;
5316 esac
5317 : Change installation prefix, if necessary.
5318 if $test X"$prefix" != X"$installprefix"; then
5319         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5320 else
5321         installvendorlib="$vendorlibexp"
5322 fi
5323
5324 : Cruising for prototypes
5325 echo " "
5326 echo "Checking out function prototypes..." >&4
5327 $cat >prototype.c <<'EOCP'
5328 int main(int argc, char *argv[]) {
5329         exit(0);}
5330 EOCP
5331 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5332         echo "Your C compiler appears to support function prototypes."
5333         val="$define"
5334 else
5335         echo "Your C compiler doesn't seem to understand function prototypes."
5336         val="$undef"
5337 fi
5338 set prototype
5339 eval $setvar
5340 $rm -f prototype*
5341
5342 case "$prototype" in
5343 "$define") ;;
5344 *)      ansi2knr='ansi2knr'
5345         echo " "
5346         cat <<EOM >&4
5347
5348 $me:  FATAL ERROR:
5349 This version of $package can only be compiled by a compiler that 
5350 understands function prototypes.  Unfortunately, your C compiler 
5351         $cc $ccflags
5352 doesn't seem to understand them.  Sorry about that.
5353
5354 If GNU cc is available for your system, perhaps you could try that instead.  
5355
5356 Eventually, we hope to support building Perl with pre-ANSI compilers.
5357 If you would like to help in that effort, please contact <perlbug@perl.org>.
5358
5359 Aborting Configure now.
5360 EOM
5361         exit 2
5362         ;;
5363 esac
5364
5365 : determine where public executables go
5366 echo " "
5367 set dflt bin bin
5368 eval $prefixit
5369 fn=d~
5370 rp='Pathname where the public executables will reside?'
5371 . ./getfile
5372 if $test "X$ansexp" != "X$binexp"; then
5373         installbin=''
5374 fi
5375 bin="$ans"
5376 binexp="$ansexp"
5377 : Change installation prefix, if necessary.
5378 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5379 if $test X"$prefix" != X"$installprefix"; then
5380         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5381 else
5382         installbin="$binexp"
5383 fi
5384
5385 : Find perl5.005 or later.
5386 echo "Looking for a previously installed perl5.005 or later... "
5387 case "$perl5" in
5388 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5389                 : Check if this perl is recent and can load a simple module
5390                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5391                         perl5=$tdir/perl
5392                         break;
5393                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5394                         perl5=$tdir/perl
5395                         break;
5396                 fi
5397         done
5398         ;;
5399 *)      perl5="$perl5"
5400         ;;
5401 esac
5402 case "$perl5" in
5403 '')     echo "None found.  That's ok.";;
5404 *)      echo "Using $perl5." ;;
5405 esac
5406
5407 $cat <<EOM
5408
5409 After $package is installed, you may wish to install various
5410 add-on modules and utilities.  Typically, these add-ons will
5411 be installed under $prefix with the rest
5412 of this package.  However, you may wish to install such add-ons
5413 elsewhere under a different prefix.
5414
5415 If you do not wish to put everything under a single prefix, that's
5416 ok.  You will be prompted for the individual locations; this siteprefix
5417 is only used to suggest the defaults.
5418
5419 The default should be fine for most people.
5420
5421 EOM
5422 fn=d~+
5423 rp='Installation prefix to use for add-on modules and utilities?'
5424 : XXX Here might be another good place for an installstyle setting.
5425 case "$siteprefix" in
5426 '') dflt=$prefix ;;
5427 *)  dflt=$siteprefix ;;
5428 esac
5429 . ./getfile
5430 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5431 oldsiteprefix=''
5432 case "$siteprefix" in
5433 '') ;;
5434 *)      case "$ans" in
5435         "$prefix") ;;
5436         *) oldsiteprefix="$prefix";;
5437         esac
5438         ;;
5439 esac
5440 siteprefix="$ans"
5441 siteprefixexp="$ansexp"
5442
5443 : determine where site specific libraries go.
5444 : Usual default is /usr/local/lib/perl5/site_perl/$version
5445 : The default "style" setting is made in installstyle.U
5446 : XXX No longer works with Prefixit stuff.
5447 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5448 case "$sitelib" in
5449 '') case "$installstyle" in
5450         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5451         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5452         esac
5453         ;;
5454 *)      dflt="$sitelib"
5455         ;;
5456 esac
5457 $cat <<EOM
5458
5459 The installation process will create a directory for
5460 site-specific extensions and modules.  Most users find it convenient
5461 to place all site-specific files in this directory rather than in the
5462 main distribution directory.
5463
5464 EOM
5465 fn=d~+
5466 rp='Pathname for the site-specific library files?'
5467 . ./getfile
5468 sitelib="$ans"
5469 sitelibexp="$ansexp"
5470 : Change installation prefix, if necessary.
5471 if $test X"$prefix" != X"$installprefix"; then
5472         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5473 else
5474         installsitelib="$sitelibexp"
5475 fi
5476
5477 : Determine list of previous versions to include in @INC
5478 $cat > getverlist <<EOPL
5479 #!$perl5 -w
5480 use File::Basename;
5481 \$api_versionstring = "$api_versionstring";
5482 \$version = "$version";
5483 \$sitelib = "$sitelib";
5484 \$archname = "$archname";
5485 EOPL
5486         $cat >> getverlist <<'EOPL'
5487 # Can't have leading @ because metaconfig interprets it as a command!
5488 ;@inc_version_list=();
5489 $stem=dirname($sitelib);
5490 # XXX Redo to do opendir/readdir? 
5491 if (-d $stem) {
5492     chdir($stem);
5493     ;@candidates = glob("5.*");
5494 }
5495 else {
5496     ;@candidates = ();
5497 }
5498
5499 # XXX ToDo:  These comparisons must be reworked when two-digit
5500 # subversions come along, so that 5.7.10 compares as greater than
5501 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5502 # widespread that we can use the built-in version vectors rather
5503 # than reinventing them here.  For 5.6.0, however, we must
5504 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5505 foreach $d (@candidates) {
5506     if ($d lt $version) {
5507         if ($d ge $api_versionstring) {
5508             unshift(@inc_version_list, "$d/$archname", $d);
5509         }
5510         elsif ($d ge "5.005") {
5511             unshift(@inc_version_list, $d);
5512         }
5513     }
5514     else {
5515         # Skip newer version.  I.e. don't look in
5516         # 5.7.0 if we're installing 5.6.1.
5517     }
5518 }
5519
5520 if (@inc_version_list) {
5521     print join(' ', @inc_version_list);
5522 }
5523 else {
5524     # Blank space to preserve value for next Configure run.
5525     print " ";
5526 }
5527 EOPL
5528 chmod +x getverlist
5529 case "$inc_version_list" in
5530 '')     if test -x "$perl5"; then
5531                 dflt=`$perl5 getverlist`
5532         else
5533                 dflt='none'
5534         fi
5535         ;;
5536 $undef) dflt='none' ;;
5537 *)  dflt="$inc_version_list" ;;
5538 esac
5539 case "$dflt" in
5540 ''|' ') dflt=none ;;
5541 esac
5542 $cat <<'EOM'
5543
5544 In order to ease the process of upgrading, this version of perl 
5545 can be configured to use modules built and installed with earlier 
5546 versions of perl that were installed under $prefix.  Specify here
5547 the list of earlier versions that this version of perl should check.
5548 If Configure detected no earlier versions of perl installed under
5549 $prefix, then the list will be empty.  Answer 'none' to tell perl
5550 to not search earlier versions.
5551
5552 The default should almost always be sensible, so if you're not sure,
5553 just accept the default.
5554 EOM
5555
5556 rp='List of earlier versions to include in @INC?'
5557 . ./myread
5558 case "$ans" in
5559 [Nn]one|''|' ') inc_version_list=' ' ;;
5560 *) inc_version_list="$ans" ;;
5561 esac
5562 case "$inc_version_list" in
5563 ''|' ') 
5564         inc_version_list_init='0';;
5565 *)      inc_version_list_init=`echo $inc_version_list |
5566                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5567         ;;
5568 esac
5569 $rm -f getverlist
5570
5571 : determine whether to install perl also as /usr/bin/perl
5572
5573 echo " "
5574 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5575         $cat <<EOM
5576 Many scripts expect to perl to be installed as /usr/bin/perl.
5577 I can install the perl you are about to compile also as /usr/bin/perl
5578 (in addition to $installbin/perl).
5579 EOM
5580         case "$installusrbinperl" in
5581         "$undef"|[nN]*) dflt='n';;
5582         *)              dflt='y';;
5583         esac
5584         rp="Do you want to install perl as /usr/bin/perl?"
5585         . ./myread
5586         case "$ans" in
5587         [yY]*)  val="$define";;
5588         *)      val="$undef" ;;
5589         esac
5590 else
5591         val="$undef"
5592 fi
5593 set installusrbinperl
5594 eval $setvar
5595
5596 echo " "
5597 echo "Checking for GNU C Library..." >&4
5598 cat >gnulibc.c <<EOM
5599 #include <stdio.h>
5600 int main()
5601 {
5602 #ifdef __GLIBC__
5603     exit(0);
5604 #else
5605     exit(1);
5606 #endif
5607 }
5608 EOM
5609 set gnulibc
5610 if eval $compile_ok && ./gnulibc; then
5611         val="$define"
5612         echo "You are using the GNU C Library"
5613 else
5614         val="$undef"
5615         echo "You are not using the GNU C Library"
5616 fi
5617 $rm -f gnulibc*
5618 set d_gnulibc
5619 eval $setvar
5620
5621 : see if nm is to be used to determine whether a symbol is defined or not
5622 case "$usenm" in
5623 '')
5624         dflt=''
5625         case "$d_gnulibc" in
5626         "$define")
5627                 echo " "
5628                 echo "nm probably won't work on the GNU C Library." >&4
5629                 dflt=n
5630                 ;;
5631         esac
5632         case "$dflt" in
5633         '') 
5634                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5635                         echo " "
5636                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5637                         echo "'nm' won't be sufficient on this sytem." >&4
5638                         dflt=n
5639                 fi
5640                 ;;
5641         esac
5642         case "$dflt" in
5643         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5644                 if $test $dflt -gt 20; then
5645                         dflt=y
5646                 else
5647                         dflt=n
5648                 fi
5649                 ;;
5650         esac
5651         ;;
5652 *)
5653         case "$usenm" in
5654         true|$define) dflt=y;;
5655         *) dflt=n;;
5656         esac
5657         ;;
5658 esac
5659 $cat <<EOM
5660
5661 I can use $nm to extract the symbols from your C libraries. This
5662 is a time consuming task which may generate huge output on the disk (up
5663 to 3 megabytes) but that should make the symbols extraction faster. The
5664 alternative is to skip the 'nm' extraction part and to compile a small
5665 test program instead to determine whether each symbol is present. If
5666 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5667 this may be the best solution.
5668
5669 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5670
5671 EOM
5672 rp="Shall I use $nm to extract C symbols from the libraries?"
5673 . ./myread
5674 case "$ans" in
5675 [Nn]*) usenm=false;;
5676 *) usenm=true;;
5677 esac
5678
5679 runnm=$usenm
5680 case "$reuseval" in
5681 true) runnm=false;;
5682 esac
5683
5684 : nm options which may be necessary
5685 case "$nm_opt" in
5686 '') if $test -f /mach_boot; then
5687                 nm_opt=''       # Mach
5688         elif $test -d /usr/ccs/lib; then
5689                 nm_opt='-p'     # Solaris (and SunOS?)
5690         elif $test -f /dgux; then
5691                 nm_opt='-p'     # DG-UX
5692         elif $test -f /lib64/rld; then
5693                 nm_opt='-p'     # 64-bit Irix
5694         else
5695                 nm_opt=''
5696         fi;;
5697 esac
5698
5699 : nm options which may be necessary for shared libraries but illegal
5700 : for archive libraries.  Thank you, Linux.
5701 case "$nm_so_opt" in
5702 '')     case "$myuname" in
5703         *linux*)
5704                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5705                         nm_so_opt='--dynamic'
5706                 fi
5707                 ;;
5708         esac
5709         ;;
5710 esac
5711
5712 case "$runnm" in
5713 true)
5714 : get list of predefined functions in a handy place
5715 echo " "
5716 case "$libc" in
5717 '') libc=unknown
5718         case "$libs" in
5719         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5720         esac
5721         ;;
5722 esac
5723 libnames='';
5724 case "$libs" in
5725 '') ;;
5726 *)  for thislib in $libs; do
5727         case "$thislib" in
5728         -lc|-lc_s)
5729                 : Handle C library specially below.
5730                 ;;
5731         -l*)
5732                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5733                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5734                         :
5735                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5736                         :
5737                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5738                         :
5739                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5740                         :
5741                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5742                         :
5743                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5744                         :
5745                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5746                         :
5747                 else
5748                         try=''
5749                 fi
5750                 libnames="$libnames $try"
5751                 ;;
5752         *) libnames="$libnames $thislib" ;;
5753         esac
5754         done
5755         ;;
5756 esac
5757 xxx=normal
5758 case "$libc" in
5759 unknown)
5760         set /lib/libc.$so
5761         for xxx in $libpth; do
5762                 $test -r $1 || set $xxx/libc.$so
5763                 : The messy sed command sorts on library version numbers.
5764                 $test -r $1 || \
5765                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5766                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5767                                 h
5768                                 s/[0-9][0-9]*/0000&/g
5769                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5770                                 G
5771                                 s/\n/ /' | \
5772                          sort | $sed -e 's/^.* //'`
5773                 eval set \$$#
5774         done
5775         $test -r $1 || set /usr/ccs/lib/libc.$so
5776         $test -r $1 || set /lib/libsys_s$_a
5777         ;;
5778 *)
5779         set blurfl
5780         ;;
5781 esac
5782 if $test -r "$1"; then
5783         echo "Your (shared) C library seems to be in $1."
5784         libc="$1"
5785 elif $test -r /lib/libc && $test -r /lib/clib; then
5786         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5787         xxx=apollo
5788         libc='/lib/clib /lib/libc'
5789         if $test -r /lib/syslib; then
5790                 echo "(Your math library is in /lib/syslib.)"
5791                 libc="$libc /lib/syslib"
5792         fi
5793 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5794         echo "Your C library seems to be in $libc, as you said before."
5795 elif $test -r $incpath/usr/lib/libc$_a; then
5796         libc=$incpath/usr/lib/libc$_a;
5797         echo "Your C library seems to be in $libc.  That's fine."
5798 elif $test -r /lib/libc$_a; then
5799         libc=/lib/libc$_a;
5800         echo "Your C library seems to be in $libc.  You're normal."
5801 else
5802         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5803                 :
5804         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5805                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5806         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5807                 :
5808         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5809                 :
5810         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5811                 :
5812         else
5813                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5814         fi
5815         if $test -r "$tans"; then
5816                 echo "Your C library seems to be in $tans, of all places."
5817                 libc=$tans
5818         else
5819                 libc='blurfl'
5820         fi
5821 fi
5822 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5823         dflt="$libc"
5824         cat <<EOM
5825
5826 If the guess above is wrong (which it might be if you're using a strange
5827 compiler, or your machine supports multiple models), you can override it here.
5828
5829 EOM
5830 else
5831         dflt=''
5832         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5833         cat >&4 <<EOM
5834 I can't seem to find your C library.  I've looked in the following places:
5835
5836 EOM
5837         $sed 's/^/      /' libpath
5838         cat <<EOM
5839
5840 None of these seems to contain your C library. I need to get its name...
5841
5842 EOM
5843 fi
5844 fn=f
5845 rp='Where is your C library?'
5846 . ./getfile
5847 libc="$ans"
5848
5849 echo " "
5850 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5851 set X `cat libnames`
5852 shift
5853 xxx=files
5854 case $# in 1) xxx=file; esac
5855 echo "Extracting names from the following $xxx for later perusal:" >&4
5856 echo " "
5857 $sed 's/^/      /' libnames >&4
5858 echo " "
5859 $echo $n "This may take a while...$c" >&4
5860
5861 for file in $*; do
5862         case $file in
5863         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5864         *) $nm $nm_opt $file 2>/dev/null;;
5865         esac
5866 done >libc.tmp
5867
5868 $echo $n ".$c"
5869 $grep fprintf libc.tmp > libc.ptf
5870 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5871 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5872 xxx='[ADTSIW]'
5873 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5874         eval $xscan;\
5875         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5876                 eval $xrun
5877 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5878         eval $xscan;\
5879         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5880                 eval $xrun
5881 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5882         eval $xscan;\
5883         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5884                 eval $xrun
5885 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5886         eval $xscan;\
5887         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5888                 eval $xrun
5889 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5890         eval $xscan;\
5891         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5892                 eval $xrun
5893 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5894         eval $xscan;\
5895         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5896                 eval $xrun
5897 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5898                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5899         eval $xscan;\
5900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5901                 eval $xrun
5902 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5903         eval $xscan;\
5904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5905                 eval $xrun
5906 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5907         eval $xscan;\
5908         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5909                 eval $xrun
5910 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5911         eval $xscan;\
5912         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5913                 eval $xrun
5914 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5915         eval $xscan;\
5916         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5917                 eval $xrun
5918 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5919         eval $xscan;\
5920         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5921                 eval $xrun
5922 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5923         eval $xscan;\
5924         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5925                 eval $xrun
5926 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5927         eval $xscan;\
5928         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5929                 eval $xrun
5930 else
5931         $nm -p $* 2>/dev/null >libc.tmp
5932         $grep fprintf libc.tmp > libc.ptf
5933         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5934                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5935         then
5936                 nm_opt='-p'
5937                 eval $xrun
5938         else
5939                 echo " "
5940                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5941                 com=''
5942                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5943                         for thisname in $libnames $libc; do
5944                                 $ar t $thisname >>libc.tmp
5945                         done
5946                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5947                         echo "Ok." >&4
5948                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5949                         # Repeat libc to extract forwarders to DLL entries too
5950                         for thisname in $libnames $libc; do
5951                                 $ar tv $thisname >>libc.tmp
5952                                 # Revision 50 of EMX has bug in $ar.
5953                                 # it will not extract forwarders to DLL entries
5954                                 # Use emximp which will extract exactly them.
5955                                 emximp -o tmp.imp $thisname \
5956                                     2>/dev/null && \
5957                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5958                                     < tmp.imp >>libc.tmp
5959                                 $rm tmp.imp
5960                         done
5961                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5962                         echo "Ok." >&4
5963                 else
5964                         echo "$ar didn't seem to work right." >&4
5965                         echo "Maybe this is a Cray...trying bld instead..." >&4
5966                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5967                         then
5968                                 for thisname in $libnames; do
5969                                         bld t $libnames | \
5970                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5971                                         $ar t $thisname >>libc.tmp
5972                                 done
5973                                 echo "Ok." >&4
5974                         else
5975                                 echo "That didn't work either.  Giving up." >&4
5976                                 exit 1
5977                         fi
5978                 fi
5979         fi
5980 fi
5981 nm_extract="$com"
5982 if $test -f /lib/syscalls.exp; then
5983         echo " "
5984         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5985         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5986 fi
5987 ;;
5988 esac
5989 $rm -f libnames libpath
5990
5991 : see if dld is available
5992 set dld.h i_dld
5993 eval $inhdr
5994
5995 : is a C symbol defined?
5996 csym='tlook=$1;
5997 case "$3" in
5998 -v) tf=libc.tmp; tc=""; tdc="";;
5999 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6000 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6001 esac;
6002 tx=yes;
6003 case "$reuseval-$4" in
6004 true-) ;;
6005 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6006 esac;
6007 case "$tx" in
6008 yes)
6009         case "$runnm" in
6010         true)
6011                 if $contains $tlook $tf >/dev/null 2>&1;
6012                 then tval=true;
6013                 else tval=false;
6014                 fi;;
6015         *)
6016                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6017                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6018                 then tval=true;
6019                 else tval=false;
6020                 fi;
6021                 $rm -f t t.c;;
6022         esac;;
6023 *)
6024         case "$tval" in
6025         $define) tval=true;;
6026         *) tval=false;;
6027         esac;;
6028 esac;
6029 eval "$2=$tval"'
6030
6031 : define an is-in-libc? function
6032 inlibc='echo " "; td=$define; tu=$undef;
6033 sym=$1; var=$2; eval "was=\$$2";
6034 tx=yes;
6035 case "$reuseval$was" in
6036 true) ;;
6037 true*) tx=no;;
6038 esac;
6039 case "$tx" in
6040 yes)
6041         set $sym tres -f;
6042         eval $csym;
6043         case "$tres" in
6044         true)
6045                 echo "$sym() found." >&4;
6046                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6047         *)
6048                 echo "$sym() NOT found." >&4;
6049                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6050         esac;;
6051 *)
6052         case "$was" in
6053         $define) echo "$sym() found." >&4;;
6054         *) echo "$sym() NOT found." >&4;;
6055         esac;;
6056 esac'
6057
6058 : see if dlopen exists
6059 xxx_runnm="$runnm"
6060 runnm=false
6061 set dlopen d_dlopen
6062 eval $inlibc
6063 runnm="$xxx_runnm"
6064
6065 : determine which dynamic loading, if any, to compile in
6066 echo " "
6067 dldir="ext/DynaLoader"
6068 case "$usedl" in
6069 $define|y|true)
6070         dflt='y'
6071         usedl="$define"
6072         ;;
6073 $undef|n|false)
6074         dflt='n'
6075         usedl="$undef"
6076         ;;
6077 *) 
6078         dflt='n'
6079         case "$d_dlopen" in
6080             $define) dflt='y' ;;
6081         esac
6082         case "$i_dld" in
6083             $define) dflt='y' ;;
6084         esac
6085         : Does a dl_xxx.xs file exist for this operating system
6086         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6087         ;;
6088 esac
6089 rp="Do you wish to use dynamic loading?"
6090 . ./myread
6091 usedl="$ans"
6092 case "$ans" in
6093 y*) usedl="$define"
6094         case "$dlsrc" in
6095         '')
6096                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6097                         dflt="$dldir/dl_${osname}.xs"
6098                 elif $test "$d_dlopen" = "$define" ; then
6099                         dflt="$dldir/dl_dlopen.xs"
6100                 elif $test "$i_dld" = "$define" ; then
6101                         dflt="$dldir/dl_dld.xs"
6102                 else
6103                         dflt=''
6104                 fi
6105                 ;;
6106         *)      dflt="$dldir/$dlsrc"
6107                 ;;
6108         esac
6109     echo "The following dynamic loading files are available:"
6110         : Can not go over to $dldir because getfile has path hard-coded in.
6111         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6112         rp="Source file to use for dynamic loading"
6113         fn="fne"
6114         gfpth="$src"
6115         . ./getfile
6116         usedl="$define"
6117         : emulate basename
6118         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6119
6120         $cat << EOM
6121
6122 Some systems may require passing special flags to $cc -c to
6123 compile modules that will be used to create a shared library.
6124 To use no flags, say "none".
6125
6126 EOM
6127     case "$cccdlflags" in
6128     '') case "$gccversion" in
6129                 '') case "$osname" in
6130                         hpux)   dflt='+z' ;;
6131                         next)   dflt='none' ;;
6132                         irix*)  dflt='-KPIC' ;;
6133                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6134                         sunos)  dflt='-pic' ;;
6135                         *)      dflt='none' ;;
6136                     esac
6137                         ;;
6138                 *)  case "$osname" in
6139                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6140                         *)      dflt='-fpic' ;;
6141                     esac ;;
6142             esac ;;
6143         ' ') dflt='none' ;;
6144     *)  dflt="$cccdlflags" ;;
6145     esac
6146     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6147     . ./myread
6148     case "$ans" in
6149     none) cccdlflags=' ' ;;
6150     *) cccdlflags="$ans" ;;
6151     esac
6152
6153     cat << EOM
6154
6155 Some systems use ld to create libraries that can be dynamically loaded,
6156 while other systems (such as those using ELF) use $cc.
6157
6158 EOM
6159         case "$ld" in
6160         '')     $cat >try.c <<'EOM'
6161 /* Test for whether ELF binaries are produced */
6162 #include <fcntl.h>
6163 #include <stdlib.h>
6164 int main() {
6165         char b[4];
6166         int i = open("a.out",O_RDONLY);
6167         if(i == -1) 
6168                 exit(1); /* fail */
6169         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6170                 exit(0); /* succeed (yes, it's ELF) */
6171         else
6172                 exit(1); /* fail */
6173 }
6174 EOM
6175                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6176                         cat <<EOM
6177 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6178 EOM
6179                         dflt="$cc"
6180                 else
6181                         echo "I'll use ld to build dynamic libraries."
6182                         dflt='ld'
6183                 fi
6184                 rm -f try.c a.out
6185                 ;;
6186         *)      dflt="$ld"
6187                 ;;
6188         esac
6189
6190     rp="What command should be used to create dynamic libraries?"
6191     . ./myread
6192         ld="$ans"
6193
6194     cat << EOM
6195
6196 Some systems may require passing special flags to $ld to create a
6197 library that can be dynamically loaded.  If your ld flags include
6198 -L/other/path options to locate libraries outside your loader's normal
6199 search path, you may need to specify those -L options here as well.  To
6200 use no flags, say "none".
6201
6202 EOM
6203     case "$lddlflags" in
6204     '') case "$osname" in
6205                         beos) dflt='-nostart' ;;
6206                         hpux) dflt='-b';
6207                               case "$gccversion" in
6208                               '') dflt="$dflt +vnocompatwarnings" ;;
6209                               esac
6210                               ;;        
6211                         linux|irix*)    dflt='-shared' ;;
6212                         next)  dflt='none' ;;
6213                         solaris) dflt='-G' ;;
6214                         sunos) dflt='-assert nodefinitions' ;;
6215                         svr4*|esix*) dflt="-G $ldflags" ;;
6216                 *)     dflt='none' ;;
6217                         esac
6218                         ;;
6219     *) dflt="$lddlflags" ;;
6220     esac
6221
6222         : Try to guess additional flags to pick up local libraries.
6223         : Be careful not to append to a plain 'none'
6224         case "$dflt" in
6225         none) dflt='' ;;
6226         esac
6227         for thisflag in $ldflags; do
6228                 case "$thisflag" in
6229                 -L*)
6230                         case " $dflt " in
6231                         *" $thisflag "*) ;;
6232                         *) dflt="$dflt $thisflag" ;;
6233                         esac
6234                         ;;
6235                 esac
6236         done
6237
6238         case "$dflt" in
6239         ''|' ') dflt='none' ;;
6240         esac
6241
6242     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6243     . ./myread
6244     case "$ans" in
6245     none) lddlflags=' ' ;;
6246     *) lddlflags="$ans" ;;
6247     esac
6248
6249         cat <<EOM
6250
6251 Some systems may require passing special flags to $cc to indicate that
6252 the resulting executable will use dynamic linking.  To use no flags,
6253 say "none".
6254
6255 EOM
6256     case "$ccdlflags" in
6257     '') case "$osname" in
6258                 hpux)   dflt='-Wl,-E' ;;
6259                 linux)  dflt='-rdynamic' ;;
6260                 next)   dflt='none' ;;
6261                 sunos)  dflt='none' ;;
6262                 *)      dflt='none' ;;
6263             esac ;;
6264     ' ')  dflt='none' ;;
6265     *)  dflt="$ccdlflags" ;;
6266     esac
6267     rp="Any special flags to pass to $cc to use dynamic linking?"
6268     . ./myread
6269     case "$ans" in
6270     none) ccdlflags=' ' ;;
6271     *) ccdlflags="$ans" ;;
6272     esac
6273     ;;
6274 *)  usedl="$undef"
6275         ld='ld'
6276     dlsrc='dl_none.xs'
6277     lddlflags=''
6278     ccdlflags=''
6279     ;;
6280 esac
6281
6282 also=''
6283 case "$usedl" in
6284 $undef)
6285         # No dynamic loading being used, so don't bother even to prompt.
6286         useshrplib='false'
6287         ;;
6288 *)      case "$useshrplib" in
6289         '')     case "$osname" in
6290                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6291                         dflt=y
6292                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6293                         ;;
6294                 next*)
6295                         case "$osvers" in
6296                         4*)     dflt=y
6297                                 also='Building a shared libperl is needed for MAB support.'
6298                                 ;;
6299                         *)      dflt=n
6300                                 ;;
6301                         esac
6302                         ;;
6303                 *)      dflt=n
6304                         ;;
6305                 esac
6306                 ;;
6307         $define|true|[Yy]*)
6308                 dflt=y
6309                 ;;
6310         *)      dflt=n
6311                 ;;
6312         esac
6313         $cat << EOM
6314
6315 The perl executable is normally obtained by linking perlmain.c with
6316 libperl${_a}, any static extensions (usually just DynaLoader), and
6317 any other libraries needed on this system (such as -lm, etc.).  Since
6318 your system supports dynamic loading, it is probably possible to build
6319 a shared libperl.$so.  If you will have more than one executable linked
6320 to libperl.$so, this will significantly reduce the size of each
6321 executable, but it may have a noticeable affect on performance.  The
6322 default is probably sensible for your system.
6323 $also
6324
6325 EOM
6326         rp="Build a shared libperl.$so (y/n)"
6327         . ./myread
6328         case "$ans" in
6329         true|$define|[Yy]*)
6330                 useshrplib='true'  ;;
6331         *)      useshrplib='false' ;;
6332         esac
6333         ;;
6334 esac
6335
6336 case "$useshrplib" in
6337 true)
6338         case "$libperl" in
6339         '')
6340                 # Figure out a good name for libperl.so.  Since it gets stored in
6341                 # a version-specific architecture-dependent library, the version
6342                 # number isn't really that important, except for making cc/ld happy.
6343                 #
6344                 # A name such as libperl.so.3.1
6345                 majmin="libperl.$so.$patchlevel.$subversion"
6346                 # A name such as libperl.so.301
6347                 majonly=`echo $patchlevel $subversion |
6348                         $awk '{printf "%d%02d", $1, $2}'`
6349                 majonly=libperl.$so.$majonly
6350                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6351                 # rely on figuring it out from the naming of libc.
6352                 case "${osname}${osvers}" in
6353                 next4*)
6354                         dflt=libperl.5.$so
6355                         # XXX How handle the --version stuff for MAB?
6356                         ;;
6357                 linux*)  # ld won't link with a bare -lperl otherwise.
6358                         dflt=libperl.$so
6359                         ;;
6360                 cygwin*) # include version
6361                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6362                         ;;
6363                 *)      # Try to guess based on whether libc has major.minor.
6364                         case "$libc" in
6365                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6366                         *libc.$so.[0-9]*) dflt=$majonly ;;
6367                         *)      dflt=libperl.$so ;;
6368                         esac
6369                         ;;
6370                 esac
6371                 ;;
6372         *)      dflt=$libperl
6373                 ;;
6374         esac
6375         cat << EOM
6376
6377 I need to select a good name for the shared libperl.  If your system uses
6378 library names with major and minor numbers, then you might want something
6379 like $majmin.  Alternatively, if your system uses a single version
6380 number for shared libraries, then you might want to use $majonly.
6381 Or, your system might be quite happy with a simple libperl.$so.
6382
6383 Since the shared libperl will get installed into a version-specific
6384 architecture-dependent directory, the version number of the shared perl
6385 library probably isn't important, so the default should be o.k.
6386
6387 EOM
6388         rp='What name do you want to give to the shared libperl?'
6389         . ./myread
6390         libperl=$ans
6391         echo "Ok, I'll use $libperl"
6392         ;;
6393 *)
6394         libperl="libperl${_a}"
6395         ;;
6396 esac
6397
6398 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6399 case "$shrpdir" in
6400 '') ;;
6401 *)      $cat >&4 <<EOM
6402 WARNING:  Use of the shrpdir variable for the installation location of
6403 the shared $libperl is not supported.  It was never documented and
6404 will not work in this version.  Let me (perlbug@perl.com)
6405 know of any problems this may cause.
6406
6407 EOM
6408         case "$shrpdir" in
6409         "$archlibexp/CORE")
6410                 $cat >&4 <<EOM
6411 But your current setting of $shrpdir is
6412 the default anyway, so it's harmless.
6413 EOM
6414                 ;;
6415         *)
6416                 $cat >&4 <<EOM
6417 Further, your current attempted setting of $shrpdir
6418 conflicts with the value of $archlibexp/CORE
6419 that installperl will use.
6420 EOM
6421                 ;;
6422         esac
6423         ;;
6424 esac
6425
6426 # How will the perl executable find the installed shared $libperl?
6427 # Add $xxx to ccdlflags.
6428 # If we can't figure out a command-line option, use $shrpenv to
6429 # set env LD_RUN_PATH.  The main perl makefile uses this.
6430 shrpdir=$archlibexp/CORE
6431 xxx=''
6432 tmp_shrpenv=''
6433 if "$useshrplib"; then
6434     case "$osname" in 
6435         aix)
6436                 # We'll set it in Makefile.SH...
6437                 ;;
6438         solaris|netbsd)
6439                 xxx="-R $shrpdir"
6440                 ;;
6441         freebsd)
6442                 xxx="-Wl,-R$shrpdir"
6443                 ;;
6444         linux|irix*|dec_osf)
6445                 xxx="-Wl,-rpath,$shrpdir"
6446                 ;;
6447         next)
6448                 # next doesn't like the default...
6449                 ;;
6450         beos)
6451                 # beos doesn't like the default, either.
6452                 ;;
6453         hpux*)
6454                 # hpux doesn't like the default, either.
6455                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6456                 ;;
6457         *)
6458                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6459                 ;;
6460         esac
6461         case "$xxx" in
6462         '') ;;
6463         *)      
6464                 # Only add $xxx if it isn't already in ccdlflags.
6465                 case " $ccdlflags " in
6466                 *" $xxx "*)     ;;
6467                 *)      ccdlflags="$ccdlflags $xxx"
6468                         cat <<EOM >&4
6469
6470 Adding $xxx to the flags
6471 passed to $ld so that the perl executable will find the 
6472 installed shared $libperl.
6473
6474 EOM
6475                         ;;
6476                 esac
6477                 ;;
6478         esac
6479 fi
6480 # Fix ccdlflags in AIX for building external extensions.
6481 # (For building Perl itself bare -bE:perl.exp is needed,
6482 #  Makefile.SH takes care of this.)
6483 case "$osname" in
6484 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6485 esac
6486 # Respect a hint or command-line value.
6487 case "$shrpenv" in
6488 '') shrpenv="$tmp_shrpenv" ;;
6489 esac
6490 case "$ldlibpthname" in
6491 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6492 none)   ldlibpthname='' ;;
6493 esac
6494
6495 : determine where manual pages go
6496 set man1dir man1dir none
6497 eval $prefixit
6498 $cat <<EOM
6499
6500 $spackage has manual pages available in source form.
6501 EOM
6502 case "$nroff" in
6503 nroff)
6504         echo "However, you don't have nroff, so they're probably useless to you."
6505         case "$man1dir" in
6506         '') man1dir="none";;
6507         esac;;
6508 esac
6509 echo "If you don't want the manual sources installed, answer 'none'."
6510 case "$man1dir" in
6511 ' ') dflt=none
6512         ;;
6513 '')
6514         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6515         lookpath="$lookpath $prefixexp/man/p_man/man1"
6516         lookpath="$lookpath $prefixexp/man/u_man/man1"
6517         lookpath="$lookpath $prefixexp/man/man.1"
6518         case "$sysman" in
6519         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6520         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6521         esac
6522         set dflt
6523         eval $prefixup
6524         ;;
6525 *)  dflt="$man1dir"
6526         ;;
6527 esac
6528 echo " "
6529 fn=dn+~
6530 rp="Where do the main $spackage manual pages (source) go?"
6531 . ./getfile
6532 if $test "X$man1direxp" != "X$ansexp"; then
6533         installman1dir=''
6534 fi
6535 man1dir="$ans"
6536 man1direxp="$ansexp"
6537 case "$man1dir" in
6538 '')     man1dir=' '
6539         installman1dir='';;
6540 esac
6541
6542 : Change installation prefix, if necessary.
6543 if $test X"$prefix" != X"$installprefix"; then
6544         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6545 else
6546         installman1dir="$man1direxp"
6547 fi
6548
6549 : What suffix to use on installed man pages
6550
6551 case "$man1dir" in
6552 ' ')
6553         man1ext='0'
6554         ;;
6555 *)
6556         rp="What suffix should be used for the main $spackage man pages?"
6557         case "$man1ext" in
6558         '')     case "$man1dir" in
6559                 *1)  dflt=1 ;;
6560                 *1p) dflt=1p ;;
6561                 *1pm) dflt=1pm ;;
6562                 *l) dflt=l;;
6563                 *n) dflt=n;;
6564                 *o) dflt=o;;
6565                 *p) dflt=p;;
6566                 *C) dflt=C;;
6567                 *L) dflt=L;;
6568                 *L1) dflt=L1;;
6569                 *) dflt=1;;
6570                 esac
6571                 ;;
6572         *)      dflt="$man1ext";;
6573         esac
6574         . ./myread
6575         man1ext="$ans"
6576         ;;
6577 esac
6578
6579 : see if we can have long filenames
6580 echo " "
6581 rmlist="$rmlist /tmp/cf$$"
6582 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6583 first=123456789abcdef
6584 second=/tmp/cf$$/$first
6585 $rm -f $first $second
6586 if (echo hi >$first) 2>/dev/null; then
6587         if $test -f 123456789abcde; then
6588                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6589                 val="$undef"
6590         else
6591                 if (echo hi >$second) 2>/dev/null; then
6592                         if $test -f /tmp/cf$$/123456789abcde; then
6593                                 $cat <<'EOM'
6594 That's peculiar... You can have filenames longer than 14 characters, but only
6595 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6596 I shall consider your system cannot support long filenames at all.
6597 EOM
6598                                 val="$undef"
6599                         else
6600                                 echo 'You can have filenames longer than 14 characters.' >&4
6601                                 val="$define"
6602                         fi
6603                 else
6604                         $cat <<'EOM'
6605 How confusing! Some of your filesystems are sane enough to allow filenames
6606 longer than 14 characters but some others like /tmp can't even think about them.
6607 So, for now on, I shall assume your kernel does not allow them at all.
6608 EOM
6609                         val="$undef"
6610                 fi
6611         fi
6612 else
6613         $cat <<'EOM'
6614 You can't have filenames longer than 14 chars.  You can't even think about them!
6615 EOM
6616         val="$undef"
6617 fi 
6618 set d_flexfnam
6619 eval $setvar
6620 $rm -rf /tmp/cf$$ 123456789abcde*
6621
6622 : determine where library module manual pages go
6623 set man3dir man3dir none
6624 eval $prefixit
6625 $cat <<EOM
6626
6627 $spackage has manual pages for many of the library modules.
6628 EOM
6629
6630 case "$nroff" in
6631 nroff)
6632         $cat <<'EOM'
6633 However, you don't have nroff, so they're probably useless to you.
6634 EOM
6635         case "$man3dir" in
6636         '') man3dir="none";;
6637         esac;;
6638 esac
6639
6640 case "$d_flexfnam" in
6641 undef)
6642         $cat <<'EOM'
6643 However, your system can't handle the long file names like File::Basename.3. 
6644 EOM
6645         case "$man3dir" in
6646         '') man3dir="none";;
6647         esac;;
6648 esac
6649
6650 echo "If you don't want the manual sources installed, answer 'none'."
6651 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6652 case "$man3dir" in
6653 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6654         if $test -d "$privlib/man/man3"; then
6655                 cat <<EOM >&4
6656
6657 WARNING:  Previous versions of perl installed man3 pages into
6658 $privlib/man/man3.  This version will suggest a 
6659 new default of $dflt.  
6660 EOM
6661                 tdflt=$dflt
6662                 dflt='n'
6663                 rp='Do you wish to preserve the old behavior?(y/n)'
6664                 . ./myread
6665                 case "$ans" in
6666                 y*) dflt="$privlib/man/man3" ;;
6667                 *)  dflt=$tdflt ;;
6668                 esac
6669     fi
6670         ;;
6671 ' ') dflt=none;;
6672 *)      dflt="$man3dir" ;;
6673 esac
6674 echo " "
6675 fn=dn+~
6676 rp="Where do the $package library man pages (source) go?"
6677 . ./getfile
6678 man3dir="$ans"
6679 man3direxp="$ansexp"
6680 case "$man1dir" in
6681 '')     man3dir=' '
6682         installman3dir='';;
6683 esac
6684
6685 : Change installation prefix, if necessary.
6686 if $test X"$prefix" != X"$installprefix"; then
6687         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6688 else
6689         installman3dir="$man3direxp"
6690 fi
6691
6692 : What suffix to use on installed man pages
6693 case "$man3dir" in
6694 ' ')
6695         man3ext='0'
6696         ;;
6697 *)
6698         rp="What suffix should be used for the $package library man pages?"
6699         case "$man3ext" in
6700         '')     case "$man3dir" in
6701                 *3)  dflt=3 ;;
6702                 *3p) dflt=3p ;;
6703                 *3pm) dflt=3pm ;;
6704                 *l) dflt=l;;
6705                 *n) dflt=n;;
6706                 *o) dflt=o;;
6707                 *p) dflt=p;;
6708                 *C) dflt=C;;
6709                 *L) dflt=L;;
6710                 *L3) dflt=L3;;
6711                 *) dflt=3;;
6712                 esac
6713                 ;;
6714         *)      dflt="$man3ext";;
6715         esac
6716         . ./myread
6717         man3ext="$ans"
6718         ;;
6719 esac
6720
6721 : see if we have to deal with yellow pages, now NIS.
6722 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6723         if $test -f /usr/etc/nibindd; then
6724                 echo " "
6725                 echo "I'm fairly confident you're on a NeXT."
6726                 echo " "
6727                 rp='Do you get the hosts file via NetInfo?'
6728                 dflt=y
6729                 case "$hostcat" in
6730                 nidump*) ;;
6731                 '') ;;
6732                 *) dflt=n;;
6733                 esac
6734                 . ./myread
6735                 case "$ans" in
6736                 y*) hostcat='nidump hosts .';;
6737                 *)      case "$hostcat" in
6738                         nidump*) hostcat='';;
6739                         esac
6740                         ;;
6741                 esac
6742         fi
6743         case "$hostcat" in
6744         nidump*) ;;
6745         *)
6746                 case "$hostcat" in
6747                 *ypcat*) dflt=y;;
6748                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6749                                 dflt=y
6750                         else
6751                                 dflt=n
6752                         fi;;
6753                 *) dflt=n;;
6754                 esac
6755                 echo " "
6756                 rp='Are you getting the hosts file via yellow pages?'
6757                 . ./myread
6758                 case "$ans" in
6759                 y*) hostcat='ypcat hosts';;
6760                 *) hostcat='cat /etc/hosts';;
6761                 esac
6762                 ;;
6763         esac
6764 fi
6765 case "$hostcat" in
6766 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6767 esac
6768 case "$groupcat" in
6769 '') test -f /etc/group && groupcat='cat /etc/group';;
6770 esac
6771 case "$passcat" in
6772 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6773 esac
6774
6775 : now get the host name
6776 echo " "
6777 echo "Figuring out host name..." >&4
6778 case "$myhostname" in
6779 '') cont=true
6780         echo 'Maybe "hostname" will work...'
6781         if tans=`sh -c hostname 2>&1` ; then
6782                 myhostname=$tans
6783                 phostname=hostname
6784                 cont=''
6785         fi
6786         ;;
6787 *) cont='';;
6788 esac
6789 if $test "$cont"; then
6790         if ./xenix; then
6791                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6792                 if tans=`cat /etc/systemid 2>&1` ; then
6793                         myhostname=$tans
6794                         phostname='cat /etc/systemid'
6795                         echo "Whadyaknow.  Xenix always was a bit strange..."
6796                         cont=''
6797                 fi
6798         elif $test -r /etc/systemid; then
6799                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6800         fi
6801 fi
6802 if $test "$cont"; then
6803         echo 'No, maybe "uuname -l" will work...'
6804         if tans=`sh -c 'uuname -l' 2>&1` ; then
6805                 myhostname=$tans
6806                 phostname='uuname -l'
6807         else
6808                 echo 'Strange.  Maybe "uname -n" will work...'
6809                 if tans=`sh -c 'uname -n' 2>&1` ; then
6810                         myhostname=$tans
6811                         phostname='uname -n'
6812                 else
6813                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6814                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6815                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6816                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6817                         else
6818                                 case "$myhostname" in
6819                                 '') echo "Does this machine have an identity crisis or something?"
6820                                         phostname='';;
6821                                 *)
6822                                         echo "Well, you said $myhostname before..."
6823                                         phostname='echo $myhostname';;
6824                                 esac
6825                         fi
6826                 fi
6827         fi
6828 fi
6829 : you do not want to know about this
6830 set $myhostname
6831 myhostname=$1
6832
6833 : verify guess
6834 if $test "$myhostname" ; then
6835         dflt=y
6836         rp='Your host name appears to be "'$myhostname'".'" Right?"
6837         . ./myread
6838         case "$ans" in
6839         y*) ;;
6840         *) myhostname='';;
6841         esac
6842 fi
6843
6844 : bad guess or no guess
6845 while $test "X$myhostname" = X ; do
6846         dflt=''
6847         rp="Please type the (one word) name of your host:"
6848         . ./myread
6849         myhostname="$ans"
6850 done
6851
6852 : translate upper to lower if necessary
6853 case "$myhostname" in
6854 *[A-Z]*)
6855         echo "(Normalizing case in your host name)"
6856         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6857         ;;
6858 esac
6859
6860 case "$myhostname" in
6861 *.*)
6862         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6863         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6864         echo "(Trimming domain name from host name--host name is now $myhostname)"
6865         ;;
6866 *) case "$mydomain" in
6867         '')
6868                 {
6869                         test "X$hostcat" = "Xypcat hosts" &&
6870                         ypmatch "$myhostname" hosts 2>/dev/null |\
6871                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6872                         $test -s hosts
6873                 } || {
6874                         test "X$hostcat" != "X" &&
6875                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6876                                         /[       ]$myhostname[  . ]/p" > hosts
6877                 }
6878                 tmp_re="[       . ]"
6879                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6880                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6881                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6882                         hosts | $sort | $uniq | \
6883                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6884                 case `$echo X$dflt` in
6885                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6886                         dflt=.
6887                         ;;
6888                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6889                         ;;
6890                 esac
6891                 case "$dflt" in
6892                 .)
6893                         tans=`./loc resolv.conf X /etc /usr/etc`
6894                         if $test -f "$tans"; then
6895                                 echo "(Attempting domain name extraction from $tans)"
6896                                 dflt=.`$sed -n -e 's/   / /g' \
6897                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6898                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6899                                 case "$dflt" in
6900                                 .) dflt=.`$sed -n -e 's/        / /g' \
6901                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6902                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6903                                         ;;
6904                                 esac
6905                         fi
6906                         ;;
6907                 esac
6908                 case "$dflt" in
6909                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6910                         dflt=.`sh -c domainname 2>/dev/null`
6911                         case "$dflt" in
6912                         '') dflt='.';;
6913                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6914                         esac
6915                         ;;
6916                 esac
6917                 case "$dflt" in
6918                 .) echo "(Lost all hope -- silly guess then)"
6919                         dflt='.uucp'
6920                         ;;
6921                 esac
6922                 $rm -f hosts
6923                 ;;
6924         *) dflt="$mydomain";;
6925         esac;;
6926 esac
6927 echo " "
6928 rp="What is your domain name?"
6929 . ./myread
6930 tans="$ans"
6931 case "$ans" in
6932 '') ;;
6933 .*) ;;
6934 *) tans=".$tans";;
6935 esac
6936 mydomain="$tans"
6937
6938 : translate upper to lower if necessary
6939 case "$mydomain" in
6940 *[A-Z]*)
6941         echo "(Normalizing case in your domain name)"
6942         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6943         ;;
6944 esac
6945
6946 : a little sanity check here
6947 case "$phostname" in
6948 '') ;;
6949 *)
6950         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6951         $myhostname$mydomain|$myhostname) ;;
6952         *)
6953                 case "$phostname" in
6954                 sed*)
6955                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6956                         ;;
6957                 *)
6958                         echo "(That doesn't agree with your $phostname command, by the way.)"
6959                         ;;
6960                 esac
6961         ;;
6962         esac
6963         ;;
6964 esac
6965
6966 $cat <<EOM
6967
6968 I need to get your e-mail address in Internet format if possible, i.e.
6969 something like user@host.domain. Please answer accurately since I have
6970 no easy means to double check it. The default value provided below
6971 is most probably close to reality but may not be valid from outside
6972 your organization...
6973
6974 EOM
6975 cont=x
6976 while test "$cont"; do
6977         case "$cf_email" in
6978         '') dflt="$cf_by@$myhostname$mydomain";;
6979         *) dflt="$cf_email";;
6980         esac
6981         rp='What is your e-mail address?'
6982         . ./myread
6983         cf_email="$ans"
6984         case "$cf_email" in
6985         *@*.*) cont='' ;;
6986         *)
6987                 rp='Address does not look like an Internet one.  Use it anyway?'
6988                 case "$fastread" in
6989                 yes) dflt=y ;;
6990                 *) dflt=n ;;
6991                 esac
6992                 . ./myread
6993                 case "$ans" in
6994                 y*) cont='' ;;
6995                 *) echo " " ;;
6996                 esac
6997                 ;;
6998         esac
6999 done
7000
7001 $cat <<EOM
7002
7003 If you or somebody else will be maintaining perl at your site, please
7004 fill in the correct e-mail address here so that they may be contacted
7005 if necessary. Currently, the "perlbug" program included with perl
7006 will send mail to this address in addition to perlbug@perl.com. You may
7007 enter "none" for no administrator.
7008
7009 EOM
7010 case "$perladmin" in
7011 '') dflt="$cf_email";;
7012 *) dflt="$perladmin";;
7013 esac
7014 rp='Perl administrator e-mail address'
7015 . ./myread
7016 perladmin="$ans"
7017
7018 : figure out how to guarantee perl startup
7019 case "$startperl" in
7020 '')
7021         case "$sharpbang" in
7022         *!)
7023                 $cat <<EOH
7024
7025 I can use the #! construct to start perl on your system. This will
7026 make startup of perl scripts faster, but may cause problems if you
7027 want to share those scripts and perl is not in a standard place
7028 ($binexp/perl) on all your platforms. The alternative is to force
7029 a shell by starting the script with a single ':' character.
7030
7031 EOH
7032                 dflt="$binexp/perl"
7033                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7034                 . ./myread
7035                 case "$ans" in
7036                 none)   startperl=": # use perl";;
7037                 *)      startperl="#!$ans"
7038                         if $test 30 -lt `echo "$ans" | wc -c`; then
7039                                 $cat >&4 <<EOM
7040
7041 WARNING:  Some systems limit the #! command to 32 characters.
7042 If you experience difficulty running Perl scripts with #!, try
7043 installing Perl in a directory with a shorter pathname.
7044
7045 EOM
7046                         fi ;;
7047                 esac
7048                 ;;
7049         *) startperl=": # use perl"
7050                 ;;
7051         esac
7052         ;;
7053 esac
7054 echo "I'll use $startperl to start perl scripts."
7055
7056 : figure best path for perl in scripts
7057 case "$perlpath" in
7058 '')
7059         perlpath="$binexp/perl"
7060         case "$startperl" in
7061         *!*) ;;
7062         *)
7063                 $cat <<EOH
7064
7065 I will use the "eval 'exec'" idiom to start Perl on your system.
7066 I can use the full path of your Perl binary for this purpose, but
7067 doing so may cause problems if you want to share those scripts and
7068 Perl is not always in a standard place ($binexp/perl).
7069
7070 EOH
7071                 dflt="$binexp/perl"
7072                 rp="What path shall I use in \"eval 'exec'\"?"
7073                 . ./myread
7074                 perlpath="$ans"
7075                 ;;
7076         esac
7077         ;;
7078 esac
7079 case "$startperl" in
7080 *!*)    ;;
7081 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7082 esac
7083
7084 : determine where public executable scripts go
7085 set scriptdir scriptdir
7086 eval $prefixit
7087 case "$scriptdir" in
7088 '')
7089         dflt="$bin"
7090         : guess some guesses
7091         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7092         $test -d /usr/share/bin     && dflt=/usr/share/bin
7093         $test -d /usr/local/script  && dflt=/usr/local/script
7094         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7095         $test -d $prefixexp/script  && dflt=$prefixexp/script
7096         set dflt
7097         eval $prefixup
7098         ;;
7099 *)  dflt="$scriptdir"
7100         ;;
7101 esac
7102 $cat <<EOM
7103  
7104 Some installations have a separate directory just for executable scripts so
7105 that they can mount it across multiple architectures but keep the scripts in
7106 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7107 Or you might just lump your scripts in with all your other executables.
7108  
7109 EOM
7110 fn=d~
7111 rp='Where do you keep publicly executable scripts?'
7112 . ./getfile
7113 if $test "X$ansexp" != "X$scriptdirexp"; then
7114         installscript=''
7115 fi
7116 scriptdir="$ans"
7117 scriptdirexp="$ansexp"
7118 : Change installation prefix, if necessary.
7119 if $test X"$prefix" != X"$installprefix"; then
7120         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7121 else
7122         installscript="$scriptdirexp"
7123 fi
7124
7125 : determine where site specific architecture-dependent libraries go.
7126 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7127 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7128 : sitelib may have an optional trailing /share.
7129 case "$sitearch" in
7130 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7131         dflt="$dflt/$archname"
7132         ;;
7133 *)      dflt="$sitearch"
7134         ;;
7135 esac
7136 set sitearch sitearch none
7137 eval $prefixit
7138 $cat <<EOM
7139
7140 The installation process will also create a directory for
7141 architecture-dependent site-specific extensions and modules.
7142
7143 EOM
7144 fn=d~+
7145 rp='Pathname for the site-specific architecture-dependent library files?'
7146 . ./getfile
7147 sitearch="$ans"
7148 sitearchexp="$ansexp"
7149 : Change installation prefix, if necessary.
7150 if $test X"$prefix" != X"$installprefix"; then
7151         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7152 else
7153         installsitearch="$sitearchexp"
7154 fi
7155
7156 : determine where add-on public executables go
7157 case "$sitebin" in
7158 '')     dflt=$siteprefix/bin ;;
7159 *)      dflt=$sitebin ;;
7160 esac
7161 fn=d~
7162 rp='Pathname where the add-on public executables should be installed?'
7163 . ./getfile
7164 sitebin="$ans"
7165 sitebinexp="$ansexp"
7166 : Change installation prefix, if necessary.
7167 if $test X"$prefix" != X"$installprefix"; then
7168         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7169 else
7170         installsitebin="$sitebinexp"
7171 fi
7172
7173 : see if sqrtl exists
7174 set sqrtl d_sqrtl
7175 eval $inlibc
7176
7177 case "$ccflags" in
7178 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7179 esac
7180
7181 case "$uselongdouble" in
7182 $define|true|[yY]*)     dflt='y';;
7183 *) dflt='n';;
7184 esac
7185 cat <<EOM
7186
7187 Perl can be built to take advantage of long doubles which
7188 (if available) may give more accuracy and range for floating point numbers.
7189
7190 If this doesn't make any sense to you, just accept the default '$dflt'.
7191 EOM
7192 rp='Try to use long doubles if available?'
7193 . ./myread
7194 case "$ans" in
7195 y|Y)    val="$define"   ;;
7196 *)      val="$undef"    ;;
7197 esac
7198 set uselongdouble
7199 eval $setvar
7200
7201 case "$uselongdouble" in
7202 true|[yY]*) uselongdouble="$define" ;;
7203 esac
7204
7205 case "$uselongdouble" in
7206 $define)
7207 : Look for a hint-file generated 'call-back-unit'.  If the
7208 : user has specified that long doubles should be used,
7209 : we may need to set or change some other defaults.
7210         if $test -f uselongdouble.cbu; then
7211                 echo "Your platform has some specific hints for long doubles, using them..."
7212                 . ./uselongdouble.cbu
7213         else
7214                 $cat <<EOM
7215 (Your platform doesn't have any specific hints for long doubles.)
7216 EOM
7217         fi
7218         ;;
7219 esac
7220
7221 case "$uselongdouble:$d_sqrtl" in
7222 $define:$undef)
7223                 $cat <<EOM >&4
7224
7225 *** You requested the use of long doubles but you do not seem to have
7226 *** the mathematic functions for long doubles.  I'm disabling the use
7227 *** of long doubles.
7228
7229 EOM
7230         uselongdouble=$undef
7231         ;;
7232 esac
7233
7234 case "$useperlio" in
7235 $define|true|[yY]*)     dflt='y';;
7236 *) dflt='n';;
7237 esac
7238 cat <<EOM
7239
7240 Previous version of $package used the standard IO mechanisms as defined
7241 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7242 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7243 the default.  This abstraction layer can use AT&T's sfio (if you already
7244 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7245 problems with some extension modules.  Using PerlIO with stdio is safe,
7246 but it is slower than plain stdio and therefore is not the default.
7247
7248 If this doesn't make any sense to you, just accept the default '$dflt'.
7249 EOM
7250 rp='Use the experimental PerlIO abstraction layer?'
7251 . ./myread
7252 case "$ans" in
7253 y|Y) 
7254         val="$define"
7255         ;;     
7256 *)      
7257         echo "Ok, doing things the stdio way"
7258         val="$undef"
7259         ;;
7260 esac
7261 set useperlio
7262 eval $setvar 
7263
7264 case "$vendorprefix" in
7265 '')     d_vendorbin="$undef"
7266         vendorbin=''
7267         vendorbinexp=''
7268         ;;
7269 *)      d_vendorbin="$define"
7270         : determine where vendor-supplied executables go.
7271         case "$vendorbin" in
7272         '') dflt=$vendorprefix/bin ;;
7273         *)      dflt="$vendorbin" ;;
7274         esac
7275         fn=d~+
7276         rp='Pathname for the vendor-supplied executables directory?'
7277         . ./getfile
7278         vendorbin="$ans"
7279         vendorbinexp="$ansexp"
7280         ;;
7281 esac
7282 : Change installation prefix, if necessary.
7283 if $test X"$prefix" != X"$installprefix"; then
7284         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7285 else
7286         installvendorbin="$vendorbinexp"
7287 fi
7288
7289 : see if qgcvt exists
7290 set qgcvt d_qgcvt
7291 eval $inlibc
7292
7293 : check for length of double
7294 echo " "
7295 case "$doublesize" in
7296 '')
7297         echo "Checking to see how big your double precision numbers are..." >&4
7298         $cat >try.c <<'EOCP'
7299 #include <stdio.h>
7300 int main()
7301 {
7302     printf("%d\n", (int)sizeof(double));
7303     exit(0);
7304 }
7305 EOCP
7306         set try
7307         if eval $compile_ok; then
7308                 doublesize=`./try`
7309                 echo "Your double is $doublesize bytes long."
7310         else
7311                 dflt='8'
7312                 echo "(I can't seem to compile the test program.  Guessing...)"
7313                 rp="What is the size of a double precision number (in bytes)?"
7314                 . ./myread
7315                 doublesize="$ans"
7316         fi
7317         ;;
7318 esac
7319 $rm -f try.c try
7320
7321 : check for long doubles
7322 echo " "
7323 echo "Checking to see if you have long double..." >&4
7324 echo 'int main() { long double x = 7.0; }' > try.c
7325 set try
7326 if eval $compile; then
7327         val="$define"
7328         echo "You have long double."
7329 else
7330         val="$undef"
7331         echo "You do not have long double."
7332 fi
7333 $rm try.*
7334 set d_longdbl
7335 eval $setvar
7336
7337 : check for length of long double
7338 case "${d_longdbl}${longdblsize}" in
7339 $define)
7340         echo " "
7341         echo "Checking to see how big your long doubles are..." >&4
7342         $cat >try.c <<'EOCP'
7343 #include <stdio.h>
7344 int main()
7345 {
7346         printf("%d\n", sizeof(long double));
7347 }
7348 EOCP
7349         set try
7350         set try
7351         if eval $compile; then
7352                 longdblsize=`./try$exe_ext`
7353                 echo "Your long doubles are $longdblsize bytes long."
7354         else
7355                 dflt='8'
7356                 echo " "
7357                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7358                 rp="What is the size of a long double (in bytes)?"
7359                 . ./myread
7360                 longdblsize="$ans"
7361         fi
7362         if $test "X$doublesize" = "X$longdblsize"; then
7363                 echo "(That isn't any different from an ordinary double.)"
7364         fi      
7365         ;;
7366 esac
7367 $rm -f try.* try
7368
7369 echo " "
7370
7371 if $test X"$d_longdbl" = X"$define"; then
7372
7373 echo "Checking how to print long doubles..." >&4
7374
7375 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7376         $cat >try.c <<'EOCP'
7377 #include <sys/types.h>
7378 #include <stdio.h>
7379 int main() {
7380   double d = 123.456;
7381   printf("%.3f\n", d);
7382 }
7383 EOCP
7384         set try
7385         if eval $compile; then
7386                 yyy=`./try$exe_ext`
7387                 case "$yyy" in
7388                 123.456)
7389                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7390                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7391                         echo "We will use %f."
7392                         ;;
7393                 esac
7394         fi
7395 fi
7396
7397 if $test X"$sPRIfldbl" = X; then
7398         $cat >try.c <<'EOCP'
7399 #include <sys/types.h>
7400 #include <stdio.h>
7401 int main() {
7402   long double d = 123.456;
7403   printf("%.3llf\n", d);
7404 }
7405 EOCP
7406         set try
7407         if eval $compile; then
7408                 yyy=`./try$exe_ext`
7409                 case "$yyy" in
7410                 123.456)
7411                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7412                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7413                         echo "We will use %llf."
7414                         ;;
7415                 esac
7416         fi
7417 fi
7418
7419 if $test X"$sPRIfldbl" = X; then
7420         $cat >try.c <<'EOCP'
7421 #include <sys/types.h>
7422 #include <stdio.h>
7423 int main() {
7424   long double d = 123.456;
7425   printf("%.3Lf\n", d);
7426 }
7427 EOCP
7428         set try
7429         if eval $compile; then
7430                 yyy=`./try$exe_ext`
7431                 case "$yyy" in
7432                 123.456)
7433                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7434                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7435                         echo "We will use %Lf."
7436                         ;;
7437                 esac
7438         fi
7439 fi
7440
7441 if $test X"$sPRIfldbl" = X; then
7442         $cat >try.c <<'EOCP'
7443 #include <sys/types.h>
7444 #include <stdio.h>
7445 int main() {
7446   long double d = 123.456;
7447   printf("%.3lf\n", d);
7448 }
7449 EOCP
7450         set try
7451         if eval $compile; then
7452                 yyy=`./try$exe_ext`
7453                 case "$yyy" in
7454                 123.456)
7455                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7456                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7457                         echo "We will use %lf."
7458                         ;;
7459                 esac
7460         fi
7461 fi
7462
7463 if $test X"$sPRIfldbl" = X; then
7464         echo "Cannot figure out how to print long doubles." >&4
7465 fi
7466
7467 $rm -f try try.*
7468
7469 fi # d_longdbl
7470
7471 case "$sPRIfldbl" in
7472 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7473         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7474         ;;
7475 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7476         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7477         ;;
7478 esac
7479
7480 : Check how to convert floats to strings.
7481 if test "X$d_Gconvert" = X; then
7482         echo " "
7483         echo "Checking for an efficient way to convert floats to strings."
7484         echo " " > try.c
7485         case "$uselongdouble" in
7486         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7487         esac
7488         case "$d_longdbl" in
7489         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7490         esac
7491         case "$d_PRIgldbl" in
7492         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7493         esac
7494         $cat >>try.c <<EOP
7495 #ifdef TRY_gconvert
7496 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7497 char *myname = "gconvert";
7498 #endif
7499 #ifdef TRY_gcvt
7500 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7501 char *myname = "gcvt";
7502 #endif
7503 #ifdef TRY_qgcvt
7504 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7505 char *myname = "qgcvt";
7506 #define DOUBLETYPE long double
7507 #endif
7508 #ifdef TRY_sprintf
7509 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7510 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7511 #else
7512 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7513 #endif
7514 char *myname = "sprintf";
7515 #endif
7516
7517 #ifndef DOUBLETYPE
7518 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7519 #define DOUBLETYPE long double
7520 #else
7521 #define DOUBLETYPE double
7522 #endif
7523 #endif
7524
7525 #include <stdio.h>
7526
7527 #define I_STDLIB $i_stdlib
7528 #ifdef I_STDLIB
7529 #include <stdlib.h>
7530 #endif
7531
7532 int
7533 checkit(expect, got)
7534 char *expect;
7535 char *got;
7536 {
7537     if (strcmp(expect, got)) {
7538                 printf("%s oddity:  Expected %s, got %s\n",
7539                         myname, expect, got);
7540                 exit(1);
7541         }
7542 }
7543
7544 int main()
7545
7546         char buf[64]; 
7547         buf[63] = '\0';
7548
7549         /* This must be 1st test on (which?) platform */
7550         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7551         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7552         checkit("0.1", buf);
7553
7554         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7555         checkit("1", buf);
7556
7557         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7558         checkit("1.1", buf);
7559
7560         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7561         checkit("1.01", buf);
7562
7563         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7564         checkit("1.001", buf);
7565
7566         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7567         checkit("1.0001", buf);
7568
7569         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7570         checkit("1.00001", buf);
7571
7572         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7573         checkit("1.000001", buf);
7574
7575         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7576         checkit("0", buf);
7577
7578         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7579         checkit("-1", buf);
7580
7581         /* Some Linux gcvt's give 1.e+5 here. */
7582         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7583         checkit("100000", buf);
7584         
7585         /* Some Linux gcvt's give -1.e+5 here. */
7586         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7587         checkit("-100000", buf);
7588
7589         exit(0);
7590 }
7591 EOP
7592         case "$d_Gconvert" in
7593         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7594         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7595         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7596         *) xxx_list='gconvert gcvt sprintf' ;;
7597         esac
7598
7599         case "$d_longdbl$uselongdouble$d_qgcvt" in
7600         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7601         esac
7602
7603         for xxx_convert in $xxx_list; do
7604                 echo "Trying $xxx_convert..."
7605                 $rm -f try try$_o
7606                 set try -DTRY_$xxx_convert
7607                 if eval $compile; then
7608                         echo "$xxx_convert() found." >&4
7609                         if ./try; then
7610                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7611                                 break;
7612                         else
7613                                 echo "...But $xxx_convert didn't work as I expected."
7614                         fi
7615                 else
7616                         echo "$xxx_convert NOT found." >&4
7617                 fi
7618         done
7619                 
7620         case "$xxx_convert" in
7621         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7622         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7623         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7624         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7625            "$define$define$define")
7626               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7627            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7628            esac
7629            ;;  
7630         esac
7631 fi
7632
7633 : Initialize h_fcntl
7634 h_fcntl=false
7635
7636 : Initialize h_sysfile
7637 h_sysfile=false
7638
7639 : access call always available on UNIX
7640 set access d_access
7641 eval $inlibc
7642
7643 : locate the flags for 'access()'
7644 case "$d_access" in
7645 "$define")
7646         echo " "
7647         $cat >access.c <<'EOCP'
7648 #include <sys/types.h>
7649 #ifdef I_FCNTL
7650 #include <fcntl.h>
7651 #endif
7652 #ifdef I_SYS_FILE
7653 #include <sys/file.h>
7654 #endif
7655 #ifdef I_UNISTD
7656 #include <unistd.h>
7657 #endif
7658 int main() {
7659         exit(R_OK);
7660 }
7661 EOCP
7662         : check sys/file.h first, no particular reason here
7663         if $test `./findhdr sys/file.h` && \
7664                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7665                 h_sysfile=true;
7666                 echo "<sys/file.h> defines the *_OK access constants." >&4
7667         elif $test `./findhdr fcntl.h` && \
7668                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7669                 h_fcntl=true;
7670                 echo "<fcntl.h> defines the *_OK access constants." >&4
7671         elif $test `./findhdr unistd.h` && \
7672                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7673                 echo "<unistd.h> defines the *_OK access constants." >&4
7674         else
7675                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7676         fi
7677         ;;
7678 esac
7679 $rm -f access*
7680
7681 : see if accessx exists
7682 set accessx d_accessx
7683 eval $inlibc
7684
7685 : see if alarm exists
7686 set alarm d_alarm
7687 eval $inlibc
7688
7689 : see if atolf exists
7690 set atolf d_atolf
7691 eval $inlibc
7692
7693 : see if atoll exists
7694 set atoll d_atoll
7695 eval $inlibc
7696
7697 : Look for GNU-cc style attribute checking
7698 echo " "
7699 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7700 $cat >attrib.c <<'EOCP'
7701 #include <stdio.h>
7702 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7703 EOCP
7704 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7705         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7706                 echo "Your C compiler doesn't fully support __attribute__."
7707                 val="$undef"
7708         else
7709                 echo "Your C compiler supports __attribute__."
7710                 val="$define"
7711         fi
7712 else
7713         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7714         val="$undef"
7715 fi
7716 set d_attribut
7717 eval $setvar
7718 $rm -f attrib*
7719
7720 : see if bcmp exists
7721 set bcmp d_bcmp
7722 eval $inlibc
7723
7724 : see if bcopy exists
7725 set bcopy d_bcopy
7726 eval $inlibc
7727
7728 : see if this is a unistd.h system
7729 set unistd.h i_unistd
7730 eval $inhdr
7731
7732 : see if getpgrp exists
7733 set getpgrp d_getpgrp
7734 eval $inlibc
7735
7736 case "$d_getpgrp" in
7737 "$define")
7738         echo " "
7739         echo "Checking to see which flavor of getpgrp is in use..."
7740         $cat >set.c <<EOP
7741 #$i_unistd I_UNISTD
7742 #include <sys/types.h>
7743 #ifdef I_UNISTD
7744 #  include <unistd.h>
7745 #endif
7746 int main()
7747 {
7748         if (getuid() == 0) {
7749                 printf("(I see you are running Configure as super-user...)\n");
7750                 setuid(1);
7751         }
7752 #ifdef TRY_BSD_PGRP
7753         if (getpgrp(1) == 0)
7754                 exit(0);
7755 #else
7756         if (getpgrp() > 0)
7757                 exit(0);
7758 #endif
7759         exit(1);
7760 }
7761 EOP
7762         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7763                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7764                 val="$define"
7765         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7766                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7767                 val="$undef"
7768         else
7769                 echo "I can't seem to compile and run the test program."
7770                 if ./usg; then
7771                         xxx="a USG one, i.e. you use getpgrp()."
7772                 else
7773                         # SVR4 systems can appear rather BSD-ish.
7774                         case "$i_unistd" in
7775                         $undef)
7776                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7777                                 val="$define"
7778                                 ;;
7779                         $define)
7780                                 xxx="probably a USG one, i.e. you use getpgrp()."
7781                                 val="$undef"
7782                                 ;;
7783                         esac
7784                 fi
7785                 echo "Assuming your getpgrp is $xxx" >&4
7786         fi
7787         ;;
7788 *) val="$undef";;
7789 esac
7790 set d_bsdgetpgrp
7791 eval $setvar
7792 $rm -f set set.c
7793
7794 : see if setpgrp exists
7795 set setpgrp d_setpgrp
7796 eval $inlibc
7797
7798 case "$d_setpgrp" in
7799 "$define")
7800         echo " "
7801         echo "Checking to see which flavor of setpgrp is in use..."
7802         $cat >set.c <<EOP
7803 #$i_unistd I_UNISTD
7804 #include <sys/types.h>
7805 #ifdef I_UNISTD
7806 #  include <unistd.h>
7807 #endif
7808 int main()
7809 {
7810         if (getuid() == 0) {
7811                 printf("(I see you are running Configure as super-user...)\n");
7812                 setuid(1);
7813         }
7814 #ifdef TRY_BSD_PGRP
7815         if (-1 == setpgrp(1, 1))
7816                 exit(0);
7817 #else
7818         if (setpgrp() != -1)
7819                 exit(0);
7820 #endif
7821         exit(1);
7822 }
7823 EOP
7824         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7825                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7826                 val="$define"
7827         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7828                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7829                 val="$undef"
7830         else
7831                 echo "(I can't seem to compile and run the test program.)"
7832                 if ./usg; then
7833                         xxx="a USG one, i.e. you use setpgrp()."
7834                 else
7835                         # SVR4 systems can appear rather BSD-ish.
7836                         case "$i_unistd" in
7837                         $undef)
7838                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7839                                 val="$define"
7840                                 ;;
7841                         $define)
7842                                 xxx="probably a USG one, i.e. you use setpgrp()."
7843                                 val="$undef"
7844                                 ;;
7845                         esac
7846                 fi
7847                 echo "Assuming your setpgrp is $xxx" >&4
7848         fi
7849         ;;
7850 *) val="$undef";;
7851 esac
7852 set d_bsdsetpgrp
7853 eval $setvar
7854 $rm -f set set.c
7855 : see if bzero exists
7856 set bzero d_bzero
7857 eval $inlibc
7858
7859 : see if signal is declared as pointer to function returning int or void
7860 echo " "
7861 xxx=`./findhdr signal.h`
7862 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7863 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7864         echo "You have int (*signal())() instead of void." >&4
7865         val="$undef"
7866 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7867         echo "You have void (*signal())()." >&4
7868         val="$define"
7869 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7870         echo "You have int (*signal())() instead of void." >&4
7871         val="$undef"
7872 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7873         echo "You have void (*signal())()." >&4
7874         val="$define"
7875 else
7876         case "$d_voidsig" in
7877         '')
7878         echo "I can't determine whether signal handler returns void or int..." >&4
7879                 dflt=void
7880                 rp="What type does your signal handler return?"
7881                 . ./myread
7882                 case "$ans" in
7883                 v*) val="$define";;
7884                 *) val="$undef";;
7885                 esac;;
7886         "$define")
7887                 echo "As you already told me, signal handler returns void." >&4
7888                 val="$define"
7889                 ;;
7890         *)      echo "As you already told me, signal handler returns int." >&4
7891                 val="$undef"
7892                 ;;
7893         esac
7894 fi
7895 set d_voidsig
7896 eval $setvar
7897 case "$d_voidsig" in
7898 "$define") signal_t="void";;
7899 *) signal_t="int";;
7900 esac
7901 $rm -f $$.tmp
7902
7903 : check for ability to cast large floats to 32-bit ints.
7904 echo " "
7905 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7906 if $test "$intsize" -ge 4; then
7907         xxx=int
7908 else
7909         xxx=long
7910 fi
7911 $cat >try.c <<EOCP
7912 #include <stdio.h>
7913 #include <sys/types.h>
7914 #include <signal.h>
7915 $signal_t blech(s) int s; { exit(3); }
7916 int main()
7917 {
7918         $xxx i32;
7919         double f, g;
7920         int result = 0;
7921         char str[16];
7922         signal(SIGFPE, blech);
7923
7924         /* Don't let compiler optimize the test away.  Store the number 
7925            in a writable string for gcc to pass to sscanf under HP/UX.
7926         */
7927         sprintf(str, "2147483647");
7928         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7929         g = 10 * f;
7930         i32  = ($xxx) g;
7931
7932         /* x86 processors will probably give 0x8000 0000, which is a
7933        sign change.  We don't want that.  We want to mimic SPARC
7934            behavior here, which is to preserve the sign and give
7935            back 0x7fff ffff.
7936         */
7937         if (i32 != ($xxx) f)
7938                 result |= 1;
7939         exit(result);
7940 }
7941 EOCP
7942 set try
7943 if eval $compile_ok; then
7944         ./try
7945         yyy=$?
7946 else
7947         echo "(I can't seem to compile the test program--assuming it can't)"
7948         yyy=1
7949 fi
7950 case "$yyy" in
7951 0)      val="$define"
7952         echo "Yup, it can."
7953         ;;
7954 *)      val="$undef"
7955         echo "Nope, it can't."
7956         ;;
7957 esac
7958 set d_casti32
7959 eval $setvar
7960 $rm -f try try.*
7961
7962 : check for ability to cast negative floats to unsigned
7963 echo " "
7964 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7965 $cat >try.c <<EOCP
7966 #include <stdio.h>
7967 #include <sys/types.h>
7968 #include <signal.h>
7969 $signal_t blech(s) int s; { exit(7); }
7970 $signal_t blech_in_list(s) int s; { exit(4); }
7971 unsigned long dummy_long(p) unsigned long p; { return p; }
7972 unsigned int dummy_int(p) unsigned int p; { return p; }
7973 unsigned short dummy_short(p) unsigned short p; { return p; }
7974 int main()
7975 {
7976         double f;
7977         unsigned long along;
7978         unsigned int aint;
7979         unsigned short ashort;
7980         int result = 0;
7981         char str[16];
7982         
7983         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7984            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7985            optimized the whole file away
7986         */
7987         /* Store the number in a writable string for gcc to pass to 
7988            sscanf under HP/UX.
7989         */
7990         sprintf(str, "-123");
7991         sscanf(str, "%lf", &f);  /* f = -123.; */
7992
7993         signal(SIGFPE, blech);
7994         along = (unsigned long)f;
7995         aint = (unsigned int)f;
7996         ashort = (unsigned short)f;
7997         if (along != (unsigned long)-123)
7998                 result |= 1;
7999         if (aint != (unsigned int)-123)
8000                 result |= 1;
8001         if (ashort != (unsigned short)-123)
8002                 result |= 1;
8003         sprintf(str, "1073741824.");
8004         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8005         f = f + f;
8006         along = 0;
8007         along = (unsigned long)f;
8008         if (along != 0x80000000)
8009                 result |= 2;
8010         f -= 1.;
8011         along = 0;
8012         along = (unsigned long)f;
8013         if (along != 0x7fffffff)
8014                 result |= 1;
8015         f += 2.;
8016         along = 0;
8017         along = (unsigned long)f;
8018         if (along != 0x80000001)
8019                 result |= 2;
8020         if (result)
8021                 exit(result);
8022         signal(SIGFPE, blech_in_list);
8023         sprintf(str, "123.");
8024         sscanf(str, "%lf", &f);  /* f = 123.; */
8025         along = dummy_long((unsigned long)f);
8026         aint = dummy_int((unsigned int)f);
8027         ashort = dummy_short((unsigned short)f);
8028         if (along != (unsigned long)123)
8029                 result |= 4;
8030         if (aint != (unsigned int)123)
8031                 result |= 4;
8032         if (ashort != (unsigned short)123)
8033                 result |= 4;
8034         exit(result);
8035
8036 }
8037 EOCP
8038 set try
8039 if eval $compile_ok; then
8040         ./try
8041         castflags=$?
8042 else
8043         echo "(I can't seem to compile the test program--assuming it can't)"
8044         castflags=7
8045 fi
8046 case "$castflags" in
8047 0)      val="$define"
8048         echo "Yup, it can."
8049         ;;
8050 *)      val="$undef"
8051         echo "Nope, it can't."
8052         ;;
8053 esac
8054 set d_castneg
8055 eval $setvar
8056 $rm -f try.*
8057
8058 : see if vprintf exists
8059 echo " "
8060 if set vprintf val -f d_vprintf; eval $csym; $val; then
8061         echo 'vprintf() found.' >&4
8062         val="$define"
8063         $cat >vprintf.c <<'EOF'
8064 #include <varargs.h>
8065
8066 int main() { xxx("foo"); }
8067
8068 xxx(va_alist)
8069 va_dcl
8070 {
8071         va_list args;
8072         char buf[10];
8073
8074         va_start(args);
8075         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8076 }
8077 EOF
8078         set vprintf
8079         if eval $compile && ./vprintf; then
8080                 echo "Your vsprintf() returns (int)." >&4
8081                 val2="$undef"
8082         else
8083                 echo "Your vsprintf() returns (char*)." >&4
8084                 val2="$define"
8085         fi
8086 else
8087         echo 'vprintf() NOT found.' >&4
8088                 val="$undef"
8089                 val2="$undef"
8090 fi
8091 set d_vprintf
8092 eval $setvar
8093 val=$val2
8094 set d_charvspr
8095 eval $setvar
8096
8097 : see if chown exists
8098 set chown d_chown
8099 eval $inlibc
8100
8101 : see if chroot exists
8102 set chroot d_chroot
8103 eval $inlibc
8104
8105 : see if chsize exists
8106 set chsize d_chsize
8107 eval $inlibc
8108
8109 : check for const keyword
8110 echo " "
8111 echo 'Checking to see if your C compiler knows about "const"...' >&4
8112 $cat >const.c <<'EOCP'
8113 typedef struct spug { int drokk; } spug;
8114 int main()
8115 {
8116         const char *foo;
8117         const spug y;
8118 }
8119 EOCP
8120 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8121         val="$define"
8122         echo "Yup, it does."
8123 else
8124         val="$undef"
8125         echo "Nope, it doesn't."
8126 fi
8127 set d_const
8128 eval $setvar
8129
8130 : see if crypt exists
8131 echo " "
8132 if set crypt val -f d_crypt; eval $csym; $val; then
8133         echo 'crypt() found.' >&4
8134         val="$define"
8135         cryptlib=''
8136 else
8137         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8138         if $test -z "$cryptlib"; then
8139                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8140         else
8141                 cryptlib=-lcrypt
8142         fi
8143         if $test -z "$cryptlib"; then
8144                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8145         else
8146                 cryptlib=-lcrypt
8147         fi
8148         if $test -z "$cryptlib"; then
8149                 cryptlib=`./loc libcrypt$_a "" $libpth`
8150         else
8151                 cryptlib=-lcrypt
8152         fi
8153         if $test -z "$cryptlib"; then
8154                 echo 'crypt() NOT found.' >&4
8155                 val="$undef"
8156         else
8157                 val="$define"
8158         fi
8159 fi
8160 set d_crypt
8161 eval $setvar
8162
8163 : get csh whereabouts
8164 case "$csh" in
8165 'csh') val="$undef" ;;
8166 *) val="$define" ;;
8167 esac
8168 set d_csh
8169 eval $setvar
8170 : Respect a hint or command line value for full_csh.
8171 case "$full_csh" in
8172 '') full_csh=$csh ;;
8173 esac
8174
8175 : see if cuserid exists
8176 set cuserid d_cuserid
8177 eval $inlibc
8178
8179 : see if this is a limits.h system
8180 set limits.h i_limits
8181 eval $inhdr
8182
8183 : see if this is a float.h system
8184 set float.h i_float
8185 eval $inhdr
8186
8187 : See if number of significant digits in a double precision number is known
8188 echo " "
8189 $cat >dbl_dig.c <<EOM
8190 #$i_limits I_LIMITS
8191 #$i_float I_FLOAT
8192 #ifdef I_LIMITS
8193 #include <limits.h>
8194 #endif
8195 #ifdef I_FLOAT
8196 #include <float.h>
8197 #endif
8198 #ifdef DBL_DIG
8199 printf("Contains DBL_DIG");
8200 #endif
8201 EOM
8202 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8203 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8204         echo "DBL_DIG found." >&4
8205         val="$define"
8206 else
8207         echo "DBL_DIG NOT found." >&4
8208         val="$undef"
8209 fi
8210 $rm -f dbl_dig.?
8211 set d_dbl_dig
8212 eval $setvar
8213
8214 : see if difftime exists
8215 set difftime d_difftime
8216 eval $inlibc
8217
8218 : see if this is a dirent system
8219 echo " "
8220 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8221         val="$define"
8222         echo "<dirent.h> found." >&4
8223 else
8224         val="$undef"
8225         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8226                 echo "<sys/dir.h> found." >&4
8227                 echo " "
8228         else
8229                 xinc=`./findhdr sys/ndir.h`
8230         fi
8231         echo "<dirent.h> NOT found." >&4
8232 fi
8233 set i_dirent
8234 eval $setvar
8235
8236 : Look for type of directory structure.
8237 echo " "
8238 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8239
8240 case "$direntrytype" in
8241 ''|' ')
8242         case "$i_dirent" in
8243         $define) guess1='struct dirent' ;;
8244         *) guess1='struct direct'  ;;
8245         esac
8246         ;;
8247 *)      guess1="$direntrytype"
8248         ;;
8249 esac
8250
8251 case "$guess1" in
8252 'struct dirent') guess2='struct direct' ;;
8253 *) guess2='struct dirent' ;;
8254 esac
8255                 
8256 if $contains "$guess1" try.c >/dev/null 2>&1; then
8257         direntrytype="$guess1"
8258         echo "Your directory entries are $direntrytype." >&4
8259 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8260         direntrytype="$guess2"
8261         echo "Your directory entries seem to be $direntrytype." >&4
8262 else
8263         echo "I don't recognize your system's directory entries." >&4
8264         rp="What type is used for directory entries on this system?"
8265         dflt="$guess1"
8266         . ./myread
8267         direntrytype="$ans"
8268 fi
8269 $rm -f try.c
8270
8271
8272 : see if the directory entry stores field length
8273 echo " "
8274 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8275 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8276         echo "Good, your directory entry keeps length information in d_namlen." >&4
8277         val="$define"
8278 else
8279         echo "Your directory entry does not know about the d_namlen field." >&4
8280         val="$undef"
8281 fi
8282 set d_dirnamlen
8283 eval $setvar
8284 $rm -f try.c
8285
8286 : see if dlerror exists
8287 xxx_runnm="$runnm"
8288 runnm=false
8289 set dlerror d_dlerror
8290 eval $inlibc
8291 runnm="$xxx_runnm"
8292
8293 : see if dlfcn is available
8294 set dlfcn.h i_dlfcn
8295 eval $inhdr
8296
8297 case "$usedl" in
8298 $define|y|true)
8299         $cat << EOM
8300
8301 On a few systems, the dynamically loaded modules that perl generates and uses
8302 will need a different extension than shared libs. The default will probably
8303 be appropriate.
8304
8305 EOM
8306         case "$dlext" in
8307         '')     dflt="$so" ;;
8308         *)      dflt="$dlext" ;;
8309         esac
8310         rp='What is the extension of dynamically loaded modules'
8311         . ./myread
8312         dlext="$ans"
8313         ;;
8314 *)
8315         dlext="none"
8316         ;;
8317 esac
8318
8319 : Check if dlsym need a leading underscore
8320 echo " "
8321 val="$undef"
8322
8323 case "$dlsrc" in
8324 dl_dlopen.xs)
8325         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8326         $cat >dyna.c <<'EOM'
8327 fred () { }
8328 EOM
8329
8330 $cat >fred.c<<EOM
8331
8332 #include <stdio.h>
8333 #$i_dlfcn I_DLFCN
8334 #ifdef I_DLFCN
8335 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8336 #else
8337 #include <sys/types.h>
8338 #include <nlist.h>
8339 #include <link.h>
8340 #endif
8341
8342 extern int fred() ;
8343
8344 int main()
8345 {
8346     void * handle ;
8347     void * symbol ;
8348 #ifndef RTLD_LAZY
8349     int mode = 1 ;
8350 #else
8351     int mode = RTLD_LAZY ;
8352 #endif
8353     handle = dlopen("./dyna.$dlext", mode) ;
8354     if (handle == NULL) {
8355         printf ("1\n") ;
8356         fflush (stdout) ;
8357         exit(0);
8358     }
8359     symbol = dlsym(handle, "fred") ;
8360     if (symbol == NULL) {
8361         /* try putting a leading underscore */
8362         symbol = dlsym(handle, "_fred") ;
8363         if (symbol == NULL) {
8364             printf ("2\n") ;
8365             fflush (stdout) ;
8366             exit(0);
8367         }
8368         printf ("3\n") ;
8369     }
8370     else
8371         printf ("4\n") ;
8372     fflush (stdout) ;
8373     exit(0);
8374 }
8375 EOM
8376         : Call the object file tmp-dyna.o in case dlext=o.
8377         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8378                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8379                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8380                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8381                 xxx=`./fred`
8382                 case $xxx in
8383                 1)      echo "Test program failed using dlopen." >&4
8384                         echo "Perhaps you should not use dynamic loading." >&4;;
8385                 2)      echo "Test program failed using dlsym." >&4
8386                         echo "Perhaps you should not use dynamic loading." >&4;;
8387                 3)      echo "dlsym needs a leading underscore" >&4
8388                         val="$define" ;;
8389                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8390                 esac
8391         else
8392                 echo "I can't compile and run the test program." >&4
8393                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8394         fi
8395         ;;
8396 esac
8397                 
8398 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8399
8400 set d_dlsymun
8401 eval $setvar
8402
8403 hasproto='varname=$1; func=$2; shift; shift;
8404 while $test $# -ge 2; do
8405         case "$1" in
8406         $define) echo "#include <$2>";;
8407         esac ;
8408     shift 2;
8409 done > try.c;
8410 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8411 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8412         echo "$func() prototype found.";
8413         val="$define";
8414 else
8415         echo "$func() prototype NOT found.";
8416         val="$undef";
8417 fi;
8418 set $varname;
8419 eval $setvar;
8420 $rm -f try.c tryout.c'
8421
8422 : see if prototype for drand48 is available
8423 echo " "
8424 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8425 eval $hasproto
8426
8427 : see if dup2 exists
8428 set dup2 d_dup2
8429 eval $inlibc
8430
8431 : see if eaccess exists
8432 set eaccess d_eaccess
8433 eval $inlibc
8434
8435 : see if endgrent exists
8436 set endgrent d_endgrent
8437 eval $inlibc
8438
8439 : see if endhostent exists
8440 set endhostent d_endhent
8441 eval $inlibc
8442
8443 : see if endnetent exists
8444 set endnetent d_endnent
8445 eval $inlibc
8446
8447 : see if endprotoent exists
8448 set endprotoent d_endpent
8449 eval $inlibc
8450
8451 : see if endpwent exists
8452 set endpwent d_endpwent
8453 eval $inlibc
8454
8455 : see if endservent exists
8456 set endservent d_endsent
8457 eval $inlibc
8458
8459 : see if endspent exists
8460 set endspent d_endspent
8461 eval $inlibc
8462
8463 : Locate the flags for 'open()'
8464 echo " "
8465 $cat >open3.c <<'EOCP'
8466 #include <sys/types.h>
8467 #ifdef I_FCNTL
8468 #include <fcntl.h>
8469 #endif
8470 #ifdef I_SYS_FILE
8471 #include <sys/file.h>
8472 #endif
8473 int main() {
8474         if(O_RDONLY);
8475 #ifdef O_TRUNC
8476         exit(0);
8477 #else
8478         exit(1);
8479 #endif
8480 }
8481 EOCP
8482 : check sys/file.h first to get FREAD on Sun
8483 if $test `./findhdr sys/file.h` && \
8484                 set open3 -DI_SYS_FILE && eval $compile; then
8485         h_sysfile=true;
8486         echo "<sys/file.h> defines the O_* constants..." >&4
8487         if ./open3; then
8488                 echo "and you have the 3 argument form of open()." >&4
8489                 val="$define"
8490         else
8491                 echo "but not the 3 argument form of open().  Oh, well." >&4
8492                 val="$undef"
8493         fi
8494 elif $test `./findhdr fcntl.h` && \
8495                 set open3 -DI_FCNTL && eval $compile; then
8496         h_fcntl=true;
8497         echo "<fcntl.h> defines the O_* constants..." >&4
8498         if ./open3; then
8499                 echo "and you have the 3 argument form of open()." >&4
8500                 val="$define"
8501         else
8502                 echo "but not the 3 argument form of open().  Oh, well." >&4
8503                 val="$undef"
8504         fi
8505 else
8506         val="$undef"
8507         echo "I can't find the O_* constant definitions!  You got problems." >&4
8508 fi
8509 set d_open3
8510 eval $setvar
8511 $rm -f open3*
8512
8513 : see which of string.h or strings.h is needed
8514 echo " "
8515 strings=`./findhdr string.h`
8516 if $test "$strings" && $test -r "$strings"; then
8517         echo "Using <string.h> instead of <strings.h>." >&4
8518         val="$define"
8519 else
8520         val="$undef"
8521         strings=`./findhdr strings.h`
8522         if $test "$strings" && $test -r "$strings"; then
8523                 echo "Using <strings.h> instead of <string.h>." >&4
8524         else
8525                 echo "No string header found -- You'll surely have problems." >&4
8526         fi
8527 fi
8528 set i_string
8529 eval $setvar
8530 case "$i_string" in
8531 "$undef") strings=`./findhdr strings.h`;;
8532 *)        strings=`./findhdr string.h`;;
8533 esac
8534
8535 : check for non-blocking I/O stuff
8536 case "$h_sysfile" in
8537 true) echo "#include <sys/file.h>" > head.c;;
8538 *)
8539         case "$h_fcntl" in
8540         true) echo "#include <fcntl.h>" > head.c;;
8541         *) echo "#include <sys/fcntl.h>" > head.c;;
8542         esac
8543         ;;
8544 esac
8545 echo " "
8546 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8547 case "$o_nonblock" in
8548 '')
8549         $cat head.c > try.c
8550         $cat >>try.c <<'EOCP'
8551 #include <stdio.h>
8552 int main() {
8553 #ifdef O_NONBLOCK
8554         printf("O_NONBLOCK\n");
8555         exit(0);
8556 #endif
8557 #ifdef O_NDELAY
8558         printf("O_NDELAY\n");
8559         exit(0);
8560 #endif
8561 #ifdef FNDELAY
8562         printf("FNDELAY\n");
8563         exit(0);
8564 #endif
8565         exit(0);
8566 }
8567 EOCP
8568         set try
8569         if eval $compile_ok; then
8570                 o_nonblock=`./try`
8571                 case "$o_nonblock" in
8572                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8573                 *) echo "Seems like we can use $o_nonblock.";;
8574                 esac
8575         else
8576                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8577         fi
8578         ;;
8579 *) echo "Using $hint value $o_nonblock.";;
8580 esac
8581 $rm -f try try.* .out core
8582
8583 echo " "
8584 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8585 case "$eagain" in
8586 '')
8587         $cat head.c > try.c
8588         $cat >>try.c <<EOCP
8589 #include <errno.h>
8590 #include <sys/types.h>
8591 #include <signal.h>
8592 #include <stdio.h> 
8593 #define MY_O_NONBLOCK $o_nonblock
8594 #ifndef errno  /* XXX need better Configure test */
8595 extern int errno;
8596 #endif
8597 #$i_unistd I_UNISTD
8598 #ifdef I_UNISTD
8599 #include <unistd.h>
8600 #endif
8601 #ifdef $i_string
8602 #include <string.h>
8603 #else
8604 #include <strings.h>
8605 #endif
8606 $signal_t blech(x) int x; { exit(3); }
8607 EOCP
8608         $cat >> try.c <<'EOCP'
8609 int main()
8610 {
8611         int pd[2];
8612         int pu[2];
8613         char buf[1];
8614         char string[100];
8615
8616         pipe(pd);       /* Down: child -> parent */
8617         pipe(pu);       /* Up: parent -> child */
8618         if (0 != fork()) {
8619                 int ret;
8620                 close(pd[1]);   /* Parent reads from pd[0] */
8621                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8622                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8623                         exit(1);
8624                 signal(SIGALRM, blech);
8625                 alarm(5);
8626                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8627                         exit(2);
8628                 sprintf(string, "%d\n", ret);
8629                 write(2, string, strlen(string));
8630                 alarm(0);
8631 #ifdef EAGAIN
8632                 if (errno == EAGAIN) {
8633                         printf("EAGAIN\n");
8634                         goto ok;
8635                 }
8636 #endif
8637 #ifdef EWOULDBLOCK
8638                 if (errno == EWOULDBLOCK)
8639                         printf("EWOULDBLOCK\n");
8640 #endif
8641         ok:
8642                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8643                 sleep(2);                               /* Give it time to close our pipe */
8644                 alarm(5);
8645                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8646                 alarm(0);
8647                 sprintf(string, "%d\n", ret);
8648                 write(3, string, strlen(string));
8649                 exit(0);
8650         }
8651
8652         close(pd[0]);                   /* We write to pd[1] */
8653         close(pu[1]);                   /* We read from pu[0] */
8654         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8655         close(pd[1]);                   /* Pipe pd is now fully closed! */
8656         exit(0);                                /* Bye bye, thank you for playing! */
8657 }
8658 EOCP
8659         set try
8660         if eval $compile_ok; then
8661                 echo "$startsh" >mtry
8662                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8663                 chmod +x mtry
8664                 ./mtry >/dev/null 2>&1
8665                 case $? in
8666                 0) eagain=`$cat try.out`;;
8667                 1) echo "Could not perform non-blocking setting!";;
8668                 2) echo "I did a successful read() for something that was not there!";;
8669                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8670                 *) echo "Something terribly wrong happened during testing.";;
8671                 esac
8672                 rd_nodata=`$cat try.ret`
8673                 echo "A read() system call with no data present returns $rd_nodata."
8674                 case "$rd_nodata" in
8675                 0|-1) ;;
8676                 *)
8677                         echo "(That's peculiar, fixing that to be -1.)"
8678                         rd_nodata=-1
8679                         ;;
8680                 esac
8681                 case "$eagain" in
8682                 '')
8683                         echo "Forcing errno EAGAIN on read() with no data available."
8684                         eagain=EAGAIN
8685                         ;;
8686                 *)
8687                         echo "Your read() sets errno to $eagain when no data is available."
8688                         ;;
8689                 esac
8690                 status=`$cat try.err`
8691                 case "$status" in
8692                 0) echo "And it correctly returns 0 to signal EOF.";;
8693                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8694                 *) echo "However, your read() returns '$status' on EOF??";;
8695                 esac
8696                 val="$define"
8697                 if test "$status" = "$rd_nodata"; then
8698                         echo "WARNING: you can't distinguish between EOF and no data!"
8699                         val="$undef"
8700                 fi
8701         else
8702                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8703                 eagain=EAGAIN
8704         fi
8705         set d_eofnblk
8706         eval $setvar
8707         ;;
8708 *)
8709         echo "Using $hint value $eagain."
8710         echo "Your read() returns $rd_nodata when no data is present."
8711         case "$d_eofnblk" in
8712         "$define") echo "And you can see EOF because read() returns 0.";;
8713         "$undef") echo "But you can't see EOF status from read() returned value.";;
8714         *)
8715                 echo "(Assuming you can't see EOF status from read anyway.)"
8716                 d_eofnblk=$undef
8717                 ;;
8718         esac
8719         ;;
8720 esac
8721 $rm -f try try.* .out core head.c mtry
8722
8723 : see if fchmod exists
8724 set fchmod d_fchmod
8725 eval $inlibc
8726
8727 : see if fchown exists
8728 set fchown d_fchown
8729 eval $inlibc
8730
8731 : see if this is an fcntl system
8732 set fcntl d_fcntl
8733 eval $inlibc
8734
8735 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8736 while $test $# -ge 2; do
8737         case "$1" in
8738         $define) echo "#include <$2>";;
8739         esac ;
8740     shift 2;
8741 done > try.c;
8742 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8743 set try;
8744 if eval $compile; then
8745         val="$define";
8746 else
8747         val="$undef";
8748 fi;
8749 set $varname;
8750 eval $setvar;
8751 $rm -f try.c try.o'
8752
8753 socketlib=''
8754 sockethdr=''
8755 : see whether socket exists
8756 echo " "
8757 $echo $n "Hmm... $c" >&4
8758 if set socket val -f d_socket; eval $csym; $val; then
8759         echo "Looks like you have Berkeley networking support." >&4
8760         d_socket="$define"
8761         if set setsockopt val -f; eval $csym; $val; then
8762                 d_oldsock="$undef"
8763         else
8764                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8765                 d_oldsock="$define"
8766         fi
8767 else
8768         if $contains socklib libc.list >/dev/null 2>&1; then
8769                 echo "Looks like you have Berkeley networking support." >&4
8770                 d_socket="$define"
8771                 : we will have to assume that it supports the 4.2 BSD interface
8772                 d_oldsock="$undef"
8773         else
8774                 echo "You don't have Berkeley networking in libc$_a..." >&4
8775                 if test "X$d_socket" = "X$define"; then
8776                    echo "...but you seem to believe that you have sockets." >&4
8777                 else
8778                         for net in net socket
8779                         do
8780                                 if test -f /usr/lib/lib$net$_a; then
8781                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8782                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8783                                         if $contains socket libc.list >/dev/null 2>&1; then
8784                                                 d_socket="$define"
8785                                                 socketlib="-l$net"
8786                                                 case "$net" in
8787                                                 net)
8788                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8789                                                         sockethdr="-I/usr/netinclude"
8790                                                         ;;
8791                                                 esac
8792                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8793                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8794                                                         d_oldsock="$undef"
8795                                                 else
8796                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8797                                                         d_oldsock="$define"
8798                                                 fi
8799                                                 break
8800                                         fi
8801                                 fi
8802                         done
8803                         if test "X$d_socket" != "X$define"; then
8804                            echo "or anywhere else I see." >&4
8805                            d_socket="$undef"
8806                            d_oldsock="$undef"
8807                         fi
8808                 fi
8809         fi
8810 fi
8811
8812 : see if socketpair exists
8813 set socketpair d_sockpair
8814 eval $inlibc
8815
8816
8817 echo " "
8818 echo "Checking the availability of certain socket constants..." >& 4
8819 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8820         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8821         $cat >try.c <<EOF
8822 #include <sys/types.h>
8823 #include <sys/socket.h>
8824 int main() {
8825     int i = $ENUM;
8826 }
8827 EOF
8828         val="$undef"
8829         set try; if eval $compile; then
8830                 val="$define"
8831         fi
8832         set d_${enum}; eval $setvar
8833         $rm -f try.c try
8834 done
8835
8836 : see if sys/select.h has to be included
8837 set sys/select.h i_sysselct
8838 eval $inhdr
8839
8840 : see if we should include time.h, sys/time.h, or both
8841 echo " "
8842 if test "X$timeincl" = X; then
8843         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8844         $echo $n "I'm now running the test program...$c"
8845         $cat >try.c <<'EOCP'
8846 #include <sys/types.h>
8847 #ifdef I_TIME
8848 #include <time.h>
8849 #endif
8850 #ifdef I_SYSTIME
8851 #ifdef SYSTIMEKERNEL
8852 #define KERNEL
8853 #endif
8854 #include <sys/time.h>
8855 #endif
8856 #ifdef I_SYSSELECT
8857 #include <sys/select.h>
8858 #endif
8859 int main()
8860 {
8861         struct tm foo;
8862 #ifdef S_TIMEVAL
8863         struct timeval bar;
8864 #endif
8865 #ifdef S_TIMEZONE
8866         struct timezone tzp;
8867 #endif
8868         if (foo.tm_sec == foo.tm_sec)
8869                 exit(0);
8870 #ifdef S_TIMEVAL
8871         if (bar.tv_sec == bar.tv_sec)
8872                 exit(0);
8873 #endif
8874         exit(1);
8875 }
8876 EOCP
8877         flags=''
8878         for s_timezone in '-DS_TIMEZONE' ''; do
8879         sysselect=''
8880         for s_timeval in '-DS_TIMEVAL' ''; do
8881         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8882         for i_time in '' '-DI_TIME'; do
8883         for i_systime in '-DI_SYSTIME' ''; do
8884                 case "$flags" in
8885                 '') $echo $n ".$c"
8886                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8887                         if eval $compile; then
8888                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8889                                 shift
8890                                 flags="$*"
8891                                 echo " "
8892                                 $echo $n "Succeeded with $flags$c"
8893                         fi
8894                         ;;
8895                 esac
8896         done
8897         done
8898         done
8899         done
8900         done
8901         timeincl=''
8902         echo " "
8903         case "$flags" in
8904         *SYSTIMEKERNEL*) i_systimek="$define"
8905                 timeincl=`./findhdr sys/time.h`
8906                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8907         *) i_systimek="$undef";;
8908         esac
8909         case "$flags" in
8910         *I_TIME*) i_time="$define"
8911                 timeincl=`./findhdr time.h`" $timeincl"
8912                 echo "We'll include <time.h>." >&4;;
8913         *) i_time="$undef";;
8914         esac
8915         case "$flags" in
8916         *I_SYSTIME*) i_systime="$define"
8917                 timeincl=`./findhdr sys/time.h`" $timeincl"
8918                 echo "We'll include <sys/time.h>." >&4;;
8919         *) i_systime="$undef";;
8920         esac
8921         $rm -f try.c try
8922 fi
8923
8924 : check for fd_set items
8925 $cat <<EOM
8926
8927 Checking to see how well your C compiler handles fd_set and friends ...
8928 EOM
8929 $cat >fd_set.c <<EOCP
8930 #$i_systime I_SYS_TIME
8931 #$i_sysselct I_SYS_SELECT
8932 #$d_socket HAS_SOCKET
8933 #include <sys/types.h>
8934 #ifdef HAS_SOCKET
8935 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8936 #endif
8937 #ifdef I_SYS_TIME
8938 #include <sys/time.h>
8939 #endif
8940 #ifdef I_SYS_SELECT
8941 #include <sys/select.h>
8942 #endif
8943 int main() {
8944         fd_set fds;
8945
8946 #ifdef TRYBITS
8947         if(fds.fds_bits);
8948 #endif
8949
8950 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8951         exit(0);
8952 #else
8953         exit(1);
8954 #endif
8955 }
8956 EOCP
8957 set fd_set -DTRYBITS
8958 if eval $compile; then
8959         d_fds_bits="$define"
8960         d_fd_set="$define"
8961         echo "Well, your system knows about the normal fd_set typedef..." >&4
8962         if ./fd_set; then
8963                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8964                 d_fd_macros="$define"
8965         else
8966                 $cat >&4 <<'EOM'
8967 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8968 EOM
8969                 d_fd_macros="$undef"
8970         fi
8971 else
8972         $cat <<'EOM'
8973 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8974 EOM
8975         set fd_set
8976         if eval $compile; then
8977                 d_fds_bits="$undef"
8978                 d_fd_set="$define"
8979                 echo "Well, your system has some sort of fd_set available..." >&4
8980                 if ./fd_set; then
8981                         echo "and you have the normal fd_set macros." >&4
8982                         d_fd_macros="$define"
8983                 else
8984                         $cat <<'EOM'
8985 but not the normal fd_set macros!  Gross!  More work for me...
8986 EOM
8987                         d_fd_macros="$undef"
8988                 fi
8989         else
8990         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8991                 d_fd_set="$undef"
8992                 d_fds_bits="$undef"
8993                 d_fd_macros="$undef"
8994         fi
8995 fi
8996 $rm -f fd_set*
8997
8998 : see if fgetpos exists
8999 set fgetpos d_fgetpos
9000 eval $inlibc
9001
9002 : see if flock exists
9003 set flock d_flock
9004 eval $inlibc
9005
9006 : see if fork exists
9007 set fork d_fork
9008 eval $inlibc
9009
9010 : see if pathconf exists
9011 set pathconf d_pathconf
9012 eval $inlibc
9013
9014 : see if fpathconf exists
9015 set fpathconf d_fpathconf
9016 eval $inlibc
9017
9018
9019 : check for fpos64_t
9020 echo " "
9021 echo "Checking to see if you have fpos64_t..." >&4
9022 $cat >try.c <<EOCP
9023 #include <stdio.h>
9024 int main() { fpos64_t x = 7; }
9025 EOCP
9026 set try
9027 if eval $compile; then
9028         val="$define"
9029         echo "You have fpos64_t."
9030 else
9031         val="$undef"
9032         echo "You do not have fpos64_t."
9033         case "$fpossize" in
9034         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9035         esac
9036 fi
9037 $rm -f try.* try
9038 set d_fpos64_t
9039 eval $setvar
9040
9041 hasstruct='varname=$1; struct=$2; shift; shift;
9042 while $test $# -ge 2; do
9043         case "$1" in
9044         $define) echo "#include <$2>";;
9045         esac ;
9046     shift 2;
9047 done > try.c;
9048 echo "int main () { struct $struct foo; }" >> try.c;
9049 set try;
9050 if eval $compile; then
9051         val="$define";
9052 else
9053         val="$undef";
9054 fi;
9055 set $varname;
9056 eval $setvar;
9057 $rm -f try.c try.o'
9058
9059 : see if this is a sys/param system
9060 set sys/param.h i_sysparam
9061 eval $inhdr
9062
9063 : see if this is a sys/mount.h system
9064 set sys/mount.h i_sysmount
9065 eval $inhdr
9066
9067 : see if sys/types.h has to be included
9068 set sys/types.h i_systypes
9069 eval $inhdr
9070
9071
9072 echo " "
9073 echo "Checking to see if your system supports struct fs_data..." >&4
9074 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9075 eval $hasstruct
9076 case "$d_fs_data_s" in
9077 "$define")      echo "Yes, it does."   ;;
9078 *)              echo "No, it doesn't." ;;
9079 esac
9080
9081 : see if fseeko exists
9082 set fseeko d_fseeko
9083 eval $inlibc
9084 case "$longsize" in
9085 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9086 esac
9087
9088 : see if fsetpos exists
9089 set fsetpos d_fsetpos
9090 eval $inlibc
9091
9092
9093 : see if fstatfs exists
9094 set fstatfs d_fstatfs
9095 eval $inlibc
9096
9097
9098 : see if statvfs exists
9099 set statvfs d_statvfs
9100 eval $inlibc
9101
9102 : see if fstatvfs exists
9103 set fstatvfs d_fstatvfs
9104 eval $inlibc
9105
9106
9107 : see if ftello exists
9108 set ftello d_ftello
9109 eval $inlibc
9110 case "$longsize" in
9111 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9112 esac
9113
9114 : see if getcwd exists
9115 set getcwd d_getcwd
9116 eval $inlibc
9117
9118
9119 : see if getfsstat exists
9120 set getfsstat d_getfsstat
9121 eval $inlibc
9122
9123 : see if getgrent exists
9124 set getgrent d_getgrent
9125 eval $inlibc
9126
9127 : see if gethostbyaddr exists
9128 set gethostbyaddr d_gethbyaddr
9129 eval $inlibc
9130
9131 : see if gethostbyname exists
9132 set gethostbyname d_gethbyname
9133 eval $inlibc
9134
9135 : see if gethostent exists
9136 set gethostent d_gethent
9137 eval $inlibc
9138
9139 : see how we will look up host name
9140 echo " "
9141 call=''
9142 if set gethostname val -f d_gethname; eval $csym; $val; then
9143         echo 'gethostname() found.' >&4
9144         d_gethname="$define"
9145         call=gethostname
9146 fi
9147 if set uname val -f d_uname; eval $csym; $val; then
9148         if ./xenix; then
9149                 $cat <<'EOM'
9150 uname() was found, but you're running xenix, and older versions of xenix
9151 have a broken uname(). If you don't really know whether your xenix is old
9152 enough to have a broken system call, use the default answer.
9153
9154 EOM
9155                 dflt=y
9156                 case "$d_uname" in
9157                 "$define") dflt=n;;
9158                 esac
9159                 rp='Is your uname() broken?'
9160                 . ./myread
9161                 case "$ans" in
9162                 n*) d_uname="$define"; call=uname;;
9163                 esac
9164         else
9165                 echo 'uname() found.' >&4
9166                 d_uname="$define"
9167                 case "$call" in
9168                 '') call=uname ;;
9169                 esac
9170         fi
9171 fi
9172 case "$d_gethname" in
9173 '') d_gethname="$undef";;
9174 esac
9175 case "$d_uname" in
9176 '') d_uname="$undef";;
9177 esac
9178 case "$d_uname$d_gethname" in
9179 *define*)
9180         dflt=n
9181         cat <<EOM
9182  
9183 Every now and then someone has a $call() that lies about the hostname
9184 but can't be fixed for political or economic reasons.  If you wish, I can
9185 pretend $call() isn't there and maybe compute hostname at run-time
9186 thanks to the '$phostname' command.
9187
9188 EOM
9189         rp="Shall I ignore $call() from now on?"
9190         . ./myread
9191         case "$ans" in
9192         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9193         esac;;
9194 esac
9195 case "$phostname" in
9196 '') aphostname='';;
9197 *) case "$aphostname" in
9198         /*) ;;
9199         *) set X $phostname
9200                 shift
9201                 file=$1
9202                 shift
9203                 file=`./loc $file $file $pth`
9204                 aphostname=`echo $file $*`
9205                 ;;
9206         esac
9207         ;;
9208 esac
9209 case "$d_uname$d_gethname" in
9210 *define*) ;;
9211 *)
9212         case "$phostname" in
9213         '')
9214                 echo "There will be no way for $package to get your hostname." >&4;;
9215         *)
9216         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9217                 ;;
9218         esac;;
9219 esac
9220 case "$d_phostname" in
9221 '') d_phostname="$undef";;
9222 esac
9223
9224 : see if this is a netdb.h system
9225 set netdb.h i_netdb
9226 eval $inhdr
9227
9228 : see if prototypes for various gethostxxx netdb.h functions are available
9229 echo " "
9230 set d_gethostprotos gethostent $i_netdb netdb.h
9231 eval $hasproto
9232
9233 : see if getlogin exists
9234 set getlogin d_getlogin
9235 eval $inlibc
9236
9237 : see if getmnt exists
9238 set getmnt d_getmnt
9239 eval $inlibc
9240
9241 : see if getmntent exists
9242 set getmntent d_getmntent
9243 eval $inlibc
9244
9245 : see if getnetbyaddr exists
9246 set getnetbyaddr d_getnbyaddr
9247 eval $inlibc
9248
9249 : see if getnetbyname exists
9250 set getnetbyname d_getnbyname
9251 eval $inlibc
9252
9253 : see if getnetent exists
9254 set getnetent d_getnent
9255 eval $inlibc
9256
9257 : see if prototypes for various getnetxxx netdb.h functions are available
9258 echo " "
9259 set d_getnetprotos getnetent $i_netdb netdb.h
9260 eval $hasproto
9261
9262
9263 : see if getprotobyname exists
9264 set getprotobyname d_getpbyname
9265 eval $inlibc
9266
9267 : see if getprotobynumber exists
9268 set getprotobynumber d_getpbynumber
9269 eval $inlibc
9270
9271 : see if getprotoent exists
9272 set getprotoent d_getpent
9273 eval $inlibc
9274
9275 : see if getpgid exists
9276 set getpgid d_getpgid
9277 eval $inlibc
9278
9279 : see if getpgrp2 exists
9280 set getpgrp2 d_getpgrp2
9281 eval $inlibc
9282
9283 : see if getppid exists
9284 set getppid d_getppid
9285 eval $inlibc
9286
9287 : see if getpriority exists
9288 set getpriority d_getprior
9289 eval $inlibc
9290
9291 : see if prototypes for various getprotoxxx netdb.h functions are available
9292 echo " "
9293 set d_getprotoprotos getprotoent $i_netdb netdb.h
9294 eval $hasproto
9295
9296 : see if getpwent exists
9297 set getpwent d_getpwent
9298 eval $inlibc
9299
9300
9301 : see if getservbyname exists
9302 set getservbyname d_getsbyname
9303 eval $inlibc
9304
9305 : see if getservbyport exists
9306 set getservbyport d_getsbyport
9307 eval $inlibc
9308
9309 : see if getservent exists
9310 set getservent d_getsent
9311 eval $inlibc
9312
9313 : see if prototypes for various getservxxx netdb.h functions are available
9314 echo " "
9315 set d_getservprotos getservent $i_netdb netdb.h
9316 eval $hasproto
9317
9318 : see if getspent exists
9319 set getspent d_getspent
9320 eval $inlibc
9321
9322 : see if getspnam exists
9323 set getspnam d_getspnam
9324 eval $inlibc
9325
9326 : see if gettimeofday or ftime exists
9327 set gettimeofday d_gettimeod
9328 eval $inlibc
9329 case "$d_gettimeod" in
9330 "$undef")
9331         set ftime d_ftime 
9332         eval $inlibc
9333         ;;
9334 *)
9335         val="$undef"; set d_ftime; eval $setvar
9336         ;;
9337 esac
9338 case "$d_gettimeod$d_ftime" in
9339 "$undef$undef")
9340         echo " "
9341         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9342         ;;
9343 esac
9344
9345 : see if this is an grp system
9346 set grp.h i_grp
9347 eval $inhdr
9348
9349 case "$i_grp" in
9350 $define)
9351         xxx=`./findhdr grp.h`
9352         $cppstdin $cppflags $cppminus < $xxx >$$.h
9353
9354         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9355                 val="$define"
9356         else
9357                 val="$undef"
9358         fi
9359         set d_grpasswd
9360         eval $setvar
9361
9362         $rm -f $$.h
9363         ;;
9364 *)
9365         val="$undef";
9366         set d_grpasswd; eval $setvar
9367         ;;
9368 esac
9369
9370 : see if hasmntopt exists
9371 set hasmntopt d_hasmntopt
9372 eval $inlibc
9373
9374 : see if this is a netinet/in.h or sys/in.h system
9375 set netinet/in.h i_niin sys/in.h i_sysin
9376 eval $inhdr
9377
9378 : see if arpa/inet.h has to be included
9379 set arpa/inet.h i_arpainet
9380 eval $inhdr
9381
9382 : see if htonl --and friends-- exists
9383 val=''
9384 set htonl val
9385 eval $inlibc
9386
9387 : Maybe they are macros.
9388 case "$val" in
9389 $undef)
9390         $cat >htonl.c <<EOM
9391 #include <stdio.h>
9392 #include <sys/types.h>
9393 #$i_niin I_NETINET_IN
9394 #$i_sysin I_SYS_IN
9395 #$i_arpainet I_ARPA_INET
9396 #ifdef I_NETINET_IN
9397 #include <netinet/in.h>
9398 #endif
9399 #ifdef I_SYS_IN
9400 #include <sys/in.h>
9401 #endif
9402 #ifdef I_ARPA_INET
9403 #include <arpa/inet.h>
9404 #endif
9405 #ifdef htonl
9406 printf("Defined as a macro.");
9407 #endif
9408 EOM
9409         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9410         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9411                 val="$define"
9412                 echo "But it seems to be defined as a macro." >&4
9413         fi
9414         $rm -f htonl.?
9415         ;;
9416 esac
9417 set d_htonl
9418 eval $setvar
9419
9420 : see if iconv exists
9421 set iconv d_iconv
9422 eval $inlibc
9423
9424 : index or strchr
9425 echo " "
9426 if set index val -f; eval $csym; $val; then
9427         if set strchr val -f d_strchr; eval $csym; $val; then
9428                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9429                         val="$define"
9430                         vali="$undef"
9431                         echo "strchr() found." >&4
9432                 else
9433                         val="$undef"
9434                         vali="$define"
9435                         echo "index() found." >&4
9436                 fi
9437         else
9438                 val="$undef"
9439                 vali="$define"
9440                 echo "index() found." >&4
9441         fi
9442 else
9443         if set strchr val -f d_strchr; eval $csym; $val; then
9444                 val="$define"
9445                 vali="$undef"
9446                 echo "strchr() found." >&4
9447         else
9448                 echo "No index() or strchr() found!" >&4
9449                 val="$undef"
9450                 vali="$undef"
9451         fi
9452 fi
9453 set d_strchr; eval $setvar
9454 val="$vali"
9455 set d_index; eval $setvar
9456
9457 : check whether inet_aton exists
9458 set inet_aton d_inetaton
9459 eval $inlibc
9460
9461 : see if inttypes.h is available
9462 : we want a real compile instead of Inhdr because some systems
9463 : have an inttypes.h which includes non-existent headers
9464 echo " "
9465 $cat >try.c <<EOCP
9466 #include <inttypes.h>
9467 int main() {
9468         static int32_t foo32 = 0x12345678;
9469 }
9470 EOCP
9471 set try
9472 if eval $compile; then
9473         echo "<inttypes.h> found." >&4
9474         val="$define"
9475 else
9476         echo "<inttypes.h> NOT found." >&4
9477         val="$undef"
9478 fi
9479 $rm -f try.c try
9480 set i_inttypes
9481 eval $setvar
9482
9483 : check for int64_t
9484 echo " "
9485 echo "Checking to see if you have int64_t..." >&4
9486 $cat >try.c <<EOCP
9487 #include <sys/types.h>
9488 #$i_inttypes I_INTTYPES
9489 #ifdef I_INTTYPES
9490 #include <inttypes.h>
9491 #endif
9492 int main() { int64_t x = 7; }
9493 EOCP
9494 set try
9495 if eval $compile; then
9496         val="$define"
9497         echo "You have int64_t."
9498 else
9499         val="$undef"
9500         echo "You do not have int64_t."
9501 fi
9502 $rm -f try try.*
9503 set d_int64_t
9504 eval $setvar
9505
9506 : Look for isascii
9507 echo " "
9508 $cat >isascii.c <<'EOCP'
9509 #include <stdio.h>
9510 #include <ctype.h>
9511 int main() {
9512         int c = 'A';
9513         if (isascii(c))
9514                 exit(0);
9515         else
9516                 exit(1);
9517 }
9518 EOCP
9519 set isascii
9520 if eval $compile; then
9521         echo "isascii() found." >&4
9522         val="$define"
9523 else
9524         echo "isascii() NOT found." >&4
9525         val="$undef"
9526 fi
9527 set d_isascii
9528 eval $setvar
9529 $rm -f isascii*
9530
9531 : see if killpg exists
9532 set killpg d_killpg
9533 eval $inlibc
9534
9535 : see if lchown exists
9536 echo " "
9537 $cat > try.c <<'EOCP'
9538 /* System header to define __stub macros and hopefully few prototypes,
9539     which can conflict with char lchown(); below.  */
9540 #include <assert.h>
9541 /* Override any gcc2 internal prototype to avoid an error.  */
9542 /* We use char because int might match the return type of a gcc2
9543    builtin and then its argument prototype would still apply.  */
9544 char lchown();
9545 int main() {
9546     /*  The GNU C library defines this for functions which it implements
9547         to always fail with ENOSYS.  Some functions are actually named
9548         something starting with __ and the normal name is an alias.  */
9549 #if defined (__stub_lchown) || defined (__stub___lchown)
9550 choke me
9551 #else
9552 lchown();
9553 #endif
9554 ; return 0; }
9555 EOCP
9556 set try
9557 if eval $compile; then
9558     $echo "lchown() found." >&4
9559     val="$define"
9560 else
9561     $echo "lchown() NOT found." >&4
9562     val="$undef"
9563 fi
9564 set d_lchown
9565 eval $setvar
9566
9567 : See if number of significant digits in a double precision number is known
9568 echo " "
9569 $cat >ldbl_dig.c <<EOM
9570 #$i_limits I_LIMITS
9571 #$i_float I_FLOAT
9572 #ifdef I_LIMITS
9573 #include <limits.h>
9574 #endif
9575 #ifdef I_FLOAT
9576 #include <float.h>
9577 #endif
9578 #ifdef LDBL_DIG
9579 printf("Contains LDBL_DIG");
9580 #endif
9581 EOM
9582 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9583 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9584         echo "LDBL_DIG found." >&4
9585         val="$define"
9586 else
9587         echo "LDBL_DIG NOT found." >&4
9588         val="$undef"
9589 fi
9590 $rm -f ldbl_dig.?
9591 set d_ldbl_dig
9592 eval $setvar
9593
9594 : see if link exists
9595 set link d_link
9596 eval $inlibc
9597
9598 : see if localeconv exists
9599 set localeconv d_locconv
9600 eval $inlibc
9601
9602 : see if lockf exists
9603 set lockf d_lockf
9604 eval $inlibc
9605
9606 : check for long long
9607 echo " "
9608 echo "Checking to see if you have long long..." >&4
9609 echo 'int main() { long long x = 7; return 0; }' > try.c
9610 set try
9611 if eval $compile; then
9612         val="$define"
9613         echo "You have have long long."
9614 else
9615         val="$undef"
9616         echo "You do not have long long."
9617 fi
9618 $rm try.*
9619 set d_longlong
9620 eval $setvar
9621
9622 : check for length of long long
9623 case "${d_longlong}${longlongsize}" in
9624 $define)
9625         echo " "
9626         echo "Checking to see how big your long longs are..." >&4
9627         $cat >try.c <<'EOCP'
9628 #include <stdio.h>
9629 int main()
9630 {
9631     printf("%d\n", (int)sizeof(long long));
9632     return(0);
9633 }
9634 EOCP
9635         set try
9636         if eval $compile_ok; then
9637                 longlongsize=`./try$exe_ext`
9638                 echo "Your long longs are $longlongsize bytes long."
9639         else
9640                 dflt='8'
9641                 echo " "
9642                 echo "(I can't seem to compile the test program.  Guessing...)"
9643                 rp="What is the size of a long long (in bytes)?"
9644                 . ./myread
9645                 longlongsize="$ans"
9646         fi
9647         if $test "X$longsize" = "X$longlongsize"; then
9648                 echo "(That isn't any different from an ordinary long.)"
9649         fi      
9650         ;;
9651 esac
9652 $rm -f try.* try
9653
9654 : see if prototype for lseek is available
9655 echo " "
9656 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9657 eval $hasproto
9658
9659 : see if lstat exists
9660 set lstat d_lstat
9661 eval $inlibc
9662
9663 : see if madvise exists
9664 set madvise d_madvise
9665 eval $inlibc
9666
9667 : see if mblen exists
9668 set mblen d_mblen
9669 eval $inlibc
9670
9671 : see if mbstowcs exists
9672 set mbstowcs d_mbstowcs
9673 eval $inlibc
9674
9675 : see if mbtowc exists
9676 set mbtowc d_mbtowc
9677 eval $inlibc
9678
9679 : see if memchr exists
9680 set memchr d_memchr
9681 eval $inlibc
9682
9683 : see if memcmp exists
9684 set memcmp d_memcmp
9685 eval $inlibc
9686
9687 : see if memcpy exists
9688 set memcpy d_memcpy
9689 eval $inlibc
9690
9691 : see if memmove exists
9692 set memmove d_memmove
9693 eval $inlibc
9694
9695 : see if memset exists
9696 set memset d_memset
9697 eval $inlibc
9698
9699 : see if mkdir exists
9700 set mkdir d_mkdir
9701 eval $inlibc
9702
9703 : see if mkdtemp exists
9704 set mkdtemp d_mkdtemp
9705 eval $inlibc
9706
9707 : see if mkfifo exists
9708 set mkfifo d_mkfifo
9709 eval $inlibc
9710
9711 : see if mkstemp exists
9712 set mkstemp d_mkstemp
9713 eval $inlibc
9714
9715 : see if mkstemps exists
9716 set mkstemps d_mkstemps
9717 eval $inlibc
9718
9719 : see if mktime exists
9720 set mktime d_mktime
9721 eval $inlibc
9722
9723 : see if this is a sys/mman.h system
9724 set sys/mman.h i_sysmman
9725 eval $inhdr
9726
9727 : see if mmap exists
9728 set mmap d_mmap
9729 eval $inlibc
9730 : see what shmat returns
9731 : default to something harmless
9732 mmaptype='void *'
9733 case "$i_sysmman$d_mmap" in
9734 "$define$define")
9735         $cat >mmap.c <<'END'
9736 #include <sys/mman.h>
9737 void *mmap();
9738 END
9739         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9740                 mmaptype='void *'
9741         else
9742                 mmaptype='caddr_t'
9743         fi
9744         echo "and it returns ($mmaptype)." >&4
9745         ;;
9746 esac
9747
9748
9749
9750 : see if mprotect exists
9751 set mprotect d_mprotect
9752 eval $inlibc
9753
9754 : see if msgctl exists
9755 set msgctl d_msgctl
9756 eval $inlibc
9757
9758 : see if msgget exists
9759 set msgget d_msgget
9760 eval $inlibc
9761
9762 : see if msgsnd exists
9763 set msgsnd d_msgsnd
9764 eval $inlibc
9765
9766 : see if msgrcv exists
9767 set msgrcv d_msgrcv
9768 eval $inlibc
9769
9770 : see how much of the 'msg*(2)' library is present.
9771 h_msg=true
9772 echo " "
9773 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9774 *"$undef"*) h_msg=false;;
9775 esac
9776 case "$osname" in
9777 freebsd)
9778     case "`ipcs 2>&1`" in
9779     "SVID messages"*"not configured"*)
9780         echo "Your $osname does not have the msg*(2) configured." >&4
9781         h_msg=false
9782         val="$undef"
9783         set msgctl d_msgctl
9784         eval $setvar
9785         set msgget d_msgget
9786         eval $setvar
9787         set msgsnd d_msgsnd
9788         eval $setvar
9789         set msgrcv d_msgrcv
9790         eval $setvar
9791         ;;
9792     esac
9793     ;;
9794 esac
9795 : we could also check for sys/ipc.h ...
9796 if $h_msg && $test `./findhdr sys/msg.h`; then
9797         echo "You have the full msg*(2) library." >&4
9798         val="$define"
9799 else
9800         echo "You don't have the full msg*(2) library." >&4
9801         val="$undef"
9802 fi
9803 set d_msg
9804 eval $setvar
9805
9806 : see if msync exists
9807 set msync d_msync
9808 eval $inlibc
9809
9810 : see if munmap exists
9811 set munmap d_munmap
9812 eval $inlibc
9813
9814 : see if nice exists
9815 set nice d_nice
9816 eval $inlibc
9817
9818
9819 echo " "
9820 echo "Checking which 64-bit integer type we could use..." >&4
9821
9822 case "$intsize" in
9823 8) val=int
9824    set quadtype
9825    eval $setvar
9826    val='"unsigned int"'
9827    set uquadtype
9828    eval $setvar
9829    quadkind=1
9830    ;;
9831 *) case "$longsize" in
9832    8) val=long
9833       set quadtype
9834       eval $setvar
9835       val='"unsigned long"'
9836       set uquadtype
9837       eval $setvar
9838       quadkind=2
9839       ;;
9840    *) case "$d_longlong:$longlongsize" in
9841       define:8)
9842         val='"long long"'
9843         set quadtype
9844         eval $setvar
9845         val='"unsigned long long"'
9846         set uquadtype
9847         eval $setvar
9848         quadkind=3
9849         ;;
9850       *) case "$d_int64_t" in
9851          define)
9852            val=int64_t
9853            set quadtype
9854            eval $setvar
9855            val=uint64_t
9856            set uquadtype
9857            eval $setvar
9858            quadkind=4
9859            ;;
9860          esac
9861          ;;
9862       esac
9863       ;;
9864    esac
9865    ;;
9866 esac
9867
9868 case "$quadtype" in
9869 '')     echo "Alas, no 64-bit integer types in sight." >&4
9870         d_quad="$undef"
9871         ;;
9872 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9873             verb="will"
9874         else
9875             verb="could"
9876         fi
9877         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9878         d_quad="$define"
9879         ;;
9880 esac
9881
9882 : check for length of character
9883 echo " "
9884 case "$charsize" in
9885 '')
9886         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9887         $cat >try.c <<'EOCP'
9888 #include <stdio.h>
9889 int main()
9890 {
9891     printf("%d\n", (int)sizeof(char));
9892     exit(0);
9893 }
9894 EOCP
9895         set try
9896         if eval $compile_ok; then
9897                 dflt=`./try`
9898         else
9899                 dflt='1'
9900                 echo "(I can't seem to compile the test program.  Guessing...)"
9901         fi
9902         ;;
9903 *)
9904         dflt="$charsize"
9905         ;;
9906 esac
9907 rp="What is the size of a character (in bytes)?"
9908 . ./myread
9909 charsize="$ans"
9910 $rm -f try.c try
9911
9912
9913 echo " "
9914 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9915
9916 case "$use64bitint:$d_quad:$quadtype" in
9917 define:define:?*)
9918         ivtype="$quadtype"
9919         uvtype="$uquadtype"
9920         ivsize=8
9921         uvsize=8
9922         ;;
9923 *)      ivtype="long"
9924         uvtype="unsigned long"
9925         ivsize=$longsize
9926         uvsize=$longsize
9927         ;;
9928 esac
9929
9930 case "$uselongdouble:$d_longdbl" in
9931 define:define)
9932         nvtype="long double"
9933         nvsize=$longdblsize
9934         ;;
9935 *)      nvtype=double
9936         nvsize=$doublesize
9937         ;;
9938 esac
9939
9940 $echo "(IV will be "$ivtype", $ivsize bytes)"
9941 $echo "(UV will be "$uvtype", $uvsize bytes)"
9942 $echo "(NV will be "$nvtype", $nvsize bytes)"
9943
9944 $cat >try.c <<EOCP
9945 #$i_inttypes I_INTTYPES
9946 #ifdef I_INTTYPES
9947 #include <inttypes.h>
9948 #endif
9949 #include <stdio.h>
9950 int main() {
9951 #ifdef INT8
9952    int8_t i =  INT8_MAX;
9953   uint8_t u = UINT8_MAX;
9954   printf("int8_t\n");
9955 #endif
9956 #ifdef INT16
9957    int16_t i =  INT16_MAX;
9958   uint16_t i = UINT16_MAX;
9959   printf("int16_t\n");
9960 #endif
9961 #ifdef INT32
9962    int32_t i =  INT32_MAX;
9963   uint32_t u = UINT32_MAX;
9964   printf("int32_t\n");
9965 #endif
9966 }
9967 EOCP
9968
9969 case "$i8type" in
9970 '')     case "$charsize" in
9971         1)      i8type=char
9972                 u8type="unsigned char"
9973                 i8size=$charsize
9974                 u8size=$charsize
9975                 ;;
9976         esac
9977         ;;
9978 esac
9979 case "$i8type" in
9980 '')     set try -DINT8
9981         if eval $compile; then
9982                 case "`./try$exe_ext`" in
9983                 int8_t) i8type=int8_t
9984                         u8type=uint8_t
9985                         i8size=1
9986                         u8size=1
9987                         ;;
9988                 esac
9989         fi
9990         ;;
9991 esac
9992 case "$i8type" in
9993 '')     if $test $charsize -ge 1; then
9994                 i8type=char
9995                 u8type="unsigned char"
9996                 i8size=$charsize
9997                 u8size=$charsize
9998         fi
9999         ;;
10000 esac
10001
10002 case "$i16type" in
10003 '')     case "$shortsize" in
10004         2)      i16type=short
10005                 u16type="unsigned short"
10006                 i16size=$shortsize
10007                 u16size=$shortsize
10008                 ;;
10009         esac
10010         ;;
10011 esac
10012 case "$i16type" in
10013 '')     set try -DINT16
10014         if eval $compile; then
10015                 case "`./try$exe_ext`" in
10016                 int16_t)
10017                         i16type=int16_t
10018                         u16type=uint16_t
10019                         i16size=2
10020                         u16size=2
10021                         ;;
10022                 esac
10023         fi
10024         ;;
10025 esac
10026 case "$i16type" in
10027 '')     if $test $shortsize -ge 2; then
10028                 i16type=short
10029                 u16type="unsigned short"
10030                 i16size=$shortsize
10031                 u16size=$shortsize
10032         fi
10033         ;;
10034 esac
10035
10036 case "$i32type" in
10037 '')     case "$longsize" in
10038         4)      i32type=long
10039                 u32type="unsigned long"
10040                 i32size=$longsize
10041                 u32size=$longsize
10042                 ;;
10043         *)      case "$intsize" in
10044                 4)      i32type=int
10045                         u32type="unsigned int"
10046                         i32size=$intsize
10047                         u32size=$intsize
10048                         ;;
10049                 esac
10050                 ;;
10051         esac
10052         ;;
10053 esac
10054 case "$i32type" in
10055 '')     set try -DINT32
10056         if eval $compile; then
10057                 case "`./try$exe_ext`" in
10058                 int32_t)
10059                         i32type=int32_t
10060                         u32type=uint32_t
10061                         i32size=4
10062                         u32size=4
10063                         ;;
10064                 esac
10065         fi
10066         ;;
10067 esac
10068 case "$i32type" in
10069 '')     if $test $intsize -ge 4; then
10070                 i32type=int
10071                 u32type="unsigned int"
10072                 i32size=$intsize
10073                 u32size=$intsize
10074         fi
10075         ;;
10076 esac
10077
10078 case "$i64type" in
10079 '')     case "$d_quad:$quadtype" in
10080         define:?*)
10081                 i64type="$quadtype"
10082                 u64type="$uquadtype"
10083                 i64size=8
10084                 u64size=8
10085                 ;;
10086         esac
10087         ;;
10088 esac
10089
10090 $echo "Checking whether your NVs can preserve your UVs..." >&4
10091 $cat <<EOP >try.c
10092 #include <stdio.h>
10093 int main() {
10094     $uvtype k = ($uvtype)~0, l;
10095     $nvtype d;
10096     l = k;
10097     d = ($nvtype)l;
10098     l = ($uvtype)d;
10099     if (l == k)
10100        printf("preserve\n");
10101     exit(0);
10102 }
10103 EOP
10104 set try
10105 if eval $compile; then
10106         case "`./try$exe_ext`" in
10107         preserve) d_nv_preserves_uv="$define" ;;
10108         esac
10109 fi      
10110 case "$d_nv_preserves_uv" in
10111 $define) $echo "Yes, they can."  2>&1 ;;
10112 *)       $echo "No, they can't." 2>&1
10113          d_nv_preserves_uv="$undef"
10114          ;;
10115 esac
10116
10117 $rm -f try.* try
10118
10119
10120 : check for off64_t
10121 echo " "
10122 echo "Checking to see if you have off64_t..." >&4
10123 $cat >try.c <<EOCP
10124 #include <sys/types.h>
10125 #include <unistd.h>
10126 int main() { off64_t x = 7; }
10127 EOCP
10128 set try
10129 if eval $compile; then
10130         val="$define"
10131         echo "You have off64_t."
10132 else
10133         val="$undef"
10134         echo "You do not have off64_t."
10135         case "$lseeksize" in
10136         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10137         esac
10138 fi
10139 $rm -f try.* try
10140 set d_off64_t
10141 eval $setvar
10142
10143 : see if POSIX threads are available
10144 set pthread.h i_pthread
10145 eval $inhdr
10146
10147
10148
10149
10150 : how to create joinable pthreads
10151 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10152         echo " "
10153         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10154         $cat >try.c <<'EOCP'
10155 #include <pthread.h>
10156 int main() {
10157     int detachstate = JOINABLE;
10158 }
10159 EOCP
10160         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10161         if eval $compile; then
10162                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10163                 val="$undef" # Yes, undef.
10164                 set d_old_pthread_create_joinable
10165                 eval $setvar
10166                 val=""
10167                 set old_pthread_create_joinable
10168                 eval $setvar
10169         else
10170                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10171                 if eval $compile; then
10172                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10173                         val="$define"
10174                         set d_old_pthread_create_joinable
10175                         eval $setvar
10176                         val=PTHREAD_CREATE_UNDETACHED
10177                         set old_pthread_create_joinable
10178                         eval $setvar
10179                 else            
10180                         set try -DJOINABLE=__UNDETACHED
10181                         if eval $compile; then
10182                                 echo "You seem to use __UNDETACHED." >&4
10183                                 val="$define"
10184                                 set d_old_pthread_create_joinable
10185                                 eval $setvar
10186                                 val=__UNDETACHED
10187                                 set old_pthread_create_joinable
10188                                 eval $setvar
10189                         else
10190                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10191                                 val="$define"
10192                                 set d_old_pthread_create_joinable
10193                                 eval $setvar
10194                                 val=0
10195                                 set old_pthread_create_joinable
10196                                 eval $setvar
10197                         fi
10198                 fi
10199         fi
10200         $rm -f try try.*
10201 else
10202     d_old_pthread_create_joinable="$undef"
10203     old_pthread_create_joinable=""
10204 fi
10205
10206 : see if pause exists
10207 set pause d_pause
10208 eval $inlibc
10209
10210 : see if pipe exists
10211 set pipe d_pipe
10212 eval $inlibc
10213
10214 : see if poll exists
10215 set poll d_poll
10216 eval $inlibc
10217
10218
10219 : see whether the various POSIXish _yields exist
10220 $cat >try.c <<EOP
10221 #include <pthread.h>
10222 #include <stdio.h>
10223 int main() {
10224 #ifdef SCHED_YIELD
10225         sched_yield();
10226 #else
10227 #ifdef PTHREAD_YIELD
10228         pthread_yield();
10229 #else
10230 #ifdef PTHREAD_YIELD_NULL
10231         pthread_yield(NULL);
10232 #endif
10233 #endif
10234 #endif
10235 }
10236 EOP
10237 : see if sched_yield exists
10238 set try -DSCHED_YIELD
10239 if eval $compile; then
10240     val="$define"
10241     sched_yield='sched_yield()'
10242 else
10243     val="$undef"
10244 fi
10245 case "$usethreads" in
10246 $define)
10247         case "$val" in
10248         $define) echo 'sched_yield() found.' >&4        ;;
10249         *)       echo 'sched_yield() NOT found.' >&4    ;;
10250         esac
10251 esac
10252 set d_sched_yield
10253 eval $setvar
10254
10255 : see if pthread_yield exists
10256 set try -DPTHREAD_YIELD
10257 if eval $compile; then
10258     val="$define"
10259     case "$sched_yield" in
10260     '') sched_yield='pthread_yield()' ;;
10261     esac
10262 else
10263     set try -DPTHREAD_YIELD_NULL
10264     if eval $compile; then
10265         val="$define"
10266         case "$sched_yield" in
10267         '') sched_yield='pthread_yield(NULL)' ;;
10268         esac
10269     else
10270         val="$undef"
10271     fi
10272 fi
10273 case "$usethreads" in
10274 $define)
10275         case "$val" in
10276         $define) echo 'pthread_yield() found.' >&4      ;;
10277         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10278         esac
10279         ;;
10280 esac
10281 set d_pthread_yield
10282 eval $setvar
10283
10284 case "$sched_yield" in
10285 '') sched_yield=undef ;;
10286 esac
10287
10288 $rm -f try try.*
10289
10290 : see if this is a pwd.h system
10291 set pwd.h i_pwd
10292 eval $inhdr
10293
10294 case "$i_pwd" in
10295 $define)
10296         xxx=`./findhdr pwd.h`
10297         $cppstdin $cppflags $cppminus < $xxx >$$.h
10298
10299         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10300                 val="$define"
10301         else
10302                 val="$undef"
10303         fi
10304         set d_pwquota
10305         eval $setvar
10306
10307         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10308                 val="$define"
10309         else
10310                 val="$undef"
10311         fi
10312         set d_pwage
10313         eval $setvar
10314
10315         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10316                 val="$define"
10317         else
10318                 val="$undef"
10319         fi
10320         set d_pwchange
10321         eval $setvar
10322
10323         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10324                 val="$define"
10325         else
10326                 val="$undef"
10327         fi
10328         set d_pwclass
10329         eval $setvar
10330
10331         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10332                 val="$define"
10333         else
10334                 val="$undef"
10335         fi
10336         set d_pwexpire
10337         eval $setvar
10338
10339         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10340                 val="$define"
10341         else
10342                 val="$undef"
10343         fi
10344         set d_pwcomment
10345         eval $setvar
10346
10347         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10348                 val="$define"
10349         else
10350                 val="$undef"
10351         fi
10352         set d_pwgecos
10353         eval $setvar
10354
10355         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10356                 val="$define"
10357         else
10358                 val="$undef"
10359         fi
10360         set d_pwpasswd
10361         eval $setvar
10362
10363         $rm -f $$.h
10364         ;;
10365 *)
10366         val="$undef"; 
10367         set d_pwquota; eval $setvar
10368         set d_pwage; eval $setvar
10369         set d_pwchange; eval $setvar
10370         set d_pwclass; eval $setvar
10371         set d_pwexpire; eval $setvar
10372         set d_pwcomment; eval $setvar
10373         set d_pwgecos; eval $setvar
10374         set d_pwpasswd; eval $setvar
10375         ;;
10376 esac
10377
10378 : see if readdir and friends exist
10379 set readdir d_readdir
10380 eval $inlibc
10381 set seekdir d_seekdir
10382 eval $inlibc
10383 set telldir d_telldir
10384 eval $inlibc
10385 set rewinddir d_rewinddir
10386 eval $inlibc
10387
10388 : see if readlink exists
10389 set readlink d_readlink
10390 eval $inlibc
10391
10392 : see if rename exists
10393 set rename d_rename
10394 eval $inlibc
10395
10396 : see if rmdir exists
10397 set rmdir d_rmdir
10398 eval $inlibc
10399
10400 : see if memory.h is available.
10401 val=''
10402 set memory.h val
10403 eval $inhdr
10404
10405 : See if it conflicts with string.h
10406 case "$val" in
10407 $define)
10408         case "$strings" in
10409         '') ;;
10410         *)
10411                 $cppstdin $cppflags $cppminus < $strings > mem.h
10412                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10413                         echo " "
10414                         echo "We won't be including <memory.h>."
10415                         val="$undef"
10416                 fi
10417                 $rm -f mem.h
10418                 ;;
10419         esac
10420 esac
10421 set i_memory
10422 eval $setvar
10423
10424 : can bcopy handle overlapping blocks?
10425 val="$undef"
10426 case "$d_bcopy" in
10427 "$define")
10428         echo " "
10429         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10430         $cat >try.c <<EOCP
10431 #$i_memory I_MEMORY
10432 #$i_stdlib I_STDLIB
10433 #$i_string I_STRING
10434 #$i_unistd I_UNISTD
10435 EOCP
10436         $cat >>try.c <<'EOCP'
10437 #include <stdio.h>
10438 #ifdef I_MEMORY
10439 #  include <memory.h>
10440 #endif
10441 #ifdef I_STDLIB
10442 #  include <stdlib.h>
10443 #endif
10444 #ifdef I_STRING
10445 #  include <string.h>
10446 #else
10447 #  include <strings.h>
10448 #endif
10449 #ifdef I_UNISTD
10450 #  include <unistd.h>  /* Needed for NetBSD */
10451 #endif
10452 int main()
10453 {
10454 char buf[128], abc[128];
10455 char *b;
10456 int len;
10457 int off;
10458 int align;
10459
10460 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10461
10462 for (align = 7; align >= 0; align--) {
10463         for (len = 36; len; len--) {
10464                 b = buf+align;
10465                 bcopy(abc, b, len);
10466                 for (off = 1; off <= len; off++) {
10467                         bcopy(b, b+off, len);
10468                         bcopy(b+off, b, len);
10469                         if (bcmp(b, abc, len))
10470                                 exit(1);
10471                 }
10472         }
10473 }
10474 exit(0);
10475 }
10476 EOCP
10477         set try
10478         if eval $compile_ok; then
10479                 if ./try 2>/dev/null; then
10480                         echo "Yes, it can."
10481                         val="$define"
10482                 else
10483                         echo "It can't, sorry."
10484                         case "$d_memmove" in
10485                         "$define") echo "But that's Ok since you have memmove()." ;;
10486                         esac
10487                 fi
10488         else
10489                 echo "(I can't compile the test program, so we'll assume not...)"
10490                 case "$d_memmove" in
10491                 "$define") echo "But that's Ok since you have memmove()." ;;
10492                 esac
10493         fi
10494         ;;
10495 esac
10496 $rm -f try.* try core
10497 set d_safebcpy
10498 eval $setvar
10499
10500 : can memcpy handle overlapping blocks?
10501 val="$undef"
10502 case "$d_memcpy" in
10503 "$define")
10504         echo " "
10505         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10506         $cat >try.c <<EOCP
10507 #$i_memory I_MEMORY
10508 #$i_stdlib I_STDLIB
10509 #$i_string I_STRING
10510 #$i_unistd I_UNISTD
10511 EOCP
10512         $cat >>try.c <<'EOCP'
10513 #include <stdio.h>
10514 #ifdef I_MEMORY
10515 #  include <memory.h>
10516 #endif
10517 #ifdef I_STDLIB
10518 #  include <stdlib.h>
10519 #endif
10520 #ifdef I_STRING
10521 #  include <string.h>
10522 #else
10523 #  include <strings.h>
10524 #endif
10525 #ifdef I_UNISTD
10526 #  include <unistd.h>  /* Needed for NetBSD */
10527 #endif
10528 int main()
10529 {
10530 char buf[128], abc[128];
10531 char *b;
10532 int len;
10533 int off;
10534 int align;
10535
10536 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10537    try to store the string in read-only memory. */
10538 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10539
10540 for (align = 7; align >= 0; align--) {
10541         for (len = 36; len; len--) {
10542                 b = buf+align;
10543                 memcpy(b, abc, len);
10544                 for (off = 1; off <= len; off++) {
10545                         memcpy(b+off, b, len);
10546                         memcpy(b, b+off, len);
10547                         if (memcmp(b, abc, len))
10548                                 exit(1);
10549                 }
10550         }
10551 }
10552 exit(0);
10553 }
10554 EOCP
10555         set try
10556         if eval $compile_ok; then
10557                 if ./try 2>/dev/null; then
10558                         echo "Yes, it can."
10559                         val="$define"
10560                 else
10561                         echo "It can't, sorry."
10562                         case "$d_memmove" in
10563                         "$define") echo "But that's Ok since you have memmove()." ;;
10564                         esac
10565                 fi
10566         else
10567                 echo "(I can't compile the test program, so we'll assume not...)"
10568                 case "$d_memmove" in
10569                 "$define") echo "But that's Ok since you have memmove()." ;;
10570                 esac
10571         fi
10572         ;;
10573 esac
10574 $rm -f try.* try core
10575 set d_safemcpy
10576 eval $setvar
10577
10578 : can memcmp be trusted to compare relative magnitude?
10579 val="$undef"
10580 case "$d_memcmp" in
10581 "$define")
10582         echo " "
10583         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10584         $cat >try.c <<EOCP
10585 #$i_memory I_MEMORY
10586 #$i_stdlib I_STDLIB
10587 #$i_string I_STRING
10588 #$i_unistd I_UNISTD
10589 EOCP
10590         $cat >>try.c <<'EOCP'
10591 #include <stdio.h>
10592 #ifdef I_MEMORY
10593 #  include <memory.h>
10594 #endif
10595 #ifdef I_STDLIB
10596 #  include <stdlib.h>
10597 #endif
10598 #ifdef I_STRING
10599 #  include <string.h>
10600 #else
10601 #  include <strings.h>
10602 #endif
10603 #ifdef I_UNISTD
10604 #  include <unistd.h>  /* Needed for NetBSD */
10605 #endif
10606 int main()
10607 {
10608 char a = -1;
10609 char b = 0;
10610 if ((a < b) && memcmp(&a, &b, 1) < 0)
10611         exit(1);
10612 exit(0);
10613 }
10614 EOCP
10615         set try
10616         if eval $compile_ok; then
10617                 if ./try 2>/dev/null; then
10618                         echo "Yes, it can."
10619                         val="$define"
10620                 else
10621                         echo "No, it can't (it uses signed chars)."
10622                 fi
10623         else
10624                 echo "(I can't compile the test program, so we'll assume not...)"
10625         fi
10626         ;;
10627 esac
10628 $rm -f try.* try core
10629 set d_sanemcmp
10630 eval $setvar
10631
10632 : see if select exists
10633 set select d_select
10634 eval $inlibc
10635
10636 : see if semctl exists
10637 set semctl d_semctl
10638 eval $inlibc
10639
10640 : see if semget exists
10641 set semget d_semget
10642 eval $inlibc
10643
10644 : see if semop exists
10645 set semop d_semop
10646 eval $inlibc
10647
10648 : see how much of the 'sem*(2)' library is present.
10649 h_sem=true
10650 echo " "
10651 case "$d_semctl$d_semget$d_semop" in
10652 *"$undef"*) h_sem=false;;
10653 esac
10654 case "$osname" in
10655 freebsd)
10656     case "`ipcs 2>&1`" in
10657     "SVID messages"*"not configured"*)
10658         echo "Your $osname does not have the sem*(2) configured." >&4
10659         h_sem=false
10660         val="$undef"
10661         set semctl d_semctl
10662         eval $setvar
10663         set semget d_semget
10664         eval $setvar
10665         set semop d_semop
10666         eval $setvar
10667         ;;
10668     esac
10669     ;;
10670 esac
10671 : we could also check for sys/ipc.h ...
10672 if $h_sem && $test `./findhdr sys/sem.h`; then
10673         echo "You have the full sem*(2) library." >&4
10674         val="$define"
10675 else
10676         echo "You don't have the full sem*(2) library." >&4
10677         val="$undef"
10678 fi
10679 set d_sem
10680 eval $setvar
10681
10682 : see whether sys/sem.h defines union semun
10683 echo " "
10684 $cat > try.c <<'END'
10685 #include <sys/types.h>
10686 #include <sys/ipc.h>
10687 #include <sys/sem.h>
10688 int main () { union semun semun; semun.buf = 0; }
10689 END
10690 set try
10691 if eval $compile; then
10692     echo "You have union semun in <sys/sem.h>." >&4
10693     val="$define"
10694 else
10695     echo "You do not have union semun in <sys/sem.h>." >&4
10696     val="$undef"
10697 fi
10698 $rm -f try try.c try.h
10699 set d_union_semun
10700 eval $setvar
10701
10702 : see how to do semctl IPC_STAT
10703 case "$d_sem" in
10704 $define)
10705     : see whether semctl IPC_STAT can use union semun
10706     echo " "
10707     $cat > try.h <<END
10708 #ifndef S_IRUSR
10709 #   ifdef S_IREAD
10710 #       define S_IRUSR S_IREAD
10711 #       define S_IWUSR S_IWRITE
10712 #       define S_IXUSR S_IEXEC
10713 #   else
10714 #       define S_IRUSR 0400
10715 #       define S_IWUSR 0200
10716 #       define S_IXUSR 0100
10717 #   endif
10718 #   define S_IRGRP (S_IRUSR>>3)
10719 #   define S_IWGRP (S_IWUSR>>3)
10720 #   define S_IXGRP (S_IXUSR>>3)
10721 #   define S_IROTH (S_IRUSR>>6)
10722 #   define S_IWOTH (S_IWUSR>>6)
10723 #   define S_IXOTH (S_IXUSR>>6)
10724 #endif
10725 #ifndef S_IRWXU
10726 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10727 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10728 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10729 #endif
10730 END
10731
10732     $cat > try.c <<END
10733 #include <sys/types.h>
10734 #include <sys/ipc.h>
10735 #include <sys/sem.h>
10736 #include <sys/stat.h>
10737 #include <stdio.h>
10738 #include <errno.h>
10739 #include "try.h"
10740 #ifndef errno
10741 extern int errno;
10742 #endif
10743 #$d_union_semun HAS_UNION_SEMUN
10744 int main() {
10745     union semun
10746 #ifndef HAS_UNION_SEMUN
10747     {
10748         int val;
10749         struct semid_ds *buf;
10750         unsigned short *array;
10751     }
10752 #endif
10753     arg;
10754     int sem, st;
10755
10756 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10757     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10758     if (sem > -1) {
10759         struct semid_ds argbuf;
10760         arg.buf = &argbuf;
10761 #       ifdef IPC_STAT
10762         st = semctl(sem, 0, IPC_STAT, arg);
10763         if (st == 0)
10764             printf("semun\n");
10765         else
10766 #       endif /* IPC_STAT */
10767             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10768 #       ifdef IPC_RMID
10769         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10770 #       endif /* IPC_RMID */
10771             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10772     } else
10773 #endif /* IPC_PRIVATE && ... */
10774         printf("semget failed: errno = %d\n", errno);
10775   return 0;
10776 }
10777 END
10778     val="$undef"
10779     set try
10780     if eval $compile; then
10781         xxx=`./try`
10782         case "$xxx" in
10783         semun) val="$define" ;;
10784         esac
10785     fi
10786     $rm -f try try.c
10787     set d_semctl_semun
10788     eval $setvar
10789     case "$d_semctl_semun" in
10790     $define)
10791         echo "You can use union semun for semctl IPC_STAT." >&4
10792         also='also'
10793         ;;
10794     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10795         also=''
10796         ;;
10797     esac
10798
10799     : see whether semctl IPC_STAT can use struct semid_ds pointer
10800     $cat > try.c <<'END'
10801 #include <sys/types.h>
10802 #include <sys/ipc.h>
10803 #include <sys/sem.h>
10804 #include <sys/stat.h>
10805 #include "try.h"
10806 #include <stdio.h>
10807 #include <errno.h>
10808 #ifndef errno
10809 extern int errno;
10810 #endif
10811 int main() {
10812     struct semid_ds arg;
10813     int sem, st;
10814
10815 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10816     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10817     if (sem > -1) {
10818 #       ifdef IPC_STAT
10819         st = semctl(sem, 0, IPC_STAT, &arg);
10820         if (st == 0)
10821             printf("semid_ds\n");
10822         else
10823 #       endif /* IPC_STAT */
10824             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10825 #       ifdef IPC_RMID
10826         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10827 #       endif /* IPC_RMID */
10828             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10829     } else
10830 #endif /* IPC_PRIVATE && ... */
10831         printf("semget failed: errno = %d\n", errno);
10832
10833     return 0;
10834 }
10835 END
10836     val="$undef"
10837     set try
10838     if eval $compile; then
10839         xxx=`./try`
10840         case "$xxx" in
10841         semid_ds) val="$define" ;;
10842         esac
10843     fi
10844     $rm -f try try.c
10845     set d_semctl_semid_ds
10846     eval $setvar
10847     case "$d_semctl_semid_ds" in
10848     $define)
10849         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10850         ;;
10851     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10852         ;;
10853     esac
10854     $rm -f try.h
10855     ;;
10856 *)  val="$undef"
10857
10858     # We do not have the full sem*(2) library, so assume we can not
10859     # use either.
10860
10861     set d_semctl_semun
10862     eval $setvar
10863
10864     set d_semctl_semid_ds
10865     eval $setvar
10866     ;;
10867 esac
10868
10869 : see if setegid exists
10870 set setegid d_setegid
10871 eval $inlibc
10872
10873 : see if seteuid exists
10874 set seteuid d_seteuid
10875 eval $inlibc
10876
10877 : see if setgrent exists
10878 set setgrent d_setgrent
10879 eval $inlibc
10880
10881 : see if sethostent exists
10882 set sethostent d_sethent
10883 eval $inlibc
10884
10885 : see if setlinebuf exists
10886 set setlinebuf d_setlinebuf
10887 eval $inlibc
10888
10889 : see if setlocale exists
10890 set setlocale d_setlocale
10891 eval $inlibc
10892
10893 : see if setnetent exists
10894 set setnetent d_setnent
10895 eval $inlibc
10896
10897 : see if setprotoent exists
10898 set setprotoent d_setpent
10899 eval $inlibc
10900
10901 : see if setpgid exists
10902 set setpgid d_setpgid
10903 eval $inlibc
10904
10905 : see if setpgrp2 exists
10906 set setpgrp2 d_setpgrp2
10907 eval $inlibc
10908
10909 : see if setpriority exists
10910 set setpriority d_setprior
10911 eval $inlibc
10912
10913 : see if setpwent exists
10914 set setpwent d_setpwent
10915 eval $inlibc
10916
10917 : see if setregid exists
10918 set setregid d_setregid
10919 eval $inlibc
10920 set setresgid d_setresgid
10921 eval $inlibc
10922
10923 : see if setreuid exists
10924 set setreuid d_setreuid
10925 eval $inlibc
10926 set setresuid d_setresuid
10927 eval $inlibc
10928
10929 : see if setrgid exists
10930 set setrgid d_setrgid
10931 eval $inlibc
10932
10933 : see if setruid exists
10934 set setruid d_setruid
10935 eval $inlibc
10936
10937 : see if setservent exists
10938 set setservent d_setsent
10939 eval $inlibc
10940
10941 : see if setsid exists
10942 set setsid d_setsid
10943 eval $inlibc
10944
10945 : see if setspent exists
10946 set setspent d_setspent
10947 eval $inlibc
10948
10949 : see if setvbuf exists
10950 set setvbuf d_setvbuf
10951 eval $inlibc
10952
10953 : see if sfio.h is available
10954 set sfio.h i_sfio
10955 eval $inhdr
10956
10957
10958 : see if sfio library is available
10959 case "$i_sfio" in
10960 $define)
10961         val=''
10962         set sfreserve val
10963         eval $inlibc
10964         ;;
10965 *)
10966         val="$undef"
10967         ;;
10968 esac
10969 : Ok, but do we want to use it.
10970 case "$val" in
10971 $define)
10972         case "$usesfio" in
10973         true|$define|[yY]*) dflt='y';;
10974         *) dflt='n';;
10975         esac
10976         echo "$package can use the sfio library, but it is experimental."
10977         rp="You seem to have sfio available, do you want to try using it?"
10978         . ./myread
10979         case "$ans" in
10980         y|Y) ;;
10981         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10982                 val="$undef"
10983                 : Remove sfio from list of libraries to use
10984                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10985                 shift
10986                 libs="$*"
10987                 echo "libs = $libs" >&4
10988                 ;;
10989         esac
10990         ;;
10991 *)      case "$usesfio" in
10992         true|$define|[yY]*)
10993                 echo "Sorry, cannot find sfio on this machine" >&4
10994                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10995                 ;;
10996         esac
10997         ;;
10998 esac
10999 set d_sfio
11000 eval $setvar
11001 case "$d_sfio" in
11002 $define) usesfio='true';;
11003 *) usesfio='false';;
11004 esac
11005
11006 : see if shmctl exists
11007 set shmctl d_shmctl
11008 eval $inlibc
11009
11010 : see if shmget exists
11011 set shmget d_shmget
11012 eval $inlibc
11013
11014 : see if shmat exists
11015 set shmat d_shmat
11016 eval $inlibc
11017 : see what shmat returns
11018 case "$d_shmat" in
11019 "$define")
11020         $cat >shmat.c <<'END'
11021 #include <sys/shm.h>
11022 void *shmat();
11023 END
11024         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11025                 shmattype='void *'
11026         else
11027                 shmattype='char *'
11028         fi
11029         echo "and it returns ($shmattype)." >&4
11030         : see if a prototype for shmat is available
11031         xxx=`./findhdr sys/shm.h`
11032         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11033         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11034                 val="$define"
11035         else
11036                 val="$undef"
11037         fi
11038         $rm -f shmat.[co]
11039         ;;
11040 *)
11041         val="$undef"
11042         ;;
11043 esac
11044 set d_shmatprototype
11045 eval $setvar
11046
11047 : see if shmdt exists
11048 set shmdt d_shmdt
11049 eval $inlibc
11050
11051 : see how much of the 'shm*(2)' library is present.
11052 h_shm=true
11053 echo " "
11054 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11055 *"$undef"*) h_shm=false;;
11056 esac
11057 case "$osname" in
11058 freebsd)
11059     case "`ipcs 2>&1`" in
11060     "SVID shared memory"*"not configured"*)
11061         echo "Your $osname does not have the shm*(2) configured." >&4
11062         h_shm=false
11063         val="$undef"
11064         set shmctl d_shmctl
11065         evat $setvar
11066         set shmget d_shmget
11067         evat $setvar
11068         set shmat d_shmat
11069         evat $setvar
11070         set shmdt d_shmdt
11071         evat $setvar
11072         ;;
11073     esac
11074     ;;
11075 esac
11076 : we could also check for sys/ipc.h ...
11077 if $h_shm && $test `./findhdr sys/shm.h`; then
11078         echo "You have the full shm*(2) library." >&4
11079         val="$define"
11080 else
11081         echo "You don't have the full shm*(2) library." >&4
11082         val="$undef"
11083 fi
11084 set d_shm
11085 eval $setvar
11086
11087 echo " "
11088 : see if we have sigaction
11089 if set sigaction val -f d_sigaction; eval $csym; $val; then
11090         echo 'sigaction() found.' >&4
11091         $cat > try.c <<'EOP'
11092 #include <stdio.h>
11093 #include <sys/types.h>
11094 #include <signal.h>
11095 int main()
11096 {
11097     struct sigaction act, oact;
11098     act.sa_flags = 0;
11099     oact.sa_handler = 0;
11100     /* so that act and oact are used */
11101     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11102 }
11103 EOP
11104         set try
11105         if eval $compile_ok; then
11106                 val="$define"
11107         else
11108                 echo "But you don't seem to have a useable struct sigaction." >&4
11109                 val="$undef"
11110         fi
11111 else
11112         echo 'sigaction NOT found.' >&4
11113         val="$undef"
11114 fi
11115 set d_sigaction; eval $setvar
11116 $rm -f try try$_o try.c
11117
11118 : see if sigsetjmp exists
11119 echo " "
11120 case "$d_sigsetjmp" in
11121 '')
11122         $cat >try.c <<'EOP'
11123 #include <setjmp.h>
11124 sigjmp_buf env;
11125 int set = 1;
11126 int main()
11127 {
11128         if (sigsetjmp(env,1))
11129                 exit(set);
11130         set = 0;
11131         siglongjmp(env, 1);
11132         exit(1);
11133 }
11134 EOP
11135         set try
11136         if eval $compile; then
11137                 if ./try >/dev/null 2>&1; then
11138                         echo "POSIX sigsetjmp found." >&4
11139                         val="$define"
11140                 else
11141                         $cat >&4 <<EOM
11142 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11143 I'll ignore them.
11144 EOM
11145                         val="$undef"
11146                 fi
11147         else
11148                 echo "sigsetjmp not found." >&4
11149                 val="$undef"
11150         fi
11151         ;;
11152 *) val="$d_sigsetjmp"
11153         case "$d_sigsetjmp" in
11154         $define) echo "POSIX sigsetjmp found." >&4;;
11155         $undef) echo "sigsetjmp not found." >&4;;
11156         esac
11157         ;;
11158 esac
11159 set d_sigsetjmp
11160 eval $setvar
11161 $rm -f try.c try
11162
11163 : see if sys/stat.h is available
11164 set sys/stat.h i_sysstat
11165 eval $inhdr
11166
11167
11168 : see if stat knows about block sizes
11169 echo " "
11170 echo "Checking to see if your struct stat has st_blocks field..." >&4
11171 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11172 eval $hasfield
11173
11174
11175 : see if this is a sys/vfs.h system
11176 set sys/vfs.h i_sysvfs
11177 eval $inhdr
11178
11179
11180 : see if this is a sys/statfs.h system
11181 set sys/statfs.h i_sysstatfs
11182 eval $inhdr
11183
11184
11185 echo " "
11186 echo "Checking to see if your system supports struct statfs..." >&4
11187 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
11188 eval $hasstruct
11189 case "$d_statfs_s" in
11190 "$define")      echo "Yes, it does."   ;;
11191 *)              echo "No, it doesn't." ;;
11192 esac
11193
11194
11195
11196 : see if struct statfs knows about f_flags
11197 case "$d_statfs_s" in
11198 define) 
11199         echo " "
11200         echo "Checking to see if your struct statfs has f_flags field..." >&4
11201         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
11202         eval $hasfield
11203         ;;
11204 *)      val="$undef"
11205         set d_statfs_f_flags
11206         eval $setvar
11207         ;;
11208 esac
11209 case "$d_statfs_f_flags" in
11210 "$define")      echo "Yes, it does."   ;;
11211 *)              echo "No, it doesn't." ;;
11212 esac
11213
11214 : see if _ptr and _cnt from stdio act std
11215 echo " "
11216 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11217         echo "(Looks like you have stdio.h from Linux.)"
11218         case "$stdio_ptr" in
11219         '') stdio_ptr='((fp)->_IO_read_ptr)'
11220                 ptr_lval=$define
11221                 ;;
11222         *)      ptr_lval=$d_stdio_ptr_lval;;
11223         esac
11224         case "$stdio_cnt" in
11225         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11226                 cnt_lval=$undef
11227                 ;;
11228         *)      cnt_lval=$d_stdio_cnt_lval;;
11229         esac
11230         case "$stdio_base" in
11231         '') stdio_base='((fp)->_IO_read_base)';;
11232         esac
11233         case "$stdio_bufsiz" in
11234         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11235         esac
11236 else
11237         case "$stdio_ptr" in
11238         '') stdio_ptr='((fp)->_ptr)'
11239                 ptr_lval=$define
11240                 ;;
11241         *)      ptr_lval=$d_stdio_ptr_lval;;
11242         esac
11243         case "$stdio_cnt" in
11244         '') stdio_cnt='((fp)->_cnt)'
11245                 cnt_lval=$define
11246                 ;;
11247         *)      cnt_lval=$d_stdio_cnt_lval;;
11248         esac
11249         case "$stdio_base" in
11250         '') stdio_base='((fp)->_base)';;
11251         esac
11252         case "$stdio_bufsiz" in
11253         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11254         esac
11255 fi
11256 : test whether _ptr and _cnt really work
11257 echo "Checking how std your stdio is..." >&4
11258 $cat >try.c <<EOP
11259 #include <stdio.h>
11260 #define FILE_ptr(fp)    $stdio_ptr
11261 #define FILE_cnt(fp)    $stdio_cnt
11262 int main() {
11263         FILE *fp = fopen("try.c", "r");
11264         char c = getc(fp);
11265         if (
11266                 18 <= FILE_cnt(fp) &&
11267                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11268         )
11269                 exit(0);
11270         exit(1);
11271 }
11272 EOP
11273 val="$undef"
11274 set try
11275 if eval $compile; then
11276         if ./try; then
11277                 echo "Your stdio acts pretty std."
11278                 val="$define"
11279         else
11280                 echo "Your stdio isn't very std."
11281         fi
11282 else
11283         echo "Your stdio doesn't appear very std."
11284 fi
11285 $rm -f try.c try
11286 set d_stdstdio
11287 eval $setvar
11288
11289 : Can _ptr be used as an lvalue?
11290 case "$d_stdstdio$ptr_lval" in
11291 $define$define) val=$define ;;
11292 *) val=$undef ;;
11293 esac
11294 set d_stdio_ptr_lval
11295 eval $setvar
11296
11297 : Can _cnt be used as an lvalue?
11298 case "$d_stdstdio$cnt_lval" in
11299 $define$define) val=$define ;;
11300 *) val=$undef ;;
11301 esac
11302 set d_stdio_cnt_lval
11303 eval $setvar
11304
11305 : see if _base is also standard
11306 val="$undef"
11307 case "$d_stdstdio" in
11308 $define)
11309         $cat >try.c <<EOP
11310 #include <stdio.h>
11311 #define FILE_base(fp)   $stdio_base
11312 #define FILE_bufsiz(fp) $stdio_bufsiz
11313 int main() {
11314         FILE *fp = fopen("try.c", "r");
11315         char c = getc(fp);
11316         if (
11317                 19 <= FILE_bufsiz(fp) &&
11318                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11319         )
11320                 exit(0);
11321         exit(1);
11322 }
11323 EOP
11324         set try
11325         if eval $compile; then
11326                 if ./try; then
11327                         echo "And its _base field acts std."
11328                         val="$define"
11329                 else
11330                         echo "But its _base field isn't std."
11331                 fi
11332         else
11333                 echo "However, it seems to be lacking the _base field."
11334         fi
11335         $rm -f try.c try
11336         ;;
11337 esac
11338 set d_stdiobase
11339 eval $setvar
11340
11341 $cat >&4 <<EOM
11342 Checking how to access stdio streams by file descriptor number...
11343 EOM
11344 case "$stdio_stream_array" in
11345 '')     $cat >try.c <<EOCP
11346 #include <stdio.h>
11347 int main() {
11348   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11349     printf("yes\n");
11350 }
11351 EOCP
11352         for s in _iob __iob __sF
11353         do
11354                 set try -DSTDIO_STREAM_ARRAY=$s
11355                 if eval $compile; then
11356                         case "`./try$exe_ext`" in
11357                         yes)    stdio_stream_array=$s; break ;;
11358                         esac
11359                 fi
11360         done
11361         $rm -f try.* try$exe_ext
11362 esac
11363 case "$stdio_stream_array" in
11364 '')     $cat >&4 <<EOM
11365 I can't figure out how to access stdio streams by file descriptor number.
11366 EOM
11367         d_stdio_stream_array="$undef"
11368         ;;
11369 *)      $cat >&4 <<EOM
11370 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11371 EOM
11372         d_stdio_stream_array="$define"
11373         ;;
11374 esac
11375
11376 : see if strcoll exists
11377 set strcoll d_strcoll
11378 eval $inlibc
11379
11380 : check for structure copying
11381 echo " "
11382 echo "Checking to see if your C compiler can copy structs..." >&4
11383 $cat >try.c <<'EOCP'
11384 int main()
11385 {
11386         struct blurfl {
11387                 int dyick;
11388         } foo, bar;
11389
11390         foo = bar;
11391 }
11392 EOCP
11393 if $cc -c try.c >/dev/null 2>&1 ; then
11394         val="$define"
11395         echo "Yup, it can."
11396 else
11397         val="$undef"
11398         echo "Nope, it can't."
11399 fi
11400 set d_strctcpy
11401 eval $setvar
11402 $rm -f try.*
11403
11404 : see if strerror and/or sys_errlist[] exist
11405 echo " "
11406 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11407     if set strerror val -f d_strerror; eval $csym; $val; then
11408                 echo 'strerror() found.' >&4
11409                 d_strerror="$define"
11410                 d_strerrm='strerror(e)'
11411                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11412                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11413                         d_syserrlst="$define"
11414                 else
11415                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11416                         d_syserrlst="$undef"
11417                 fi
11418     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11419                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11420                 echo 'strerror() found in string header.' >&4
11421                 d_strerror="$define"
11422                 d_strerrm='strerror(e)'
11423                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11424                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11425                                 d_syserrlst="$define"
11426                 else
11427                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11428                         d_syserrlst="$undef"
11429                 fi
11430     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11431                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11432                 d_strerror="$undef"
11433                 d_syserrlst="$define"
11434                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11435     else
11436                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11437                 d_strerror="$undef"
11438                 d_syserrlst="$undef"
11439                 d_strerrm='"unknown"'
11440     fi
11441 fi
11442
11443 : see if strtod exists
11444 set strtod d_strtod
11445 eval $inlibc
11446
11447 : see if strtol exists
11448 set strtol d_strtol
11449 eval $inlibc
11450
11451 : see if strtold exists
11452 set strtold d_strtold
11453 eval $inlibc
11454
11455 : see if strtoll exists
11456 set strtoll d_strtoll
11457 eval $inlibc
11458
11459 : see if strtoul exists
11460 set strtoul d_strtoul
11461 eval $inlibc
11462
11463 : see if strtoull exists
11464 set strtoull d_strtoull
11465 eval $inlibc
11466
11467 : see if strtouq exists
11468 set strtouq d_strtouq
11469 eval $inlibc
11470
11471 : see if strxfrm exists
11472 set strxfrm d_strxfrm
11473 eval $inlibc
11474
11475 : see if symlink exists
11476 set symlink d_symlink
11477 eval $inlibc
11478
11479 : see if syscall exists
11480 set syscall d_syscall
11481 eval $inlibc
11482
11483 : see if sysconf exists
11484 set sysconf d_sysconf
11485 eval $inlibc
11486
11487 : see if system exists
11488 set system d_system
11489 eval $inlibc
11490
11491 : see if tcgetpgrp exists
11492 set tcgetpgrp d_tcgetpgrp
11493 eval $inlibc
11494
11495 : see if tcsetpgrp exists
11496 set tcsetpgrp d_tcsetpgrp
11497 eval $inlibc
11498
11499 : see if prototype for telldir is available
11500 echo " "
11501 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11502 eval $hasproto
11503
11504 : see if this is a sys/times.h system
11505 set sys/times.h i_systimes
11506 eval $inhdr
11507
11508 : see if times exists
11509 echo " "
11510 if set times val -f d_times; eval $csym; $val; then
11511         echo 'times() found.' >&4
11512         d_times="$define"
11513         inc=''
11514         case "$i_systimes" in
11515         "$define") inc='sys/times.h';;
11516         esac
11517         rp="What is the type returned by times() on this system?"
11518         set clock_t clocktype long stdio.h sys/types.h $inc
11519         eval $typedef_ask
11520 else
11521         echo 'times() NOT found, hope that will do.' >&4
11522         d_times="$undef"
11523         clocktype='int'
11524 fi
11525
11526 : see if truncate exists
11527 set truncate d_truncate
11528 eval $inlibc
11529
11530 : see if tzname[] exists
11531 echo " "
11532 if set tzname val -a d_tzname; eval $csym; $val; then
11533         val="$define"
11534         echo 'tzname[] found.' >&4
11535 else
11536         val="$undef"
11537         echo 'tzname[] NOT found.' >&4
11538 fi
11539 set d_tzname
11540 eval $setvar
11541
11542 : see if umask exists
11543 set umask d_umask
11544 eval $inlibc
11545
11546 : see if ustat exists
11547 set ustat d_ustat
11548 eval $inlibc
11549
11550 : backward compatibility for d_hvfork
11551 if test X$d_hvfork != X; then
11552         d_vfork="$d_hvfork"
11553         d_hvfork=''
11554 fi
11555 : see if there is a vfork
11556 val=''
11557 set vfork val
11558 eval $inlibc
11559
11560 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11561 : perl on Solaris 2.x, and probably elsewhere.
11562 case "$val" in
11563 $define)
11564         echo " "
11565         case "$usevfork" in
11566         false) dflt='n';;
11567         *) dflt='y';;
11568         esac
11569         cat <<'EOM'
11570  
11571 Perl can only use a vfork() that doesn't suffer from strict
11572 restrictions on calling functions or modifying global data in
11573 the child.  For example, glibc-2.1 contains such a vfork()
11574 that is unsuitable.  If your system provides a proper fork()
11575 call, chances are that you do NOT want perl to use vfork().
11576
11577 EOM
11578         rp="Do you still want to use vfork()?"
11579         . ./myread
11580         case "$ans" in
11581         y|Y) ;;
11582         *)
11583                 echo "Ok, we won't use vfork()."
11584                 val="$undef"
11585                 ;;
11586         esac
11587         ;;
11588 esac
11589 set d_vfork
11590 eval $setvar
11591 case "$d_vfork" in
11592 $define) usevfork='true';;
11593 *) usevfork='false';;
11594 esac
11595
11596 : see if this is an sysdir system
11597 set sys/dir.h i_sysdir
11598 eval $inhdr
11599
11600 : see if this is an sysndir system
11601 set sys/ndir.h i_sysndir
11602 eval $inhdr
11603
11604 : see if closedir exists
11605 set closedir d_closedir
11606 eval $inlibc
11607
11608 case "$d_closedir" in
11609 "$define")
11610         echo " "
11611         echo "Checking whether closedir() returns a status..." >&4
11612         cat > closedir.c <<EOM
11613 #$i_dirent I_DIRENT             /**/
11614 #$i_sysdir I_SYS_DIR            /**/
11615 #$i_sysndir I_SYS_NDIR          /**/
11616 #$i_systypes I_SYS_TYPES        /**/
11617
11618 #if defined(I_SYS_TYPES)
11619 #include <sys/types.h>
11620 #endif
11621 #if defined(I_DIRENT)
11622 #include <dirent.h>
11623 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11624 #include <sys/dir.h>
11625 #endif
11626 #else
11627 #ifdef I_SYS_NDIR
11628 #include <sys/ndir.h>
11629 #else
11630 #ifdef I_SYS_DIR
11631 #ifdef hp9000s500
11632 #include <ndir.h>       /* may be wrong in the future */
11633 #else
11634 #include <sys/dir.h>
11635 #endif
11636 #endif
11637 #endif
11638 #endif 
11639 int main() { return closedir(opendir(".")); }
11640 EOM
11641         set closedir
11642         if eval $compile_ok; then
11643                 if ./closedir > /dev/null 2>&1 ; then
11644                         echo "Yes, it does."
11645                         val="$undef"
11646                 else
11647                         echo "No, it doesn't."
11648                         val="$define"
11649                 fi
11650         else
11651                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11652                 val="$define"
11653         fi
11654         ;;
11655 *)
11656         val="$undef";
11657         ;;
11658 esac
11659 set d_void_closedir
11660 eval $setvar
11661 $rm -f closedir*
11662 : check for volatile keyword
11663 echo " "
11664 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11665 $cat >try.c <<'EOCP'
11666 int main()
11667 {
11668         typedef struct _goo_struct goo_struct;
11669         goo_struct * volatile goo = ((goo_struct *)0);
11670         struct _goo_struct {
11671                 long long_int;
11672                 int reg_int;
11673                 char char_var;
11674         };
11675         typedef unsigned short foo_t;
11676         char *volatile foo;
11677         volatile int bar;
11678         volatile foo_t blech;
11679         foo = foo;
11680 }
11681 EOCP
11682 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11683         val="$define"
11684         echo "Yup, it does."
11685 else
11686         val="$undef"
11687         echo "Nope, it doesn't."
11688 fi
11689 set d_volatile
11690 eval $setvar
11691 $rm -f try.*
11692
11693 : see if there is a wait4
11694 set wait4 d_wait4
11695 eval $inlibc
11696
11697 : see if waitpid exists
11698 set waitpid d_waitpid
11699 eval $inlibc
11700
11701 : see if wcstombs exists
11702 set wcstombs d_wcstombs
11703 eval $inlibc
11704
11705 : see if wctomb exists
11706 set wctomb d_wctomb
11707 eval $inlibc
11708
11709 : preserve RCS keywords in files with variable substitution, grrr
11710 Date='$Date'
11711 Id='$Id'
11712 Log='$Log'
11713 RCSfile='$RCSfile'
11714 Revision='$Revision'
11715
11716 case "$crosscompile" in
11717 ''|[nN]*) crosscompile="$undef" ;;
11718 esac
11719
11720 case "$osname" in
11721 next|rhapsody|darwin) multiarch="$define" ;;
11722 esac
11723 case "$multiarch" in
11724 ''|[nN]*) multiarch="$undef" ;;
11725 esac
11726
11727 : check for alignment requirements
11728 echo " "
11729 case "$crosscompile$multiarch" in
11730 *$define*)
11731         $cat <<EOM
11732 You seem to be either cross-compiling or doing a multiarchitecture build,
11733 skipping the memory alignment check.
11734
11735 EOM
11736         case "$alignbytes" in
11737         '') alignbytes=8 ;;
11738         esac
11739         ;;
11740 *)
11741         case "$alignbytes" in
11742         '') echo "Checking alignment constraints..." >&4
11743                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11744                         $cat >try.c <<'EOCP'
11745 typedef long double NV;
11746 EOCP
11747                 else
11748                         $cat >try.c <<'EOCP'
11749 typedef double NV;
11750 EOCP
11751                 fi
11752                 $cat >>try.c <<'EOCP'
11753 #include <stdio.h>
11754 struct foobar {
11755         char foo;
11756         NV bar;
11757 } try_algn;
11758 int main()
11759 {
11760     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11761     return(0);
11762 }
11763 EOCP
11764                 set try
11765                 if eval $compile_ok; then
11766                         dflt=`./try`
11767                 else
11768                         dflt='8'
11769                         echo "(I can't seem to compile the test program...)"
11770                 fi
11771                 ;;
11772         *) dflt="$alignbytes"
11773                 ;;
11774         esac
11775         rp="Doubles must be aligned on a how-many-byte boundary?"
11776         . ./myread
11777         alignbytes="$ans"
11778         $rm -f try.c try
11779         ;;
11780 esac
11781
11782
11783 : set the base revision
11784 baserev=5.0
11785
11786 : check for ordering of bytes in a long
11787 echo " "
11788 case "$crosscompile$multiarch" in
11789 *$define*)
11790         $cat <<EOM
11791 You seem to be either cross-compiling or doing a multiarchitecture build,
11792 skipping the byteorder check.
11793
11794 EOM
11795         byteorder='0xffff'
11796         ;;
11797 *)
11798         case "$byteorder" in
11799         '')
11800                 $cat <<'EOM'
11801 In the following, larger digits indicate more significance.  A big-endian
11802 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11803 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11804 machines may have weird orders like 3412.  A Cray will report 87654321,
11805 an Alpha will report 12345678. If the test program works the default is
11806 probably right.
11807 I'm now running the test program...
11808 EOM
11809                 $cat >try.c <<'EOCP'
11810 #include <stdio.h>
11811 int main()
11812 {
11813         int i;
11814         union {
11815                 unsigned long l;
11816                 char c[sizeof(long)];
11817         } u;
11818
11819         if (sizeof(long) > 4)
11820                 u.l = (0x08070605L << 32) | 0x04030201L;
11821         else
11822                 u.l = 0x04030201L;
11823         for (i = 0; i < sizeof(long); i++)
11824                 printf("%c", u.c[i]+'0');
11825         printf("\n");
11826         exit(0);
11827 }
11828 EOCP
11829                 xxx_prompt=y
11830                 set try
11831                 if eval $compile && ./try > /dev/null; then
11832                         dflt=`./try`
11833                         case "$dflt" in
11834                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11835                                 echo "(The test program ran ok.)"
11836                                 echo "byteorder=$dflt"
11837                                 xxx_prompt=n
11838                         ;;
11839                         ????|????????) echo "(The test program ran ok.)" ;;
11840                         *) echo "(The test program didn't run right for some reason.)" ;;
11841                         esac
11842                 else
11843                         dflt='4321'
11844                         cat <<'EOM'
11845 (I can't seem to compile the test program.  Guessing big-endian...)
11846 EOM
11847                 fi
11848                 case "$xxx_prompt" in
11849                 y)
11850                         rp="What is the order of bytes in a long?"
11851                         . ./myread
11852                         byteorder="$ans"
11853                         ;;
11854                 *)      byteorder=$dflt
11855                         ;;
11856                 esac
11857                 ;;
11858         esac
11859         $rm -f try.c try
11860         ;;
11861 esac
11862
11863
11864 : how do we catenate cpp tokens here?
11865 echo " "
11866 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11867 $cat >cpp_stuff.c <<'EOCP'
11868 #define RCAT(a,b)a/**/b
11869 #define ACAT(a,b)a ## b
11870 RCAT(Rei,ser)
11871 ACAT(Cir,cus)
11872 EOCP
11873 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11874 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11875         echo "Oh!  Smells like ANSI's been here." >&4
11876         echo "We can catify or stringify, separately or together!"
11877         cpp_stuff=42
11878 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11879         echo "Ah, yes!  The good old days!" >&4
11880         echo "However, in the good old days we don't know how to stringify and"
11881         echo "catify at the same time."
11882         cpp_stuff=1
11883 else
11884         $cat >&4 <<EOM
11885 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11886 to have to edit the values of CAT[2-5] in config.h...
11887 EOM
11888         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11889 fi
11890 $rm -f cpp_stuff.*
11891
11892 : see if this is a db.h system
11893 set db.h i_db
11894 eval $inhdr
11895
11896 case "$i_db" in
11897 $define)
11898         : Check db version.
11899         echo " "
11900         echo "Checking Berkeley DB version ..." >&4
11901         $cat >try.c <<EOCP
11902 #$d_const HASCONST
11903 #ifndef HASCONST
11904 #define const
11905 #endif
11906 #include <sys/types.h>
11907 #include <stdio.h>
11908 #include <db.h>
11909 int main()
11910 {
11911 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11912     int Major, Minor, Patch ;
11913     unsigned long Version ;
11914     (void)db_version(&Major, &Minor, &Patch) ;
11915     printf("You have Berkeley DB Version 2 or greater\n");
11916
11917     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11918                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11919     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11920                 Major, Minor, Patch) ;
11921
11922     /* check that db.h & libdb are compatible */
11923     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11924         printf("db.h and libdb are incompatible\n") ;
11925         exit(3);        
11926     }
11927
11928     printf("db.h and libdb are compatible\n") ;
11929
11930     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11931                 + DB_VERSION_PATCH ;
11932
11933     /* needs to be >= 2.3.4 */
11934     if (Version < 2003004) {
11935     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11936         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11937         exit(2);        
11938     }
11939
11940     exit(0);
11941 #else
11942 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11943     printf("You have Berkeley DB Version 1\n");
11944     exit(0);    /* DB version < 2: the coast is clear. */
11945 #else
11946     exit(1);    /* <db.h> not Berkeley DB? */
11947 #endif
11948 #endif
11949 }
11950 EOCP
11951         set try
11952         if eval $compile_ok && ./try; then
11953                 echo 'Looks OK.' >&4
11954         else
11955                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11956                 i_db=$undef
11957                 case " $libs " in
11958                 *"-ldb "*)
11959                         : Remove db from list of libraries to use
11960                         echo "Removing unusable -ldb from library list" >&4
11961                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11962                         shift
11963                         libs="$*"
11964                         echo "libs = $libs" >&4
11965                         ;;
11966                 esac
11967         fi
11968         $rm -f try.*
11969         ;;
11970 esac
11971
11972 case "$i_db" in
11973 define)
11974         : Check the return type needed for hash 
11975         echo " "
11976         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11977         $cat >try.c <<EOCP
11978 #$d_const HASCONST
11979 #ifndef HASCONST
11980 #define const
11981 #endif
11982 #include <sys/types.h>
11983 #include <db.h>
11984
11985 #ifndef DB_VERSION_MAJOR
11986 u_int32_t hash_cb (ptr, size)
11987 const void *ptr;
11988 size_t size;
11989 {
11990 }
11991 HASHINFO info;
11992 int main()
11993 {
11994         info.hash = hash_cb;
11995 }
11996 #endif
11997 EOCP
11998         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11999                 if $contains warning try.out >>/dev/null 2>&1 ; then
12000                         db_hashtype='int'
12001                 else
12002                         db_hashtype='u_int32_t'
12003                 fi
12004         else
12005                 : XXX Maybe we should just give up here.
12006                 db_hashtype=u_int32_t
12007                 $cat try.out >&4
12008                 echo "Help:  I can't seem to compile the db test program." >&4
12009                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12010         fi
12011         $rm -f try.*
12012         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12013         ;;
12014 *)      db_hashtype=u_int32_t
12015         ;;
12016 esac
12017 case "$i_db" in
12018 define)
12019         : Check the return type needed for prefix 
12020         echo " "
12021         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12022         cat >try.c <<EOCP
12023 #$d_const HASCONST
12024 #ifndef HASCONST
12025 #define const
12026 #endif
12027 #include <sys/types.h>
12028 #include <db.h>
12029
12030 #ifndef DB_VERSION_MAJOR
12031 size_t prefix_cb (key1, key2)
12032 const DBT *key1;
12033 const DBT *key2;
12034 {
12035 }
12036 BTREEINFO info;
12037 int main()
12038 {
12039         info.prefix = prefix_cb;
12040 }
12041 #endif
12042 EOCP
12043         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12044                 if $contains warning try.out >>/dev/null 2>&1 ; then
12045                         db_prefixtype='int'
12046                 else
12047                         db_prefixtype='size_t'
12048                 fi
12049         else
12050                 db_prefixtype='size_t'
12051                 : XXX Maybe we should just give up here.
12052                 $cat try.out >&4
12053                 echo "Help:  I can't seem to compile the db test program." >&4
12054                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12055         fi
12056         $rm -f try.*
12057         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12058         ;;
12059 *)      db_prefixtype='size_t'
12060         ;;
12061 esac
12062
12063 : check for void type
12064 echo " "
12065 echo "Checking to see how well your C compiler groks the void type..." >&4
12066 case "$voidflags" in
12067 '')
12068         $cat >try.c <<'EOCP'
12069 #if TRY & 1
12070 void sub() {
12071 #else
12072 sub() {
12073 #endif
12074         extern void moo();      /* function returning void */
12075         void (*goo)();          /* ptr to func returning void */
12076 #if TRY & 8
12077         void *hue;              /* generic ptr */
12078 #endif
12079 #if TRY & 2
12080         void (*foo[10])();
12081 #endif
12082
12083 #if TRY & 4
12084         if(goo == moo) {
12085                 exit(0);
12086         }
12087 #endif
12088         exit(0);
12089 }
12090 int main() { sub(); }
12091 EOCP
12092         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12093                 voidflags=$defvoidused
12094         echo "Good.  It appears to support void to the level $package wants.">&4
12095                 if $contains warning .out >/dev/null 2>&1; then
12096                         echo "However, you might get some warnings that look like this:"
12097                         $cat .out
12098                 fi
12099         else
12100 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12101                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12102                         echo "It supports 1..."
12103                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12104                                 echo "It also supports 2..."
12105                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12106                                         voidflags=7
12107                                         echo "And it supports 4 but not 8 definitely."
12108                                 else
12109                                         echo "It doesn't support 4..."
12110                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12111                                                 voidflags=11
12112                                                 echo "But it supports 8."
12113                                         else
12114                                                 voidflags=3
12115                                                 echo "Neither does it support 8."
12116                                         fi
12117                                 fi
12118                         else
12119                                 echo "It does not support 2..."
12120                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12121                                         voidflags=13
12122                                         echo "But it supports 4 and 8."
12123                                 else
12124                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12125                                                 voidflags=5
12126                                                 echo "And it supports 4 but has not heard about 8."
12127                                         else
12128                                                 echo "However it supports 8 but not 4."
12129                                         fi
12130                                 fi
12131                         fi
12132                 else
12133                         echo "There is no support at all for void."
12134                         voidflags=0
12135                 fi
12136         fi
12137 esac
12138 case "$voidflags" in
12139 "$defvoidused") ;;
12140 *)      $cat >&4 <<'EOM'
12141   Support flag bits are:
12142     1: basic void declarations.
12143     2: arrays of pointers to functions returning void.
12144     4: operations between pointers to and addresses of void functions.
12145     8: generic void pointers.
12146 EOM
12147         dflt="$voidflags";
12148         rp="Your void support flags add up to what?"
12149         . ./myread
12150         voidflags="$ans"
12151         ;;
12152 esac
12153 $rm -f try.* .out
12154
12155
12156 : How can we generate normalized random numbers ?
12157 echo " "
12158 echo "Looking for a random number function..." >&4
12159 case "$randfunc" in
12160 '')
12161         if set drand48 val -f; eval $csym; $val; then
12162                 dflt="drand48"
12163                 echo "Good, found drand48()." >&4
12164         elif set random val -f; eval $csym; $val; then
12165                 dflt="random"
12166                 echo "OK, found random()." >&4
12167         else
12168                 dflt="rand"
12169                 echo "Yick, looks like I have to use rand()." >&4
12170         fi
12171         echo " "
12172         ;;
12173 *)
12174         dflt="$randfunc"
12175         ;;
12176 esac
12177 cont=true
12178
12179 case "$ccflags" in
12180 *-Dmy_rand=*|*-Dmy_srand=*)
12181         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12182         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12183         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12184         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12185         ;;
12186 esac
12187
12188 while $test "$cont"; do
12189         rp="Use which function to generate random numbers?"
12190         . ./myread
12191         if $test "$ans" = "$dflt"; then
12192                 : null
12193         else
12194                 randbits=''
12195         fi
12196         randfunc="$ans"
12197         if set $ans val -f; eval $csym; $val; then
12198                 cont=''
12199         else
12200                 dflt=y
12201                 rp="I cannot find function $ans. Use that name anyway?"
12202                 . ./myread
12203                 dflt=rand
12204                 case "$ans" in
12205                         [yY]*) cont='';;
12206                 esac
12207         fi
12208         case "$cont" in
12209         '')
12210                 case "$randfunc" in
12211                 drand48)
12212                         drand01="drand48()"
12213                         seedfunc="srand48"
12214                         randbits=48
12215                         randseedtype=long
12216                         ;;
12217                 rand|random)
12218                         case "$randbits" in
12219                         '')
12220 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12221                                 $cat >try.c <<EOCP
12222 #$i_unistd I_UNISTD
12223 #$i_stdlib I_STDLIB
12224 #include <stdio.h>
12225 #ifdef I_UNISTD
12226 #  include <unistd.h>
12227 #endif
12228 #ifdef I_STDLIB
12229 #  include <stdlib.h>
12230 #endif
12231 int main()
12232 {
12233         register int i;
12234         register unsigned long tmp;
12235         register unsigned long max = 0L;
12236
12237         for (i = 1000; i; i--) {
12238                 tmp = (unsigned long) $randfunc();
12239                 if (tmp > max) max = tmp;
12240         }
12241         for (i = 0; max; i++)
12242                 max /= 2;
12243         printf("%d\n",i);
12244 }
12245 EOCP
12246                                 set try
12247                                 if eval $compile_ok; then
12248                                         dflt=`try`
12249                                 else
12250                                         dflt='?'
12251                                         echo "(I can't seem to compile the test program...)"
12252                                 fi
12253                                 ;;
12254                         *)
12255                                 dflt="$randbits"
12256                                 ;;
12257                         esac
12258                         rp="How many bits does your $randfunc() function produce?"
12259                         . ./myread
12260                         randbits="$ans"
12261                         $rm -f try.c try
12262                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12263                         seedfunc="s$randfunc"
12264                         randseedtype=unsigned
12265                         ;;
12266                 *)
12267                         dflt="31"
12268                         rp="How many bits does your $randfunc() function produce?"
12269                         . ./myread
12270                         randbits="$ans"
12271                         seedfunc="s$randfunc"
12272                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12273                         if set $seedfunc val -f; eval $csym; $val; then
12274                                 echo "(Using $seedfunc() to seed random generator)"
12275                         else
12276                                 echo "(Warning: no $seedfunc() to seed random generator)"
12277                                 seedfunc=rand
12278                         fi
12279                         randseedtype=unsigned
12280                         ;;
12281                 esac
12282                 ;;
12283         esac
12284 done
12285
12286 echo " "
12287 echo "Determining whether or not we are on an EBCDIC system..." >&4
12288 $cat >tebcdic.c <<'EOM'
12289 int main()
12290 {
12291   if ('M'==0xd4) return 0;
12292   return 1;
12293 }
12294 EOM
12295
12296 val=$undef
12297 set tebcdic
12298 if eval $compile_ok; then
12299         if ./tebcdic; then
12300                 echo "You have EBCDIC." >&4
12301                 val="$define"
12302         else
12303                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12304         fi
12305 else
12306         echo "I'm unable to compile the test program." >&4
12307         echo "I'll assume ASCII or some ISO Latin." >&4
12308 fi
12309 $rm -f tebcdic.c tebcdic
12310 set ebcdic
12311 eval $setvar
12312
12313 echo " "
12314 $cat >&4 <<EOM
12315 Checking how to flush all pending stdio output...
12316 EOM
12317 # I only know how to find the first 32 possibly open files on SunOS.
12318 # See also hints/sunos_4_1.sh and util.c  --AD
12319 case "$osname" in
12320 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12321 esac
12322 $cat >>try.c <<EOCP
12323 #include <stdio.h>
12324 #$i_unistd I_UNISTD
12325 #ifdef I_UNISTD
12326 # include <unistd.h>
12327 #endif
12328 #$d_sysconf HAS_SYSCONF
12329 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12330 #ifdef HAS_STDIO_STREAM_ARRAY
12331 # define STDIO_STREAM_ARRAY $stdio_stream_array
12332 #endif
12333 int main() {
12334   FILE* p = fopen("try.out", "w");
12335 #ifdef TRY_FPUTC
12336   fputc('x', p);
12337 #else
12338 # ifdef TRY_FPRINTF
12339   fprintf(p, "x");
12340 # endif
12341 #endif
12342 #ifdef TRY_FFLUSH_NULL
12343   fflush(NULL);
12344 #endif
12345 #ifdef TRY_FFLUSH_ALL
12346   {
12347     long open_max = -1;
12348 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12349     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12350 # else
12351 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12352     open_max = sysconf(_SC_OPEN_MAX);
12353 #  else
12354 #   ifdef FOPEN_MAX
12355     open_max = FOPEN_MAX;
12356 #   else
12357 #    ifdef OPEN_MAX
12358     open_max = OPEN_MAX;
12359 #    else
12360 #     ifdef _NFILE
12361     open_max = _NFILE;
12362 #     endif
12363 #    endif
12364 #   endif
12365 #  endif
12366 # endif 
12367 # ifdef HAS_STDIO_STREAM_ARRAY
12368     if (open_max > 0) {
12369       long i;
12370       for (i = 0; i < open_max; i++)
12371             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12372                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12373                 STDIO_STREAM_ARRAY[i]._flag)
12374                 fflush(&STDIO_STREAM_ARRAY[i]);
12375     }   
12376   }
12377 # endif
12378 #endif
12379   _exit(42);
12380 }
12381 EOCP
12382 : first we have to find out how _not_ to flush
12383 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12384     output=''
12385     set try -DTRY_FPUTC
12386     if eval $compile; then
12387             $rm -f try.out
12388             ./try$exe_ext 2>/dev/null
12389             if $test ! -s try.out -a "X$?" = X42; then
12390                 output=-DTRY_FPUTC
12391             fi
12392     fi
12393     case "$output" in
12394     '')
12395             set try -DTRY_FPRINTF
12396             $rm -f try.out
12397             if eval $compile; then
12398                     $rm -f try.out
12399                     ./try$exe_ext 2>/dev/null
12400                     if $test ! -s try.out -a "X$?" = X42; then
12401                         output=-DTRY_FPRINTF
12402                     fi
12403             fi
12404         ;;
12405     esac
12406 fi
12407 : check for fflush NULL behaviour
12408 case "$fflushNULL" in
12409 '')     set try -DTRY_FFLUSH_NULL $output
12410         if eval $compile; then
12411                 $rm -f try.out
12412                 ./try$exe_ext 2>/dev/null
12413                 code="$?"
12414                 if $test -s try.out -a "X$code" = X42; then
12415                         fflushNULL="`$cat try.out`"
12416                 else
12417                         if $test "X$code" != X42; then
12418                                 $cat >&4 <<EOM
12419 (If this test failed, don't worry, we'll try another method shortly.)
12420 EOM
12421                         fi
12422                 fi
12423         fi
12424         $rm -f core try.core core.try.*
12425         case "$fflushNULL" in
12426         x)      $cat >&4 <<EOM
12427 Your fflush(NULL) works okay.
12428 EOM
12429                 fflushNULL="$define"
12430                 ;;
12431         '')     $cat >&4 <<EOM
12432 Your fflush(NULL) isn't working (contrary to ANSI C).
12433 EOM
12434                 fflushNULL="$undef"
12435                 ;;
12436         *)      $cat >&4 <<EOM
12437 Cannot figure out whether your fflush(NULL) works or not.
12438 I'm assuming it doesn't (contrary to ANSI C).
12439 EOM
12440                 fflushNULL="$undef"
12441                 ;;
12442         esac
12443         ;;
12444 $define|true|[yY]*)
12445         fflushNULL="$define"
12446         ;;
12447 *)
12448         fflushNULL="$undef"
12449         ;;
12450 esac
12451 : check explicit looping only if NULL did not work
12452 case "$fflushNULL" in
12453 "$undef")
12454         : check for fflush all behaviour
12455         case "$fflushall" in
12456         '')     set try -DTRY_FFLUSH_ALL $output
12457                 if eval $compile; then
12458                         $cat >&4 <<EOM
12459 (Now testing the other method--but note that also this may fail.)
12460 EOM
12461                         $rm -f try.out
12462                         ./try$exe_ext 2>/dev/null
12463                         if $test -s try.out -a "X$?" = X42; then
12464                                 fflushall="`$cat try.out`"
12465                         fi
12466                 fi
12467                 $rm -f core try.core core.try.*
12468                 case "$fflushall" in
12469                 x)      $cat >&4 <<EOM
12470 Whew. Flushing explicitly all the stdio streams works.
12471 EOM
12472                         fflushall="$define"
12473                         ;;
12474                 '')     $cat >&4 <<EOM
12475 Sigh. Flushing explicitly all the stdio streams doesn't work.
12476 EOM
12477                         fflushall="$undef"
12478                         ;;
12479                 *)      $cat >&4 <<EOM
12480 Cannot figure out whether flushing stdio streams explicitly works or not.
12481 I'm assuming it doesn't.
12482 EOM
12483                         fflushall="$undef"
12484                         ;;
12485                 esac
12486                 ;;
12487         "$define"|true|[yY]*)
12488                 fflushall="$define"
12489                 ;;
12490         *)
12491                 fflushall="$undef"
12492                 ;;
12493         esac
12494         ;;
12495 *)      fflushall="$undef"      
12496         ;;
12497 esac
12498 case "$fflushNULL$fflushall" in
12499 undefundef)
12500         $cat <<EOM
12501 I cannot figure out how to flush pending stdio output.
12502 EOM
12503         ;;
12504 esac
12505 $rm -f try.* try$exe_ext
12506
12507 : Store the full pathname to the ar program for use in the C program
12508 : Respect a hint or command line value for full_ar.
12509 case "$full_ar" in
12510 '') full_ar=$ar ;;
12511 esac
12512
12513 : Store the full pathname to the sed program for use in the C program
12514 full_sed=$sed
12515
12516 : see what type gids are declared as in the kernel
12517 echo " "
12518 echo "Looking for the type for group ids returned by getgid()."
12519 set gid_t gidtype xxx stdio.h sys/types.h
12520 eval $typedef
12521 case "$gidtype" in
12522 xxx)
12523         xxx=`./findhdr sys/user.h`
12524         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12525         case $1 in
12526         unsigned) dflt="$1 $2" ;;
12527         *) dflt="$1" ;;
12528         esac
12529         ;;
12530 *) dflt="$gidtype";;
12531 esac
12532 case "$gidtype" in
12533 gid_t) echo "gid_t found." ;;
12534 *)      rp="What is the type for group ids returned by getgid()?"
12535         . ./myread
12536         gidtype="$ans"
12537         ;;
12538 esac
12539
12540 echo " "
12541 case "$gidtype" in
12542 *_t) zzz="$gidtype"     ;;
12543 *)   zzz="gid"          ;;
12544 esac
12545 echo "Checking the size of $zzz..." >&4 
12546 cat > try.c <<EOCP
12547 #include <sys/types.h>
12548 #include <stdio.h>
12549 int main() {
12550     printf("%d\n", (int)sizeof($gidtype));
12551     exit(0);
12552 }
12553 EOCP
12554 set try
12555 if eval $compile_ok; then
12556         yyy=`./try`
12557         case "$yyy" in
12558         '')     gidsize=4
12559                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12560                 ;;
12561         *)      gidsize=$yyy
12562                 echo "Your $zzz is $gidsize bytes long."
12563                 ;;
12564         esac
12565 else
12566         gidsize=4
12567         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12568 fi
12569
12570
12571 echo " "
12572 case "$gidtype" in
12573 *_t) zzz="$gidtype"     ;;
12574 *)   zzz="gid"          ;;
12575 esac
12576 echo "Checking the sign of $zzz..." >&4 
12577 cat > try.c <<EOCP
12578 #include <sys/types.h>
12579 #include <stdio.h>
12580 int main() {
12581         $gidtype foo = -1;
12582         if (foo < 0)
12583                 printf("-1\n");
12584         else
12585                 printf("1\n");
12586 }
12587 EOCP
12588 set try
12589 if eval $compile; then
12590         yyy=`./try`
12591         case "$yyy" in
12592         '')     gidsign=1
12593                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12594                 ;;
12595         *)      gidsign=$yyy
12596                 case "$gidsign" in
12597                  1) echo "Your $zzz is unsigned." ;;
12598                 -1) echo "Your $zzz is signed."   ;;
12599                 esac
12600                 ;;
12601         esac
12602 else
12603         gidsign=1
12604         echo "(I can't compile the test program--guessing unsigned.)" >&4
12605 fi
12606
12607
12608 echo " "
12609
12610 if $test X"$quadtype" != X; then
12611
12612 echo "Checking how to print 64-bit integers..." >&4
12613
12614 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12615         $cat >try.c <<'EOCP'
12616 #include <sys/types.h>
12617 #include <stdio.h>
12618 int main() {
12619   int q = 12345678901;
12620   printf("%ld\n", q);
12621 }
12622 EOCP
12623         set try
12624         if eval $compile; then
12625                 yyy=`./try$exe_ext`
12626                 case "$yyy" in
12627                 12345678901)
12628                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12629                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12630                         echo "We will use %d."
12631                         ;;
12632                 esac
12633         fi
12634 fi
12635
12636 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12637         $cat >try.c <<'EOCP'
12638 #include <sys/types.h>
12639 #include <stdio.h>
12640 int main() {
12641   long q = 12345678901;
12642   printf("%ld\n", q);
12643 }
12644 EOCP
12645         set try
12646         if eval $compile; then
12647                 yyy=`./try$exe_ext`
12648                 case "$yyy" in
12649                 12345678901)
12650                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12651                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12652                         echo "We will use %ld."
12653                         ;;
12654                 esac
12655         fi
12656 fi
12657
12658 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12659         $cat >try.c <<'EOCP'
12660 #include <sys/types.h>
12661 #include <inttypes.h>
12662 #include <stdio.h>
12663 int main() {
12664   int64_t q = 12345678901;
12665   printf("%" PRId64 "\n", q);
12666 }
12667 EOCP
12668         set try
12669         if eval $compile; then
12670                 yyy=`./try$exe_ext`
12671                 case "$yyy" in
12672                 12345678901)
12673                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12674                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12675                         echo "We will use the C9X style."
12676                         ;;
12677                 esac
12678         fi
12679 fi
12680
12681 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12682         $cat >try.c <<'EOCP'
12683 #include <sys/types.h>
12684 #include <stdio.h>
12685 int main() {
12686   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12687   printf("%lld\n", q);
12688 }
12689 EOCP
12690         set try
12691         if eval $compile; then
12692                 yyy=`./try$exe_ext`
12693                 case "$yyy" in
12694                 12345678901)
12695                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12696                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12697                         echo "We will use the %lld style."
12698                         ;;
12699                 esac
12700         fi
12701 fi
12702
12703 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12704         $cat >try.c <<EOCP
12705 #include <sys/types.h>
12706 #include <stdio.h>
12707 int main() {
12708   $quadtype q = 12345678901;
12709   printf("%Ld\n", q);
12710 }
12711 EOCP
12712         set try
12713         if eval $compile; then
12714                 yyy=`./try$exe_ext`
12715                 case "$yyy" in
12716                 12345678901)
12717                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12718                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12719                         echo "We will use %Ld."
12720                         ;;
12721                 esac
12722         fi
12723 fi
12724
12725 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12726         $cat >try.c <<EOCP
12727 #include <sys/types.h>
12728 #include <stdio.h>
12729 int main() {
12730   $quadtype q = 12345678901;
12731   printf("%qd\n", q);
12732 }
12733 EOCP
12734         set try
12735         if eval $compile; then
12736                 yyy=`./try$exe_ext`
12737                 case "$yyy" in
12738                 12345678901)
12739                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12740                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12741                         echo "We will use %qd."
12742                         ;;
12743                 esac
12744         fi
12745 fi
12746
12747 if $test X"$sPRId64" = X; then
12748         echo "Cannot figure out how to print 64-bit integers." >&4
12749 fi
12750
12751 $rm -f try try.*
12752
12753 fi
12754
12755 case "$sPRId64" in
12756 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12757         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12758         ;;
12759 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12760         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12761         ;;
12762 esac
12763
12764
12765 echo " "
12766 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12767
12768 if $test X"$ivsize" = X8; then
12769         ivdformat="$sPRId64"
12770         uvuformat="$sPRIu64"
12771         uvoformat="$sPRIo64"
12772         uvxformat="$sPRIx64"
12773 else
12774         if $test X"$ivsize" = X"$longsize"; then
12775                 ivdformat='"ld"'
12776                 uvuformat='"lu"'
12777                 uvoformat='"lo"'
12778                 uvxformat='"lx"'
12779         else
12780                 if $test X"$ivsize" = X"$intsize"; then
12781                         ivdformat='"d"'
12782                         uvuformat='"u"'
12783                         uvoformat='"o"'
12784                         uvxformat='"x"'
12785                 else
12786                         : far out
12787                         if $test X"$ivsize" = X"$shortsize"; then
12788                                 ivdformat='"hd"'
12789                                 uvuformat='"hu"'
12790                                 uvoformat='"ho"'
12791                                 uvxformat='"hx"'
12792                         fi
12793                 fi
12794         fi
12795 fi
12796
12797 case "$ivdformat" in
12798 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12799     exit 1
12800     ;;
12801 esac
12802
12803
12804 echo " "
12805 $echo "Checking the format string to be used for gids..." >&4
12806
12807 case "$gidsign" in
12808 -1)     if $test X"$gidsize" = X"$ivsize"; then
12809                 gidformat="$ivdformat"
12810         else
12811                 if $test X"$gidsize" = X"$longsize"; then
12812                         gidformat='"ld"'
12813                 else
12814                         if $test X"$gidsize" = X"$intsize"; then
12815                                 gidformat='"d"'
12816                         else
12817                                 if $test X"$gidsize" = X"$shortsize"; then
12818                                         gidformat='"hd"'
12819                                 fi
12820                         fi
12821                 fi
12822         fi
12823         ;;
12824 *)      if $test X"$gidsize" = X"$uvsize"; then
12825                 gidformat="$uvuformat"
12826         else
12827                 if $test X"$gidsize" = X"$longsize"; then
12828                         gidformat='"lu"'
12829                 else
12830                         if $test X"$gidsize" = X"$intsize"; then
12831                                 gidformat='"u"'
12832                         else
12833                                 if $test X"$gidsize" = X"$shortsize"; then
12834                                         gidformat='"hu"'
12835                                 fi
12836                         fi
12837                 fi
12838         fi
12839         ;;
12840 esac
12841
12842 : see if getgroups exists
12843 set getgroups d_getgrps
12844 eval $inlibc
12845
12846 : see if setgroups exists
12847 set setgroups d_setgrps
12848 eval $inlibc
12849
12850
12851 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12852 echo " "
12853 case "$d_getgrps$d_setgrps" in
12854 *define*)
12855         case "$groupstype" in
12856         '') dflt="$gidtype" ;;
12857         *)  dflt="$groupstype" ;;
12858         esac
12859         $cat <<EOM
12860 What type of pointer is the second argument to getgroups() and setgroups()?
12861 Usually this is the same as group ids, $gidtype, but not always.
12862
12863 EOM
12864         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12865         . ./myread
12866         groupstype="$ans"
12867         ;;
12868 *)  groupstype="$gidtype";;
12869 esac
12870
12871 echo " "
12872 echo "Checking if your $make program sets \$(MAKE)..." >&4
12873 case "$make_set_make" in
12874 '')
12875         $sed 's/^X //' > testmake.mak << 'EOF'
12876 Xall:
12877 X       @echo 'maketemp="$(MAKE)"'
12878 EOF
12879         case "`$make -f testmake.mak 2>/dev/null`" in
12880         *maketemp=*) make_set_make='#' ;;
12881         *)      make_set_make="MAKE=$make" ;;
12882         esac
12883         $rm -f testmake.mak
12884         ;;
12885 esac
12886 case "$make_set_make" in
12887 '#') echo "Yup, it does.";;
12888 *) echo "Nope, it doesn't.";;
12889 esac
12890
12891 : see what type is used for mode_t
12892 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12893 set mode_t modetype int stdio.h sys/types.h
12894 eval $typedef_ask
12895
12896 : define a fucntion to check prototypes
12897 $cat > protochk <<EOSH
12898 $startsh
12899 cc="$cc"
12900 optimize="$optimize"
12901 ccflags="$ccflags"
12902 prototype="$prototype"
12903 define="$define"
12904 rm=$rm
12905 EOSH
12906
12907 $cat >> protochk <<'EOSH'
12908
12909 $rm -f try.c
12910 foo="$1"
12911 shift
12912 while test $# -ge 2; do
12913         case "$1" in
12914                 $define) echo "#include <$2>" >> try.c ;;
12915                 literal) echo "$2" >> try.c ;;
12916         esac
12917     shift 2
12918 done
12919 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12920 cat >> try.c <<'EOCP'
12921 #ifdef CAN_PROTOTYPE
12922 #define _(args) args
12923 #else
12924 #define _(args) ()
12925 #endif
12926 EOCP
12927 echo "$foo" >> try.c
12928 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12929 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12930 status=$?
12931 $rm -f try.[co]
12932 exit $status
12933 EOSH
12934 chmod +x protochk
12935 $eunicefix protochk
12936
12937 : see what type is used for size_t
12938 rp="What is the type used for the length parameter for string functions?"
12939 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12940 eval $typedef_ask
12941
12942 : check for type of arguments to gethostbyaddr. 
12943 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12944         case "$d_gethbyaddr" in
12945         $define)
12946                 $cat <<EOM
12947
12948 Checking to see what type of arguments are accepted by gethostbyaddr().
12949 EOM
12950                 hdrs="$define sys/types.h
12951                         $d_socket sys/socket.h 
12952                         $i_niin netinet/in.h 
12953                         $i_netdb netdb.h
12954                         $i_unistd unistd.h"
12955                 : The first arg can 'char *' or 'void *'
12956                 : The second arg is some of integral type
12957                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12958                         for yyy in size_t long int; do
12959                                 case "$netdb_host_type" in
12960                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12961                                         if ./protochk "$try" $hdrs; then
12962                                                 echo "Your system accepts $xxx for the first arg."
12963                                                 echo "...and $yyy for the second arg."
12964                                                 netdb_host_type="$xxx"
12965                                                 netdb_hlen_type="$yyy"
12966                                         fi
12967                                         ;;
12968                                 esac
12969                         done
12970                 done
12971                 : In case none of those worked, prompt the user.
12972                 case "$netdb_host_type" in
12973                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12974                         dflt='char *'
12975                         . ./myread
12976                         netdb_host_type=$ans
12977                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12978                         dflt="$sizetype"
12979                         . ./myread
12980                         netdb_hlen_type=$ans
12981                         ;;
12982                 esac
12983                 ;;
12984         *)      : no gethostbyaddr, so pick harmless defaults
12985                 netdb_host_type='char *'
12986                 netdb_hlen_type="$sizetype"
12987                 ;;
12988         esac
12989         # Remove the "const" if needed. -- but then we'll have a 
12990         # prototype clash!
12991         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12992 fi
12993
12994 : check for type of argument to gethostbyname. 
12995 if test "X$netdb_name_type" = X ; then
12996         case "$d_gethbyname" in
12997         $define)
12998                 $cat <<EOM
12999
13000 Checking to see what type of argument is accepted by gethostbyname().
13001 EOM
13002                 hdrs="$define sys/types.h
13003                         $d_socket sys/socket.h 
13004                         $i_niin netinet/in.h 
13005                         $i_netdb netdb.h
13006                         $i_unistd unistd.h"
13007                 for xxx in "const char *" "char *"; do
13008                         case "$netdb_name_type" in
13009                         '')     try="extern struct hostent *gethostbyname($xxx);"
13010                                 if ./protochk "$try" $hdrs; then
13011                                         echo "Your system accepts $xxx."
13012                                         netdb_name_type="$xxx"
13013                                 fi
13014                                 ;;
13015                         esac
13016                 done
13017                 : In case none of those worked, prompt the user.
13018                 case "$netdb_name_type" in
13019                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13020                         dflt='char *'
13021                         . ./myread
13022                         netdb_name_type=$ans
13023                         ;;
13024                 esac
13025                 ;;
13026         *)      : no gethostbyname, so pick harmless default
13027                 netdb_name_type='char *'
13028                 ;;
13029         esac
13030 fi
13031
13032 : check for type of 1st argument to getnetbyaddr. 
13033 if test "X$netdb_net_type" = X ; then
13034         case "$d_getnbyaddr" in
13035         $define)
13036                 $cat <<EOM
13037
13038 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13039 EOM
13040                 hdrs="$define sys/types.h
13041                         $d_socket sys/socket.h 
13042                         $i_niin netinet/in.h 
13043                         $i_netdb netdb.h
13044                         $i_unistd unistd.h"
13045                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13046                         case "$netdb_net_type" in
13047                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13048                                 if ./protochk "$try" $hdrs; then
13049                                         echo "Your system accepts $xxx."
13050                                         netdb_net_type="$xxx"
13051                                 fi
13052                                 ;;
13053                         esac
13054                 done
13055                 : In case none of those worked, prompt the user.
13056                 case "$netdb_net_type" in
13057                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13058                         dflt='long'
13059                         . ./myread
13060                         netdb_net_type=$ans
13061                         ;;
13062                 esac
13063                 ;;
13064         *)      : no getnetbyaddr, so pick harmless default
13065                 netdb_net_type='long'
13066                 ;;
13067         esac
13068 fi
13069 : locate the preferred pager for this system
13070 case "$pager" in
13071 '')
13072         dflt=''
13073         case "$pg" in
13074         /*) dflt=$pg;;
13075         esac
13076         case "$more" in
13077         /*) dflt=$more;;
13078         esac
13079         case "$less" in
13080         /*) dflt=$less;;
13081         esac
13082         case "$dflt" in
13083         '') dflt=/usr/ucb/more;;
13084         esac
13085         ;;
13086 *) dflt="$pager";;
13087 esac
13088 echo " "
13089 fn=f/
13090 rp='What pager is used on your system?'
13091 . ./getfile
13092 pager="$ans"
13093
13094 : see what type pids are declared as in the kernel
13095 rp="What is the type of process ids on this system?"
13096 set pid_t pidtype int stdio.h sys/types.h
13097 eval $typedef_ask
13098
13099 : Find earliest binary compatible site_perl subdirectory perl can use.
13100 case "$bincompat5005" in
13101 "$define") xs_apiversion='5.005' ;;
13102 *) xs_apiversion=$version ;;   # The current site_perl version.
13103 esac
13104 : Find earliest pure perl site_perl subdirectory perl can use.
13105 : The versioned directories started at 5.005.
13106 pm_apiversion='5.005'
13107
13108 : check for length of pointer
13109 echo " "
13110 case "$ptrsize" in
13111 '')
13112         echo "Checking to see how big your pointers are..." >&4
13113         if test "$voidflags" -gt 7; then
13114                 echo '#define VOID_PTR char *' > try.c
13115         else
13116                 echo '#define VOID_PTR void *' > try.c
13117         fi
13118         $cat >>try.c <<'EOCP'
13119 #include <stdio.h>
13120 int main()
13121 {
13122     printf("%d\n", (int)sizeof(VOID_PTR));
13123     exit(0);
13124 }
13125 EOCP
13126         set try
13127         if eval $compile_ok; then
13128                 ptrsize=`./try`
13129                 echo "Your pointers are $ptrsize bytes long."
13130         else
13131                 dflt='4'
13132                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13133                 rp="What is the size of a pointer (in bytes)?"
13134                 . ./myread
13135                 ptrsize="$ans"
13136         fi
13137         ;;
13138 esac
13139 $rm -f try.c try
13140
13141 : see if ar generates random libraries by itself
13142 echo " "
13143 echo "Checking how to generate random libraries on your machine..." >&4
13144 echo 'int bar1() { return bar2(); }' > bar1.c
13145 echo 'int bar2() { return 2; }' > bar2.c
13146 $cat > foo.c <<'EOP'
13147 int main() { printf("%d\n", bar1()); exit(0); }
13148 EOP
13149 $cc $ccflags -c bar1.c >/dev/null 2>&1
13150 $cc $ccflags -c bar2.c >/dev/null 2>&1
13151 $cc $ccflags -c foo.c >/dev/null 2>&1
13152 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13153 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13154         ./foobar >/dev/null 2>&1; then
13155         echo "$ar appears to generate random libraries itself."
13156         orderlib=false
13157         ranlib=":"
13158 elif $ar ts bar$_a >/dev/null 2>&1 &&
13159         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13160         ./foobar >/dev/null 2>&1; then
13161                 echo "a table of contents needs to be added with '$ar ts'."
13162                 orderlib=false
13163                 ranlib="$ar ts"
13164 else
13165         case "$ranlib" in
13166         :) ranlib='';;
13167         '')
13168                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13169                 $test -f $ranlib || ranlib=''
13170                 ;;
13171         esac
13172         if $test -n "$ranlib"; then
13173                 echo "your system has '$ranlib'; we'll use that."
13174                 orderlib=false
13175         else
13176                 echo "your system doesn't seem to support random libraries"
13177                 echo "so we'll use lorder and tsort to order the libraries."
13178                 orderlib=true
13179                 ranlib=":"
13180         fi
13181 fi
13182 $rm -f foo* bar* 
13183
13184 : check for type of arguments to select. 
13185 case "$selecttype" in
13186 '') case "$d_select" in
13187         $define)
13188                 echo " "
13189                 $cat <<EOM
13190 Checking to see what type of arguments are accepted by select().
13191 EOM
13192                 hdrs="$define sys/types.h
13193                         $i_systime sys/time.h 
13194                         $i_sysselct sys/select.h
13195                         $d_socket sys/socket.h"
13196                 : The first arg can be int, unsigned, or size_t
13197                 : The last arg may or may not be 'const'
13198                 val=''
13199                 : void pointer has been seen but using that
13200                 : breaks the selectminbits test
13201                 for xxx in 'fd_set *' 'int *'; do
13202                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13203                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13204                                         case "$val" in
13205                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13206                                                 if ./protochk "$try" $hdrs; then
13207                                                         echo "Your system accepts $xxx."
13208                                                         val="$xxx"
13209                                                 fi
13210                                                 ;;
13211                                         esac
13212                                 done
13213                         done
13214                 done
13215                 case "$val" in
13216                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13217                         case "$d_fd_set" in
13218                                 $define) dflt="fd_set *" ;;
13219                                 *)              dflt="int *" ;;
13220                         esac
13221                         . ./myread
13222                         val=$ans
13223                         ;;
13224                 esac
13225                 selecttype="$val"
13226                 ;;
13227         *)      : no select, so pick a harmless default
13228                 selecttype='int *'
13229                 ;;
13230         esac
13231         ;;
13232 esac
13233
13234 : check for the select 'width'
13235 case "$selectminbits" in
13236 '') case "$d_select" in
13237         $define)
13238                 $cat <<EOM
13239
13240 Checking to see on how many bits at a time your select() operates...
13241 EOM
13242                 $cat >try.c <<EOCP
13243 #include <sys/types.h>
13244 #$i_time I_TIME
13245 #$i_systime I_SYS_TIME
13246 #$i_systimek I_SYS_TIME_KERNEL
13247 #ifdef I_TIME
13248 #   include <time.h>
13249 #endif
13250 #ifdef I_SYS_TIME
13251 #   ifdef I_SYS_TIME_KERNEL
13252 #       define KERNEL
13253 #   endif
13254 #   include <sys/time.h>
13255 #   ifdef I_SYS_TIME_KERNEL
13256 #       undef KERNEL
13257 #   endif
13258 #endif
13259 #$i_sysselct I_SYS_SELECT
13260 #ifdef I_SYS_SELECT
13261 #include <sys/select.h>
13262 #endif
13263 #$d_socket HAS_SOCKET
13264 #ifdef HAS_SOCKET
13265 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13266 #endif
13267 #include <stdio.h>
13268 $selecttype b;
13269 #define S sizeof(*(b))
13270 #define MINBITS 64
13271 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13272 #define NBITS  (NBYTES * 8)
13273 int main() {
13274     char s[NBYTES];
13275     struct timeval t;
13276     int i;
13277     FILE* fp;
13278     int fd;
13279
13280     fclose(stdin);
13281     fp = fopen("try.c", "r");
13282     if (fp == 0)
13283       exit(1);
13284     fd = fileno(fp);
13285     if (fd < 0)
13286       exit(2);
13287     b = ($selecttype)s;
13288     for (i = 0; i < NBITS; i++)
13289         FD_SET(i, b);
13290     t.tv_sec  = 0;
13291     t.tv_usec = 0;
13292     select(fd + 1, b, 0, 0, &t);
13293     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13294     printf("%d\n", i + 1);
13295     return 0;
13296 }
13297 EOCP
13298                 set try
13299                 if eval $compile_ok; then
13300                         selectminbits=`./try`
13301                         case "$selectminbits" in
13302                         '')     cat >&4 <<EOM
13303 Cannot figure out on how many bits at a time your select() operates.
13304 I'll play safe and guess it is 32 bits.
13305 EOM
13306                                 selectminbits=32
13307                                 bits="32 bits"
13308                                 ;;
13309                         1)      bits="1 bit" ;;
13310                         *)      bits="$selectminbits bits" ;;
13311                         esac
13312                         echo "Your select() operates on $bits at a time." >&4
13313                 else
13314                         rp='What is the minimum number of bits your select() operates on?'
13315                         case "$byteorder" in
13316                         1234|12345678)  dflt=32 ;;
13317                         *)              dflt=1  ;;
13318                         esac
13319                         . ./myread
13320                         val=$ans
13321                         selectminbits="$val"
13322                 fi
13323                 $rm -f try.* try
13324                 ;;
13325         *)      : no select, so pick a harmless default
13326                 selectminbits='32'
13327                 ;;
13328         esac
13329         ;;
13330 esac
13331
13332 : Trace out the files included by signal.h, then look for SIGxxx names.
13333 : Remove SIGARRAYSIZE used by HPUX.
13334 : Remove SIGSTKSIZE used by Linux.
13335 : Remove SIGSTKSZ used by Posix.
13336 : Remove SIGTYP void lines used by OS2.
13337 : Some cpps, like os390, dont give the file name anywhere
13338 if [ "X$fieldn" = X ]; then
13339         : Just make some guesses.  We check them later.
13340         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13341 else
13342         xxx=`echo '#include <signal.h>' |
13343         $cppstdin $cppminus $cppflags 2>/dev/null |
13344         $grep '^[       ]*#.*include' | 
13345         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13346 fi
13347 : Check this list of files to be sure we have parsed the cpp output ok.
13348 : This will also avoid potentially non-existent files, such 
13349 : as ../foo/bar.h
13350 xxxfiles=''
13351 for xx in $xxx /dev/null ; do
13352         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13353 done
13354 : If we have found no files, at least try signal.h
13355 case "$xxxfiles" in
13356 '')     xxxfiles=`./findhdr signal.h` ;;
13357 esac
13358 xxx=`awk '
13359 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13360         print substr($2, 4, 20)
13361 }
13362 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13363         print substr($3, 4, 20)
13364 }' $xxxfiles`
13365 : Append some common names just in case the awk scan failed.
13366 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13367 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13368 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13369 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13370 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13371
13372 : generate a few handy files for later
13373 $cat > signal.c <<'EOCP'
13374 #include <sys/types.h>
13375 #include <signal.h>
13376 #include <stdio.h>
13377 int main() {
13378
13379 /* Strange style to avoid deeply-nested #if/#else/#endif */
13380 #ifndef NSIG
13381 #  ifdef _NSIG
13382 #    define NSIG (_NSIG)
13383 #  endif
13384 #endif
13385
13386 #ifndef NSIG
13387 #  ifdef SIGMAX
13388 #    define NSIG (SIGMAX+1)
13389 #  endif
13390 #endif
13391
13392 #ifndef NSIG
13393 #  ifdef SIG_MAX
13394 #    define NSIG (SIG_MAX+1)
13395 #  endif
13396 #endif
13397
13398 #ifndef NSIG
13399 #  ifdef MAXSIG
13400 #    define NSIG (MAXSIG+1)
13401 #  endif
13402 #endif
13403
13404 #ifndef NSIG
13405 #  ifdef MAX_SIG
13406 #    define NSIG (MAX_SIG+1)
13407 #  endif
13408 #endif
13409
13410 #ifndef NSIG
13411 #  ifdef SIGARRAYSIZE
13412 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13413 #  endif
13414 #endif
13415
13416 #ifndef NSIG
13417 #  ifdef _sys_nsig
13418 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13419 #  endif
13420 #endif
13421
13422 /* Default to some arbitrary number that's big enough to get most
13423    of the common signals.
13424 */
13425 #ifndef NSIG
13426 #    define NSIG 50
13427 #endif
13428
13429 printf("NSIG %d\n", NSIG);
13430
13431 #ifndef JUST_NSIG
13432
13433 EOCP
13434
13435 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13436 {
13437         printf "#ifdef SIG"; printf $1; printf "\n"
13438         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13439         printf $1; printf ");\n"
13440         printf "#endif\n"
13441 }
13442 END {
13443         printf "#endif /* JUST_NSIG */\n";
13444         printf "exit(0);\n}\n";
13445 }
13446 ' >>signal.c
13447 $cat >signal.awk <<'EOP'
13448 BEGIN { ndups = 0 }
13449 $1 ~ /^NSIG$/ { nsig = $2 }
13450 ($1 !~ /^NSIG$/) && (NF == 2) {
13451     if ($2 > maxsig) { maxsig = $2 }
13452     if (sig_name[$2]) {
13453         dup_name[ndups] = $1
13454         dup_num[ndups] = $2
13455         ndups++ 
13456     }
13457     else {
13458         sig_name[$2] = $1
13459         sig_num[$2] = $2
13460     }
13461 }
13462 END { 
13463     if (nsig == 0) {
13464         nsig = maxsig + 1
13465     }
13466     printf("NSIG %d\n", nsig);
13467     for (n = 1; n < nsig; n++) {
13468         if (sig_name[n]) {
13469             printf("%s %d\n", sig_name[n], sig_num[n])
13470         }
13471         else {
13472             printf("NUM%d %d\n", n, n) 
13473         }
13474     }
13475     for (n = 0; n < ndups; n++) {
13476         printf("%s %d\n", dup_name[n], dup_num[n])
13477     }
13478 }
13479 EOP
13480 $cat >signal_cmd <<EOS
13481 $startsh
13482 if $test -s signal.lst; then
13483     echo "Using your existing signal.lst file"
13484         exit 0
13485 fi
13486 xxx="$xxx"
13487 EOS
13488 $cat >>signal_cmd <<'EOS'
13489
13490 set signal
13491 if eval $compile_ok; then
13492         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13493 else
13494         echo "(I can't seem be able to compile the whole test program)" >&4
13495         echo "(I'll try it in little pieces.)" >&4
13496         set signal -DJUST_NSIG
13497         if eval $compile_ok; then
13498                 ./signal$_exe > signal.nsg
13499                 $cat signal.nsg
13500         else
13501                 echo "I can't seem to figure out how many signals you have." >&4
13502                 echo "Guessing 50." >&4
13503                 echo 'NSIG 50' > signal.nsg
13504         fi
13505         : Now look at all the signal names, one at a time.
13506         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13507                 $cat > signal.c <<EOCP
13508 #include <sys/types.h>
13509 #include <signal.h>
13510 #include <stdio.h>
13511 int main() {
13512 printf("$xx %d\n", SIG${xx});
13513 return 0;
13514 }
13515 EOCP
13516                 set signal
13517                 if eval $compile; then
13518                         echo "SIG${xx} found."
13519                         ./signal$_exe  >> signal.ls1
13520                 else
13521                         echo "SIG${xx} NOT found."
13522                 fi
13523         done
13524         if $test -s signal.ls1; then
13525                 $cat signal.nsg signal.ls1 |
13526                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13527         fi
13528
13529 fi
13530 if $test -s signal.lst; then
13531         :
13532 else
13533         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13534         echo 'kill -l' >signal
13535         set X `csh -f <signal`
13536         $rm -f signal
13537         shift
13538         case $# in
13539         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13540         esac
13541         echo $@ | $tr ' ' $trnl | \
13542             $awk '{ printf "%s %d\n", $1, ++s; }
13543                   END { printf "NSIG %d\n", ++s }' >signal.lst
13544 fi
13545 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13546 EOS
13547 chmod a+x signal_cmd
13548 $eunicefix signal_cmd
13549
13550 : generate list of signal names
13551 echo " "
13552 case "$sig_name_init" in
13553 '') doinit=yes ;;
13554 *)  case "$sig_num_init" in
13555     ''|*,*) doinit=yes ;;
13556     esac ;;
13557 esac
13558 case "$doinit" in
13559 yes)
13560         echo "Generating a list of signal names and numbers..." >&4
13561         . ./signal_cmd
13562         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13563         sig_name=`$awk 'BEGIN { printf "ZERO " }
13564                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13565         sig_num=`$awk  'BEGIN { printf "0 " }
13566                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13567         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13568                              !/^NSIG/   { printf "\"%s\", ", $1 }
13569                              END        { printf "0\n" }' signal.lst`
13570         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13571                              !/^NSIG/   { printf "%d, ", $2}
13572                              END        { printf "0\n"}' signal.lst`
13573         ;;
13574 esac
13575 echo "The following $sig_count signals are available:"
13576 echo " "
13577 echo $sig_name | $awk \
13578 'BEGIN { linelen = 0 }
13579 {
13580         for (i = 1; i <= NF; i++) {
13581                 name = "SIG" $i " "
13582                 linelen = linelen + length(name)
13583                 if (linelen > 70) {
13584                         printf "\n"
13585                         linelen = length(name)
13586                 }
13587                 printf "%s", name
13588         }
13589         printf "\n"
13590 }'
13591 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13592
13593 : check for socklen_t
13594 echo " "
13595 echo "Checking to see if you have socklen_t..." >&4
13596 $cat >try.c <<EOCP
13597 #include <sys/types.h>
13598 #$d_socket HAS_SOCKET
13599 #ifdef HAS_SOCKET
13600 #include <sys/socket.h>
13601 #endif
13602 int main() { socklen_t x = 16; }
13603 EOCP
13604 set try
13605 if eval $compile; then
13606         val="$define"
13607         echo "You have socklen_t."
13608 else
13609         val="$undef"
13610         echo "You do not have socklen_t."
13611         case "$sizetype" in
13612         size_t) echo "(You do have size_t, that might work.)" ;;
13613         esac
13614 fi
13615 $rm -f try try.*
13616 set d_socklen_t
13617 eval $setvar
13618
13619 : check for type of the size argument to socket calls
13620 case "$d_socket" in
13621 "$define")
13622         $cat <<EOM
13623
13624 Checking to see what type is the last argument of accept().
13625 EOM
13626         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13627         yyy=''
13628         case "$d_socklen_t" in
13629         "$define") yyy="$yyy socklen_t"
13630         esac
13631         yyy="$yyy $sizetype int long"
13632         for xxx in $yyy; do
13633                 case "$socksizetype" in
13634                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13635                         if ./protochk "$try" $hdrs; then
13636                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13637                                 socksizetype="$xxx"
13638                         fi
13639                         ;;
13640                 esac
13641         done
13642 : In case none of those worked, prompt the user.
13643         case "$socksizetype" in
13644         '')     rp='What is the type for socket address structure sizes?'
13645                 dflt='int'
13646                 . ./myread
13647                 socksizetype=$ans
13648                 ;;
13649         esac
13650         ;;
13651 *)      : no sockets, so pick relatively harmless defaults
13652         socksizetype='char *'
13653         ;;
13654 esac
13655
13656 : see what type is used for signed size_t
13657 set ssize_t ssizetype int stdio.h sys/types.h
13658 eval $typedef
13659 dflt="$ssizetype"
13660 $cat > ssize.c <<EOM
13661 #include <stdio.h>
13662 #include <sys/types.h>
13663 #define Size_t $sizetype
13664 #define SSize_t $dflt
13665 int main()
13666 {
13667         if (sizeof(Size_t) == sizeof(SSize_t))
13668                 printf("$dflt\n");
13669         else if (sizeof(Size_t) == sizeof(int))
13670                 printf("int\n");
13671         else 
13672                 printf("long\n");
13673         exit(0);
13674 }
13675 EOM
13676 echo " "
13677 set ssize
13678 if eval $compile_ok && ./ssize > /dev/null; then
13679         ssizetype=`./ssize`
13680         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13681 else
13682         $cat >&4 <<EOM
13683 Help! I can't compile and run the ssize_t test program: please enlighten me!
13684 (This is probably a misconfiguration in your system or libraries, and
13685 you really ought to fix it.  Still, I'll try anyway.)
13686
13687 I need a type that is the same size as $sizetype, but is guaranteed to
13688 be signed.  Common values are ssize_t, int and long.
13689
13690 EOM
13691         rp="What signed type is the same size as $sizetype?"
13692         . ./myread
13693         ssizetype="$ans"
13694 fi
13695 $rm -f ssize ssize.*
13696
13697 : see what type of char stdio uses.
13698 echo " "
13699 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13700         echo "Your stdio uses unsigned chars." >&4
13701         stdchar="unsigned char"
13702 else
13703         echo "Your stdio uses signed chars." >&4
13704         stdchar="char"
13705 fi
13706
13707 : see if time exists
13708 echo " "
13709 if test "X$d_time" = X -o X"$timetype" = X; then
13710     if set time val -f d_time; eval $csym; $val; then
13711                 echo 'time() found.' >&4
13712                 val="$define"
13713                 rp="What is the type returned by time() on this system?"
13714                 set time_t timetype long stdio.h sys/types.h
13715                 eval $typedef_ask
13716     else
13717                 echo 'time() not found, hope that will do.' >&4
13718                 val="$undef"
13719                 timetype='int';
13720     fi
13721     set d_time
13722     eval $setvar
13723 fi
13724
13725 : see what type uids are declared as in the kernel
13726 echo " "
13727 echo "Looking for the type for user ids returned by getuid()."
13728 set uid_t uidtype xxx stdio.h sys/types.h
13729 eval $typedef
13730 case "$uidtype" in
13731 xxx)
13732         xxx=`./findhdr sys/user.h`
13733         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13734         case $1 in
13735         unsigned) dflt="$1 $2" ;;
13736         *) dflt="$1" ;;
13737         esac
13738         ;;
13739 *) dflt="$uidtype";;
13740 esac
13741 case "$uidtype" in
13742 uid_t)  echo "uid_t found." ;;
13743 *)      rp="What is the type for user ids returned by getuid()?"
13744         . ./myread
13745         uidtype="$ans"
13746         ;;
13747 esac
13748
13749 echo " "
13750 case "$uidtype" in
13751 *_t) zzz="$uidtype"     ;;
13752 *)   zzz="uid"          ;;
13753 esac
13754 echo "Checking the size of $zzz..." >&4 
13755 cat > try.c <<EOCP
13756 #include <sys/types.h>
13757 #include <stdio.h>
13758 int main() {
13759     printf("%d\n", (int)sizeof($uidtype));
13760     exit(0);
13761 }
13762 EOCP
13763 set try
13764 if eval $compile_ok; then
13765         yyy=`./try`
13766         case "$yyy" in
13767         '')     uidsize=4
13768                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13769                 ;;
13770         *)      uidsize=$yyy
13771                 echo "Your $zzz is $uidsize bytes long."
13772                 ;;
13773         esac
13774 else
13775         uidsize=4
13776         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13777 fi
13778
13779 echo " "
13780 case "$uidtype" in
13781 *_t) zzz="$uidtype"     ;;
13782 *)   zzz="uid"          ;;
13783 esac
13784 echo "Checking the sign of $zzz..." >&4
13785 cat > try.c <<EOCP
13786 #include <sys/types.h>
13787 #include <stdio.h>
13788 int main() {
13789         $uidtype foo = -1;
13790         if (foo < 0)
13791                 printf("-1\n");
13792         else
13793                 printf("1\n");
13794 }
13795 EOCP
13796 set try
13797 if eval $compile; then
13798         yyy=`./try`
13799         case "$yyy" in
13800         '')     uidsign=1
13801                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13802                 ;;
13803         *)      uidsign=$yyy
13804                 case "$uidsign" in
13805                  1) echo "Your $zzz is unsigned." ;;
13806                 -1) echo "Your $zzz is signed."   ;;
13807                 esac
13808                 ;;
13809         esac
13810 else
13811         uidsign=1
13812         echo "(I can't compile the test program--guessing unsigned.)" >&4
13813 fi
13814
13815
13816
13817 echo " "
13818 $echo "Checking the format string to be used for uids..." >&4
13819
13820 case "$uidsign" in
13821 -1)     if $test X"$uidsize" = X"$ivsize"; then
13822                 uidformat="$ivdformat"
13823         else
13824                 if $test X"$uidsize" = X"$longsize"; then
13825                         uidformat='"ld"'
13826                 else
13827                         if $test X"$uidsize" = X"$intsize"; then
13828                                 uidformat='"d"'
13829                         else
13830                                 if $test X"$uidsize" = X"$shortsize"; then
13831                                         uidformat='"hd"'
13832                                 fi
13833                         fi
13834                 fi
13835         fi
13836         ;;
13837 *)      if $test X"$uidsize" = X"$uvsize"; then
13838                 uidformat="$uvuformat"
13839         else
13840                 if $test X"$uidsize" = X"$longsize"; then
13841                         uidformat='"lu"'
13842                 else
13843                         if $test X"$uidsize" = X"$intsize"; then
13844                                 uidformat='"u"'
13845                         else
13846                                 if $test X"$uidsize" = X"$shortsize"; then
13847                                         uidformat='"hu"'
13848                                 fi
13849                         fi
13850                 fi
13851         fi
13852         ;;
13853 esac
13854
13855 : see if dbm.h is available
13856 : see if dbmclose exists
13857 set dbmclose d_dbmclose
13858 eval $inlibc
13859
13860 case "$d_dbmclose" in
13861 $define)
13862         set dbm.h i_dbm
13863         eval $inhdr
13864         case "$i_dbm" in
13865         $define)
13866                 val="$undef"
13867                 set i_rpcsvcdbm
13868                 eval $setvar
13869                 ;;
13870         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13871                 eval $inhdr
13872                 ;;
13873         esac
13874         ;;
13875 *)      echo "We won't be including <dbm.h>"
13876         val="$undef"
13877         set i_dbm
13878         eval $setvar
13879         val="$undef"
13880         set i_rpcsvcdbm
13881         eval $setvar
13882         ;;
13883 esac
13884
13885 : see if this is a sys/file.h system
13886 val=''
13887 set sys/file.h val
13888 eval $inhdr
13889
13890 : do we need to include sys/file.h ?
13891 case "$val" in
13892 "$define")
13893         echo " "
13894         if $h_sysfile; then
13895                 val="$define"
13896                 echo "We'll be including <sys/file.h>." >&4
13897         else
13898                 val="$undef"
13899                 echo "We won't be including <sys/file.h>." >&4
13900         fi
13901         ;;
13902 *)
13903         h_sysfile=false
13904         ;;
13905 esac
13906 set i_sysfile
13907 eval $setvar
13908
13909 : see if fcntl.h is there
13910 val=''
13911 set fcntl.h val
13912 eval $inhdr
13913
13914 : see if we can include fcntl.h
13915 case "$val" in
13916 "$define")
13917         echo " "
13918         if $h_fcntl; then
13919                 val="$define"
13920                 echo "We'll be including <fcntl.h>." >&4
13921         else
13922                 val="$undef"
13923                 if $h_sysfile; then
13924         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13925                 else
13926                         echo "We won't be including <fcntl.h>." >&4
13927                 fi
13928         fi
13929         ;;
13930 *)
13931         h_fcntl=false
13932         val="$undef"
13933         ;;
13934 esac
13935 set i_fcntl
13936 eval $setvar
13937
13938 : see if this is a iconv.h system
13939 set iconv.h i_iconv
13940 eval $inhdr
13941
13942 : see if this is a ieeefp.h system
13943 set ieeefp.h i_ieeefp
13944 eval $inhdr
13945
13946 : see if locale.h is available
13947 set locale.h i_locale
13948 eval $inhdr
13949
13950 : see if mach cthreads are available
13951 if test "X$usethreads" = "X$define"; then
13952         set mach/cthreads.h i_machcthr
13953         eval $inhdr
13954 else
13955         i_machcthr="$undef"
13956 fi
13957
13958
13959
13960 : see if this is a math.h system
13961 set math.h i_math
13962 eval $inhdr
13963
13964 : see if this is a mntent.h system
13965 set mntent.h i_mntent
13966 eval $inhdr
13967
13968 : see if ndbm.h is available
13969 set ndbm.h t_ndbm
13970 eval $inhdr
13971 case "$t_ndbm" in
13972 $define)
13973         : see if dbm_open exists
13974         set dbm_open d_dbm_open
13975         eval $inlibc
13976         case "$d_dbm_open" in
13977         $undef)
13978                 t_ndbm="$undef"
13979                 echo "We won't be including <ndbm.h>"
13980                 ;;
13981         esac
13982         ;;
13983 esac
13984 val="$t_ndbm"
13985 set i_ndbm
13986 eval $setvar
13987
13988 : see if net/errno.h is available
13989 val=''
13990 set net/errno.h val
13991 eval $inhdr
13992
13993 : Unfortunately, it causes problems on some systems.  Arrgh.
13994 case "$val" in
13995 $define)
13996         cat > try.c <<'EOM'
13997 #include <stdio.h>
13998 #include <errno.h>
13999 #include <net/errno.h>
14000 int func()
14001 {
14002         return ENOTSOCK;
14003 }
14004 EOM
14005         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14006                 echo "We'll be including <net/errno.h>." >&4
14007         else
14008                 echo "We won't be including <net/errno.h>." >&4
14009                 val="$undef"
14010         fi
14011         $rm -f try.* try
14012         ;;
14013 esac
14014 set i_neterrno
14015 eval $setvar
14016
14017 : see if netinet/tcp.h is available
14018 set netinet/tcp.h i_netinettcp
14019 eval $inhdr
14020
14021 : see if this is a poll.h system
14022 set poll.h i_poll
14023 eval $inhdr
14024
14025 echo " "
14026 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14027 $cat <<'EOSH' > Cppsym.know
14028 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14029 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14030 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14031 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14032 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14033 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14034 bull c cadmus clipper CMU COFF COMPILER_VERSION
14035 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14036 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14037 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14038 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14039 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14040 H3050R H3050RX hbullx20 hcx host_mips
14041 hp200 hp300 hp700 HP700 hp800 hp9000
14042 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14043 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14044 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14045 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14046 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14047 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14048 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14049 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14050 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14051 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14052 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14053 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14054 MATH_HAS_NO_SIDE_EFFECTS
14055 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14056 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14057 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14058 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14059 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14060 NetBSD news1500 news1700 news1800 news1900 news3700
14061 news700 news800 news900 NeXT NLS ns16000 ns32000
14062 ns32016 ns32332 ns32k nsc32000
14063 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14064 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14065 pc532 pdp11 PGC PIC plexus PORTAR posix
14066 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14067 POSIX_C_SOURCE POSIX_SOURCE POWER
14068 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14069 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14070 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14071 sony sony_news sonyrisc sparc sparclite spectrum
14072 stardent stdc STDC_EXT stratos sun sun3 sun386
14073 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14074 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14075 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14076 sysV68 sysV88 Tek4132 Tek4300 titan
14077 tower tower32 tower32_200 tower32_600 tower32_700
14078 tower32_800 tower32_850 tss
14079 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14080 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14081 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14082 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14083 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14084 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14085 z8000
14086 EOSH
14087 # Maybe put other stuff here too.
14088 cat <<EOSH >>Cppsym.know
14089 $osname
14090 EOSH
14091 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14092 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14093 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14094 $rm -f Cppsym.a Cppsym.b
14095 cat <<EOSH > Cppsym
14096 $startsh
14097 if $test \$# -gt 0; then
14098     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14099     if $test -s Cppsym.got; then
14100         $rm -f Cppsym.got
14101         exit 0
14102     fi
14103     $rm -f Cppsym.got
14104     exit 1
14105 else
14106     $tr " " "$trnl" | ./Cppsym.try
14107     exit 0
14108 fi
14109 EOSH
14110 chmod +x Cppsym
14111 $eunicefix Cppsym
14112 cat <<EOSH > Cppsym.try
14113 $startsh
14114 cat <<'EOCP' > try.c
14115 #include <stdio.h>
14116 int main() {
14117 EOCP
14118 $awk \\
14119 EOSH
14120 cat <<'EOSH' >> Cppsym.try
14121 'length($1) > 0 {
14122     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
14123     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
14124     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
14125     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
14126 }'       >> try.c
14127 echo '}' >> try.c
14128 EOSH
14129 cat <<EOSH >> Cppsym.try
14130 ccflags="$ccflags"
14131 case "$osname-$gccversion" in
14132 irix-) ccflags="\$ccflags -woff 1178" ;;
14133 esac
14134 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14135 EOSH
14136 chmod +x Cppsym.try
14137 $eunicefix Cppsym.try
14138 ./Cppsym < Cppsym.know > Cppsym.true
14139 : now check the C compiler for additional symbols
14140 postprocess_cc_v=''
14141 case "$osname" in
14142 aix) postprocess_cc_v="|$tr , ' '" ;;
14143 esac
14144 $cat >ccsym <<EOS
14145 $startsh
14146 $cat >tmp.c <<EOF
14147 extern int foo;
14148 EOF
14149 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14150 do
14151         case "\$i" in
14152         -D*) echo "\$i" | $sed 's/^-D//';;
14153         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14154         esac
14155 done
14156 $rm -f try.c
14157 EOS
14158 postprocess_cc_v=''
14159 chmod +x ccsym
14160 $eunicefix ccsym
14161 ./ccsym > ccsym1.raw
14162 if $test -s ccsym1.raw; then
14163        $sort ccsym1.raw | $uniq >ccsym.raw
14164 else
14165        mv ccsym1.raw ccsym.raw
14166 fi
14167
14168 $awk '/\=/ { print $0; next }
14169         { print $0"=1" }' ccsym.raw >ccsym.list
14170 $awk '/\=/ { print $0; next }
14171         { print $0"=1" }' Cppsym.true >ccsym.true
14172 $comm -13 ccsym.true ccsym.list >ccsym.own
14173 $comm -12 ccsym.true ccsym.list >ccsym.com
14174 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14175 also=''
14176 if $test -z ccsym.raw; then
14177         echo "Your C compiler doesn't seem to define any symbols!" >&4
14178         echo " "
14179         echo "However, your C preprocessor defines the following symbols:"
14180         $cat Cppsym.true
14181         ccsymbols=''
14182         cppsymbols=`$cat Cppsym.true`
14183         cppsymbols=`echo $cppsymbols`
14184         cppccsymbols="$cppsymbols"
14185 else
14186         if $test -s ccsym.com; then
14187                 echo "Your C compiler and pre-processor define these symbols:"
14188                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14189                 also='also '
14190                 symbols='ones'
14191                 cppccsymbols=`$cat ccsym.com`
14192                 cppccsymbols=`echo $cppccsymbols`
14193                 $test "$silent" || sleep 1
14194         fi
14195         if $test -s ccsym.cpp; then
14196                 $test "$also" && echo " "
14197                 echo "Your C pre-processor ${also}defines the following symbols:"
14198                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14199                 also='further '
14200                 cppsymbols=`$cat ccsym.cpp`
14201                 cppsymbols=`echo $cppsymbols`
14202                 $test "$silent" || sleep 1
14203         fi
14204         if $test -s ccsym.own; then
14205                 $test "$also" && echo " "
14206                 echo "Your C compiler ${also}defines the following cpp symbols:"
14207                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14208                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14209                 ccsymbols=`$cat ccsym.own`
14210                 ccsymbols=`echo $ccsymbols`
14211                 $test "$silent" || sleep 1
14212         fi
14213 fi
14214 $rm -f ccsym*
14215
14216 : see if this is a termio system
14217 val="$undef"
14218 val2="$undef"
14219 val3="$undef"
14220 if $test `./findhdr termios.h`; then
14221         set tcsetattr i_termios
14222         eval $inlibc
14223         val3="$i_termios"
14224 fi
14225 echo " "
14226 case "$val3" in
14227 "$define") echo "You have POSIX termios.h... good!" >&4;;
14228 *) if ./Cppsym pyr; then
14229                 case "`/bin/universe`" in
14230                 ucb) if $test `./findhdr sgtty.h`; then
14231                                 val2="$define"
14232                                 echo "<sgtty.h> found." >&4
14233                         else
14234                                 echo "System is pyramid with BSD universe."
14235                                 echo "<sgtty.h> not found--you could have problems." >&4
14236                         fi;;
14237                 *) if $test `./findhdr termio.h`; then
14238                                 val="$define"
14239                                 echo "<termio.h> found." >&4
14240                         else
14241                                 echo "System is pyramid with USG universe."
14242                                 echo "<termio.h> not found--you could have problems." >&4
14243                         fi;;
14244                 esac
14245         elif ./usg; then
14246                 if $test `./findhdr termio.h`; then
14247                         echo "<termio.h> found." >&4
14248                         val="$define"
14249                 elif $test `./findhdr sgtty.h`; then
14250                         echo "<sgtty.h> found." >&4
14251                         val2="$define"
14252                 else
14253 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14254                 fi
14255         else
14256                 if $test `./findhdr sgtty.h`; then
14257                         echo "<sgtty.h> found." >&4
14258                         val2="$define"
14259                 elif $test `./findhdr termio.h`; then
14260                         echo "<termio.h> found." >&4
14261                         val="$define"
14262                 else
14263 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14264                 fi
14265         fi;;
14266 esac
14267 set i_termio; eval $setvar
14268 val=$val2; set i_sgtty; eval $setvar
14269 val=$val3; set i_termios; eval $setvar
14270
14271 : see if this is a shadow.h system
14272 set shadow.h i_shadow
14273 eval $inhdr
14274
14275 : see if this is a socks.h system
14276 set socks.h i_socks
14277 eval $inhdr
14278
14279 : see if stdarg is available
14280 echo " "
14281 if $test `./findhdr stdarg.h`; then
14282         echo "<stdarg.h> found." >&4
14283         valstd="$define"
14284 else
14285         echo "<stdarg.h> NOT found." >&4
14286         valstd="$undef"
14287 fi
14288
14289 : see if varags is available
14290 echo " "
14291 if $test `./findhdr varargs.h`; then
14292         echo "<varargs.h> found." >&4
14293 else
14294         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14295 fi
14296
14297 : set up the varargs testing programs
14298 $cat > varargs.c <<EOP
14299 #ifdef I_STDARG
14300 #include <stdarg.h>
14301 #endif
14302 #ifdef I_VARARGS
14303 #include <varargs.h>
14304 #endif
14305
14306 #ifdef I_STDARG
14307 int f(char *p, ...)
14308 #else
14309 int f(va_alist)
14310 va_dcl
14311 #endif
14312 {
14313         va_list ap;
14314 #ifndef I_STDARG
14315         char *p;
14316 #endif
14317 #ifdef I_STDARG
14318         va_start(ap,p);
14319 #else
14320         va_start(ap);
14321         p = va_arg(ap, char *);
14322 #endif
14323         va_end(ap);
14324 }
14325 EOP
14326 $cat > varargs <<EOP
14327 $startsh
14328 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14329         echo "true"
14330 else
14331         echo "false"
14332 fi
14333 $rm -f varargs$_o
14334 EOP
14335 chmod +x varargs
14336
14337 : now check which varargs header should be included
14338 echo " "
14339 i_varhdr=''
14340 case "$valstd" in
14341 "$define")
14342         if `./varargs I_STDARG`; then
14343                 val='stdarg.h'
14344         elif `./varargs I_VARARGS`; then
14345                 val='varargs.h'
14346         fi
14347         ;;
14348 *)
14349         if `./varargs I_VARARGS`; then
14350                 val='varargs.h'
14351         fi
14352         ;;
14353 esac
14354 case "$val" in
14355 '')
14356 echo "I could not find the definition for va_dcl... You have problems..." >&4
14357         val="$undef"; set i_stdarg; eval $setvar
14358         val="$undef"; set i_varargs; eval $setvar
14359         ;;
14360 *) 
14361         set i_varhdr
14362         eval $setvar
14363         case "$i_varhdr" in
14364         stdarg.h)
14365                 val="$define"; set i_stdarg; eval $setvar
14366                 val="$undef"; set i_varargs; eval $setvar
14367                 ;;
14368         varargs.h)
14369                 val="$undef"; set i_stdarg; eval $setvar
14370                 val="$define"; set i_varargs; eval $setvar
14371                 ;;
14372         esac
14373         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14374 esac
14375 $rm -f varargs*
14376
14377 : see if stddef is available
14378 set stddef.h i_stddef
14379 eval $inhdr
14380
14381 : see if this is a sunmath.h system
14382 set sunmath.h i_sunmath
14383 eval $inhdr
14384
14385 : see if sys/access.h is available
14386 set sys/access.h i_sysaccess
14387 eval $inhdr
14388
14389 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14390 set sys/filio.h i_sysfilio
14391 eval $inhdr
14392 echo " "
14393 if $test `./findhdr sys/ioctl.h`; then
14394         val="$define"
14395         echo '<sys/ioctl.h> found.' >&4
14396 else
14397         val="$undef"
14398         if $test $i_sysfilio = "$define"; then
14399             echo '<sys/ioctl.h> NOT found.' >&4
14400         else
14401                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14402                 $test $i_termio = "$define" && xxx="termio.h"
14403                 $test $i_termios = "$define" && xxx="termios.h"
14404 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14405         fi
14406 fi
14407 set i_sysioctl
14408 eval $setvar
14409
14410
14411 : see if this is a syslog.h system
14412 set syslog.h i_syslog
14413 eval $inhdr
14414
14415
14416 : see if this is a sys/mode.h system
14417 set sys/mode.h i_sysmode
14418 eval $inhdr
14419
14420 : see if sys/resource.h has to be included
14421 set sys/resource.h i_sysresrc
14422 eval $inhdr
14423
14424 : see if sys/security.h is available
14425 set sys/security.h i_syssecrt
14426 eval $inhdr
14427
14428 : see if this is a sys/statvfs.h system
14429 set sys/statvfs.h i_sysstatvfs
14430 eval $inhdr
14431
14432 : see if this is a sys/uio.h system
14433 set sys/uio.h i_sysuio
14434 eval $inhdr
14435
14436 : see if this is a sys/un.h system
14437 set sys/un.h i_sysun
14438 eval $inhdr
14439
14440
14441 : see if this is a sys/utsname.h system
14442 set sys/utsname.h i_sysutsname
14443 eval $inhdr
14444
14445 : see if this is a syswait system
14446 set sys/wait.h i_syswait
14447 eval $inhdr
14448
14449 : see if this is a ustat.h system
14450 set ustat.h i_ustat
14451 eval $inhdr
14452
14453 : see if this is an utime system
14454 set utime.h i_utime
14455 eval $inhdr
14456
14457 : see if this is a values.h system
14458 set values.h i_values
14459 eval $inhdr
14460
14461 : see if this is a vfork system
14462 case "$d_vfork" in
14463 "$define")
14464         set vfork.h i_vfork
14465         eval $inhdr
14466         ;;
14467 *)
14468         i_vfork="$undef"
14469         ;;
14470 esac
14471
14472 : see if gdbm.h is available
14473 set gdbm.h t_gdbm
14474 eval $inhdr
14475 case "$t_gdbm" in
14476 $define)
14477         : see if gdbm_open exists
14478         set gdbm_open d_gdbm_open
14479         eval $inlibc
14480         case "$d_gdbm_open" in
14481         $undef)
14482                 t_gdbm="$undef"
14483                 echo "We won't be including <gdbm.h>"
14484                 ;;
14485         esac
14486         ;;
14487 esac
14488 val="$t_gdbm"
14489 set i_gdbm
14490 eval $setvar
14491
14492 echo " "
14493 echo "Looking for extensions..." >&4
14494 : If we are using the old config.sh, known_extensions may contain
14495 : old or inaccurate or duplicate values.
14496 known_extensions=''
14497 nonxs_extensions=''
14498 : We do not use find because it might not be available.
14499 : We do not just use MANIFEST because the user may have dropped
14500 : some additional extensions into the source tree and expect them
14501 : to be built.
14502
14503 : Function to recursively find available extensions, ignoring DynaLoader
14504 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14505 find_extensions='
14506     for xxx in *; do
14507        case "$xxx" in
14508            DynaLoader|dynaload) ;;
14509            *)
14510            if $test -f $xxx/$xxx.xs; then
14511                known_extensions="$known_extensions $1$xxx";
14512            elif $test -f $xxx/Makefile.PL; then
14513                nonxs_extensions="$nonxs_extensions $1$xxx";
14514            else
14515                if $test -d $xxx -a $# -lt 10; then
14516                    set $1$xxx/ $*;
14517                    cd $xxx;
14518                    eval $find_extensions;
14519                    cd ..;
14520                    shift;
14521                fi;
14522            fi
14523            ;;
14524        esac;
14525     done'
14526 tdir=`pwd`
14527 cd $rsrc/ext
14528 set X
14529 shift
14530 eval $find_extensions
14531 set X $nonxs_extensions
14532 shift
14533 nonxs_extensions="$*"
14534 set X $known_extensions
14535 shift
14536 known_extensions="$*"
14537 cd $tdir
14538
14539 : Now see which are supported on this system.
14540 avail_ext=''
14541 for xxx in $known_extensions ; do
14542         case "$xxx" in
14543         DB_File|db_file)
14544                 case "$i_db" in
14545                 $define) avail_ext="$avail_ext $xxx" ;;
14546                 esac
14547                 ;;
14548         GDBM_File|gdbm_fil)
14549                 case "$i_gdbm" in 
14550                 $define) avail_ext="$avail_ext $xxx" ;;
14551                 esac
14552                 ;;
14553         NDBM_File|ndbm_fil)
14554                 case "$i_ndbm" in
14555                 $define)
14556                     case "$osname-$use64bitint" in
14557                     hpux-define)
14558                         case "$libs" in
14559                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14560                         esac
14561                         ;;
14562                     *) avail_ext="$avail_ext $xxx" ;;
14563                     esac
14564                     ;;
14565                 esac
14566                 ;;
14567         ODBM_File|odbm_fil) 
14568                 case "${i_dbm}${i_rpcsvcdbm}" in
14569                 *"${define}"*)
14570                     case "$osname-$use64bitint" in
14571                     hpux-define)
14572                         case "$libs" in
14573                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14574                         esac
14575                         ;;
14576                     *) avail_ext="$avail_ext $xxx" ;;
14577                     esac
14578                     ;;
14579                 esac
14580                 ;;
14581         POSIX|posix)
14582                 case "$useposix" in
14583                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14584                 esac
14585                 ;;
14586         Opcode|opcode)
14587                 case "$useopcode" in
14588                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14589                 esac
14590                 ;;
14591         Socket|socket)
14592                 case "$d_socket" in 
14593                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14594                 esac
14595                 ;;
14596         Thread|thread)
14597                 case "$usethreads" in 
14598                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14599                 esac
14600                 ;;
14601         IPC/SysV|ipc/sysv)
14602                 : XXX Do we need a useipcsysv variable here
14603                 case "${d_msg}${d_sem}${d_shm}" in 
14604                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14605                 esac
14606                 ;;
14607         *)      avail_ext="$avail_ext $xxx"
14608                 ;;
14609         esac
14610 done
14611
14612 set X $avail_ext
14613 shift
14614 avail_ext="$*"
14615
14616 : Now see which nonxs extensions are supported on this system.
14617 : For now assume all are.
14618 nonxs_ext=''
14619 for xxx in $nonxs_extensions ; do
14620         case "$xxx" in
14621         *)      nonxs_ext="$nonxs_ext $xxx"
14622                 ;;
14623         esac
14624 done
14625
14626 set X $nonxs_ext
14627 shift
14628 nonxs_ext="$*"
14629
14630 case $usedl in
14631 $define)
14632         $cat <<EOM
14633 A number of extensions are supplied with $package.  You may choose to
14634 compile these extensions for dynamic loading (the default), compile
14635 them into the $package executable (static loading), or not include
14636 them at all.  Answer "none" to include no extensions.
14637 Note that DynaLoader is always built and need not be mentioned here.
14638
14639 EOM
14640         case "$dynamic_ext" in
14641         '') dflt="$avail_ext" ;;
14642         *)      dflt="$dynamic_ext"
14643                 # Perhaps we are reusing an old out-of-date config.sh.
14644                 case "$hint" in
14645                 previous)
14646                         if test X"$dynamic_ext" != X"$avail_ext"; then
14647                                 $cat <<EOM
14648 NOTICE:  Your previous config.sh list may be incorrect. 
14649 The extensions now available to you are 
14650         ${avail_ext}
14651 but the default list from your previous config.sh is
14652         ${dynamic_ext} 
14653
14654 EOM
14655                         fi
14656                         ;;
14657                 esac
14658                 ;;
14659         esac
14660         case "$dflt" in
14661         '')     dflt=none;;
14662         esac
14663         rp="What extensions do you wish to load dynamically?"
14664         . ./myread
14665         case "$ans" in
14666         none) dynamic_ext=' ' ;;
14667         *) dynamic_ext="$ans" ;;
14668         esac
14669
14670         case "$static_ext" in
14671         '')
14672                 : Exclude those already listed in dynamic linking
14673                 dflt=''
14674                 for xxx in $avail_ext; do
14675                         case " $dynamic_ext " in
14676                         *" $xxx "*) ;;
14677                         *) dflt="$dflt $xxx" ;;
14678                         esac
14679                 done
14680                 set X $dflt
14681                 shift
14682                 dflt="$*"
14683                 ;;
14684         *)  dflt="$static_ext" 
14685                 ;;
14686         esac
14687
14688         case "$dflt" in
14689         '')     dflt=none;;
14690         esac
14691         rp="What extensions do you wish to load statically?"
14692         . ./myread
14693         case "$ans" in
14694         none) static_ext=' ' ;;
14695         *) static_ext="$ans" ;;
14696         esac
14697         ;;
14698 *)
14699         $cat <<EOM
14700 A number of extensions are supplied with $package.  Answer "none" 
14701 to include no extensions. 
14702 Note that DynaLoader is always built and need not be mentioned here.
14703
14704 EOM
14705         case "$static_ext" in
14706         '') dflt="$avail_ext" ;;
14707         *)      dflt="$static_ext"
14708                 # Perhaps we are reusing an old out-of-date config.sh.
14709                 case "$hint" in
14710                 previous)
14711                         if test X"$static_ext" != X"$avail_ext"; then
14712                                 $cat <<EOM
14713 NOTICE:  Your previous config.sh list may be incorrect. 
14714 The extensions now available to you are 
14715         ${avail_ext}
14716 but the default list from your previous config.sh is
14717         ${static_ext} 
14718
14719 EOM
14720                         fi
14721                         ;;
14722                 esac
14723                 ;;
14724         esac
14725         : Exclude those that are not xs extensions
14726         case "$dflt" in
14727         '')     dflt=none;;
14728         esac
14729         rp="What extensions do you wish to include?"
14730         . ./myread
14731         case "$ans" in
14732         none) static_ext=' ' ;;
14733         *) static_ext="$ans" ;;
14734         esac
14735         ;;
14736 esac
14737
14738 set X $dynamic_ext $static_ext $nonxs_ext
14739 shift
14740 extensions="$*"
14741
14742 : Remove build directory name from cppstdin so it can be used from
14743 : either the present location or the final installed location.
14744 echo " "
14745 : Get out of the UU directory to get correct path name.
14746 cd ..
14747 case "$cppstdin" in
14748 `pwd`/cppstdin)
14749         echo "Stripping down cppstdin path name"
14750         cppstdin=cppstdin
14751         ;;
14752 esac
14753 cd UU
14754
14755 : end of configuration questions
14756 echo " "
14757 echo "End of configuration questions."
14758 echo " "
14759
14760 : back to where it started
14761 if test -d ../UU; then
14762         cd ..
14763 fi
14764
14765 : configuration may be patched via a 'config.over' file
14766 if $test -f config.over; then
14767         echo " "
14768         dflt=y
14769         rp='I see a config.over file.  Do you wish to load it?'
14770         . UU/myread
14771         case "$ans" in
14772         n*) echo "OK, I'll ignore it.";;
14773         *)      . ./config.over
14774                 echo "Configuration override changes have been loaded."
14775                 ;;
14776         esac
14777 fi
14778
14779 : in case they want portability, strip down executable paths
14780 case "$d_portable" in
14781 "$define")
14782         echo " "
14783         echo "Stripping down executable paths..." >&4
14784         for file in $loclist $trylist; do
14785                 eval temp=\$$file
14786                 eval $file=`basename $temp`
14787         done
14788         ;;
14789 esac
14790
14791 : create config.sh file
14792 echo " "
14793 echo "Creating config.sh..." >&4
14794 $spitshell <<EOT >config.sh
14795 $startsh
14796 #
14797 # This file was produced by running the Configure script. It holds all the
14798 # definitions figured out by Configure. Should you modify one of these values,
14799 # do not forget to propagate your changes by running "Configure -der". You may
14800 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14801 #
14802
14803 # Package name      : $package
14804 # Source directory  : $src
14805 # Configuration time: $cf_time
14806 # Configured by     : $cf_by
14807 # Target system     : $myuname
14808
14809 Author='$Author'
14810 Date='$Date'
14811 Header='$Header'
14812 Id='$Id'
14813 Locker='$Locker'
14814 Log='$Log'
14815 Mcc='$Mcc'
14816 RCSfile='$RCSfile'
14817 Revision='$Revision'
14818 Source='$Source'
14819 State='$State'
14820 _a='$_a'
14821 _exe='$_exe'
14822 _o='$_o'
14823 afs='$afs'
14824 alignbytes='$alignbytes'
14825 ansi2knr='$ansi2knr'
14826 aphostname='$aphostname'
14827 api_revision='$api_revision'
14828 api_subversion='$api_subversion'
14829 api_version='$api_version'
14830 api_versionstring='$api_versionstring'
14831 ar='$ar'
14832 archlib='$archlib'
14833 archlibexp='$archlibexp'
14834 archname64='$archname64'
14835 archname='$archname'
14836 archobjs='$archobjs'
14837 awk='$awk'
14838 baserev='$baserev'
14839 bash='$bash'
14840 bin='$bin'
14841 bincompat5005='$bincompat5005'
14842 binexp='$binexp'
14843 bison='$bison'
14844 byacc='$byacc'
14845 byteorder='$byteorder'
14846 c='$c'
14847 castflags='$castflags'
14848 cat='$cat'
14849 cc='$cc'
14850 cccdlflags='$cccdlflags'
14851 ccdlflags='$ccdlflags'
14852 ccflags='$ccflags'
14853 ccsymbols='$ccsymbols'
14854 cf_by='$cf_by'
14855 cf_email='$cf_email'
14856 cf_time='$cf_time'
14857 charsize='$charsize'
14858 chgrp='$chgrp'
14859 chmod='$chmod'
14860 chown='$chown'
14861 clocktype='$clocktype'
14862 comm='$comm'
14863 compress='$compress'
14864 contains='$contains'
14865 cp='$cp'
14866 cpio='$cpio'
14867 cpp='$cpp'
14868 cpp_stuff='$cpp_stuff'
14869 cppccsymbols='$cppccsymbols'
14870 cppflags='$cppflags'
14871 cpplast='$cpplast'
14872 cppminus='$cppminus'
14873 cpprun='$cpprun'
14874 cppstdin='$cppstdin'
14875 cppsymbols='$cppsymbols'
14876 crosscompile='$crosscompile'
14877 cryptlib='$cryptlib'
14878 csh='$csh'
14879 d_Gconvert='$d_Gconvert'
14880 d_PRIEldbl='$d_PRIEldbl'
14881 d_PRIFldbl='$d_PRIFldbl'
14882 d_PRIGldbl='$d_PRIGldbl'
14883 d_PRIX64='$d_PRIX64'
14884 d_PRId64='$d_PRId64'
14885 d_PRIeldbl='$d_PRIeldbl'
14886 d_PRIfldbl='$d_PRIfldbl'
14887 d_PRIgldbl='$d_PRIgldbl'
14888 d_PRIi64='$d_PRIi64'
14889 d_PRIo64='$d_PRIo64'
14890 d_PRIu64='$d_PRIu64'
14891 d_PRIx64='$d_PRIx64'
14892 d_access='$d_access'
14893 d_accessx='$d_accessx'
14894 d_alarm='$d_alarm'
14895 d_archlib='$d_archlib'
14896 d_atolf='$d_atolf'
14897 d_atoll='$d_atoll'
14898 d_attribut='$d_attribut'
14899 d_bcmp='$d_bcmp'
14900 d_bcopy='$d_bcopy'
14901 d_bincompat5005='$d_bincompat5005'
14902 d_bsd='$d_bsd'
14903 d_bsdgetpgrp='$d_bsdgetpgrp'
14904 d_bsdsetpgrp='$d_bsdsetpgrp'
14905 d_bzero='$d_bzero'
14906 d_casti32='$d_casti32'
14907 d_castneg='$d_castneg'
14908 d_charvspr='$d_charvspr'
14909 d_chown='$d_chown'
14910 d_chroot='$d_chroot'
14911 d_chsize='$d_chsize'
14912 d_closedir='$d_closedir'
14913 d_const='$d_const'
14914 d_crypt='$d_crypt'
14915 d_csh='$d_csh'
14916 d_cuserid='$d_cuserid'
14917 d_dbl_dig='$d_dbl_dig'
14918 d_difftime='$d_difftime'
14919 d_dirnamlen='$d_dirnamlen'
14920 d_dlerror='$d_dlerror'
14921 d_dlopen='$d_dlopen'
14922 d_dlsymun='$d_dlsymun'
14923 d_dosuid='$d_dosuid'
14924 d_drand48proto='$d_drand48proto'
14925 d_dup2='$d_dup2'
14926 d_eaccess='$d_eaccess'
14927 d_endgrent='$d_endgrent'
14928 d_endhent='$d_endhent'
14929 d_endnent='$d_endnent'
14930 d_endpent='$d_endpent'
14931 d_endpwent='$d_endpwent'
14932 d_endsent='$d_endsent'
14933 d_endspent='$d_endspent'
14934 d_eofnblk='$d_eofnblk'
14935 d_eunice='$d_eunice'
14936 d_fchmod='$d_fchmod'
14937 d_fchown='$d_fchown'
14938 d_fcntl='$d_fcntl'
14939 d_fd_macros='$d_fd_macros'
14940 d_fd_set='$d_fd_set'
14941 d_fds_bits='$d_fds_bits'
14942 d_fgetpos='$d_fgetpos'
14943 d_flexfnam='$d_flexfnam'
14944 d_flock='$d_flock'
14945 d_fork='$d_fork'
14946 d_fpathconf='$d_fpathconf'
14947 d_fpos64_t='$d_fpos64_t'
14948 d_fs_data_s='$d_fs_data_s'
14949 d_fseeko='$d_fseeko'
14950 d_fsetpos='$d_fsetpos'
14951 d_fstatfs='$d_fstatfs'
14952 d_fstatvfs='$d_fstatvfs'
14953 d_ftello='$d_ftello'
14954 d_ftime='$d_ftime'
14955 d_getcwd='$d_getcwd'
14956 d_getfsstat='$d_getfsstat'
14957 d_getgrent='$d_getgrent'
14958 d_getgrps='$d_getgrps'
14959 d_gethbyaddr='$d_gethbyaddr'
14960 d_gethbyname='$d_gethbyname'
14961 d_gethent='$d_gethent'
14962 d_gethname='$d_gethname'
14963 d_gethostprotos='$d_gethostprotos'
14964 d_getlogin='$d_getlogin'
14965 d_getmnt='$d_getmnt'
14966 d_getmntent='$d_getmntent'
14967 d_getnbyaddr='$d_getnbyaddr'
14968 d_getnbyname='$d_getnbyname'
14969 d_getnent='$d_getnent'
14970 d_getnetprotos='$d_getnetprotos'
14971 d_getpbyname='$d_getpbyname'
14972 d_getpbynumber='$d_getpbynumber'
14973 d_getpent='$d_getpent'
14974 d_getpgid='$d_getpgid'
14975 d_getpgrp2='$d_getpgrp2'
14976 d_getpgrp='$d_getpgrp'
14977 d_getppid='$d_getppid'
14978 d_getprior='$d_getprior'
14979 d_getprotoprotos='$d_getprotoprotos'
14980 d_getpwent='$d_getpwent'
14981 d_getsbyname='$d_getsbyname'
14982 d_getsbyport='$d_getsbyport'
14983 d_getsent='$d_getsent'
14984 d_getservprotos='$d_getservprotos'
14985 d_getspent='$d_getspent'
14986 d_getspnam='$d_getspnam'
14987 d_gettimeod='$d_gettimeod'
14988 d_gnulibc='$d_gnulibc'
14989 d_grpasswd='$d_grpasswd'
14990 d_hasmntopt='$d_hasmntopt'
14991 d_htonl='$d_htonl'
14992 d_iconv='$d_iconv'
14993 d_index='$d_index'
14994 d_inetaton='$d_inetaton'
14995 d_int64_t='$d_int64_t'
14996 d_isascii='$d_isascii'
14997 d_killpg='$d_killpg'
14998 d_lchown='$d_lchown'
14999 d_ldbl_dig='$d_ldbl_dig'
15000 d_link='$d_link'
15001 d_locconv='$d_locconv'
15002 d_lockf='$d_lockf'
15003 d_longdbl='$d_longdbl'
15004 d_longlong='$d_longlong'
15005 d_lseekproto='$d_lseekproto'
15006 d_lstat='$d_lstat'
15007 d_madvise='$d_madvise'
15008 d_mblen='$d_mblen'
15009 d_mbstowcs='$d_mbstowcs'
15010 d_mbtowc='$d_mbtowc'
15011 d_memchr='$d_memchr'
15012 d_memcmp='$d_memcmp'
15013 d_memcpy='$d_memcpy'
15014 d_memmove='$d_memmove'
15015 d_memset='$d_memset'
15016 d_mkdir='$d_mkdir'
15017 d_mkdtemp='$d_mkdtemp'
15018 d_mkfifo='$d_mkfifo'
15019 d_mkstemp='$d_mkstemp'
15020 d_mkstemps='$d_mkstemps'
15021 d_mktime='$d_mktime'
15022 d_mmap='$d_mmap'
15023 d_mprotect='$d_mprotect'
15024 d_msg='$d_msg'
15025 d_msg_ctrunc='$d_msg_ctrunc'
15026 d_msg_dontroute='$d_msg_dontroute'
15027 d_msg_oob='$d_msg_oob'
15028 d_msg_peek='$d_msg_peek'
15029 d_msg_proxy='$d_msg_proxy'
15030 d_msgctl='$d_msgctl'
15031 d_msgget='$d_msgget'
15032 d_msgrcv='$d_msgrcv'
15033 d_msgsnd='$d_msgsnd'
15034 d_msync='$d_msync'
15035 d_munmap='$d_munmap'
15036 d_mymalloc='$d_mymalloc'
15037 d_nice='$d_nice'
15038 d_nv_preserves_uv='$d_nv_preserves_uv'
15039 d_off64_t='$d_off64_t'
15040 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15041 d_oldpthreads='$d_oldpthreads'
15042 d_oldsock='$d_oldsock'
15043 d_open3='$d_open3'
15044 d_pathconf='$d_pathconf'
15045 d_pause='$d_pause'
15046 d_phostname='$d_phostname'
15047 d_pipe='$d_pipe'
15048 d_poll='$d_poll'
15049 d_portable='$d_portable'
15050 d_pthread_yield='$d_pthread_yield'
15051 d_pwage='$d_pwage'
15052 d_pwchange='$d_pwchange'
15053 d_pwclass='$d_pwclass'
15054 d_pwcomment='$d_pwcomment'
15055 d_pwexpire='$d_pwexpire'
15056 d_pwgecos='$d_pwgecos'
15057 d_pwpasswd='$d_pwpasswd'
15058 d_pwquota='$d_pwquota'
15059 d_qgcvt='$d_qgcvt'
15060 d_quad='$d_quad'
15061 d_readdir='$d_readdir'
15062 d_readlink='$d_readlink'
15063 d_rename='$d_rename'
15064 d_rewinddir='$d_rewinddir'
15065 d_rmdir='$d_rmdir'
15066 d_safebcpy='$d_safebcpy'
15067 d_safemcpy='$d_safemcpy'
15068 d_sanemcmp='$d_sanemcmp'
15069 d_sched_yield='$d_sched_yield'
15070 d_scm_rights='$d_scm_rights'
15071 d_seekdir='$d_seekdir'
15072 d_select='$d_select'
15073 d_sem='$d_sem'
15074 d_semctl='$d_semctl'
15075 d_semctl_semid_ds='$d_semctl_semid_ds'
15076 d_semctl_semun='$d_semctl_semun'
15077 d_semget='$d_semget'
15078 d_semop='$d_semop'
15079 d_setegid='$d_setegid'
15080 d_seteuid='$d_seteuid'
15081 d_setgrent='$d_setgrent'
15082 d_setgrps='$d_setgrps'
15083 d_sethent='$d_sethent'
15084 d_setlinebuf='$d_setlinebuf'
15085 d_setlocale='$d_setlocale'
15086 d_setnent='$d_setnent'
15087 d_setpent='$d_setpent'
15088 d_setpgid='$d_setpgid'
15089 d_setpgrp2='$d_setpgrp2'
15090 d_setpgrp='$d_setpgrp'
15091 d_setprior='$d_setprior'
15092 d_setpwent='$d_setpwent'
15093 d_setregid='$d_setregid'
15094 d_setresgid='$d_setresgid'
15095 d_setresuid='$d_setresuid'
15096 d_setreuid='$d_setreuid'
15097 d_setrgid='$d_setrgid'
15098 d_setruid='$d_setruid'
15099 d_setsent='$d_setsent'
15100 d_setsid='$d_setsid'
15101 d_setspent='$d_setspent'
15102 d_setvbuf='$d_setvbuf'
15103 d_sfio='$d_sfio'
15104 d_shm='$d_shm'
15105 d_shmat='$d_shmat'
15106 d_shmatprototype='$d_shmatprototype'
15107 d_shmctl='$d_shmctl'
15108 d_shmdt='$d_shmdt'
15109 d_shmget='$d_shmget'
15110 d_sigaction='$d_sigaction'
15111 d_sigsetjmp='$d_sigsetjmp'
15112 d_socket='$d_socket'
15113 d_socklen_t='$d_socklen_t'
15114 d_sockpair='$d_sockpair'
15115 d_sqrtl='$d_sqrtl'
15116 d_statblks='$d_statblks'
15117 d_statfs_f_flags='$d_statfs_f_flags'
15118 d_statfs_s='$d_statfs_s'
15119 d_statvfs='$d_statvfs'
15120 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15121 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15122 d_stdio_stream_array='$d_stdio_stream_array'
15123 d_stdiobase='$d_stdiobase'
15124 d_stdstdio='$d_stdstdio'
15125 d_strchr='$d_strchr'
15126 d_strcoll='$d_strcoll'
15127 d_strctcpy='$d_strctcpy'
15128 d_strerrm='$d_strerrm'
15129 d_strerror='$d_strerror'
15130 d_strtod='$d_strtod'
15131 d_strtol='$d_strtol'
15132 d_strtold='$d_strtold'
15133 d_strtoll='$d_strtoll'
15134 d_strtoul='$d_strtoul'
15135 d_strtoull='$d_strtoull'
15136 d_strtouq='$d_strtouq'
15137 d_strxfrm='$d_strxfrm'
15138 d_suidsafe='$d_suidsafe'
15139 d_symlink='$d_symlink'
15140 d_syscall='$d_syscall'
15141 d_sysconf='$d_sysconf'
15142 d_sysernlst='$d_sysernlst'
15143 d_syserrlst='$d_syserrlst'
15144 d_system='$d_system'
15145 d_tcgetpgrp='$d_tcgetpgrp'
15146 d_tcsetpgrp='$d_tcsetpgrp'
15147 d_telldir='$d_telldir'
15148 d_telldirproto='$d_telldirproto'
15149 d_time='$d_time'
15150 d_times='$d_times'
15151 d_truncate='$d_truncate'
15152 d_tzname='$d_tzname'
15153 d_umask='$d_umask'
15154 d_uname='$d_uname'
15155 d_union_semun='$d_union_semun'
15156 d_ustat='$d_ustat'
15157 d_vendorbin='$d_vendorbin'
15158 d_vendorlib='$d_vendorlib'
15159 d_vfork='$d_vfork'
15160 d_void_closedir='$d_void_closedir'
15161 d_voidsig='$d_voidsig'
15162 d_voidtty='$d_voidtty'
15163 d_volatile='$d_volatile'
15164 d_vprintf='$d_vprintf'
15165 d_wait4='$d_wait4'
15166 d_waitpid='$d_waitpid'
15167 d_wcstombs='$d_wcstombs'
15168 d_wctomb='$d_wctomb'
15169 d_xenix='$d_xenix'
15170 date='$date'
15171 db_hashtype='$db_hashtype'
15172 db_prefixtype='$db_prefixtype'
15173 defvoidused='$defvoidused'
15174 direntrytype='$direntrytype'
15175 dlext='$dlext'
15176 dlsrc='$dlsrc'
15177 doublesize='$doublesize'
15178 drand01='$drand01'
15179 dynamic_ext='$dynamic_ext'
15180 eagain='$eagain'
15181 ebcdic='$ebcdic'
15182 echo='$echo'
15183 egrep='$egrep'
15184 emacs='$emacs'
15185 eunicefix='$eunicefix'
15186 exe_ext='$exe_ext'
15187 expr='$expr'
15188 extensions='$extensions'
15189 fflushNULL='$fflushNULL'
15190 fflushall='$fflushall'
15191 find='$find'
15192 firstmakefile='$firstmakefile'
15193 flex='$flex'
15194 fpossize='$fpossize'
15195 fpostype='$fpostype'
15196 freetype='$freetype'
15197 full_ar='$full_ar'
15198 full_csh='$full_csh'
15199 full_sed='$full_sed'
15200 gccversion='$gccversion'
15201 gidformat='$gidformat'
15202 gidsign='$gidsign'
15203 gidsize='$gidsize'
15204 gidtype='$gidtype'
15205 glibpth='$glibpth'
15206 grep='$grep'
15207 groupcat='$groupcat'
15208 groupstype='$groupstype'
15209 gzip='$gzip'
15210 h_fcntl='$h_fcntl'
15211 h_sysfile='$h_sysfile'
15212 hint='$hint'
15213 hostcat='$hostcat'
15214 huge='$huge'
15215 i16size='$i16size'
15216 i16type='$i16type'
15217 i32size='$i32size'
15218 i32type='$i32type'
15219 i64size='$i64size'
15220 i64type='$i64type'
15221 i8size='$i8size'
15222 i8type='$i8type'
15223 i_arpainet='$i_arpainet'
15224 i_bsdioctl='$i_bsdioctl'
15225 i_db='$i_db'
15226 i_dbm='$i_dbm'
15227 i_dirent='$i_dirent'
15228 i_dld='$i_dld'
15229 i_dlfcn='$i_dlfcn'
15230 i_fcntl='$i_fcntl'
15231 i_float='$i_float'
15232 i_gdbm='$i_gdbm'
15233 i_grp='$i_grp'
15234 i_iconv='$i_iconv'
15235 i_ieeefp='$i_ieeefp'
15236 i_inttypes='$i_inttypes'
15237 i_limits='$i_limits'
15238 i_locale='$i_locale'
15239 i_machcthr='$i_machcthr'
15240 i_malloc='$i_malloc'
15241 i_math='$i_math'
15242 i_memory='$i_memory'
15243 i_mntent='$i_mntent'
15244 i_ndbm='$i_ndbm'
15245 i_netdb='$i_netdb'
15246 i_neterrno='$i_neterrno'
15247 i_netinettcp='$i_netinettcp'
15248 i_niin='$i_niin'
15249 i_poll='$i_poll'
15250 i_pthread='$i_pthread'
15251 i_pwd='$i_pwd'
15252 i_rpcsvcdbm='$i_rpcsvcdbm'
15253 i_sfio='$i_sfio'
15254 i_sgtty='$i_sgtty'
15255 i_shadow='$i_shadow'
15256 i_socks='$i_socks'
15257 i_stdarg='$i_stdarg'
15258 i_stddef='$i_stddef'
15259 i_stdlib='$i_stdlib'
15260 i_string='$i_string'
15261 i_sunmath='$i_sunmath'
15262 i_sysaccess='$i_sysaccess'
15263 i_sysdir='$i_sysdir'
15264 i_sysfile='$i_sysfile'
15265 i_sysfilio='$i_sysfilio'
15266 i_sysin='$i_sysin'
15267 i_sysioctl='$i_sysioctl'
15268 i_syslog='$i_syslog'
15269 i_sysmman='$i_sysmman'
15270 i_sysmode='$i_sysmode'
15271 i_sysmount='$i_sysmount'
15272 i_sysndir='$i_sysndir'
15273 i_sysparam='$i_sysparam'
15274 i_sysresrc='$i_sysresrc'
15275 i_syssecrt='$i_syssecrt'
15276 i_sysselct='$i_sysselct'
15277 i_syssockio='$i_syssockio'
15278 i_sysstat='$i_sysstat'
15279 i_sysstatfs='$i_sysstatfs'
15280 i_sysstatvfs='$i_sysstatvfs'
15281 i_systime='$i_systime'
15282 i_systimek='$i_systimek'
15283 i_systimes='$i_systimes'
15284 i_systypes='$i_systypes'
15285 i_sysuio='$i_sysuio'
15286 i_sysun='$i_sysun'
15287 i_sysutsname='$i_sysutsname'
15288 i_sysvfs='$i_sysvfs'
15289 i_syswait='$i_syswait'
15290 i_termio='$i_termio'
15291 i_termios='$i_termios'
15292 i_time='$i_time'
15293 i_unistd='$i_unistd'
15294 i_ustat='$i_ustat'
15295 i_utime='$i_utime'
15296 i_values='$i_values'
15297 i_varargs='$i_varargs'
15298 i_varhdr='$i_varhdr'
15299 i_vfork='$i_vfork'
15300 ignore_versioned_solibs='$ignore_versioned_solibs'
15301 inc_version_list='$inc_version_list'
15302 inc_version_list_init='$inc_version_list_init'
15303 incpath='$incpath'
15304 inews='$inews'
15305 installarchlib='$installarchlib'
15306 installbin='$installbin'
15307 installman1dir='$installman1dir'
15308 installman3dir='$installman3dir'
15309 installprefix='$installprefix'
15310 installprefixexp='$installprefixexp'
15311 installprivlib='$installprivlib'
15312 installscript='$installscript'
15313 installsitearch='$installsitearch'
15314 installsitebin='$installsitebin'
15315 installsitelib='$installsitelib'
15316 installstyle='$installstyle'
15317 installusrbinperl='$installusrbinperl'
15318 installvendorbin='$installvendorbin'
15319 installvendorlib='$installvendorlib'
15320 intsize='$intsize'
15321 ivdformat='$ivdformat'
15322 ivsize='$ivsize'
15323 ivtype='$ivtype'
15324 known_extensions='$known_extensions'
15325 ksh='$ksh'
15326 large='$large'
15327 ld='$ld'
15328 lddlflags='$lddlflags'
15329 ldflags='$ldflags'
15330 ldlibpthname='$ldlibpthname'
15331 less='$less'
15332 lib_ext='$lib_ext'
15333 libc='$libc'
15334 libperl='$libperl'
15335 libpth='$libpth'
15336 libs='$libs'
15337 libsdirs='$libsdirs'
15338 libsfiles='$libsfiles'
15339 libsfound='$libsfound'
15340 libspath='$libspath'
15341 libswanted='$libswanted'
15342 line='$line'
15343 lint='$lint'
15344 lkflags='$lkflags'
15345 ln='$ln'
15346 lns='$lns'
15347 locincpth='$locincpth'
15348 loclibpth='$loclibpth'
15349 longdblsize='$longdblsize'
15350 longlongsize='$longlongsize'
15351 longsize='$longsize'
15352 lp='$lp'
15353 lpr='$lpr'
15354 ls='$ls'
15355 lseeksize='$lseeksize'
15356 lseektype='$lseektype'
15357 mail='$mail'
15358 mailx='$mailx'
15359 make='$make'
15360 make_set_make='$make_set_make'
15361 mallocobj='$mallocobj'
15362 mallocsrc='$mallocsrc'
15363 malloctype='$malloctype'
15364 man1dir='$man1dir'
15365 man1direxp='$man1direxp'
15366 man1ext='$man1ext'
15367 man3dir='$man3dir'
15368 man3direxp='$man3direxp'
15369 man3ext='$man3ext'
15370 medium='$medium'
15371 mips_type='$mips_type'
15372 mkdir='$mkdir'
15373 mmaptype='$mmaptype'
15374 models='$models'
15375 modetype='$modetype'
15376 more='$more'
15377 multiarch='$multiarch'
15378 mv='$mv'
15379 myarchname='$myarchname'
15380 mydomain='$mydomain'
15381 myhostname='$myhostname'
15382 myuname='$myuname'
15383 n='$n'
15384 netdb_hlen_type='$netdb_hlen_type'
15385 netdb_host_type='$netdb_host_type'
15386 netdb_name_type='$netdb_name_type'
15387 netdb_net_type='$netdb_net_type'
15388 nm='$nm'
15389 nm_opt='$nm_opt'
15390 nm_so_opt='$nm_so_opt'
15391 nonxs_ext='$nonxs_ext'
15392 nroff='$nroff'
15393 nvsize='$nvsize'
15394 nvtype='$nvtype'
15395 o_nonblock='$o_nonblock'
15396 obj_ext='$obj_ext'
15397 old_pthread_create_joinable='$old_pthread_create_joinable'
15398 optimize='$optimize'
15399 orderlib='$orderlib'
15400 osname='$osname'
15401 osvers='$osvers'
15402 package='$package'
15403 pager='$pager'
15404 passcat='$passcat'
15405 patchlevel='$patchlevel'
15406 path_sep='$path_sep'
15407 perl5='$perl5'
15408 perl='$perl'
15409 perladmin='$perladmin'
15410 perlpath='$perlpath'
15411 pg='$pg'
15412 phostname='$phostname'
15413 pidtype='$pidtype'
15414 plibpth='$plibpth'
15415 pm_apiversion='$pm_apiversion'
15416 pmake='$pmake'
15417 pr='$pr'
15418 prefix='$prefix'
15419 prefixexp='$prefixexp'
15420 privlib='$privlib'
15421 privlibexp='$privlibexp'
15422 prototype='$prototype'
15423 ptrsize='$ptrsize'
15424 quadkind='$quadkind'
15425 quadtype='$quadtype'
15426 randbits='$randbits'
15427 randfunc='$randfunc'
15428 randseedtype='$randseedtype'
15429 ranlib='$ranlib'
15430 rd_nodata='$rd_nodata'
15431 revision='$revision'
15432 rm='$rm'
15433 rmail='$rmail'
15434 runnm='$runnm'
15435 sPRIEldbl='$sPRIEldbl'
15436 sPRIFldbl='$sPRIFldbl'
15437 sPRIGldbl='$sPRIGldbl'
15438 sPRIX64='$sPRIX64'
15439 sPRId64='$sPRId64'
15440 sPRIeldbl='$sPRIeldbl'
15441 sPRIfldbl='$sPRIfldbl'
15442 sPRIgldbl='$sPRIgldbl'
15443 sPRIi64='$sPRIi64'
15444 sPRIo64='$sPRIo64'
15445 sPRIu64='$sPRIu64'
15446 sPRIx64='$sPRIx64'
15447 sched_yield='$sched_yield'
15448 scriptdir='$scriptdir'
15449 scriptdirexp='$scriptdirexp'
15450 sed='$sed'
15451 seedfunc='$seedfunc'
15452 selectminbits='$selectminbits'
15453 selecttype='$selecttype'
15454 sendmail='$sendmail'
15455 sh='$sh'
15456 shar='$shar'
15457 sharpbang='$sharpbang'
15458 shmattype='$shmattype'
15459 shortsize='$shortsize'
15460 shrpenv='$shrpenv'
15461 shsharp='$shsharp'
15462 sig_count='$sig_count'
15463 sig_name='$sig_name'
15464 sig_name_init='$sig_name_init'
15465 sig_num='$sig_num'
15466 sig_num_init='$sig_num_init'
15467 signal_t='$signal_t'
15468 sitearch='$sitearch'
15469 sitearchexp='$sitearchexp'
15470 sitebin='$sitebin'
15471 sitebinexp='$sitebinexp'
15472 sitelib='$sitelib'
15473 sitelibexp='$sitelibexp'
15474 siteprefix='$siteprefix'
15475 siteprefixexp='$siteprefixexp'
15476 sizetype='$sizetype'
15477 sleep='$sleep'
15478 smail='$smail'
15479 small='$small'
15480 so='$so'
15481 sockethdr='$sockethdr'
15482 socketlib='$socketlib'
15483 socksizetype='$socksizetype'
15484 sort='$sort'
15485 spackage='$spackage'
15486 spitshell='$spitshell'
15487 split='$split'
15488 src='$src'
15489 ssizetype='$ssizetype'
15490 startperl='$startperl'
15491 startsh='$startsh'
15492 static_ext='$static_ext'
15493 stdchar='$stdchar'
15494 stdio_base='$stdio_base'
15495 stdio_bufsiz='$stdio_bufsiz'
15496 stdio_cnt='$stdio_cnt'
15497 stdio_filbuf='$stdio_filbuf'
15498 stdio_ptr='$stdio_ptr'
15499 stdio_stream_array='$stdio_stream_array'
15500 strings='$strings'
15501 submit='$submit'
15502 subversion='$subversion'
15503 sysman='$sysman'
15504 tail='$tail'
15505 tar='$tar'
15506 tbl='$tbl'
15507 tee='$tee'
15508 test='$test'
15509 timeincl='$timeincl'
15510 timetype='$timetype'
15511 touch='$touch'
15512 tr='$tr'
15513 trnl='$trnl'
15514 troff='$troff'
15515 u16size='$u16size'
15516 u16type='$u16type'
15517 u32size='$u32size'
15518 u32type='$u32type'
15519 u64size='$u64size'
15520 u64type='$u64type'
15521 u8size='$u8size'
15522 u8type='$u8type'
15523 uidformat='$uidformat'
15524 uidsign='$uidsign'
15525 uidsize='$uidsize'
15526 uidtype='$uidtype'
15527 uname='$uname'
15528 uniq='$uniq'
15529 uquadtype='$uquadtype'
15530 use5005threads='$use5005threads'
15531 use64bitall='$use64bitall'
15532 use64bitint='$use64bitint'
15533 usedl='$usedl'
15534 useithreads='$useithreads'
15535 uselargefiles='$uselargefiles'
15536 uselongdouble='$uselongdouble'
15537 usemorebits='$usemorebits'
15538 usemultiplicity='$usemultiplicity'
15539 usemymalloc='$usemymalloc'
15540 usenm='$usenm'
15541 useopcode='$useopcode'
15542 useperlio='$useperlio'
15543 useposix='$useposix'
15544 usesfio='$usesfio'
15545 useshrplib='$useshrplib'
15546 usesocks='$usesocks'
15547 usethreads='$usethreads'
15548 usevendorprefix='$usevendorprefix'
15549 usevfork='$usevfork'
15550 usrinc='$usrinc'
15551 uuname='$uuname'
15552 uvoformat='$uvoformat'
15553 uvsize='$uvsize'
15554 uvtype='$uvtype'
15555 uvuformat='$uvuformat'
15556 uvxformat='$uvxformat'
15557 vendorbin='$vendorbin'
15558 vendorbinexp='$vendorbinexp'
15559 vendorlib='$vendorlib'
15560 vendorlibexp='$vendorlibexp'
15561 vendorprefix='$vendorprefix'
15562 vendorprefixexp='$vendorprefixexp'
15563 version='$version'
15564 vi='$vi'
15565 voidflags='$voidflags'
15566 xlibpth='$xlibpth'
15567 xs_apiversion='$xs_apiversion'
15568 zcat='$zcat'
15569 zip='$zip'
15570 EOT
15571
15572 : Add in command line options if available
15573 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15574
15575 : add special variables
15576 $test -f $src/patchlevel.h && \
15577 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15578 echo "CONFIGDOTSH=true" >>config.sh
15579
15580 : propagate old symbols
15581 if $test -f UU/config.sh; then
15582         <UU/config.sh sort | uniq >UU/oldconfig.sh
15583         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15584         sort | uniq -u >UU/oldsyms
15585         set X `cat UU/oldsyms`
15586         shift
15587         case $# in
15588         0) ;;
15589         *)
15590                 cat <<EOM
15591 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15592 EOM
15593                 echo "# Variables propagated from previous config.sh file." >>config.sh
15594                 for sym in `cat UU/oldsyms`; do
15595                         echo "    Propagating $hint variable "'$'"$sym..."
15596                         eval 'tmp="$'"${sym}"'"'
15597                         echo "$tmp" | \
15598                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15599                 done
15600                 ;;
15601         esac
15602 fi
15603
15604 : Finish up by extracting the .SH files
15605 case "$alldone" in
15606 exit)
15607         $rm -rf UU
15608         echo "Done."
15609         exit 0
15610         ;;
15611 cont)
15612         ;;
15613 '')
15614         dflt=''
15615         nostick=true
15616         $cat <<EOM
15617
15618 If you'd like to make any changes to the config.sh file before I begin
15619 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15620
15621 EOM
15622         rp="Press return or use a shell escape to edit config.sh:"
15623         . UU/myread
15624         nostick=''
15625         case "$ans" in
15626         '') ;;
15627         *) : in case they cannot read
15628                 sh 1>&4 -c "$ans";;
15629         esac
15630         ;;
15631 esac
15632
15633 : if this fails, just run all the .SH files by hand
15634 . ./config.sh
15635
15636 echo " "
15637 exec 1>&4
15638 . ./UU/extract
15639
15640 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15641         dflt=y
15642         case "$silent" in
15643         true) ;;
15644         *)
15645                 $cat <<EOM
15646
15647 Now you need to generate make dependencies by running "$make depend".
15648 You might prefer to run it in background: "$make depend > makedepend.out &"
15649 It can take a while, so you might not want to run it right now.
15650
15651 EOM
15652                 ;;
15653         esac
15654         rp="Run $make depend now?"
15655         . UU/myread
15656         case "$ans" in
15657         y*)
15658                 $make depend && echo "Now you must run a $make."
15659                 ;;
15660         *)
15661                 echo "You must run '$make depend' then '$make'."
15662                 ;;
15663         esac
15664 elif test -f [Mm]akefile; then
15665         echo " "
15666         echo "Now you must run a $make."
15667 else
15668         echo "Done."
15669 fi
15670
15671 if $test -f Policy.sh; then
15672     $cat <<EOM
15673
15674 If you compile $package on a different machine or from a different object
15675 directory, copy the Policy.sh file from this object directory to the
15676 new one before you run Configure -- this will help you with most of
15677 the policy defaults.
15678
15679 EOM
15680 fi
15681 if $test -f config.msg; then
15682     echo "Hmm.  I also noted the following information while running:"
15683     echo " "
15684     $cat config.msg >&4
15685     $rm -f config.msg
15686 fi
15687 $rm -f kit*isdone ark*isdone
15688 $rm -rf UU
15689
15690 : End of Configure
15691