Integrate with Sarathy.
[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 Mon May  8 19:06:18 EET DST 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_fchmod=''
347 d_fchown=''
348 d_fcntl=''
349 d_fd_macros=''
350 d_fd_set=''
351 d_fds_bits=''
352 d_fgetpos=''
353 d_flexfnam=''
354 d_flock=''
355 d_fork=''
356 d_fpos64_t=''
357 d_frexpl=''
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_getspnam=''
399 d_getsbyname=''
400 d_getsbyport=''
401 d_gnulibc=''
402 d_hasmntopt=''
403 d_htonl=''
404 d_iconv=''
405 d_inetaton=''
406 d_int64_t=''
407 d_isascii=''
408 d_isnan=''
409 d_isnanl=''
410 d_killpg=''
411 d_lchown=''
412 d_ldbl_dig=''
413 d_link=''
414 d_locconv=''
415 d_lockf=''
416 d_longdbl=''
417 longdblsize=''
418 d_longlong=''
419 longlongsize=''
420 d_lseekproto=''
421 d_lstat=''
422 d_madvise=''
423 d_mblen=''
424 d_mbstowcs=''
425 d_mbtowc=''
426 d_memchr=''
427 d_memcmp=''
428 d_memcpy=''
429 d_memmove=''
430 d_memset=''
431 d_mkdir=''
432 d_mkdtemp=''
433 d_mkfifo=''
434 d_mkstemp=''
435 d_mkstemps=''
436 d_mktime=''
437 d_mmap=''
438 mmaptype=''
439 d_modfl=''
440 d_mprotect=''
441 d_msg=''
442 d_msgctl=''
443 d_msgget=''
444 d_msgrcv=''
445 d_msgsnd=''
446 d_msync=''
447 d_munmap=''
448 d_nice=''
449 d_off64_t=''
450 d_open3=''
451 d_fpathconf=''
452 d_pathconf=''
453 d_pause=''
454 d_pipe=''
455 d_poll=''
456 d_portable=''
457 d_old_pthread_create_joinable=''
458 old_pthread_create_joinable=''
459 d_pthread_yield=''
460 d_sched_yield=''
461 sched_yield=''
462 d_qgcvt=''
463 d_readdir=''
464 d_rewinddir=''
465 d_seekdir=''
466 d_telldir=''
467 d_readlink=''
468 d_rename=''
469 d_rmdir=''
470 d_safebcpy=''
471 d_safemcpy=''
472 d_sanemcmp=''
473 d_select=''
474 d_sem=''
475 d_semctl=''
476 d_semget=''
477 d_semop=''
478 d_setegid=''
479 d_seteuid=''
480 d_setgrent=''
481 d_setgrps=''
482 d_sethent=''
483 d_setlinebuf=''
484 d_setlocale=''
485 d_setnent=''
486 d_setpent=''
487 d_setpgid=''
488 d_setpgrp2=''
489 d_bsdsetpgrp=''
490 d_setpgrp=''
491 d_setprior=''
492 d_setpwent=''
493 d_setregid=''
494 d_setresgid=''
495 d_setresuid=''
496 d_setreuid=''
497 d_setrgid=''
498 d_setruid=''
499 d_setsent=''
500 d_setsid=''
501 d_setvbuf=''
502 d_sfio=''
503 usesfio=''
504 d_shm=''
505 d_shmat=''
506 d_shmatprototype=''
507 shmattype=''
508 d_shmctl=''
509 d_shmdt=''
510 d_shmget=''
511 d_sigaction=''
512 d_sigsetjmp=''
513 d_msg_ctrunc=''
514 d_msg_dontroute=''
515 d_msg_oob=''
516 d_msg_peek=''
517 d_msg_proxy=''
518 d_oldsock=''
519 d_scm_rights=''
520 d_socket=''
521 d_sockpair=''
522 sockethdr=''
523 socketlib=''
524 d_socklen_t=''
525 d_sqrtl=''
526 d_statblks=''
527 d_statfs_f_flags=''
528 d_statfs_s=''
529 d_fstatvfs=''
530 d_statvfs=''
531 d_stdio_cnt_lval=''
532 d_stdio_ptr_lval=''
533 d_stdiobase=''
534 d_stdstdio=''
535 stdio_base=''
536 stdio_bufsiz=''
537 stdio_cnt=''
538 stdio_filbuf=''
539 stdio_ptr=''
540 d_index=''
541 d_strchr=''
542 d_strcoll=''
543 d_strctcpy=''
544 d_strerrm=''
545 d_strerror=''
546 d_sysernlst=''
547 d_syserrlst=''
548 d_strtod=''
549 d_strtol=''
550 d_strtold=''
551 d_strtoll=''
552 d_strtoul=''
553 d_strtoull=''
554 d_strtouq=''
555 d_strxfrm=''
556 d_symlink=''
557 d_syscall=''
558 d_sysconf=''
559 d_system=''
560 d_tcgetpgrp=''
561 d_tcsetpgrp=''
562 d_telldirproto=''
563 d_time=''
564 timetype=''
565 clocktype=''
566 d_times=''
567 d_truncate=''
568 d_tzname=''
569 d_umask=''
570 d_semctl_semid_ds=''
571 d_semctl_semun=''
572 d_union_semun=''
573 d_ustat=''
574 d_vfork=''
575 usevfork=''
576 d_voidsig=''
577 signal_t=''
578 d_volatile=''
579 d_charvspr=''
580 d_vprintf=''
581 d_wait4=''
582 d_waitpid=''
583 d_wcstombs=''
584 d_wctomb=''
585 dlext=''
586 cccdlflags=''
587 ccdlflags=''
588 dlsrc=''
589 ld=''
590 lddlflags=''
591 usedl=''
592 doublesize=''
593 ebcdic=''
594 fflushNULL=''
595 fflushall=''
596 fpossize=''
597 fpostype=''
598 gidformat=''
599 gidsign=''
600 gidsize=''
601 gidtype=''
602 groupstype=''
603 h_fcntl=''
604 h_sysfile=''
605 i_arpainet=''
606 db_hashtype=''
607 db_prefixtype=''
608 i_db=''
609 i_dbm=''
610 i_rpcsvcdbm=''
611 d_dirnamlen=''
612 direntrytype=''
613 i_dirent=''
614 i_dld=''
615 i_dlfcn=''
616 i_fcntl=''
617 i_float=''
618 i_gdbm=''
619 d_grpasswd=''
620 i_grp=''
621 i_iconv=''
622 i_ieeefp=''
623 i_inttypes=''
624 i_limits=''
625 i_locale=''
626 i_machcthr=''
627 i_malloc=''
628 i_math=''
629 i_memory=''
630 i_mntent=''
631 i_ndbm=''
632 i_netdb=''
633 i_neterrno=''
634 i_netinettcp=''
635 i_niin=''
636 i_sysin=''
637 i_poll=''
638 i_pthread=''
639 d_pwage=''
640 d_pwchange=''
641 d_pwclass=''
642 d_pwcomment=''
643 d_pwexpire=''
644 d_pwgecos=''
645 d_pwpasswd=''
646 d_pwquota=''
647 i_pwd=''
648 i_sfio=''
649 i_shadow=''
650 i_socks=''
651 i_stddef=''
652 i_stdlib=''
653 i_string=''
654 strings=''
655 i_sunmath=''
656 i_sysaccess=''
657 i_sysdir=''
658 i_sysfile=''
659 d_voidtty=''
660 i_bsdioctl=''
661 i_sysfilio=''
662 i_sysioctl=''
663 i_syssockio=''
664 i_syslog=''
665 i_sysmman=''
666 i_sysmode=''
667 i_sysmount=''
668 i_sysndir=''
669 i_sysparam=''
670 i_sysresrc=''
671 i_syssecrt=''
672 i_sysselct=''
673 i_sysstat=''
674 i_sysstatfs=''
675 i_sysstatvfs=''
676 i_systimes=''
677 i_systypes=''
678 i_sysuio=''
679 i_sysun=''
680 i_sysutsname=''
681 i_sysvfs=''
682 i_syswait=''
683 i_sgtty=''
684 i_termio=''
685 i_termios=''
686 i_systime=''
687 i_systimek=''
688 i_time=''
689 timeincl=''
690 i_unistd=''
691 i_ustat=''
692 i_utime=''
693 i_values=''
694 i_stdarg=''
695 i_varargs=''
696 i_varhdr=''
697 i_vfork=''
698 inc_version_list=''
699 inc_version_list_init=''
700 installprefix=''
701 installprefixexp=''
702 installstyle=''
703 installusrbinperl=''
704 intsize=''
705 longsize=''
706 shortsize=''
707 libc=''
708 ldlibpthname=''
709 libperl=''
710 shrpenv=''
711 useshrplib=''
712 glibpth=''
713 libpth=''
714 loclibpth=''
715 plibpth=''
716 xlibpth=''
717 ignore_versioned_solibs=''
718 libs=''
719 libsdirs=''
720 libsfiles=''
721 libsfound=''
722 libspath=''
723 lns=''
724 d_PRIEldbl=''
725 d_PRIFldbl=''
726 d_PRIGldbl=''
727 d_PRIeldbl=''
728 d_PRIfldbl=''
729 d_PRIgldbl=''
730 sPRIEldbl=''
731 sPRIFldbl=''
732 sPRIGldbl=''
733 sPRIeldbl=''
734 sPRIfldbl=''
735 sPRIgldbl=''
736 lseeksize=''
737 lseektype=''
738 make_set_make=''
739 d_mymalloc=''
740 freetype=''
741 mallocobj=''
742 mallocsrc=''
743 malloctype=''
744 usemymalloc=''
745 installman1dir=''
746 man1dir=''
747 man1direxp=''
748 man1ext=''
749 installman3dir=''
750 man3dir=''
751 man3direxp=''
752 man3ext=''
753 huge=''
754 large=''
755 medium=''
756 models=''
757 small=''
758 split=''
759 modetype=''
760 multiarch=''
761 mydomain=''
762 myhostname=''
763 phostname=''
764 c=''
765 n=''
766 d_eofnblk=''
767 eagain=''
768 o_nonblock=''
769 rd_nodata=''
770 netdb_hlen_type=''
771 netdb_host_type=''
772 netdb_name_type=''
773 netdb_net_type=''
774 groupcat=''
775 hostcat=''
776 passcat=''
777 orderlib=''
778 ranlib=''
779 d_perl_otherlibdirs=''
780 otherlibdirs=''
781 package=''
782 spackage=''
783 pager=''
784 api_revision=''
785 api_subversion=''
786 api_version=''
787 api_versionstring=''
788 patchlevel=''
789 revision=''
790 subversion=''
791 version=''
792 perl5=''
793 perladmin=''
794 perlpath=''
795 d_nv_preserved_bits=''
796 d_nv_preserves_uv=''
797 i16size=''
798 i16type=''
799 i32size=''
800 i32type=''
801 i64size=''
802 i64type=''
803 i8size=''
804 i8type=''
805 ivsize=''
806 ivtype=''
807 nvsize=''
808 nvtype=''
809 u16size=''
810 u16type=''
811 u32size=''
812 u32type=''
813 u64size=''
814 u64type=''
815 u8size=''
816 u8type=''
817 uvsize=''
818 uvtype=''
819 ivdformat=''
820 uvoformat=''
821 uvuformat=''
822 uvxformat=''
823 pidtype=''
824 prefix=''
825 prefixexp=''
826 installprivlib=''
827 privlib=''
828 privlibexp=''
829 prototype=''
830 ptrsize=''
831 d_PRIX64=''
832 d_PRId64=''
833 d_PRIi64=''
834 d_PRIo64=''
835 d_PRIu64=''
836 d_PRIx64=''
837 sPRIX64=''
838 sPRId64=''
839 sPRIi64=''
840 sPRIo64=''
841 sPRIu64=''
842 sPRIx64=''
843 d_quad=''
844 quadkind=''
845 quadtype=''
846 uquadtype=''
847 drand01=''
848 randbits=''
849 randfunc=''
850 randseedtype=''
851 seedfunc=''
852 installscript=''
853 scriptdir=''
854 scriptdirexp=''
855 selectminbits=''
856 selecttype=''
857 sh=''
858 sig_count=''
859 sig_name=''
860 sig_name_init=''
861 sig_num=''
862 sig_num_init=''
863 installsitearch=''
864 sitearch=''
865 sitearchexp=''
866 installsitebin=''
867 sitebin=''
868 sitebinexp=''
869 installsitelib=''
870 sitelib=''
871 sitelib_stem=''
872 sitelibexp=''
873 siteprefix=''
874 siteprefixexp=''
875 sizesize=''
876 sizetype=''
877 so=''
878 socksizetype=''
879 sharpbang=''
880 shsharp=''
881 spitshell=''
882 src=''
883 ssizetype=''
884 startperl=''
885 startsh=''
886 stdchar=''
887 d_stdio_stream_array=''
888 stdio_stream_array=''
889 sysman=''
890 trnl=''
891 uidformat=''
892 uidsign=''
893 uidsize=''
894 uidtype=''
895 archname64=''
896 use64bitall=''
897 use64bitint=''
898 uselargefiles=''
899 uselongdouble=''
900 usemorebits=''
901 usemultiplicity=''
902 nm_opt=''
903 nm_so_opt=''
904 runnm=''
905 usenm=''
906 useperlio=''
907 usesocks=''
908 d_oldpthreads=''
909 use5005threads=''
910 useithreads=''
911 usethreads=''
912 incpath=''
913 mips_type=''
914 usrinc=''
915 d_vendorarch=''
916 installvendorarch=''
917 vendorarch=''
918 vendorarchexp=''
919 d_vendorbin=''
920 installvendorbin=''
921 vendorbin=''
922 vendorbinexp=''
923 d_vendorlib=''
924 installvendorlib=''
925 vendorlib=''
926 vendorlib_stem=''
927 vendorlibexp=''
928 usevendorprefix=''
929 vendorprefix=''
930 vendorprefixexp=''
931 defvoidused=''
932 voidflags=''
933 pm_apiversion=''
934 xs_apiversion=''
935 CONFIG=''
936
937 define='define'
938 undef='undef'
939 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
940 rmlist=''
941
942 : We must find out about Eunice early
943 eunicefix=':'
944 if test -f /etc/unixtovms; then
945         eunicefix=/etc/unixtovms
946 fi
947 if test -f /etc/unixtovms.exe; then
948         eunicefix=/etc/unixtovms.exe
949 fi
950
951 i_whoami=''
952 : set useposix=false in your hint file to disable the POSIX extension.
953 useposix=true
954 : set useopcode=false in your hint file to disable the Opcode extension.
955 useopcode=true
956 : Trailing extension.  Override this in a hint file, if needed.
957 _exe=''
958 : Extra object files, if any, needed on this platform.
959 archobjs=''
960 : Possible local include directories to search.
961 : Set locincpth to "" in a hint file to defeat local include searches.
962 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
963 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
964 :
965 : no include file wanted by default
966 inclwanted=''
967
968 groupstype=''
969 : change the next line if compiling for Xenix/286 on Xenix/386
970 xlibpth='/usr/lib/386 /lib/386'
971 : Possible local library directories to search.
972 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
973 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
974
975 : general looking path for locating libraries
976 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
977 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
978 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
979 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
980 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
981
982 : Private path used by Configure to find libraries.  Its value
983 : is prepended to libpth. This variable takes care of special
984 : machines, like the mips.  Usually, it should be empty.
985 plibpth=''
986
987 : default library list
988 libswanted=''
989 : some systems want to use only the non-versioned libso:s
990 ignore_versioned_solibs=''
991 : set usemultiplicity on the Configure command line to enable multiplicity.
992 : set usesocks on the Configure command line to enable socks.
993 : set usethreads on the Configure command line to enable threads.
994 : full support for void wanted by default
995 defvoidused=15
996
997 : List of libraries we want.
998 : If anyone needs -lnet, put it in a hint file.
999 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1000 libswanted="$libswanted dld ld sun m c cposix posix"
1001 libswanted="$libswanted ndir dir crypt sec"
1002 libswanted="$libswanted ucb bsd BSD PW x iconv"
1003 : We probably want to search /usr/shlib before most other libraries.
1004 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1005 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1006 glibpth="/usr/shlib $glibpth"
1007 : Do not use vfork unless overridden by a hint file.
1008 usevfork=false
1009
1010 : Find the basic shell for Bourne shell scripts
1011 case "$sh" in
1012 '')
1013         case "$SYSTYPE" in
1014         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1015         *) xxx='/bin/sh';;
1016         esac
1017         if test -f "$xxx"; then
1018                 sh="$xxx"
1019         else
1020                 : Build up a list and do a single loop so we can 'break' out.
1021                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1022                 for xxx in sh bash ksh pdksh ash; do
1023                         for p in $pth; do
1024                                 try="$try ${p}/${xxx}"
1025                         done
1026                 done
1027                 for xxx in $try; do
1028                         if test -f "$xxx"; then
1029                                 sh="$xxx";
1030                                 break
1031                         elif test -f "$xxx.exe"; then
1032                                 sh="$xxx";
1033                                 break
1034                         fi
1035                 done
1036         fi
1037         ;;
1038 esac
1039
1040 case "$sh" in
1041 '')     cat <<EOM >&2
1042 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1043
1044 Usually it's in /bin/sh.  How did you even get this far?
1045 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1046 we'll try to straighten this all out.
1047 EOM
1048         exit 1
1049         ;;
1050 esac
1051
1052 : see if sh knows # comments
1053 if `$sh -c '#' >/dev/null 2>&1`; then
1054         shsharp=true
1055         spitshell=cat
1056         xcat=/bin/cat
1057         test -f $xcat || xcat=/usr/bin/cat
1058         echo "#!$xcat" >try
1059         $eunicefix try
1060         chmod +x try
1061         ./try > today
1062         if test -s today; then
1063                 sharpbang='#!'
1064         else
1065                 echo "#! $xcat" > try
1066                 $eunicefix try
1067                 chmod +x try
1068                 ./try > today
1069                 if test -s today; then
1070                         sharpbang='#! '
1071                 else
1072                         sharpbang=': use '
1073                 fi
1074         fi
1075 else
1076         echo " "
1077         echo "Your $sh doesn't grok # comments--I will strip them later on."
1078         shsharp=false
1079         cd ..
1080         echo "exec grep -v '^[  ]*#'" >spitshell
1081         chmod +x spitshell
1082         $eunicefix spitshell
1083         spitshell=`pwd`/spitshell
1084         cd UU
1085         echo "I presume that if # doesn't work, #! won't work either!"
1086         sharpbang=': use '
1087 fi
1088 rm -f try today
1089
1090 : figure out how to guarantee sh startup
1091 case "$startsh" in
1092 '') startsh=${sharpbang}${sh} ;;
1093 *)
1094 esac
1095 cat >try <<EOSS
1096 $startsh
1097 set abc
1098 test "$?abc" != 1
1099 EOSS
1100
1101 chmod +x try
1102 $eunicefix try
1103 if ./try; then
1104         : echo "Yup, it does."
1105 else
1106         echo "Hmm... '$startsh' does not guarantee sh startup..."
1107         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1108 fi
1109 rm -f try
1110
1111
1112 : Save command line options in file UU/cmdline.opt for later use in
1113 : generating config.sh.
1114 cat > cmdline.opt <<EOSH
1115 # Configure command line arguments.
1116 config_arg0='$0'
1117 config_args='$*'
1118 config_argc=$#
1119 EOSH
1120 argn=1
1121 for arg in "$@"; do
1122         cat >>cmdline.opt <<EOSH
1123 config_arg$argn='$arg'
1124 EOSH
1125         argn=`expr $argn + 1`
1126 done
1127
1128 : produce awk script to parse command line options
1129 cat >options.awk <<'EOF'
1130 BEGIN {
1131         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1132
1133         len = length(optstr);
1134         for (i = 1; i <= len; i++) {
1135                 c = substr(optstr, i, 1);
1136                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1137                 if (a == ":") {
1138                         arg[c] = 1;
1139                         i++;
1140                 }
1141                 opt[c] = 1;
1142         }
1143 }
1144 {
1145         expect = 0;
1146         str = $0;
1147         if (substr(str, 1, 1) != "-") {
1148                 printf("'%s'\n", str);
1149                 next;
1150         }
1151         len = length($0);
1152         for (i = 2; i <= len; i++) {
1153                 c = substr(str, i, 1);
1154                 if (!opt[c]) {
1155                         printf("-%s\n", substr(str, i));
1156                         next;
1157                 }
1158                 printf("-%s\n", c);
1159                 if (arg[c]) {
1160                         if (i < len)
1161                                 printf("'%s'\n", substr(str, i + 1));
1162                         else
1163                                 expect = 1;
1164                         next;
1165                 }
1166         }
1167 }
1168 END {
1169         if (expect)
1170                 print "?";
1171 }
1172 EOF
1173
1174 : process the command line options
1175 set X `for arg in "$@"; do echo "X$arg"; done |
1176         sed -e s/X// | awk -f options.awk`
1177 eval "set $*"
1178 shift
1179 rm -f options.awk
1180
1181 : set up default values
1182 fastread=''
1183 reuseval=false
1184 config_sh=''
1185 alldone=''
1186 error=''
1187 silent=''
1188 extractsh=''
1189 override=''
1190 knowitall=''
1191 rm -f optdef.sh posthint.sh
1192 cat >optdef.sh <<EOS
1193 $startsh
1194 EOS
1195
1196
1197 : option parsing
1198 while test $# -gt 0; do
1199         case "$1" in
1200         -d) shift; fastread=yes;;
1201         -e) shift; alldone=cont;;
1202         -f)
1203                 shift
1204                 cd ..
1205                 if test -r "$1"; then
1206                         config_sh="$1"
1207                 else
1208                         echo "$me: cannot read config file $1." >&2
1209                         error=true
1210                 fi
1211                 cd UU
1212                 shift;;
1213         -h) shift; error=true;;
1214         -r) shift; reuseval=true;;
1215         -s) shift; silent=true; realsilent=true;;
1216         -E) shift; alldone=exit;;
1217         -K) shift; knowitall=true;;
1218         -O) shift; override=true;;
1219         -S) shift; silent=true; extractsh=true;;
1220         -D)
1221                 shift
1222                 case "$1" in
1223                 *=)
1224                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1225                         echo "$me: ignoring -D $1" >&2
1226                         ;;
1227                 *=*) echo "$1" | \
1228                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1229                 *) echo "$1='define'" >> optdef.sh;;
1230                 esac
1231                 shift
1232                 ;;
1233         -U)
1234                 shift
1235                 case "$1" in
1236                 *=) echo "$1" >> optdef.sh;;
1237                 *=*)
1238                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1239                         echo "$me: ignoring -U $1" >&2
1240                         ;;
1241                 *) echo "$1='undef'" >> optdef.sh;;
1242                 esac
1243                 shift
1244                 ;;
1245         -A)
1246             shift
1247             xxx=''
1248             yyy="$1"
1249             zzz=''
1250             uuu=undef
1251             case "$yyy" in
1252             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1253                  case "$zzz" in
1254                  *:*) zzz='' ;;
1255                  *)   xxx=append
1256                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1257                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1258                  esac
1259                  ;;
1260             esac
1261             case "$xxx" in
1262             '')  case "$yyy" in
1263                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1264                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1265                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1266                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1267                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1268                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1269                  esac
1270                  ;;       
1271             esac
1272             case "$xxx" in
1273             append)
1274                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1275             clear)
1276                 echo "$yyy=''"                  >> posthint.sh ;;
1277             define)
1278                 case "$zzz" in
1279                 '') zzz=define ;;
1280                 esac
1281                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1282             eval)
1283                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1284             prepend)
1285                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1286             undef)
1287                 case "$zzz" in
1288                 '') zzz="$uuu" ;;
1289                 esac
1290                 echo "$yyy=$zzz"                >> posthint.sh ;;
1291             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1292             esac
1293             shift
1294             ;;
1295         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1296             exit 0;;
1297         --) break;;
1298         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1299         *) break;;
1300         esac
1301 done
1302
1303 case "$error" in
1304 true)
1305         cat >&2 <<EOM
1306 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1307                  [-U symbol] [-U symbol=] [-A command:symbol...]
1308   -d : use defaults for all answers.
1309   -e : go on without questioning past the production of config.sh.
1310   -f : specify an alternate default configuration file.
1311   -h : print this help message and exit (with an error status).
1312   -r : reuse C symbols value if possible (skips costly nm extraction).
1313   -s : silent mode, only echoes questions and essential information.
1314   -D : define symbol to have some value:
1315          -D symbol         symbol gets the value 'define'
1316          -D symbol=value   symbol gets the value 'value'
1317   -E : stop at the end of questions, after having produced config.sh.
1318   -K : do not use unless you know what you are doing.
1319   -O : let -D and -U override definitions from loaded configuration file.
1320   -S : perform variable substitutions on all .SH files (can mix with -f)
1321   -U : undefine symbol:
1322          -U symbol    symbol gets the value 'undef'
1323          -U symbol=   symbol gets completely empty
1324   -A : manipulate symbol after the platform specific hints have been applied:
1325          -A symbol=value                append " "value to symbol
1326          -A append:symbol=value         append value to symbol
1327          -A define:symbol=value         define symbol to have value
1328          -A clear:symbol                define symbol to be ''
1329          -A define:symbol               define symbol to be 'define'
1330          -A eval:symbol=value           define symbol to be eval of value
1331          -A prepend:symbol=value        prepend value to symbol
1332          -A undef:symbol                define symbol to be 'undef'
1333          -A undef:symbol=               define symbol to be ''
1334   -V : print version number and exit (with a zero status).
1335 EOM
1336         exit 1
1337         ;;
1338 esac
1339
1340 : Sanity checks
1341 case "$fastread$alldone" in
1342 yescont|yesexit) ;;
1343 *)
1344         case "$extractsh" in
1345         true) ;;
1346         *)
1347                 if test ! -t 0; then
1348                         echo "Say 'sh Configure', not 'sh <Configure'"
1349                         exit 1
1350                 fi
1351                 ;;
1352         esac
1353         ;;
1354 esac
1355
1356 exec 4>&1
1357 case "$silent" in
1358 true) exec 1>/dev/null;;
1359 esac
1360
1361 : run the defines and the undefines, if any, but leave the file out there...
1362 touch optdef.sh
1363 . ./optdef.sh
1364 : create the posthint manipulation script and leave the file out there...
1365 touch posthint.sh
1366
1367 : set package name
1368 package=perl5
1369 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1370 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1371 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1372 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1373 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1374 esac
1375
1376 : Some greps do not return status, grrr.
1377 echo "grimblepritz" >grimble
1378 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1379         contains=contains
1380 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1381         contains=grep
1382 else
1383         contains=contains
1384 fi
1385 rm -f grimble
1386 : the following should work in any shell
1387 case "$contains" in
1388 contains*)
1389         echo " "
1390         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1391         cat >contains <<'EOSS'
1392 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1393 EOSS
1394 chmod +x contains
1395 esac
1396
1397 : Find the path to the source tree
1398 case "$src" in
1399 '') case "$0" in
1400     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1401          case "$src" in
1402          /*)    ;;
1403          *)     src=`cd ../$src && pwd` ;;
1404          esac
1405          ;;
1406     *)   src='.';;
1407     esac;;
1408 esac
1409 case "$src" in
1410 '')     src=/
1411         rsrc=/
1412         ;;
1413 /*) rsrc="$src";;
1414 *) rsrc="../$src";;
1415 esac
1416 if test -f $rsrc/Configure && \
1417         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1418 then
1419    : found it, so we are ok.
1420 else
1421         rsrc=''
1422         for src in . .. ../.. ../../.. ../../../..; do
1423                 if test -f ../$src/Configure && \
1424                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1425                 then
1426                         rsrc=../$src
1427                         break
1428                 fi
1429         done
1430 fi
1431 case "$rsrc" in
1432 '')
1433         cat <<EOM >&4
1434
1435 Sorry, I can't seem to locate the source dir for $package.  Please start
1436 Configure with an explicit path -- i.e. /some/path/Configure.
1437
1438 EOM
1439         exit 1
1440         ;;
1441 ../.)   rsrc='..';;
1442 *)
1443         echo " "
1444         echo "Sources for $package found in \"$src\"." >&4
1445         ;;
1446 esac
1447
1448 : script used to extract .SH files with variable substitutions
1449 cat >extract <<'EOS'
1450 CONFIGDOTSH=true
1451 echo "Doing variable substitutions on .SH files..."
1452 if test -f $src/MANIFEST; then
1453         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1454 else
1455         echo "(Looking for .SH files under the source directory.)"
1456         set x `(cd $src; find . -name "*.SH" -print)`
1457 fi
1458 shift
1459 case $# in
1460 0) set x `(cd $src; echo *.SH)`; shift;;
1461 esac
1462 if test ! -f $src/$1; then
1463         shift
1464 fi
1465 mkdir_p='
1466 name=$1;
1467 create="";
1468 while test $name; do
1469         if test ! -d "$name"; then
1470                 create="$name $create";
1471                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1472                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1473         else
1474                 name="";
1475         fi;
1476 done;
1477 for file in $create; do
1478         mkdir $file;
1479 done
1480 '
1481 for file in $*; do
1482         case "$src" in
1483         ".")
1484                 case "$file" in
1485                 */*)
1486                         dir=`expr X$file : 'X\(.*\)/'`
1487                         file=`expr X$file : 'X.*/\(.*\)'`
1488                         (cd $dir && . ./$file)
1489                         ;;
1490                 *)
1491                         . ./$file
1492                         ;;
1493                 esac
1494                 ;;
1495         *)
1496                 case "$file" in
1497                 */*)
1498                         dir=`expr X$file : 'X\(.*\)/'`
1499                         file=`expr X$file : 'X.*/\(.*\)'`
1500                         (set x $dir; shift; eval $mkdir_p)
1501                         sh <$src/$dir/$file
1502                         ;;
1503                 *)
1504                         sh <$src/$file
1505                         ;;
1506                 esac
1507                 ;;
1508         esac
1509 done
1510 if test -f $src/config_h.SH; then
1511         if test ! -f config.h; then
1512         : oops, they left it out of MANIFEST, probably, so do it anyway.
1513         . $src/config_h.SH
1514         fi
1515 fi
1516 EOS
1517
1518 : extract files and exit if asked to do so
1519 case "$extractsh" in
1520 true)
1521         case "$realsilent" in
1522         true) ;;
1523         *) exec 1>&4;;
1524         esac
1525         case "$config_sh" in
1526         '') config_sh='config.sh';;
1527         esac
1528         echo " "
1529         echo "Fetching answers from $config_sh..."
1530         cd ..
1531         . $config_sh
1532         test "$override" && . ./optdef.sh
1533         echo " "
1534         . UU/extract
1535         rm -rf UU
1536         echo "Done."
1537         exit 0
1538         ;;
1539 esac
1540
1541 : Eunice requires " " instead of "", can you believe it
1542 echo " "
1543 : Here we go...
1544 echo "Beginning of configuration questions for $package."
1545
1546 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1547
1548 : first determine how to suppress newline on echo command
1549 echo " "
1550 echo "Checking echo to see how to suppress newlines..."
1551 (echo "hi there\c" ; echo " ") >.echotmp
1552 if $contains c .echotmp >/dev/null 2>&1 ; then
1553         echo "...using -n."
1554         n='-n'
1555         c=''
1556 else
1557         cat <<'EOM'
1558 ...using \c
1559 EOM
1560         n=''
1561         c='\c'
1562 fi
1563 echo $n "The star should be here-->$c"
1564 echo '*'
1565 rm -f .echotmp
1566
1567 : Now test for existence of everything in MANIFEST
1568 echo " "
1569 if test -f $rsrc/MANIFEST; then
1570         echo "First let's make sure your kit is complete.  Checking..." >&4
1571         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1572         rm -f missing
1573         tmppwd=`pwd`
1574         for filelist in x??; do
1575                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1576         done
1577         if test -s missing; then
1578                 cat missing >&4
1579                 cat >&4 <<'EOM'
1580
1581 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1582
1583 You have the option of continuing the configuration process, despite the
1584 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1585 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1586 and contact the author (perlbug@perl.com).
1587
1588 EOM
1589                 echo $n "Continue? [n] $c" >&4
1590                 read ans
1591                 case "$ans" in
1592                 y*)
1593                         echo "Continuing..." >&4
1594                         rm -f missing
1595                         ;;
1596                 *)
1597                         echo "ABORTING..." >&4
1598                         kill $$
1599                         ;;
1600                 esac
1601         else
1602                 echo "Looks good..."
1603         fi
1604 else
1605         echo "There is no MANIFEST file.  I hope your kit is complete !"
1606 fi
1607 rm -f missing x??
1608
1609 echo " "
1610 : Find the appropriate value for a newline for tr
1611 if test -n "$DJGPP"; then
1612        trnl='\012'
1613 fi
1614 if test X"$trnl" = X; then
1615         case "`echo foo|tr '\n' x 2>/dev/null`" in
1616         foox) trnl='\n' ;;
1617         esac
1618 fi
1619 if test X"$trnl" = X; then
1620         case "`echo foo|tr '\012' x 2>/dev/null`" in
1621         foox) trnl='\012' ;;
1622         esac
1623 fi
1624 if test X"$trnl" = X; then
1625         cat <<EOM >&2
1626
1627 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1628
1629 EOM
1630         exit 1
1631 fi
1632
1633 : compute the number of columns on the terminal for proper question formatting
1634 case "$COLUMNS" in
1635 '') COLUMNS='80';;
1636 esac
1637
1638 : set up the echo used in my read
1639 myecho="case \"\$xxxm\" in
1640 '') echo $n \"\$rp $c\" >&4;;
1641 *) case \"\$rp\" in
1642         '') echo $n \"[\$xxxm] $c\";;
1643         *)
1644                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1645                         echo \"\$rp\" >&4
1646                         echo $n \"[\$xxxm] $c\" >&4
1647                 else
1648                         echo $n \"\$rp [\$xxxm] $c\" >&4
1649                 fi
1650                 ;;
1651         esac;;
1652 esac"
1653
1654 : now set up to do reads with possible shell escape and default assignment
1655 cat <<EOSC >myread
1656 $startsh
1657 xxxm=\$dflt
1658 $myecho
1659 ans='!'
1660 case "\$fastread" in
1661 yes) case "\$dflt" in
1662         '') ;;
1663         *) ans='';
1664                 case "\$silent-\$rp" in
1665                 true-) ;;
1666                 *) echo " " >&4;;
1667                 esac;;
1668         esac;;
1669 *) case "\$silent" in
1670         true) case "\$rp" in
1671                 '') ans='';;
1672                 esac;;
1673         esac;;
1674 esac
1675 while expr "X\$ans" : "X!" >/dev/null; do
1676         read answ
1677         set x \$xxxm
1678         shift
1679         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1680         case  "\$answ" in
1681         "!")
1682                 sh 1>&4
1683                 echo " "
1684                 $myecho
1685                 ;;
1686         !*)
1687                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1688                 shift
1689                 sh 1>&4 -c "\$*"
1690                 echo " "
1691                 $myecho
1692                 ;;
1693         "\$ans")
1694                 case "\$ans" in
1695                 \\&*)
1696                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1697                         shift
1698                         case "\$1" in
1699                         -d)
1700                                 fastread=yes
1701                                 echo "(OK, I'll run with -d after this question.)" >&4
1702                                 ;;
1703                         -*)
1704                                 echo "*** Sorry, \$1 not supported yet." >&4
1705                                 ;;
1706                         esac
1707                         $myecho
1708                         ans=!
1709                         ;;
1710                 esac;;
1711         *)
1712                 case "\$aok" in
1713                 y)
1714                         echo "*** Substitution done -- please confirm."
1715                         xxxm="\$ans"
1716                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1717                         xxxm="\$ans"
1718                         ans=!
1719                         ;;
1720                 *)
1721                         echo "*** Error -- try again."
1722                         ans=!
1723                         ;;
1724                 esac
1725                 $myecho
1726                 ;;
1727         esac
1728         case "\$ans\$xxxm\$nostick" in
1729         '')
1730                 ans=!
1731                 $myecho
1732                 ;;
1733         esac
1734 done
1735 case "\$ans" in
1736 '') ans="\$xxxm";;
1737 esac
1738 EOSC
1739
1740 : create .config dir to save info across Configure sessions
1741 test -d ../.config || mkdir ../.config
1742 cat >../.config/README <<EOF
1743 This directory created by Configure to save information that should
1744 persist across sessions for $package.
1745
1746 You may safely delete it if you wish.
1747 EOF
1748
1749 : general instructions
1750 needman=true
1751 firsttime=true
1752 user=`(logname) 2>/dev/null`
1753 case "$user" in
1754 '') user=`whoami 2>&1`;;
1755 esac
1756 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1757         firsttime=false
1758         echo " "
1759         rp='Would you like to see the instructions?'
1760         dflt=n
1761         . ./myread
1762         case "$ans" in
1763         [yY]*) ;;
1764         *) needman=false;;
1765         esac
1766 fi
1767 if $needman; then
1768         cat <<EOH
1769
1770 This installation shell script will examine your system and ask you questions
1771 to determine how the perl5 package should be installed. If you get
1772 stuck on a question, you may use a ! shell escape to start a subshell or
1773 execute a command.  Many of the questions will have default answers in square
1774 brackets; typing carriage return will give you the default.
1775
1776 On some of the questions which ask for file or directory names you are allowed
1777 to use the ~name construct to specify the login directory belonging to "name",
1778 even if you don't have a shell which knows about that.  Questions where this is
1779 allowed will be marked "(~name ok)".
1780
1781 EOH
1782         rp=''
1783         dflt='Type carriage return to continue'
1784         . ./myread
1785         cat <<'EOH'
1786
1787 The prompter used in this script allows you to use shell variables and
1788 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1789 in the default answer, as if the default line was a set of arguments given to a
1790 script shell.  This means you may also use $* to repeat the whole default line,
1791 so you do not have to re-type everything to add something to the default.
1792
1793 Everytime there is a substitution, you will have to confirm.  If there is an
1794 error (e.g. an unmatched backtick), the default answer will remain unchanged
1795 and you will be prompted again.
1796
1797 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1798 the questions and use the computed defaults (or the previous answers if there
1799 was already a config.sh file). Type 'Configure -h' for a list of options.
1800 You may also start interactively and then answer '& -d' at any prompt to turn
1801 on the non-interactive behaviour for the remainder of the execution.
1802
1803 EOH
1804         . ./myread
1805         cat <<EOH
1806
1807 Much effort has been expended to ensure that this shell script will run on any
1808 Unix system.  If despite that it blows up on yours, your best bet is to edit
1809 Configure and run it again.  If you can't run Configure for some reason,
1810 you'll have to generate a config.sh file by hand.  Whatever problems you
1811 have, let me (perlbug@perl.com) know how I blew it.
1812
1813 This installation script affects things in two ways:
1814
1815 1) it may do direct variable substitutions on some of the files included
1816    in this kit.
1817 2) it builds a config.h file for inclusion in C programs.  You may edit
1818    any of these files as the need arises after running this script.
1819
1820 If you make a mistake on a question, there is no easy way to back up to it
1821 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1822 files.  Configure will offer to let you do this before it runs the SH files.
1823
1824 EOH
1825         dflt='Type carriage return to continue'
1826         . ./myread
1827         case "$firsttime" in
1828         true) echo $user >>../.config/instruct;;
1829         esac
1830 fi
1831
1832 : find out where common programs are
1833 echo " "
1834 echo "Locating common programs..." >&4
1835 cat <<EOSC >loc
1836 $startsh
1837 case \$# in
1838 0) exit 1;;
1839 esac
1840 thing=\$1
1841 shift
1842 dflt=\$1
1843 shift
1844 for dir in \$*; do
1845         case "\$thing" in
1846         .)
1847         if test -d \$dir/\$thing; then
1848                 echo \$dir
1849                 exit 0
1850         fi
1851         ;;
1852         *)
1853         for thisthing in \$dir/\$thing; do
1854                 : just loop through to pick last item
1855         done
1856         if test -f \$thisthing; then
1857                 echo \$thisthing
1858                 exit 0
1859         elif test -f \$dir/\$thing.exe; then
1860                 if test -n "$DJGPP"; then
1861                         echo \$dir/\$thing.exe
1862                 else
1863                         : on Eunice apparently
1864                         echo \$dir/\$thing
1865                 fi
1866                 exit 0
1867         fi
1868         ;;
1869         esac
1870 done
1871 echo \$dflt
1872 exit 1
1873 EOSC
1874 chmod +x loc
1875 $eunicefix loc
1876 loclist="
1877 awk
1878 cat
1879 comm
1880 cp
1881 echo
1882 expr
1883 grep
1884 ls
1885 make
1886 mkdir
1887 rm
1888 sed
1889 sort
1890 touch
1891 tr
1892 uniq
1893 "
1894 trylist="
1895 Mcc
1896 ar
1897 byacc
1898 cpp
1899 csh
1900 date
1901 egrep
1902 gzip
1903 less
1904 ln
1905 more
1906 nm
1907 nroff
1908 pg
1909 test
1910 uname
1911 zip
1912 "
1913 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1914 pth="$pth /lib /usr/lib"
1915 for file in $loclist; do
1916         eval xxx=\$$file
1917         case "$xxx" in
1918         /*|?:[\\/]*)
1919                 if test -f "$xxx"; then
1920                         : ok
1921                 else
1922                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1923                         xxx=`./loc $file $file $pth`
1924                 fi
1925                 ;;
1926         '') xxx=`./loc $file $file $pth`;;
1927         *) xxx=`./loc $xxx $xxx $pth`;;
1928         esac
1929         eval $file=$xxx
1930         eval _$file=$xxx
1931         case "$xxx" in
1932         /*)
1933                 echo $file is in $xxx.
1934                 ;;
1935         ?:[\\/]*)
1936                 echo $file is in $xxx.
1937                 ;;
1938         *)
1939                 echo "I don't know where '$file' is, and my life depends on it." >&4
1940                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1941                 exit 1
1942                 ;;
1943         esac
1944 done
1945 echo " "
1946 echo "Don't worry if any of the following aren't found..."
1947 say=offhand
1948 for file in $trylist; do
1949         eval xxx=\$$file
1950         case "$xxx" in
1951         /*|?:[\\/]*)
1952                 if test -f "$xxx"; then
1953                         : ok
1954                 else
1955                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1956                         xxx=`./loc $file $file $pth`
1957                 fi
1958                 ;;
1959         '') xxx=`./loc $file $file $pth`;;
1960         *) xxx=`./loc $xxx $xxx $pth`;;
1961         esac
1962         eval $file=$xxx
1963         eval _$file=$xxx
1964         case "$xxx" in
1965         /*)
1966                 echo $file is in $xxx.
1967                 ;;
1968         ?:[\\/]*)
1969                 echo $file is in $xxx.
1970                 ;;
1971         *)
1972                 echo "I don't see $file out there, $say."
1973                 say=either
1974                 ;;
1975         esac
1976 done
1977 case "$egrep" in
1978 egrep)
1979         echo "Substituting grep for egrep."
1980         egrep=$grep
1981         ;;
1982 esac
1983 case "$ln" in
1984 ln)
1985         echo "Substituting cp for ln."
1986         ln=$cp
1987         ;;
1988 esac
1989 case "$test" in
1990 test)
1991         echo "Hopefully test is built into your sh."
1992         ;;
1993 *)
1994         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1995                 echo "Using the test built into your sh."
1996                 test=test
1997                 _test=test
1998         fi
1999         ;;
2000 esac
2001 case "$echo" in
2002 echo)
2003         echo "Hopefully echo is built into your sh."
2004         ;;
2005 '') ;;
2006 *)
2007         echo " "
2008 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2009         $echo $n "hi there$c" >foo1
2010         echo $n "hi there$c" >foo2
2011         if cmp foo1 foo2 >/dev/null 2>&1; then
2012                 echo "They are compatible.  In fact, they may be identical."
2013         else
2014                 case "$n" in
2015                 '-n') n='' c='\c';;
2016                 *) n='-n' c='';;
2017                 esac
2018                 cat <<FOO
2019 They are not compatible!  You are probably running ksh on a non-USG system.
2020 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2021 have echo built in and we may have to run some Bourne shell scripts.  That
2022 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2023
2024 FOO
2025                 $echo $n "The star should be here-->$c"
2026                 $echo "*"
2027         fi
2028         $rm -f foo1 foo2
2029         ;;
2030 esac
2031
2032 : determine whether symbolic links are supported
2033 echo " "
2034 $touch blurfl
2035 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2036         echo "Symbolic links are supported." >&4
2037         lns="$ln -s"
2038 else
2039         echo "Symbolic links are NOT supported." >&4
2040         lns="$ln"
2041 fi
2042 $rm -f blurfl sym
2043
2044 : see whether [:lower:] and [:upper:] are supported character classes
2045 echo " "
2046 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2047 ABYZ)
2048         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2049         up='[:upper:]'
2050         low='[:lower:]'
2051         ;;
2052 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2053         # (0xc9 and 0xd1), therefore that is a nice testing point.
2054         if test "X$up" = X -o "X$low" = X; then
2055             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2056             ij) up='[A-Z]'
2057                 low='[a-z]'
2058                 ;;
2059             esac
2060         fi
2061         if test "X$up" = X -o "X$low" = X; then
2062             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2063             ij) up='A-Z'
2064                 low='a-z'
2065                 ;;
2066             esac
2067         fi
2068         if test "X$up" = X -o "X$low" = X; then
2069             case "`echo IJ | od -x 2>/dev/null`" in
2070             *C9D1*|*c9d1*)
2071                 echo "Hey, this might be EBCDIC." >&4
2072                 if test "X$up" = X -o "X$low" = X; then
2073                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2074                     ij) up='[A-IJ-RS-Z]'
2075                         low='[a-ij-rs-z]'
2076                         ;;
2077                     esac
2078                 fi
2079                 if test "X$up" = X -o "X$low" = X; then
2080                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2081                     ij) up='A-IJ-RS-Z'
2082                         low='a-ij-rs-z'
2083                         ;;
2084                     esac
2085                 fi
2086                 ;;
2087             esac
2088         fi
2089 esac
2090 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2091 ij)
2092     echo "Using $up and $low to convert case." >&4
2093     ;;
2094 *)
2095     echo "I don't know how to translate letters from upper to lower case." >&4
2096     echo "Your tr is not acting any way I know of." >&4
2097     exit 1
2098     ;;
2099 esac
2100 : set up the translation script tr, must be called with ./tr of course
2101 cat >tr <<EOSC
2102 $startsh
2103 case "\$1\$2" in
2104 '[A-Z][a-z]') exec $tr '$up' '$low';;
2105 '[a-z][A-Z]') exec $tr '$low' '$up';;
2106 esac
2107 exec $tr "\$@"
2108 EOSC
2109 chmod +x tr
2110 $eunicefix tr
2111
2112 : Try to determine whether config.sh was made on this system
2113 case "$config_sh" in
2114 '')
2115 myuname=`$uname -a 2>/dev/null`
2116 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2117 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2118 # because the A-Z/a-z are not consecutive.
2119 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2120         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2121 newmyuname="$myuname"
2122 dflt=n
2123 case "$knowitall" in
2124 '')
2125         if test -f ../config.sh; then
2126                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2127                         eval "`grep myuname= ../config.sh`"
2128                 fi
2129                 if test "X$myuname" = "X$newmyuname"; then
2130                         dflt=y
2131                 fi
2132         fi
2133         ;;
2134 *) dflt=y;;
2135 esac
2136
2137 : Get old answers from old config file if Configure was run on the
2138 : same system, otherwise use the hints.
2139 hint=default
2140 cd ..
2141 if test -f config.sh; then
2142         echo " "
2143         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2144         . UU/myread
2145         case "$ans" in
2146         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2147         *)  echo "Fetching default answers from your old config.sh file..." >&4
2148                 tmp_n="$n"
2149                 tmp_c="$c"
2150                 tmp_sh="$sh"
2151                 . ./config.sh
2152                 cp config.sh UU
2153                 n="$tmp_n"
2154                 c="$tmp_c"
2155                 : Older versions did not always set $sh.  Catch re-use of such
2156                 : an old config.sh.
2157                 case "$sh" in
2158                 '') sh="$tmp_sh" ;;
2159                 esac
2160                 hint=previous
2161                 ;;
2162         esac
2163 fi
2164 if test ! -f config.sh; then
2165         $cat <<EOM
2166
2167 First time through, eh?  I have some defaults handy for some systems
2168 that need some extra help getting the Configure answers right:
2169
2170 EOM
2171         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2172         dflt=''
2173         : Half the following guesses are probably wrong... If you have better
2174         : tests or hints, please send them to perlbug@perl.com
2175         : The metaconfig authors would also appreciate a copy...
2176         $test -f /irix && osname=irix
2177         $test -f /xenix && osname=sco_xenix
2178         $test -f /dynix && osname=dynix
2179         $test -f /dnix && osname=dnix
2180         $test -f /lynx.os && osname=lynxos
2181         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2182         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2183         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2184         $test -f /bin/mips && /bin/mips && osname=mips
2185         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2186                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2187         $test -d /usr/apollo/bin && osname=apollo
2188         $test -f /etc/saf/_sactab && osname=svr4
2189         $test -d /usr/include/minix && osname=minix
2190         if $test -d /MachTen -o -d /MachTen_Folder; then
2191                 osname=machten
2192                 if $test -x /sbin/version; then
2193                         osvers=`/sbin/version | $awk '{print $2}' |
2194                         $sed -e 's/[A-Za-z]$//'`
2195                 elif $test -x /usr/etc/version; then
2196                         osvers=`/usr/etc/version | $awk '{print $2}' |
2197                         $sed -e 's/[A-Za-z]$//'`
2198                 else
2199                         osvers="$2.$3"
2200                 fi
2201         fi
2202
2203         $test -f /sys/posix.dll &&
2204                 $test -f /usr/bin/what &&
2205                 set X `/usr/bin/what /sys/posix.dll` &&
2206                 $test "$3" = UWIN &&
2207                 osname=uwin &&
2208                 osvers="$5"
2209
2210         if $test -f $uname; then
2211                 set X $myuname
2212                 shift
2213
2214                 case "$5" in
2215                 fps*) osname=fps ;;
2216                 mips*)
2217                         case "$4" in
2218                         umips) osname=umips ;;
2219                         *) osname=mips ;;
2220                         esac;;
2221                 [23]100) osname=mips ;;
2222                 next*) osname=next ;;
2223                 i386*)
2224                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2225                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2226                                 osname='sco'
2227                                 osvers=$tmp
2228                         elif $test -f /etc/kconfig; then
2229                                 osname=isc
2230                                 if test "$lns" = "$ln -s"; then
2231                                         osvers=4
2232                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2233                                         osvers=3
2234                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2235                                         osvers=2
2236                                 fi
2237                         fi
2238                         tmp=''
2239                         ;;
2240                 pc*)
2241                         if test -n "$DJGPP"; then
2242                                 osname=dos
2243                                 osvers=djgpp
2244                         fi
2245                         ;;
2246                 esac
2247
2248                 case "$1" in
2249                 aix) osname=aix
2250                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2251                         case "$tmp" in
2252                         'not found') osvers="$4"."$3" ;;
2253                         '<3240'|'<>3240') osvers=3.2.0 ;;
2254                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2255                         '=3250'|'>3250') osvers=3.2.5 ;;
2256                         *) osvers=$tmp;;
2257                         esac
2258                         ;;
2259                 bsd386) osname=bsd386
2260                         osvers=`$uname -r`
2261                         ;;
2262                 cygwin*) osname=cygwin
2263                         osvers="$3"
2264                         ;;
2265                 *dc.osx) osname=dcosx
2266                         osvers="$3"
2267                         ;;
2268                 dnix) osname=dnix
2269                         osvers="$3"
2270                         ;;
2271                 domainos) osname=apollo
2272                         osvers="$3"
2273                         ;;
2274                 dgux) osname=dgux 
2275                         osvers="$3"
2276                         ;;
2277                 dynixptx*) osname=dynixptx
2278                         osvers=`echo "$4"|sed 's/^v//'`
2279                         ;;
2280                 freebsd) osname=freebsd 
2281                         osvers="$3" ;;
2282                 genix) osname=genix ;;
2283                 hp*) osname=hpux 
2284                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2285                         ;;
2286                 irix*) osname=irix
2287                         case "$3" in
2288                         4*) osvers=4 ;;
2289                         5*) osvers=5 ;;
2290                         *)      osvers="$3" ;;
2291                         esac
2292                         ;;
2293                 linux) osname=linux
2294                         case "$3" in
2295                         *)      osvers="$3" ;;
2296                         esac
2297                         ;;
2298                 MiNT) osname=mint
2299                         ;;
2300                 netbsd*) osname=netbsd
2301                         osvers="$3"
2302                         ;;
2303                 news-os) osvers="$3"
2304                         case "$3" in
2305                         4*) osname=newsos4 ;;
2306                         *) osname=newsos ;;
2307                         esac
2308                         ;;
2309                 next*) osname=next ;;
2310                 POSIX-BC | posix-bc ) osname=posix-bc
2311                         osvers="$3"
2312                         ;;
2313                 powerux | power_ux | powermax_os | powermaxos | \
2314                 powerunix | power_unix) osname=powerux
2315                         osvers="$3"
2316                         ;;
2317                 qnx) osname=qnx
2318                         osvers="$4"
2319                         ;;
2320                 solaris) osname=solaris
2321                         case "$3" in
2322                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2323                         *)      osvers="$3" ;;
2324                         esac
2325                         ;;
2326                 sunos) osname=sunos
2327                         case "$3" in
2328                         5*) osname=solaris
2329                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2330                         *)      osvers="$3" ;;
2331                         esac
2332                         ;;
2333                 titanos) osname=titanos
2334                         case "$3" in
2335                         1*) osvers=1 ;;
2336                         2*) osvers=2 ;;
2337                         3*) osvers=3 ;;
2338                         4*) osvers=4 ;;
2339                         *)      osvers="$3" ;;
2340                         esac
2341                         ;;
2342                 ultrix) osname=ultrix
2343                         osvers="$3"
2344                         ;;
2345                 osf1|mls+)      case "$5" in
2346                                 alpha)
2347                                         osname=dec_osf
2348                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2349                                         ;;
2350                         hp*)    osname=hp_osf1  ;;
2351                         mips)   osname=mips_osf1 ;;
2352                         esac
2353                         ;;
2354                 unixware) osname=svr5
2355                         osvers="$4"
2356                         ;;
2357                 uts) osname=uts
2358                         osvers="$3"
2359                         ;;
2360                 $2) case "$osname" in
2361                         *isc*) ;;
2362                         *freebsd*) ;;
2363                         svr*)
2364                                 : svr4.x or possibly later
2365                                 case "svr$3" in 
2366                                 ${osname}*)
2367                                         osname=svr$3
2368                                         osvers=$4
2369                                         ;;
2370                                 esac
2371                                 case "$osname" in
2372                                 svr4.0)
2373                                         : Check for ESIX
2374                                         if test -f /stand/boot ; then
2375                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2376                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2377                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2378                                                         if test -n "$isesix"; then
2379                                                                 osname=esix4
2380                                                         fi
2381                                                 fi
2382                                         fi
2383                                         ;;
2384                                 esac
2385                                 ;;
2386                         *)      if test -f /etc/systemid; then
2387                                         osname=sco
2388                                         set `echo $3 | $sed 's/\./ /g'` $4
2389                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2390                                                 osvers=$1.$2.$3
2391                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2392                                                 osvers=$1.$2
2393                                         elif $test -f $src/hints/sco_$1.sh; then
2394                                                 osvers=$1
2395                                         fi
2396                                 else
2397                                         case "$osname" in
2398                                         '') : Still unknown.  Probably a generic Sys V.
2399                                                 osname="sysv"
2400                                                 osvers="$3"
2401                                                 ;;
2402                                         esac
2403                                 fi
2404                                 ;;
2405                         esac
2406                         ;;
2407                 *)      case "$osname" in
2408                         '') : Still unknown.  Probably a generic BSD.
2409                                 osname="$1"
2410                                 osvers="$3"
2411                                 ;;
2412                         esac
2413                         ;;
2414                 esac
2415         else
2416                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2417                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2418                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2419                                 osname=news_os
2420                         fi
2421                         $rm -f UU/kernel.what
2422                 elif test -d c:/.; then
2423                         set X $myuname
2424                         osname=os2
2425                         osvers="$5"
2426                 fi
2427         fi
2428         
2429         : Now look for a hint file osname_osvers, unless one has been
2430         : specified already.
2431         case "$hintfile" in
2432         ''|' ')
2433                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2434                 : Also try without trailing minor version numbers.
2435                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2436                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2437                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2438                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2439                 case "$file" in
2440                 '') dflt=none ;;
2441                 *)  case "$osvers" in
2442                         '') dflt=$file
2443                                 ;;
2444                         *)  if $test -f $src/hints/$file.sh ; then
2445                                         dflt=$file
2446                                 elif $test -f $src/hints/$xfile.sh ; then
2447                                         dflt=$xfile
2448                                 elif $test -f $src/hints/$xxfile.sh ; then
2449                                         dflt=$xxfile
2450                                 elif $test -f $src/hints/$xxxfile.sh ; then
2451                                         dflt=$xxxfile
2452                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2453                                         dflt=$xxxxfile
2454                                 elif $test -f "$src/hints/${osname}.sh" ; then
2455                                         dflt="${osname}"
2456                                 else
2457                                         dflt=none
2458                                 fi
2459                                 ;;
2460                         esac
2461                         ;;
2462                 esac
2463                 if $test -f Policy.sh ; then
2464                         case "$dflt" in
2465                         *Policy*) ;;
2466                         none) dflt="Policy" ;;
2467                         *) dflt="Policy $dflt" ;;
2468                         esac
2469                 fi
2470                 ;;
2471         *)
2472                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2473                 ;;
2474         esac
2475
2476         if $test -f Policy.sh ; then
2477                 $cat <<EOM
2478
2479 There's also a Policy hint file available, which should make the
2480 site-specific (policy) questions easier to answer.
2481 EOM
2482
2483         fi
2484
2485         $cat <<EOM
2486
2487 You may give one or more space-separated answers, or "none" if appropriate.
2488 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2489 is a good thing.  DO NOT give a wrong version or a wrong OS.
2490
2491 EOM
2492
2493         rp="Which of these apply, if any?"
2494         . UU/myread
2495         tans=$ans
2496         for file in $tans; do
2497                 if $test X$file = XPolicy -a -f Policy.sh; then
2498                         . Policy.sh
2499                         $cat Policy.sh >> UU/config.sh
2500                 elif $test -f $src/hints/$file.sh; then
2501                         . $src/hints/$file.sh
2502                         $cat $src/hints/$file.sh >> UU/config.sh
2503                 elif $test X$tans = X -o X$tans = Xnone ; then
2504                         : nothing
2505                 else
2506                         : Give one chance to correct a possible typo.
2507                         echo "$file.sh does not exist"
2508                         dflt=$file
2509                         rp="hint to use instead?"
2510                         . UU/myread
2511                         for file in $ans; do
2512                                 if $test -f "$src/hints/$file.sh"; then
2513                                         . $src/hints/$file.sh
2514                                         $cat $src/hints/$file.sh >> UU/config.sh
2515                                 elif $test X$ans = X -o X$ans = Xnone ; then
2516                                         : nothing
2517                                 else
2518                                         echo "$file.sh does not exist -- ignored."
2519                                 fi
2520                         done
2521                 fi
2522         done
2523
2524         hint=recommended
2525         : Remember our hint file for later.
2526         if $test -f "$src/hints/$file.sh" ; then
2527                 hintfile="$file"
2528         else
2529                 hintfile=''
2530         fi
2531 fi
2532 cd UU
2533 ;;
2534 *)
2535         echo " "
2536         echo "Fetching default answers from $config_sh..." >&4
2537         tmp_n="$n"
2538         tmp_c="$c"
2539         cd ..
2540         cp $config_sh config.sh 2>/dev/null
2541         chmod +w config.sh
2542         . ./config.sh
2543         cd UU
2544         cp ../config.sh .
2545         n="$tmp_n"
2546         c="$tmp_c"
2547         hint=previous
2548         ;;
2549 esac
2550 test "$override" && . ./optdef.sh
2551 myuname="$newmyuname"
2552
2553 : Restore computed paths
2554 for file in $loclist $trylist; do
2555         eval $file="\$_$file"
2556 done
2557
2558 cat << EOM
2559
2560 Configure uses the operating system name and version to set some defaults.
2561 The default value is probably right if the name rings a bell. Otherwise,
2562 since spelling matters for me, either accept the default or answer "none"
2563 to leave it blank.
2564
2565 EOM
2566 case "$osname" in
2567         ''|' ')
2568                 case "$hintfile" in
2569                 ''|' '|none) dflt=none ;;
2570                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2571                 esac
2572                 ;;
2573         *) dflt="$osname" ;;
2574 esac
2575 rp="Operating system name?"
2576 . ./myread
2577 case "$ans" in
2578 none)  osname='' ;;
2579 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2580 esac
2581 echo " "
2582 case "$osvers" in
2583         ''|' ')
2584                 case "$hintfile" in
2585                 ''|' '|none) dflt=none ;;
2586                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2587                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2588                         case "$dflt" in
2589                         ''|' ') dflt=none ;;
2590                         esac
2591                         ;;
2592                 esac
2593                 ;;
2594         *) dflt="$osvers" ;;
2595 esac
2596 rp="Operating system version?"
2597 . ./myread
2598 case "$ans" in
2599 none)  osvers='' ;;
2600 *) osvers="$ans" ;;
2601 esac
2602
2603
2604 . ./posthint.sh
2605
2606 : who configured the system
2607 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2608 cf_by=`(logname) 2>/dev/null`
2609 case "$cf_by" in
2610 "")
2611         cf_by=`(whoami) 2>/dev/null`
2612         case "$cf_by" in
2613         "") cf_by=unknown ;;
2614         esac ;;
2615 esac
2616
2617 : set up the script used to warn in case of inconsistency
2618 cat <<EOS >whoa
2619 $startsh
2620 EOS
2621 cat <<'EOSC' >>whoa
2622 dflt=y
2623 echo " "
2624 echo "*** WHOA THERE!!! ***" >&4
2625 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2626 rp="    Keep the $hint value?"
2627 . ./myread
2628 case "$ans" in
2629 y) td=$was; tu=$was;;
2630 esac
2631 EOSC
2632
2633 : function used to set $1 to $val
2634 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2635 case "$val$was" in
2636 $define$undef) . ./whoa; eval "$var=\$td";;
2637 $undef$define) . ./whoa; eval "$var=\$tu";;
2638 *) eval "$var=$val";;
2639 esac'
2640
2641 case "$usethreads" in
2642 $define|true|[yY]*)     dflt='y';;
2643 *) dflt='n';;
2644 esac
2645 cat <<EOM
2646
2647 Perl can be built to take advantage of threads on some systems.
2648 To do so, Configure can be run with -Dusethreads.
2649
2650 Note that threading is a highly experimental feature, and
2651 some known race conditions still remain.  If you choose to try
2652 it, be very sure to not actually deploy it for production
2653 purposes.  README.threads has more details, and is required
2654 reading if you enable threads.
2655
2656 If this doesn't make any sense to you, just accept the default '$dflt'.
2657 EOM
2658 rp='Build a threading Perl?'
2659 . ./myread
2660 case "$ans" in
2661 y|Y)    val="$define" ;;
2662 *)      val="$undef" ;;
2663 esac
2664 set usethreads
2665 eval $setvar
2666
2667 case "$usethreads" in
2668 $define)
2669         $cat <<EOM
2670
2671 As of 5.5.640, Perl has two different internal threading implementations,
2672 the 5.005 version (5005threads) and an interpreter-based version
2673 (ithreads) that has one interpreter per thread.  Both are very 
2674 experimental.  This arrangement exists to help developers work out
2675 which one is better.
2676
2677 If you're a casual user, you probably don't want interpreter-threads
2678 at this time.  There doesn't yet exist a way to create threads from
2679 within Perl in this model, i.e., "use Thread;" will NOT work.
2680 EOM
2681         : Default to ithreads unless overridden on command line or with
2682         : old config.sh
2683         dflt='y'
2684         case "$use5005threads" in
2685                 $define|true|[yY]*) dflt='n';;
2686         esac
2687         case "$useithreads" in
2688                 $undef|false|[nN]*) dflt='n';;
2689         esac
2690         rp='Use interpreter-based ithreads?'
2691         . ./myread
2692         case "$ans" in
2693         y|Y)    val="$define" ;;
2694         *)      val="$undef" ;;
2695         esac
2696         set useithreads
2697         eval $setvar
2698         : Now set use5005threads to the opposite value.
2699         case "$useithreads" in
2700         $define) val="$undef" ;;
2701         *) val="$define" ;;
2702         esac
2703         set use5005threads
2704         eval $setvar
2705         ;;
2706 *)
2707         useithreads="$undef"
2708         use5005threads="$undef"
2709         ;;
2710 esac
2711
2712 case "$d_oldpthreads" in
2713 '')     : Configure tests would be welcome here.  For now, assume undef.
2714         val="$undef" ;;
2715 *)      val="$d_oldpthreads" ;;
2716 esac
2717 set d_oldpthreads
2718 eval $setvar
2719
2720
2721 case "$usethreads" in
2722 "$define"|true|[yY]*)
2723 : Look for a hint-file generated 'call-back-unit'.  If the
2724 : user has specified that a threading perl is to be built,
2725 : we may need to set or change some other defaults.
2726         if $test -f usethreads.cbu; then
2727                 echo "Your platform has some specific hints for threaded builds, using them..."
2728                 . ./usethreads.cbu
2729         else
2730                 $cat <<EOM
2731 (Your platform doesn't have any specific hints for threaded builds.
2732  Assuming POSIX threads, then.)
2733 EOM
2734         fi
2735         ;;
2736 esac
2737
2738 cat <<EOM
2739
2740 Perl can be built so that multiple Perl interpreters can coexist
2741 within the same Perl executable.
2742 EOM
2743
2744 case "$useithreads" in
2745 $define)
2746         cat <<EOM
2747 This multiple interpreter support is required for interpreter-based threads.
2748 EOM
2749         val="$define"
2750         ;;
2751 *)      case "$usemultiplicity" in
2752         $define|true|[yY]*)     dflt='y';;
2753         *) dflt='n';;
2754         esac
2755         echo " "
2756         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2757         rp='Build Perl for multiplicity?'
2758         . ./myread
2759         case "$ans" in
2760         y|Y)    val="$define" ;;
2761         *)      val="$undef" ;;
2762         esac
2763         ;;
2764 esac
2765 set usemultiplicity
2766 eval $setvar
2767
2768 : determine where manual pages are on this system
2769 echo " "
2770 case "$sysman" in
2771 '') 
2772         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2773         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2774         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2775         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2776         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2777         sysman=`./loc . /usr/man/man1 $syspath`
2778         ;;
2779 esac
2780 if $test -d "$sysman"; then
2781         echo "System manual is in $sysman." >&4
2782 else
2783         echo "Could not find manual pages in source form." >&4
2784 fi
2785
2786 : see what memory models we can support
2787 case "$models" in
2788 '')
2789         $cat >pdp11.c <<'EOP'
2790 int main() {
2791 #ifdef pdp11
2792         exit(0);
2793 #else
2794         exit(1);
2795 #endif
2796 }
2797 EOP
2798         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2799         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2800                 dflt='unsplit split'
2801         else
2802                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2803                 case "$tans" in
2804                 X) dflt='none';;
2805                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2806                                 dflt='small'
2807                         else
2808                                 dflt=''
2809                         fi
2810                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2811                                 dflt="$dflt medium"
2812                         fi
2813                         if $test -d /lib/large || $test -d /usr/lib/large; then
2814                                 dflt="$dflt large"
2815                         fi
2816                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2817                                 dflt="$dflt huge"
2818                         fi
2819                 esac
2820         fi;;
2821 *) dflt="$models";;
2822 esac
2823 $cat <<EOM
2824  
2825 Some systems have different model sizes.  On most systems they are called
2826 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2827 split.  If your system doesn't support different memory models, say "none".
2828 If you wish to force everything to one memory model, say "none" here and
2829 put the appropriate flags later when it asks you for other cc and ld flags.
2830 Venix systems may wish to put "none" and let the compiler figure things out.
2831 (In the following question multiple model names should be space separated.)
2832
2833 The default for most systems is "none".
2834
2835 EOM
2836 rp="Which memory models are supported?"
2837 . ./myread
2838 models="$ans"
2839
2840 case "$models" in
2841 none)
2842         small=''
2843         medium=''
2844         large=''
2845         huge=''
2846         unsplit=''
2847         split=''
2848         ;;
2849 *split)
2850         case "$split" in
2851         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2852                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2853                         dflt='-i'
2854                 else
2855                         dflt='none'
2856                 fi;;
2857         *) dflt="$split";;
2858         esac
2859         rp="What flag indicates separate I and D space?"
2860         . ./myread
2861         tans="$ans"
2862         case "$tans" in
2863         none) tans='';;
2864         esac
2865         split="$tans"
2866         unsplit='';;
2867 *large*|*small*|*medium*|*huge*)
2868         case "$models" in
2869         *large*)
2870                 case "$large" in
2871                 '') dflt='-Ml';;
2872                 *) dflt="$large";;
2873                 esac
2874         rp="What flag indicates large model?"
2875         . ./myread
2876         tans="$ans"
2877         case "$tans" in
2878         none) tans='';
2879         esac
2880         large="$tans";;
2881         *) large='';;
2882         esac
2883         case "$models" in
2884         *huge*) case "$huge" in
2885                 '') dflt='-Mh';;
2886                 *) dflt="$huge";;
2887                 esac
2888                 rp="What flag indicates huge model?"
2889                 . ./myread
2890                 tans="$ans"
2891                 case "$tans" in
2892                 none) tans='';
2893                 esac
2894                 huge="$tans";;
2895         *) huge="$large";;
2896         esac
2897         case "$models" in
2898         *medium*) case "$medium" in
2899                 '') dflt='-Mm';;
2900                 *) dflt="$medium";;
2901                 esac
2902                 rp="What flag indicates medium model?"
2903                 . ./myread
2904                 tans="$ans"
2905                 case "$tans" in
2906                 none) tans='';
2907                 esac
2908                 medium="$tans";;
2909         *) medium="$large";;
2910         esac
2911         case "$models" in
2912         *small*) case "$small" in
2913                 '') dflt='none';;
2914                 *) dflt="$small";;
2915                 esac
2916                 rp="What flag indicates small model?"
2917                 . ./myread
2918                 tans="$ans"
2919                 case "$tans" in
2920                 none) tans='';
2921                 esac
2922                 small="$tans";;
2923         *) small='';;
2924         esac
2925         ;;
2926 *)
2927         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2928         ;;
2929 esac
2930 $rm -f pdp11.* pdp11
2931
2932 : make some quick guesses about what we are up against
2933 echo " "
2934 $echo $n "Hmm...  $c"
2935 echo exit 1 >bsd
2936 echo exit 1 >usg
2937 echo exit 1 >v7
2938 echo exit 1 >osf1
2939 echo exit 1 >eunice
2940 echo exit 1 >xenix
2941 echo exit 1 >venix
2942 echo exit 1 >os2
2943 d_bsd="$undef"
2944 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2945 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2946 then
2947         echo "Looks kind of like an OSF/1 system, but we'll see..."
2948         echo exit 0 >osf1
2949 elif test `echo abc | tr a-z A-Z` = Abc ; then
2950         xxx=`./loc addbib blurfl $pth`
2951         if $test -f $xxx; then
2952         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2953                 echo exit 0 >bsd
2954                 echo exit 0 >usg
2955         else
2956                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2957                         echo "Looks kind of like an extended USG system, but we'll see..."
2958                 else
2959                         echo "Looks kind of like a USG system, but we'll see..."
2960                 fi
2961                 echo exit 0 >usg
2962         fi
2963 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2964         echo "Looks kind of like a BSD system, but we'll see..."
2965         d_bsd="$define"
2966         echo exit 0 >bsd
2967 else
2968         echo "Looks kind of like a Version 7 system, but we'll see..."
2969         echo exit 0 >v7
2970 fi
2971 case "$eunicefix" in
2972 *unixtovms*)
2973         $cat <<'EOI'
2974 There is, however, a strange, musty smell in the air that reminds me of
2975 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2976 EOI
2977         echo exit 0 >eunice
2978         d_eunice="$define"
2979 : it so happens the Eunice I know will not run shell scripts in Unix format
2980         ;;
2981 *)
2982         echo " "
2983         echo "Congratulations.  You aren't running Eunice."
2984         d_eunice="$undef"
2985         ;;
2986 esac
2987 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2988 case "$p_" in
2989 :) ;;
2990 *)
2991         $cat <<'EOI'
2992 I have the feeling something is not exactly right, however...don't tell me...
2993 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2994 EOI
2995         echo exit 0 >os2
2996         ;;
2997 esac
2998 if test -f /xenix; then
2999         echo "Actually, this looks more like a XENIX system..."
3000         echo exit 0 >xenix
3001         d_xenix="$define"
3002 else
3003         echo " "
3004         echo "It's not Xenix..."
3005         d_xenix="$undef"
3006 fi
3007 chmod +x xenix
3008 $eunicefix xenix
3009 if test -f /venix; then
3010         echo "Actually, this looks more like a VENIX system..."
3011         echo exit 0 >venix
3012 else
3013         echo " "
3014         if ./xenix; then
3015                 : null
3016         else
3017                 echo "Nor is it Venix..."
3018         fi
3019 fi
3020 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3021 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3022 $rm -f foo
3023
3024 : see if we need a special compiler
3025 echo " "
3026 if ./usg; then
3027         case "$cc" in
3028         '') case "$Mcc" in
3029                 /*) dflt='Mcc';;
3030                 *) case "$large" in
3031                         -M*) dflt='cc';;
3032                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3033                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3034                                                 dflt='cc'
3035                                         else
3036                                                 dflt='cc -M'
3037                                         fi
3038                                 else
3039                                         dflt='cc'
3040                                 fi;;
3041                         esac;;
3042                 esac;;
3043         *)  dflt="$cc";;
3044         esac
3045         case "$dflt" in
3046         *M*)    $cat <<'EOM'
3047 On some older systems the default C compiler will not resolve multiple global
3048 references that happen to have the same name.  On some such systems the "Mcc"
3049 command may be used to force these to be resolved.  On other systems a "cc -M"
3050 command is required.  (Note that the -M flag on other systems indicates a
3051 memory model to use!) If you have the Gnu C compiler, you might wish to use
3052 that instead.
3053
3054 EOM
3055         ;;
3056         esac
3057         rp="Use which C compiler?"
3058         . ./myread
3059         cc="$ans"
3060 else
3061         case "$cc" in
3062         '') dflt=cc;;
3063         *) dflt="$cc";;
3064         esac
3065         rp="Use which C compiler?"
3066         . ./myread
3067         cc="$ans"
3068 fi
3069 : Look for a hint-file generated 'call-back-unit'.  Now that the
3070 : user has specified the compiler, we may need to set or change some
3071 : other defaults.
3072 if $test -f cc.cbu; then
3073     . ./cc.cbu
3074 fi
3075 echo " "
3076 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3077 $cat >gccvers.c <<EOM
3078 #include <stdio.h>
3079 int main() {
3080 #ifdef __GNUC__
3081 #ifdef __VERSION__
3082         printf("%s\n", __VERSION__);
3083 #else
3084         printf("%s\n", "1");
3085 #endif
3086 #endif
3087         exit(0);
3088 }
3089 EOM
3090 if $cc $ldflags -o gccvers gccvers.c; then
3091         gccversion=`./gccvers`
3092         case "$gccversion" in
3093         '') echo "You are not using GNU cc." ;;
3094         *)  echo "You are using GNU cc $gccversion."
3095             ;;
3096         esac
3097 else
3098         echo " "
3099         echo "*** WHOA THERE!!! ***" >&4
3100         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3101         case "$knowitall" in
3102         '')
3103         echo "    You'd better start hunting for one and let me know about it." >&4
3104                 exit 1
3105                 ;;
3106         esac
3107 fi
3108 $rm -f gccvers*
3109 case "$gccversion" in
3110 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3111 esac
3112
3113 : decide how portable to be.  Allow command line overrides.
3114 case "$d_portable" in
3115 "$undef") ;;
3116 *)      d_portable="$define" ;;
3117 esac
3118
3119 : set up shell script to do ~ expansion
3120 cat >filexp <<EOSS
3121 $startsh
3122 : expand filename
3123 case "\$1" in
3124  ~/*|~)
3125         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3126         ;;
3127  ~*)
3128         if $test -f /bin/csh; then
3129                 /bin/csh -f -c "glob \$1"
3130                 failed=\$?
3131                 echo ""
3132                 exit \$failed
3133         else
3134                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3135                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3136                 if $test ! -d "\$dir"; then
3137                         me=\`basename \$0\`
3138                         echo "\$me: can't locate home directory for: \$name" >&2
3139                         exit 1
3140                 fi
3141                 case "\$1" in
3142                 */*)
3143                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3144                         ;;
3145                 *)
3146                         echo \$dir
3147                         ;;
3148                 esac
3149         fi
3150         ;;
3151 *)
3152         echo \$1
3153         ;;
3154 esac
3155 EOSS
3156 chmod +x filexp
3157 $eunicefix filexp
3158
3159 : now set up to get a file name
3160 cat <<EOS >getfile
3161 $startsh
3162 EOS
3163 cat <<'EOSC' >>getfile
3164 tilde=''
3165 fullpath=''
3166 already=''
3167 skip=''
3168 none_ok=''
3169 exp_file=''
3170 nopath_ok=''
3171 orig_rp="$rp"
3172 orig_dflt="$dflt"
3173 case "$gfpth" in
3174 '') gfpth='.' ;;
3175 esac
3176
3177 case "$fn" in
3178 *\(*)
3179         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3180         fn=`echo $fn | sed 's/(.*)//'`
3181         ;;
3182 esac
3183
3184 case "$fn" in
3185 *:*)
3186         loc_file=`expr $fn : '.*:\(.*\)'`
3187         fn=`expr $fn : '\(.*\):.*'`
3188         ;;
3189 esac
3190
3191 case "$fn" in
3192 *~*) tilde=true;;
3193 esac
3194 case "$fn" in
3195 */*) fullpath=true;;
3196 esac
3197 case "$fn" in
3198 *+*) skip=true;;
3199 esac
3200 case "$fn" in
3201 *n*) none_ok=true;;
3202 esac
3203 case "$fn" in
3204 *e*) exp_file=true;;
3205 esac
3206 case "$fn" in
3207 *p*) nopath_ok=true;;
3208 esac
3209
3210 case "$fn" in
3211 *f*) type='File';;
3212 *d*) type='Directory';;
3213 *l*) type='Locate';;
3214 esac
3215
3216 what="$type"
3217 case "$what" in
3218 Locate) what='File';;
3219 esac
3220
3221 case "$exp_file" in
3222 '')
3223         case "$d_portable" in
3224         "$define") ;;
3225         *) exp_file=true;;
3226         esac
3227         ;;
3228 esac
3229
3230 cd ..
3231 while test "$type"; do
3232         redo=''
3233         rp="$orig_rp"
3234         dflt="$orig_dflt"
3235         case "$tilde" in
3236         true) rp="$rp (~name ok)";;
3237         esac
3238         . UU/myread
3239         if test -f UU/getfile.ok && \
3240                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3241         then
3242                 value="$ans"
3243                 ansexp="$ans"
3244                 break
3245         fi
3246         case "$ans" in
3247         none)
3248                 value=''
3249                 ansexp=''
3250                 case "$none_ok" in
3251                 true) type='';;
3252                 esac
3253                 ;;
3254         *)
3255                 case "$tilde" in
3256                 '') value="$ans"
3257                         ansexp="$ans";;
3258                 *)
3259                         value=`UU/filexp $ans`
3260                         case $? in
3261                         0)
3262                                 if test "$ans" != "$value"; then
3263                                         echo "(That expands to $value on this system.)"
3264                                 fi
3265                                 ;;
3266                         *) value="$ans";;
3267                         esac
3268                         ansexp="$value"
3269                         case "$exp_file" in
3270                         '') value="$ans";;
3271                         esac
3272                         ;;
3273                 esac
3274                 case "$fullpath" in
3275                 true)
3276                         case "$ansexp" in
3277                         /*) value="$ansexp" ;;
3278                         *)
3279                                 redo=true
3280                                 case "$already" in
3281                                 true)
3282                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3283                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3284                                         ;;
3285                                 *)
3286                                 echo "Please give a full path name, starting with slash." >&4
3287                                         case "$tilde" in
3288                                         true)
3289                                 echo "Note that using ~name is ok provided it expands well." >&4
3290                                                 already=true
3291                                                 ;;
3292                                         esac
3293                                 esac
3294                                 ;;
3295                         esac
3296                         ;;
3297                 esac
3298                 case "$redo" in
3299                 '')
3300                         case "$type" in
3301                         File)
3302                                 for fp in $gfpth; do
3303                                         if test "X$fp" = X.; then
3304                                             pf="$ansexp"
3305                                         else    
3306                                             pf="$fp/$ansexp"
3307                                         fi
3308                                         if test -f "$pf"; then
3309                                                 type=''
3310                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3311                                         then
3312                                                 echo "($value is not a plain file, but that's ok.)"
3313                                                 type=''
3314                                         fi
3315                                         if test X"$type" = X; then
3316                                             value="$pf"
3317                                             break
3318                                         fi
3319                                 done
3320                                 ;;
3321                         Directory)
3322                                 for fp in $gfpth; do
3323                                         if test "X$fp" = X.; then
3324                                             dir="$ans"
3325                                             direxp="$ansexp"
3326                                         else    
3327                                             dir="$fp/$ansexp"
3328                                             direxp="$fp/$ansexp"
3329                                         fi
3330                                         if test -d "$direxp"; then
3331                                                 type=''
3332                                                 value="$dir"
3333                                                 break
3334                                         fi
3335                                 done
3336                                 ;;
3337                         Locate)
3338                                 if test -d "$ansexp"; then
3339                                         echo "(Looking for $loc_file in directory $value.)"
3340                                         value="$value/$loc_file"
3341                                         ansexp="$ansexp/$loc_file"
3342                                 fi
3343                                 if test -f "$ansexp"; then
3344                                         type=''
3345                                 fi
3346                                 case "$nopath_ok" in
3347                                 true)   case "$value" in
3348                                         */*) ;;
3349                                         *)      echo "Assuming $value will be in people's path."
3350                                                 type=''
3351                                                 ;;
3352                                         esac
3353                                         ;;
3354                                 esac
3355                                 ;;
3356                         esac
3357
3358                         case "$skip" in
3359                         true) type='';
3360                         esac
3361
3362                         case "$type" in
3363                         '') ;;
3364                         *)
3365                                 if test "$fastread" = yes; then
3366                                         dflt=y
3367                                 else
3368                                         dflt=n
3369                                 fi
3370                                 rp="$what $value doesn't exist.  Use that name anyway?"
3371                                 . UU/myread
3372                                 dflt=''
3373                                 case "$ans" in
3374                                 y*) type='';;
3375                                 *) echo " ";;
3376                                 esac
3377                                 ;;
3378                         esac
3379                         ;;
3380                 esac
3381                 ;;
3382         esac
3383 done
3384 cd UU
3385 ans="$value"
3386 rp="$orig_rp"
3387 dflt="$orig_dflt"
3388 rm -f getfile.ok
3389 test "X$gfpthkeep" != Xy && gfpth=""
3390 EOSC
3391
3392 : What should the include directory be ?
3393 echo " "
3394 $echo $n "Hmm...  $c"
3395 dflt='/usr/include'
3396 incpath=''
3397 mips_type=''
3398 if $test -f /bin/mips && /bin/mips; then
3399         echo "Looks like a MIPS system..."
3400         $cat >usr.c <<'EOCP'
3401 #ifdef SYSTYPE_BSD43
3402 /bsd43
3403 #endif
3404 EOCP
3405         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3406                 dflt='/bsd43/usr/include'
3407                 incpath='/bsd43'
3408                 mips_type='BSD 4.3'
3409         else
3410                 mips_type='System V'
3411         fi
3412         $rm -f usr.c usr.out
3413         echo "and you're compiling with the $mips_type compiler and libraries."
3414         xxx_prompt=y
3415         echo "exit 0" >mips
3416 else
3417         echo "Doesn't look like a MIPS system."
3418         xxx_prompt=n
3419         echo "exit 1" >mips
3420 fi
3421 chmod +x mips
3422 $eunicefix mips
3423 case "$usrinc" in
3424 '') ;;
3425 *) dflt="$usrinc";;
3426 esac
3427 case "$xxx_prompt" in
3428 y)      fn=d/
3429         echo " "
3430         rp='Where are the include files you want to use?'
3431         . ./getfile
3432         usrinc="$ans"
3433         ;;
3434 *)      usrinc="$dflt"
3435         ;;
3436 esac
3437
3438 : see how we invoke the C preprocessor
3439 echo " "
3440 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3441 cat <<'EOT' >testcpp.c
3442 #define ABC abc
3443 #define XYZ xyz
3444 ABC.XYZ
3445 EOT
3446 cd ..
3447 if test ! -f cppstdin; then
3448         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3449                 # AIX cc -E doesn't show the absolute headerfile
3450                 # locations but we'll cheat by using the -M flag.
3451                 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
3452         else
3453                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3454         fi
3455 else
3456         echo "Keeping your $hint cppstdin wrapper."
3457 fi
3458 chmod 755 cppstdin
3459 wrapper=`pwd`/cppstdin
3460 ok='false'
3461 cd UU
3462
3463 if $test "X$cppstdin" != "X" && \
3464         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3465         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3466 then
3467         echo "You used to use $cppstdin $cppminus so we'll use that again."
3468         case "$cpprun" in
3469         '') echo "But let's see if we can live without a wrapper..." ;;
3470         *)
3471                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3472                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3473                 then
3474                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3475                         ok='true'
3476                 else
3477                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3478                 fi
3479                 ;;
3480         esac
3481 else
3482         case "$cppstdin" in
3483         '') ;;
3484         *)
3485                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3486                 ;;
3487         esac
3488 fi
3489
3490 if $ok; then
3491         : nothing
3492 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3493         $cc -E <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "Yup, it does."
3496         x_cpp="$cc -E"
3497         x_minus='';
3498 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3499         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3500         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3501         echo "Yup, it does."
3502         x_cpp="$cc -E"
3503         x_minus='-';
3504 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3505         $cc -P <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         echo "Yipee, that works!"
3508         x_cpp="$cc -P"
3509         x_minus='';
3510 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3511         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3512         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3513         echo "At long last!"
3514         x_cpp="$cc -P"
3515         x_minus='-';
3516 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3517         $cpp <testcpp.c >testcpp.out 2>&1; \
3518         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3519         echo "It works!"
3520         x_cpp="$cpp"
3521         x_minus='';
3522 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3523         $cpp - <testcpp.c >testcpp.out 2>&1; \
3524         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3525         echo "Hooray, it works!  I was beginning to wonder."
3526         x_cpp="$cpp"
3527         x_minus='-';
3528 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3529         $wrapper <testcpp.c >testcpp.out 2>&1; \
3530         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3531         x_cpp="$wrapper"
3532         x_minus=''
3533         echo "Eureka!"
3534 else
3535         dflt=''
3536         rp="No dice.  I can't find a C preprocessor.  Name one:"
3537         . ./myread
3538         x_cpp="$ans"
3539         x_minus=''
3540         $x_cpp <testcpp.c >testcpp.out 2>&1
3541         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3542                 echo "OK, that will do." >&4
3543         else
3544 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3545                 exit 1
3546         fi
3547 fi
3548
3549 case "$ok" in
3550 false)
3551         cppstdin="$x_cpp"
3552         cppminus="$x_minus"
3553         cpprun="$x_cpp"
3554         cpplast="$x_minus"
3555         set X $x_cpp
3556         shift
3557         case "$1" in
3558         "$cpp")
3559                 echo "Perhaps can we force $cc -E using a wrapper..."
3560                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3561                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3562                 then
3563                         echo "Yup, we can."
3564                         cppstdin="$wrapper"
3565                         cppminus='';
3566                 else
3567                         echo "Nope, we'll have to live without it..."
3568                 fi
3569                 ;;
3570         esac
3571         case "$cpprun" in
3572         "$wrapper")
3573                 cpprun=''
3574                 cpplast=''
3575                 ;;
3576         esac
3577         ;;
3578 esac
3579
3580 case "$cppstdin" in
3581 "$wrapper"|'cppstdin') ;;
3582 *) $rm -f $wrapper;;
3583 esac
3584 $rm -f testcpp.c testcpp.out
3585
3586 : Set private lib path
3587 case "$plibpth" in
3588 '') if ./mips; then
3589                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3590         fi;;
3591 esac
3592 case "$libpth" in
3593 ' ') dlist='';;
3594 '') dlist="$loclibpth $plibpth $glibpth";;
3595 *) dlist="$libpth";;
3596 esac
3597
3598 : Now check and see which directories actually exist, avoiding duplicates
3599 libpth=''
3600 for xxx in $dlist
3601 do
3602     if $test -d $xxx; then
3603                 case " $libpth " in
3604                 *" $xxx "*) ;;
3605                 *) libpth="$libpth $xxx";;
3606                 esac
3607     fi
3608 done
3609 $cat <<'EOM'
3610
3611 Some systems have incompatible or broken versions of libraries.  Among
3612 the directories listed in the question below, please remove any you
3613 know not to be holding relevant libraries, and add any that are needed.
3614 Say "none" for none.
3615
3616 EOM
3617 case "$libpth" in
3618 '') dflt='none';;
3619 *)
3620         set X $libpth
3621         shift
3622         dflt=${1+"$@"}
3623         ;;
3624 esac
3625 rp="Directories to use for library searches?"
3626 . ./myread
3627 case "$ans" in
3628 none) libpth=' ';;
3629 *) libpth="$ans";;
3630 esac
3631
3632 : compute shared library extension
3633 case "$so" in
3634 '')
3635         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3636                 dflt='sl'
3637         else
3638                 dflt='so'
3639         fi
3640         ;;
3641 *) dflt="$so";;
3642 esac
3643 $cat <<EOM
3644
3645 On some systems, shared libraries may be available.  Answer 'none' if
3646 you want to suppress searching of shared libraries for the remainder
3647 of this configuration.
3648
3649 EOM
3650 rp='What is the file extension used for shared libraries?'
3651 . ./myread
3652 so="$ans"
3653
3654 : Define several unixisms.
3655 : Hints files or command line option can be used to override them.
3656 : The convoluted testing is in case hints files set either the old
3657 : or the new name.
3658 case "$_exe" in
3659 '')     case "$exe_ext" in
3660     '') ;;
3661         *)      _exe="$exe_ext" ;;
3662         esac
3663         ;;
3664 esac
3665 case "$_a" in
3666 '')     case "$lib_ext" in
3667     '') _a='.a';;
3668         *)      _a="$lib_ext" ;;
3669         esac
3670         ;;
3671 esac
3672 case "$_o" in
3673 '') case "$obj_ext" in
3674         '')     _o='.o';;
3675         *)      _o="$obj_ext";;
3676         esac
3677         ;;
3678 esac
3679 case "$p_" in
3680 '') case "$path_sep" in
3681         '')     p_=':';;
3682         *)      p_="$path_sep";;
3683         esac
3684         ;;
3685 esac
3686 exe_ext=$_exe
3687 lib_ext=$_a
3688 obj_ext=$_o
3689 path_sep=$p_
3690
3691 : Which makefile gets called first.  This is used by make depend.
3692 case "$firstmakefile" in
3693 '') firstmakefile='makefile';;
3694 esac
3695
3696 case "$usesocks" in
3697 $define|true|[yY]*)     dflt='y';;
3698 *) dflt='n';;
3699 esac
3700 cat <<EOM
3701
3702 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3703 Configure must be run with -Dusesocks.
3704
3705 If this doesn't make any sense to you, just accept the default '$dflt'.
3706 EOM
3707 rp='Build Perl for SOCKS?'
3708 . ./myread
3709 case "$ans" in
3710 y|Y)    val="$define" ;;     
3711 *)      val="$undef" ;;
3712 esac
3713 set usesocks
3714 eval $setvar
3715
3716 : Looking for optional libraries
3717 echo " "
3718 echo "Checking for optional libraries..." >&4
3719 case "$libs" in
3720 ' '|'') dflt='';;
3721 *) dflt="$libs";;
3722 esac
3723 case "$libswanted" in
3724 '') libswanted='c_s';;
3725 esac
3726 case "$usesocks" in
3727 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3728 esac
3729 libsfound=''
3730 libsfiles=''
3731 libsdirs=''
3732 libspath=''
3733 for thisdir in $libpth $xlibpth; do
3734   test -d $thisdir && libspath="$libspath $thisdir"
3735 done
3736 for thislib in $libswanted; do
3737         for thisdir in $libspath; do
3738             xxx=''
3739             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3740                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3741                 $test -f "$xxx" && eval $libscheck
3742                 $test -f "$xxx" && libstyle=shared
3743             fi
3744             if test ! -f "$xxx"; then
3745                 xxx=$thisdir/lib$thislib.$so
3746                 $test -f "$xxx" && eval $libscheck
3747                 $test -f "$xxx" && libstyle=shared
3748             fi  
3749             if test ! -f "$xxx"; then
3750                 xxx=$thisdir/lib$thislib$_a
3751                 $test -f "$xxx" && eval $libscheck
3752                 $test -f "$xxx" && libstyle=static
3753             fi
3754             if test ! -f "$xxx"; then
3755                 xxx=$thisdir/$thislib$_a
3756                 $test -f "$xxx" && eval $libscheck
3757                 $test -f "$xxx" && libstyle=static
3758             fi
3759             if test ! -f "$xxx"; then
3760                 xxx=$thisdir/lib${thislib}_s$_a
3761                 $test -f "$xxx" && eval $libscheck
3762                 $test -f "$xxx" && libstyle=static
3763                 $test -f "$xxx" && thislib=${thislib}_s
3764             fi
3765             if test ! -f "$xxx"; then
3766                 xxx=$thisdir/Slib$thislib$_a
3767                 $test -f "$xxx" && eval $libscheck
3768                 $test -f "$xxx" && libstyle=static
3769             fi
3770             if $test -f "$xxx"; then
3771                 case "$libstyle" in
3772                 shared) echo "Found -l$thislib (shared)." ;;
3773                 static) echo "Found -l$thislib." ;;
3774                 *)      echo "Found -l$thislib ($libstyle)." ;;
3775                 esac
3776                 case " $dflt " in
3777                 *"-l$thislib "*);;
3778                 *) dflt="$dflt -l$thislib"
3779                    libsfound="$libsfound $xxx"
3780                    yyy=`basename $xxx`
3781                    libsfiles="$libsfiles $yyy"
3782                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3783                    case " $libsdirs " in
3784                    *" $yyy "*) ;;
3785                    *) libsdirs="$libsdirs $yyy" ;;
3786                    esac
3787                    ;;
3788                 esac
3789                 break
3790             fi  
3791         done
3792         if $test ! -f "$xxx"; then
3793             echo "No -l$thislib."
3794         fi
3795 done
3796 set X $dflt
3797 shift
3798 dflt="$*"
3799 case "$libs" in
3800 '') dflt="$dflt";;
3801 *) dflt="$libs";;
3802 esac
3803 case "$dflt" in
3804 ' '|'') dflt='none';;
3805 esac
3806
3807 $cat <<EOM
3808
3809 In order to compile $package on your machine, a number of libraries
3810 are usually needed.  Include any other special libraries here as well.
3811 Say "none" for none.  The default list is almost always right.
3812 EOM
3813
3814 echo " "
3815 rp="What libraries to use?"
3816 . ./myread
3817 case "$ans" in
3818 none) libs=' ';;
3819 *) libs="$ans";;
3820 esac
3821
3822 : determine optimization, if desired, or use for debug flag also
3823 case "$optimize" in
3824 ' '|$undef) dflt='none';;
3825 '') dflt='-O';;
3826 *) dflt="$optimize";;
3827 esac
3828 $cat <<EOH
3829
3830 By default, $package compiles with the -O flag to use the optimizer.
3831 Alternately, you might want to use the symbolic debugger, which uses
3832 the -g flag (on traditional Unix systems).  Either flag can be
3833 specified here.  To use neither flag, specify the word "none".
3834
3835 EOH
3836 rp="What optimizer/debugger flag should be used?"
3837 . ./myread
3838 optimize="$ans"
3839 case "$optimize" in
3840 'none') optimize=" ";;
3841 esac
3842
3843 dflt=''
3844 : We will not override a previous value, but we might want to
3845 : augment a hint file
3846 case "$hint" in
3847 default|recommended)
3848         case "$gccversion" in
3849         1*) dflt='-fpcc-struct-return' ;;
3850         esac
3851         case "$optimize" in
3852         *-g*) dflt="$dflt -DDEBUGGING";;
3853         esac
3854         case "$gccversion" in
3855         2*) if test -d /etc/conf/kconfig.d &&
3856                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3857                 then
3858                         dflt="$dflt -posix"
3859                 fi
3860                 ;;
3861         esac
3862         case "$gccversion" in
3863         1*) ;;
3864         2.[0-8]*) ;;
3865         ?*)     echo " "
3866                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3867                 echo 'int main(void) { return 0; }' > gcctest.c
3868                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3869                         echo "Yes, it does." 2>&1
3870                         case "$ccflags" in
3871                         *strict-aliasing*) 
3872                                 echo "Leaving current flags $ccflags alone." 2>&1
3873                                 ;;
3874                         *) dflt="$dflt -fno-strict-aliasing" ;;
3875                         esac
3876                 else
3877                         echo "Nope, it doesn't, but that's ok." 2>&1
3878                 fi
3879                 ;;
3880         esac
3881         ;;
3882 esac
3883
3884 case "$mips_type" in
3885 *BSD*|'') inclwanted="$locincpth $usrinc";;
3886 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3887 esac
3888 for thisincl in $inclwanted; do
3889         if $test -d $thisincl; then
3890                 if $test x$thisincl != x$usrinc; then
3891                         case "$dflt" in
3892                         *$thisincl*);;
3893                         *) dflt="$dflt -I$thisincl";;
3894                         esac
3895                 fi
3896         fi
3897 done
3898
3899 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3900         xxx=true;
3901 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3902         xxx=true;
3903 else
3904         xxx=false;
3905 fi;
3906 if $xxx; then
3907         case "$dflt" in
3908         *$2*);;
3909         *) dflt="$dflt -D$2";;
3910         esac;
3911 fi'
3912
3913 set signal.h LANGUAGE_C; eval $inctest
3914
3915 case "$usesocks" in
3916 $define)
3917         ccflags="$ccflags -DSOCKS"
3918         ;;
3919 esac
3920
3921 case "$hint" in
3922 default|recommended) dflt="$ccflags $dflt" ;;
3923 *) dflt="$ccflags";;
3924 esac
3925
3926 case "$dflt" in
3927 ''|' ') dflt=none;;
3928 esac
3929 $cat <<EOH
3930
3931 Your C compiler may want other flags.  For this question you should include
3932 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3933 but you should NOT include libraries or ld flags like -lwhatever.  If you
3934 want $package to honor its debug switch, you should include -DDEBUGGING here.
3935 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3936
3937 To use no flags, specify the word "none".
3938
3939 EOH
3940 set X $dflt
3941 shift
3942 dflt=${1+"$@"}
3943 rp="Any additional cc flags?"
3944 . ./myread
3945 case "$ans" in
3946 none) ccflags='';;
3947 *) ccflags="$ans";;
3948 esac
3949
3950 : the following weeds options from ccflags that are of no interest to cpp
3951 cppflags="$ccflags"
3952 case "$gccversion" in
3953 1*) cppflags="$cppflags -D__GNUC__"
3954 esac
3955 case "$mips_type" in
3956 '');;
3957 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3958 esac
3959 case "$cppflags" in
3960 '');;
3961 *)
3962         echo " "
3963         echo "Let me guess what the preprocessor flags are..." >&4
3964         set X $cppflags
3965         shift
3966         cppflags=''
3967         $cat >cpp.c <<'EOM'
3968 #define BLURFL foo
3969
3970 BLURFL xx LFRULB
3971 EOM
3972         previous=''
3973         for flag in $*
3974         do
3975                 case "$flag" in
3976                 -*) ftry="$flag";;
3977                 *) ftry="$previous $flag";;
3978                 esac
3979                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3980                         >cpp1.out 2>/dev/null && \
3981                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3982                         >cpp2.out 2>/dev/null && \
3983                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3984                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3985                 then
3986                         cppflags="$cppflags $ftry"
3987                         previous=''
3988                 else
3989                         previous="$flag"
3990                 fi
3991         done
3992         set X $cppflags
3993         shift
3994         cppflags=${1+"$@"}
3995         case "$cppflags" in
3996         *-*)  echo "They appear to be: $cppflags";;
3997         esac
3998         $rm -f cpp.c cpp?.out
3999         ;;
4000 esac
4001
4002 : flags used in final linking phase
4003 case "$ldflags" in
4004 '') if ./venix; then
4005                 dflt='-i -z'
4006         else
4007                 dflt=''
4008         fi
4009         case "$ccflags" in
4010         *-posix*) dflt="$dflt -posix" ;;
4011         esac
4012         ;;
4013 *) dflt="$ldflags";;
4014 esac
4015
4016 : Try to guess additional flags to pick up local libraries.
4017 for thislibdir in $libpth; do
4018         case " $loclibpth " in
4019         *" $thislibdir "*)
4020                 case "$dflt " in 
4021                 *"-L$thislibdir "*) ;;
4022                 *)  dflt="$dflt -L$thislibdir" ;;
4023                 esac
4024                 ;;
4025         esac
4026 done
4027
4028 case "$dflt" in
4029 '') dflt='none' ;;
4030 esac
4031
4032 $cat <<EOH
4033
4034 Your C linker may need flags.  For this question you should
4035 include -L/whatever and any other flags used by the C linker, but you
4036 should NOT include libraries like -lwhatever.
4037
4038 Make sure you include the appropriate -L/path flags if your C linker
4039 does not normally search all of the directories you specified above,
4040 namely
4041         $libpth
4042 To use no flags, specify the word "none".
4043
4044 EOH
4045
4046 rp="Any additional ld flags (NOT including libraries)?"
4047 . ./myread
4048 case "$ans" in
4049 none) ldflags='';;
4050 *) ldflags="$ans";;
4051 esac
4052 rmlist="$rmlist pdp11"
4053
4054 : coherency check
4055 echo " "
4056 echo "Checking your choice of C compiler and flags for coherency..." >&4
4057 $cat > try.c <<'EOF'
4058 #include <stdio.h>
4059 int main() { printf("Ok\n"); exit(0); }
4060 EOF
4061 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4062 shift
4063 $cat >try.msg <<'EOM'
4064 I've tried to compile and run the following simple program:
4065
4066 EOM
4067 $cat try.c >> try.msg
4068
4069 $cat >> try.msg <<EOM
4070
4071 I used the command:
4072
4073         $*
4074         ./try
4075
4076 and I got the following output:
4077
4078 EOM
4079 dflt=y
4080 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4081         if sh -c './try' >>try.msg 2>&1; then
4082                 xxx=`./try`
4083                 case "$xxx" in
4084                 "Ok") dflt=n ;;
4085                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4086                         case " $libs " in
4087                         *" -lsfio "*)
4088                                 cat >> try.msg <<'EOQS'
4089 If $libs contains -lsfio, and sfio is mis-configured, then it
4090 sometimes (apparently) runs and exits with a 0 status, but with no
4091 output!  It may have to do with sfio's use of _exit vs. exit.
4092
4093 EOQS
4094                                 rp="You have a big problem.  Shall I abort Configure"
4095                                 dflt=y
4096                                 ;;
4097                         esac
4098                         ;;
4099                 esac
4100         else
4101                 echo "The program compiled OK, but exited with status $?." >>try.msg
4102                 rp="You have a problem.  Shall I abort Configure"
4103                 dflt=y
4104         fi
4105 else
4106         echo "I can't compile the test program." >>try.msg
4107         rp="You have a BIG problem.  Shall I abort Configure"
4108         dflt=y
4109 fi
4110 case "$dflt" in
4111 y)
4112         $cat try.msg >&4
4113         case "$knowitall" in
4114         '')
4115                 echo "(The supplied flags or libraries might be incorrect.)"
4116                 ;;
4117         *) dflt=n;;
4118         esac
4119         echo " "
4120         . ./myread
4121         case "$ans" in
4122         n*|N*) ;;
4123         *)      echo "Ok.  Stopping Configure." >&4
4124                 exit 1
4125                 ;;
4126         esac
4127         ;;
4128 n) echo "OK, that should do.";;
4129 esac
4130 $rm -f try try.* core
4131
4132 : define an is-a-typedef? function
4133 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4134 case "$inclist" in
4135 "") inclist="sys/types.h";;
4136 esac;
4137 eval "varval=\$$var";
4138 case "$varval" in
4139 "")
4140         $rm -f temp.c;
4141         for inc in $inclist; do
4142                 echo "#include <$inc>" >>temp.c;
4143         done;
4144         echo "#ifdef $type" >> temp.c;
4145         echo "printf(\"We have $type\");" >> temp.c;
4146         echo "#endif" >> temp.c;
4147         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4148         if $contains $type temp.E >/dev/null 2>&1; then
4149                 eval "$var=\$type";
4150         else
4151                 eval "$var=\$def";
4152         fi;
4153         $rm -f temp.?;;
4154 *) eval "$var=\$varval";;
4155 esac'
4156
4157 : define an is-a-typedef? function that prompts if the type is not available.
4158 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4159 case "$inclist" in
4160 "") inclist="sys/types.h";;
4161 esac;
4162 eval "varval=\$$var";
4163 case "$varval" in
4164 "")
4165         $rm -f temp.c;
4166         for inc in $inclist; do
4167                 echo "#include <$inc>" >>temp.c;
4168         done;
4169         echo "#ifdef $type" >> temp.c;
4170         echo "printf(\"We have $type\");" >> temp.c;
4171         echo "#endif" >> temp.c;
4172         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4173         echo " " ;
4174         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4175         if $contains $type temp.E >/dev/null 2>&1; then
4176                 echo "$type found." >&4;
4177                 eval "$var=\$type";
4178         else
4179                 echo "$type NOT found." >&4;
4180                 dflt="$def";
4181                 . ./myread ;
4182                 eval "$var=\$ans";
4183         fi;
4184         $rm -f temp.?;;
4185 *) eval "$var=\$varval";;
4186 esac'
4187
4188 : define a shorthand compile call
4189 compile='
4190 mc_file=$1;
4191 shift;
4192 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4193 : define a shorthand compile call for compilations that should be ok.
4194 compile_ok='
4195 mc_file=$1;
4196 shift;
4197 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4198
4199 : check for lengths of integral types
4200 echo " "
4201 case "$intsize" in
4202 '')
4203         echo "Checking to see how big your integers are..." >&4
4204         $cat >intsize.c <<'EOCP'
4205 #include <stdio.h>
4206 int main()
4207 {
4208         printf("intsize=%d;\n", (int)sizeof(int));
4209         printf("longsize=%d;\n", (int)sizeof(long));
4210         printf("shortsize=%d;\n", (int)sizeof(short));
4211         exit(0);
4212 }
4213 EOCP
4214         set intsize
4215         if eval $compile_ok && ./intsize > /dev/null; then
4216                 eval `./intsize`
4217                 echo "Your integers are $intsize bytes long."
4218                 echo "Your long integers are $longsize bytes long."
4219                 echo "Your short integers are $shortsize bytes long."
4220         else
4221                 $cat >&4 <<EOM
4222 !
4223 Help! I can't compile and run the intsize test program: please enlighten me!
4224 (This is probably a misconfiguration in your system or libraries, and
4225 you really ought to fix it.  Still, I'll try anyway.)
4226 !
4227 EOM
4228                 dflt=4
4229                 rp="What is the size of an integer (in bytes)?"
4230                 . ./myread
4231                 intsize="$ans"
4232                 dflt=$intsize
4233                 rp="What is the size of a long integer (in bytes)?"
4234                 . ./myread
4235                 longsize="$ans"
4236                 dflt=2
4237                 rp="What is the size of a short integer (in bytes)?"
4238                 . ./myread
4239                 shortsize="$ans"
4240         fi
4241         ;;
4242 esac
4243 $rm -f intsize intsize.*
4244
4245 : see what type lseek is declared as in the kernel
4246 rp="What is the type used for lseek's offset on this system?"
4247 set off_t lseektype long stdio.h sys/types.h
4248 eval $typedef_ask
4249
4250 echo " "
4251 echo "Checking to see how big your file offsets are..." >&4
4252 $cat >try.c <<EOCP
4253 #include <sys/types.h>
4254 #include <stdio.h>
4255 int main()
4256 {
4257     printf("%d\n", (int)sizeof($lseektype));
4258     return(0); 
4259 }
4260 EOCP
4261 set try
4262 if eval $compile_ok; then
4263         lseeksize=`./try`
4264         echo "Your file offsets are $lseeksize bytes long."
4265 else
4266         dflt=$longsize
4267         echo " "
4268         echo "(I can't seem to compile the test program.  Guessing...)"
4269         rp="What is the size of your file offsets (in bytes)?"
4270         . ./myread
4271         lseeksize="$ans"
4272 fi
4273 $rm -f try.c try
4274
4275 : see what type file positions are declared as in the library
4276 rp="What is the type for file position used by fsetpos()?"
4277 set fpos_t fpostype long stdio.h sys/types.h
4278 eval $typedef_ask
4279
4280 echo " "
4281 case "$fpostype" in
4282 *_t) zzz="$fpostype"    ;;
4283 *)   zzz="fpos_t"       ;;
4284 esac
4285 echo "Checking the size of $zzz..." >&4 
4286 cat > try.c <<EOCP
4287 #include <sys/types.h>
4288 #include <stdio.h>
4289 int main() {
4290     printf("%d\n", (int)sizeof($fpostype));
4291     exit(0);
4292 }
4293 EOCP
4294 set try
4295 if eval $compile_ok; then
4296         yyy=`./try`
4297         case "$yyy" in
4298         '')     fpossize=4
4299                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4300                 ;;
4301         *)      fpossize=$yyy
4302                 echo "Your $zzz is $fpossize bytes long."
4303                 ;;
4304         esac
4305 else
4306         dflt="$longsize"
4307         echo " " >&4
4308         echo "(I can't compile the test program.  Guessing...)" >&4
4309         rp="What is the size of your file positions (in bytes)?"
4310         . ./myread
4311         fpossize="$ans"
4312 fi
4313
4314
4315
4316 # Backward compatibility (uselfs is deprecated).
4317 case "$uselfs" in
4318 "$define"|true|[yY]*)
4319         cat <<EOM >&4
4320
4321 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4322 EOM
4323         uselargefiles="$define"
4324         ;;
4325 esac                          
4326
4327 case "$lseeksize:$fpossize" in
4328 8:8) cat <<EOM
4329
4330 You can have files larger than 2 gigabytes.
4331 EOM
4332    val="$define" ;;
4333 *)    case "$uselargefiles" in
4334    "$undef"|false|[nN]*) dflt='n' ;;
4335    *)   dflt='y' ;;
4336    esac
4337    cat <<EOM
4338
4339 Perl can be built to understand large files (files larger than 2 gigabytes)
4340 on some systems.  To do so, Configure can be run with -Duselargefiles.
4341
4342 If this doesn't make any sense to you, just accept the default '$dflt'.
4343 EOM
4344    rp='Try to understand large files, if available?'
4345    . ./myread
4346    case "$ans" in
4347    y|Y)         val="$define" ;;
4348    *)           val="$undef"  ;;
4349    esac
4350    ;;
4351 esac
4352 set uselargefiles
4353 eval $setvar
4354 case "$uselargefiles" in
4355 "$define")
4356 : Look for a hint-file generated 'call-back-unit'.  If the
4357 : user has specified that a large files perl is to be built,
4358 : we may need to set or change some other defaults.
4359         if $test -f uselargefiles.cbu; then
4360                 echo "Your platform has some specific hints for large file builds, using them..."
4361                 . ./uselargefiles.cbu
4362                 echo " "
4363                 echo "Rechecking to see how big your file offsets are..." >&4
4364                 $cat >try.c <<EOCP
4365 #include <sys/types.h>
4366 #include <stdio.h>
4367 int main()
4368 {
4369     printf("%d\n", (int)sizeof($lseektype));
4370     return(0); 
4371 }
4372 EOCP
4373                 set try
4374                 if eval $compile_ok; then
4375                         lseeksize=`./try`
4376                         $echo "Your file offsets are now $lseeksize bytes long."
4377                 else
4378                         dflt="$lseeksize"
4379                         echo " "
4380                         echo "(I can't seem to compile the test program.  Guessing...)"
4381                         rp="What is the size of your file offsets (in bytes)?"
4382                         . ./myread
4383                         lseeksize="$ans"
4384                 fi
4385                 case "$fpostype" in
4386                 *_t) zzz="$fpostype"    ;;
4387                 *)   zzz="fpos_t"       ;;
4388                 esac
4389                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4390                 $cat > try.c <<EOCP
4391 #include <sys/types.h>
4392 #include <stdio.h>
4393 int main() {
4394     printf("%d\n", (int)sizeof($fpostype));
4395     exit(0);
4396 }
4397 EOCP
4398                 set try
4399                 if eval $compile_ok; then
4400                         yyy=`./try`
4401                         dflt="$lseeksize"
4402                         case "$yyy" in
4403                         '')     echo " "
4404                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4405                                 ;;
4406                         *)      fpossize=$yyy
4407                                 echo " $fpossize bytes." >&4
4408                                 ;;
4409                         esac
4410                 else
4411                         dflt="$fpossize"
4412                         echo " "
4413                         echo "(I can't compile the test program.  Guessing...)" >&4
4414                         rp="What is the size of your file positions (in bytes)?"
4415                         . ./myread
4416                         fpossize="$ans"
4417                 fi
4418                 $rm -f try.c try
4419         fi
4420         ;;
4421 esac
4422
4423
4424 case "$usemorebits" in
4425 "$define"|true|[yY]*)
4426         use64bitint="$define"
4427         uselongdouble="$define"
4428         usemorebits="$define"
4429         ;;
4430 *)      usemorebits="$undef"
4431         ;;
4432 esac
4433
4434
4435 case "$uselonglong" in
4436 "$define"|true|[yY]*)
4437         cat <<EOM >&4
4438
4439 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4440 EOM
4441         use64bitint="$define"
4442         ;;
4443 esac                          
4444 case "$use64bits" in
4445 "$define"|true|[yY]*)
4446         cat <<EOM >&4
4447
4448 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4449 EOM
4450         use64bitint="$define"
4451         ;;
4452 esac                          
4453 case "$use64bitints" in
4454 "$define"|true|[yY]*)
4455         cat <<EOM >&4
4456
4457 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4458 EOM
4459         use64bitint="$define"
4460         ;;
4461 esac                          
4462 case "$use64bitsint" in
4463 "$define"|true|[yY]*)
4464         cat <<EOM >&4
4465
4466 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4467 EOM
4468         use64bitint="$define"
4469         ;;
4470 esac                          
4471 case "$uselonglongs" in
4472 "$define"|true|[yY]*)
4473         cat <<EOM >&4
4474
4475 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4476 EOM
4477         use64bitint="$define"
4478         ;;
4479 esac                          
4480 case "$use64bitsall" in
4481 "$define"|true|[yY]*)
4482         cat <<EOM >&4
4483
4484 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4485 EOM
4486         use64bitall="$define"
4487         ;;
4488 esac                          
4489
4490 case "$ccflags" in
4491 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4492 esac
4493 case "$use64bitall" in
4494 "$define"|true|[yY]*) use64bitint="$define" ;;
4495 esac
4496
4497 case "$longsize" in
4498 8) cat <<EOM
4499
4500 You have natively 64-bit long integers.
4501 EOM
4502    val="$define"
4503    ;;
4504 *) case "$use64bitint" in
4505    "$define"|true|[yY]*) dflt='y';;
4506    *) dflt='n';;
4507    esac
4508    cat <<EOM
4509
4510 Perl can be built to take advantage of 64-bit integer types
4511 on some systems.  To do so, Configure can be run with -Duse64bitint.
4512 Choosing this option will most probably introduce binary incompatibilities.
4513
4514 If this doesn't make any sense to you, just accept the default '$dflt'.
4515 EOM
4516    rp='Try to use 64-bit integers, if available?'
4517    . ./myread
4518    case "$ans" in
4519    [yY]*) val="$define" ;;
4520    *)     val="$undef"  ;;
4521    esac
4522    ;;
4523 esac
4524 set use64bitint
4525 eval $setvar
4526
4527 case "$use64bitall" in
4528 "$define"|true|[yY]*) dflt='y' ;;
4529 *) case "$longsize" in
4530    8) dflt='y' ;;
4531    *) dflt='n' ;;
4532    esac
4533    ;;
4534 esac    
4535 cat <<EOM
4536
4537 You may also choose to try maximal 64-bitness.  It means using as much
4538 64-bitness as possible on the platform.  This in turn means even more
4539 binary incompatibilities.  On the other hand, your platform may not
4540 have any more 64-bitness available than what you already have chosen.
4541
4542 If this doesn't make any sense to you, just accept the default '$dflt'.
4543 EOM
4544 rp='Try to use maximal 64-bit support, if available?'
4545 . ./myread
4546 case "$ans" in
4547 [yY]*) val="$define" ;;
4548 *)     val="$undef"  ;;
4549 esac
4550 set use64bitall
4551 eval $setvar
4552 case "$use64bitall" in
4553 "$define")
4554         case "$use64bitint" in
4555         "$undef")
4556                 cat <<EOM
4557
4558 Since you have chosen a maximally 64-bit build, I'm also turning on
4559 the use of 64-bit integers.
4560 EOM
4561                 use64bitint="$define" ;;
4562         esac
4563         ;;
4564 esac
4565
4566 case "$use64bitint" in
4567 "$define"|true|[yY]*)
4568 : Look for a hint-file generated 'call-back-unit'.  If the
4569 : user has specified that a 64-bit perl is to be built,
4570 : we may need to set or change some other defaults.
4571         if $test -f use64bitint.cbu; then
4572                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4573                 . ./use64bitint.cbu
4574         fi
4575         case "$longsize" in
4576         4) case "$archname64" in
4577            '') archname64=64int ;;
4578            esac
4579            ;;
4580         esac
4581         ;;
4582 esac
4583
4584 case "$use64bitall" in
4585 "$define"|true|[yY]*)
4586 : Look for a hint-file generated 'call-back-unit'.  If the
4587 : user has specified that a maximally 64-bit perl is to be built,
4588 : we may need to set or change some other defaults.
4589         if $test -f use64bitall.cbu; then
4590                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4591                 . ./use64bitall.cbu
4592         fi
4593         case "$longsize" in
4594         4) case "$archname64" in
4595            ''|64int) archname64=64all ;;
4596            esac
4597            ;;
4598         esac
4599         ;;
4600 esac
4601
4602 : determine the architecture name
4603 echo " "
4604 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4605         tarch=`arch`"-$osname"
4606 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4607         if uname -m > tmparch 2>&1 ; then
4608                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4609                         -e 's/$/'"-$osname/" tmparch`
4610         else
4611                 tarch="$osname"
4612         fi
4613         $rm -f tmparch
4614 else
4615         tarch="$osname"
4616 fi
4617 case "$myarchname" in
4618 ''|"$tarch") ;;
4619 *)
4620         echo "(Your architecture name used to be $myarchname.)"
4621         archname=''
4622         ;;
4623 esac
4624 myarchname="$tarch"
4625 case "$archname" in
4626 '') dflt="$tarch";;
4627 *) dflt="$archname";;
4628 esac
4629 rp='What is your architecture name'
4630 . ./myread
4631 archname="$ans"
4632 case "$usethreads" in
4633 $define)
4634         echo "Threads selected." >&4
4635         case "$archname" in
4636         *-thread*) echo "...and architecture name already has -thread." >&4
4637                 ;;
4638         *)      archname="$archname-thread"
4639                 echo "...setting architecture name to $archname." >&4
4640                 ;;
4641         esac
4642         ;;
4643 esac
4644 case "$usemultiplicity" in
4645 $define)
4646         echo "Multiplicity selected." >&4
4647         case "$archname" in
4648         *-multi*) echo "...and architecture name already has -multi." >&4
4649                 ;;
4650         *)      archname="$archname-multi"
4651                 echo "...setting architecture name to $archname." >&4
4652                 ;;
4653         esac
4654         ;;
4655 esac
4656 case "$use64bitint" in
4657 $define)
4658         case "$archname64" in
4659         '')
4660                 ;;
4661         *)
4662                 case "$archname" in
4663                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4664                         ;;
4665                 *)      archname="$archname-$archname64"
4666                         echo "...setting architecture name to $archname." >&4
4667                         ;;
4668                 esac
4669                 ;;
4670         esac
4671 esac
4672
4673 : determine root of directory hierarchy where package will be installed.
4674 case "$prefix" in
4675 '')
4676         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4677         ;;
4678 *)
4679         dflt="$prefix"
4680         ;;
4681 esac
4682 $cat <<EOM
4683
4684 By default, $package will be installed in $dflt/bin, manual pages
4685 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4686 installation directories. Typically this is something like /usr/local.
4687 If you wish to have binaries under /usr/bin but other parts of the
4688 installation under /usr/local, that's ok: you will be prompted
4689 separately for each of the installation directories, the prefix being
4690 only used to set the defaults.
4691
4692 EOM
4693 fn=d~
4694 rp='Installation prefix to use?'
4695 . ./getfile
4696 oldprefix=''
4697 case "$prefix" in
4698 '') ;;
4699 *)
4700         case "$ans" in
4701         "$prefix") ;;
4702         *) oldprefix="$prefix";;
4703         esac
4704         ;;
4705 esac
4706 prefix="$ans"
4707 prefixexp="$ansexp"
4708
4709 : is AFS running?
4710 echo " "
4711 case "$afs" in
4712 $define|true)   afs=true ;;
4713 $undef|false)   afs=false ;;
4714 *)      if test -d /afs; then
4715                 afs=true
4716         else
4717                 afs=false
4718         fi
4719         ;;
4720 esac
4721 if $afs; then
4722         echo "AFS may be running... I'll be extra cautious then..." >&4
4723 else
4724         echo "AFS does not seem to be running..." >&4
4725 fi
4726
4727 : determine installation prefix for where package is to be installed.
4728 if $afs; then 
4729 $cat <<EOM
4730
4731 Since you are running AFS, I need to distinguish the directory in which
4732 files will reside from the directory in which they are installed (and from
4733 which they are presumably copied to the former directory by occult means).
4734
4735 EOM
4736         case "$installprefix" in
4737         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4738         *) dflt="$installprefix";;
4739         esac
4740 else
4741 $cat <<EOM
4742
4743 In some special cases, particularly when building $package for distribution,
4744 it is convenient to distinguish between the directory in which files should 
4745 be installed from the directory ($prefix) in which they 
4746 will eventually reside.  For most users, these two directories are the same.
4747
4748 EOM
4749         case "$installprefix" in
4750         '') dflt=$prefix ;;
4751         *) dflt=$installprefix;;
4752         esac
4753 fi
4754 fn=d~
4755 rp='What installation prefix should I use for installing files?'
4756 . ./getfile
4757 installprefix="$ans"
4758 installprefixexp="$ansexp"
4759
4760 : set the prefixit variable, to compute a suitable default value
4761 prefixit='case "$3" in
4762 ""|none)
4763         case "$oldprefix" in
4764         "") eval "$1=\"\$$2\"";;
4765         *)
4766                 case "$3" in
4767                 "") eval "$1=";;
4768                 none)
4769                         eval "tp=\"\$$2\"";
4770                         case "$tp" in
4771                         ""|" ") eval "$1=\"\$$2\"";;
4772                         *) eval "$1=";;
4773                         esac;;
4774                 esac;;
4775         esac;;
4776 *)
4777         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4778         case "$tp" in
4779         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4780         /*-$oldprefix/*|\~*-$oldprefix/*)
4781                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4782         *) eval "$1=\"\$$2\"";;
4783         esac;;
4784 esac'
4785
4786
4787 : get the patchlevel
4788 echo " "
4789 echo "Getting the current patchlevel..." >&4
4790 if $test -r $rsrc/patchlevel.h;then
4791         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4792         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4793         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4794         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4795         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4796         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4797 else
4798         revision=0
4799         patchlevel=0
4800         subversion=0
4801         api_revision=0
4802         api_version=0
4803         api_subversion=0
4804 fi
4805 $echo $n "(You have $package revision $revision" $c
4806 $echo $n " patchlevel $patchlevel" $c
4807 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4808 echo ".)"
4809 case "$osname" in
4810 dos|vms)
4811         : XXX Should be a Configure test for double-dots in filenames.
4812         version=`echo $revision $patchlevel $subversion | \
4813                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4814         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4815                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4816         ;;
4817 *)
4818         version=`echo $revision $patchlevel $subversion | \
4819                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4820         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4821                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4822         ;;
4823 esac
4824 : Special case the 5.005_xx maintenance series, which used 5.005
4825 : without any subversion label as a subdirectory in $sitelib
4826 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4827         api_versionstring='5.005'
4828 fi
4829
4830 : determine installation style
4831 : For now, try to deduce it from prefix unless it is already set.
4832 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4833 case "$installstyle" in
4834 '')     case "$prefix" in
4835                 *perl*) dflt='lib';;
4836                 *) dflt='lib/perl5' ;;
4837         esac
4838         ;;
4839 *)      dflt="$installstyle" ;;
4840 esac
4841 : Probably not worth prompting for this since we prompt for all
4842 : the directories individually, and the prompt would be too long and
4843 : confusing anyway.
4844 installstyle=$dflt
4845
4846 : determine where private library files go
4847 : Usual default is /usr/local/lib/perl5/$version.
4848 : Also allow things like /opt/perl/lib/$version, since 
4849 : /opt/perl/lib/perl5... would be redundant.
4850 : The default "style" setting is made in installstyle.U
4851 case "$installstyle" in
4852 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4853 *)       set dflt privlib lib/$version ;;
4854 esac
4855 eval $prefixit
4856 $cat <<EOM
4857
4858 There are some auxiliary files for $package that need to be put into a
4859 private library directory that is accessible by everyone.
4860
4861 EOM
4862 fn=d~+
4863 rp='Pathname where the private library files will reside?'
4864 . ./getfile
4865 privlib="$ans"
4866 privlibexp="$ansexp"
4867 : Change installation prefix, if necessary.
4868 if $test X"$prefix" != X"$installprefix"; then
4869         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4870 else
4871         installprivlib="$privlibexp"
4872 fi
4873
4874 : set the prefixup variable, to restore leading tilda escape
4875 prefixup='case "$prefixexp" in
4876 "$prefix") ;;
4877 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4878 esac'
4879
4880 : determine where public architecture dependent libraries go
4881 set archlib archlib
4882 eval $prefixit
4883 : privlib default is /usr/local/lib/$package/$version
4884 : archlib default is /usr/local/lib/$package/$version/$archname
4885 : privlib may have an optional trailing /share.
4886 tdflt=`echo $privlib | $sed 's,/share$,,'`
4887 tdflt=$tdflt/$archname
4888 case "$archlib" in
4889 '')     dflt=$tdflt
4890         ;;
4891 *)      dflt="$archlib"
4892     ;;
4893 esac
4894 $cat <<EOM
4895
4896 $spackage contains architecture-dependent library files.  If you are
4897 sharing libraries in a heterogeneous environment, you might store
4898 these files in a separate location.  Otherwise, you can just include
4899 them with the rest of the public library files.
4900
4901 EOM
4902 fn=d+~
4903 rp='Where do you want to put the public architecture-dependent libraries?'
4904 . ./getfile
4905 archlib="$ans"
4906 archlibexp="$ansexp"
4907 if $test X"$archlib" = X"$privlib"; then
4908         d_archlib="$undef"
4909 else
4910         d_archlib="$define"
4911 fi
4912 : Change installation prefix, if necessary.
4913 if $test X"$prefix" != X"$installprefix"; then
4914         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4915 else
4916         installarchlib="$archlibexp"
4917 fi
4918
4919
4920 : Binary compatibility with 5.005 is not possible for builds
4921 : with advanced features
4922 case "$usethreads$usemultiplicity" in
4923 *define*)
4924         bincompat5005="$undef"
4925         d_bincompat5005="$undef"
4926         ;;
4927 *)      $cat <<EOM
4928
4929 This version of Perl can be compiled for binary compatibility with 5.005.
4930 If you decide to do so, you will be able to continue using most of the
4931 extensions that were compiled for Perl 5.005.
4932
4933 EOM
4934         case "$bincompat5005$d_bincompat5005" in
4935         *"$undef"*) dflt=n ;;
4936         *) dflt=y ;;
4937         esac
4938         rp='Binary compatibility with Perl 5.005?'
4939         . ./myread
4940         case "$ans" in
4941         y*) val="$define" ;;
4942         *)  val="$undef" ;;
4943         esac
4944         set d_bincompat5005
4945         eval $setvar
4946         case "$d_bincompat5005" in
4947         "$define")
4948                 bincompat5005="$define"
4949                 ;;
4950         *)      bincompat5005="$undef"
4951                 d_bincompat5005="$undef"
4952                 ;;
4953         esac
4954         ;;
4955 esac
4956
4957
4958 : see if setuid scripts can be secure
4959 $cat <<EOM
4960
4961 Some kernels have a bug that prevents setuid #! scripts from being
4962 secure.  Some sites have disabled setuid #! scripts because of this.
4963
4964 First let's decide if your kernel supports secure setuid #! scripts.
4965 (If setuid #! scripts would be secure but have been disabled anyway,
4966 don't say that they are secure if asked.)
4967
4968 EOM
4969
4970 val="$undef"
4971 if $test -d /dev/fd; then
4972         echo "#!$ls" >reflect
4973         chmod +x,u+s reflect
4974         ./reflect >flect 2>&1
4975         if $contains "/dev/fd" flect >/dev/null; then
4976                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4977                 val="$define"
4978         else
4979                 $cat <<EOM
4980 If you are not sure if they are secure, I can check but I'll need a
4981 username and password different from the one you are using right now.
4982 If you don't have such a username or don't want me to test, simply
4983 enter 'none'.
4984
4985 EOM
4986                 rp='Other username to test security of setuid scripts with?'
4987                 dflt='none'
4988                 . ./myread
4989                 case "$ans" in
4990                 n|none)
4991                         case "$d_suidsafe" in
4992                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4993                                 dflt=n;;
4994                         "$undef")
4995                                 echo "Well, the $hint value is *not* secure." >&4
4996                                 dflt=n;;
4997                         *)      echo "Well, the $hint value *is* secure." >&4
4998                                 dflt=y;;
4999                         esac
5000                         ;;
5001                 *)
5002                         $rm -f reflect flect
5003                         echo "#!$ls" >reflect
5004                         chmod +x,u+s reflect
5005                         echo >flect
5006                         chmod a+w flect
5007                         echo '"su" will (probably) prompt you for '"$ans's password."
5008                         su $ans -c './reflect >flect'
5009                         if $contains "/dev/fd" flect >/dev/null; then
5010                                 echo "Okay, it looks like setuid scripts are secure." >&4
5011                                 dflt=y
5012                         else
5013                                 echo "I don't think setuid scripts are secure." >&4
5014                                 dflt=n
5015                         fi
5016                         ;;
5017                 esac
5018                 rp='Does your kernel have *secure* setuid scripts?'
5019                 . ./myread
5020                 case "$ans" in
5021                 [yY]*)  val="$define";;
5022                 *)      val="$undef";;
5023                 esac
5024         fi
5025 else
5026         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5027         echo "(That's for file descriptors, not floppy disks.)"
5028         val="$undef"
5029 fi
5030 set d_suidsafe
5031 eval $setvar
5032
5033 $rm -f reflect flect
5034
5035 : now see if they want to do setuid emulation
5036 echo " "
5037 val="$undef"
5038 case "$d_suidsafe" in
5039 "$define")
5040         val="$undef"
5041         echo "No need to emulate SUID scripts since they are secure here." >& 4
5042         ;;
5043 *)
5044         $cat <<EOM
5045 Some systems have disabled setuid scripts, especially systems where
5046 setuid scripts cannot be secure.  On systems where setuid scripts have
5047 been disabled, the setuid/setgid bits on scripts are currently
5048 useless.  It is possible for $package to detect those bits and emulate
5049 setuid/setgid in a secure fashion.  This emulation will only work if
5050 setuid scripts have been disabled in your kernel.
5051
5052 EOM
5053         case "$d_dosuid" in
5054         "$define") dflt=y ;;
5055         *) dflt=n ;;
5056         esac
5057         rp="Do you want to do setuid/setgid emulation?"
5058         . ./myread
5059         case "$ans" in
5060         [yY]*)  val="$define";;
5061         *)      val="$undef";;
5062         esac
5063         ;;
5064 esac
5065 set d_dosuid
5066 eval $setvar
5067
5068 : determine filename position in cpp output
5069 echo " "
5070 echo "Computing filename position in cpp output for #include directives..." >&4
5071 echo '#include <stdio.h>' > foo.c
5072 $cat >fieldn <<EOF
5073 $startsh
5074 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5075 $grep '^[       ]*#.*stdio\.h' | \
5076 while read cline; do
5077         pos=1
5078         set \$cline
5079         while $test \$# -gt 0; do
5080                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5081                         echo "\$pos"
5082                         exit 0
5083                 fi
5084                 shift
5085                 pos=\`expr \$pos + 1\`
5086         done
5087 done
5088 EOF
5089 chmod +x fieldn
5090 fieldn=`./fieldn`
5091 $rm -f foo.c fieldn
5092 case $fieldn in
5093 '') pos='???';;
5094 1) pos=first;;
5095 2) pos=second;;
5096 3) pos=third;;
5097 *) pos="${fieldn}th";;
5098 esac
5099 echo "Your cpp writes the filename in the $pos field of the line."
5100
5101 : locate header file
5102 $cat >findhdr <<EOF
5103 $startsh
5104 wanted=\$1
5105 name=''
5106 for usrincdir in $usrinc
5107 do
5108         if test -f \$usrincdir/\$wanted; then
5109                 echo "\$usrincdir/\$wanted"
5110                 exit 0
5111         fi
5112 done
5113 awkprg='{ print \$$fieldn }'
5114 echo "#include <\$wanted>" > foo\$\$.c
5115 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5116 $grep "^[       ]*#.*\$wanted" | \
5117 while read cline; do
5118         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5119         case "\$name" in
5120         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5121         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5122         *) exit 2;;
5123         esac;
5124 done;
5125 #
5126 # status = 0: grep returned 0 lines, case statement not executed
5127 # status = 1: headerfile found
5128 # status = 2: while loop executed, no headerfile found
5129 #
5130 status=\$?
5131 $rm -f foo\$\$.c;
5132 if test \$status -eq 1; then
5133         exit 0;
5134 fi
5135 exit 1
5136 EOF
5137 chmod +x findhdr
5138
5139 : define an alternate in-header-list? function
5140 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5141 cont=true; xxf="echo \"<\$1> found.\" >&4";
5142 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5143 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5144 esac;
5145 case $# in 4) instead=instead;; *) instead="at last";; esac;
5146 while $test "$cont"; do
5147         xxx=`./findhdr $1`
5148         var=$2; eval "was=\$$2";
5149         if $test "$xxx" && $test -r "$xxx";
5150         then eval $xxf;
5151         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5152                 cont="";
5153         else eval $xxnf;
5154         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5155         set $yyy; shift; shift; yyy=$@;
5156         case $# in 0) cont="";;
5157         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5158                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5159         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5160                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5161         esac;
5162 done;
5163 while $test "$yyy";
5164 do set $yyy; var=$2; eval "was=\$$2";
5165         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5166         set $yyy; shift; shift; yyy=$@;
5167 done'
5168
5169 : see if this is a malloc.h system
5170 set malloc.h i_malloc
5171 eval $inhdr
5172
5173 : see if stdlib is available
5174 set stdlib.h i_stdlib
5175 eval $inhdr
5176
5177 : determine which malloc to compile in
5178 echo " "
5179 case "$usemymalloc" in
5180 ''|[yY]*|true|$define)  dflt='y' ;;
5181 *)      dflt='n' ;;
5182 esac
5183 rp="Do you wish to attempt to use the malloc that comes with $package?"
5184 . ./myread
5185 usemymalloc="$ans"
5186 case "$ans" in
5187 y*|true)
5188         usemymalloc='y'
5189         mallocsrc='malloc.c'
5190         mallocobj="malloc$_o"
5191         d_mymalloc="$define"
5192         case "$libs" in
5193         *-lmalloc*)
5194                 : Remove malloc from list of libraries to use
5195                 echo "Removing unneeded -lmalloc from library list" >&4
5196                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5197                 shift
5198                 libs="$*"
5199                 echo "libs = $libs" >&4
5200                 ;;
5201         esac
5202         ;;
5203 *)
5204         usemymalloc='n'
5205         mallocsrc=''
5206         mallocobj=''
5207         d_mymalloc="$undef"
5208         ;;
5209 esac
5210
5211 : compute the return types of malloc and free
5212 echo " "
5213 $cat >malloc.c <<END
5214 #$i_malloc I_MALLOC
5215 #$i_stdlib I_STDLIB
5216 #include <stdio.h>
5217 #include <sys/types.h>
5218 #ifdef I_MALLOC
5219 #include <malloc.h>
5220 #endif
5221 #ifdef I_STDLIB
5222 #include <stdlib.h>
5223 #endif
5224 #ifdef TRY_MALLOC
5225 void *malloc();
5226 #endif
5227 #ifdef TRY_FREE
5228 void free();
5229 #endif
5230 END
5231 case "$malloctype" in
5232 '')
5233         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5234                 malloctype='void *'
5235         else
5236                 malloctype='char *'
5237         fi
5238         ;;
5239 esac
5240 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5241
5242 case "$freetype" in
5243 '')
5244         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5245                 freetype='void'
5246         else
5247                 freetype='int'
5248         fi
5249         ;;
5250 esac
5251 echo "Your system uses $freetype free(), it would seem." >&4
5252 $rm -f malloc.[co]
5253 $cat <<EOM
5254
5255 After $package is installed, you may wish to install various
5256 add-on modules and utilities.  Typically, these add-ons will
5257 be installed under $prefix with the rest
5258 of this package.  However, you may wish to install such add-ons
5259 elsewhere under a different prefix.
5260
5261 If you do not wish to put everything under a single prefix, that's
5262 ok.  You will be prompted for the individual locations; this siteprefix
5263 is only used to suggest the defaults.
5264
5265 The default should be fine for most people.
5266
5267 EOM
5268 fn=d~+
5269 rp='Installation prefix to use for add-on modules and utilities?'
5270 : XXX Here might be another good place for an installstyle setting.
5271 case "$siteprefix" in
5272 '') dflt=$prefix ;;
5273 *)  dflt=$siteprefix ;;
5274 esac
5275 . ./getfile
5276 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5277 oldsiteprefix=''
5278 case "$siteprefix" in
5279 '') ;;
5280 *)      case "$ans" in
5281         "$prefix") ;;
5282         *) oldsiteprefix="$prefix";;
5283         esac
5284         ;;
5285 esac
5286 siteprefix="$ans"
5287 siteprefixexp="$ansexp"
5288
5289 : determine where site specific libraries go.
5290 : Usual default is /usr/local/lib/perl5/site_perl/$version
5291 : The default "style" setting is made in installstyle.U
5292 : XXX No longer works with Prefixit stuff.
5293 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5294 case "$sitelib" in
5295 '') case "$installstyle" in
5296         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5297         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5298         esac
5299         ;;
5300 *)      dflt="$sitelib"
5301         ;;
5302 esac
5303 $cat <<EOM
5304
5305 The installation process will create a directory for
5306 site-specific extensions and modules.  Most users find it convenient
5307 to place all site-specific files in this directory rather than in the
5308 main distribution directory.
5309
5310 EOM
5311 fn=d~+
5312 rp='Pathname for the site-specific library files?'
5313 . ./getfile
5314 sitelib="$ans"
5315 sitelibexp="$ansexp"
5316 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5317 : Change installation prefix, if necessary.
5318 if $test X"$prefix" != X"$installprefix"; then
5319         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5320 else
5321         installsitelib="$sitelibexp"
5322 fi
5323
5324 : determine where site specific architecture-dependent libraries go.
5325 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5326 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5327 : sitelib may have an optional trailing /share.
5328 case "$sitearch" in
5329 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5330         dflt="$dflt/$archname"
5331         ;;
5332 *)      dflt="$sitearch"
5333         ;;
5334 esac
5335 set sitearch sitearch none
5336 eval $prefixit
5337 $cat <<EOM
5338
5339 The installation process will also create a directory for
5340 architecture-dependent site-specific extensions and modules.
5341
5342 EOM
5343 fn=d~+
5344 rp='Pathname for the site-specific architecture-dependent library files?'
5345 . ./getfile
5346 sitearch="$ans"
5347 sitearchexp="$ansexp"
5348 : Change installation prefix, if necessary.
5349 if $test X"$prefix" != X"$installprefix"; then
5350         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5351 else
5352         installsitearch="$sitearchexp"
5353 fi
5354
5355 $cat <<EOM
5356
5357 The installation process will also create a directory for
5358 vendor-supplied add-ons.  Vendors who supply perl with their system
5359 may find it convenient to place all vendor-supplied files in this
5360 directory rather than in the main distribution directory.  This will
5361 ease upgrades between binary-compatible maintenance versions of perl.
5362
5363 Of course you may also use these directories in whatever way you see
5364 fit.  For example, you might use them to access modules shared over a
5365 company-wide network.
5366
5367 The default answer should be fine for most people.
5368 This causes further questions about vendor add-ons to be skipped
5369 and no vendor-specific directories will be configured for perl.
5370
5371 EOM
5372 rp='Do you want to configure vendor-specific add-on directories?'
5373 case "$usevendorprefix" in
5374 define|true|[yY]*) dflt=y ;;
5375 *)      : User may have set vendorprefix directly on Configure command line.
5376         case "$vendorprefix" in
5377         ''|' ') dflt=n ;;
5378         *)      dflt=y ;;
5379         esac
5380         ;;
5381 esac
5382 . ./myread
5383 case "$ans" in
5384 [yY]*)  fn=d~+
5385         rp='Installation prefix to use for vendor-supplied add-ons?'
5386         case "$vendorprefix" in
5387         '') dflt='' ;;
5388         *)  dflt=$vendorprefix ;;
5389         esac
5390         . ./getfile
5391         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5392         oldvendorprefix=''
5393         case "$vendorprefix" in
5394         '') ;;
5395         *)      case "$ans" in
5396                 "$prefix") ;;
5397                 *) oldvendorprefix="$prefix";;
5398                 esac
5399                 ;;
5400         esac
5401         usevendorprefix="$define"
5402         vendorprefix="$ans"
5403         vendorprefixexp="$ansexp"
5404         ;;
5405 *)      usevendorprefix="$undef"
5406         vendorprefix=''
5407         vendorprefixexp=''
5408         ;;
5409 esac
5410
5411 case "$vendorprefix" in
5412 '')     d_vendorlib="$undef"
5413         vendorlib=''
5414         vendorlibexp=''
5415         ;;
5416 *)      d_vendorlib="$define"
5417         : determine where vendor-supplied modules go.
5418         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5419         case "$vendorlib" in
5420         '')
5421                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5422                 case "$installstyle" in
5423                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5424                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5425                 esac
5426                 ;;
5427         *)      dflt="$vendorlib"
5428                 ;;
5429         esac
5430         fn=d~+
5431         rp='Pathname for the vendor-supplied library files?'
5432         . ./getfile
5433         vendorlib="$ans"
5434         vendorlibexp="$ansexp"
5435         ;;
5436 esac
5437 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
5438 : Change installation prefix, if necessary.
5439 if $test X"$prefix" != X"$installprefix"; then
5440         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5441 else
5442         installvendorlib="$vendorlibexp"
5443 fi
5444
5445 case "$vendorprefix" in
5446 '')     d_vendorarch="$undef"
5447         vendorarch=''
5448         vendorarchexp=''
5449         ;;
5450 *)      d_vendorarch="$define"
5451         : determine where vendor-supplied architecture-dependent libraries go.
5452         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
5453         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5454         : vendorlib may have an optional trailing /share.
5455         case "$vendorarch" in
5456         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
5457                 dflt="$dflt/$archname"
5458                 ;;
5459         *)      dflt="$vendorarch" ;;
5460         esac
5461         fn=d~+
5462         rp='Pathname for vendor-supplied architecture-dependent files?'
5463         . ./getfile
5464         vendorarch="$ans"
5465         vendorarchexp="$ansexp"
5466         ;;
5467 esac
5468 : Change installation prefix, if necessary.
5469 if $test X"$prefix" != X"$installprefix"; then
5470         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5471 else
5472         installvendorarch="$vendorarchexp"
5473 fi
5474
5475 : Final catch-all directories to search
5476 $cat <<EOM
5477
5478 Lastly, you can have perl look in other directories for extensions and
5479 modules in addition to those already specified.
5480 These directories will be searched after 
5481         $sitearch 
5482         $sitelib 
5483 EOM
5484 test X"$vendorlib" != "X" && echo '     ' $vendorlib
5485 test X"$vendorarch" != "X" && echo '    ' $vendorarch
5486 echo ' '
5487 case "$otherlibdirs" in
5488 ''|' ') dflt='none' ;;
5489 *)      dflt="$otherlibdirs" ;;
5490 esac
5491 $cat <<EOM
5492 Enter a colon-separated set of extra paths to include in perl's @INC
5493 search path, or enter 'none' for no extra paths.
5494
5495 EOM
5496
5497 rp='Colon-separated list of additional directories for perl to search?'
5498 . ./myread
5499 case "$ans" in
5500 ' '|''|none)    otherlibdirs=' ' ;;     
5501 *)      otherlibdirs="$ans" ;;
5502 esac
5503 case "$otherlibdirs" in
5504 ' ') val=$undef ;;
5505 *)      val=$define ;;
5506 esac
5507 set d_perl_otherlibdirs
5508 eval $setvar
5509
5510 : Cruising for prototypes
5511 echo " "
5512 echo "Checking out function prototypes..." >&4
5513 $cat >prototype.c <<'EOCP'
5514 int main(int argc, char *argv[]) {
5515         exit(0);}
5516 EOCP
5517 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5518         echo "Your C compiler appears to support function prototypes."
5519         val="$define"
5520 else
5521         echo "Your C compiler doesn't seem to understand function prototypes."
5522         val="$undef"
5523 fi
5524 set prototype
5525 eval $setvar
5526 $rm -f prototype*
5527
5528 case "$prototype" in
5529 "$define") ;;
5530 *)      ansi2knr='ansi2knr'
5531         echo " "
5532         cat <<EOM >&4
5533
5534 $me:  FATAL ERROR:
5535 This version of $package can only be compiled by a compiler that 
5536 understands function prototypes.  Unfortunately, your C compiler 
5537         $cc $ccflags
5538 doesn't seem to understand them.  Sorry about that.
5539
5540 If GNU cc is available for your system, perhaps you could try that instead.  
5541
5542 Eventually, we hope to support building Perl with pre-ANSI compilers.
5543 If you would like to help in that effort, please contact <perlbug@perl.org>.
5544
5545 Aborting Configure now.
5546 EOM
5547         exit 2
5548         ;;
5549 esac
5550
5551 : determine where public executables go
5552 echo " "
5553 set dflt bin bin
5554 eval $prefixit
5555 fn=d~
5556 rp='Pathname where the public executables will reside?'
5557 . ./getfile
5558 if $test "X$ansexp" != "X$binexp"; then
5559         installbin=''
5560 fi
5561 bin="$ans"
5562 binexp="$ansexp"
5563 : Change installation prefix, if necessary.
5564 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5565 if $test X"$prefix" != X"$installprefix"; then
5566         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5567 else
5568         installbin="$binexp"
5569 fi
5570
5571 : Find perl5.005 or later.
5572 echo "Looking for a previously installed perl5.005 or later... "
5573 case "$perl5" in
5574 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5575                 : Check if this perl is recent and can load a simple module
5576                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5577                         perl5=$tdir/perl
5578                         break;
5579                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5580                         perl5=$tdir/perl
5581                         break;
5582                 fi
5583         done
5584         ;;
5585 *)      perl5="$perl5"
5586         ;;
5587 esac
5588 case "$perl5" in
5589 '')     echo "None found.  That's ok.";;
5590 *)      echo "Using $perl5." ;;
5591 esac
5592
5593 : Determine list of previous versions to include in @INC
5594 $cat > getverlist <<EOPL
5595 #!$perl5 -w
5596 use File::Basename;
5597 \$api_versionstring = "$api_versionstring";
5598 \$version = "$version";
5599 \$stem = "$sitelib_stem";
5600 \$archname = "$archname";
5601 EOPL
5602         $cat >> getverlist <<'EOPL'
5603 # Can't have leading @ because metaconfig interprets it as a command!
5604 ;@inc_version_list=();
5605 # XXX Redo to do opendir/readdir? 
5606 if (-d $stem) {
5607     chdir($stem);
5608     ;@candidates = glob("5.*");
5609 }
5610 else {
5611     ;@candidates = ();
5612 }
5613
5614 # XXX ToDo:  These comparisons must be reworked when two-digit
5615 # subversions come along, so that 5.7.10 compares as greater than
5616 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5617 # widespread that we can use the built-in version vectors rather
5618 # than reinventing them here.  For 5.6.0, however, we must
5619 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5620 foreach $d (@candidates) {
5621     if ($d lt $version) {
5622         if ($d ge $api_versionstring) {
5623             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
5624         }
5625         elsif ($d ge "5.005") {
5626             unshift(@inc_version_list, grep { -d } $d);
5627         }
5628     }
5629     else {
5630         # Skip newer version.  I.e. don't look in
5631         # 5.7.0 if we're installing 5.6.1.
5632     }
5633 }
5634
5635 if (@inc_version_list) {
5636     print join(' ', @inc_version_list);
5637 }
5638 else {
5639     # Blank space to preserve value for next Configure run.
5640     print " ";
5641 }
5642 EOPL
5643 chmod +x getverlist
5644 case "$inc_version_list" in
5645 '')     if test -x "$perl5"; then
5646                 dflt=`$perl5 getverlist`
5647         else
5648                 dflt='none'
5649         fi
5650         ;;
5651 $undef) dflt='none' ;;
5652 *)  dflt="$inc_version_list" ;;
5653 esac
5654 case "$dflt" in
5655 ''|' ') dflt=none ;;
5656 esac
5657 $cat <<'EOM'
5658
5659 In order to ease the process of upgrading, this version of perl 
5660 can be configured to use modules built and installed with earlier 
5661 versions of perl that were installed under $prefix.  Specify here
5662 the list of earlier versions that this version of perl should check.
5663 If Configure detected no earlier versions of perl installed under
5664 $prefix, then the list will be empty.  Answer 'none' to tell perl
5665 to not search earlier versions.
5666
5667 The default should almost always be sensible, so if you're not sure,
5668 just accept the default.
5669 EOM
5670
5671 rp='List of earlier versions to include in @INC?'
5672 . ./myread
5673 case "$ans" in
5674 [Nn]one|''|' ') inc_version_list=' ' ;;
5675 *) inc_version_list="$ans" ;;
5676 esac
5677 case "$inc_version_list" in
5678 ''|' ') 
5679         inc_version_list_init='0';;
5680 *)      inc_version_list_init=`echo $inc_version_list |
5681                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5682         ;;
5683 esac
5684 $rm -f getverlist
5685
5686 : determine whether to install perl also as /usr/bin/perl
5687
5688 echo " "
5689 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5690         $cat <<EOM
5691 Many scripts expect perl to be installed as /usr/bin/perl.
5692 I can install the perl you are about to compile also as /usr/bin/perl
5693 (in addition to $installbin/perl).
5694 EOM
5695         case "$installusrbinperl" in
5696         "$undef"|[nN]*) dflt='n';;
5697         *)              dflt='y';;
5698         esac
5699         rp="Do you want to install perl as /usr/bin/perl?"
5700         . ./myread
5701         case "$ans" in
5702         [yY]*)  val="$define";;
5703         *)      val="$undef" ;;
5704         esac
5705 else
5706         val="$undef"
5707 fi
5708 set installusrbinperl
5709 eval $setvar
5710
5711 echo " "
5712 echo "Checking for GNU C Library..." >&4
5713 cat >gnulibc.c <<EOM
5714 #include <stdio.h>
5715 int main()
5716 {
5717 #ifdef __GLIBC__
5718     exit(0);
5719 #else
5720     exit(1);
5721 #endif
5722 }
5723 EOM
5724 set gnulibc
5725 if eval $compile_ok && ./gnulibc; then
5726         val="$define"
5727         echo "You are using the GNU C Library"
5728 else
5729         val="$undef"
5730         echo "You are not using the GNU C Library"
5731 fi
5732 $rm -f gnulibc*
5733 set d_gnulibc
5734 eval $setvar
5735
5736 : see if nm is to be used to determine whether a symbol is defined or not
5737 case "$usenm" in
5738 '')
5739         dflt=''
5740         case "$d_gnulibc" in
5741         "$define")
5742                 echo " "
5743                 echo "nm probably won't work on the GNU C Library." >&4
5744                 dflt=n
5745                 ;;
5746         esac
5747         case "$dflt" in
5748         '') 
5749                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5750                         echo " "
5751                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5752                         echo "'nm' won't be sufficient on this sytem." >&4
5753                         dflt=n
5754                 fi
5755                 ;;
5756         esac
5757         case "$dflt" in
5758         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5759                 if $test $dflt -gt 20; then
5760                         dflt=y
5761                 else
5762                         dflt=n
5763                 fi
5764                 ;;
5765         esac
5766         ;;
5767 *)
5768         case "$usenm" in
5769         true|$define) dflt=y;;
5770         *) dflt=n;;
5771         esac
5772         ;;
5773 esac
5774 $cat <<EOM
5775
5776 I can use $nm to extract the symbols from your C libraries. This
5777 is a time consuming task which may generate huge output on the disk (up
5778 to 3 megabytes) but that should make the symbols extraction faster. The
5779 alternative is to skip the 'nm' extraction part and to compile a small
5780 test program instead to determine whether each symbol is present. If
5781 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5782 this may be the best solution.
5783
5784 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5785
5786 EOM
5787 rp="Shall I use $nm to extract C symbols from the libraries?"
5788 . ./myread
5789 case "$ans" in
5790 [Nn]*) usenm=false;;
5791 *) usenm=true;;
5792 esac
5793
5794 runnm=$usenm
5795 case "$reuseval" in
5796 true) runnm=false;;
5797 esac
5798
5799 : nm options which may be necessary
5800 case "$nm_opt" in
5801 '') if $test -f /mach_boot; then
5802                 nm_opt=''       # Mach
5803         elif $test -d /usr/ccs/lib; then
5804                 nm_opt='-p'     # Solaris (and SunOS?)
5805         elif $test -f /dgux; then
5806                 nm_opt='-p'     # DG-UX
5807         elif $test -f /lib64/rld; then
5808                 nm_opt='-p'     # 64-bit Irix
5809         else
5810                 nm_opt=''
5811         fi;;
5812 esac
5813
5814 : nm options which may be necessary for shared libraries but illegal
5815 : for archive libraries.  Thank you, Linux.
5816 case "$nm_so_opt" in
5817 '')     case "$myuname" in
5818         *linux*)
5819                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5820                         nm_so_opt='--dynamic'
5821                 fi
5822                 ;;
5823         esac
5824         ;;
5825 esac
5826
5827 case "$runnm" in
5828 true)
5829 : get list of predefined functions in a handy place
5830 echo " "
5831 case "$libc" in
5832 '') libc=unknown
5833         case "$libs" in
5834         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5835         esac
5836         ;;
5837 esac
5838 libnames='';
5839 case "$libs" in
5840 '') ;;
5841 *)  for thislib in $libs; do
5842         case "$thislib" in
5843         -lc|-lc_s)
5844                 : Handle C library specially below.
5845                 ;;
5846         -l*)
5847                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5848                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5849                         :
5850                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5851                         :
5852                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5853                         :
5854                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5855                         :
5856                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5857                         :
5858                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5859                         :
5860                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5861                         :
5862                 else
5863                         try=''
5864                 fi
5865                 libnames="$libnames $try"
5866                 ;;
5867         *) libnames="$libnames $thislib" ;;
5868         esac
5869         done
5870         ;;
5871 esac
5872 xxx=normal
5873 case "$libc" in
5874 unknown)
5875         set /lib/libc.$so
5876         for xxx in $libpth; do
5877                 $test -r $1 || set $xxx/libc.$so
5878                 : The messy sed command sorts on library version numbers.
5879                 $test -r $1 || \
5880                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5881                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5882                                 h
5883                                 s/[0-9][0-9]*/0000&/g
5884                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5885                                 G
5886                                 s/\n/ /' | \
5887                          sort | $sed -e 's/^.* //'`
5888                 eval set \$$#
5889         done
5890         $test -r $1 || set /usr/ccs/lib/libc.$so
5891         $test -r $1 || set /lib/libsys_s$_a
5892         ;;
5893 *)
5894         set blurfl
5895         ;;
5896 esac
5897 if $test -r "$1"; then
5898         echo "Your (shared) C library seems to be in $1."
5899         libc="$1"
5900 elif $test -r /lib/libc && $test -r /lib/clib; then
5901         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5902         xxx=apollo
5903         libc='/lib/clib /lib/libc'
5904         if $test -r /lib/syslib; then
5905                 echo "(Your math library is in /lib/syslib.)"
5906                 libc="$libc /lib/syslib"
5907         fi
5908 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5909         echo "Your C library seems to be in $libc, as you said before."
5910 elif $test -r $incpath/usr/lib/libc$_a; then
5911         libc=$incpath/usr/lib/libc$_a;
5912         echo "Your C library seems to be in $libc.  That's fine."
5913 elif $test -r /lib/libc$_a; then
5914         libc=/lib/libc$_a;
5915         echo "Your C library seems to be in $libc.  You're normal."
5916 else
5917         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5918                 :
5919         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5920                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5921         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5922                 :
5923         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5924                 :
5925         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5926                 :
5927         else
5928                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5929         fi
5930         if $test -r "$tans"; then
5931                 echo "Your C library seems to be in $tans, of all places."
5932                 libc=$tans
5933         else
5934                 libc='blurfl'
5935         fi
5936 fi
5937 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5938         dflt="$libc"
5939         cat <<EOM
5940
5941 If the guess above is wrong (which it might be if you're using a strange
5942 compiler, or your machine supports multiple models), you can override it here.
5943
5944 EOM
5945 else
5946         dflt=''
5947         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5948         cat >&4 <<EOM
5949 I can't seem to find your C library.  I've looked in the following places:
5950
5951 EOM
5952         $sed 's/^/      /' libpath
5953         cat <<EOM
5954
5955 None of these seems to contain your C library. I need to get its name...
5956
5957 EOM
5958 fi
5959 fn=f
5960 rp='Where is your C library?'
5961 . ./getfile
5962 libc="$ans"
5963
5964 echo " "
5965 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5966 set X `cat libnames`
5967 shift
5968 xxx=files
5969 case $# in 1) xxx=file; esac
5970 echo "Extracting names from the following $xxx for later perusal:" >&4
5971 echo " "
5972 $sed 's/^/      /' libnames >&4
5973 echo " "
5974 $echo $n "This may take a while...$c" >&4
5975
5976 for file in $*; do
5977         case $file in
5978         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5979         *) $nm $nm_opt $file 2>/dev/null;;
5980         esac
5981 done >libc.tmp
5982
5983 $echo $n ".$c"
5984 $grep fprintf libc.tmp > libc.ptf
5985 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5986 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5987 xxx='[ADTSIW]'
5988 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5989         eval $xscan;\
5990         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5991                 eval $xrun
5992 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5993         eval $xscan;\
5994         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5995                 eval $xrun
5996 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5997         eval $xscan;\
5998         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5999                 eval $xrun
6000 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6001         eval $xscan;\
6002         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6003                 eval $xrun
6004 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6005         eval $xscan;\
6006         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6007                 eval $xrun
6008 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6009         eval $xscan;\
6010         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6011                 eval $xrun
6012 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6013                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6014         eval $xscan;\
6015         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6016                 eval $xrun
6017 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6018         eval $xscan;\
6019         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6020                 eval $xrun
6021 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6022         eval $xscan;\
6023         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6024                 eval $xrun
6025 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6026         eval $xscan;\
6027         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6028                 eval $xrun
6029 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6030         eval $xscan;\
6031         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6032                 eval $xrun
6033 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6034         eval $xscan;\
6035         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6036                 eval $xrun
6037 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6038         eval $xscan;\
6039         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6040                 eval $xrun
6041 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6042         eval $xscan;\
6043         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6044                 eval $xrun
6045 else
6046         $nm -p $* 2>/dev/null >libc.tmp
6047         $grep fprintf libc.tmp > libc.ptf
6048         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6049                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6050         then
6051                 nm_opt='-p'
6052                 eval $xrun
6053         else
6054                 echo " "
6055                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6056                 com=''
6057                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
6058                         for thisname in $libnames $libc; do
6059                                 $ar t $thisname >>libc.tmp
6060                         done
6061                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6062                         echo "Ok." >&4
6063                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6064                         # Repeat libc to extract forwarders to DLL entries too
6065                         for thisname in $libnames $libc; do
6066                                 $ar tv $thisname >>libc.tmp
6067                                 # Revision 50 of EMX has bug in $ar.
6068                                 # it will not extract forwarders to DLL entries
6069                                 # Use emximp which will extract exactly them.
6070                                 emximp -o tmp.imp $thisname \
6071                                     2>/dev/null && \
6072                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6073                                     < tmp.imp >>libc.tmp
6074                                 $rm tmp.imp
6075                         done
6076                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6077                         echo "Ok." >&4
6078                 else
6079                         echo "$ar didn't seem to work right." >&4
6080                         echo "Maybe this is a Cray...trying bld instead..." >&4
6081                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
6082                         then
6083                                 for thisname in $libnames; do
6084                                         bld t $libnames | \
6085                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6086                                         $ar t $thisname >>libc.tmp
6087                                 done
6088                                 echo "Ok." >&4
6089                         else
6090                                 echo "That didn't work either.  Giving up." >&4
6091                                 exit 1
6092                         fi
6093                 fi
6094         fi
6095 fi
6096 nm_extract="$com"
6097 if $test -f /lib/syscalls.exp; then
6098         echo " "
6099         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6100         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
6101 fi
6102 ;;
6103 esac
6104 $rm -f libnames libpath
6105
6106 : see if dld is available
6107 set dld.h i_dld
6108 eval $inhdr
6109
6110 : is a C symbol defined?
6111 csym='tlook=$1;
6112 case "$3" in
6113 -v) tf=libc.tmp; tc=""; tdc="";;
6114 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6115 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6116 esac;
6117 tx=yes;
6118 case "$reuseval-$4" in
6119 true-) ;;
6120 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6121 esac;
6122 case "$tx" in
6123 yes)
6124         case "$runnm" in
6125         true)
6126                 if $contains $tlook $tf >/dev/null 2>&1;
6127                 then tval=true;
6128                 else tval=false;
6129                 fi;;
6130         *)
6131                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6132                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6133                 then tval=true;
6134                 else tval=false;
6135                 fi;
6136                 $rm -f t t.c;;
6137         esac;;
6138 *)
6139         case "$tval" in
6140         $define) tval=true;;
6141         *) tval=false;;
6142         esac;;
6143 esac;
6144 eval "$2=$tval"'
6145
6146 : define an is-in-libc? function
6147 inlibc='echo " "; td=$define; tu=$undef;
6148 sym=$1; var=$2; eval "was=\$$2";
6149 tx=yes;
6150 case "$reuseval$was" in
6151 true) ;;
6152 true*) tx=no;;
6153 esac;
6154 case "$tx" in
6155 yes)
6156         set $sym tres -f;
6157         eval $csym;
6158         case "$tres" in
6159         true)
6160                 echo "$sym() found." >&4;
6161                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6162         *)
6163                 echo "$sym() NOT found." >&4;
6164                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6165         esac;;
6166 *)
6167         case "$was" in
6168         $define) echo "$sym() found." >&4;;
6169         *) echo "$sym() NOT found." >&4;;
6170         esac;;
6171 esac'
6172
6173 : see if dlopen exists
6174 xxx_runnm="$runnm"
6175 runnm=false
6176 set dlopen d_dlopen
6177 eval $inlibc
6178 runnm="$xxx_runnm"
6179
6180 : determine which dynamic loading, if any, to compile in
6181 echo " "
6182 dldir="ext/DynaLoader"
6183 case "$usedl" in
6184 $define|y|true)
6185         dflt='y'
6186         usedl="$define"
6187         ;;
6188 $undef|n|false)
6189         dflt='n'
6190         usedl="$undef"
6191         ;;
6192 *) 
6193         dflt='n'
6194         case "$d_dlopen" in
6195             $define) dflt='y' ;;
6196         esac
6197         case "$i_dld" in
6198             $define) dflt='y' ;;
6199         esac
6200         : Does a dl_xxx.xs file exist for this operating system
6201         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6202         ;;
6203 esac
6204 rp="Do you wish to use dynamic loading?"
6205 . ./myread
6206 usedl="$ans"
6207 case "$ans" in
6208 y*) usedl="$define"
6209         case "$dlsrc" in
6210         '')
6211                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6212                         dflt="$dldir/dl_${osname}.xs"
6213                 elif $test "$d_dlopen" = "$define" ; then
6214                         dflt="$dldir/dl_dlopen.xs"
6215                 elif $test "$i_dld" = "$define" ; then
6216                         dflt="$dldir/dl_dld.xs"
6217                 else
6218                         dflt=''
6219                 fi
6220                 ;;
6221         *)      dflt="$dldir/$dlsrc"
6222                 ;;
6223         esac
6224     echo "The following dynamic loading files are available:"
6225         : Can not go over to $dldir because getfile has path hard-coded in.
6226         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6227         rp="Source file to use for dynamic loading"
6228         fn="fne"
6229         gfpth="$src"
6230         . ./getfile
6231         usedl="$define"
6232         : emulate basename
6233         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6234
6235         $cat << EOM
6236
6237 Some systems may require passing special flags to $cc -c to
6238 compile modules that will be used to create a shared library.
6239 To use no flags, say "none".
6240
6241 EOM
6242     case "$cccdlflags" in
6243     '') case "$gccversion" in
6244                 '') case "$osname" in
6245                         hpux)   dflt='+z' ;;
6246                         next)   dflt='none' ;;
6247                         irix*)  dflt='-KPIC' ;;
6248                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6249                         sunos)  dflt='-pic' ;;
6250                         *)      dflt='none' ;;
6251                     esac
6252                         ;;
6253                 *)  case "$osname" in
6254                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6255                         *)      dflt='-fpic' ;;
6256                     esac ;;
6257             esac ;;
6258         ' ') dflt='none' ;;
6259     *)  dflt="$cccdlflags" ;;
6260     esac
6261     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6262     . ./myread
6263     case "$ans" in
6264     none) cccdlflags=' ' ;;
6265     *) cccdlflags="$ans" ;;
6266     esac
6267
6268     cat << EOM
6269
6270 Some systems use ld to create libraries that can be dynamically loaded,
6271 while other systems (such as those using ELF) use $cc.
6272
6273 EOM
6274         case "$ld" in
6275         '')     $cat >try.c <<'EOM'
6276 /* Test for whether ELF binaries are produced */
6277 #include <fcntl.h>
6278 #include <stdlib.h>
6279 int main() {
6280         char b[4];
6281         int i = open("a.out",O_RDONLY);
6282         if(i == -1) 
6283                 exit(1); /* fail */
6284         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6285                 exit(0); /* succeed (yes, it's ELF) */
6286         else
6287                 exit(1); /* fail */
6288 }
6289 EOM
6290                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6291                         cat <<EOM
6292 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6293 EOM
6294                         dflt="$cc"
6295                 else
6296                         echo "I'll use ld to build dynamic libraries."
6297                         dflt='ld'
6298                 fi
6299                 rm -f try.c a.out
6300                 ;;
6301         *)      dflt="$ld"
6302                 ;;
6303         esac
6304
6305     rp="What command should be used to create dynamic libraries?"
6306     . ./myread
6307         ld="$ans"
6308
6309     cat << EOM
6310
6311 Some systems may require passing special flags to $ld to create a
6312 library that can be dynamically loaded.  If your ld flags include
6313 -L/other/path options to locate libraries outside your loader's normal
6314 search path, you may need to specify those -L options here as well.  To
6315 use no flags, say "none".
6316
6317 EOM
6318     case "$lddlflags" in
6319     '') case "$osname" in
6320                         beos) dflt='-nostart' ;;
6321                         hpux) dflt='-b';
6322                               case "$gccversion" in
6323                               '') dflt="$dflt +vnocompatwarnings" ;;
6324                               esac
6325                               ;;        
6326                         linux|irix*)    dflt='-shared' ;;
6327                         next)  dflt='none' ;;
6328                         solaris) dflt='-G' ;;
6329                         sunos) dflt='-assert nodefinitions' ;;
6330                         svr4*|esix*) dflt="-G $ldflags" ;;
6331                 *)     dflt='none' ;;
6332                         esac
6333                         ;;
6334     *) dflt="$lddlflags" ;;
6335     esac
6336
6337         : Try to guess additional flags to pick up local libraries.
6338         : Be careful not to append to a plain 'none'
6339         case "$dflt" in
6340         none) dflt='' ;;
6341         esac
6342         for thisflag in $ldflags; do
6343                 case "$thisflag" in
6344                 -L*)
6345                         case " $dflt " in
6346                         *" $thisflag "*) ;;
6347                         *) dflt="$dflt $thisflag" ;;
6348                         esac
6349                         ;;
6350                 esac
6351         done
6352
6353         case "$dflt" in
6354         ''|' ') dflt='none' ;;
6355         esac
6356
6357     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6358     . ./myread
6359     case "$ans" in
6360     none) lddlflags=' ' ;;
6361     *) lddlflags="$ans" ;;
6362     esac
6363
6364         cat <<EOM
6365
6366 Some systems may require passing special flags to $cc to indicate that
6367 the resulting executable will use dynamic linking.  To use no flags,
6368 say "none".
6369
6370 EOM
6371     case "$ccdlflags" in
6372     '') case "$osname" in
6373                 hpux)   dflt='-Wl,-E' ;;
6374                 linux)  dflt='-rdynamic' ;;
6375                 next)   dflt='none' ;;
6376                 sunos)  dflt='none' ;;
6377                 *)      dflt='none' ;;
6378             esac ;;
6379     ' ')  dflt='none' ;;
6380     *)  dflt="$ccdlflags" ;;
6381     esac
6382     rp="Any special flags to pass to $cc to use dynamic linking?"
6383     . ./myread
6384     case "$ans" in
6385     none) ccdlflags=' ' ;;
6386     *) ccdlflags="$ans" ;;
6387     esac
6388     ;;
6389 *)  usedl="$undef"
6390         ld='ld'
6391     dlsrc='dl_none.xs'
6392     lddlflags=''
6393     ccdlflags=''
6394     ;;
6395 esac
6396
6397 also=''
6398 case "$usedl" in
6399 $undef)
6400         # No dynamic loading being used, so don't bother even to prompt.
6401         useshrplib='false'
6402         ;;
6403 *)      case "$useshrplib" in
6404         '')     case "$osname" in
6405                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6406                         dflt=y
6407                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6408                         ;;
6409                 next*)
6410                         case "$osvers" in
6411                         4*)     dflt=y
6412                                 also='Building a shared libperl is needed for MAB support.'
6413                                 ;;
6414                         *)      dflt=n
6415                                 ;;
6416                         esac
6417                         ;;
6418                 *)      dflt=n
6419                         ;;
6420                 esac
6421                 ;;
6422         $define|true|[Yy]*)
6423                 dflt=y
6424                 ;;
6425         *)      dflt=n
6426                 ;;
6427         esac
6428         $cat << EOM
6429
6430 The perl executable is normally obtained by linking perlmain.c with
6431 libperl${_a}, any static extensions (usually just DynaLoader), and
6432 any other libraries needed on this system (such as -lm, etc.).  Since
6433 your system supports dynamic loading, it is probably possible to build
6434 a shared libperl.$so.  If you will have more than one executable linked
6435 to libperl.$so, this will significantly reduce the size of each
6436 executable, but it may have a noticeable affect on performance.  The
6437 default is probably sensible for your system.
6438 $also
6439
6440 EOM
6441         rp="Build a shared libperl.$so (y/n)"
6442         . ./myread
6443         case "$ans" in
6444         true|$define|[Yy]*)
6445                 useshrplib='true'  ;;
6446         *)      useshrplib='false' ;;
6447         esac
6448         ;;
6449 esac
6450
6451 case "$useshrplib" in
6452 true)
6453         case "$libperl" in
6454         '')
6455                 # Figure out a good name for libperl.so.  Since it gets stored in
6456                 # a version-specific architecture-dependent library, the version
6457                 # number isn't really that important, except for making cc/ld happy.
6458                 #
6459                 # A name such as libperl.so.3.1
6460                 majmin="libperl.$so.$patchlevel.$subversion"
6461                 # A name such as libperl.so.301
6462                 majonly=`echo $patchlevel $subversion |
6463                         $awk '{printf "%d%02d", $1, $2}'`
6464                 majonly=libperl.$so.$majonly
6465                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6466                 # rely on figuring it out from the naming of libc.
6467                 case "${osname}${osvers}" in
6468                 next4*)
6469                         dflt=libperl.5.$so
6470                         # XXX How handle the --version stuff for MAB?
6471                         ;;
6472                 linux*)  # ld won't link with a bare -lperl otherwise.
6473                         dflt=libperl.$so
6474                         ;;
6475                 cygwin*) # include version
6476                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6477                         ;;
6478                 *)      # Try to guess based on whether libc has major.minor.
6479                         case "$libc" in
6480                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6481                         *libc.$so.[0-9]*) dflt=$majonly ;;
6482                         *)      dflt=libperl.$so ;;
6483                         esac
6484                         ;;
6485                 esac
6486                 ;;
6487         *)      dflt=$libperl
6488                 ;;
6489         esac
6490         cat << EOM
6491
6492 I need to select a good name for the shared libperl.  If your system uses
6493 library names with major and minor numbers, then you might want something
6494 like $majmin.  Alternatively, if your system uses a single version
6495 number for shared libraries, then you might want to use $majonly.
6496 Or, your system might be quite happy with a simple libperl.$so.
6497
6498 Since the shared libperl will get installed into a version-specific
6499 architecture-dependent directory, the version number of the shared perl
6500 library probably isn't important, so the default should be o.k.
6501
6502 EOM
6503         rp='What name do you want to give to the shared libperl?'
6504         . ./myread
6505         libperl=$ans
6506         echo "Ok, I'll use $libperl"
6507         ;;
6508 *)
6509         libperl="libperl${_a}"
6510         ;;
6511 esac
6512
6513 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6514 case "$shrpdir" in
6515 '') ;;
6516 *)      $cat >&4 <<EOM
6517 WARNING:  Use of the shrpdir variable for the installation location of
6518 the shared $libperl is not supported.  It was never documented and
6519 will not work in this version.  Let me (perlbug@perl.com)
6520 know of any problems this may cause.
6521
6522 EOM
6523         case "$shrpdir" in
6524         "$archlibexp/CORE")
6525                 $cat >&4 <<EOM
6526 But your current setting of $shrpdir is
6527 the default anyway, so it's harmless.
6528 EOM
6529                 ;;
6530         *)
6531                 $cat >&4 <<EOM
6532 Further, your current attempted setting of $shrpdir
6533 conflicts with the value of $archlibexp/CORE
6534 that installperl will use.
6535 EOM
6536                 ;;
6537         esac
6538         ;;
6539 esac
6540
6541 # How will the perl executable find the installed shared $libperl?
6542 # Add $xxx to ccdlflags.
6543 # If we can't figure out a command-line option, use $shrpenv to
6544 # set env LD_RUN_PATH.  The main perl makefile uses this.
6545 shrpdir=$archlibexp/CORE
6546 xxx=''
6547 tmp_shrpenv=''
6548 if "$useshrplib"; then
6549     case "$osname" in 
6550         aix)
6551                 # We'll set it in Makefile.SH...
6552                 ;;
6553         solaris|netbsd)
6554                 xxx="-R $shrpdir"
6555                 ;;
6556         freebsd)
6557                 xxx="-Wl,-R$shrpdir"
6558                 ;;
6559         linux|irix*|dec_osf)
6560                 xxx="-Wl,-rpath,$shrpdir"
6561                 ;;
6562         next)
6563                 # next doesn't like the default...
6564                 ;;
6565         beos)
6566                 # beos doesn't like the default, either.
6567                 ;;
6568         hpux*)
6569                 # hpux doesn't like the default, either.
6570                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6571                 ;;
6572         *)
6573                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6574                 ;;
6575         esac
6576         case "$xxx" in
6577         '') ;;
6578         *)      
6579                 # Only add $xxx if it isn't already in ccdlflags.
6580                 case " $ccdlflags " in
6581                 *" $xxx "*)     ;;
6582                 *)      ccdlflags="$ccdlflags $xxx"
6583                         cat <<EOM >&4
6584
6585 Adding $xxx to the flags
6586 passed to $ld so that the perl executable will find the 
6587 installed shared $libperl.
6588
6589 EOM
6590                         ;;
6591                 esac
6592                 ;;
6593         esac
6594 fi
6595 # Fix ccdlflags in AIX for building external extensions.
6596 # (For building Perl itself bare -bE:perl.exp is needed,
6597 #  Makefile.SH takes care of this.)
6598 case "$osname" in
6599 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6600 esac
6601 # Respect a hint or command-line value.
6602 case "$shrpenv" in
6603 '') shrpenv="$tmp_shrpenv" ;;
6604 esac
6605 case "$ldlibpthname" in
6606 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6607 none)   ldlibpthname='' ;;
6608 esac
6609
6610 : determine where manual pages go
6611 set man1dir man1dir none
6612 eval $prefixit
6613 $cat <<EOM
6614
6615 $spackage has manual pages available in source form.
6616 EOM
6617 case "$nroff" in
6618 nroff)
6619         echo "However, you don't have nroff, so they're probably useless to you."
6620         case "$man1dir" in
6621         '') man1dir="none";;
6622         esac;;
6623 esac
6624 echo "If you don't want the manual sources installed, answer 'none'."
6625 case "$man1dir" in
6626 ' ') dflt=none
6627         ;;
6628 '')
6629         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6630         lookpath="$lookpath $prefixexp/man/p_man/man1"
6631         lookpath="$lookpath $prefixexp/man/u_man/man1"
6632         lookpath="$lookpath $prefixexp/man/man.1"
6633         case "$sysman" in
6634         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6635         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6636         esac
6637         set dflt
6638         eval $prefixup
6639         ;;
6640 *)  dflt="$man1dir"
6641         ;;
6642 esac
6643 echo " "
6644 fn=dn+~
6645 rp="Where do the main $spackage manual pages (source) go?"
6646 . ./getfile
6647 if $test "X$man1direxp" != "X$ansexp"; then
6648         installman1dir=''
6649 fi
6650 man1dir="$ans"
6651 man1direxp="$ansexp"
6652 case "$man1dir" in
6653 '')     man1dir=' '
6654         installman1dir='';;
6655 esac
6656
6657 : Change installation prefix, if necessary.
6658 if $test X"$prefix" != X"$installprefix"; then
6659         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6660 else
6661         installman1dir="$man1direxp"
6662 fi
6663
6664 : What suffix to use on installed man pages
6665
6666 case "$man1dir" in
6667 ' ')
6668         man1ext='0'
6669         ;;
6670 *)
6671         rp="What suffix should be used for the main $spackage man pages?"
6672         case "$man1ext" in
6673         '')     case "$man1dir" in
6674                 *1)  dflt=1 ;;
6675                 *1p) dflt=1p ;;
6676                 *1pm) dflt=1pm ;;
6677                 *l) dflt=l;;
6678                 *n) dflt=n;;
6679                 *o) dflt=o;;
6680                 *p) dflt=p;;
6681                 *C) dflt=C;;
6682                 *L) dflt=L;;
6683                 *L1) dflt=L1;;
6684                 *) dflt=1;;
6685                 esac
6686                 ;;
6687         *)      dflt="$man1ext";;
6688         esac
6689         . ./myread
6690         man1ext="$ans"
6691         ;;
6692 esac
6693
6694 : see if we can have long filenames
6695 echo " "
6696 first=123456789abcdef
6697 $rm -f $first
6698 if (echo hi >$first) 2>/dev/null; then
6699         if $test -f 123456789abcde; then
6700                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6701                 val="$undef"
6702         else
6703                 echo 'You can have filenames longer than 14 characters.'>&4
6704                 val="$define"
6705         fi
6706 else
6707         $cat <<'EOM'
6708 You can't have filenames longer than 14 chars.
6709 You can't even think about them!
6710 EOM
6711         val="$undef"
6712 fi 
6713 set d_flexfnam
6714 eval $setvar
6715 $rm -rf 123456789abcde*
6716
6717 : determine where library module manual pages go
6718 set man3dir man3dir none
6719 eval $prefixit
6720 $cat <<EOM
6721
6722 $spackage has manual pages for many of the library modules.
6723 EOM
6724
6725 case "$nroff" in
6726 nroff)
6727         $cat <<'EOM'
6728 However, you don't have nroff, so they're probably useless to you.
6729 EOM
6730         case "$man3dir" in
6731         '') man3dir="none";;
6732         esac;;
6733 esac
6734
6735 case "$d_flexfnam" in
6736 undef)
6737         $cat <<'EOM'
6738 However, your system can't handle the long file names like File::Basename.3. 
6739 EOM
6740         case "$man3dir" in
6741         '') man3dir="none";;
6742         esac;;
6743 esac
6744
6745 echo "If you don't want the manual sources installed, answer 'none'."
6746 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6747 case "$man3dir" in
6748 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6749         if $test -d "$privlib/man/man3"; then
6750                 cat <<EOM >&4
6751
6752 WARNING:  Previous versions of perl installed man3 pages into
6753 $privlib/man/man3.  This version will suggest a 
6754 new default of $dflt.  
6755 EOM
6756                 tdflt=$dflt
6757                 dflt='n'
6758                 rp='Do you wish to preserve the old behavior?(y/n)'
6759                 . ./myread
6760                 case "$ans" in
6761                 y*) dflt="$privlib/man/man3" ;;
6762                 *)  dflt=$tdflt ;;
6763                 esac
6764     fi
6765         ;;
6766 *)      dflt="$man3dir" ;;
6767 esac
6768 case "$dflt" in
6769 ' ') dflt=none ;;
6770 esac
6771 echo " "
6772 fn=dn+~
6773 rp="Where do the $package library man pages (source) go?"
6774 . ./getfile
6775 man3dir="$ans"
6776 man3direxp="$ansexp"
6777 case "$man3dir" in
6778 '')     man3dir=' '
6779         installman3dir='';;
6780 esac
6781
6782 : Change installation prefix, if necessary.
6783 if $test X"$prefix" != X"$installprefix"; then
6784         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6785 else
6786         installman3dir="$man3direxp"
6787 fi
6788
6789 : What suffix to use on installed man pages
6790 case "$man3dir" in
6791 ' ')
6792         man3ext='0'
6793         ;;
6794 *)
6795         rp="What suffix should be used for the $package library man pages?"
6796         case "$man3ext" in
6797         '')     case "$man3dir" in
6798                 *3)  dflt=3 ;;
6799                 *3p) dflt=3p ;;
6800                 *3pm) dflt=3pm ;;
6801                 *l) dflt=l;;
6802                 *n) dflt=n;;
6803                 *o) dflt=o;;
6804                 *p) dflt=p;;
6805                 *C) dflt=C;;
6806                 *L) dflt=L;;
6807                 *L3) dflt=L3;;
6808                 *) dflt=3;;
6809                 esac
6810                 ;;
6811         *)      dflt="$man3ext";;
6812         esac
6813         . ./myread
6814         man3ext="$ans"
6815         ;;
6816 esac
6817
6818 : see if we have to deal with yellow pages, now NIS.
6819 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6820         if $test -f /usr/etc/nibindd; then
6821                 echo " "
6822                 echo "I'm fairly confident you're on a NeXT."
6823                 echo " "
6824                 rp='Do you get the hosts file via NetInfo?'
6825                 dflt=y
6826                 case "$hostcat" in
6827                 nidump*) ;;
6828                 '') ;;
6829                 *) dflt=n;;
6830                 esac
6831                 . ./myread
6832                 case "$ans" in
6833                 y*) hostcat='nidump hosts .';;
6834                 *)      case "$hostcat" in
6835                         nidump*) hostcat='';;
6836                         esac
6837                         ;;
6838                 esac
6839         fi
6840         case "$hostcat" in
6841         nidump*) ;;
6842         *)
6843                 case "$hostcat" in
6844                 *ypcat*) dflt=y;;
6845                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6846                                 dflt=y
6847                         else
6848                                 dflt=n
6849                         fi;;
6850                 *) dflt=n;;
6851                 esac
6852                 echo " "
6853                 rp='Are you getting the hosts file via yellow pages?'
6854                 . ./myread
6855                 case "$ans" in
6856                 y*) hostcat='ypcat hosts';;
6857                 *) hostcat='cat /etc/hosts';;
6858                 esac
6859                 ;;
6860         esac
6861 fi
6862 case "$hostcat" in
6863 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6864 esac
6865 case "$groupcat" in
6866 '') test -f /etc/group && groupcat='cat /etc/group';;
6867 esac
6868 case "$passcat" in
6869 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6870 esac
6871
6872 : now get the host name
6873 echo " "
6874 echo "Figuring out host name..." >&4
6875 case "$myhostname" in
6876 '') cont=true
6877         echo 'Maybe "hostname" will work...'
6878         if tans=`sh -c hostname 2>&1` ; then
6879                 myhostname=$tans
6880                 phostname=hostname
6881                 cont=''
6882         fi
6883         ;;
6884 *) cont='';;
6885 esac
6886 if $test "$cont"; then
6887         if ./xenix; then
6888                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6889                 if tans=`cat /etc/systemid 2>&1` ; then
6890                         myhostname=$tans
6891                         phostname='cat /etc/systemid'
6892                         echo "Whadyaknow.  Xenix always was a bit strange..."
6893                         cont=''
6894                 fi
6895         elif $test -r /etc/systemid; then
6896                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6897         fi
6898 fi
6899 if $test "$cont"; then
6900         echo 'No, maybe "uuname -l" will work...'
6901         if tans=`sh -c 'uuname -l' 2>&1` ; then
6902                 myhostname=$tans
6903                 phostname='uuname -l'
6904         else
6905                 echo 'Strange.  Maybe "uname -n" will work...'
6906                 if tans=`sh -c 'uname -n' 2>&1` ; then
6907                         myhostname=$tans
6908                         phostname='uname -n'
6909                 else
6910                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6911                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6912                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6913                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6914                         else
6915                                 case "$myhostname" in
6916                                 '') echo "Does this machine have an identity crisis or something?"
6917                                         phostname='';;
6918                                 *)
6919                                         echo "Well, you said $myhostname before..."
6920                                         phostname='echo $myhostname';;
6921                                 esac
6922                         fi
6923                 fi
6924         fi
6925 fi
6926 : you do not want to know about this
6927 set $myhostname
6928 myhostname=$1
6929
6930 : verify guess
6931 if $test "$myhostname" ; then
6932         dflt=y
6933         rp='Your host name appears to be "'$myhostname'".'" Right?"
6934         . ./myread
6935         case "$ans" in
6936         y*) ;;
6937         *) myhostname='';;
6938         esac
6939 fi
6940
6941 : bad guess or no guess
6942 while $test "X$myhostname" = X ; do
6943         dflt=''
6944         rp="Please type the (one word) name of your host:"
6945         . ./myread
6946         myhostname="$ans"
6947 done
6948
6949 : translate upper to lower if necessary
6950 case "$myhostname" in
6951 *[A-Z]*)
6952         echo "(Normalizing case in your host name)"
6953         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6954         ;;
6955 esac
6956
6957 case "$myhostname" in
6958 *.*)
6959         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6960         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6961         echo "(Trimming domain name from host name--host name is now $myhostname)"
6962         ;;
6963 *) case "$mydomain" in
6964         '')
6965                 {
6966                         test "X$hostcat" = "Xypcat hosts" &&
6967                         ypmatch "$myhostname" hosts 2>/dev/null |\
6968                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6969                         $test -s hosts
6970                 } || {
6971                         test "X$hostcat" != "X" &&
6972                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6973                                         /[       ]$myhostname[  . ]/p" > hosts
6974                 }
6975                 tmp_re="[       . ]"
6976                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6977                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6978                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6979                         hosts | $sort | $uniq | \
6980                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6981                 case `$echo X$dflt` in
6982                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6983                         dflt=.
6984                         ;;
6985                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6986                         ;;
6987                 esac
6988                 case "$dflt" in
6989                 .)
6990                         tans=`./loc resolv.conf X /etc /usr/etc`
6991                         if $test -f "$tans"; then
6992                                 echo "(Attempting domain name extraction from $tans)"
6993                                 dflt=.`$sed -n -e 's/   / /g' \
6994                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6995                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6996                                 case "$dflt" in
6997                                 .) dflt=.`$sed -n -e 's/        / /g' \
6998                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6999                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7000                                         ;;
7001                                 esac
7002                         fi
7003                         ;;
7004                 esac
7005                 case "$dflt" in
7006                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7007                         dflt=.`sh -c domainname 2>/dev/null`
7008                         case "$dflt" in
7009                         '') dflt='.';;
7010                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7011                         esac
7012                         ;;
7013                 esac
7014                 case "$dflt" in
7015                 .) echo "(Lost all hope -- silly guess then)"
7016                         dflt='.uucp'
7017                         ;;
7018                 esac
7019                 $rm -f hosts
7020                 ;;
7021         *) dflt="$mydomain";;
7022         esac;;
7023 esac
7024 echo " "
7025 rp="What is your domain name?"
7026 . ./myread
7027 tans="$ans"
7028 case "$ans" in
7029 '') ;;
7030 .*) ;;
7031 *) tans=".$tans";;
7032 esac
7033 mydomain="$tans"
7034
7035 : translate upper to lower if necessary
7036 case "$mydomain" in
7037 *[A-Z]*)
7038         echo "(Normalizing case in your domain name)"
7039         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7040         ;;
7041 esac
7042
7043 : a little sanity check here
7044 case "$phostname" in
7045 '') ;;
7046 *)
7047         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7048         $myhostname$mydomain|$myhostname) ;;
7049         *)
7050                 case "$phostname" in
7051                 sed*)
7052                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7053                         ;;
7054                 *)
7055                         echo "(That doesn't agree with your $phostname command, by the way.)"
7056                         ;;
7057                 esac
7058         ;;
7059         esac
7060         ;;
7061 esac
7062
7063 $cat <<EOM
7064
7065 I need to get your e-mail address in Internet format if possible, i.e.
7066 something like user@host.domain. Please answer accurately since I have
7067 no easy means to double check it. The default value provided below
7068 is most probably close to reality but may not be valid from outside
7069 your organization...
7070
7071 EOM
7072 cont=x
7073 while test "$cont"; do
7074         case "$cf_email" in
7075         '') dflt="$cf_by@$myhostname$mydomain";;
7076         *) dflt="$cf_email";;
7077         esac
7078         rp='What is your e-mail address?'
7079         . ./myread
7080         cf_email="$ans"
7081         case "$cf_email" in
7082         *@*.*) cont='' ;;
7083         *)
7084                 rp='Address does not look like an Internet one.  Use it anyway?'
7085                 case "$fastread" in
7086                 yes) dflt=y ;;
7087                 *) dflt=n ;;
7088                 esac
7089                 . ./myread
7090                 case "$ans" in
7091                 y*) cont='' ;;
7092                 *) echo " " ;;
7093                 esac
7094                 ;;
7095         esac
7096 done
7097
7098 $cat <<EOM
7099
7100 If you or somebody else will be maintaining perl at your site, please
7101 fill in the correct e-mail address here so that they may be contacted
7102 if necessary. Currently, the "perlbug" program included with perl
7103 will send mail to this address in addition to perlbug@perl.com. You may
7104 enter "none" for no administrator.
7105
7106 EOM
7107 case "$perladmin" in
7108 '') dflt="$cf_email";;
7109 *) dflt="$perladmin";;
7110 esac
7111 rp='Perl administrator e-mail address'
7112 . ./myread
7113 perladmin="$ans"
7114
7115 : figure out how to guarantee perl startup
7116 case "$startperl" in
7117 '')
7118         case "$sharpbang" in
7119         *!)
7120                 $cat <<EOH
7121
7122 I can use the #! construct to start perl on your system. This will
7123 make startup of perl scripts faster, but may cause problems if you
7124 want to share those scripts and perl is not in a standard place
7125 ($binexp/perl) on all your platforms. The alternative is to force
7126 a shell by starting the script with a single ':' character.
7127
7128 EOH
7129                 dflt="$binexp/perl"
7130                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7131                 . ./myread
7132                 case "$ans" in
7133                 none)   startperl=": # use perl";;
7134                 *)      startperl="#!$ans"
7135                         if $test 30 -lt `echo "$ans" | wc -c`; then
7136                                 $cat >&4 <<EOM
7137
7138 WARNING:  Some systems limit the #! command to 32 characters.
7139 If you experience difficulty running Perl scripts with #!, try
7140 installing Perl in a directory with a shorter pathname.
7141
7142 EOM
7143                         fi ;;
7144                 esac
7145                 ;;
7146         *) startperl=": # use perl"
7147                 ;;
7148         esac
7149         ;;
7150 esac
7151 echo "I'll use $startperl to start perl scripts."
7152
7153 : figure best path for perl in scripts
7154 case "$perlpath" in
7155 '')
7156         perlpath="$binexp/perl"
7157         case "$startperl" in
7158         *!*) ;;
7159         *)
7160                 $cat <<EOH
7161
7162 I will use the "eval 'exec'" idiom to start Perl on your system.
7163 I can use the full path of your Perl binary for this purpose, but
7164 doing so may cause problems if you want to share those scripts and
7165 Perl is not always in a standard place ($binexp/perl).
7166
7167 EOH
7168                 dflt="$binexp/perl"
7169                 rp="What path shall I use in \"eval 'exec'\"?"
7170                 . ./myread
7171                 perlpath="$ans"
7172                 ;;
7173         esac
7174         ;;
7175 esac
7176 case "$startperl" in
7177 *!*)    ;;
7178 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7179 esac
7180
7181 : determine where public executable scripts go
7182 set scriptdir scriptdir
7183 eval $prefixit
7184 case "$scriptdir" in
7185 '')
7186         dflt="$bin"
7187         : guess some guesses
7188         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7189         $test -d /usr/share/bin     && dflt=/usr/share/bin
7190         $test -d /usr/local/script  && dflt=/usr/local/script
7191         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7192         $test -d $prefixexp/script  && dflt=$prefixexp/script
7193         set dflt
7194         eval $prefixup
7195         ;;
7196 *)  dflt="$scriptdir"
7197         ;;
7198 esac
7199 $cat <<EOM
7200  
7201 Some installations have a separate directory just for executable scripts so
7202 that they can mount it across multiple architectures but keep the scripts in
7203 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7204 Or you might just lump your scripts in with all your other executables.
7205  
7206 EOM
7207 fn=d~
7208 rp='Where do you keep publicly executable scripts?'
7209 . ./getfile
7210 if $test "X$ansexp" != "X$scriptdirexp"; then
7211         installscript=''
7212 fi
7213 scriptdir="$ans"
7214 scriptdirexp="$ansexp"
7215 : Change installation prefix, if necessary.
7216 if $test X"$prefix" != X"$installprefix"; then
7217         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7218 else
7219         installscript="$scriptdirexp"
7220 fi
7221
7222 : determine where add-on public executables go
7223 case "$sitebin" in
7224 '')     dflt=$siteprefix/bin ;;
7225 *)      dflt=$sitebin ;;
7226 esac
7227 fn=d~
7228 rp='Pathname where the add-on public executables should be installed?'
7229 . ./getfile
7230 sitebin="$ans"
7231 sitebinexp="$ansexp"
7232 : Change installation prefix, if necessary.
7233 if $test X"$prefix" != X"$installprefix"; then
7234         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7235 else
7236         installsitebin="$sitebinexp"
7237 fi
7238
7239 : see if sqrtl exists
7240 set sqrtl d_sqrtl
7241 eval $inlibc
7242
7243 case "$ccflags" in
7244 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7245 esac
7246
7247 case "$uselongdouble" in
7248 $define|true|[yY]*)     dflt='y';;
7249 *) dflt='n';;
7250 esac
7251 cat <<EOM
7252
7253 Perl can be built to take advantage of long doubles which
7254 (if available) may give more accuracy and range for floating point numbers.
7255
7256 If this doesn't make any sense to you, just accept the default '$dflt'.
7257 EOM
7258 rp='Try to use long doubles if available?'
7259 . ./myread
7260 case "$ans" in
7261 y|Y)    val="$define"   ;;
7262 *)      val="$undef"    ;;
7263 esac
7264 set uselongdouble
7265 eval $setvar
7266
7267 case "$uselongdouble" in
7268 true|[yY]*) uselongdouble="$define" ;;
7269 esac
7270
7271 case "$uselongdouble" in
7272 $define)
7273 : Look for a hint-file generated 'call-back-unit'.  If the
7274 : user has specified that long doubles should be used,
7275 : we may need to set or change some other defaults.
7276         if $test -f uselongdouble.cbu; then
7277                 echo "Your platform has some specific hints for long doubles, using them..."
7278                 . ./uselongdouble.cbu
7279         else
7280                 $cat <<EOM
7281 (Your platform doesn't have any specific hints for long doubles.)
7282 EOM
7283         fi
7284         ;;
7285 esac
7286
7287 case "$uselongdouble:$d_sqrtl" in
7288 $define:$undef)
7289                 $cat <<EOM >&4
7290
7291 *** You requested the use of long doubles but you do not seem to have
7292 *** the mathematic functions for long doubles.  I'm disabling the use
7293 *** of long doubles.
7294
7295 EOM
7296         uselongdouble=$undef
7297         ;;
7298 esac
7299
7300 case "$useperlio" in
7301 $define|true|[yY]*)     dflt='y';;
7302 *) dflt='n';;
7303 esac
7304 cat <<EOM
7305
7306 Previous version of $package used the standard IO mechanisms as defined
7307 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7308 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7309 the default.  This abstraction layer can use AT&T's sfio (if you already
7310 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7311 problems with some extension modules.  Using PerlIO with stdio is safe,
7312 but it is slower than plain stdio and therefore is not the default.
7313
7314 If this doesn't make any sense to you, just accept the default '$dflt'.
7315 EOM
7316 rp='Use the experimental PerlIO abstraction layer?'
7317 . ./myread
7318 case "$ans" in
7319 y|Y) 
7320         val="$define"
7321         ;;     
7322 *)      
7323         echo "Ok, doing things the stdio way"
7324         val="$undef"
7325         ;;
7326 esac
7327 set useperlio
7328 eval $setvar 
7329
7330 case "$vendorprefix" in
7331 '')     d_vendorbin="$undef"
7332         vendorbin=''
7333         vendorbinexp=''
7334         ;;
7335 *)      d_vendorbin="$define"
7336         : determine where vendor-supplied executables go.
7337         case "$vendorbin" in
7338         '') dflt=$vendorprefix/bin ;;
7339         *)      dflt="$vendorbin" ;;
7340         esac
7341         fn=d~+
7342         rp='Pathname for the vendor-supplied executables directory?'
7343         . ./getfile
7344         vendorbin="$ans"
7345         vendorbinexp="$ansexp"
7346         ;;
7347 esac
7348 : Change installation prefix, if necessary.
7349 if $test X"$prefix" != X"$installprefix"; then
7350         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7351 else
7352         installvendorbin="$vendorbinexp"
7353 fi
7354
7355 : see if qgcvt exists
7356 set qgcvt d_qgcvt
7357 eval $inlibc
7358
7359 : check for length of double
7360 echo " "
7361 case "$doublesize" in
7362 '')
7363         echo "Checking to see how big your double precision numbers are..." >&4
7364         $cat >try.c <<'EOCP'
7365 #include <stdio.h>
7366 int main()
7367 {
7368     printf("%d\n", (int)sizeof(double));
7369     exit(0);
7370 }
7371 EOCP
7372         set try
7373         if eval $compile_ok; then
7374                 doublesize=`./try`
7375                 echo "Your double is $doublesize bytes long."
7376         else
7377                 dflt='8'
7378                 echo "(I can't seem to compile the test program.  Guessing...)"
7379                 rp="What is the size of a double precision number (in bytes)?"
7380                 . ./myread
7381                 doublesize="$ans"
7382         fi
7383         ;;
7384 esac
7385 $rm -f try.c try
7386
7387 : check for long doubles
7388 echo " "
7389 echo "Checking to see if you have long double..." >&4
7390 echo 'int main() { long double x = 7.0; }' > try.c
7391 set try
7392 if eval $compile; then
7393         val="$define"
7394         echo "You have long double."
7395 else
7396         val="$undef"
7397         echo "You do not have long double."
7398 fi
7399 $rm try.*
7400 set d_longdbl
7401 eval $setvar
7402
7403 : check for length of long double
7404 case "${d_longdbl}${longdblsize}" in
7405 $define)
7406         echo " "
7407         echo "Checking to see how big your long doubles are..." >&4
7408         $cat >try.c <<'EOCP'
7409 #include <stdio.h>
7410 int main()
7411 {
7412         printf("%d\n", sizeof(long double));
7413 }
7414 EOCP
7415         set try
7416         set try
7417         if eval $compile; then
7418                 longdblsize=`./try$exe_ext`
7419                 echo "Your long doubles are $longdblsize bytes long."
7420         else
7421                 dflt='8'
7422                 echo " "
7423                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7424                 rp="What is the size of a long double (in bytes)?"
7425                 . ./myread
7426                 longdblsize="$ans"
7427         fi
7428         if $test "X$doublesize" = "X$longdblsize"; then
7429                 echo "(That isn't any different from an ordinary double.)"
7430         fi      
7431         ;;
7432 esac
7433 $rm -f try.* try
7434
7435 echo " "
7436
7437 if $test X"$d_longdbl" = X"$define"; then
7438
7439 echo "Checking how to print long doubles..." >&4
7440
7441 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7442         $cat >try.c <<'EOCP'
7443 #include <sys/types.h>
7444 #include <stdio.h>
7445 int main() {
7446   double d = 123.456;
7447   printf("%.3f\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='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7456                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7457                         echo "We will use %f."
7458                         ;;
7459                 esac
7460         fi
7461 fi
7462
7463 if $test X"$sPRIfldbl" = X; then
7464         $cat >try.c <<'EOCP'
7465 #include <sys/types.h>
7466 #include <stdio.h>
7467 int main() {
7468   long double d = 123.456;
7469   printf("%.3llf\n", d);
7470 }
7471 EOCP
7472         set try
7473         if eval $compile; then
7474                 yyy=`./try$exe_ext`
7475                 case "$yyy" in
7476                 123.456)
7477                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7478                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7479                         echo "We will use %llf."
7480                         ;;
7481                 esac
7482         fi
7483 fi
7484
7485 if $test X"$sPRIfldbl" = X; then
7486         $cat >try.c <<'EOCP'
7487 #include <sys/types.h>
7488 #include <stdio.h>
7489 int main() {
7490   long double d = 123.456;
7491   printf("%.3Lf\n", d);
7492 }
7493 EOCP
7494         set try
7495         if eval $compile; then
7496                 yyy=`./try$exe_ext`
7497                 case "$yyy" in
7498                 123.456)
7499                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7500                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7501                         echo "We will use %Lf."
7502                         ;;
7503                 esac
7504         fi
7505 fi
7506
7507 if $test X"$sPRIfldbl" = X; then
7508         $cat >try.c <<'EOCP'
7509 #include <sys/types.h>
7510 #include <stdio.h>
7511 int main() {
7512   long double d = 123.456;
7513   printf("%.3lf\n", d);
7514 }
7515 EOCP
7516         set try
7517         if eval $compile; then
7518                 yyy=`./try$exe_ext`
7519                 case "$yyy" in
7520                 123.456)
7521                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7522                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7523                         echo "We will use %lf."
7524                         ;;
7525                 esac
7526         fi
7527 fi
7528
7529 if $test X"$sPRIfldbl" = X; then
7530         echo "Cannot figure out how to print long doubles." >&4
7531 fi
7532
7533 $rm -f try try.*
7534
7535 fi # d_longdbl
7536
7537 case "$sPRIfldbl" in
7538 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7539         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7540         ;;
7541 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7542         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7543         ;;
7544 esac
7545
7546 : Check how to convert floats to strings.
7547 if test "X$d_Gconvert" = X; then
7548         echo " "
7549         echo "Checking for an efficient way to convert floats to strings."
7550         echo " " > try.c
7551         case "$uselongdouble" in
7552         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7553         esac
7554         case "$d_longdbl" in
7555         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7556         esac
7557         case "$d_PRIgldbl" in
7558         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7559         esac
7560         $cat >>try.c <<EOP
7561 #ifdef TRY_gconvert
7562 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7563 char *myname = "gconvert";
7564 #endif
7565 #ifdef TRY_gcvt
7566 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7567 char *myname = "gcvt";
7568 #endif
7569 #ifdef TRY_qgcvt
7570 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7571 char *myname = "qgcvt";
7572 #define DOUBLETYPE long double
7573 #endif
7574 #ifdef TRY_sprintf
7575 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7576 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7577 #else
7578 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7579 #endif
7580 char *myname = "sprintf";
7581 #endif
7582
7583 #ifndef DOUBLETYPE
7584 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7585 #define DOUBLETYPE long double
7586 #else
7587 #define DOUBLETYPE double
7588 #endif
7589 #endif
7590
7591 #include <stdio.h>
7592
7593 #define I_STDLIB $i_stdlib
7594 #ifdef I_STDLIB
7595 #include <stdlib.h>
7596 #endif
7597
7598 int
7599 checkit(expect, got)
7600 char *expect;
7601 char *got;
7602 {
7603     if (strcmp(expect, got)) {
7604                 printf("%s oddity:  Expected %s, got %s\n",
7605                         myname, expect, got);
7606                 exit(1);
7607         }
7608 }
7609
7610 int main()
7611
7612         char buf[64]; 
7613         buf[63] = '\0';
7614
7615         /* This must be 1st test on (which?) platform */
7616         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7617         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7618         checkit("0.1", buf);
7619
7620         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7621         checkit("1", buf);
7622
7623         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7624         checkit("1.1", buf);
7625
7626         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7627         checkit("1.01", buf);
7628
7629         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7630         checkit("1.001", buf);
7631
7632         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7633         checkit("1.0001", buf);
7634
7635         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7636         checkit("1.00001", buf);
7637
7638         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7639         checkit("1.000001", buf);
7640
7641         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7642         checkit("0", buf);
7643
7644         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7645         checkit("-1", buf);
7646
7647         /* Some Linux gcvt's give 1.e+5 here. */
7648         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7649         checkit("100000", buf);
7650         
7651         /* Some Linux gcvt's give -1.e+5 here. */
7652         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7653         checkit("-100000", buf);
7654
7655         exit(0);
7656 }
7657 EOP
7658         case "$d_Gconvert" in
7659         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7660         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7661         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7662         *) xxx_list='gconvert gcvt sprintf' ;;
7663         esac
7664
7665         case "$d_longdbl$uselongdouble$d_qgcvt" in
7666         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7667         esac
7668
7669         for xxx_convert in $xxx_list; do
7670                 echo "Trying $xxx_convert..."
7671                 $rm -f try try$_o
7672                 set try -DTRY_$xxx_convert
7673                 if eval $compile; then
7674                         echo "$xxx_convert() found." >&4
7675                         if ./try; then
7676                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7677                                 break;
7678                         else
7679                                 echo "...But $xxx_convert didn't work as I expected."
7680                         fi
7681                 else
7682                         echo "$xxx_convert NOT found." >&4
7683                 fi
7684         done
7685                 
7686         case "$xxx_convert" in
7687         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7688         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7689         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7690         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7691            "$define$define$define")
7692               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7693            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7694            esac
7695            ;;  
7696         esac
7697 fi
7698
7699 : Initialize h_fcntl
7700 h_fcntl=false
7701
7702 : Initialize h_sysfile
7703 h_sysfile=false
7704
7705 : access call always available on UNIX
7706 set access d_access
7707 eval $inlibc
7708
7709 : locate the flags for 'access()'
7710 case "$d_access" in
7711 "$define")
7712         echo " "
7713         $cat >access.c <<'EOCP'
7714 #include <sys/types.h>
7715 #ifdef I_FCNTL
7716 #include <fcntl.h>
7717 #endif
7718 #ifdef I_SYS_FILE
7719 #include <sys/file.h>
7720 #endif
7721 #ifdef I_UNISTD
7722 #include <unistd.h>
7723 #endif
7724 int main() {
7725         exit(R_OK);
7726 }
7727 EOCP
7728         : check sys/file.h first, no particular reason here
7729         if $test `./findhdr sys/file.h` && \
7730                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7731                 h_sysfile=true;
7732                 echo "<sys/file.h> defines the *_OK access constants." >&4
7733         elif $test `./findhdr fcntl.h` && \
7734                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7735                 h_fcntl=true;
7736                 echo "<fcntl.h> defines the *_OK access constants." >&4
7737         elif $test `./findhdr unistd.h` && \
7738                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7739                 echo "<unistd.h> defines the *_OK access constants." >&4
7740         else
7741                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7742         fi
7743         ;;
7744 esac
7745 $rm -f access*
7746
7747 : see if accessx exists
7748 set accessx d_accessx
7749 eval $inlibc
7750
7751 : see if alarm exists
7752 set alarm d_alarm
7753 eval $inlibc
7754
7755 : see if atolf exists
7756 set atolf d_atolf
7757 eval $inlibc
7758
7759 : see if atoll exists
7760 set atoll d_atoll
7761 eval $inlibc
7762
7763 : Look for GNU-cc style attribute checking
7764 echo " "
7765 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7766 $cat >attrib.c <<'EOCP'
7767 #include <stdio.h>
7768 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7769 EOCP
7770 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7771         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7772                 echo "Your C compiler doesn't fully support __attribute__."
7773                 val="$undef"
7774         else
7775                 echo "Your C compiler supports __attribute__."
7776                 val="$define"
7777         fi
7778 else
7779         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7780         val="$undef"
7781 fi
7782 set d_attribut
7783 eval $setvar
7784 $rm -f attrib*
7785
7786 : see if bcmp exists
7787 set bcmp d_bcmp
7788 eval $inlibc
7789
7790 : see if bcopy exists
7791 set bcopy d_bcopy
7792 eval $inlibc
7793
7794 : see if this is a unistd.h system
7795 set unistd.h i_unistd
7796 eval $inhdr
7797
7798 : see if getpgrp exists
7799 set getpgrp d_getpgrp
7800 eval $inlibc
7801
7802 case "$d_getpgrp" in
7803 "$define")
7804         echo " "
7805         echo "Checking to see which flavor of getpgrp is in use..."
7806         $cat >set.c <<EOP
7807 #$i_unistd I_UNISTD
7808 #include <sys/types.h>
7809 #ifdef I_UNISTD
7810 #  include <unistd.h>
7811 #endif
7812 int main()
7813 {
7814         if (getuid() == 0) {
7815                 printf("(I see you are running Configure as super-user...)\n");
7816                 setuid(1);
7817         }
7818 #ifdef TRY_BSD_PGRP
7819         if (getpgrp(1) == 0)
7820                 exit(0);
7821 #else
7822         if (getpgrp() > 0)
7823                 exit(0);
7824 #endif
7825         exit(1);
7826 }
7827 EOP
7828         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7829                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7830                 val="$define"
7831         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7832                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7833                 val="$undef"
7834         else
7835                 echo "I can't seem to compile and run the test program."
7836                 if ./usg; then
7837                         xxx="a USG one, i.e. you use getpgrp()."
7838                 else
7839                         # SVR4 systems can appear rather BSD-ish.
7840                         case "$i_unistd" in
7841                         $undef)
7842                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7843                                 val="$define"
7844                                 ;;
7845                         $define)
7846                                 xxx="probably a USG one, i.e. you use getpgrp()."
7847                                 val="$undef"
7848                                 ;;
7849                         esac
7850                 fi
7851                 echo "Assuming your getpgrp is $xxx" >&4
7852         fi
7853         ;;
7854 *) val="$undef";;
7855 esac
7856 set d_bsdgetpgrp
7857 eval $setvar
7858 $rm -f set set.c
7859
7860 : see if setpgrp exists
7861 set setpgrp d_setpgrp
7862 eval $inlibc
7863
7864 case "$d_setpgrp" in
7865 "$define")
7866         echo " "
7867         echo "Checking to see which flavor of setpgrp is in use..."
7868         $cat >set.c <<EOP
7869 #$i_unistd I_UNISTD
7870 #include <sys/types.h>
7871 #ifdef I_UNISTD
7872 #  include <unistd.h>
7873 #endif
7874 int main()
7875 {
7876         if (getuid() == 0) {
7877                 printf("(I see you are running Configure as super-user...)\n");
7878                 setuid(1);
7879         }
7880 #ifdef TRY_BSD_PGRP
7881         if (-1 == setpgrp(1, 1))
7882                 exit(0);
7883 #else
7884         if (setpgrp() != -1)
7885                 exit(0);
7886 #endif
7887         exit(1);
7888 }
7889 EOP
7890         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7891                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7892                 val="$define"
7893         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7894                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7895                 val="$undef"
7896         else
7897                 echo "(I can't seem to compile and run the test program.)"
7898                 if ./usg; then
7899                         xxx="a USG one, i.e. you use setpgrp()."
7900                 else
7901                         # SVR4 systems can appear rather BSD-ish.
7902                         case "$i_unistd" in
7903                         $undef)
7904                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7905                                 val="$define"
7906                                 ;;
7907                         $define)
7908                                 xxx="probably a USG one, i.e. you use setpgrp()."
7909                                 val="$undef"
7910                                 ;;
7911                         esac
7912                 fi
7913                 echo "Assuming your setpgrp is $xxx" >&4
7914         fi
7915         ;;
7916 *) val="$undef";;
7917 esac
7918 set d_bsdsetpgrp
7919 eval $setvar
7920 $rm -f set set.c
7921 : see if bzero exists
7922 set bzero d_bzero
7923 eval $inlibc
7924
7925 : see if signal is declared as pointer to function returning int or void
7926 echo " "
7927 xxx=`./findhdr signal.h`
7928 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7929 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7930         echo "You have int (*signal())() instead of void." >&4
7931         val="$undef"
7932 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7933         echo "You have void (*signal())()." >&4
7934         val="$define"
7935 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7936         echo "You have int (*signal())() instead of void." >&4
7937         val="$undef"
7938 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7939         echo "You have void (*signal())()." >&4
7940         val="$define"
7941 else
7942         case "$d_voidsig" in
7943         '')
7944         echo "I can't determine whether signal handler returns void or int..." >&4
7945                 dflt=void
7946                 rp="What type does your signal handler return?"
7947                 . ./myread
7948                 case "$ans" in
7949                 v*) val="$define";;
7950                 *) val="$undef";;
7951                 esac;;
7952         "$define")
7953                 echo "As you already told me, signal handler returns void." >&4
7954                 val="$define"
7955                 ;;
7956         *)      echo "As you already told me, signal handler returns int." >&4
7957                 val="$undef"
7958                 ;;
7959         esac
7960 fi
7961 set d_voidsig
7962 eval $setvar
7963 case "$d_voidsig" in
7964 "$define") signal_t="void";;
7965 *) signal_t="int";;
7966 esac
7967 $rm -f $$.tmp
7968
7969 : check for ability to cast large floats to 32-bit ints.
7970 echo " "
7971 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7972 if $test "$intsize" -ge 4; then
7973         xxx=int
7974 else
7975         xxx=long
7976 fi
7977 $cat >try.c <<EOCP
7978 #include <stdio.h>
7979 #include <sys/types.h>
7980 #include <signal.h>
7981 $signal_t blech(s) int s; { exit(3); }
7982 int main()
7983 {
7984         $xxx i32;
7985         double f, g;
7986         int result = 0;
7987         char str[16];
7988         signal(SIGFPE, blech);
7989
7990         /* Don't let compiler optimize the test away.  Store the number 
7991            in a writable string for gcc to pass to sscanf under HP/UX.
7992         */
7993         sprintf(str, "2147483647");
7994         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7995         g = 10 * f;
7996         i32  = ($xxx) g;
7997
7998         /* x86 processors will probably give 0x8000 0000, which is a
7999        sign change.  We don't want that.  We want to mimic SPARC
8000            behavior here, which is to preserve the sign and give
8001            back 0x7fff ffff.
8002         */
8003         if (i32 != ($xxx) f)
8004                 result |= 1;
8005         exit(result);
8006 }
8007 EOCP
8008 set try
8009 if eval $compile_ok; then
8010         ./try
8011         yyy=$?
8012 else
8013         echo "(I can't seem to compile the test program--assuming it can't)"
8014         yyy=1
8015 fi
8016 case "$yyy" in
8017 0)      val="$define"
8018         echo "Yup, it can."
8019         ;;
8020 *)      val="$undef"
8021         echo "Nope, it can't."
8022         ;;
8023 esac
8024 set d_casti32
8025 eval $setvar
8026 $rm -f try try.*
8027
8028 : check for ability to cast negative floats to unsigned
8029 echo " "
8030 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8031 $cat >try.c <<EOCP
8032 #include <stdio.h>
8033 #include <sys/types.h>
8034 #include <signal.h>
8035 $signal_t blech(s) int s; { exit(7); }
8036 $signal_t blech_in_list(s) int s; { exit(4); }
8037 unsigned long dummy_long(p) unsigned long p; { return p; }
8038 unsigned int dummy_int(p) unsigned int p; { return p; }
8039 unsigned short dummy_short(p) unsigned short p; { return p; }
8040 int main()
8041 {
8042         double f;
8043         unsigned long along;
8044         unsigned int aint;
8045         unsigned short ashort;
8046         int result = 0;
8047         char str[16];
8048         
8049         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8050            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8051            optimized the whole file away
8052         */
8053         /* Store the number in a writable string for gcc to pass to 
8054            sscanf under HP/UX.
8055         */
8056         sprintf(str, "-123");
8057         sscanf(str, "%lf", &f);  /* f = -123.; */
8058
8059         signal(SIGFPE, blech);
8060         along = (unsigned long)f;
8061         aint = (unsigned int)f;
8062         ashort = (unsigned short)f;
8063         if (along != (unsigned long)-123)
8064                 result |= 1;
8065         if (aint != (unsigned int)-123)
8066                 result |= 1;
8067         if (ashort != (unsigned short)-123)
8068                 result |= 1;
8069         sprintf(str, "1073741824.");
8070         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8071         f = f + f;
8072         along = 0;
8073         along = (unsigned long)f;
8074         if (along != 0x80000000)
8075                 result |= 2;
8076         f -= 1.;
8077         along = 0;
8078         along = (unsigned long)f;
8079         if (along != 0x7fffffff)
8080                 result |= 1;
8081         f += 2.;
8082         along = 0;
8083         along = (unsigned long)f;
8084         if (along != 0x80000001)
8085                 result |= 2;
8086         if (result)
8087                 exit(result);
8088         signal(SIGFPE, blech_in_list);
8089         sprintf(str, "123.");
8090         sscanf(str, "%lf", &f);  /* f = 123.; */
8091         along = dummy_long((unsigned long)f);
8092         aint = dummy_int((unsigned int)f);
8093         ashort = dummy_short((unsigned short)f);
8094         if (along != (unsigned long)123)
8095                 result |= 4;
8096         if (aint != (unsigned int)123)
8097                 result |= 4;
8098         if (ashort != (unsigned short)123)
8099                 result |= 4;
8100         exit(result);
8101
8102 }
8103 EOCP
8104 set try
8105 if eval $compile_ok; then
8106         ./try
8107         castflags=$?
8108 else
8109         echo "(I can't seem to compile the test program--assuming it can't)"
8110         castflags=7
8111 fi
8112 case "$castflags" in
8113 0)      val="$define"
8114         echo "Yup, it can."
8115         ;;
8116 *)      val="$undef"
8117         echo "Nope, it can't."
8118         ;;
8119 esac
8120 set d_castneg
8121 eval $setvar
8122 $rm -f try.*
8123
8124 : see if vprintf exists
8125 echo " "
8126 if set vprintf val -f d_vprintf; eval $csym; $val; then
8127         echo 'vprintf() found.' >&4
8128         val="$define"
8129         $cat >vprintf.c <<'EOF'
8130 #include <varargs.h>
8131
8132 int main() { xxx("foo"); }
8133
8134 xxx(va_alist)
8135 va_dcl
8136 {
8137         va_list args;
8138         char buf[10];
8139
8140         va_start(args);
8141         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8142 }
8143 EOF
8144         set vprintf
8145         if eval $compile && ./vprintf; then
8146                 echo "Your vsprintf() returns (int)." >&4
8147                 val2="$undef"
8148         else
8149                 echo "Your vsprintf() returns (char*)." >&4
8150                 val2="$define"
8151         fi
8152 else
8153         echo 'vprintf() NOT found.' >&4
8154                 val="$undef"
8155                 val2="$undef"
8156 fi
8157 set d_vprintf
8158 eval $setvar
8159 val=$val2
8160 set d_charvspr
8161 eval $setvar
8162
8163 : see if chown exists
8164 set chown d_chown
8165 eval $inlibc
8166
8167 : see if chroot exists
8168 set chroot d_chroot
8169 eval $inlibc
8170
8171 : see if chsize exists
8172 set chsize d_chsize
8173 eval $inlibc
8174
8175 : check for const keyword
8176 echo " "
8177 echo 'Checking to see if your C compiler knows about "const"...' >&4
8178 $cat >const.c <<'EOCP'
8179 typedef struct spug { int drokk; } spug;
8180 int main()
8181 {
8182         const char *foo;
8183         const spug y;
8184 }
8185 EOCP
8186 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8187         val="$define"
8188         echo "Yup, it does."
8189 else
8190         val="$undef"
8191         echo "Nope, it doesn't."
8192 fi
8193 set d_const
8194 eval $setvar
8195
8196 : see if crypt exists
8197 echo " "
8198 if set crypt val -f d_crypt; eval $csym; $val; then
8199         echo 'crypt() found.' >&4
8200         val="$define"
8201         cryptlib=''
8202 else
8203         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8204         if $test -z "$cryptlib"; then
8205                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8206         else
8207                 cryptlib=-lcrypt
8208         fi
8209         if $test -z "$cryptlib"; then
8210                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8211         else
8212                 cryptlib=-lcrypt
8213         fi
8214         if $test -z "$cryptlib"; then
8215                 cryptlib=`./loc libcrypt$_a "" $libpth`
8216         else
8217                 cryptlib=-lcrypt
8218         fi
8219         if $test -z "$cryptlib"; then
8220                 echo 'crypt() NOT found.' >&4
8221                 val="$undef"
8222         else
8223                 val="$define"
8224         fi
8225 fi
8226 set d_crypt
8227 eval $setvar
8228
8229 : get csh whereabouts
8230 case "$csh" in
8231 'csh') val="$undef" ;;
8232 *) val="$define" ;;
8233 esac
8234 set d_csh
8235 eval $setvar
8236 : Respect a hint or command line value for full_csh.
8237 case "$full_csh" in
8238 '') full_csh=$csh ;;
8239 esac
8240
8241 : see if cuserid exists
8242 set cuserid d_cuserid
8243 eval $inlibc
8244
8245 : see if this is a limits.h system
8246 set limits.h i_limits
8247 eval $inhdr
8248
8249 : see if this is a float.h system
8250 set float.h i_float
8251 eval $inhdr
8252
8253 : See if number of significant digits in a double precision number is known
8254 echo " "
8255 $cat >dbl_dig.c <<EOM
8256 #$i_limits I_LIMITS
8257 #$i_float I_FLOAT
8258 #ifdef I_LIMITS
8259 #include <limits.h>
8260 #endif
8261 #ifdef I_FLOAT
8262 #include <float.h>
8263 #endif
8264 #ifdef DBL_DIG
8265 printf("Contains DBL_DIG");
8266 #endif
8267 EOM
8268 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8269 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8270         echo "DBL_DIG found." >&4
8271         val="$define"
8272 else
8273         echo "DBL_DIG NOT found." >&4
8274         val="$undef"
8275 fi
8276 $rm -f dbl_dig.?
8277 set d_dbl_dig
8278 eval $setvar
8279
8280 : see if difftime exists
8281 set difftime d_difftime
8282 eval $inlibc
8283
8284 : see if this is a dirent system
8285 echo " "
8286 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8287         val="$define"
8288         echo "<dirent.h> found." >&4
8289 else
8290         val="$undef"
8291         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8292                 echo "<sys/dir.h> found." >&4
8293                 echo " "
8294         else
8295                 xinc=`./findhdr sys/ndir.h`
8296         fi
8297         echo "<dirent.h> NOT found." >&4
8298 fi
8299 set i_dirent
8300 eval $setvar
8301
8302 : Look for type of directory structure.
8303 echo " "
8304 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8305
8306 case "$direntrytype" in
8307 ''|' ')
8308         case "$i_dirent" in
8309         $define) guess1='struct dirent' ;;
8310         *) guess1='struct direct'  ;;
8311         esac
8312         ;;
8313 *)      guess1="$direntrytype"
8314         ;;
8315 esac
8316
8317 case "$guess1" in
8318 'struct dirent') guess2='struct direct' ;;
8319 *) guess2='struct dirent' ;;
8320 esac
8321                 
8322 if $contains "$guess1" try.c >/dev/null 2>&1; then
8323         direntrytype="$guess1"
8324         echo "Your directory entries are $direntrytype." >&4
8325 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8326         direntrytype="$guess2"
8327         echo "Your directory entries seem to be $direntrytype." >&4
8328 else
8329         echo "I don't recognize your system's directory entries." >&4
8330         rp="What type is used for directory entries on this system?"
8331         dflt="$guess1"
8332         . ./myread
8333         direntrytype="$ans"
8334 fi
8335 $rm -f try.c
8336
8337
8338 : see if the directory entry stores field length
8339 echo " "
8340 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8341 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8342         echo "Good, your directory entry keeps length information in d_namlen." >&4
8343         val="$define"
8344 else
8345         echo "Your directory entry does not know about the d_namlen field." >&4
8346         val="$undef"
8347 fi
8348 set d_dirnamlen
8349 eval $setvar
8350 $rm -f try.c
8351
8352 : see if dlerror exists
8353 xxx_runnm="$runnm"
8354 runnm=false
8355 set dlerror d_dlerror
8356 eval $inlibc
8357 runnm="$xxx_runnm"
8358
8359 : see if dlfcn is available
8360 set dlfcn.h i_dlfcn
8361 eval $inhdr
8362
8363 case "$usedl" in
8364 $define|y|true)
8365         $cat << EOM
8366
8367 On a few systems, the dynamically loaded modules that perl generates and uses
8368 will need a different extension than shared libs. The default will probably
8369 be appropriate.
8370
8371 EOM
8372         case "$dlext" in
8373         '')     dflt="$so" ;;
8374         *)      dflt="$dlext" ;;
8375         esac
8376         rp='What is the extension of dynamically loaded modules'
8377         . ./myread
8378         dlext="$ans"
8379         ;;
8380 *)
8381         dlext="none"
8382         ;;
8383 esac
8384
8385 : Check if dlsym need a leading underscore
8386 echo " "
8387 val="$undef"
8388
8389 case "$dlsrc" in
8390 dl_dlopen.xs)
8391         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8392         $cat >dyna.c <<'EOM'
8393 fred () { }
8394 EOM
8395
8396 $cat >fred.c<<EOM
8397
8398 #include <stdio.h>
8399 #$i_dlfcn I_DLFCN
8400 #ifdef I_DLFCN
8401 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8402 #else
8403 #include <sys/types.h>
8404 #include <nlist.h>
8405 #include <link.h>
8406 #endif
8407
8408 extern int fred() ;
8409
8410 int main()
8411 {
8412     void * handle ;
8413     void * symbol ;
8414 #ifndef RTLD_LAZY
8415     int mode = 1 ;
8416 #else
8417     int mode = RTLD_LAZY ;
8418 #endif
8419     handle = dlopen("./dyna.$dlext", mode) ;
8420     if (handle == NULL) {
8421         printf ("1\n") ;
8422         fflush (stdout) ;
8423         exit(0);
8424     }
8425     symbol = dlsym(handle, "fred") ;
8426     if (symbol == NULL) {
8427         /* try putting a leading underscore */
8428         symbol = dlsym(handle, "_fred") ;
8429         if (symbol == NULL) {
8430             printf ("2\n") ;
8431             fflush (stdout) ;
8432             exit(0);
8433         }
8434         printf ("3\n") ;
8435     }
8436     else
8437         printf ("4\n") ;
8438     fflush (stdout) ;
8439     exit(0);
8440 }
8441 EOM
8442         : Call the object file tmp-dyna.o in case dlext=o.
8443         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8444                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8445                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8446                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8447                 xxx=`./fred`
8448                 case $xxx in
8449                 1)      echo "Test program failed using dlopen." >&4
8450                         echo "Perhaps you should not use dynamic loading." >&4;;
8451                 2)      echo "Test program failed using dlsym." >&4
8452                         echo "Perhaps you should not use dynamic loading." >&4;;
8453                 3)      echo "dlsym needs a leading underscore" >&4
8454                         val="$define" ;;
8455                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8456                 esac
8457         else
8458                 echo "I can't compile and run the test program." >&4
8459                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8460         fi
8461         ;;
8462 esac
8463                 
8464 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8465
8466 set d_dlsymun
8467 eval $setvar
8468
8469 hasproto='varname=$1; func=$2; shift; shift;
8470 while $test $# -ge 2; do
8471         case "$1" in
8472         $define) echo "#include <$2>";;
8473         esac ;
8474     shift 2;
8475 done > try.c;
8476 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8477 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8478         echo "$func() prototype found.";
8479         val="$define";
8480 else
8481         echo "$func() prototype NOT found.";
8482         val="$undef";
8483 fi;
8484 set $varname;
8485 eval $setvar;
8486 $rm -f try.c tryout.c'
8487
8488 : see if prototype for drand48 is available
8489 echo " "
8490 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8491 eval $hasproto
8492
8493 : see if dup2 exists
8494 set dup2 d_dup2
8495 eval $inlibc
8496
8497 : see if eaccess exists
8498 set eaccess d_eaccess
8499 eval $inlibc
8500
8501 : see if endgrent exists
8502 set endgrent d_endgrent
8503 eval $inlibc
8504
8505 : see if endhostent exists
8506 set endhostent d_endhent
8507 eval $inlibc
8508
8509 : see if endnetent exists
8510 set endnetent d_endnent
8511 eval $inlibc
8512
8513 : see if endprotoent exists
8514 set endprotoent d_endpent
8515 eval $inlibc
8516
8517 : see if endpwent exists
8518 set endpwent d_endpwent
8519 eval $inlibc
8520
8521 : see if endservent exists
8522 set endservent d_endsent
8523 eval $inlibc
8524
8525 : Locate the flags for 'open()'
8526 echo " "
8527 $cat >open3.c <<'EOCP'
8528 #include <sys/types.h>
8529 #ifdef I_FCNTL
8530 #include <fcntl.h>
8531 #endif
8532 #ifdef I_SYS_FILE
8533 #include <sys/file.h>
8534 #endif
8535 int main() {
8536         if(O_RDONLY);
8537 #ifdef O_TRUNC
8538         exit(0);
8539 #else
8540         exit(1);
8541 #endif
8542 }
8543 EOCP
8544 : check sys/file.h first to get FREAD on Sun
8545 if $test `./findhdr sys/file.h` && \
8546                 set open3 -DI_SYS_FILE && eval $compile; then
8547         h_sysfile=true;
8548         echo "<sys/file.h> defines the O_* constants..." >&4
8549         if ./open3; then
8550                 echo "and you have the 3 argument form of open()." >&4
8551                 val="$define"
8552         else
8553                 echo "but not the 3 argument form of open().  Oh, well." >&4
8554                 val="$undef"
8555         fi
8556 elif $test `./findhdr fcntl.h` && \
8557                 set open3 -DI_FCNTL && eval $compile; then
8558         h_fcntl=true;
8559         echo "<fcntl.h> defines the O_* constants..." >&4
8560         if ./open3; then
8561                 echo "and you have the 3 argument form of open()." >&4
8562                 val="$define"
8563         else
8564                 echo "but not the 3 argument form of open().  Oh, well." >&4
8565                 val="$undef"
8566         fi
8567 else
8568         val="$undef"
8569         echo "I can't find the O_* constant definitions!  You got problems." >&4
8570 fi
8571 set d_open3
8572 eval $setvar
8573 $rm -f open3*
8574
8575 : see which of string.h or strings.h is needed
8576 echo " "
8577 strings=`./findhdr string.h`
8578 if $test "$strings" && $test -r "$strings"; then
8579         echo "Using <string.h> instead of <strings.h>." >&4
8580         val="$define"
8581 else
8582         val="$undef"
8583         strings=`./findhdr strings.h`
8584         if $test "$strings" && $test -r "$strings"; then
8585                 echo "Using <strings.h> instead of <string.h>." >&4
8586         else
8587                 echo "No string header found -- You'll surely have problems." >&4
8588         fi
8589 fi
8590 set i_string
8591 eval $setvar
8592 case "$i_string" in
8593 "$undef") strings=`./findhdr strings.h`;;
8594 *)        strings=`./findhdr string.h`;;
8595 esac
8596
8597 : check for non-blocking I/O stuff
8598 case "$h_sysfile" in
8599 true) echo "#include <sys/file.h>" > head.c;;
8600 *)
8601         case "$h_fcntl" in
8602         true) echo "#include <fcntl.h>" > head.c;;
8603         *) echo "#include <sys/fcntl.h>" > head.c;;
8604         esac
8605         ;;
8606 esac
8607 echo " "
8608 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8609 case "$o_nonblock" in
8610 '')
8611         $cat head.c > try.c
8612         $cat >>try.c <<'EOCP'
8613 #include <stdio.h>
8614 int main() {
8615 #ifdef O_NONBLOCK
8616         printf("O_NONBLOCK\n");
8617         exit(0);
8618 #endif
8619 #ifdef O_NDELAY
8620         printf("O_NDELAY\n");
8621         exit(0);
8622 #endif
8623 #ifdef FNDELAY
8624         printf("FNDELAY\n");
8625         exit(0);
8626 #endif
8627         exit(0);
8628 }
8629 EOCP
8630         set try
8631         if eval $compile_ok; then
8632                 o_nonblock=`./try`
8633                 case "$o_nonblock" in
8634                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8635                 *) echo "Seems like we can use $o_nonblock.";;
8636                 esac
8637         else
8638                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8639         fi
8640         ;;
8641 *) echo "Using $hint value $o_nonblock.";;
8642 esac
8643 $rm -f try try.* .out core
8644
8645 echo " "
8646 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8647 case "$eagain" in
8648 '')
8649         $cat head.c > try.c
8650         $cat >>try.c <<EOCP
8651 #include <errno.h>
8652 #include <sys/types.h>
8653 #include <signal.h>
8654 #include <stdio.h> 
8655 #define MY_O_NONBLOCK $o_nonblock
8656 #ifndef errno  /* XXX need better Configure test */
8657 extern int errno;
8658 #endif
8659 #$i_unistd I_UNISTD
8660 #ifdef I_UNISTD
8661 #include <unistd.h>
8662 #endif
8663 #$i_string I_STRING
8664 #ifdef I_STRING
8665 #include <string.h>
8666 #else
8667 #include <strings.h>
8668 #endif
8669 $signal_t blech(x) int x; { exit(3); }
8670 EOCP
8671         $cat >> try.c <<'EOCP'
8672 int main()
8673 {
8674         int pd[2];
8675         int pu[2];
8676         char buf[1];
8677         char string[100];
8678
8679         pipe(pd);       /* Down: child -> parent */
8680         pipe(pu);       /* Up: parent -> child */
8681         if (0 != fork()) {
8682                 int ret;
8683                 close(pd[1]);   /* Parent reads from pd[0] */
8684                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8685                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8686                         exit(1);
8687                 signal(SIGALRM, blech);
8688                 alarm(5);
8689                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8690                         exit(2);
8691                 sprintf(string, "%d\n", ret);
8692                 write(2, string, strlen(string));
8693                 alarm(0);
8694 #ifdef EAGAIN
8695                 if (errno == EAGAIN) {
8696                         printf("EAGAIN\n");
8697                         goto ok;
8698                 }
8699 #endif
8700 #ifdef EWOULDBLOCK
8701                 if (errno == EWOULDBLOCK)
8702                         printf("EWOULDBLOCK\n");
8703 #endif
8704         ok:
8705                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8706                 sleep(2);                               /* Give it time to close our pipe */
8707                 alarm(5);
8708                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8709                 alarm(0);
8710                 sprintf(string, "%d\n", ret);
8711                 write(3, string, strlen(string));
8712                 exit(0);
8713         }
8714
8715         close(pd[0]);                   /* We write to pd[1] */
8716         close(pu[1]);                   /* We read from pu[0] */
8717         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8718         close(pd[1]);                   /* Pipe pd is now fully closed! */
8719         exit(0);                                /* Bye bye, thank you for playing! */
8720 }
8721 EOCP
8722         set try
8723         if eval $compile_ok; then
8724                 echo "$startsh" >mtry
8725                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8726                 chmod +x mtry
8727                 ./mtry >/dev/null 2>&1
8728                 case $? in
8729                 0) eagain=`$cat try.out`;;
8730                 1) echo "Could not perform non-blocking setting!";;
8731                 2) echo "I did a successful read() for something that was not there!";;
8732                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8733                 *) echo "Something terribly wrong happened during testing.";;
8734                 esac
8735                 rd_nodata=`$cat try.ret`
8736                 echo "A read() system call with no data present returns $rd_nodata."
8737                 case "$rd_nodata" in
8738                 0|-1) ;;
8739                 *)
8740                         echo "(That's peculiar, fixing that to be -1.)"
8741                         rd_nodata=-1
8742                         ;;
8743                 esac
8744                 case "$eagain" in
8745                 '')
8746                         echo "Forcing errno EAGAIN on read() with no data available."
8747                         eagain=EAGAIN
8748                         ;;
8749                 *)
8750                         echo "Your read() sets errno to $eagain when no data is available."
8751                         ;;
8752                 esac
8753                 status=`$cat try.err`
8754                 case "$status" in
8755                 0) echo "And it correctly returns 0 to signal EOF.";;
8756                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8757                 *) echo "However, your read() returns '$status' on EOF??";;
8758                 esac
8759                 val="$define"
8760                 if test "$status" = "$rd_nodata"; then
8761                         echo "WARNING: you can't distinguish between EOF and no data!"
8762                         val="$undef"
8763                 fi
8764         else
8765                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8766                 eagain=EAGAIN
8767         fi
8768         set d_eofnblk
8769         eval $setvar
8770         ;;
8771 *)
8772         echo "Using $hint value $eagain."
8773         echo "Your read() returns $rd_nodata when no data is present."
8774         case "$d_eofnblk" in
8775         "$define") echo "And you can see EOF because read() returns 0.";;
8776         "$undef") echo "But you can't see EOF status from read() returned value.";;
8777         *)
8778                 echo "(Assuming you can't see EOF status from read anyway.)"
8779                 d_eofnblk=$undef
8780                 ;;
8781         esac
8782         ;;
8783 esac
8784 $rm -f try try.* .out core head.c mtry
8785
8786 : see if fchmod exists
8787 set fchmod d_fchmod
8788 eval $inlibc
8789
8790 : see if fchown exists
8791 set fchown d_fchown
8792 eval $inlibc
8793
8794 : see if this is an fcntl system
8795 set fcntl d_fcntl
8796 eval $inlibc
8797
8798 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8799 while $test $# -ge 2; do
8800         case "$1" in
8801         $define) echo "#include <$2>";;
8802         esac ;
8803     shift 2;
8804 done > try.c;
8805 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8806 set try;
8807 if eval $compile; then
8808         val="$define";
8809 else
8810         val="$undef";
8811 fi;
8812 set $varname;
8813 eval $setvar;
8814 $rm -f try.c try.o'
8815
8816 socketlib=''
8817 sockethdr=''
8818 : see whether socket exists
8819 echo " "
8820 $echo $n "Hmm... $c" >&4
8821 if set socket val -f d_socket; eval $csym; $val; then
8822         echo "Looks like you have Berkeley networking support." >&4
8823         d_socket="$define"
8824         if set setsockopt val -f; eval $csym; $val; then
8825                 d_oldsock="$undef"
8826         else
8827                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8828                 d_oldsock="$define"
8829         fi
8830 else
8831         if $contains socklib libc.list >/dev/null 2>&1; then
8832                 echo "Looks like you have Berkeley networking support." >&4
8833                 d_socket="$define"
8834                 : we will have to assume that it supports the 4.2 BSD interface
8835                 d_oldsock="$undef"
8836         else
8837                 echo "You don't have Berkeley networking in libc$_a..." >&4
8838                 if test "X$d_socket" = "X$define"; then
8839                    echo "...but you seem to believe that you have sockets." >&4
8840                 else
8841                         for net in net socket
8842                         do
8843                                 if test -f /usr/lib/lib$net$_a; then
8844                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8845                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8846                                         if $contains socket libc.list >/dev/null 2>&1; then
8847                                                 d_socket="$define"
8848                                                 socketlib="-l$net"
8849                                                 case "$net" in
8850                                                 net)
8851                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8852                                                         sockethdr="-I/usr/netinclude"
8853                                                         ;;
8854                                                 esac
8855                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8856                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8857                                                         d_oldsock="$undef"
8858                                                 else
8859                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8860                                                         d_oldsock="$define"
8861                                                 fi
8862                                                 break
8863                                         fi
8864                                 fi
8865                         done
8866                         if test "X$d_socket" != "X$define"; then
8867                            echo "or anywhere else I see." >&4
8868                            d_socket="$undef"
8869                            d_oldsock="$undef"
8870                         fi
8871                 fi
8872         fi
8873 fi
8874
8875 : see if socketpair exists
8876 set socketpair d_sockpair
8877 eval $inlibc
8878
8879
8880 echo " "
8881 echo "Checking the availability of certain socket constants..." >& 4
8882 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8883         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8884         $cat >try.c <<EOF
8885 #include <sys/types.h>
8886 #include <sys/socket.h>
8887 int main() {
8888     int i = $ENUM;
8889 }
8890 EOF
8891         val="$undef"
8892         set try; if eval $compile; then
8893                 val="$define"
8894         fi
8895         set d_${enum}; eval $setvar
8896         $rm -f try.c try
8897 done
8898
8899 : see if sys/select.h has to be included
8900 set sys/select.h i_sysselct
8901 eval $inhdr
8902
8903 : see if we should include time.h, sys/time.h, or both
8904 echo " "
8905 if test "X$timeincl" = X; then
8906         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8907         $echo $n "I'm now running the test program...$c"
8908         $cat >try.c <<'EOCP'
8909 #include <sys/types.h>
8910 #ifdef I_TIME
8911 #include <time.h>
8912 #endif
8913 #ifdef I_SYSTIME
8914 #ifdef SYSTIMEKERNEL
8915 #define KERNEL
8916 #endif
8917 #include <sys/time.h>
8918 #endif
8919 #ifdef I_SYSSELECT
8920 #include <sys/select.h>
8921 #endif
8922 int main()
8923 {
8924         struct tm foo;
8925 #ifdef S_TIMEVAL
8926         struct timeval bar;
8927 #endif
8928 #ifdef S_TIMEZONE
8929         struct timezone tzp;
8930 #endif
8931         if (foo.tm_sec == foo.tm_sec)
8932                 exit(0);
8933 #ifdef S_TIMEVAL
8934         if (bar.tv_sec == bar.tv_sec)
8935                 exit(0);
8936 #endif
8937         exit(1);
8938 }
8939 EOCP
8940         flags=''
8941         for s_timezone in '-DS_TIMEZONE' ''; do
8942         sysselect=''
8943         for s_timeval in '-DS_TIMEVAL' ''; do
8944         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8945         for i_time in '' '-DI_TIME'; do
8946         for i_systime in '-DI_SYSTIME' ''; do
8947                 case "$flags" in
8948                 '') $echo $n ".$c"
8949                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8950                         if eval $compile; then
8951                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8952                                 shift
8953                                 flags="$*"
8954                                 echo " "
8955                                 $echo $n "Succeeded with $flags$c"
8956                         fi
8957                         ;;
8958                 esac
8959         done
8960         done
8961         done
8962         done
8963         done
8964         timeincl=''
8965         echo " "
8966         case "$flags" in
8967         *SYSTIMEKERNEL*) i_systimek="$define"
8968                 timeincl=`./findhdr sys/time.h`
8969                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8970         *) i_systimek="$undef";;
8971         esac
8972         case "$flags" in
8973         *I_TIME*) i_time="$define"
8974                 timeincl=`./findhdr time.h`" $timeincl"
8975                 echo "We'll include <time.h>." >&4;;
8976         *) i_time="$undef";;
8977         esac
8978         case "$flags" in
8979         *I_SYSTIME*) i_systime="$define"
8980                 timeincl=`./findhdr sys/time.h`" $timeincl"
8981                 echo "We'll include <sys/time.h>." >&4;;
8982         *) i_systime="$undef";;
8983         esac
8984         $rm -f try.c try
8985 fi
8986
8987 : check for fd_set items
8988 $cat <<EOM
8989
8990 Checking to see how well your C compiler handles fd_set and friends ...
8991 EOM
8992 $cat >fd_set.c <<EOCP
8993 #$i_systime I_SYS_TIME
8994 #$i_sysselct I_SYS_SELECT
8995 #$d_socket HAS_SOCKET
8996 #include <sys/types.h>
8997 #ifdef HAS_SOCKET
8998 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8999 #endif
9000 #ifdef I_SYS_TIME
9001 #include <sys/time.h>
9002 #endif
9003 #ifdef I_SYS_SELECT
9004 #include <sys/select.h>
9005 #endif
9006 int main() {
9007         fd_set fds;
9008
9009 #ifdef TRYBITS
9010         if(fds.fds_bits);
9011 #endif
9012
9013 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9014         exit(0);
9015 #else
9016         exit(1);
9017 #endif
9018 }
9019 EOCP
9020 set fd_set -DTRYBITS
9021 if eval $compile; then
9022         d_fds_bits="$define"
9023         d_fd_set="$define"
9024         echo "Well, your system knows about the normal fd_set typedef..." >&4
9025         if ./fd_set; then
9026                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9027                 d_fd_macros="$define"
9028         else
9029                 $cat >&4 <<'EOM'
9030 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9031 EOM
9032                 d_fd_macros="$undef"
9033         fi
9034 else
9035         $cat <<'EOM'
9036 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9037 EOM
9038         set fd_set
9039         if eval $compile; then
9040                 d_fds_bits="$undef"
9041                 d_fd_set="$define"
9042                 echo "Well, your system has some sort of fd_set available..." >&4
9043                 if ./fd_set; then
9044                         echo "and you have the normal fd_set macros." >&4
9045                         d_fd_macros="$define"
9046                 else
9047                         $cat <<'EOM'
9048 but not the normal fd_set macros!  Gross!  More work for me...
9049 EOM
9050                         d_fd_macros="$undef"
9051                 fi
9052         else
9053         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9054                 d_fd_set="$undef"
9055                 d_fds_bits="$undef"
9056                 d_fd_macros="$undef"
9057         fi
9058 fi
9059 $rm -f fd_set*
9060
9061 : see if fgetpos exists
9062 set fgetpos d_fgetpos
9063 eval $inlibc
9064
9065 : see if flock exists
9066 set flock d_flock
9067 eval $inlibc
9068
9069 : see if fork exists
9070 set fork d_fork
9071 eval $inlibc
9072
9073 : see if pathconf exists
9074 set pathconf d_pathconf
9075 eval $inlibc
9076
9077 : see if fpathconf exists
9078 set fpathconf d_fpathconf
9079 eval $inlibc
9080
9081
9082 : check for fpos64_t
9083 echo " "
9084 echo "Checking to see if you have fpos64_t..." >&4
9085 $cat >try.c <<EOCP
9086 #include <stdio.h>
9087 int main() { fpos64_t x = 7; }
9088 EOCP
9089 set try
9090 if eval $compile; then
9091         val="$define"
9092         echo "You have fpos64_t."
9093 else
9094         val="$undef"
9095         echo "You do not have fpos64_t."
9096         case "$fpossize" in
9097         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9098         esac
9099 fi
9100 $rm -f try.* try
9101 set d_fpos64_t
9102 eval $setvar
9103
9104 : see if frexpl exists
9105 set frexpl d_frexpl
9106 eval $inlibc
9107
9108 hasstruct='varname=$1; struct=$2; shift; shift;
9109 while $test $# -ge 2; do
9110         case "$1" in
9111         $define) echo "#include <$2>";;
9112         esac ;
9113     shift 2;
9114 done > try.c;
9115 echo "int main () { struct $struct foo; }" >> try.c;
9116 set try;
9117 if eval $compile; then
9118         val="$define";
9119 else
9120         val="$undef";
9121 fi;
9122 set $varname;
9123 eval $setvar;
9124 $rm -f try.c try.o'
9125
9126 : see if this is a sys/param system
9127 set sys/param.h i_sysparam
9128 eval $inhdr
9129
9130 : see if this is a sys/mount.h system
9131 set sys/mount.h i_sysmount
9132 eval $inhdr
9133
9134 : see if sys/types.h has to be included
9135 set sys/types.h i_systypes
9136 eval $inhdr
9137
9138
9139 echo " "
9140 echo "Checking to see if your system supports struct fs_data..." >&4
9141 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9142 eval $hasstruct
9143 case "$d_fs_data_s" in
9144 "$define")      echo "Yes, it does."   ;;
9145 *)              echo "No, it doesn't." ;;
9146 esac
9147
9148 : see if fseeko exists
9149 set fseeko d_fseeko
9150 eval $inlibc
9151 case "$longsize" in
9152 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9153 esac
9154
9155 : see if fsetpos exists
9156 set fsetpos d_fsetpos
9157 eval $inlibc
9158
9159
9160 : see if fstatfs exists
9161 set fstatfs d_fstatfs
9162 eval $inlibc
9163
9164
9165 : see if statvfs exists
9166 set statvfs d_statvfs
9167 eval $inlibc
9168
9169 : see if fstatvfs exists
9170 set fstatvfs d_fstatvfs
9171 eval $inlibc
9172
9173
9174 : see if ftello exists
9175 set ftello d_ftello
9176 eval $inlibc
9177 case "$longsize" in
9178 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9179 esac
9180
9181 : see if getcwd exists
9182 set getcwd d_getcwd
9183 eval $inlibc
9184
9185
9186 : see if getfsstat exists
9187 set getfsstat d_getfsstat
9188 eval $inlibc
9189
9190 : see if getgrent exists
9191 set getgrent d_getgrent
9192 eval $inlibc
9193
9194 : see if gethostbyaddr exists
9195 set gethostbyaddr d_gethbyaddr
9196 eval $inlibc
9197
9198 : see if gethostbyname exists
9199 set gethostbyname d_gethbyname
9200 eval $inlibc
9201
9202 : see if gethostent exists
9203 set gethostent d_gethent
9204 eval $inlibc
9205
9206 : see how we will look up host name
9207 echo " "
9208 call=''
9209 if set gethostname val -f d_gethname; eval $csym; $val; then
9210         echo 'gethostname() found.' >&4
9211         d_gethname="$define"
9212         call=gethostname
9213 fi
9214 if set uname val -f d_uname; eval $csym; $val; then
9215         if ./xenix; then
9216                 $cat <<'EOM'
9217 uname() was found, but you're running xenix, and older versions of xenix
9218 have a broken uname(). If you don't really know whether your xenix is old
9219 enough to have a broken system call, use the default answer.
9220
9221 EOM
9222                 dflt=y
9223                 case "$d_uname" in
9224                 "$define") dflt=n;;
9225                 esac
9226                 rp='Is your uname() broken?'
9227                 . ./myread
9228                 case "$ans" in
9229                 n*) d_uname="$define"; call=uname;;
9230                 esac
9231         else
9232                 echo 'uname() found.' >&4
9233                 d_uname="$define"
9234                 case "$call" in
9235                 '') call=uname ;;
9236                 esac
9237         fi
9238 fi
9239 case "$d_gethname" in
9240 '') d_gethname="$undef";;
9241 esac
9242 case "$d_uname" in
9243 '') d_uname="$undef";;
9244 esac
9245 case "$d_uname$d_gethname" in
9246 *define*)
9247         dflt=n
9248         cat <<EOM
9249  
9250 Every now and then someone has a $call() that lies about the hostname
9251 but can't be fixed for political or economic reasons.  If you wish, I can
9252 pretend $call() isn't there and maybe compute hostname at run-time
9253 thanks to the '$phostname' command.
9254
9255 EOM
9256         rp="Shall I ignore $call() from now on?"
9257         . ./myread
9258         case "$ans" in
9259         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9260         esac;;
9261 esac
9262 case "$phostname" in
9263 '') aphostname='';;
9264 *) case "$aphostname" in
9265         /*) ;;
9266         *) set X $phostname
9267                 shift
9268                 file=$1
9269                 shift
9270                 file=`./loc $file $file $pth`
9271                 aphostname=`echo $file $*`
9272                 ;;
9273         esac
9274         ;;
9275 esac
9276 case "$d_uname$d_gethname" in
9277 *define*) ;;
9278 *)
9279         case "$phostname" in
9280         '')
9281                 echo "There will be no way for $package to get your hostname." >&4;;
9282         *)
9283         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9284                 ;;
9285         esac;;
9286 esac
9287 case "$d_phostname" in
9288 '') d_phostname="$undef";;
9289 esac
9290
9291 : see if this is a netdb.h system
9292 set netdb.h i_netdb
9293 eval $inhdr
9294
9295 : see if prototypes for various gethostxxx netdb.h functions are available
9296 echo " "
9297 set d_gethostprotos gethostent $i_netdb netdb.h
9298 eval $hasproto
9299
9300 : see if getlogin exists
9301 set getlogin d_getlogin
9302 eval $inlibc
9303
9304 : see if getmnt exists
9305 set getmnt d_getmnt
9306 eval $inlibc
9307
9308 : see if getmntent exists
9309 set getmntent d_getmntent
9310 eval $inlibc
9311
9312 : see if getnetbyaddr exists
9313 set getnetbyaddr d_getnbyaddr
9314 eval $inlibc
9315
9316 : see if getnetbyname exists
9317 set getnetbyname d_getnbyname
9318 eval $inlibc
9319
9320 : see if getnetent exists
9321 set getnetent d_getnent
9322 eval $inlibc
9323
9324 : see if prototypes for various getnetxxx netdb.h functions are available
9325 echo " "
9326 set d_getnetprotos getnetent $i_netdb netdb.h
9327 eval $hasproto
9328
9329
9330 : see if getprotobyname exists
9331 set getprotobyname d_getpbyname
9332 eval $inlibc
9333
9334 : see if getprotobynumber exists
9335 set getprotobynumber d_getpbynumber
9336 eval $inlibc
9337
9338 : see if getprotoent exists
9339 set getprotoent d_getpent
9340 eval $inlibc
9341
9342 : see if getpgid exists
9343 set getpgid d_getpgid
9344 eval $inlibc
9345
9346 : see if getpgrp2 exists
9347 set getpgrp2 d_getpgrp2
9348 eval $inlibc
9349
9350 : see if getppid exists
9351 set getppid d_getppid
9352 eval $inlibc
9353
9354 : see if getpriority exists
9355 set getpriority d_getprior
9356 eval $inlibc
9357
9358 : see if prototypes for various getprotoxxx netdb.h functions are available
9359 echo " "
9360 set d_getprotoprotos getprotoent $i_netdb netdb.h
9361 eval $hasproto
9362
9363 : see if getpwent exists
9364 set getpwent d_getpwent
9365 eval $inlibc
9366
9367
9368 : see if getservbyname exists
9369 set getservbyname d_getsbyname
9370 eval $inlibc
9371
9372 : see if getservbyport exists
9373 set getservbyport d_getsbyport
9374 eval $inlibc
9375
9376 : see if getservent exists
9377 set getservent d_getsent
9378 eval $inlibc
9379
9380 : see if prototypes for various getservxxx netdb.h functions are available
9381 echo " "
9382 set d_getservprotos getservent $i_netdb netdb.h
9383 eval $hasproto
9384
9385 : see if getspnam exists
9386 set getspnam d_getspnam
9387 eval $inlibc
9388
9389 : see if gettimeofday or ftime exists
9390 set gettimeofday d_gettimeod
9391 eval $inlibc
9392 case "$d_gettimeod" in
9393 "$undef")
9394         set ftime d_ftime 
9395         eval $inlibc
9396         ;;
9397 *)
9398         val="$undef"; set d_ftime; eval $setvar
9399         ;;
9400 esac
9401 case "$d_gettimeod$d_ftime" in
9402 "$undef$undef")
9403         echo " "
9404         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9405         ;;
9406 esac
9407
9408 : see if this is an grp system
9409 set grp.h i_grp
9410 eval $inhdr
9411
9412 case "$i_grp" in
9413 $define)
9414         xxx=`./findhdr grp.h`
9415         $cppstdin $cppflags $cppminus < $xxx >$$.h
9416
9417         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9418                 val="$define"
9419         else
9420                 val="$undef"
9421         fi
9422         set d_grpasswd
9423         eval $setvar
9424
9425         $rm -f $$.h
9426         ;;
9427 *)
9428         val="$undef";
9429         set d_grpasswd; eval $setvar
9430         ;;
9431 esac
9432
9433 : see if hasmntopt exists
9434 set hasmntopt d_hasmntopt
9435 eval $inlibc
9436
9437 : see if this is a netinet/in.h or sys/in.h system
9438 set netinet/in.h i_niin sys/in.h i_sysin
9439 eval $inhdr
9440
9441 : see if arpa/inet.h has to be included
9442 set arpa/inet.h i_arpainet
9443 eval $inhdr
9444
9445 : see if htonl --and friends-- exists
9446 val=''
9447 set htonl val
9448 eval $inlibc
9449
9450 : Maybe they are macros.
9451 case "$val" in
9452 $undef)
9453         $cat >htonl.c <<EOM
9454 #include <stdio.h>
9455 #include <sys/types.h>
9456 #$i_niin I_NETINET_IN
9457 #$i_sysin I_SYS_IN
9458 #$i_arpainet I_ARPA_INET
9459 #ifdef I_NETINET_IN
9460 #include <netinet/in.h>
9461 #endif
9462 #ifdef I_SYS_IN
9463 #include <sys/in.h>
9464 #endif
9465 #ifdef I_ARPA_INET
9466 #include <arpa/inet.h>
9467 #endif
9468 #ifdef htonl
9469 printf("Defined as a macro.");
9470 #endif
9471 EOM
9472         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9473         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9474                 val="$define"
9475                 echo "But it seems to be defined as a macro." >&4
9476         fi
9477         $rm -f htonl.?
9478         ;;
9479 esac
9480 set d_htonl
9481 eval $setvar
9482
9483 : see if iconv exists
9484 set iconv d_iconv
9485 eval $inlibc
9486
9487 : index or strchr
9488 echo " "
9489 if set index val -f; eval $csym; $val; then
9490         if set strchr val -f d_strchr; eval $csym; $val; then
9491                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9492                         val="$define"
9493                         vali="$undef"
9494                         echo "strchr() found." >&4
9495                 else
9496                         val="$undef"
9497                         vali="$define"
9498                         echo "index() found." >&4
9499                 fi
9500         else
9501                 val="$undef"
9502                 vali="$define"
9503                 echo "index() found." >&4
9504         fi
9505 else
9506         if set strchr val -f d_strchr; eval $csym; $val; then
9507                 val="$define"
9508                 vali="$undef"
9509                 echo "strchr() found." >&4
9510         else
9511                 echo "No index() or strchr() found!" >&4
9512                 val="$undef"
9513                 vali="$undef"
9514         fi
9515 fi
9516 set d_strchr; eval $setvar
9517 val="$vali"
9518 set d_index; eval $setvar
9519
9520 : check whether inet_aton exists
9521 set inet_aton d_inetaton
9522 eval $inlibc
9523
9524 : see if inttypes.h is available
9525 : we want a real compile instead of Inhdr because some systems
9526 : have an inttypes.h which includes non-existent headers
9527 echo " "
9528 $cat >try.c <<EOCP
9529 #include <inttypes.h>
9530 int main() {
9531         static int32_t foo32 = 0x12345678;
9532 }
9533 EOCP
9534 set try
9535 if eval $compile; then
9536         echo "<inttypes.h> found." >&4
9537         val="$define"
9538 else
9539         echo "<inttypes.h> NOT found." >&4
9540         val="$undef"
9541 fi
9542 $rm -f try.c try
9543 set i_inttypes
9544 eval $setvar
9545
9546 : check for int64_t
9547 echo " "
9548 echo "Checking to see if you have int64_t..." >&4
9549 $cat >try.c <<EOCP
9550 #include <sys/types.h>
9551 #$i_inttypes I_INTTYPES
9552 #ifdef I_INTTYPES
9553 #include <inttypes.h>
9554 #endif
9555 int main() { int64_t x = 7; }
9556 EOCP
9557 set try
9558 if eval $compile; then
9559         val="$define"
9560         echo "You have int64_t."
9561 else
9562         val="$undef"
9563         echo "You do not have int64_t."
9564 fi
9565 $rm -f try try.*
9566 set d_int64_t
9567 eval $setvar
9568
9569 : Look for isascii
9570 echo " "
9571 $cat >isascii.c <<'EOCP'
9572 #include <stdio.h>
9573 #include <ctype.h>
9574 int main() {
9575         int c = 'A';
9576         if (isascii(c))
9577                 exit(0);
9578         else
9579                 exit(1);
9580 }
9581 EOCP
9582 set isascii
9583 if eval $compile; then
9584         echo "isascii() found." >&4
9585         val="$define"
9586 else
9587         echo "isascii() NOT found." >&4
9588         val="$undef"
9589 fi
9590 set d_isascii
9591 eval $setvar
9592 $rm -f isascii*
9593
9594 : see if isnan exists
9595 set isnan d_isnan
9596 eval $inlibc
9597
9598 : see if isnanl exists
9599 set isnanl d_isnanl
9600 eval $inlibc
9601
9602 : see if killpg exists
9603 set killpg d_killpg
9604 eval $inlibc
9605
9606 : see if lchown exists
9607 echo " "
9608 $cat > try.c <<'EOCP'
9609 /* System header to define __stub macros and hopefully few prototypes,
9610     which can conflict with char lchown(); below.  */
9611 #include <assert.h>
9612 /* Override any gcc2 internal prototype to avoid an error.  */
9613 /* We use char because int might match the return type of a gcc2
9614    builtin and then its argument prototype would still apply.  */
9615 char lchown();
9616 int main() {
9617     /*  The GNU C library defines this for functions which it implements
9618         to always fail with ENOSYS.  Some functions are actually named
9619         something starting with __ and the normal name is an alias.  */
9620 #if defined (__stub_lchown) || defined (__stub___lchown)
9621 choke me
9622 #else
9623 lchown();
9624 #endif
9625 ; return 0; }
9626 EOCP
9627 set try
9628 if eval $compile; then
9629     $echo "lchown() found." >&4
9630     val="$define"
9631 else
9632     $echo "lchown() NOT found." >&4
9633     val="$undef"
9634 fi
9635 set d_lchown
9636 eval $setvar
9637
9638 : See if number of significant digits in a double precision number is known
9639 echo " "
9640 $cat >ldbl_dig.c <<EOM
9641 #$i_limits I_LIMITS
9642 #$i_float I_FLOAT
9643 #ifdef I_LIMITS
9644 #include <limits.h>
9645 #endif
9646 #ifdef I_FLOAT
9647 #include <float.h>
9648 #endif
9649 #ifdef LDBL_DIG
9650 printf("Contains LDBL_DIG");
9651 #endif
9652 EOM
9653 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9654 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9655         echo "LDBL_DIG found." >&4
9656         val="$define"
9657 else
9658         echo "LDBL_DIG NOT found." >&4
9659         val="$undef"
9660 fi
9661 $rm -f ldbl_dig.?
9662 set d_ldbl_dig
9663 eval $setvar
9664
9665 : see if link exists
9666 set link d_link
9667 eval $inlibc
9668
9669 : see if localeconv exists
9670 set localeconv d_locconv
9671 eval $inlibc
9672
9673 : see if lockf exists
9674 set lockf d_lockf
9675 eval $inlibc
9676
9677 : check for long long
9678 echo " "
9679 echo "Checking to see if you have long long..." >&4
9680 echo 'int main() { long long x = 7; return 0; }' > try.c
9681 set try
9682 if eval $compile; then
9683         val="$define"
9684         echo "You have have long long."
9685 else
9686         val="$undef"
9687         echo "You do not have long long."
9688 fi
9689 $rm try.*
9690 set d_longlong
9691 eval $setvar
9692
9693 : check for length of long long
9694 case "${d_longlong}${longlongsize}" in
9695 $define)
9696         echo " "
9697         echo "Checking to see how big your long longs are..." >&4
9698         $cat >try.c <<'EOCP'
9699 #include <stdio.h>
9700 int main()
9701 {
9702     printf("%d\n", (int)sizeof(long long));
9703     return(0);
9704 }
9705 EOCP
9706         set try
9707         if eval $compile_ok; then
9708                 longlongsize=`./try$exe_ext`
9709                 echo "Your long longs are $longlongsize bytes long."
9710         else
9711                 dflt='8'
9712                 echo " "
9713                 echo "(I can't seem to compile the test program.  Guessing...)"
9714                 rp="What is the size of a long long (in bytes)?"
9715                 . ./myread
9716                 longlongsize="$ans"
9717         fi
9718         if $test "X$longsize" = "X$longlongsize"; then
9719                 echo "(That isn't any different from an ordinary long.)"
9720         fi      
9721         ;;
9722 esac
9723 $rm -f try.* try
9724
9725 : see if prototype for lseek is available
9726 echo " "
9727 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9728 eval $hasproto
9729
9730 : see if lstat exists
9731 set lstat d_lstat
9732 eval $inlibc
9733
9734 : see if madvise exists
9735 set madvise d_madvise
9736 eval $inlibc
9737
9738 : see if mblen exists
9739 set mblen d_mblen
9740 eval $inlibc
9741
9742 : see if mbstowcs exists
9743 set mbstowcs d_mbstowcs
9744 eval $inlibc
9745
9746 : see if mbtowc exists
9747 set mbtowc d_mbtowc
9748 eval $inlibc
9749
9750 : see if memchr exists
9751 set memchr d_memchr
9752 eval $inlibc
9753
9754 : see if memcmp exists
9755 set memcmp d_memcmp
9756 eval $inlibc
9757
9758 : see if memcpy exists
9759 set memcpy d_memcpy
9760 eval $inlibc
9761
9762 : see if memmove exists
9763 set memmove d_memmove
9764 eval $inlibc
9765
9766 : see if memset exists
9767 set memset d_memset
9768 eval $inlibc
9769
9770 : see if mkdir exists
9771 set mkdir d_mkdir
9772 eval $inlibc
9773
9774 : see if mkdtemp exists
9775 set mkdtemp d_mkdtemp
9776 eval $inlibc
9777
9778 : see if mkfifo exists
9779 set mkfifo d_mkfifo
9780 eval $inlibc
9781
9782 : see if mkstemp exists
9783 set mkstemp d_mkstemp
9784 eval $inlibc
9785
9786 : see if mkstemps exists
9787 set mkstemps d_mkstemps
9788 eval $inlibc
9789
9790 : see if mktime exists
9791 set mktime d_mktime
9792 eval $inlibc
9793
9794 : see if this is a sys/mman.h system
9795 set sys/mman.h i_sysmman
9796 eval $inhdr
9797
9798 : see if mmap exists
9799 set mmap d_mmap
9800 eval $inlibc
9801 : see what shmat returns
9802 : default to something harmless
9803 mmaptype='void *'
9804 case "$i_sysmman$d_mmap" in
9805 "$define$define")
9806         $cat >mmap.c <<'END'
9807 #include <sys/mman.h>
9808 void *mmap();
9809 END
9810         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9811                 mmaptype='void *'
9812         else
9813                 mmaptype='caddr_t'
9814         fi
9815         echo "and it returns ($mmaptype)." >&4
9816         ;;
9817 esac
9818
9819
9820
9821 : see if modfl exists
9822 set modfl d_modfl
9823 eval $inlibc
9824
9825 : see if mprotect exists
9826 set mprotect d_mprotect
9827 eval $inlibc
9828
9829 : see if msgctl exists
9830 set msgctl d_msgctl
9831 eval $inlibc
9832
9833 : see if msgget exists
9834 set msgget d_msgget
9835 eval $inlibc
9836
9837 : see if msgsnd exists
9838 set msgsnd d_msgsnd
9839 eval $inlibc
9840
9841 : see if msgrcv exists
9842 set msgrcv d_msgrcv
9843 eval $inlibc
9844
9845 : see how much of the 'msg*(2)' library is present.
9846 h_msg=true
9847 echo " "
9848 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9849 *"$undef"*) h_msg=false;;
9850 esac
9851 case "$osname" in
9852 freebsd)
9853     case "`ipcs 2>&1`" in
9854     "SVID messages"*"not configured"*)
9855         echo "Your $osname does not have the msg*(2) configured." >&4
9856         h_msg=false
9857         val="$undef"
9858         set msgctl d_msgctl
9859         eval $setvar
9860         set msgget d_msgget
9861         eval $setvar
9862         set msgsnd d_msgsnd
9863         eval $setvar
9864         set msgrcv d_msgrcv
9865         eval $setvar
9866         ;;
9867     esac
9868     ;;
9869 esac
9870 : we could also check for sys/ipc.h ...
9871 if $h_msg && $test `./findhdr sys/msg.h`; then
9872         echo "You have the full msg*(2) library." >&4
9873         val="$define"
9874 else
9875         echo "You don't have the full msg*(2) library." >&4
9876         val="$undef"
9877 fi
9878 set d_msg
9879 eval $setvar
9880
9881 : see if msync exists
9882 set msync d_msync
9883 eval $inlibc
9884
9885 : see if munmap exists
9886 set munmap d_munmap
9887 eval $inlibc
9888
9889 : see if nice exists
9890 set nice d_nice
9891 eval $inlibc
9892
9893
9894 echo " "
9895 echo "Checking which 64-bit integer type we could use..." >&4
9896
9897 case "$intsize" in
9898 8) val=int
9899    set quadtype
9900    eval $setvar
9901    val='"unsigned int"'
9902    set uquadtype
9903    eval $setvar
9904    quadkind=1
9905    ;;
9906 *) case "$longsize" in
9907    8) val=long
9908       set quadtype
9909       eval $setvar
9910       val='"unsigned long"'
9911       set uquadtype
9912       eval $setvar
9913       quadkind=2
9914       ;;
9915    *) case "$d_longlong:$longlongsize" in
9916       define:8)
9917         val='"long long"'
9918         set quadtype
9919         eval $setvar
9920         val='"unsigned long long"'
9921         set uquadtype
9922         eval $setvar
9923         quadkind=3
9924         ;;
9925       *) case "$d_int64_t" in
9926          define)
9927            val=int64_t
9928            set quadtype
9929            eval $setvar
9930            val=uint64_t
9931            set uquadtype
9932            eval $setvar
9933            quadkind=4
9934            ;;
9935          esac
9936          ;;
9937       esac
9938       ;;
9939    esac
9940    ;;
9941 esac
9942
9943 case "$quadtype" in
9944 '')     echo "Alas, no 64-bit integer types in sight." >&4
9945         d_quad="$undef"
9946         ;;
9947 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9948             verb="will"
9949         else
9950             verb="could"
9951         fi
9952         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9953         d_quad="$define"
9954         ;;
9955 esac
9956
9957 : check for length of character
9958 echo " "
9959 case "$charsize" in
9960 '')
9961         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9962         $cat >try.c <<'EOCP'
9963 #include <stdio.h>
9964 int main()
9965 {
9966     printf("%d\n", (int)sizeof(char));
9967     exit(0);
9968 }
9969 EOCP
9970         set try
9971         if eval $compile_ok; then
9972                 dflt=`./try`
9973         else
9974                 dflt='1'
9975                 echo "(I can't seem to compile the test program.  Guessing...)"
9976         fi
9977         ;;
9978 *)
9979         dflt="$charsize"
9980         ;;
9981 esac
9982 rp="What is the size of a character (in bytes)?"
9983 . ./myread
9984 charsize="$ans"
9985 $rm -f try.c try
9986
9987
9988 echo " "
9989 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9990
9991 case "$use64bitint:$d_quad:$quadtype" in
9992 define:define:?*)
9993         ivtype="$quadtype"
9994         uvtype="$uquadtype"
9995         ivsize=8
9996         uvsize=8
9997         ;;
9998 *)      ivtype="long"
9999         uvtype="unsigned long"
10000         ivsize=$longsize
10001         uvsize=$longsize
10002         ;;
10003 esac
10004
10005 case "$uselongdouble:$d_longdbl" in
10006 define:define)
10007         nvtype="long double"
10008         nvsize=$longdblsize
10009         ;;
10010 *)      nvtype=double
10011         nvsize=$doublesize
10012         ;;
10013 esac
10014
10015 $echo "(IV will be "$ivtype", $ivsize bytes)"
10016 $echo "(UV will be "$uvtype", $uvsize bytes)"
10017 $echo "(NV will be "$nvtype", $nvsize bytes)"
10018
10019 $cat >try.c <<EOCP
10020 #$i_inttypes I_INTTYPES
10021 #ifdef I_INTTYPES
10022 #include <inttypes.h>
10023 #endif
10024 #include <stdio.h>
10025 int main() {
10026 #ifdef INT8
10027    int8_t i =  INT8_MAX;
10028   uint8_t u = UINT8_MAX;
10029   printf("int8_t\n");
10030 #endif
10031 #ifdef INT16
10032    int16_t i =  INT16_MAX;
10033   uint16_t i = UINT16_MAX;
10034   printf("int16_t\n");
10035 #endif
10036 #ifdef INT32
10037    int32_t i =  INT32_MAX;
10038   uint32_t u = UINT32_MAX;
10039   printf("int32_t\n");
10040 #endif
10041 }
10042 EOCP
10043
10044 case "$i8type" in
10045 '')     case "$charsize" in
10046         1)      i8type=char
10047                 u8type="unsigned char"
10048                 i8size=$charsize
10049                 u8size=$charsize
10050                 ;;
10051         esac
10052         ;;
10053 esac
10054 case "$i8type" in
10055 '')     set try -DINT8
10056         if eval $compile; then
10057                 case "`./try$exe_ext`" in
10058                 int8_t) i8type=int8_t
10059                         u8type=uint8_t
10060                         i8size=1
10061                         u8size=1
10062                         ;;
10063                 esac
10064         fi
10065         ;;
10066 esac
10067 case "$i8type" in
10068 '')     if $test $charsize -ge 1; then
10069                 i8type=char
10070                 u8type="unsigned char"
10071                 i8size=$charsize
10072                 u8size=$charsize
10073         fi
10074         ;;
10075 esac
10076
10077 case "$i16type" in
10078 '')     case "$shortsize" in
10079         2)      i16type=short
10080                 u16type="unsigned short"
10081                 i16size=$shortsize
10082                 u16size=$shortsize
10083                 ;;
10084         esac
10085         ;;
10086 esac
10087 case "$i16type" in
10088 '')     set try -DINT16
10089         if eval $compile; then
10090                 case "`./try$exe_ext`" in
10091                 int16_t)
10092                         i16type=int16_t
10093                         u16type=uint16_t
10094                         i16size=2
10095                         u16size=2
10096                         ;;
10097                 esac
10098         fi
10099         ;;
10100 esac
10101 case "$i16type" in
10102 '')     if $test $shortsize -ge 2; then
10103                 i16type=short
10104                 u16type="unsigned short"
10105                 i16size=$shortsize
10106                 u16size=$shortsize
10107         fi
10108         ;;
10109 esac
10110
10111 case "$i32type" in
10112 '')     case "$longsize" in
10113         4)      i32type=long
10114                 u32type="unsigned long"
10115                 i32size=$longsize
10116                 u32size=$longsize
10117                 ;;
10118         *)      case "$intsize" in
10119                 4)      i32type=int
10120                         u32type="unsigned int"
10121                         i32size=$intsize
10122                         u32size=$intsize
10123                         ;;
10124                 esac
10125                 ;;
10126         esac
10127         ;;
10128 esac
10129 case "$i32type" in
10130 '')     set try -DINT32
10131         if eval $compile; then
10132                 case "`./try$exe_ext`" in
10133                 int32_t)
10134                         i32type=int32_t
10135                         u32type=uint32_t
10136                         i32size=4
10137                         u32size=4
10138                         ;;
10139                 esac
10140         fi
10141         ;;
10142 esac
10143 case "$i32type" in
10144 '')     if $test $intsize -ge 4; then
10145                 i32type=int
10146                 u32type="unsigned int"
10147                 i32size=$intsize
10148                 u32size=$intsize
10149         fi
10150         ;;
10151 esac
10152
10153 case "$i64type" in
10154 '')     case "$d_quad:$quadtype" in
10155         define:?*)
10156                 i64type="$quadtype"
10157                 u64type="$uquadtype"
10158                 i64size=8
10159                 u64size=8
10160                 ;;
10161         esac
10162         ;;
10163 esac
10164
10165 $echo "Checking whether your NVs can preserve your UVs..." >&4
10166 $cat <<EOP >try.c
10167 #include <stdio.h>
10168 int main() {
10169     $uvtype k = ($uvtype)~0, l;
10170     $nvtype d;
10171     l = k;
10172     d = ($nvtype)l;
10173     l = ($uvtype)d;
10174     if (l == k)
10175        printf("preserve\n");
10176     exit(0);
10177 }
10178 EOP
10179 set try
10180 if eval $compile; then
10181         case "`./try$exe_ext`" in
10182         preserve) d_nv_preserves_uv="$define" ;;
10183         esac
10184 fi      
10185 case "$d_nv_preserves_uv" in
10186 $define) $echo "Yes, they can."  2>&1 ;;
10187 *)       $echo "No, they can't." 2>&1
10188          d_nv_preserves_uv="$undef"
10189          ;;
10190 esac
10191
10192 $rm -f try.* try
10193
10194 case "$d_nv_preserves_uv" in
10195 "$define") d_nv_preserved_bits=`expr $uvsize \* 8` ;;
10196 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10197         $cat <<EOP >try.c
10198 #include <stdio.h>
10199 int main() {
10200     $uvtype u = 0;
10201     int     n = 8 * $uvsize;
10202     int     i;
10203     for (i = 0; i < n; i++) {
10204       u = u << 1 | ($uvtype)1;
10205       if (($uvtype)($nvtype)u != u)
10206         break;
10207     }
10208     printf("%d\n", i);
10209     exit(0);
10210 }
10211 EOP
10212         set try
10213         if eval $compile; then
10214                 d_nv_preserved_bits="`./try$exe_ext`"
10215         fi
10216         case "$d_nv_preserved_bits" in
10217         [1-9]*) $echo "Your NVs can preserve $d_nv_preserved_bits of your NVs."  2>&1 ;;
10218         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10219                 d_nv_preserved_bits="$undef"
10220                 ;;
10221         esac
10222         $rm -f try.* try
10223         ;;
10224 esac
10225
10226
10227
10228 : check for off64_t
10229 echo " "
10230 echo "Checking to see if you have off64_t..." >&4
10231 $cat >try.c <<EOCP
10232 #include <sys/types.h>
10233 #include <unistd.h>
10234 int main() { off64_t x = 7; }
10235 EOCP
10236 set try
10237 if eval $compile; then
10238         val="$define"
10239         echo "You have off64_t."
10240 else
10241         val="$undef"
10242         echo "You do not have off64_t."
10243         case "$lseeksize" in
10244         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10245         esac
10246 fi
10247 $rm -f try.* try
10248 set d_off64_t
10249 eval $setvar
10250
10251 : see if POSIX threads are available
10252 set pthread.h i_pthread
10253 eval $inhdr
10254
10255
10256
10257
10258 : how to create joinable pthreads
10259 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10260         echo " "
10261         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10262         $cat >try.c <<'EOCP'
10263 #include <pthread.h>
10264 int main() {
10265     int detachstate = JOINABLE;
10266 }
10267 EOCP
10268         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10269         if eval $compile; then
10270                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10271                 val="$undef" # Yes, undef.
10272                 set d_old_pthread_create_joinable
10273                 eval $setvar
10274                 val=""
10275                 set old_pthread_create_joinable
10276                 eval $setvar
10277         else
10278                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10279                 if eval $compile; then
10280                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10281                         val="$define"
10282                         set d_old_pthread_create_joinable
10283                         eval $setvar
10284                         val=PTHREAD_CREATE_UNDETACHED
10285                         set old_pthread_create_joinable
10286                         eval $setvar
10287                 else            
10288                         set try -DJOINABLE=__UNDETACHED
10289                         if eval $compile; then
10290                                 echo "You seem to use __UNDETACHED." >&4
10291                                 val="$define"
10292                                 set d_old_pthread_create_joinable
10293                                 eval $setvar
10294                                 val=__UNDETACHED
10295                                 set old_pthread_create_joinable
10296                                 eval $setvar
10297                         else
10298                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10299                                 val="$define"
10300                                 set d_old_pthread_create_joinable
10301                                 eval $setvar
10302                                 val=0
10303                                 set old_pthread_create_joinable
10304                                 eval $setvar
10305                         fi
10306                 fi
10307         fi
10308         $rm -f try try.*
10309 else
10310     d_old_pthread_create_joinable="$undef"
10311     old_pthread_create_joinable=""
10312 fi
10313
10314 : see if pause exists
10315 set pause d_pause
10316 eval $inlibc
10317
10318 : see if pipe exists
10319 set pipe d_pipe
10320 eval $inlibc
10321
10322 : see if poll exists
10323 set poll d_poll
10324 eval $inlibc
10325
10326
10327 : see whether the various POSIXish _yields exist
10328 $cat >try.c <<EOP
10329 #include <pthread.h>
10330 #include <stdio.h>
10331 int main() {
10332 #ifdef SCHED_YIELD
10333         sched_yield();
10334 #else
10335 #ifdef PTHREAD_YIELD
10336         pthread_yield();
10337 #else
10338 #ifdef PTHREAD_YIELD_NULL
10339         pthread_yield(NULL);
10340 #endif
10341 #endif
10342 #endif
10343 }
10344 EOP
10345 : see if sched_yield exists
10346 set try -DSCHED_YIELD
10347 if eval $compile; then
10348     val="$define"
10349     sched_yield='sched_yield()'
10350 else
10351     val="$undef"
10352 fi
10353 case "$usethreads" in
10354 $define)
10355         case "$val" in
10356         $define) echo 'sched_yield() found.' >&4        ;;
10357         *)       echo 'sched_yield() NOT found.' >&4    ;;
10358         esac
10359 esac
10360 set d_sched_yield
10361 eval $setvar
10362
10363 : see if pthread_yield exists
10364 set try -DPTHREAD_YIELD
10365 if eval $compile; then
10366     val="$define"
10367     case "$sched_yield" in
10368     '') sched_yield='pthread_yield()' ;;
10369     esac
10370 else
10371     set try -DPTHREAD_YIELD_NULL
10372     if eval $compile; then
10373         val="$define"
10374         case "$sched_yield" in
10375         '') sched_yield='pthread_yield(NULL)' ;;
10376         esac
10377     else
10378         val="$undef"
10379     fi
10380 fi
10381 case "$usethreads" in
10382 $define)
10383         case "$val" in
10384         $define) echo 'pthread_yield() found.' >&4      ;;
10385         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10386         esac
10387         ;;
10388 esac
10389 set d_pthread_yield
10390 eval $setvar
10391
10392 case "$sched_yield" in
10393 '') sched_yield=undef ;;
10394 esac
10395
10396 $rm -f try try.*
10397
10398 : see if this is a pwd.h system
10399 set pwd.h i_pwd
10400 eval $inhdr
10401
10402 case "$i_pwd" in
10403 $define)
10404         xxx=`./findhdr pwd.h`
10405         $cppstdin $cppflags $cppminus < $xxx >$$.h
10406
10407         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10408                 val="$define"
10409         else
10410                 val="$undef"
10411         fi
10412         set d_pwquota
10413         eval $setvar
10414
10415         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10416                 val="$define"
10417         else
10418                 val="$undef"
10419         fi
10420         set d_pwage
10421         eval $setvar
10422
10423         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10424                 val="$define"
10425         else
10426                 val="$undef"
10427         fi
10428         set d_pwchange
10429         eval $setvar
10430
10431         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10432                 val="$define"
10433         else
10434                 val="$undef"
10435         fi
10436         set d_pwclass
10437         eval $setvar
10438
10439         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10440                 val="$define"
10441         else
10442                 val="$undef"
10443         fi
10444         set d_pwexpire
10445         eval $setvar
10446
10447         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10448                 val="$define"
10449         else
10450                 val="$undef"
10451         fi
10452         set d_pwcomment
10453         eval $setvar
10454
10455         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10456                 val="$define"
10457         else
10458                 val="$undef"
10459         fi
10460         set d_pwgecos
10461         eval $setvar
10462
10463         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10464                 val="$define"
10465         else
10466                 val="$undef"
10467         fi
10468         set d_pwpasswd
10469         eval $setvar
10470
10471         $rm -f $$.h
10472         ;;
10473 *)
10474         val="$undef"; 
10475         set d_pwquota; eval $setvar
10476         set d_pwage; eval $setvar
10477         set d_pwchange; eval $setvar
10478         set d_pwclass; eval $setvar
10479         set d_pwexpire; eval $setvar
10480         set d_pwcomment; eval $setvar
10481         set d_pwgecos; eval $setvar
10482         set d_pwpasswd; eval $setvar
10483         ;;
10484 esac
10485
10486 : see if readdir and friends exist
10487 set readdir d_readdir
10488 eval $inlibc
10489 set seekdir d_seekdir
10490 eval $inlibc
10491 set telldir d_telldir
10492 eval $inlibc
10493 set rewinddir d_rewinddir
10494 eval $inlibc
10495
10496 : see if readlink exists
10497 set readlink d_readlink
10498 eval $inlibc
10499
10500 : see if rename exists
10501 set rename d_rename
10502 eval $inlibc
10503
10504 : see if rmdir exists
10505 set rmdir d_rmdir
10506 eval $inlibc
10507
10508 : see if memory.h is available.
10509 val=''
10510 set memory.h val
10511 eval $inhdr
10512
10513 : See if it conflicts with string.h
10514 case "$val" in
10515 $define)
10516         case "$strings" in
10517         '') ;;
10518         *)
10519                 $cppstdin $cppflags $cppminus < $strings > mem.h
10520                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10521                         echo " "
10522                         echo "We won't be including <memory.h>."
10523                         val="$undef"
10524                 fi
10525                 $rm -f mem.h
10526                 ;;
10527         esac
10528 esac
10529 set i_memory
10530 eval $setvar
10531
10532 : can bcopy handle overlapping blocks?
10533 val="$undef"
10534 case "$d_bcopy" in
10535 "$define")
10536         echo " "
10537         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10538         $cat >try.c <<EOCP
10539 #$i_memory I_MEMORY
10540 #$i_stdlib I_STDLIB
10541 #$i_string I_STRING
10542 #$i_unistd I_UNISTD
10543 EOCP
10544         $cat >>try.c <<'EOCP'
10545 #include <stdio.h>
10546 #ifdef I_MEMORY
10547 #  include <memory.h>
10548 #endif
10549 #ifdef I_STDLIB
10550 #  include <stdlib.h>
10551 #endif
10552 #ifdef I_STRING
10553 #  include <string.h>
10554 #else
10555 #  include <strings.h>
10556 #endif
10557 #ifdef I_UNISTD
10558 #  include <unistd.h>  /* Needed for NetBSD */
10559 #endif
10560 int main()
10561 {
10562 char buf[128], abc[128];
10563 char *b;
10564 int len;
10565 int off;
10566 int align;
10567
10568 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10569
10570 for (align = 7; align >= 0; align--) {
10571         for (len = 36; len; len--) {
10572                 b = buf+align;
10573                 bcopy(abc, b, len);
10574                 for (off = 1; off <= len; off++) {
10575                         bcopy(b, b+off, len);
10576                         bcopy(b+off, b, len);
10577                         if (bcmp(b, abc, len))
10578                                 exit(1);
10579                 }
10580         }
10581 }
10582 exit(0);
10583 }
10584 EOCP
10585         set try
10586         if eval $compile_ok; then
10587                 if ./try 2>/dev/null; then
10588                         echo "Yes, it can."
10589                         val="$define"
10590                 else
10591                         echo "It can't, sorry."
10592                         case "$d_memmove" in
10593                         "$define") echo "But that's Ok since you have memmove()." ;;
10594                         esac
10595                 fi
10596         else
10597                 echo "(I can't compile the test program, so we'll assume not...)"
10598                 case "$d_memmove" in
10599                 "$define") echo "But that's Ok since you have memmove()." ;;
10600                 esac
10601         fi
10602         ;;
10603 esac
10604 $rm -f try.* try core
10605 set d_safebcpy
10606 eval $setvar
10607
10608 : can memcpy handle overlapping blocks?
10609 val="$undef"
10610 case "$d_memcpy" in
10611 "$define")
10612         echo " "
10613         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10614         $cat >try.c <<EOCP
10615 #$i_memory I_MEMORY
10616 #$i_stdlib I_STDLIB
10617 #$i_string I_STRING
10618 #$i_unistd I_UNISTD
10619 EOCP
10620         $cat >>try.c <<'EOCP'
10621 #include <stdio.h>
10622 #ifdef I_MEMORY
10623 #  include <memory.h>
10624 #endif
10625 #ifdef I_STDLIB
10626 #  include <stdlib.h>
10627 #endif
10628 #ifdef I_STRING
10629 #  include <string.h>
10630 #else
10631 #  include <strings.h>
10632 #endif
10633 #ifdef I_UNISTD
10634 #  include <unistd.h>  /* Needed for NetBSD */
10635 #endif
10636 int main()
10637 {
10638 char buf[128], abc[128];
10639 char *b;
10640 int len;
10641 int off;
10642 int align;
10643
10644 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10645    try to store the string in read-only memory. */
10646 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10647
10648 for (align = 7; align >= 0; align--) {
10649         for (len = 36; len; len--) {
10650                 b = buf+align;
10651                 memcpy(b, abc, len);
10652                 for (off = 1; off <= len; off++) {
10653                         memcpy(b+off, b, len);
10654                         memcpy(b, b+off, len);
10655                         if (memcmp(b, abc, len))
10656                                 exit(1);
10657                 }
10658         }
10659 }
10660 exit(0);
10661 }
10662 EOCP
10663         set try
10664         if eval $compile_ok; then
10665                 if ./try 2>/dev/null; then
10666                         echo "Yes, it can."
10667                         val="$define"
10668                 else
10669                         echo "It can't, sorry."
10670                         case "$d_memmove" in
10671                         "$define") echo "But that's Ok since you have memmove()." ;;
10672                         esac
10673                 fi
10674         else
10675                 echo "(I can't compile the test program, so we'll assume not...)"
10676                 case "$d_memmove" in
10677                 "$define") echo "But that's Ok since you have memmove()." ;;
10678                 esac
10679         fi
10680         ;;
10681 esac
10682 $rm -f try.* try core
10683 set d_safemcpy
10684 eval $setvar
10685
10686 : can memcmp be trusted to compare relative magnitude?
10687 val="$undef"
10688 case "$d_memcmp" in
10689 "$define")
10690         echo " "
10691         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10692         $cat >try.c <<EOCP
10693 #$i_memory I_MEMORY
10694 #$i_stdlib I_STDLIB
10695 #$i_string I_STRING
10696 #$i_unistd I_UNISTD
10697 EOCP
10698         $cat >>try.c <<'EOCP'
10699 #include <stdio.h>
10700 #ifdef I_MEMORY
10701 #  include <memory.h>
10702 #endif
10703 #ifdef I_STDLIB
10704 #  include <stdlib.h>
10705 #endif
10706 #ifdef I_STRING
10707 #  include <string.h>
10708 #else
10709 #  include <strings.h>
10710 #endif
10711 #ifdef I_UNISTD
10712 #  include <unistd.h>  /* Needed for NetBSD */
10713 #endif
10714 int main()
10715 {
10716 char a = -1;
10717 char b = 0;
10718 if ((a < b) && memcmp(&a, &b, 1) < 0)
10719         exit(1);
10720 exit(0);
10721 }
10722 EOCP
10723         set try
10724         if eval $compile_ok; then
10725                 if ./try 2>/dev/null; then
10726                         echo "Yes, it can."
10727                         val="$define"
10728                 else
10729                         echo "No, it can't (it uses signed chars)."
10730                 fi
10731         else
10732                 echo "(I can't compile the test program, so we'll assume not...)"
10733         fi
10734         ;;
10735 esac
10736 $rm -f try.* try core
10737 set d_sanemcmp
10738 eval $setvar
10739
10740 : see if select exists
10741 set select d_select
10742 eval $inlibc
10743
10744 : see if semctl exists
10745 set semctl d_semctl
10746 eval $inlibc
10747
10748 : see if semget exists
10749 set semget d_semget
10750 eval $inlibc
10751
10752 : see if semop exists
10753 set semop d_semop
10754 eval $inlibc
10755
10756 : see how much of the 'sem*(2)' library is present.
10757 h_sem=true
10758 echo " "
10759 case "$d_semctl$d_semget$d_semop" in
10760 *"$undef"*) h_sem=false;;
10761 esac
10762 case "$osname" in
10763 freebsd)
10764     case "`ipcs 2>&1`" in
10765     "SVID messages"*"not configured"*)
10766         echo "Your $osname does not have the sem*(2) configured." >&4
10767         h_sem=false
10768         val="$undef"
10769         set semctl d_semctl
10770         eval $setvar
10771         set semget d_semget
10772         eval $setvar
10773         set semop d_semop
10774         eval $setvar
10775         ;;
10776     esac
10777     ;;
10778 esac
10779 : we could also check for sys/ipc.h ...
10780 if $h_sem && $test `./findhdr sys/sem.h`; then
10781         echo "You have the full sem*(2) library." >&4
10782         val="$define"
10783 else
10784         echo "You don't have the full sem*(2) library." >&4
10785         val="$undef"
10786 fi
10787 set d_sem
10788 eval $setvar
10789
10790 : see whether sys/sem.h defines union semun
10791 echo " "
10792 $cat > try.c <<'END'
10793 #include <sys/types.h>
10794 #include <sys/ipc.h>
10795 #include <sys/sem.h>
10796 int main () { union semun semun; semun.buf = 0; }
10797 END
10798 set try
10799 if eval $compile; then
10800     echo "You have union semun in <sys/sem.h>." >&4
10801     val="$define"
10802 else
10803     echo "You do not have union semun in <sys/sem.h>." >&4
10804     val="$undef"
10805 fi
10806 $rm -f try try.c try.h
10807 set d_union_semun
10808 eval $setvar
10809
10810 : see how to do semctl IPC_STAT
10811 case "$d_sem" in
10812 $define)
10813     : see whether semctl IPC_STAT can use union semun
10814     echo " "
10815     $cat > try.h <<END
10816 #ifndef S_IRUSR
10817 #   ifdef S_IREAD
10818 #       define S_IRUSR S_IREAD
10819 #       define S_IWUSR S_IWRITE
10820 #       define S_IXUSR S_IEXEC
10821 #   else
10822 #       define S_IRUSR 0400
10823 #       define S_IWUSR 0200
10824 #       define S_IXUSR 0100
10825 #   endif
10826 #   define S_IRGRP (S_IRUSR>>3)
10827 #   define S_IWGRP (S_IWUSR>>3)
10828 #   define S_IXGRP (S_IXUSR>>3)
10829 #   define S_IROTH (S_IRUSR>>6)
10830 #   define S_IWOTH (S_IWUSR>>6)
10831 #   define S_IXOTH (S_IXUSR>>6)
10832 #endif
10833 #ifndef S_IRWXU
10834 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10835 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10836 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10837 #endif
10838 END
10839
10840     $cat > try.c <<END
10841 #include <sys/types.h>
10842 #include <sys/ipc.h>
10843 #include <sys/sem.h>
10844 #include <sys/stat.h>
10845 #include <stdio.h>
10846 #include <errno.h>
10847 #include "try.h"
10848 #ifndef errno
10849 extern int errno;
10850 #endif
10851 #$d_union_semun HAS_UNION_SEMUN
10852 int main() {
10853     union semun
10854 #ifndef HAS_UNION_SEMUN
10855     {
10856         int val;
10857         struct semid_ds *buf;
10858         unsigned short *array;
10859     }
10860 #endif
10861     arg;
10862     int sem, st;
10863
10864 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10865     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10866     if (sem > -1) {
10867         struct semid_ds argbuf;
10868         arg.buf = &argbuf;
10869 #       ifdef IPC_STAT
10870         st = semctl(sem, 0, IPC_STAT, arg);
10871         if (st == 0)
10872             printf("semun\n");
10873         else
10874 #       endif /* IPC_STAT */
10875             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10876 #       ifdef IPC_RMID
10877         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10878 #       endif /* IPC_RMID */
10879             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10880     } else
10881 #endif /* IPC_PRIVATE && ... */
10882         printf("semget failed: errno = %d\n", errno);
10883   return 0;
10884 }
10885 END
10886     val="$undef"
10887     set try
10888     if eval $compile; then
10889         xxx=`./try`
10890         case "$xxx" in
10891         semun) val="$define" ;;
10892         esac
10893     fi
10894     $rm -f try try.c
10895     set d_semctl_semun
10896     eval $setvar
10897     case "$d_semctl_semun" in
10898     $define)
10899         echo "You can use union semun for semctl IPC_STAT." >&4
10900         also='also'
10901         ;;
10902     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10903         also=''
10904         ;;
10905     esac
10906
10907     : see whether semctl IPC_STAT can use struct semid_ds pointer
10908     $cat > try.c <<'END'
10909 #include <sys/types.h>
10910 #include <sys/ipc.h>
10911 #include <sys/sem.h>
10912 #include <sys/stat.h>
10913 #include "try.h"
10914 #include <stdio.h>
10915 #include <errno.h>
10916 #ifndef errno
10917 extern int errno;
10918 #endif
10919 int main() {
10920     struct semid_ds arg;
10921     int sem, st;
10922
10923 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10924     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10925     if (sem > -1) {
10926 #       ifdef IPC_STAT
10927         st = semctl(sem, 0, IPC_STAT, &arg);
10928         if (st == 0)
10929             printf("semid_ds\n");
10930         else
10931 #       endif /* IPC_STAT */
10932             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10933 #       ifdef IPC_RMID
10934         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10935 #       endif /* IPC_RMID */
10936             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10937     } else
10938 #endif /* IPC_PRIVATE && ... */
10939         printf("semget failed: errno = %d\n", errno);
10940
10941     return 0;
10942 }
10943 END
10944     val="$undef"
10945     set try
10946     if eval $compile; then
10947         xxx=`./try`
10948         case "$xxx" in
10949         semid_ds) val="$define" ;;
10950         esac
10951     fi
10952     $rm -f try try.c
10953     set d_semctl_semid_ds
10954     eval $setvar
10955     case "$d_semctl_semid_ds" in
10956     $define)
10957         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10958         ;;
10959     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10960         ;;
10961     esac
10962     $rm -f try.h
10963     ;;
10964 *)  val="$undef"
10965
10966     # We do not have the full sem*(2) library, so assume we can not
10967     # use either.
10968
10969     set d_semctl_semun
10970     eval $setvar
10971
10972     set d_semctl_semid_ds
10973     eval $setvar
10974     ;;
10975 esac
10976
10977 : see if setegid exists
10978 set setegid d_setegid
10979 eval $inlibc
10980
10981 : see if seteuid exists
10982 set seteuid d_seteuid
10983 eval $inlibc
10984
10985 : see if setgrent exists
10986 set setgrent d_setgrent
10987 eval $inlibc
10988
10989 : see if sethostent exists
10990 set sethostent d_sethent
10991 eval $inlibc
10992
10993 : see if setlinebuf exists
10994 set setlinebuf d_setlinebuf
10995 eval $inlibc
10996
10997 : see if setlocale exists
10998 set setlocale d_setlocale
10999 eval $inlibc
11000
11001 : see if setnetent exists
11002 set setnetent d_setnent
11003 eval $inlibc
11004
11005 : see if setprotoent exists
11006 set setprotoent d_setpent
11007 eval $inlibc
11008
11009 : see if setpgid exists
11010 set setpgid d_setpgid
11011 eval $inlibc
11012
11013 : see if setpgrp2 exists
11014 set setpgrp2 d_setpgrp2
11015 eval $inlibc
11016
11017 : see if setpriority exists
11018 set setpriority d_setprior
11019 eval $inlibc
11020
11021 : see if setpwent exists
11022 set setpwent d_setpwent
11023 eval $inlibc
11024
11025 : see if setregid exists
11026 set setregid d_setregid
11027 eval $inlibc
11028 set setresgid d_setresgid
11029 eval $inlibc
11030
11031 : see if setreuid exists
11032 set setreuid d_setreuid
11033 eval $inlibc
11034 set setresuid d_setresuid
11035 eval $inlibc
11036
11037 : see if setrgid exists
11038 set setrgid d_setrgid
11039 eval $inlibc
11040
11041 : see if setruid exists
11042 set setruid d_setruid
11043 eval $inlibc
11044
11045 : see if setservent exists
11046 set setservent d_setsent
11047 eval $inlibc
11048
11049 : see if setsid exists
11050 set setsid d_setsid
11051 eval $inlibc
11052
11053 : see if setvbuf exists
11054 set setvbuf d_setvbuf
11055 eval $inlibc
11056
11057 : see if sfio.h is available
11058 set sfio.h i_sfio
11059 eval $inhdr
11060
11061
11062 : see if sfio library is available
11063 case "$i_sfio" in
11064 $define)
11065         val=''
11066         set sfreserve val
11067         eval $inlibc
11068         ;;
11069 *)
11070         val="$undef"
11071         ;;
11072 esac
11073 : Ok, but do we want to use it.
11074 case "$val" in
11075 $define)
11076         case "$usesfio" in
11077         true|$define|[yY]*) dflt='y';;
11078         *) dflt='n';;
11079         esac
11080         echo "$package can use the sfio library, but it is experimental."
11081         rp="You seem to have sfio available, do you want to try using it?"
11082         . ./myread
11083         case "$ans" in
11084         y|Y) ;;
11085         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11086                 val="$undef"
11087                 : Remove sfio from list of libraries to use
11088                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11089                 shift
11090                 libs="$*"
11091                 echo "libs = $libs" >&4
11092                 ;;
11093         esac
11094         ;;
11095 *)      case "$usesfio" in
11096         true|$define|[yY]*)
11097                 echo "Sorry, cannot find sfio on this machine" >&4
11098                 echo "Ignoring your setting of usesfio=$usesfio" >&4
11099                 ;;
11100         esac
11101         ;;
11102 esac
11103 set d_sfio
11104 eval $setvar
11105 case "$d_sfio" in
11106 $define) usesfio='true';;
11107 *) usesfio='false';;
11108 esac
11109
11110 : see if shmctl exists
11111 set shmctl d_shmctl
11112 eval $inlibc
11113
11114 : see if shmget exists
11115 set shmget d_shmget
11116 eval $inlibc
11117
11118 : see if shmat exists
11119 set shmat d_shmat
11120 eval $inlibc
11121 : see what shmat returns
11122 case "$d_shmat" in
11123 "$define")
11124         $cat >shmat.c <<'END'
11125 #include <sys/shm.h>
11126 void *shmat();
11127 END
11128         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11129                 shmattype='void *'
11130         else
11131                 shmattype='char *'
11132         fi
11133         echo "and it returns ($shmattype)." >&4
11134         : see if a prototype for shmat is available
11135         xxx=`./findhdr sys/shm.h`
11136         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11137         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11138                 val="$define"
11139         else
11140                 val="$undef"
11141         fi
11142         $rm -f shmat.[co]
11143         ;;
11144 *)
11145         val="$undef"
11146         ;;
11147 esac
11148 set d_shmatprototype
11149 eval $setvar
11150
11151 : see if shmdt exists
11152 set shmdt d_shmdt
11153 eval $inlibc
11154
11155 : see how much of the 'shm*(2)' library is present.
11156 h_shm=true
11157 echo " "
11158 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11159 *"$undef"*) h_shm=false;;
11160 esac
11161 case "$osname" in
11162 freebsd)
11163     case "`ipcs 2>&1`" in
11164     "SVID shared memory"*"not configured"*)
11165         echo "Your $osname does not have the shm*(2) configured." >&4
11166         h_shm=false
11167         val="$undef"
11168         set shmctl d_shmctl
11169         evat $setvar
11170         set shmget d_shmget
11171         evat $setvar
11172         set shmat d_shmat
11173         evat $setvar
11174         set shmdt d_shmdt
11175         evat $setvar
11176         ;;
11177     esac
11178     ;;
11179 esac
11180 : we could also check for sys/ipc.h ...
11181 if $h_shm && $test `./findhdr sys/shm.h`; then
11182         echo "You have the full shm*(2) library." >&4
11183         val="$define"
11184 else
11185         echo "You don't have the full shm*(2) library." >&4
11186         val="$undef"
11187 fi
11188 set d_shm
11189 eval $setvar
11190
11191 echo " "
11192 : see if we have sigaction
11193 if set sigaction val -f d_sigaction; eval $csym; $val; then
11194         echo 'sigaction() found.' >&4
11195         $cat > try.c <<'EOP'
11196 #include <stdio.h>
11197 #include <sys/types.h>
11198 #include <signal.h>
11199 int main()
11200 {
11201     struct sigaction act, oact;
11202     act.sa_flags = 0;
11203     oact.sa_handler = 0;
11204     /* so that act and oact are used */
11205     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11206 }
11207 EOP
11208         set try
11209         if eval $compile_ok; then
11210                 val="$define"
11211         else
11212                 echo "But you don't seem to have a useable struct sigaction." >&4
11213                 val="$undef"
11214         fi
11215 else
11216         echo 'sigaction NOT found.' >&4
11217         val="$undef"
11218 fi
11219 set d_sigaction; eval $setvar
11220 $rm -f try try$_o try.c
11221
11222 : see if sigsetjmp exists
11223 echo " "
11224 case "$d_sigsetjmp" in
11225 '')
11226         $cat >try.c <<'EOP'
11227 #include <setjmp.h>
11228 sigjmp_buf env;
11229 int set = 1;
11230 int main()
11231 {
11232         if (sigsetjmp(env,1))
11233                 exit(set);
11234         set = 0;
11235         siglongjmp(env, 1);
11236         exit(1);
11237 }
11238 EOP
11239         set try
11240         if eval $compile; then
11241                 if ./try >/dev/null 2>&1; then
11242                         echo "POSIX sigsetjmp found." >&4
11243                         val="$define"
11244                 else
11245                         $cat >&4 <<EOM
11246 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11247 I'll ignore them.
11248 EOM
11249                         val="$undef"
11250                 fi
11251         else
11252                 echo "sigsetjmp not found." >&4
11253                 val="$undef"
11254         fi
11255         ;;
11256 *) val="$d_sigsetjmp"
11257         case "$d_sigsetjmp" in
11258         $define) echo "POSIX sigsetjmp found." >&4;;
11259         $undef) echo "sigsetjmp not found." >&4;;
11260         esac
11261         ;;
11262 esac
11263 set d_sigsetjmp
11264 eval $setvar
11265 $rm -f try.c try
11266
11267 : see if sys/stat.h is available
11268 set sys/stat.h i_sysstat
11269 eval $inhdr
11270
11271
11272 : see if stat knows about block sizes
11273 echo " "
11274 echo "Checking to see if your struct stat has st_blocks field..." >&4
11275 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11276 eval $hasfield
11277
11278
11279 : see if this is a sys/vfs.h system
11280 set sys/vfs.h i_sysvfs
11281 eval $inhdr
11282
11283
11284 : see if this is a sys/statfs.h system
11285 set sys/statfs.h i_sysstatfs
11286 eval $inhdr
11287
11288
11289 echo " "
11290 echo "Checking to see if your system supports struct statfs..." >&4
11291 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
11292 eval $hasstruct
11293 case "$d_statfs_s" in
11294 "$define")      echo "Yes, it does."   ;;
11295 *)              echo "No, it doesn't." ;;
11296 esac
11297
11298
11299
11300 : see if struct statfs knows about f_flags
11301 case "$d_statfs_s" in
11302 define) 
11303         echo " "
11304         echo "Checking to see if your struct statfs has f_flags field..." >&4
11305         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
11306         eval $hasfield
11307         ;;
11308 *)      val="$undef"
11309         set d_statfs_f_flags
11310         eval $setvar
11311         ;;
11312 esac
11313 case "$d_statfs_f_flags" in
11314 "$define")      echo "Yes, it does."   ;;
11315 *)              echo "No, it doesn't." ;;
11316 esac
11317
11318 : see if _ptr and _cnt from stdio act std
11319 echo " "
11320 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11321         echo "(Looks like you have stdio.h from Linux.)"
11322         case "$stdio_ptr" in
11323         '') stdio_ptr='((fp)->_IO_read_ptr)'
11324                 ptr_lval=$define
11325                 ;;
11326         *)      ptr_lval=$d_stdio_ptr_lval;;
11327         esac
11328         case "$stdio_cnt" in
11329         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11330                 cnt_lval=$undef
11331                 ;;
11332         *)      cnt_lval=$d_stdio_cnt_lval;;
11333         esac
11334         case "$stdio_base" in
11335         '') stdio_base='((fp)->_IO_read_base)';;
11336         esac
11337         case "$stdio_bufsiz" in
11338         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11339         esac
11340 else
11341         case "$stdio_ptr" in
11342         '') stdio_ptr='((fp)->_ptr)'
11343                 ptr_lval=$define
11344                 ;;
11345         *)      ptr_lval=$d_stdio_ptr_lval;;
11346         esac
11347         case "$stdio_cnt" in
11348         '') stdio_cnt='((fp)->_cnt)'
11349                 cnt_lval=$define
11350                 ;;
11351         *)      cnt_lval=$d_stdio_cnt_lval;;
11352         esac
11353         case "$stdio_base" in
11354         '') stdio_base='((fp)->_base)';;
11355         esac
11356         case "$stdio_bufsiz" in
11357         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11358         esac
11359 fi
11360 : test whether _ptr and _cnt really work
11361 echo "Checking how std your stdio is..." >&4
11362 $cat >try.c <<EOP
11363 #include <stdio.h>
11364 #define FILE_ptr(fp)    $stdio_ptr
11365 #define FILE_cnt(fp)    $stdio_cnt
11366 int main() {
11367         FILE *fp = fopen("try.c", "r");
11368         char c = getc(fp);
11369         if (
11370                 18 <= FILE_cnt(fp) &&
11371                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11372         )
11373                 exit(0);
11374         exit(1);
11375 }
11376 EOP
11377 val="$undef"
11378 set try
11379 if eval $compile; then
11380         if ./try; then
11381                 echo "Your stdio acts pretty std."
11382                 val="$define"
11383         else
11384                 echo "Your stdio isn't very std."
11385         fi
11386 else
11387         echo "Your stdio doesn't appear very std."
11388 fi
11389 $rm -f try.c try
11390 set d_stdstdio
11391 eval $setvar
11392
11393 : Can _ptr be used as an lvalue?
11394 case "$d_stdstdio$ptr_lval" in
11395 $define$define) val=$define ;;
11396 *) val=$undef ;;
11397 esac
11398 set d_stdio_ptr_lval
11399 eval $setvar
11400
11401 : Can _cnt be used as an lvalue?
11402 case "$d_stdstdio$cnt_lval" in
11403 $define$define) val=$define ;;
11404 *) val=$undef ;;
11405 esac
11406 set d_stdio_cnt_lval
11407 eval $setvar
11408
11409 : see if _base is also standard
11410 val="$undef"
11411 case "$d_stdstdio" in
11412 $define)
11413         $cat >try.c <<EOP
11414 #include <stdio.h>
11415 #define FILE_base(fp)   $stdio_base
11416 #define FILE_bufsiz(fp) $stdio_bufsiz
11417 int main() {
11418         FILE *fp = fopen("try.c", "r");
11419         char c = getc(fp);
11420         if (
11421                 19 <= FILE_bufsiz(fp) &&
11422                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11423         )
11424                 exit(0);
11425         exit(1);
11426 }
11427 EOP
11428         set try
11429         if eval $compile; then
11430                 if ./try; then
11431                         echo "And its _base field acts std."
11432                         val="$define"
11433                 else
11434                         echo "But its _base field isn't std."
11435                 fi
11436         else
11437                 echo "However, it seems to be lacking the _base field."
11438         fi
11439         $rm -f try.c try
11440         ;;
11441 esac
11442 set d_stdiobase
11443 eval $setvar
11444
11445 $cat >&4 <<EOM
11446 Checking how to access stdio streams by file descriptor number...
11447 EOM
11448 case "$stdio_stream_array" in
11449 '')     $cat >try.c <<EOCP
11450 #include <stdio.h>
11451 int main() {
11452   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11453     printf("yes\n");
11454 }
11455 EOCP
11456         for s in _iob __iob __sF
11457         do
11458                 set try -DSTDIO_STREAM_ARRAY=$s
11459                 if eval $compile; then
11460                         case "`./try$exe_ext`" in
11461                         yes)    stdio_stream_array=$s; break ;;
11462                         esac
11463                 fi
11464         done
11465         $rm -f try.* try$exe_ext
11466 esac
11467 case "$stdio_stream_array" in
11468 '')     $cat >&4 <<EOM
11469 I can't figure out how to access stdio streams by file descriptor number.
11470 EOM
11471         d_stdio_stream_array="$undef"
11472         ;;
11473 *)      $cat >&4 <<EOM
11474 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11475 EOM
11476         d_stdio_stream_array="$define"
11477         ;;
11478 esac
11479
11480 : see if strcoll exists
11481 set strcoll d_strcoll
11482 eval $inlibc
11483
11484 : check for structure copying
11485 echo " "
11486 echo "Checking to see if your C compiler can copy structs..." >&4
11487 $cat >try.c <<'EOCP'
11488 int main()
11489 {
11490         struct blurfl {
11491                 int dyick;
11492         } foo, bar;
11493
11494         foo = bar;
11495 }
11496 EOCP
11497 if $cc -c try.c >/dev/null 2>&1 ; then
11498         val="$define"
11499         echo "Yup, it can."
11500 else
11501         val="$undef"
11502         echo "Nope, it can't."
11503 fi
11504 set d_strctcpy
11505 eval $setvar
11506 $rm -f try.*
11507
11508 : see if strerror and/or sys_errlist[] exist
11509 echo " "
11510 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11511     if set strerror val -f d_strerror; eval $csym; $val; then
11512                 echo 'strerror() found.' >&4
11513                 d_strerror="$define"
11514                 d_strerrm='strerror(e)'
11515                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11516                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11517                         d_syserrlst="$define"
11518                 else
11519                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11520                         d_syserrlst="$undef"
11521                 fi
11522     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11523                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11524                 echo 'strerror() found in string header.' >&4
11525                 d_strerror="$define"
11526                 d_strerrm='strerror(e)'
11527                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11528                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11529                                 d_syserrlst="$define"
11530                 else
11531                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11532                         d_syserrlst="$undef"
11533                 fi
11534     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11535                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11536                 d_strerror="$undef"
11537                 d_syserrlst="$define"
11538                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11539     else
11540                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11541                 d_strerror="$undef"
11542                 d_syserrlst="$undef"
11543                 d_strerrm='"unknown"'
11544     fi
11545 fi
11546
11547 : see if strtod exists
11548 set strtod d_strtod
11549 eval $inlibc
11550
11551 : see if strtol exists
11552 set strtol d_strtol
11553 eval $inlibc
11554
11555 : see if strtold exists
11556 set strtold d_strtold
11557 eval $inlibc
11558
11559 : see if strtoll exists
11560 set strtoll d_strtoll
11561 eval $inlibc
11562
11563 case "$d_longlong-$d_strtoll" in
11564 "$define-$define")
11565         $cat <<EOM
11566 Checking whether your strtoll() works okay...
11567 EOM
11568         $cat >try.c <<'EOCP'
11569 #include <errno.h>
11570 #ifdef __hpux
11571 #define strtoll __strtoll
11572 #endif
11573 #include <stdio.h>
11574 extern long long int strtoll(char *s, char **, int); 
11575 static int bad = 0;
11576 int check(char *s, long long ell, int een) {
11577         long long gll;
11578         errno = 0;
11579         gll = strtoll(s, 0, 10);
11580         if (!((gll == ell) && (errno == een)))
11581                 bad++;
11582 }
11583 int main() {
11584         check(" 1",                                      1LL, 0);
11585         check(" 0",                                      0LL, 0);
11586         check("-1",                                     -1LL, 0);
11587         check("-9223372036854775808", -9223372036854775808LL, 0);
11588         check("-9223372036854775808", -9223372036854775808LL, 0);
11589         check(" 9223372036854775807",  9223372036854775807LL, 0);
11590         check("-9223372036854775808", -9223372036854775808LL, 0);
11591         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11592         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11593         if (!bad)
11594                 printf("ok\n");
11595 }
11596 EOCP
11597         set try
11598         if eval $compile; then
11599                 case "`./try`" in
11600                 ok) echo "Your strtoll() seems to be working okay." ;;
11601                 *) cat <<EOM >&4
11602 Your strtoll() doesn't seem to be working okay.
11603 EOM
11604                    d_strtoll="$undef"
11605                    ;;
11606                 esac
11607         fi
11608         ;;
11609 esac
11610
11611 : see if strtoul exists
11612 set strtoul d_strtoul
11613 eval $inlibc
11614
11615 : see if strtoull exists
11616 set strtoull d_strtoull
11617 eval $inlibc
11618
11619 case "$d_longlong-$d_strtoull" in
11620 "$define-$define")
11621         $cat <<EOM
11622 Checking whether your strtoull() works okay...
11623 EOM
11624         $cat >try.c <<'EOCP'
11625 #include <errno.h>
11626 #ifdef __hpux
11627 #define strtoull __strtoull
11628 #endif
11629 #include <stdio.h>
11630 extern unsigned long long int strtoull(char *s, char **, int); 
11631 static int bad = 0;
11632 int check(char *s, long long eull, int een) {
11633         long long gull;
11634         errno = 0;
11635         gull = strtoull(s, 0, 10);
11636         if (!((gull == eull) && (errno == een)))
11637                 bad++;
11638 }
11639 int main() {
11640         check(" 1",                                       1LL, 0);
11641         check(" 0",                                       0LL, 0);
11642         check("18446744073709551615", 18446744073709551615ULL, 0);
11643         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11644         if (!bad)
11645                 printf("ok\n");
11646 }
11647 EOCP
11648         set try
11649         if eval $compile; then
11650                 case "`./try`" in
11651                 ok) echo "Your strtoull() seems to be working okay." ;;
11652                 *) cat <<EOM >&4
11653 Your strtoull() doesn't seem to be working okay.
11654 EOM
11655                    d_strtoull="$undef"
11656                    ;;
11657                 esac
11658         fi
11659         ;;
11660 esac
11661
11662 : see if strtouq exists
11663 set strtouq d_strtouq
11664 eval $inlibc
11665
11666 : see if strxfrm exists
11667 set strxfrm d_strxfrm
11668 eval $inlibc
11669
11670 : see if symlink exists
11671 set symlink d_symlink
11672 eval $inlibc
11673
11674 : see if syscall exists
11675 set syscall d_syscall
11676 eval $inlibc
11677
11678 : see if sysconf exists
11679 set sysconf d_sysconf
11680 eval $inlibc
11681
11682 : see if system exists
11683 set system d_system
11684 eval $inlibc
11685
11686 : see if tcgetpgrp exists
11687 set tcgetpgrp d_tcgetpgrp
11688 eval $inlibc
11689
11690 : see if tcsetpgrp exists
11691 set tcsetpgrp d_tcsetpgrp
11692 eval $inlibc
11693
11694 : see if prototype for telldir is available
11695 echo " "
11696 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11697 eval $hasproto
11698
11699 : see if this is a sys/times.h system
11700 set sys/times.h i_systimes
11701 eval $inhdr
11702
11703 : see if times exists
11704 echo " "
11705 if set times val -f d_times; eval $csym; $val; then
11706         echo 'times() found.' >&4
11707         d_times="$define"
11708         inc=''
11709         case "$i_systimes" in
11710         "$define") inc='sys/times.h';;
11711         esac
11712         rp="What is the type returned by times() on this system?"
11713         set clock_t clocktype long stdio.h sys/types.h $inc
11714         eval $typedef_ask
11715 else
11716         echo 'times() NOT found, hope that will do.' >&4
11717         d_times="$undef"
11718         clocktype='int'
11719 fi
11720
11721 : see if truncate exists
11722 set truncate d_truncate
11723 eval $inlibc
11724
11725 : see if tzname[] exists
11726 echo " "
11727 if set tzname val -a d_tzname; eval $csym; $val; then
11728         val="$define"
11729         echo 'tzname[] found.' >&4
11730 else
11731         val="$undef"
11732         echo 'tzname[] NOT found.' >&4
11733 fi
11734 set d_tzname
11735 eval $setvar
11736
11737 : see if umask exists
11738 set umask d_umask
11739 eval $inlibc
11740
11741 : see if ustat exists
11742 set ustat d_ustat
11743 eval $inlibc
11744
11745 : backward compatibility for d_hvfork
11746 if test X$d_hvfork != X; then
11747         d_vfork="$d_hvfork"
11748         d_hvfork=''
11749 fi
11750 : see if there is a vfork
11751 val=''
11752 set vfork val
11753 eval $inlibc
11754
11755 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11756 : perl on Solaris 2.x, and probably elsewhere.
11757 case "$val" in
11758 $define)
11759         echo " "
11760         case "$usevfork" in
11761         false) dflt='n';;
11762         *) dflt='y';;
11763         esac
11764         cat <<'EOM'
11765  
11766 Perl can only use a vfork() that doesn't suffer from strict
11767 restrictions on calling functions or modifying global data in
11768 the child.  For example, glibc-2.1 contains such a vfork()
11769 that is unsuitable.  If your system provides a proper fork()
11770 call, chances are that you do NOT want perl to use vfork().
11771
11772 EOM
11773         rp="Do you still want to use vfork()?"
11774         . ./myread
11775         case "$ans" in
11776         y|Y) ;;
11777         *)
11778                 echo "Ok, we won't use vfork()."
11779                 val="$undef"
11780                 ;;
11781         esac
11782         ;;
11783 esac
11784 set d_vfork
11785 eval $setvar
11786 case "$d_vfork" in
11787 $define) usevfork='true';;
11788 *) usevfork='false';;
11789 esac
11790
11791 : see if this is an sysdir system
11792 set sys/dir.h i_sysdir
11793 eval $inhdr
11794
11795 : see if this is an sysndir system
11796 set sys/ndir.h i_sysndir
11797 eval $inhdr
11798
11799 : see if closedir exists
11800 set closedir d_closedir
11801 eval $inlibc
11802
11803 case "$d_closedir" in
11804 "$define")
11805         echo " "
11806         echo "Checking whether closedir() returns a status..." >&4
11807         cat > closedir.c <<EOM
11808 #$i_dirent I_DIRENT             /**/
11809 #$i_sysdir I_SYS_DIR            /**/
11810 #$i_sysndir I_SYS_NDIR          /**/
11811 #$i_systypes I_SYS_TYPES        /**/
11812
11813 #if defined(I_SYS_TYPES)
11814 #include <sys/types.h>
11815 #endif
11816 #if defined(I_DIRENT)
11817 #include <dirent.h>
11818 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11819 #include <sys/dir.h>
11820 #endif
11821 #else
11822 #ifdef I_SYS_NDIR
11823 #include <sys/ndir.h>
11824 #else
11825 #ifdef I_SYS_DIR
11826 #ifdef hp9000s500
11827 #include <ndir.h>       /* may be wrong in the future */
11828 #else
11829 #include <sys/dir.h>
11830 #endif
11831 #endif
11832 #endif
11833 #endif 
11834 int main() { return closedir(opendir(".")); }
11835 EOM
11836         set closedir
11837         if eval $compile_ok; then
11838                 if ./closedir > /dev/null 2>&1 ; then
11839                         echo "Yes, it does."
11840                         val="$undef"
11841                 else
11842                         echo "No, it doesn't."
11843                         val="$define"
11844                 fi
11845         else
11846                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11847                 val="$define"
11848         fi
11849         ;;
11850 *)
11851         val="$undef";
11852         ;;
11853 esac
11854 set d_void_closedir
11855 eval $setvar
11856 $rm -f closedir*
11857 : check for volatile keyword
11858 echo " "
11859 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11860 $cat >try.c <<'EOCP'
11861 int main()
11862 {
11863         typedef struct _goo_struct goo_struct;
11864         goo_struct * volatile goo = ((goo_struct *)0);
11865         struct _goo_struct {
11866                 long long_int;
11867                 int reg_int;
11868                 char char_var;
11869         };
11870         typedef unsigned short foo_t;
11871         char *volatile foo;
11872         volatile int bar;
11873         volatile foo_t blech;
11874         foo = foo;
11875 }
11876 EOCP
11877 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11878         val="$define"
11879         echo "Yup, it does."
11880 else
11881         val="$undef"
11882         echo "Nope, it doesn't."
11883 fi
11884 set d_volatile
11885 eval $setvar
11886 $rm -f try.*
11887
11888 : see if there is a wait4
11889 set wait4 d_wait4
11890 eval $inlibc
11891
11892 : see if waitpid exists
11893 set waitpid d_waitpid
11894 eval $inlibc
11895
11896 : see if wcstombs exists
11897 set wcstombs d_wcstombs
11898 eval $inlibc
11899
11900 : see if wctomb exists
11901 set wctomb d_wctomb
11902 eval $inlibc
11903
11904 : preserve RCS keywords in files with variable substitution, grrr
11905 Date='$Date'
11906 Id='$Id'
11907 Log='$Log'
11908 RCSfile='$RCSfile'
11909 Revision='$Revision'
11910
11911 case "$crosscompile" in
11912 ''|[nN]*) crosscompile="$undef" ;;
11913 esac
11914
11915 case "$osname" in
11916 next|rhapsody|darwin) multiarch="$define" ;;
11917 esac
11918 case "$multiarch" in
11919 ''|[nN]*) multiarch="$undef" ;;
11920 esac
11921
11922 : check for alignment requirements
11923 echo " "
11924 case "$crosscompile$multiarch" in
11925 *$define*)
11926         $cat <<EOM
11927 You seem to be either cross-compiling or doing a multiarchitecture build,
11928 skipping the memory alignment check.
11929
11930 EOM
11931         case "$alignbytes" in
11932         '') alignbytes=8 ;;
11933         esac
11934         ;;
11935 *)
11936         case "$alignbytes" in
11937         '') echo "Checking alignment constraints..." >&4
11938                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11939                         $cat >try.c <<'EOCP'
11940 typedef long double NV;
11941 EOCP
11942                 else
11943                         $cat >try.c <<'EOCP'
11944 typedef double NV;
11945 EOCP
11946                 fi
11947                 $cat >>try.c <<'EOCP'
11948 #include <stdio.h>
11949 struct foobar {
11950         char foo;
11951         NV bar;
11952 } try_algn;
11953 int main()
11954 {
11955     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11956     return(0);
11957 }
11958 EOCP
11959                 set try
11960                 if eval $compile_ok; then
11961                         dflt=`./try`
11962                 else
11963                         dflt='8'
11964                         echo "(I can't seem to compile the test program...)"
11965                 fi
11966                 ;;
11967         *) dflt="$alignbytes"
11968                 ;;
11969         esac
11970         rp="Doubles must be aligned on a how-many-byte boundary?"
11971         . ./myread
11972         alignbytes="$ans"
11973         $rm -f try.c try
11974         ;;
11975 esac
11976
11977
11978 : set the base revision
11979 baserev=5.0
11980
11981 : check for ordering of bytes in a long
11982 echo " "
11983 case "$crosscompile$multiarch" in
11984 *$define*)
11985         $cat <<EOM
11986 You seem to be either cross-compiling or doing a multiarchitecture build,
11987 skipping the byteorder check.
11988
11989 EOM
11990         byteorder='0xffff'
11991         ;;
11992 *)
11993         case "$byteorder" in
11994         '')
11995                 $cat <<'EOM'
11996 In the following, larger digits indicate more significance.  A big-endian
11997 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11998 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11999 machines may have weird orders like 3412.  A Cray will report 87654321,
12000 an Alpha will report 12345678. If the test program works the default is
12001 probably right.
12002 I'm now running the test program...
12003 EOM
12004                 $cat >try.c <<'EOCP'
12005 #include <stdio.h>
12006 int main()
12007 {
12008         int i;
12009         union {
12010                 unsigned long l;
12011                 char c[sizeof(long)];
12012         } u;
12013
12014         if (sizeof(long) > 4)
12015                 u.l = (0x08070605L << 32) | 0x04030201L;
12016         else
12017                 u.l = 0x04030201L;
12018         for (i = 0; i < sizeof(long); i++)
12019                 printf("%c", u.c[i]+'0');
12020         printf("\n");
12021         exit(0);
12022 }
12023 EOCP
12024                 xxx_prompt=y
12025                 set try
12026                 if eval $compile && ./try > /dev/null; then
12027                         dflt=`./try`
12028                         case "$dflt" in
12029                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12030                                 echo "(The test program ran ok.)"
12031                                 echo "byteorder=$dflt"
12032                                 xxx_prompt=n
12033                         ;;
12034                         ????|????????) echo "(The test program ran ok.)" ;;
12035                         *) echo "(The test program didn't run right for some reason.)" ;;
12036                         esac
12037                 else
12038                         dflt='4321'
12039                         cat <<'EOM'
12040 (I can't seem to compile the test program.  Guessing big-endian...)
12041 EOM
12042                 fi
12043                 case "$xxx_prompt" in
12044                 y)
12045                         rp="What is the order of bytes in a long?"
12046                         . ./myread
12047                         byteorder="$ans"
12048                         ;;
12049                 *)      byteorder=$dflt
12050                         ;;
12051                 esac
12052                 ;;
12053         esac
12054         $rm -f try.c try
12055         ;;
12056 esac
12057
12058
12059 : how do we catenate cpp tokens here?
12060 echo " "
12061 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12062 $cat >cpp_stuff.c <<'EOCP'
12063 #define RCAT(a,b)a/**/b
12064 #define ACAT(a,b)a ## b
12065 RCAT(Rei,ser)
12066 ACAT(Cir,cus)
12067 EOCP
12068 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12069 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12070         echo "Oh!  Smells like ANSI's been here." >&4
12071         echo "We can catify or stringify, separately or together!"
12072         cpp_stuff=42
12073 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12074         echo "Ah, yes!  The good old days!" >&4
12075         echo "However, in the good old days we don't know how to stringify and"
12076         echo "catify at the same time."
12077         cpp_stuff=1
12078 else
12079         $cat >&4 <<EOM
12080 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12081 to have to edit the values of CAT[2-5] in config.h...
12082 EOM
12083         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12084 fi
12085 $rm -f cpp_stuff.*
12086
12087 : see if this is a db.h system
12088 set db.h i_db
12089 eval $inhdr
12090
12091 case "$i_db" in
12092 $define)
12093         : Check db version.
12094         echo " "
12095         echo "Checking Berkeley DB version ..." >&4
12096         $cat >try.c <<EOCP
12097 #$d_const HASCONST
12098 #ifndef HASCONST
12099 #define const
12100 #endif
12101 #include <sys/types.h>
12102 #include <stdio.h>
12103 #include <db.h>
12104 int main()
12105 {
12106 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12107     int Major, Minor, Patch ;
12108     unsigned long Version ;
12109     (void)db_version(&Major, &Minor, &Patch) ;
12110     printf("You have Berkeley DB Version 2 or greater\n");
12111
12112     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12113                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12114     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12115                 Major, Minor, Patch) ;
12116
12117     /* check that db.h & libdb are compatible */
12118     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12119         printf("db.h and libdb are incompatible\n") ;
12120         exit(3);        
12121     }
12122
12123     printf("db.h and libdb are compatible\n") ;
12124
12125     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12126                 + DB_VERSION_PATCH ;
12127
12128     /* needs to be >= 2.3.4 */
12129     if (Version < 2003004) {
12130     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12131         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12132         exit(2);        
12133     }
12134
12135     exit(0);
12136 #else
12137 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12138     printf("You have Berkeley DB Version 1\n");
12139     exit(0);    /* DB version < 2: the coast is clear. */
12140 #else
12141     exit(1);    /* <db.h> not Berkeley DB? */
12142 #endif
12143 #endif
12144 }
12145 EOCP
12146         set try
12147         if eval $compile_ok && ./try; then
12148                 echo 'Looks OK.' >&4
12149         else
12150                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12151                 i_db=$undef
12152                 case " $libs " in
12153                 *"-ldb "*)
12154                         : Remove db from list of libraries to use
12155                         echo "Removing unusable -ldb from library list" >&4
12156                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12157                         shift
12158                         libs="$*"
12159                         echo "libs = $libs" >&4
12160                         ;;
12161                 esac
12162         fi
12163         $rm -f try.*
12164         ;;
12165 esac
12166
12167 case "$i_db" in
12168 define)
12169         : Check the return type needed for hash 
12170         echo " "
12171         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12172         $cat >try.c <<EOCP
12173 #$d_const HASCONST
12174 #ifndef HASCONST
12175 #define const
12176 #endif
12177 #include <sys/types.h>
12178 #include <db.h>
12179
12180 #ifndef DB_VERSION_MAJOR
12181 u_int32_t hash_cb (ptr, size)
12182 const void *ptr;
12183 size_t size;
12184 {
12185 }
12186 HASHINFO info;
12187 int main()
12188 {
12189         info.hash = hash_cb;
12190 }
12191 #endif
12192 EOCP
12193         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12194                 if $contains warning try.out >>/dev/null 2>&1 ; then
12195                         db_hashtype='int'
12196                 else
12197                         db_hashtype='u_int32_t'
12198                 fi
12199         else
12200                 : XXX Maybe we should just give up here.
12201                 db_hashtype=u_int32_t
12202                 $cat try.out >&4
12203                 echo "Help:  I can't seem to compile the db test program." >&4
12204                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12205         fi
12206         $rm -f try.*
12207         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12208         ;;
12209 *)      db_hashtype=u_int32_t
12210         ;;
12211 esac
12212 case "$i_db" in
12213 define)
12214         : Check the return type needed for prefix 
12215         echo " "
12216         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12217         cat >try.c <<EOCP
12218 #$d_const HASCONST
12219 #ifndef HASCONST
12220 #define const
12221 #endif
12222 #include <sys/types.h>
12223 #include <db.h>
12224
12225 #ifndef DB_VERSION_MAJOR
12226 size_t prefix_cb (key1, key2)
12227 const DBT *key1;
12228 const DBT *key2;
12229 {
12230 }
12231 BTREEINFO info;
12232 int main()
12233 {
12234         info.prefix = prefix_cb;
12235 }
12236 #endif
12237 EOCP
12238         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12239                 if $contains warning try.out >>/dev/null 2>&1 ; then
12240                         db_prefixtype='int'
12241                 else
12242                         db_prefixtype='size_t'
12243                 fi
12244         else
12245                 db_prefixtype='size_t'
12246                 : XXX Maybe we should just give up here.
12247                 $cat try.out >&4
12248                 echo "Help:  I can't seem to compile the db test program." >&4
12249                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12250         fi
12251         $rm -f try.*
12252         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12253         ;;
12254 *)      db_prefixtype='size_t'
12255         ;;
12256 esac
12257
12258 : check for void type
12259 echo " "
12260 echo "Checking to see how well your C compiler groks the void type..." >&4
12261 case "$voidflags" in
12262 '')
12263         $cat >try.c <<'EOCP'
12264 #if TRY & 1
12265 void sub() {
12266 #else
12267 sub() {
12268 #endif
12269         extern void moo();      /* function returning void */
12270         void (*goo)();          /* ptr to func returning void */
12271 #if TRY & 8
12272         void *hue;              /* generic ptr */
12273 #endif
12274 #if TRY & 2
12275         void (*foo[10])();
12276 #endif
12277
12278 #if TRY & 4
12279         if(goo == moo) {
12280                 exit(0);
12281         }
12282 #endif
12283         exit(0);
12284 }
12285 int main() { sub(); }
12286 EOCP
12287         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12288                 voidflags=$defvoidused
12289         echo "Good.  It appears to support void to the level $package wants.">&4
12290                 if $contains warning .out >/dev/null 2>&1; then
12291                         echo "However, you might get some warnings that look like this:"
12292                         $cat .out
12293                 fi
12294         else
12295 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12296                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12297                         echo "It supports 1..."
12298                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12299                                 echo "It also supports 2..."
12300                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12301                                         voidflags=7
12302                                         echo "And it supports 4 but not 8 definitely."
12303                                 else
12304                                         echo "It doesn't support 4..."
12305                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12306                                                 voidflags=11
12307                                                 echo "But it supports 8."
12308                                         else
12309                                                 voidflags=3
12310                                                 echo "Neither does it support 8."
12311                                         fi
12312                                 fi
12313                         else
12314                                 echo "It does not support 2..."
12315                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12316                                         voidflags=13
12317                                         echo "But it supports 4 and 8."
12318                                 else
12319                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12320                                                 voidflags=5
12321                                                 echo "And it supports 4 but has not heard about 8."
12322                                         else
12323                                                 echo "However it supports 8 but not 4."
12324                                         fi
12325                                 fi
12326                         fi
12327                 else
12328                         echo "There is no support at all for void."
12329                         voidflags=0
12330                 fi
12331         fi
12332 esac
12333 case "$voidflags" in
12334 "$defvoidused") ;;
12335 *)      $cat >&4 <<'EOM'
12336   Support flag bits are:
12337     1: basic void declarations.
12338     2: arrays of pointers to functions returning void.
12339     4: operations between pointers to and addresses of void functions.
12340     8: generic void pointers.
12341 EOM
12342         dflt="$voidflags";
12343         rp="Your void support flags add up to what?"
12344         . ./myread
12345         voidflags="$ans"
12346         ;;
12347 esac
12348 $rm -f try.* .out
12349
12350
12351 : How can we generate normalized random numbers ?
12352 echo " "
12353 echo "Looking for a random number function..." >&4
12354 case "$randfunc" in
12355 '')
12356         if set drand48 val -f; eval $csym; $val; then
12357                 dflt="drand48"
12358                 echo "Good, found drand48()." >&4
12359         elif set random val -f; eval $csym; $val; then
12360                 dflt="random"
12361                 echo "OK, found random()." >&4
12362         else
12363                 dflt="rand"
12364                 echo "Yick, looks like I have to use rand()." >&4
12365         fi
12366         echo " "
12367         ;;
12368 *)
12369         dflt="$randfunc"
12370         ;;
12371 esac
12372 cont=true
12373
12374 case "$ccflags" in
12375 *-Dmy_rand=*|*-Dmy_srand=*)
12376         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12377         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12378         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12379         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12380         ;;
12381 esac
12382
12383 while $test "$cont"; do
12384         rp="Use which function to generate random numbers?"
12385         . ./myread
12386         if $test "$ans" = "$dflt"; then
12387                 : null
12388         else
12389                 randbits=''
12390         fi
12391         randfunc="$ans"
12392         if set $ans val -f; eval $csym; $val; then
12393                 cont=''
12394         else
12395                 dflt=y
12396                 rp="I cannot find function $ans. Use that name anyway?"
12397                 . ./myread
12398                 dflt=rand
12399                 case "$ans" in
12400                         [yY]*) cont='';;
12401                 esac
12402         fi
12403         case "$cont" in
12404         '')
12405                 case "$randfunc" in
12406                 drand48)
12407                         drand01="drand48()"
12408                         seedfunc="srand48"
12409                         randbits=48
12410                         randseedtype=long
12411                         ;;
12412                 rand|random)
12413                         case "$randbits" in
12414                         '')
12415 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12416                                 $cat >try.c <<EOCP
12417 #$i_unistd I_UNISTD
12418 #$i_stdlib I_STDLIB
12419 #include <stdio.h>
12420 #ifdef I_UNISTD
12421 #  include <unistd.h>
12422 #endif
12423 #ifdef I_STDLIB
12424 #  include <stdlib.h>
12425 #endif
12426 int main()
12427 {
12428         register int i;
12429         register unsigned long tmp;
12430         register unsigned long max = 0L;
12431
12432         for (i = 1000; i; i--) {
12433                 tmp = (unsigned long) $randfunc();
12434                 if (tmp > max) max = tmp;
12435         }
12436         for (i = 0; max; i++)
12437                 max /= 2;
12438         printf("%d\n",i);
12439 }
12440 EOCP
12441                                 set try
12442                                 if eval $compile_ok; then
12443                                         dflt=`try`
12444                                 else
12445                                         dflt='?'
12446                                         echo "(I can't seem to compile the test program...)"
12447                                 fi
12448                                 ;;
12449                         *)
12450                                 dflt="$randbits"
12451                                 ;;
12452                         esac
12453                         rp="How many bits does your $randfunc() function produce?"
12454                         . ./myread
12455                         randbits="$ans"
12456                         $rm -f try.c try
12457                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12458                         seedfunc="s$randfunc"
12459                         randseedtype=unsigned
12460                         ;;
12461                 *)
12462                         dflt="31"
12463                         rp="How many bits does your $randfunc() function produce?"
12464                         . ./myread
12465                         randbits="$ans"
12466                         seedfunc="s$randfunc"
12467                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12468                         if set $seedfunc val -f; eval $csym; $val; then
12469                                 echo "(Using $seedfunc() to seed random generator)"
12470                         else
12471                                 echo "(Warning: no $seedfunc() to seed random generator)"
12472                                 seedfunc=rand
12473                         fi
12474                         randseedtype=unsigned
12475                         ;;
12476                 esac
12477                 ;;
12478         esac
12479 done
12480
12481 echo " "
12482 echo "Determining whether or not we are on an EBCDIC system..." >&4
12483 $cat >tebcdic.c <<'EOM'
12484 int main()
12485 {
12486   if ('M'==0xd4) return 0;
12487   return 1;
12488 }
12489 EOM
12490
12491 val=$undef
12492 set tebcdic
12493 if eval $compile_ok; then
12494         if ./tebcdic; then
12495                 echo "You have EBCDIC." >&4
12496                 val="$define"
12497         else
12498                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12499         fi
12500 else
12501         echo "I'm unable to compile the test program." >&4
12502         echo "I'll assume ASCII or some ISO Latin." >&4
12503 fi
12504 $rm -f tebcdic.c tebcdic
12505 set ebcdic
12506 eval $setvar
12507
12508 echo " "
12509 $cat >&4 <<EOM
12510 Checking how to flush all pending stdio output...
12511 EOM
12512 # I only know how to find the first 32 possibly open files on SunOS.
12513 # See also hints/sunos_4_1.sh and util.c  --AD
12514 case "$osname" in
12515 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12516 esac
12517 $cat >>try.c <<EOCP
12518 #include <stdio.h>
12519 #$i_unistd I_UNISTD
12520 #ifdef I_UNISTD
12521 # include <unistd.h>
12522 #endif
12523 #$d_sysconf HAS_SYSCONF
12524 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12525 #ifdef HAS_STDIO_STREAM_ARRAY
12526 # define STDIO_STREAM_ARRAY $stdio_stream_array
12527 #endif
12528 int main() {
12529   FILE* p = fopen("try.out", "w");
12530 #ifdef TRY_FPUTC
12531   fputc('x', p);
12532 #else
12533 # ifdef TRY_FPRINTF
12534   fprintf(p, "x");
12535 # endif
12536 #endif
12537 #ifdef TRY_FFLUSH_NULL
12538   fflush(NULL);
12539 #endif
12540 #ifdef TRY_FFLUSH_ALL
12541   {
12542     long open_max = -1;
12543 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12544     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12545 # else
12546 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12547     open_max = sysconf(_SC_OPEN_MAX);
12548 #  else
12549 #   ifdef FOPEN_MAX
12550     open_max = FOPEN_MAX;
12551 #   else
12552 #    ifdef OPEN_MAX
12553     open_max = OPEN_MAX;
12554 #    else
12555 #     ifdef _NFILE
12556     open_max = _NFILE;
12557 #     endif
12558 #    endif
12559 #   endif
12560 #  endif
12561 # endif 
12562 # ifdef HAS_STDIO_STREAM_ARRAY
12563     if (open_max > 0) {
12564       long i;
12565       for (i = 0; i < open_max; i++)
12566             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12567                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12568                 STDIO_STREAM_ARRAY[i]._flag)
12569                 fflush(&STDIO_STREAM_ARRAY[i]);
12570     }   
12571   }
12572 # endif
12573 #endif
12574   _exit(42);
12575 }
12576 EOCP
12577 : first we have to find out how _not_ to flush
12578 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12579     output=''
12580     set try -DTRY_FPUTC
12581     if eval $compile; then
12582             $rm -f try.out
12583             ./try$exe_ext 2>/dev/null
12584             if $test ! -s try.out -a "X$?" = X42; then
12585                 output=-DTRY_FPUTC
12586             fi
12587     fi
12588     case "$output" in
12589     '')
12590             set try -DTRY_FPRINTF
12591             $rm -f try.out
12592             if eval $compile; then
12593                     $rm -f try.out
12594                     ./try$exe_ext 2>/dev/null
12595                     if $test ! -s try.out -a "X$?" = X42; then
12596                         output=-DTRY_FPRINTF
12597                     fi
12598             fi
12599         ;;
12600     esac
12601 fi
12602 : check for fflush NULL behaviour
12603 case "$fflushNULL" in
12604 '')     set try -DTRY_FFLUSH_NULL $output
12605         if eval $compile; then
12606                 $rm -f try.out
12607                 ./try$exe_ext 2>/dev/null
12608                 code="$?"
12609                 if $test -s try.out -a "X$code" = X42; then
12610                         fflushNULL="`$cat try.out`"
12611                 else
12612                         if $test "X$code" != X42; then
12613                                 $cat >&4 <<EOM
12614 (If this test failed, don't worry, we'll try another method shortly.)
12615 EOM
12616                         fi
12617                 fi
12618         fi
12619         $rm -f core try.core core.try.*
12620         case "$fflushNULL" in
12621         x)      $cat >&4 <<EOM
12622 Your fflush(NULL) works okay for output streams.
12623 Let's see if it clobbers input pipes...
12624 EOM
12625 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12626 # bug that improperly flushes the input end of pipes.  So we avoid the
12627 # autoflush on fork/system/exec support for now. :-(
12628 $cat >tryp.c <<EOCP
12629 #include <stdio.h>
12630 int
12631 main(int argc, char **argv)
12632 {
12633     char buf[1024];
12634     int i;
12635     char *bp = buf;
12636     while (1) {
12637         while ((i = getc(stdin)) != -1
12638                && (*bp++ = i) != '\n'
12639                && bp < &buf[1024])
12640         /* DO NOTHING */ ;
12641         *bp = '\0';
12642         fprintf(stdout, "%s", buf);
12643         fflush(NULL);
12644         if (i == -1)
12645             return 0;
12646         bp = buf;
12647     }
12648 }
12649 EOCP
12650                 fflushNULL="$define"
12651                 set tryp
12652                 if eval $compile; then
12653                     $rm -f tryp.out
12654                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12655                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12656                        $cat >&4 <<EOM
12657 fflush(NULL) seems to behave okay with input streams.
12658 EOM
12659                         fflushNULL="$define"
12660                     else
12661                         $cat >&4 <<EOM
12662 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12663 EOM
12664                         fflushNULL="$undef"
12665                     fi
12666                 fi
12667                 $rm -f core tryp.c tryp.core core.tryp.*
12668                 ;;
12669         '')     $cat >&4 <<EOM
12670 Your fflush(NULL) isn't working (contrary to ANSI C).
12671 EOM
12672                 fflushNULL="$undef"
12673                 ;;
12674         *)      $cat >&4 <<EOM
12675 Cannot figure out whether your fflush(NULL) works or not.
12676 I'm assuming it doesn't (contrary to ANSI C).
12677 EOM
12678                 fflushNULL="$undef"
12679                 ;;
12680         esac
12681         ;;
12682 $define|true|[yY]*)
12683         fflushNULL="$define"
12684         ;;
12685 *)
12686         fflushNULL="$undef"
12687         ;;
12688 esac
12689 : check explicit looping only if NULL did not work, and if the pipe
12690 : bug does not show up on an explicit flush too
12691 case "$fflushNULL" in
12692 "$undef")
12693         $cat >tryp.c <<EOCP
12694 #include <stdio.h>
12695 int
12696 main(int argc, char **argv)
12697 {
12698     char buf[1024];
12699     int i;
12700     char *bp = buf;
12701     while (1) {
12702         while ((i = getc(stdin)) != -1
12703                && (*bp++ = i) != '\n'
12704                && bp < &buf[1024])
12705         /* DO NOTHING */ ;
12706         *bp = '\0';
12707         fprintf(stdout, "%s", buf);
12708         fflush(stdin);
12709         if (i == -1)
12710             return 0;
12711         bp = buf;
12712     }
12713 }
12714 EOCP
12715         set tryp
12716         if eval $compile; then
12717             $rm -f tryp.out
12718             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12719             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12720                $cat >&4 <<EOM
12721 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12722 EOM
12723                 : now check for fflushall behaviour
12724                 case "$fflushall" in
12725                 '')     set try -DTRY_FFLUSH_ALL $output
12726                         if eval $compile; then
12727                                 $cat >&4 <<EOM
12728 (Now testing the other method--but note that this also may fail.)
12729 EOM
12730                                 $rm -f try.out
12731                                 ./try$exe_ext 2>/dev/null
12732                                 if $test -s try.out -a "X$?" = X42; then
12733                                         fflushall="`$cat try.out`"
12734                                 fi
12735                         fi
12736                         $rm -f core try.core core.try.*
12737                         case "$fflushall" in
12738                         x)      $cat >&4 <<EOM
12739 Whew. Flushing explicitly all the stdio streams works.
12740 EOM
12741                                 fflushall="$define"
12742                                 ;;
12743                         '')     $cat >&4 <<EOM
12744 Sigh. Flushing explicitly all the stdio streams doesn't work.
12745 EOM
12746                                 fflushall="$undef"
12747                                 ;;
12748                         *)      $cat >&4 <<EOM
12749 Cannot figure out whether flushing stdio streams explicitly works or not.
12750 I'm assuming it doesn't.
12751 EOM
12752                                 fflushall="$undef"
12753                                 ;;
12754                         esac
12755                         ;;
12756                 "$define"|true|[yY]*)
12757                         fflushall="$define"
12758                         ;;
12759                 *)
12760                         fflushall="$undef"
12761                         ;;
12762                 esac
12763             else
12764                 $cat >&4 <<EOM
12765 All is futile.  Even fflush(stdin) clobbers input pipes!
12766 EOM
12767                 fflushall="$undef"
12768             fi
12769         else
12770             fflushall="$undef"
12771         fi
12772         $rm -f core tryp.c tryp.core core.tryp.*
12773         ;;
12774 *)      fflushall="$undef"
12775         ;;
12776 esac
12777
12778 case "$fflushNULL$fflushall" in
12779 undefundef)
12780         $cat <<EOM
12781 OK, I give up.  I cannot figure out how to flush pending stdio output.
12782 We won't be flushing handles at all before fork/exec/popen.
12783 EOM
12784         ;;
12785 esac
12786 $rm -f try.* try$exe_ext
12787
12788 : Store the full pathname to the ar program for use in the C program
12789 : Respect a hint or command line value for full_ar.
12790 case "$full_ar" in
12791 '') full_ar=$ar ;;
12792 esac
12793
12794 : Store the full pathname to the sed program for use in the C program
12795 full_sed=$sed
12796
12797 : see what type gids are declared as in the kernel
12798 echo " "
12799 echo "Looking for the type for group ids returned by getgid()."
12800 set gid_t gidtype xxx stdio.h sys/types.h
12801 eval $typedef
12802 case "$gidtype" in
12803 xxx)
12804         xxx=`./findhdr sys/user.h`
12805         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12806         case $1 in
12807         unsigned) dflt="$1 $2" ;;
12808         *) dflt="$1" ;;
12809         esac
12810         ;;
12811 *) dflt="$gidtype";;
12812 esac
12813 case "$gidtype" in
12814 gid_t) echo "gid_t found." ;;
12815 *)      rp="What is the type for group ids returned by getgid()?"
12816         . ./myread
12817         gidtype="$ans"
12818         ;;
12819 esac
12820
12821 echo " "
12822 case "$gidtype" in
12823 *_t) zzz="$gidtype"     ;;
12824 *)   zzz="gid"          ;;
12825 esac
12826 echo "Checking the size of $zzz..." >&4 
12827 cat > try.c <<EOCP
12828 #include <sys/types.h>
12829 #include <stdio.h>
12830 int main() {
12831     printf("%d\n", (int)sizeof($gidtype));
12832     exit(0);
12833 }
12834 EOCP
12835 set try
12836 if eval $compile_ok; then
12837         yyy=`./try`
12838         case "$yyy" in
12839         '')     gidsize=4
12840                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12841                 ;;
12842         *)      gidsize=$yyy
12843                 echo "Your $zzz is $gidsize bytes long."
12844                 ;;
12845         esac
12846 else
12847         gidsize=4
12848         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12849 fi
12850
12851
12852 echo " "
12853 case "$gidtype" in
12854 *_t) zzz="$gidtype"     ;;
12855 *)   zzz="gid"          ;;
12856 esac
12857 echo "Checking the sign of $zzz..." >&4 
12858 cat > try.c <<EOCP
12859 #include <sys/types.h>
12860 #include <stdio.h>
12861 int main() {
12862         $gidtype foo = -1;
12863         if (foo < 0)
12864                 printf("-1\n");
12865         else
12866                 printf("1\n");
12867 }
12868 EOCP
12869 set try
12870 if eval $compile; then
12871         yyy=`./try`
12872         case "$yyy" in
12873         '')     gidsign=1
12874                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12875                 ;;
12876         *)      gidsign=$yyy
12877                 case "$gidsign" in
12878                  1) echo "Your $zzz is unsigned." ;;
12879                 -1) echo "Your $zzz is signed."   ;;
12880                 esac
12881                 ;;
12882         esac
12883 else
12884         gidsign=1
12885         echo "(I can't compile the test program--guessing unsigned.)" >&4
12886 fi
12887
12888
12889 echo " "
12890
12891 if $test X"$quadtype" != X; then
12892
12893 echo "Checking how to print 64-bit integers..." >&4
12894
12895 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12896         $cat >try.c <<'EOCP'
12897 #include <sys/types.h>
12898 #include <stdio.h>
12899 int main() {
12900   int q = 12345678901;
12901   printf("%ld\n", q);
12902 }
12903 EOCP
12904         set try
12905         if eval $compile; then
12906                 yyy=`./try$exe_ext`
12907                 case "$yyy" in
12908                 12345678901)
12909                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12910                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12911                         echo "We will use %d."
12912                         ;;
12913                 esac
12914         fi
12915 fi
12916
12917 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12918         $cat >try.c <<'EOCP'
12919 #include <sys/types.h>
12920 #include <stdio.h>
12921 int main() {
12922   long q = 12345678901;
12923   printf("%ld\n", q);
12924 }
12925 EOCP
12926         set try
12927         if eval $compile; then
12928                 yyy=`./try$exe_ext`
12929                 case "$yyy" in
12930                 12345678901)
12931                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12932                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12933                         echo "We will use %ld."
12934                         ;;
12935                 esac
12936         fi
12937 fi
12938
12939 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12940         $cat >try.c <<'EOCP'
12941 #include <sys/types.h>
12942 #include <inttypes.h>
12943 #include <stdio.h>
12944 int main() {
12945   int64_t q = 12345678901;
12946   printf("%" PRId64 "\n", q);
12947 }
12948 EOCP
12949         set try
12950         if eval $compile; then
12951                 yyy=`./try$exe_ext`
12952                 case "$yyy" in
12953                 12345678901)
12954                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12955                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12956                         echo "We will use the C9X style."
12957                         ;;
12958                 esac
12959         fi
12960 fi
12961
12962 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12963         $cat >try.c <<'EOCP'
12964 #include <sys/types.h>
12965 #include <stdio.h>
12966 int main() {
12967   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12968   printf("%lld\n", q);
12969 }
12970 EOCP
12971         set try
12972         if eval $compile; then
12973                 yyy=`./try$exe_ext`
12974                 case "$yyy" in
12975                 12345678901)
12976                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12977                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12978                         echo "We will use the %lld style."
12979                         ;;
12980                 esac
12981         fi
12982 fi
12983
12984 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12985         $cat >try.c <<EOCP
12986 #include <sys/types.h>
12987 #include <stdio.h>
12988 int main() {
12989   $quadtype q = 12345678901;
12990   printf("%Ld\n", q);
12991 }
12992 EOCP
12993         set try
12994         if eval $compile; then
12995                 yyy=`./try$exe_ext`
12996                 case "$yyy" in
12997                 12345678901)
12998                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12999                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13000                         echo "We will use %Ld."
13001                         ;;
13002                 esac
13003         fi
13004 fi
13005
13006 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13007         $cat >try.c <<EOCP
13008 #include <sys/types.h>
13009 #include <stdio.h>
13010 int main() {
13011   $quadtype q = 12345678901;
13012   printf("%qd\n", q);
13013 }
13014 EOCP
13015         set try
13016         if eval $compile; then
13017                 yyy=`./try$exe_ext`
13018                 case "$yyy" in
13019                 12345678901)
13020                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13021                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13022                         echo "We will use %qd."
13023                         ;;
13024                 esac
13025         fi
13026 fi
13027
13028 if $test X"$sPRId64" = X; then
13029         echo "Cannot figure out how to print 64-bit integers." >&4
13030 fi
13031
13032 $rm -f try try.*
13033
13034 fi
13035
13036 case "$sPRId64" in
13037 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13038         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
13039         ;;
13040 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13041         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
13042         ;;
13043 esac
13044
13045
13046 echo " "
13047 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13048
13049 if $test X"$ivsize" = X8; then
13050         ivdformat="$sPRId64"
13051         uvuformat="$sPRIu64"
13052         uvoformat="$sPRIo64"
13053         uvxformat="$sPRIx64"
13054 else
13055         if $test X"$ivsize" = X"$longsize"; then
13056                 ivdformat='"ld"'
13057                 uvuformat='"lu"'
13058                 uvoformat='"lo"'
13059                 uvxformat='"lx"'
13060         else
13061                 if $test X"$ivsize" = X"$intsize"; then
13062                         ivdformat='"d"'
13063                         uvuformat='"u"'
13064                         uvoformat='"o"'
13065                         uvxformat='"x"'
13066                 else
13067                         : far out
13068                         if $test X"$ivsize" = X"$shortsize"; then
13069                                 ivdformat='"hd"'
13070                                 uvuformat='"hu"'
13071                                 uvoformat='"ho"'
13072                                 uvxformat='"hx"'
13073                         fi
13074                 fi
13075         fi
13076 fi
13077
13078 case "$ivdformat" in
13079 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13080     exit 1
13081     ;;
13082 esac
13083
13084
13085 echo " "
13086 $echo "Checking the format string to be used for gids..." >&4
13087
13088 case "$gidsign" in
13089 -1)     if $test X"$gidsize" = X"$ivsize"; then
13090                 gidformat="$ivdformat"
13091         else
13092                 if $test X"$gidsize" = X"$longsize"; then
13093                         gidformat='"ld"'
13094                 else
13095                         if $test X"$gidsize" = X"$intsize"; then
13096                                 gidformat='"d"'
13097                         else
13098                                 if $test X"$gidsize" = X"$shortsize"; then
13099                                         gidformat='"hd"'
13100                                 fi
13101                         fi
13102                 fi
13103         fi
13104         ;;
13105 *)      if $test X"$gidsize" = X"$uvsize"; then
13106                 gidformat="$uvuformat"
13107         else
13108                 if $test X"$gidsize" = X"$longsize"; then
13109                         gidformat='"lu"'
13110                 else
13111                         if $test X"$gidsize" = X"$intsize"; then
13112                                 gidformat='"u"'
13113                         else
13114                                 if $test X"$gidsize" = X"$shortsize"; then
13115                                         gidformat='"hu"'
13116                                 fi
13117                         fi
13118                 fi
13119         fi
13120         ;;
13121 esac
13122
13123 : see if getgroups exists
13124 set getgroups d_getgrps
13125 eval $inlibc
13126
13127 : see if setgroups exists
13128 set setgroups d_setgrps
13129 eval $inlibc
13130
13131
13132 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13133 echo " "
13134 case "$d_getgrps$d_setgrps" in
13135 *define*)
13136         case "$groupstype" in
13137         '') dflt="$gidtype" ;;
13138         *)  dflt="$groupstype" ;;
13139         esac
13140         $cat <<EOM
13141 What type of pointer is the second argument to getgroups() and setgroups()?
13142 Usually this is the same as group ids, $gidtype, but not always.
13143
13144 EOM
13145         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13146         . ./myread
13147         groupstype="$ans"
13148         ;;
13149 *)  groupstype="$gidtype";;
13150 esac
13151
13152 echo " "
13153 echo "Checking if your $make program sets \$(MAKE)..." >&4
13154 case "$make_set_make" in
13155 '')
13156         $sed 's/^X //' > testmake.mak << 'EOF'
13157 Xall:
13158 X       @echo 'maketemp="$(MAKE)"'
13159 EOF
13160         case "`$make -f testmake.mak 2>/dev/null`" in
13161         *maketemp=*) make_set_make='#' ;;
13162         *)      make_set_make="MAKE=$make" ;;
13163         esac
13164         $rm -f testmake.mak
13165         ;;
13166 esac
13167 case "$make_set_make" in
13168 '#') echo "Yup, it does.";;
13169 *) echo "Nope, it doesn't.";;
13170 esac
13171
13172 : see what type is used for mode_t
13173 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13174 set mode_t modetype int stdio.h sys/types.h
13175 eval $typedef_ask
13176
13177 : define a fucntion to check prototypes
13178 $cat > protochk <<EOSH
13179 $startsh
13180 cc="$cc"
13181 optimize="$optimize"
13182 ccflags="$ccflags"
13183 prototype="$prototype"
13184 define="$define"
13185 rm=$rm
13186 EOSH
13187
13188 $cat >> protochk <<'EOSH'
13189
13190 $rm -f try.c
13191 foo="$1"
13192 shift
13193 while test $# -ge 2; do
13194         case "$1" in
13195                 $define) echo "#include <$2>" >> try.c ;;
13196                 literal) echo "$2" >> try.c ;;
13197         esac
13198     shift 2
13199 done
13200 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13201 cat >> try.c <<'EOCP'
13202 #ifdef CAN_PROTOTYPE
13203 #define _(args) args
13204 #else
13205 #define _(args) ()
13206 #endif
13207 EOCP
13208 echo "$foo" >> try.c
13209 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13210 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13211 status=$?
13212 $rm -f try.[co]
13213 exit $status
13214 EOSH
13215 chmod +x protochk
13216 $eunicefix protochk
13217
13218 : see what type is used for size_t
13219 rp="What is the type used for the length parameter for string functions?"
13220 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13221 eval $typedef_ask
13222
13223 : check for type of arguments to gethostbyaddr. 
13224 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13225         case "$d_gethbyaddr" in
13226         $define)
13227                 $cat <<EOM
13228
13229 Checking to see what type of arguments are accepted by gethostbyaddr().
13230 EOM
13231                 hdrs="$define sys/types.h
13232                         $d_socket sys/socket.h 
13233                         $i_niin netinet/in.h 
13234                         $i_netdb netdb.h
13235                         $i_unistd unistd.h"
13236                 : The first arg can 'char *' or 'void *'
13237                 : The second arg is some of integral type
13238                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13239                         for yyy in size_t long int; do
13240                                 case "$netdb_host_type" in
13241                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13242                                         if ./protochk "$try" $hdrs; then
13243                                                 echo "Your system accepts $xxx for the first arg."
13244                                                 echo "...and $yyy for the second arg."
13245                                                 netdb_host_type="$xxx"
13246                                                 netdb_hlen_type="$yyy"
13247                                         fi
13248                                         ;;
13249                                 esac
13250                         done
13251                 done
13252                 : In case none of those worked, prompt the user.
13253                 case "$netdb_host_type" in
13254                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13255                         dflt='char *'
13256                         . ./myread
13257                         netdb_host_type=$ans
13258                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13259                         dflt="$sizetype"
13260                         . ./myread
13261                         netdb_hlen_type=$ans
13262                         ;;
13263                 esac
13264                 ;;
13265         *)      : no gethostbyaddr, so pick harmless defaults
13266                 netdb_host_type='char *'
13267                 netdb_hlen_type="$sizetype"
13268                 ;;
13269         esac
13270         # Remove the "const" if needed. -- but then we'll have a 
13271         # prototype clash!
13272         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13273 fi
13274
13275 : check for type of argument to gethostbyname. 
13276 if test "X$netdb_name_type" = X ; then
13277         case "$d_gethbyname" in
13278         $define)
13279                 $cat <<EOM
13280
13281 Checking to see what type of argument is accepted by gethostbyname().
13282 EOM
13283                 hdrs="$define sys/types.h
13284                         $d_socket sys/socket.h 
13285                         $i_niin netinet/in.h 
13286                         $i_netdb netdb.h
13287                         $i_unistd unistd.h"
13288                 for xxx in "const char *" "char *"; do
13289                         case "$netdb_name_type" in
13290                         '')     try="extern struct hostent *gethostbyname($xxx);"
13291                                 if ./protochk "$try" $hdrs; then
13292                                         echo "Your system accepts $xxx."
13293                                         netdb_name_type="$xxx"
13294                                 fi
13295                                 ;;
13296                         esac
13297                 done
13298                 : In case none of those worked, prompt the user.
13299                 case "$netdb_name_type" in
13300                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13301                         dflt='char *'
13302                         . ./myread
13303                         netdb_name_type=$ans
13304                         ;;
13305                 esac
13306                 ;;
13307         *)      : no gethostbyname, so pick harmless default
13308                 netdb_name_type='char *'
13309                 ;;
13310         esac
13311 fi
13312
13313 : check for type of 1st argument to getnetbyaddr. 
13314 if test "X$netdb_net_type" = X ; then
13315         case "$d_getnbyaddr" in
13316         $define)
13317                 $cat <<EOM
13318
13319 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13320 EOM
13321                 hdrs="$define sys/types.h
13322                         $d_socket sys/socket.h 
13323                         $i_niin netinet/in.h 
13324                         $i_netdb netdb.h
13325                         $i_unistd unistd.h"
13326                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13327                         case "$netdb_net_type" in
13328                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13329                                 if ./protochk "$try" $hdrs; then
13330                                         echo "Your system accepts $xxx."
13331                                         netdb_net_type="$xxx"
13332                                 fi
13333                                 ;;
13334                         esac
13335                 done
13336                 : In case none of those worked, prompt the user.
13337                 case "$netdb_net_type" in
13338                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13339                         dflt='long'
13340                         . ./myread
13341                         netdb_net_type=$ans
13342                         ;;
13343                 esac
13344                 ;;
13345         *)      : no getnetbyaddr, so pick harmless default
13346                 netdb_net_type='long'
13347                 ;;
13348         esac
13349 fi
13350 : locate the preferred pager for this system
13351 case "$pager" in
13352 '')
13353         dflt=''
13354         case "$pg" in
13355         /*) dflt=$pg;;
13356         esac
13357         case "$more" in
13358         /*) dflt=$more;;
13359         esac
13360         case "$less" in
13361         /*) dflt=$less;;
13362         esac
13363         case "$dflt" in
13364         '') dflt=/usr/ucb/more;;
13365         esac
13366         ;;
13367 *) dflt="$pager";;
13368 esac
13369 echo " "
13370 fn=f/
13371 rp='What pager is used on your system?'
13372 . ./getfile
13373 pager="$ans"
13374
13375 : see what type pids are declared as in the kernel
13376 rp="What is the type of process ids on this system?"
13377 set pid_t pidtype int stdio.h sys/types.h
13378 eval $typedef_ask
13379
13380 : Find earliest binary compatible site_perl subdirectory perl can use.
13381 case "$bincompat5005" in
13382 "$define") xs_apiversion='5.005' ;;
13383 *) xs_apiversion=$version ;;   # The current site_perl version.
13384 esac
13385 : Find earliest pure perl site_perl subdirectory perl can use.
13386 : The versioned directories started at 5.005.
13387 pm_apiversion='5.005'
13388
13389 : check for length of pointer
13390 echo " "
13391 case "$ptrsize" in
13392 '')
13393         echo "Checking to see how big your pointers are..." >&4
13394         if test "$voidflags" -gt 7; then
13395                 echo '#define VOID_PTR char *' > try.c
13396         else
13397                 echo '#define VOID_PTR void *' > try.c
13398         fi
13399         $cat >>try.c <<'EOCP'
13400 #include <stdio.h>
13401 int main()
13402 {
13403     printf("%d\n", (int)sizeof(VOID_PTR));
13404     exit(0);
13405 }
13406 EOCP
13407         set try
13408         if eval $compile_ok; then
13409                 ptrsize=`./try`
13410                 echo "Your pointers are $ptrsize bytes long."
13411         else
13412                 dflt='4'
13413                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13414                 rp="What is the size of a pointer (in bytes)?"
13415                 . ./myread
13416                 ptrsize="$ans"
13417         fi
13418         ;;
13419 esac
13420 $rm -f try.c try
13421
13422 : see if ar generates random libraries by itself
13423 echo " "
13424 echo "Checking how to generate random libraries on your machine..." >&4
13425 echo 'int bar1() { return bar2(); }' > bar1.c
13426 echo 'int bar2() { return 2; }' > bar2.c
13427 $cat > foo.c <<'EOP'
13428 int main() { printf("%d\n", bar1()); exit(0); }
13429 EOP
13430 $cc $ccflags -c bar1.c >/dev/null 2>&1
13431 $cc $ccflags -c bar2.c >/dev/null 2>&1
13432 $cc $ccflags -c foo.c >/dev/null 2>&1
13433 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13434 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13435         ./foobar >/dev/null 2>&1; then
13436         echo "$ar appears to generate random libraries itself."
13437         orderlib=false
13438         ranlib=":"
13439 elif $ar ts bar$_a >/dev/null 2>&1 &&
13440         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13441         ./foobar >/dev/null 2>&1; then
13442                 echo "a table of contents needs to be added with '$ar ts'."
13443                 orderlib=false
13444                 ranlib="$ar ts"
13445 else
13446         case "$ranlib" in
13447         :) ranlib='';;
13448         '')
13449                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13450                 $test -f $ranlib || ranlib=''
13451                 ;;
13452         esac
13453         if $test -n "$ranlib"; then
13454                 echo "your system has '$ranlib'; we'll use that."
13455                 orderlib=false
13456         else
13457                 echo "your system doesn't seem to support random libraries"
13458                 echo "so we'll use lorder and tsort to order the libraries."
13459                 orderlib=true
13460                 ranlib=":"
13461         fi
13462 fi
13463 $rm -f foo* bar* 
13464
13465 : check for type of arguments to select. 
13466 case "$selecttype" in
13467 '') case "$d_select" in
13468         $define)
13469                 echo " "
13470                 $cat <<EOM
13471 Checking to see what type of arguments are accepted by select().
13472 EOM
13473                 hdrs="$define sys/types.h
13474                         $i_systime sys/time.h 
13475                         $i_sysselct sys/select.h
13476                         $d_socket sys/socket.h"
13477                 : The first arg can be int, unsigned, or size_t
13478                 : The last arg may or may not be 'const'
13479                 val=''
13480                 : void pointer has been seen but using that
13481                 : breaks the selectminbits test
13482                 for xxx in 'fd_set *' 'int *'; do
13483                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13484                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13485                                         case "$val" in
13486                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13487                                                 if ./protochk "$try" $hdrs; then
13488                                                         echo "Your system accepts $xxx."
13489                                                         val="$xxx"
13490                                                 fi
13491                                                 ;;
13492                                         esac
13493                                 done
13494                         done
13495                 done
13496                 case "$val" in
13497                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13498                         case "$d_fd_set" in
13499                                 $define) dflt="fd_set *" ;;
13500                                 *)              dflt="int *" ;;
13501                         esac
13502                         . ./myread
13503                         val=$ans
13504                         ;;
13505                 esac
13506                 selecttype="$val"
13507                 ;;
13508         *)      : no select, so pick a harmless default
13509                 selecttype='int *'
13510                 ;;
13511         esac
13512         ;;
13513 esac
13514
13515 : check for the select 'width'
13516 case "$selectminbits" in
13517 '') case "$d_select" in
13518         $define)
13519                 $cat <<EOM
13520
13521 Checking to see on how many bits at a time your select() operates...
13522 EOM
13523                 $cat >try.c <<EOCP
13524 #include <sys/types.h>
13525 #$i_time I_TIME
13526 #$i_systime I_SYS_TIME
13527 #$i_systimek I_SYS_TIME_KERNEL
13528 #ifdef I_TIME
13529 #   include <time.h>
13530 #endif
13531 #ifdef I_SYS_TIME
13532 #   ifdef I_SYS_TIME_KERNEL
13533 #       define KERNEL
13534 #   endif
13535 #   include <sys/time.h>
13536 #   ifdef I_SYS_TIME_KERNEL
13537 #       undef KERNEL
13538 #   endif
13539 #endif
13540 #$i_sysselct I_SYS_SELECT
13541 #ifdef I_SYS_SELECT
13542 #include <sys/select.h>
13543 #endif
13544 #$d_socket HAS_SOCKET
13545 #ifdef HAS_SOCKET
13546 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13547 #endif
13548 #include <stdio.h>
13549 $selecttype b;
13550 #define S sizeof(*(b))
13551 #define MINBITS 64
13552 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13553 #define NBITS  (NBYTES * 8)
13554 int main() {
13555     char s[NBYTES];
13556     struct timeval t;
13557     int i;
13558     FILE* fp;
13559     int fd;
13560
13561     fclose(stdin);
13562     fp = fopen("try.c", "r");
13563     if (fp == 0)
13564       exit(1);
13565     fd = fileno(fp);
13566     if (fd < 0)
13567       exit(2);
13568     b = ($selecttype)s;
13569     for (i = 0; i < NBITS; i++)
13570         FD_SET(i, b);
13571     t.tv_sec  = 0;
13572     t.tv_usec = 0;
13573     select(fd + 1, b, 0, 0, &t);
13574     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13575     printf("%d\n", i + 1);
13576     return 0;
13577 }
13578 EOCP
13579                 set try
13580                 if eval $compile_ok; then
13581                         selectminbits=`./try`
13582                         case "$selectminbits" in
13583                         '')     cat >&4 <<EOM
13584 Cannot figure out on how many bits at a time your select() operates.
13585 I'll play safe and guess it is 32 bits.
13586 EOM
13587                                 selectminbits=32
13588                                 bits="32 bits"
13589                                 ;;
13590                         1)      bits="1 bit" ;;
13591                         *)      bits="$selectminbits bits" ;;
13592                         esac
13593                         echo "Your select() operates on $bits at a time." >&4
13594                 else
13595                         rp='What is the minimum number of bits your select() operates on?'
13596                         case "$byteorder" in
13597                         1234|12345678)  dflt=32 ;;
13598                         *)              dflt=1  ;;
13599                         esac
13600                         . ./myread
13601                         val=$ans
13602                         selectminbits="$val"
13603                 fi
13604                 $rm -f try.* try
13605                 ;;
13606         *)      : no select, so pick a harmless default
13607                 selectminbits='32'
13608                 ;;
13609         esac
13610         ;;
13611 esac
13612
13613 : Trace out the files included by signal.h, then look for SIGxxx names.
13614 : Remove SIGARRAYSIZE used by HPUX.
13615 : Remove SIGSTKSIZE used by Linux.
13616 : Remove SIGSTKSZ used by Posix.
13617 : Remove SIGTYP void lines used by OS2.
13618 : Some cpps, like os390, dont give the file name anywhere
13619 if [ "X$fieldn" = X ]; then
13620         : Just make some guesses.  We check them later.
13621         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13622 else
13623         xxx=`echo '#include <signal.h>' |
13624         $cppstdin $cppminus $cppflags 2>/dev/null |
13625         $grep '^[       ]*#.*include' | 
13626         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13627 fi
13628 : Check this list of files to be sure we have parsed the cpp output ok.
13629 : This will also avoid potentially non-existent files, such 
13630 : as ../foo/bar.h
13631 xxxfiles=''
13632 for xx in $xxx /dev/null ; do
13633         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13634 done
13635 : If we have found no files, at least try signal.h
13636 case "$xxxfiles" in
13637 '')     xxxfiles=`./findhdr signal.h` ;;
13638 esac
13639 xxx=`awk '
13640 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13641         print substr($2, 4, 20)
13642 }
13643 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13644         print substr($3, 4, 20)
13645 }' $xxxfiles`
13646 : Append some common names just in case the awk scan failed.
13647 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13648 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13649 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13650 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13651 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13652
13653 : generate a few handy files for later
13654 $cat > signal.c <<'EOCP'
13655 #include <sys/types.h>
13656 #include <signal.h>
13657 #include <stdio.h>
13658 int main() {
13659
13660 /* Strange style to avoid deeply-nested #if/#else/#endif */
13661 #ifndef NSIG
13662 #  ifdef _NSIG
13663 #    define NSIG (_NSIG)
13664 #  endif
13665 #endif
13666
13667 #ifndef NSIG
13668 #  ifdef SIGMAX
13669 #    define NSIG (SIGMAX+1)
13670 #  endif
13671 #endif
13672
13673 #ifndef NSIG
13674 #  ifdef SIG_MAX
13675 #    define NSIG (SIG_MAX+1)
13676 #  endif
13677 #endif
13678
13679 #ifndef NSIG
13680 #  ifdef MAXSIG
13681 #    define NSIG (MAXSIG+1)
13682 #  endif
13683 #endif
13684
13685 #ifndef NSIG
13686 #  ifdef MAX_SIG
13687 #    define NSIG (MAX_SIG+1)
13688 #  endif
13689 #endif
13690
13691 #ifndef NSIG
13692 #  ifdef SIGARRAYSIZE
13693 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13694 #  endif
13695 #endif
13696
13697 #ifndef NSIG
13698 #  ifdef _sys_nsig
13699 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13700 #  endif
13701 #endif
13702
13703 /* Default to some arbitrary number that's big enough to get most
13704    of the common signals.
13705 */
13706 #ifndef NSIG
13707 #    define NSIG 50
13708 #endif
13709
13710 printf("NSIG %d\n", NSIG);
13711
13712 #ifndef JUST_NSIG
13713
13714 EOCP
13715
13716 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13717 {
13718         printf "#ifdef SIG"; printf $1; printf "\n"
13719         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13720         printf $1; printf ");\n"
13721         printf "#endif\n"
13722 }
13723 END {
13724         printf "#endif /* JUST_NSIG */\n";
13725         printf "exit(0);\n}\n";
13726 }
13727 ' >>signal.c
13728 $cat >signal.awk <<'EOP'
13729 BEGIN { ndups = 0 }
13730 $1 ~ /^NSIG$/ { nsig = $2 }
13731 ($1 !~ /^NSIG$/) && (NF == 2) {
13732     if ($2 > maxsig) { maxsig = $2 }
13733     if (sig_name[$2]) {
13734         dup_name[ndups] = $1
13735         dup_num[ndups] = $2
13736         ndups++ 
13737     }
13738     else {
13739         sig_name[$2] = $1
13740         sig_num[$2] = $2
13741     }
13742 }
13743 END { 
13744     if (nsig == 0) {
13745         nsig = maxsig + 1
13746     }
13747     printf("NSIG %d\n", nsig);
13748     for (n = 1; n < nsig; n++) {
13749         if (sig_name[n]) {
13750             printf("%s %d\n", sig_name[n], sig_num[n])
13751         }
13752         else {
13753             printf("NUM%d %d\n", n, n) 
13754         }
13755     }
13756     for (n = 0; n < ndups; n++) {
13757         printf("%s %d\n", dup_name[n], dup_num[n])
13758     }
13759 }
13760 EOP
13761 $cat >signal_cmd <<EOS
13762 $startsh
13763 if $test -s signal.lst; then
13764     echo "Using your existing signal.lst file"
13765         exit 0
13766 fi
13767 xxx="$xxx"
13768 EOS
13769 $cat >>signal_cmd <<'EOS'
13770
13771 set signal
13772 if eval $compile_ok; then
13773         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13774 else
13775         echo "(I can't seem be able to compile the whole test program)" >&4
13776         echo "(I'll try it in little pieces.)" >&4
13777         set signal -DJUST_NSIG
13778         if eval $compile_ok; then
13779                 ./signal$_exe > signal.nsg
13780                 $cat signal.nsg
13781         else
13782                 echo "I can't seem to figure out how many signals you have." >&4
13783                 echo "Guessing 50." >&4
13784                 echo 'NSIG 50' > signal.nsg
13785         fi
13786         : Now look at all the signal names, one at a time.
13787         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13788                 $cat > signal.c <<EOCP
13789 #include <sys/types.h>
13790 #include <signal.h>
13791 #include <stdio.h>
13792 int main() {
13793 printf("$xx %d\n", SIG${xx});
13794 return 0;
13795 }
13796 EOCP
13797                 set signal
13798                 if eval $compile; then
13799                         echo "SIG${xx} found."
13800                         ./signal$_exe  >> signal.ls1
13801                 else
13802                         echo "SIG${xx} NOT found."
13803                 fi
13804         done
13805         if $test -s signal.ls1; then
13806                 $cat signal.nsg signal.ls1 |
13807                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13808         fi
13809
13810 fi
13811 if $test -s signal.lst; then
13812         :
13813 else
13814         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13815         echo 'kill -l' >signal
13816         set X `csh -f <signal`
13817         $rm -f signal
13818         shift
13819         case $# in
13820         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13821         esac
13822         echo $@ | $tr ' ' $trnl | \
13823             $awk '{ printf "%s %d\n", $1, ++s; }
13824                   END { printf "NSIG %d\n", ++s }' >signal.lst
13825 fi
13826 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13827 EOS
13828 chmod a+x signal_cmd
13829 $eunicefix signal_cmd
13830
13831 : generate list of signal names
13832 echo " "
13833 case "$sig_name_init" in
13834 '') doinit=yes ;;
13835 *)  case "$sig_num_init" in
13836     ''|*,*) doinit=yes ;;
13837     esac ;;
13838 esac
13839 case "$doinit" in
13840 yes)
13841         echo "Generating a list of signal names and numbers..." >&4
13842         . ./signal_cmd
13843         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13844         sig_name=`$awk 'BEGIN { printf "ZERO " }
13845                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13846         sig_num=`$awk  'BEGIN { printf "0 " }
13847                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13848         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13849                              !/^NSIG/   { printf "\"%s\", ", $1 }
13850                              END        { printf "0\n" }' signal.lst`
13851         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13852                              !/^NSIG/   { printf "%d, ", $2}
13853                              END        { printf "0\n"}' signal.lst`
13854         ;;
13855 esac
13856 echo "The following $sig_count signals are available:"
13857 echo " "
13858 echo $sig_name | $awk \
13859 'BEGIN { linelen = 0 }
13860 {
13861         for (i = 1; i <= NF; i++) {
13862                 name = "SIG" $i " "
13863                 linelen = linelen + length(name)
13864                 if (linelen > 70) {
13865                         printf "\n"
13866                         linelen = length(name)
13867                 }
13868                 printf "%s", name
13869         }
13870         printf "\n"
13871 }'
13872 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13873
13874 echo " "
13875 case "$sizetype" in
13876 *_t) zzz="$sizetype"    ;;
13877 *)   zzz="filesize"     ;;
13878 esac
13879 echo "Checking the size of $zzz..." >&4 
13880 cat > try.c <<EOCP
13881 #include <sys/types.h>
13882 #include <stdio.h>
13883 int main() {
13884     printf("%d\n", (int)sizeof($sizetype));
13885     exit(0);
13886 }
13887 EOCP
13888 set try
13889 if eval $compile_ok; then
13890         yyy=`./try`
13891         case "$yyy" in
13892         '')     sizesize=4
13893                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
13894                 ;;
13895         *)      sizesize=$yyy
13896                 echo "Your $zzz size is $sizesize bytes."
13897                 ;;
13898         esac
13899 else
13900         sizesize=4
13901         echo "(I can't compile the test program--guessing $sizesize.)" >&4
13902 fi
13903
13904
13905 : check for socklen_t
13906 echo " "
13907 echo "Checking to see if you have socklen_t..." >&4
13908 $cat >try.c <<EOCP
13909 #include <sys/types.h>
13910 #$d_socket HAS_SOCKET
13911 #ifdef HAS_SOCKET
13912 #include <sys/socket.h>
13913 #endif
13914 int main() { socklen_t x = 16; }
13915 EOCP
13916 set try
13917 if eval $compile; then
13918         val="$define"
13919         echo "You have socklen_t."
13920 else
13921         val="$undef"
13922         echo "You do not have socklen_t."
13923         case "$sizetype" in
13924         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
13925         esac
13926 fi
13927 $rm -f try try.*
13928 set d_socklen_t
13929 eval $setvar
13930
13931 : check for type of the size argument to socket calls
13932 case "$d_socket" in
13933 "$define")
13934         $cat <<EOM
13935
13936 Checking to see what type is the last argument of accept().
13937 EOM
13938         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13939         yyy=''
13940         case "$d_socklen_t" in
13941         "$define") yyy="$yyy socklen_t"
13942         esac
13943         yyy="$yyy $sizetype int long unsigned"
13944         for xxx in $yyy; do
13945                 case "$socksizetype" in
13946                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13947                         if ./protochk "$try" $hdrs; then
13948                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13949                                 socksizetype="$xxx"
13950                         fi
13951                         ;;
13952                 esac
13953         done
13954 : In case none of those worked, prompt the user.
13955         case "$socksizetype" in
13956         '')     rp='What is the type for socket address structure sizes?'
13957                 dflt='int'
13958                 . ./myread
13959                 socksizetype=$ans
13960                 ;;
13961         esac
13962         ;;
13963 *)      : no sockets, so pick relatively harmless default
13964         socksizetype='int'
13965         ;;
13966 esac
13967
13968 : see what type is used for signed size_t
13969 set ssize_t ssizetype int stdio.h sys/types.h
13970 eval $typedef
13971 dflt="$ssizetype"
13972 $cat > ssize.c <<EOM
13973 #include <stdio.h>
13974 #include <sys/types.h>
13975 #define Size_t $sizetype
13976 #define SSize_t $dflt
13977 int main()
13978 {
13979         if (sizeof(Size_t) == sizeof(SSize_t))
13980                 printf("$dflt\n");
13981         else if (sizeof(Size_t) == sizeof(int))
13982                 printf("int\n");
13983         else 
13984                 printf("long\n");
13985         exit(0);
13986 }
13987 EOM
13988 echo " "
13989 set ssize
13990 if eval $compile_ok && ./ssize > /dev/null; then
13991         ssizetype=`./ssize`
13992         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13993 else
13994         $cat >&4 <<EOM
13995 Help! I can't compile and run the ssize_t test program: please enlighten me!
13996 (This is probably a misconfiguration in your system or libraries, and
13997 you really ought to fix it.  Still, I'll try anyway.)
13998
13999 I need a type that is the same size as $sizetype, but is guaranteed to
14000 be signed.  Common values are ssize_t, int and long.
14001
14002 EOM
14003         rp="What signed type is the same size as $sizetype?"
14004         . ./myread
14005         ssizetype="$ans"
14006 fi
14007 $rm -f ssize ssize.*
14008
14009 : see what type of char stdio uses.
14010 echo " "
14011 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14012         echo "Your stdio uses unsigned chars." >&4
14013         stdchar="unsigned char"
14014 else
14015         echo "Your stdio uses signed chars." >&4
14016         stdchar="char"
14017 fi
14018
14019 : see if time exists
14020 echo " "
14021 if test "X$d_time" = X -o X"$timetype" = X; then
14022     if set time val -f d_time; eval $csym; $val; then
14023                 echo 'time() found.' >&4
14024                 val="$define"
14025                 rp="What is the type returned by time() on this system?"
14026                 set time_t timetype long stdio.h sys/types.h
14027                 eval $typedef_ask
14028     else
14029                 echo 'time() not found, hope that will do.' >&4
14030                 val="$undef"
14031                 timetype='int';
14032     fi
14033     set d_time
14034     eval $setvar
14035 fi
14036
14037 : see what type uids are declared as in the kernel
14038 echo " "
14039 echo "Looking for the type for user ids returned by getuid()."
14040 set uid_t uidtype xxx stdio.h sys/types.h
14041 eval $typedef
14042 case "$uidtype" in
14043 xxx)
14044         xxx=`./findhdr sys/user.h`
14045         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14046         case $1 in
14047         unsigned) dflt="$1 $2" ;;
14048         *) dflt="$1" ;;
14049         esac
14050         ;;
14051 *) dflt="$uidtype";;
14052 esac
14053 case "$uidtype" in
14054 uid_t)  echo "uid_t found." ;;
14055 *)      rp="What is the type for user ids returned by getuid()?"
14056         . ./myread
14057         uidtype="$ans"
14058         ;;
14059 esac
14060
14061 echo " "
14062 case "$uidtype" in
14063 *_t) zzz="$uidtype"     ;;
14064 *)   zzz="uid"          ;;
14065 esac
14066 echo "Checking the size of $zzz..." >&4 
14067 cat > try.c <<EOCP
14068 #include <sys/types.h>
14069 #include <stdio.h>
14070 int main() {
14071     printf("%d\n", (int)sizeof($uidtype));
14072     exit(0);
14073 }
14074 EOCP
14075 set try
14076 if eval $compile_ok; then
14077         yyy=`./try`
14078         case "$yyy" in
14079         '')     uidsize=4
14080                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14081                 ;;
14082         *)      uidsize=$yyy
14083                 echo "Your $zzz is $uidsize bytes long."
14084                 ;;
14085         esac
14086 else
14087         uidsize=4
14088         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14089 fi
14090
14091 echo " "
14092 case "$uidtype" in
14093 *_t) zzz="$uidtype"     ;;
14094 *)   zzz="uid"          ;;
14095 esac
14096 echo "Checking the sign of $zzz..." >&4
14097 cat > try.c <<EOCP
14098 #include <sys/types.h>
14099 #include <stdio.h>
14100 int main() {
14101         $uidtype foo = -1;
14102         if (foo < 0)
14103                 printf("-1\n");
14104         else
14105                 printf("1\n");
14106 }
14107 EOCP
14108 set try
14109 if eval $compile; then
14110         yyy=`./try`
14111         case "$yyy" in
14112         '')     uidsign=1
14113                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14114                 ;;
14115         *)      uidsign=$yyy
14116                 case "$uidsign" in
14117                  1) echo "Your $zzz is unsigned." ;;
14118                 -1) echo "Your $zzz is signed."   ;;
14119                 esac
14120                 ;;
14121         esac
14122 else
14123         uidsign=1
14124         echo "(I can't compile the test program--guessing unsigned.)" >&4
14125 fi
14126
14127
14128
14129 echo " "
14130 $echo "Checking the format string to be used for uids..." >&4
14131
14132 case "$uidsign" in
14133 -1)     if $test X"$uidsize" = X"$ivsize"; then
14134                 uidformat="$ivdformat"
14135         else
14136                 if $test X"$uidsize" = X"$longsize"; then
14137                         uidformat='"ld"'
14138                 else
14139                         if $test X"$uidsize" = X"$intsize"; then
14140                                 uidformat='"d"'
14141                         else
14142                                 if $test X"$uidsize" = X"$shortsize"; then
14143                                         uidformat='"hd"'
14144                                 fi
14145                         fi
14146                 fi
14147         fi
14148         ;;
14149 *)      if $test X"$uidsize" = X"$uvsize"; then
14150                 uidformat="$uvuformat"
14151         else
14152                 if $test X"$uidsize" = X"$longsize"; then
14153                         uidformat='"lu"'
14154                 else
14155                         if $test X"$uidsize" = X"$intsize"; then
14156                                 uidformat='"u"'
14157                         else
14158                                 if $test X"$uidsize" = X"$shortsize"; then
14159                                         uidformat='"hu"'
14160                                 fi
14161                         fi
14162                 fi
14163         fi
14164         ;;
14165 esac
14166
14167 : see if dbm.h is available
14168 : see if dbmclose exists
14169 set dbmclose d_dbmclose
14170 eval $inlibc
14171
14172 case "$d_dbmclose" in
14173 $define)
14174         set dbm.h i_dbm
14175         eval $inhdr
14176         case "$i_dbm" in
14177         $define)
14178                 val="$undef"
14179                 set i_rpcsvcdbm
14180                 eval $setvar
14181                 ;;
14182         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14183                 eval $inhdr
14184                 ;;
14185         esac
14186         ;;
14187 *)      echo "We won't be including <dbm.h>"
14188         val="$undef"
14189         set i_dbm
14190         eval $setvar
14191         val="$undef"
14192         set i_rpcsvcdbm
14193         eval $setvar
14194         ;;
14195 esac
14196
14197 : see if this is a sys/file.h system
14198 val=''
14199 set sys/file.h val
14200 eval $inhdr
14201
14202 : do we need to include sys/file.h ?
14203 case "$val" in
14204 "$define")
14205         echo " "
14206         if $h_sysfile; then
14207                 val="$define"
14208                 echo "We'll be including <sys/file.h>." >&4
14209         else
14210                 val="$undef"
14211                 echo "We won't be including <sys/file.h>." >&4
14212         fi
14213         ;;
14214 *)
14215         h_sysfile=false
14216         ;;
14217 esac
14218 set i_sysfile
14219 eval $setvar
14220
14221 : see if fcntl.h is there
14222 val=''
14223 set fcntl.h val
14224 eval $inhdr
14225
14226 : see if we can include fcntl.h
14227 case "$val" in
14228 "$define")
14229         echo " "
14230         if $h_fcntl; then
14231                 val="$define"
14232                 echo "We'll be including <fcntl.h>." >&4
14233         else
14234                 val="$undef"
14235                 if $h_sysfile; then
14236         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14237                 else
14238                         echo "We won't be including <fcntl.h>." >&4
14239                 fi
14240         fi
14241         ;;
14242 *)
14243         h_fcntl=false
14244         val="$undef"
14245         ;;
14246 esac
14247 set i_fcntl
14248 eval $setvar
14249
14250 : see if this is a iconv.h system
14251 set iconv.h i_iconv
14252 eval $inhdr
14253
14254 : see if this is a ieeefp.h system
14255 set ieeefp.h i_ieeefp
14256 eval $inhdr
14257
14258 : see if locale.h is available
14259 set locale.h i_locale
14260 eval $inhdr
14261
14262 : see if mach cthreads are available
14263 if test "X$usethreads" = "X$define"; then
14264         set mach/cthreads.h i_machcthr
14265         eval $inhdr
14266 else
14267         i_machcthr="$undef"
14268 fi
14269
14270
14271
14272 : see if this is a math.h system
14273 set math.h i_math
14274 eval $inhdr
14275
14276 : see if this is a mntent.h system
14277 set mntent.h i_mntent
14278 eval $inhdr
14279
14280 : see if ndbm.h is available
14281 set ndbm.h t_ndbm
14282 eval $inhdr
14283 case "$t_ndbm" in
14284 $define)
14285         : see if dbm_open exists
14286         set dbm_open d_dbm_open
14287         eval $inlibc
14288         case "$d_dbm_open" in
14289         $undef)
14290                 t_ndbm="$undef"
14291                 echo "We won't be including <ndbm.h>"
14292                 ;;
14293         esac
14294         ;;
14295 esac
14296 val="$t_ndbm"
14297 set i_ndbm
14298 eval $setvar
14299
14300 : see if net/errno.h is available
14301 val=''
14302 set net/errno.h val
14303 eval $inhdr
14304
14305 : Unfortunately, it causes problems on some systems.  Arrgh.
14306 case "$val" in
14307 $define)
14308         cat > try.c <<'EOM'
14309 #include <stdio.h>
14310 #include <errno.h>
14311 #include <net/errno.h>
14312 int func()
14313 {
14314         return ENOTSOCK;
14315 }
14316 EOM
14317         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14318                 echo "We'll be including <net/errno.h>." >&4
14319         else
14320                 echo "We won't be including <net/errno.h>." >&4
14321                 val="$undef"
14322         fi
14323         $rm -f try.* try
14324         ;;
14325 esac
14326 set i_neterrno
14327 eval $setvar
14328
14329 : see if netinet/tcp.h is available
14330 set netinet/tcp.h i_netinettcp
14331 eval $inhdr
14332
14333 : see if this is a poll.h system
14334 set poll.h i_poll
14335 eval $inhdr
14336
14337 echo " "
14338 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14339 $cat <<'EOSH' > Cppsym.know
14340 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14341 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14342 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14343 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14344 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14345 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14346 bull c cadmus clipper CMU COFF COMPILER_VERSION
14347 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14348 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14349 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14350 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14351 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14352 H3050R H3050RX hbullx20 hcx host_mips
14353 hp200 hp300 hp700 HP700 hp800 hp9000
14354 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14355 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14356 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14357 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14358 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14359 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14360 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14361 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14362 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14363 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14364 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14365 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14366 MATH_HAS_NO_SIDE_EFFECTS
14367 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14368 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14369 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14370 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14371 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14372 NetBSD news1500 news1700 news1800 news1900 news3700
14373 news700 news800 news900 NeXT NLS ns16000 ns32000
14374 ns32016 ns32332 ns32k nsc32000
14375 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14376 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14377 pc532 pdp11 PGC PIC plexus PORTAR posix
14378 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14379 POSIX_C_SOURCE POSIX_SOURCE POWER
14380 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14381 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14382 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14383 sony sony_news sonyrisc sparc sparclite spectrum
14384 stardent stdc STDC_EXT stratos sun sun3 sun386
14385 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14386 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14387 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14388 sysV68 sysV88 Tek4132 Tek4300 titan
14389 tower tower32 tower32_200 tower32_600 tower32_700
14390 tower32_800 tower32_850 tss
14391 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14392 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14393 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14394 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14395 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14396 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14397 z8000
14398 EOSH
14399 # Maybe put other stuff here too.
14400 cat <<EOSH >>Cppsym.know
14401 $osname
14402 EOSH
14403 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14404 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14405 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14406 $rm -f Cppsym.a Cppsym.b
14407 cat <<EOSH > Cppsym
14408 $startsh
14409 if $test \$# -gt 0; then
14410     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14411     if $test -s Cppsym.got; then
14412         $rm -f Cppsym.got
14413         exit 0
14414     fi
14415     $rm -f Cppsym.got
14416     exit 1
14417 else
14418     $tr " " "$trnl" | ./Cppsym.try
14419     exit 0
14420 fi
14421 EOSH
14422 chmod +x Cppsym
14423 $eunicefix Cppsym
14424 cat <<EOSH > Cppsym.try
14425 $startsh
14426 cat <<'EOCP' > try.c
14427 #include <stdio.h>
14428 int main() {
14429 EOCP
14430 $awk \\
14431 EOSH
14432 cat <<'EOSH' >> Cppsym.try
14433 'length($1) > 0 {
14434     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
14435     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
14436     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
14437     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
14438 }'       >> try.c
14439 echo '}' >> try.c
14440 EOSH
14441 cat <<EOSH >> Cppsym.try
14442 ccflags="$ccflags"
14443 case "$osname-$gccversion" in
14444 irix-) ccflags="\$ccflags -woff 1178" ;;
14445 esac
14446 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14447 EOSH
14448 chmod +x Cppsym.try
14449 $eunicefix Cppsym.try
14450 ./Cppsym < Cppsym.know > Cppsym.true
14451 : now check the C compiler for additional symbols
14452 postprocess_cc_v=''
14453 case "$osname" in
14454 aix) postprocess_cc_v="|$tr , ' '" ;;
14455 esac
14456 $cat >ccsym <<EOS
14457 $startsh
14458 $cat >tmp.c <<EOF
14459 extern int foo;
14460 EOF
14461 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14462 do
14463         case "\$i" in
14464         -D*) echo "\$i" | $sed 's/^-D//';;
14465         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14466         esac
14467 done
14468 $rm -f try.c
14469 EOS
14470 postprocess_cc_v=''
14471 chmod +x ccsym
14472 $eunicefix ccsym
14473 ./ccsym > ccsym1.raw
14474 if $test -s ccsym1.raw; then
14475        $sort ccsym1.raw | $uniq >ccsym.raw
14476 else
14477        mv ccsym1.raw ccsym.raw
14478 fi
14479
14480 $awk '/\=/ { print $0; next }
14481         { print $0"=1" }' ccsym.raw >ccsym.list
14482 $awk '/\=/ { print $0; next }
14483         { print $0"=1" }' Cppsym.true >ccsym.true
14484 $comm -13 ccsym.true ccsym.list >ccsym.own
14485 $comm -12 ccsym.true ccsym.list >ccsym.com
14486 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14487 also=''
14488 if $test -z ccsym.raw; then
14489         echo "Your C compiler doesn't seem to define any symbols!" >&4
14490         echo " "
14491         echo "However, your C preprocessor defines the following symbols:"
14492         $cat Cppsym.true
14493         ccsymbols=''
14494         cppsymbols=`$cat Cppsym.true`
14495         cppsymbols=`echo $cppsymbols`
14496         cppccsymbols="$cppsymbols"
14497 else
14498         if $test -s ccsym.com; then
14499                 echo "Your C compiler and pre-processor define these symbols:"
14500                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14501                 also='also '
14502                 symbols='ones'
14503                 cppccsymbols=`$cat ccsym.com`
14504                 cppccsymbols=`echo $cppccsymbols`
14505                 $test "$silent" || sleep 1
14506         fi
14507         if $test -s ccsym.cpp; then
14508                 $test "$also" && echo " "
14509                 echo "Your C pre-processor ${also}defines the following symbols:"
14510                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14511                 also='further '
14512                 cppsymbols=`$cat ccsym.cpp`
14513                 cppsymbols=`echo $cppsymbols`
14514                 $test "$silent" || sleep 1
14515         fi
14516         if $test -s ccsym.own; then
14517                 $test "$also" && echo " "
14518                 echo "Your C compiler ${also}defines the following cpp symbols:"
14519                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14520                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14521                 ccsymbols=`$cat ccsym.own`
14522                 ccsymbols=`echo $ccsymbols`
14523                 $test "$silent" || sleep 1
14524         fi
14525 fi
14526 $rm -f ccsym*
14527
14528 : see if this is a termio system
14529 val="$undef"
14530 val2="$undef"
14531 val3="$undef"
14532 if $test `./findhdr termios.h`; then
14533         set tcsetattr i_termios
14534         eval $inlibc
14535         val3="$i_termios"
14536 fi
14537 echo " "
14538 case "$val3" in
14539 "$define") echo "You have POSIX termios.h... good!" >&4;;
14540 *) if ./Cppsym pyr; then
14541                 case "`/bin/universe`" in
14542                 ucb) if $test `./findhdr sgtty.h`; then
14543                                 val2="$define"
14544                                 echo "<sgtty.h> found." >&4
14545                         else
14546                                 echo "System is pyramid with BSD universe."
14547                                 echo "<sgtty.h> not found--you could have problems." >&4
14548                         fi;;
14549                 *) if $test `./findhdr termio.h`; then
14550                                 val="$define"
14551                                 echo "<termio.h> found." >&4
14552                         else
14553                                 echo "System is pyramid with USG universe."
14554                                 echo "<termio.h> not found--you could have problems." >&4
14555                         fi;;
14556                 esac
14557         elif ./usg; then
14558                 if $test `./findhdr termio.h`; then
14559                         echo "<termio.h> found." >&4
14560                         val="$define"
14561                 elif $test `./findhdr sgtty.h`; then
14562                         echo "<sgtty.h> found." >&4
14563                         val2="$define"
14564                 else
14565 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14566                 fi
14567         else
14568                 if $test `./findhdr sgtty.h`; then
14569                         echo "<sgtty.h> found." >&4
14570                         val2="$define"
14571                 elif $test `./findhdr termio.h`; then
14572                         echo "<termio.h> found." >&4
14573                         val="$define"
14574                 else
14575 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14576                 fi
14577         fi;;
14578 esac
14579 set i_termio; eval $setvar
14580 val=$val2; set i_sgtty; eval $setvar
14581 val=$val3; set i_termios; eval $setvar
14582
14583 : see if this is a shadow.h system
14584 set shadow.h i_shadow
14585 eval $inhdr
14586
14587 : see if this is a socks.h system
14588 set socks.h i_socks
14589 eval $inhdr
14590
14591 : see if stdarg is available
14592 echo " "
14593 if $test `./findhdr stdarg.h`; then
14594         echo "<stdarg.h> found." >&4
14595         valstd="$define"
14596 else
14597         echo "<stdarg.h> NOT found." >&4
14598         valstd="$undef"
14599 fi
14600
14601 : see if varags is available
14602 echo " "
14603 if $test `./findhdr varargs.h`; then
14604         echo "<varargs.h> found." >&4
14605 else
14606         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14607 fi
14608
14609 : set up the varargs testing programs
14610 $cat > varargs.c <<EOP
14611 #ifdef I_STDARG
14612 #include <stdarg.h>
14613 #endif
14614 #ifdef I_VARARGS
14615 #include <varargs.h>
14616 #endif
14617
14618 #ifdef I_STDARG
14619 int f(char *p, ...)
14620 #else
14621 int f(va_alist)
14622 va_dcl
14623 #endif
14624 {
14625         va_list ap;
14626 #ifndef I_STDARG
14627         char *p;
14628 #endif
14629 #ifdef I_STDARG
14630         va_start(ap,p);
14631 #else
14632         va_start(ap);
14633         p = va_arg(ap, char *);
14634 #endif
14635         va_end(ap);
14636 }
14637 EOP
14638 $cat > varargs <<EOP
14639 $startsh
14640 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14641         echo "true"
14642 else
14643         echo "false"
14644 fi
14645 $rm -f varargs$_o
14646 EOP
14647 chmod +x varargs
14648
14649 : now check which varargs header should be included
14650 echo " "
14651 i_varhdr=''
14652 case "$valstd" in
14653 "$define")
14654         if `./varargs I_STDARG`; then
14655                 val='stdarg.h'
14656         elif `./varargs I_VARARGS`; then
14657                 val='varargs.h'
14658         fi
14659         ;;
14660 *)
14661         if `./varargs I_VARARGS`; then
14662                 val='varargs.h'
14663         fi
14664         ;;
14665 esac
14666 case "$val" in
14667 '')
14668 echo "I could not find the definition for va_dcl... You have problems..." >&4
14669         val="$undef"; set i_stdarg; eval $setvar
14670         val="$undef"; set i_varargs; eval $setvar
14671         ;;
14672 *) 
14673         set i_varhdr
14674         eval $setvar
14675         case "$i_varhdr" in
14676         stdarg.h)
14677                 val="$define"; set i_stdarg; eval $setvar
14678                 val="$undef"; set i_varargs; eval $setvar
14679                 ;;
14680         varargs.h)
14681                 val="$undef"; set i_stdarg; eval $setvar
14682                 val="$define"; set i_varargs; eval $setvar
14683                 ;;
14684         esac
14685         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14686 esac
14687 $rm -f varargs*
14688
14689 : see if stddef is available
14690 set stddef.h i_stddef
14691 eval $inhdr
14692
14693 : see if this is a sunmath.h system
14694 set sunmath.h i_sunmath
14695 eval $inhdr
14696
14697 : see if sys/access.h is available
14698 set sys/access.h i_sysaccess
14699 eval $inhdr
14700
14701 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14702 set sys/filio.h i_sysfilio
14703 eval $inhdr
14704 echo " "
14705 if $test `./findhdr sys/ioctl.h`; then
14706         val="$define"
14707         echo '<sys/ioctl.h> found.' >&4
14708 else
14709         val="$undef"
14710         if $test $i_sysfilio = "$define"; then
14711             echo '<sys/ioctl.h> NOT found.' >&4
14712         else
14713                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14714                 $test $i_termio = "$define" && xxx="termio.h"
14715                 $test $i_termios = "$define" && xxx="termios.h"
14716 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14717         fi
14718 fi
14719 set i_sysioctl
14720 eval $setvar
14721
14722
14723 : see if this is a syslog.h system
14724 set syslog.h i_syslog
14725 eval $inhdr
14726
14727
14728 : see if this is a sys/mode.h system
14729 set sys/mode.h i_sysmode
14730 eval $inhdr
14731
14732 : see if sys/resource.h has to be included
14733 set sys/resource.h i_sysresrc
14734 eval $inhdr
14735
14736 : see if sys/security.h is available
14737 set sys/security.h i_syssecrt
14738 eval $inhdr
14739
14740 : see if this is a sys/statvfs.h system
14741 set sys/statvfs.h i_sysstatvfs
14742 eval $inhdr
14743
14744 : see if this is a sys/uio.h system
14745 set sys/uio.h i_sysuio
14746 eval $inhdr
14747
14748 : see if this is a sys/un.h system
14749 set sys/un.h i_sysun
14750 eval $inhdr
14751
14752
14753 : see if this is a sys/utsname.h system
14754 set sys/utsname.h i_sysutsname
14755 eval $inhdr
14756
14757 : see if this is a syswait system
14758 set sys/wait.h i_syswait
14759 eval $inhdr
14760
14761 : see if this is a ustat.h system
14762 set ustat.h i_ustat
14763 eval $inhdr
14764
14765 : see if this is an utime system
14766 set utime.h i_utime
14767 eval $inhdr
14768
14769 : see if this is a values.h system
14770 set values.h i_values
14771 eval $inhdr
14772
14773 : see if this is a vfork system
14774 case "$d_vfork" in
14775 "$define")
14776         set vfork.h i_vfork
14777         eval $inhdr
14778         ;;
14779 *)
14780         i_vfork="$undef"
14781         ;;
14782 esac
14783
14784 : see if gdbm.h is available
14785 set gdbm.h t_gdbm
14786 eval $inhdr
14787 case "$t_gdbm" in
14788 $define)
14789         : see if gdbm_open exists
14790         set gdbm_open d_gdbm_open
14791         eval $inlibc
14792         case "$d_gdbm_open" in
14793         $undef)
14794                 t_gdbm="$undef"
14795                 echo "We won't be including <gdbm.h>"
14796                 ;;
14797         esac
14798         ;;
14799 esac
14800 val="$t_gdbm"
14801 set i_gdbm
14802 eval $setvar
14803
14804 echo " "
14805 echo "Looking for extensions..." >&4
14806 : If we are using the old config.sh, known_extensions may contain
14807 : old or inaccurate or duplicate values.
14808 known_extensions=''
14809 nonxs_extensions=''
14810 : We do not use find because it might not be available.
14811 : We do not just use MANIFEST because the user may have dropped
14812 : some additional extensions into the source tree and expect them
14813 : to be built.
14814
14815 : Function to recursively find available extensions, ignoring DynaLoader
14816 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14817 find_extensions='
14818     for xxx in *; do
14819        case "$xxx" in
14820            DynaLoader|dynaload) ;;
14821            *)
14822            if $test -f $xxx/$xxx.xs; then
14823                known_extensions="$known_extensions $1$xxx";
14824            elif $test -f $xxx/Makefile.PL; then
14825                nonxs_extensions="$nonxs_extensions $1$xxx";
14826            else
14827                if $test -d $xxx -a $# -lt 10; then
14828                    set $1$xxx/ $*;
14829                    cd $xxx;
14830                    eval $find_extensions;
14831                    cd ..;
14832                    shift;
14833                fi;
14834            fi
14835            ;;
14836        esac;
14837     done'
14838 tdir=`pwd`
14839 cd $rsrc/ext
14840 set X
14841 shift
14842 eval $find_extensions
14843 set X $nonxs_extensions
14844 shift
14845 nonxs_extensions="$*"
14846 set X $known_extensions
14847 shift
14848 known_extensions="$*"
14849 cd $tdir
14850
14851 : Now see which are supported on this system.
14852 avail_ext=''
14853 for xxx in $known_extensions ; do
14854         case "$xxx" in
14855         DB_File|db_file)
14856                 case "$i_db" in
14857                 $define) avail_ext="$avail_ext $xxx" ;;
14858                 esac
14859                 ;;
14860         GDBM_File|gdbm_fil)
14861                 case "$i_gdbm" in 
14862                 $define) avail_ext="$avail_ext $xxx" ;;
14863                 esac
14864                 ;;
14865         NDBM_File|ndbm_fil)
14866                 case "$i_ndbm" in
14867                 $define)
14868                     case "$osname-$use64bitint" in
14869                     hpux-define)
14870                         case "$libs" in
14871                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14872                         esac
14873                         ;;
14874                     *) avail_ext="$avail_ext $xxx" ;;
14875                     esac
14876                     ;;
14877                 esac
14878                 ;;
14879         ODBM_File|odbm_fil) 
14880                 case "${i_dbm}${i_rpcsvcdbm}" in
14881                 *"${define}"*)
14882                     case "$osname-$use64bitint" in
14883                     hpux-define)
14884                         case "$libs" in
14885                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14886                         esac
14887                         ;;
14888                     *) avail_ext="$avail_ext $xxx" ;;
14889                     esac
14890                     ;;
14891                 esac
14892                 ;;
14893         POSIX|posix)
14894                 case "$useposix" in
14895                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14896                 esac
14897                 ;;
14898         Opcode|opcode)
14899                 case "$useopcode" in
14900                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14901                 esac
14902                 ;;
14903         Socket|socket)
14904                 case "$d_socket" in 
14905                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14906                 esac
14907                 ;;
14908         Thread|thread)
14909                 case "$usethreads" in 
14910                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14911                 esac
14912                 ;;
14913         IPC/SysV|ipc/sysv)
14914                 : XXX Do we need a useipcsysv variable here
14915                 case "${d_msg}${d_sem}${d_shm}" in 
14916                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14917                 esac
14918                 ;;
14919         *)      avail_ext="$avail_ext $xxx"
14920                 ;;
14921         esac
14922 done
14923
14924 set X $avail_ext
14925 shift
14926 avail_ext="$*"
14927
14928 : Now see which nonxs extensions are supported on this system.
14929 : For now assume all are.
14930 nonxs_ext=''
14931 for xxx in $nonxs_extensions ; do
14932         case "$xxx" in
14933         *)      nonxs_ext="$nonxs_ext $xxx"
14934                 ;;
14935         esac
14936 done
14937
14938 set X $nonxs_ext
14939 shift
14940 nonxs_ext="$*"
14941
14942 case $usedl in
14943 $define)
14944         $cat <<EOM
14945 A number of extensions are supplied with $package.  You may choose to
14946 compile these extensions for dynamic loading (the default), compile
14947 them into the $package executable (static loading), or not include
14948 them at all.  Answer "none" to include no extensions.
14949 Note that DynaLoader is always built and need not be mentioned here.
14950
14951 EOM
14952         case "$dynamic_ext" in
14953         '') dflt="$avail_ext" ;;
14954         *)      dflt="$dynamic_ext"
14955                 # Perhaps we are reusing an old out-of-date config.sh.
14956                 case "$hint" in
14957                 previous)
14958                         if test X"$dynamic_ext" != X"$avail_ext"; then
14959                                 $cat <<EOM
14960 NOTICE:  Your previous config.sh list may be incorrect. 
14961 The extensions now available to you are 
14962         ${avail_ext}
14963 but the default list from your previous config.sh is
14964         ${dynamic_ext} 
14965
14966 EOM
14967                         fi
14968                         ;;
14969                 esac
14970                 ;;
14971         esac
14972         case "$dflt" in
14973         '')     dflt=none;;
14974         esac
14975         rp="What extensions do you wish to load dynamically?"
14976         . ./myread
14977         case "$ans" in
14978         none) dynamic_ext=' ' ;;
14979         *) dynamic_ext="$ans" ;;
14980         esac
14981
14982         case "$static_ext" in
14983         '')
14984                 : Exclude those already listed in dynamic linking
14985                 dflt=''
14986                 for xxx in $avail_ext; do
14987                         case " $dynamic_ext " in
14988                         *" $xxx "*) ;;
14989                         *) dflt="$dflt $xxx" ;;
14990                         esac
14991                 done
14992                 set X $dflt
14993                 shift
14994                 dflt="$*"
14995                 ;;
14996         *)  dflt="$static_ext" 
14997                 ;;
14998         esac
14999
15000         case "$dflt" in
15001         '')     dflt=none;;
15002         esac
15003         rp="What extensions do you wish to load statically?"
15004         . ./myread
15005         case "$ans" in
15006         none) static_ext=' ' ;;
15007         *) static_ext="$ans" ;;
15008         esac
15009         ;;
15010 *)
15011         $cat <<EOM
15012 A number of extensions are supplied with $package.  Answer "none" 
15013 to include no extensions. 
15014 Note that DynaLoader is always built and need not be mentioned here.
15015
15016 EOM
15017         case "$static_ext" in
15018         '') dflt="$avail_ext" ;;
15019         *)      dflt="$static_ext"
15020                 # Perhaps we are reusing an old out-of-date config.sh.
15021                 case "$hint" in
15022                 previous)
15023                         if test X"$static_ext" != X"$avail_ext"; then
15024                                 $cat <<EOM
15025 NOTICE:  Your previous config.sh list may be incorrect. 
15026 The extensions now available to you are 
15027         ${avail_ext}
15028 but the default list from your previous config.sh is
15029         ${static_ext} 
15030
15031 EOM
15032                         fi
15033                         ;;
15034                 esac
15035                 ;;
15036         esac
15037         : Exclude those that are not xs extensions
15038         case "$dflt" in
15039         '')     dflt=none;;
15040         esac
15041         rp="What extensions do you wish to include?"
15042         . ./myread
15043         case "$ans" in
15044         none) static_ext=' ' ;;
15045         *) static_ext="$ans" ;;
15046         esac
15047         ;;
15048 esac
15049
15050 set X $dynamic_ext $static_ext $nonxs_ext
15051 shift
15052 extensions="$*"
15053
15054 : Remove build directory name from cppstdin so it can be used from
15055 : either the present location or the final installed location.
15056 echo " "
15057 : Get out of the UU directory to get correct path name.
15058 cd ..
15059 case "$cppstdin" in
15060 `pwd`/cppstdin)
15061         echo "Stripping down cppstdin path name"
15062         cppstdin=cppstdin
15063         ;;
15064 esac
15065 cd UU
15066
15067 : end of configuration questions
15068 echo " "
15069 echo "End of configuration questions."
15070 echo " "
15071
15072 : back to where it started
15073 if test -d ../UU; then
15074         cd ..
15075 fi
15076
15077 : configuration may be patched via a 'config.over' file
15078 if $test -f config.over; then
15079         echo " "
15080         dflt=y
15081         rp='I see a config.over file.  Do you wish to load it?'
15082         . UU/myread
15083         case "$ans" in
15084         n*) echo "OK, I'll ignore it.";;
15085         *)      . ./config.over
15086                 echo "Configuration override changes have been loaded."
15087                 ;;
15088         esac
15089 fi
15090
15091 : in case they want portability, strip down executable paths
15092 case "$d_portable" in
15093 "$define")
15094         echo " "
15095         echo "Stripping down executable paths..." >&4
15096         for file in $loclist $trylist; do
15097                 eval temp=\$$file
15098                 eval $file=`basename $temp`
15099         done
15100         ;;
15101 esac
15102
15103 : create config.sh file
15104 echo " "
15105 echo "Creating config.sh..." >&4
15106 $spitshell <<EOT >config.sh
15107 $startsh
15108 #
15109 # This file was produced by running the Configure script. It holds all the
15110 # definitions figured out by Configure. Should you modify one of these values,
15111 # do not forget to propagate your changes by running "Configure -der". You may
15112 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15113 #
15114
15115 # Package name      : $package
15116 # Source directory  : $src
15117 # Configuration time: $cf_time
15118 # Configured by     : $cf_by
15119 # Target system     : $myuname
15120
15121 Author='$Author'
15122 Date='$Date'
15123 Header='$Header'
15124 Id='$Id'
15125 Locker='$Locker'
15126 Log='$Log'
15127 Mcc='$Mcc'
15128 RCSfile='$RCSfile'
15129 Revision='$Revision'
15130 Source='$Source'
15131 State='$State'
15132 _a='$_a'
15133 _exe='$_exe'
15134 _o='$_o'
15135 afs='$afs'
15136 alignbytes='$alignbytes'
15137 ansi2knr='$ansi2knr'
15138 aphostname='$aphostname'
15139 api_revision='$api_revision'
15140 api_subversion='$api_subversion'
15141 api_version='$api_version'
15142 api_versionstring='$api_versionstring'
15143 ar='$ar'
15144 archlib='$archlib'
15145 archlibexp='$archlibexp'
15146 archname64='$archname64'
15147 archname='$archname'
15148 archobjs='$archobjs'
15149 awk='$awk'
15150 baserev='$baserev'
15151 bash='$bash'
15152 bin='$bin'
15153 bincompat5005='$bincompat5005'
15154 binexp='$binexp'
15155 bison='$bison'
15156 byacc='$byacc'
15157 byteorder='$byteorder'
15158 c='$c'
15159 castflags='$castflags'
15160 cat='$cat'
15161 cc='$cc'
15162 cccdlflags='$cccdlflags'
15163 ccdlflags='$ccdlflags'
15164 ccflags='$ccflags'
15165 ccsymbols='$ccsymbols'
15166 cf_by='$cf_by'
15167 cf_email='$cf_email'
15168 cf_time='$cf_time'
15169 charsize='$charsize'
15170 chgrp='$chgrp'
15171 chmod='$chmod'
15172 chown='$chown'
15173 clocktype='$clocktype'
15174 comm='$comm'
15175 compress='$compress'
15176 contains='$contains'
15177 cp='$cp'
15178 cpio='$cpio'
15179 cpp='$cpp'
15180 cpp_stuff='$cpp_stuff'
15181 cppccsymbols='$cppccsymbols'
15182 cppflags='$cppflags'
15183 cpplast='$cpplast'
15184 cppminus='$cppminus'
15185 cpprun='$cpprun'
15186 cppstdin='$cppstdin'
15187 cppsymbols='$cppsymbols'
15188 crosscompile='$crosscompile'
15189 cryptlib='$cryptlib'
15190 csh='$csh'
15191 d_Gconvert='$d_Gconvert'
15192 d_PRIEldbl='$d_PRIEldbl'
15193 d_PRIFldbl='$d_PRIFldbl'
15194 d_PRIGldbl='$d_PRIGldbl'
15195 d_PRIX64='$d_PRIX64'
15196 d_PRId64='$d_PRId64'
15197 d_PRIeldbl='$d_PRIeldbl'
15198 d_PRIfldbl='$d_PRIfldbl'
15199 d_PRIgldbl='$d_PRIgldbl'
15200 d_PRIi64='$d_PRIi64'
15201 d_PRIo64='$d_PRIo64'
15202 d_PRIu64='$d_PRIu64'
15203 d_PRIx64='$d_PRIx64'
15204 d_access='$d_access'
15205 d_accessx='$d_accessx'
15206 d_alarm='$d_alarm'
15207 d_archlib='$d_archlib'
15208 d_atolf='$d_atolf'
15209 d_atoll='$d_atoll'
15210 d_attribut='$d_attribut'
15211 d_bcmp='$d_bcmp'
15212 d_bcopy='$d_bcopy'
15213 d_bincompat5005='$d_bincompat5005'
15214 d_bsd='$d_bsd'
15215 d_bsdgetpgrp='$d_bsdgetpgrp'
15216 d_bsdsetpgrp='$d_bsdsetpgrp'
15217 d_bzero='$d_bzero'
15218 d_casti32='$d_casti32'
15219 d_castneg='$d_castneg'
15220 d_charvspr='$d_charvspr'
15221 d_chown='$d_chown'
15222 d_chroot='$d_chroot'
15223 d_chsize='$d_chsize'
15224 d_closedir='$d_closedir'
15225 d_const='$d_const'
15226 d_crypt='$d_crypt'
15227 d_csh='$d_csh'
15228 d_cuserid='$d_cuserid'
15229 d_dbl_dig='$d_dbl_dig'
15230 d_difftime='$d_difftime'
15231 d_dirnamlen='$d_dirnamlen'
15232 d_dlerror='$d_dlerror'
15233 d_dlopen='$d_dlopen'
15234 d_dlsymun='$d_dlsymun'
15235 d_dosuid='$d_dosuid'
15236 d_drand48proto='$d_drand48proto'
15237 d_dup2='$d_dup2'
15238 d_eaccess='$d_eaccess'
15239 d_endgrent='$d_endgrent'
15240 d_endhent='$d_endhent'
15241 d_endnent='$d_endnent'
15242 d_endpent='$d_endpent'
15243 d_endpwent='$d_endpwent'
15244 d_endsent='$d_endsent'
15245 d_eofnblk='$d_eofnblk'
15246 d_eunice='$d_eunice'
15247 d_fchmod='$d_fchmod'
15248 d_fchown='$d_fchown'
15249 d_fcntl='$d_fcntl'
15250 d_fd_macros='$d_fd_macros'
15251 d_fd_set='$d_fd_set'
15252 d_fds_bits='$d_fds_bits'
15253 d_fgetpos='$d_fgetpos'
15254 d_flexfnam='$d_flexfnam'
15255 d_flock='$d_flock'
15256 d_fork='$d_fork'
15257 d_fpathconf='$d_fpathconf'
15258 d_fpos64_t='$d_fpos64_t'
15259 d_frexpl='$d_frexpl'
15260 d_fs_data_s='$d_fs_data_s'
15261 d_fseeko='$d_fseeko'
15262 d_fsetpos='$d_fsetpos'
15263 d_fstatfs='$d_fstatfs'
15264 d_fstatvfs='$d_fstatvfs'
15265 d_ftello='$d_ftello'
15266 d_ftime='$d_ftime'
15267 d_getcwd='$d_getcwd'
15268 d_getfsstat='$d_getfsstat'
15269 d_getgrent='$d_getgrent'
15270 d_getgrps='$d_getgrps'
15271 d_gethbyaddr='$d_gethbyaddr'
15272 d_gethbyname='$d_gethbyname'
15273 d_gethent='$d_gethent'
15274 d_gethname='$d_gethname'
15275 d_gethostprotos='$d_gethostprotos'
15276 d_getlogin='$d_getlogin'
15277 d_getmnt='$d_getmnt'
15278 d_getmntent='$d_getmntent'
15279 d_getnbyaddr='$d_getnbyaddr'
15280 d_getnbyname='$d_getnbyname'
15281 d_getnent='$d_getnent'
15282 d_getnetprotos='$d_getnetprotos'
15283 d_getpbyname='$d_getpbyname'
15284 d_getpbynumber='$d_getpbynumber'
15285 d_getpent='$d_getpent'
15286 d_getpgid='$d_getpgid'
15287 d_getpgrp2='$d_getpgrp2'
15288 d_getpgrp='$d_getpgrp'
15289 d_getppid='$d_getppid'
15290 d_getprior='$d_getprior'
15291 d_getprotoprotos='$d_getprotoprotos'
15292 d_getpwent='$d_getpwent'
15293 d_getsbyname='$d_getsbyname'
15294 d_getsbyport='$d_getsbyport'
15295 d_getsent='$d_getsent'
15296 d_getservprotos='$d_getservprotos'
15297 d_getspnam='$d_getspnam'
15298 d_gettimeod='$d_gettimeod'
15299 d_gnulibc='$d_gnulibc'
15300 d_grpasswd='$d_grpasswd'
15301 d_hasmntopt='$d_hasmntopt'
15302 d_htonl='$d_htonl'
15303 d_iconv='$d_iconv'
15304 d_index='$d_index'
15305 d_inetaton='$d_inetaton'
15306 d_int64_t='$d_int64_t'
15307 d_isascii='$d_isascii'
15308 d_isnan='$d_isnan'
15309 d_isnanl='$d_isnanl'
15310 d_killpg='$d_killpg'
15311 d_lchown='$d_lchown'
15312 d_ldbl_dig='$d_ldbl_dig'
15313 d_link='$d_link'
15314 d_locconv='$d_locconv'
15315 d_lockf='$d_lockf'
15316 d_longdbl='$d_longdbl'
15317 d_longlong='$d_longlong'
15318 d_lseekproto='$d_lseekproto'
15319 d_lstat='$d_lstat'
15320 d_madvise='$d_madvise'
15321 d_mblen='$d_mblen'
15322 d_mbstowcs='$d_mbstowcs'
15323 d_mbtowc='$d_mbtowc'
15324 d_memchr='$d_memchr'
15325 d_memcmp='$d_memcmp'
15326 d_memcpy='$d_memcpy'
15327 d_memmove='$d_memmove'
15328 d_memset='$d_memset'
15329 d_mkdir='$d_mkdir'
15330 d_mkdtemp='$d_mkdtemp'
15331 d_mkfifo='$d_mkfifo'
15332 d_mkstemp='$d_mkstemp'
15333 d_mkstemps='$d_mkstemps'
15334 d_mktime='$d_mktime'
15335 d_mmap='$d_mmap'
15336 d_modfl='$d_modfl'
15337 d_mprotect='$d_mprotect'
15338 d_msg='$d_msg'
15339 d_msg_ctrunc='$d_msg_ctrunc'
15340 d_msg_dontroute='$d_msg_dontroute'
15341 d_msg_oob='$d_msg_oob'
15342 d_msg_peek='$d_msg_peek'
15343 d_msg_proxy='$d_msg_proxy'
15344 d_msgctl='$d_msgctl'
15345 d_msgget='$d_msgget'
15346 d_msgrcv='$d_msgrcv'
15347 d_msgsnd='$d_msgsnd'
15348 d_msync='$d_msync'
15349 d_munmap='$d_munmap'
15350 d_mymalloc='$d_mymalloc'
15351 d_nice='$d_nice'
15352 d_nv_preserved_bits='$d_nv_preserved_bits'
15353 d_nv_preserves_uv='$d_nv_preserves_uv'
15354 d_off64_t='$d_off64_t'
15355 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15356 d_oldpthreads='$d_oldpthreads'
15357 d_oldsock='$d_oldsock'
15358 d_open3='$d_open3'
15359 d_pathconf='$d_pathconf'
15360 d_pause='$d_pause'
15361 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15362 d_phostname='$d_phostname'
15363 d_pipe='$d_pipe'
15364 d_poll='$d_poll'
15365 d_portable='$d_portable'
15366 d_pthread_yield='$d_pthread_yield'
15367 d_pwage='$d_pwage'
15368 d_pwchange='$d_pwchange'
15369 d_pwclass='$d_pwclass'
15370 d_pwcomment='$d_pwcomment'
15371 d_pwexpire='$d_pwexpire'
15372 d_pwgecos='$d_pwgecos'
15373 d_pwpasswd='$d_pwpasswd'
15374 d_pwquota='$d_pwquota'
15375 d_qgcvt='$d_qgcvt'
15376 d_quad='$d_quad'
15377 d_readdir='$d_readdir'
15378 d_readlink='$d_readlink'
15379 d_rename='$d_rename'
15380 d_rewinddir='$d_rewinddir'
15381 d_rmdir='$d_rmdir'
15382 d_safebcpy='$d_safebcpy'
15383 d_safemcpy='$d_safemcpy'
15384 d_sanemcmp='$d_sanemcmp'
15385 d_sched_yield='$d_sched_yield'
15386 d_scm_rights='$d_scm_rights'
15387 d_seekdir='$d_seekdir'
15388 d_select='$d_select'
15389 d_sem='$d_sem'
15390 d_semctl='$d_semctl'
15391 d_semctl_semid_ds='$d_semctl_semid_ds'
15392 d_semctl_semun='$d_semctl_semun'
15393 d_semget='$d_semget'
15394 d_semop='$d_semop'
15395 d_setegid='$d_setegid'
15396 d_seteuid='$d_seteuid'
15397 d_setgrent='$d_setgrent'
15398 d_setgrps='$d_setgrps'
15399 d_sethent='$d_sethent'
15400 d_setlinebuf='$d_setlinebuf'
15401 d_setlocale='$d_setlocale'
15402 d_setnent='$d_setnent'
15403 d_setpent='$d_setpent'
15404 d_setpgid='$d_setpgid'
15405 d_setpgrp2='$d_setpgrp2'
15406 d_setpgrp='$d_setpgrp'
15407 d_setprior='$d_setprior'
15408 d_setpwent='$d_setpwent'
15409 d_setregid='$d_setregid'
15410 d_setresgid='$d_setresgid'
15411 d_setresuid='$d_setresuid'
15412 d_setreuid='$d_setreuid'
15413 d_setrgid='$d_setrgid'
15414 d_setruid='$d_setruid'
15415 d_setsent='$d_setsent'
15416 d_setsid='$d_setsid'
15417 d_setvbuf='$d_setvbuf'
15418 d_sfio='$d_sfio'
15419 d_shm='$d_shm'
15420 d_shmat='$d_shmat'
15421 d_shmatprototype='$d_shmatprototype'
15422 d_shmctl='$d_shmctl'
15423 d_shmdt='$d_shmdt'
15424 d_shmget='$d_shmget'
15425 d_sigaction='$d_sigaction'
15426 d_sigsetjmp='$d_sigsetjmp'
15427 d_socket='$d_socket'
15428 d_socklen_t='$d_socklen_t'
15429 d_sockpair='$d_sockpair'
15430 d_sqrtl='$d_sqrtl'
15431 d_statblks='$d_statblks'
15432 d_statfs_f_flags='$d_statfs_f_flags'
15433 d_statfs_s='$d_statfs_s'
15434 d_statvfs='$d_statvfs'
15435 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15436 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15437 d_stdio_stream_array='$d_stdio_stream_array'
15438 d_stdiobase='$d_stdiobase'
15439 d_stdstdio='$d_stdstdio'
15440 d_strchr='$d_strchr'
15441 d_strcoll='$d_strcoll'
15442 d_strctcpy='$d_strctcpy'
15443 d_strerrm='$d_strerrm'
15444 d_strerror='$d_strerror'
15445 d_strtod='$d_strtod'
15446 d_strtol='$d_strtol'
15447 d_strtold='$d_strtold'
15448 d_strtoll='$d_strtoll'
15449 d_strtoul='$d_strtoul'
15450 d_strtoull='$d_strtoull'
15451 d_strtouq='$d_strtouq'
15452 d_strxfrm='$d_strxfrm'
15453 d_suidsafe='$d_suidsafe'
15454 d_symlink='$d_symlink'
15455 d_syscall='$d_syscall'
15456 d_sysconf='$d_sysconf'
15457 d_sysernlst='$d_sysernlst'
15458 d_syserrlst='$d_syserrlst'
15459 d_system='$d_system'
15460 d_tcgetpgrp='$d_tcgetpgrp'
15461 d_tcsetpgrp='$d_tcsetpgrp'
15462 d_telldir='$d_telldir'
15463 d_telldirproto='$d_telldirproto'
15464 d_time='$d_time'
15465 d_times='$d_times'
15466 d_truncate='$d_truncate'
15467 d_tzname='$d_tzname'
15468 d_umask='$d_umask'
15469 d_uname='$d_uname'
15470 d_union_semun='$d_union_semun'
15471 d_ustat='$d_ustat'
15472 d_vendorarch='$d_vendorarch'
15473 d_vendorbin='$d_vendorbin'
15474 d_vendorlib='$d_vendorlib'
15475 d_vfork='$d_vfork'
15476 d_void_closedir='$d_void_closedir'
15477 d_voidsig='$d_voidsig'
15478 d_voidtty='$d_voidtty'
15479 d_volatile='$d_volatile'
15480 d_vprintf='$d_vprintf'
15481 d_wait4='$d_wait4'
15482 d_waitpid='$d_waitpid'
15483 d_wcstombs='$d_wcstombs'
15484 d_wctomb='$d_wctomb'
15485 d_xenix='$d_xenix'
15486 date='$date'
15487 db_hashtype='$db_hashtype'
15488 db_prefixtype='$db_prefixtype'
15489 defvoidused='$defvoidused'
15490 direntrytype='$direntrytype'
15491 dlext='$dlext'
15492 dlsrc='$dlsrc'
15493 doublesize='$doublesize'
15494 drand01='$drand01'
15495 dynamic_ext='$dynamic_ext'
15496 eagain='$eagain'
15497 ebcdic='$ebcdic'
15498 echo='$echo'
15499 egrep='$egrep'
15500 emacs='$emacs'
15501 eunicefix='$eunicefix'
15502 exe_ext='$exe_ext'
15503 expr='$expr'
15504 extensions='$extensions'
15505 fflushNULL='$fflushNULL'
15506 fflushall='$fflushall'
15507 find='$find'
15508 firstmakefile='$firstmakefile'
15509 flex='$flex'
15510 fpossize='$fpossize'
15511 fpostype='$fpostype'
15512 freetype='$freetype'
15513 full_ar='$full_ar'
15514 full_csh='$full_csh'
15515 full_sed='$full_sed'
15516 gccversion='$gccversion'
15517 gidformat='$gidformat'
15518 gidsign='$gidsign'
15519 gidsize='$gidsize'
15520 gidtype='$gidtype'
15521 glibpth='$glibpth'
15522 grep='$grep'
15523 groupcat='$groupcat'
15524 groupstype='$groupstype'
15525 gzip='$gzip'
15526 h_fcntl='$h_fcntl'
15527 h_sysfile='$h_sysfile'
15528 hint='$hint'
15529 hostcat='$hostcat'
15530 huge='$huge'
15531 i16size='$i16size'
15532 i16type='$i16type'
15533 i32size='$i32size'
15534 i32type='$i32type'
15535 i64size='$i64size'
15536 i64type='$i64type'
15537 i8size='$i8size'
15538 i8type='$i8type'
15539 i_arpainet='$i_arpainet'
15540 i_bsdioctl='$i_bsdioctl'
15541 i_db='$i_db'
15542 i_dbm='$i_dbm'
15543 i_dirent='$i_dirent'
15544 i_dld='$i_dld'
15545 i_dlfcn='$i_dlfcn'
15546 i_fcntl='$i_fcntl'
15547 i_float='$i_float'
15548 i_gdbm='$i_gdbm'
15549 i_grp='$i_grp'
15550 i_iconv='$i_iconv'
15551 i_ieeefp='$i_ieeefp'
15552 i_inttypes='$i_inttypes'
15553 i_limits='$i_limits'
15554 i_locale='$i_locale'
15555 i_machcthr='$i_machcthr'
15556 i_malloc='$i_malloc'
15557 i_math='$i_math'
15558 i_memory='$i_memory'
15559 i_mntent='$i_mntent'
15560 i_ndbm='$i_ndbm'
15561 i_netdb='$i_netdb'
15562 i_neterrno='$i_neterrno'
15563 i_netinettcp='$i_netinettcp'
15564 i_niin='$i_niin'
15565 i_poll='$i_poll'
15566 i_pthread='$i_pthread'
15567 i_pwd='$i_pwd'
15568 i_rpcsvcdbm='$i_rpcsvcdbm'
15569 i_sfio='$i_sfio'
15570 i_sgtty='$i_sgtty'
15571 i_shadow='$i_shadow'
15572 i_socks='$i_socks'
15573 i_stdarg='$i_stdarg'
15574 i_stddef='$i_stddef'
15575 i_stdlib='$i_stdlib'
15576 i_string='$i_string'
15577 i_sunmath='$i_sunmath'
15578 i_sysaccess='$i_sysaccess'
15579 i_sysdir='$i_sysdir'
15580 i_sysfile='$i_sysfile'
15581 i_sysfilio='$i_sysfilio'
15582 i_sysin='$i_sysin'
15583 i_sysioctl='$i_sysioctl'
15584 i_syslog='$i_syslog'
15585 i_sysmman='$i_sysmman'
15586 i_sysmode='$i_sysmode'
15587 i_sysmount='$i_sysmount'
15588 i_sysndir='$i_sysndir'
15589 i_sysparam='$i_sysparam'
15590 i_sysresrc='$i_sysresrc'
15591 i_syssecrt='$i_syssecrt'
15592 i_sysselct='$i_sysselct'
15593 i_syssockio='$i_syssockio'
15594 i_sysstat='$i_sysstat'
15595 i_sysstatfs='$i_sysstatfs'
15596 i_sysstatvfs='$i_sysstatvfs'
15597 i_systime='$i_systime'
15598 i_systimek='$i_systimek'
15599 i_systimes='$i_systimes'
15600 i_systypes='$i_systypes'
15601 i_sysuio='$i_sysuio'
15602 i_sysun='$i_sysun'
15603 i_sysutsname='$i_sysutsname'
15604 i_sysvfs='$i_sysvfs'
15605 i_syswait='$i_syswait'
15606 i_termio='$i_termio'
15607 i_termios='$i_termios'
15608 i_time='$i_time'
15609 i_unistd='$i_unistd'
15610 i_ustat='$i_ustat'
15611 i_utime='$i_utime'
15612 i_values='$i_values'
15613 i_varargs='$i_varargs'
15614 i_varhdr='$i_varhdr'
15615 i_vfork='$i_vfork'
15616 ignore_versioned_solibs='$ignore_versioned_solibs'
15617 inc_version_list='$inc_version_list'
15618 inc_version_list_init='$inc_version_list_init'
15619 incpath='$incpath'
15620 inews='$inews'
15621 installarchlib='$installarchlib'
15622 installbin='$installbin'
15623 installman1dir='$installman1dir'
15624 installman3dir='$installman3dir'
15625 installprefix='$installprefix'
15626 installprefixexp='$installprefixexp'
15627 installprivlib='$installprivlib'
15628 installscript='$installscript'
15629 installsitearch='$installsitearch'
15630 installsitebin='$installsitebin'
15631 installsitelib='$installsitelib'
15632 installstyle='$installstyle'
15633 installusrbinperl='$installusrbinperl'
15634 installvendorarch='$installvendorarch'
15635 installvendorbin='$installvendorbin'
15636 installvendorlib='$installvendorlib'
15637 intsize='$intsize'
15638 ivdformat='$ivdformat'
15639 ivsize='$ivsize'
15640 ivtype='$ivtype'
15641 known_extensions='$known_extensions'
15642 ksh='$ksh'
15643 large='$large'
15644 ld='$ld'
15645 lddlflags='$lddlflags'
15646 ldflags='$ldflags'
15647 ldlibpthname='$ldlibpthname'
15648 less='$less'
15649 lib_ext='$lib_ext'
15650 libc='$libc'
15651 libperl='$libperl'
15652 libpth='$libpth'
15653 libs='$libs'
15654 libsdirs='$libsdirs'
15655 libsfiles='$libsfiles'
15656 libsfound='$libsfound'
15657 libspath='$libspath'
15658 libswanted='$libswanted'
15659 line='$line'
15660 lint='$lint'
15661 lkflags='$lkflags'
15662 ln='$ln'
15663 lns='$lns'
15664 locincpth='$locincpth'
15665 loclibpth='$loclibpth'
15666 longdblsize='$longdblsize'
15667 longlongsize='$longlongsize'
15668 longsize='$longsize'
15669 lp='$lp'
15670 lpr='$lpr'
15671 ls='$ls'
15672 lseeksize='$lseeksize'
15673 lseektype='$lseektype'
15674 mail='$mail'
15675 mailx='$mailx'
15676 make='$make'
15677 make_set_make='$make_set_make'
15678 mallocobj='$mallocobj'
15679 mallocsrc='$mallocsrc'
15680 malloctype='$malloctype'
15681 man1dir='$man1dir'
15682 man1direxp='$man1direxp'
15683 man1ext='$man1ext'
15684 man3dir='$man3dir'
15685 man3direxp='$man3direxp'
15686 man3ext='$man3ext'
15687 medium='$medium'
15688 mips_type='$mips_type'
15689 mkdir='$mkdir'
15690 mmaptype='$mmaptype'
15691 models='$models'
15692 modetype='$modetype'
15693 more='$more'
15694 multiarch='$multiarch'
15695 mv='$mv'
15696 myarchname='$myarchname'
15697 mydomain='$mydomain'
15698 myhostname='$myhostname'
15699 myuname='$myuname'
15700 n='$n'
15701 netdb_hlen_type='$netdb_hlen_type'
15702 netdb_host_type='$netdb_host_type'
15703 netdb_name_type='$netdb_name_type'
15704 netdb_net_type='$netdb_net_type'
15705 nm='$nm'
15706 nm_opt='$nm_opt'
15707 nm_so_opt='$nm_so_opt'
15708 nonxs_ext='$nonxs_ext'
15709 nroff='$nroff'
15710 nvsize='$nvsize'
15711 nvtype='$nvtype'
15712 o_nonblock='$o_nonblock'
15713 obj_ext='$obj_ext'
15714 old_pthread_create_joinable='$old_pthread_create_joinable'
15715 optimize='$optimize'
15716 orderlib='$orderlib'
15717 osname='$osname'
15718 osvers='$osvers'
15719 otherlibdirs='$otherlibdirs'
15720 package='$package'
15721 pager='$pager'
15722 passcat='$passcat'
15723 patchlevel='$patchlevel'
15724 path_sep='$path_sep'
15725 perl5='$perl5'
15726 perl='$perl'
15727 perladmin='$perladmin'
15728 perlpath='$perlpath'
15729 pg='$pg'
15730 phostname='$phostname'
15731 pidtype='$pidtype'
15732 plibpth='$plibpth'
15733 pm_apiversion='$pm_apiversion'
15734 pmake='$pmake'
15735 pr='$pr'
15736 prefix='$prefix'
15737 prefixexp='$prefixexp'
15738 privlib='$privlib'
15739 privlibexp='$privlibexp'
15740 prototype='$prototype'
15741 ptrsize='$ptrsize'
15742 quadkind='$quadkind'
15743 quadtype='$quadtype'
15744 randbits='$randbits'
15745 randfunc='$randfunc'
15746 randseedtype='$randseedtype'
15747 ranlib='$ranlib'
15748 rd_nodata='$rd_nodata'
15749 revision='$revision'
15750 rm='$rm'
15751 rmail='$rmail'
15752 runnm='$runnm'
15753 sPRIEldbl='$sPRIEldbl'
15754 sPRIFldbl='$sPRIFldbl'
15755 sPRIGldbl='$sPRIGldbl'
15756 sPRIX64='$sPRIX64'
15757 sPRId64='$sPRId64'
15758 sPRIeldbl='$sPRIeldbl'
15759 sPRIfldbl='$sPRIfldbl'
15760 sPRIgldbl='$sPRIgldbl'
15761 sPRIi64='$sPRIi64'
15762 sPRIo64='$sPRIo64'
15763 sPRIu64='$sPRIu64'
15764 sPRIx64='$sPRIx64'
15765 sched_yield='$sched_yield'
15766 scriptdir='$scriptdir'
15767 scriptdirexp='$scriptdirexp'
15768 sed='$sed'
15769 seedfunc='$seedfunc'
15770 selectminbits='$selectminbits'
15771 selecttype='$selecttype'
15772 sendmail='$sendmail'
15773 sh='$sh'
15774 shar='$shar'
15775 sharpbang='$sharpbang'
15776 shmattype='$shmattype'
15777 shortsize='$shortsize'
15778 shrpenv='$shrpenv'
15779 shsharp='$shsharp'
15780 sig_count='$sig_count'
15781 sig_name='$sig_name'
15782 sig_name_init='$sig_name_init'
15783 sig_num='$sig_num'
15784 sig_num_init='$sig_num_init'
15785 signal_t='$signal_t'
15786 sitearch='$sitearch'
15787 sitearchexp='$sitearchexp'
15788 sitebin='$sitebin'
15789 sitebinexp='$sitebinexp'
15790 sitelib='$sitelib'
15791 sitelib_stem='$sitelib_stem'
15792 sitelibexp='$sitelibexp'
15793 siteprefix='$siteprefix'
15794 siteprefixexp='$siteprefixexp'
15795 sizesize='$sizesize'
15796 sizetype='$sizetype'
15797 sleep='$sleep'
15798 smail='$smail'
15799 small='$small'
15800 so='$so'
15801 sockethdr='$sockethdr'
15802 socketlib='$socketlib'
15803 socksizetype='$socksizetype'
15804 sort='$sort'
15805 spackage='$spackage'
15806 spitshell='$spitshell'
15807 split='$split'
15808 src='$src'
15809 ssizetype='$ssizetype'
15810 startperl='$startperl'
15811 startsh='$startsh'
15812 static_ext='$static_ext'
15813 stdchar='$stdchar'
15814 stdio_base='$stdio_base'
15815 stdio_bufsiz='$stdio_bufsiz'
15816 stdio_cnt='$stdio_cnt'
15817 stdio_filbuf='$stdio_filbuf'
15818 stdio_ptr='$stdio_ptr'
15819 stdio_stream_array='$stdio_stream_array'
15820 strings='$strings'
15821 submit='$submit'
15822 subversion='$subversion'
15823 sysman='$sysman'
15824 tail='$tail'
15825 tar='$tar'
15826 tbl='$tbl'
15827 tee='$tee'
15828 test='$test'
15829 timeincl='$timeincl'
15830 timetype='$timetype'
15831 touch='$touch'
15832 tr='$tr'
15833 trnl='$trnl'
15834 troff='$troff'
15835 u16size='$u16size'
15836 u16type='$u16type'
15837 u32size='$u32size'
15838 u32type='$u32type'
15839 u64size='$u64size'
15840 u64type='$u64type'
15841 u8size='$u8size'
15842 u8type='$u8type'
15843 uidformat='$uidformat'
15844 uidsign='$uidsign'
15845 uidsize='$uidsize'
15846 uidtype='$uidtype'
15847 uname='$uname'
15848 uniq='$uniq'
15849 uquadtype='$uquadtype'
15850 use5005threads='$use5005threads'
15851 use64bitall='$use64bitall'
15852 use64bitint='$use64bitint'
15853 usedl='$usedl'
15854 useithreads='$useithreads'
15855 uselargefiles='$uselargefiles'
15856 uselongdouble='$uselongdouble'
15857 usemorebits='$usemorebits'
15858 usemultiplicity='$usemultiplicity'
15859 usemymalloc='$usemymalloc'
15860 usenm='$usenm'
15861 useopcode='$useopcode'
15862 useperlio='$useperlio'
15863 useposix='$useposix'
15864 usesfio='$usesfio'
15865 useshrplib='$useshrplib'
15866 usesocks='$usesocks'
15867 usethreads='$usethreads'
15868 usevendorprefix='$usevendorprefix'
15869 usevfork='$usevfork'
15870 usrinc='$usrinc'
15871 uuname='$uuname'
15872 uvoformat='$uvoformat'
15873 uvsize='$uvsize'
15874 uvtype='$uvtype'
15875 uvuformat='$uvuformat'
15876 uvxformat='$uvxformat'
15877 vendorarch='$vendorarch'
15878 vendorarchexp='$vendorarchexp'
15879 vendorbin='$vendorbin'
15880 vendorbinexp='$vendorbinexp'
15881 vendorlib='$vendorlib'
15882 vendorlib_stem='$vendorlib_stem'
15883 vendorlibexp='$vendorlibexp'
15884 vendorprefix='$vendorprefix'
15885 vendorprefixexp='$vendorprefixexp'
15886 version='$version'
15887 vi='$vi'
15888 voidflags='$voidflags'
15889 xlibpth='$xlibpth'
15890 xs_apiversion='$xs_apiversion'
15891 zcat='$zcat'
15892 zip='$zip'
15893 EOT
15894
15895 : Add in command line options if available
15896 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15897
15898 : add special variables
15899 $test -f $src/patchlevel.h && \
15900 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15901 echo "CONFIGDOTSH=true" >>config.sh
15902
15903 : propagate old symbols
15904 if $test -f UU/config.sh; then
15905         <UU/config.sh sort | uniq >UU/oldconfig.sh
15906         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15907         sort | uniq -u >UU/oldsyms
15908         set X `cat UU/oldsyms`
15909         shift
15910         case $# in
15911         0) ;;
15912         *)
15913                 cat <<EOM
15914 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15915 EOM
15916                 echo "# Variables propagated from previous config.sh file." >>config.sh
15917                 for sym in `cat UU/oldsyms`; do
15918                         echo "    Propagating $hint variable "'$'"$sym..."
15919                         eval 'tmp="$'"${sym}"'"'
15920                         echo "$tmp" | \
15921                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15922                 done
15923                 ;;
15924         esac
15925 fi
15926
15927 : Finish up by extracting the .SH files
15928 case "$alldone" in
15929 exit)
15930         $rm -rf UU
15931         echo "Done."
15932         exit 0
15933         ;;
15934 cont)
15935         ;;
15936 '')
15937         dflt=''
15938         nostick=true
15939         $cat <<EOM
15940
15941 If you'd like to make any changes to the config.sh file before I begin
15942 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15943
15944 EOM
15945         rp="Press return or use a shell escape to edit config.sh:"
15946         . UU/myread
15947         nostick=''
15948         case "$ans" in
15949         '') ;;
15950         *) : in case they cannot read
15951                 sh 1>&4 -c "$ans";;
15952         esac
15953         ;;
15954 esac
15955
15956 : if this fails, just run all the .SH files by hand
15957 . ./config.sh
15958
15959 echo " "
15960 exec 1>&4
15961 . ./UU/extract
15962
15963 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15964         dflt=y
15965         case "$silent" in
15966         true) ;;
15967         *)
15968                 $cat <<EOM
15969
15970 Now you need to generate make dependencies by running "$make depend".
15971 You might prefer to run it in background: "$make depend > makedepend.out &"
15972 It can take a while, so you might not want to run it right now.
15973
15974 EOM
15975                 ;;
15976         esac
15977         rp="Run $make depend now?"
15978         . UU/myread
15979         case "$ans" in
15980         y*)
15981                 $make depend && echo "Now you must run a $make."
15982                 ;;
15983         *)
15984                 echo "You must run '$make depend' then '$make'."
15985                 ;;
15986         esac
15987 elif test -f [Mm]akefile; then
15988         echo " "
15989         echo "Now you must run a $make."
15990 else
15991         echo "Done."
15992 fi
15993
15994 if $test -f Policy.sh; then
15995     $cat <<EOM
15996
15997 If you compile $package on a different machine or from a different object
15998 directory, copy the Policy.sh file from this object directory to the
15999 new one before you run Configure -- this will help you with most of
16000 the policy defaults.
16001
16002 EOM
16003 fi
16004 if $test -f config.msg; then
16005     echo "Hmm.  I also noted the following information while running:"
16006     echo " "
16007     $cat config.msg >&4
16008     $rm -f config.msg
16009 fi
16010 $rm -f kit*isdone ark*isdone
16011 $rm -rf UU
16012
16013 : End of Configure
16014