Add libsunmath (long double math library for Solaris,
[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 Wed Mar  1 00:58:04 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
357 d_fpos64_t=''
358 d_fs_data_s=''
359 d_fseeko=''
360 d_fsetpos=''
361 d_fstatfs=''
362 d_ftello=''
363 d_ftime=''
364 d_gettimeod=''
365 d_Gconvert=''
366 d_getcwd=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getpwent=''
396 d_getsent=''
397 d_getservprotos=''
398 d_getspent=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_killpg=''
410 d_lchown=''
411 d_ldbl_dig=''
412 d_link=''
413 d_locconv=''
414 d_lockf=''
415 d_longdbl=''
416 longdblsize=''
417 d_longlong=''
418 longlongsize=''
419 d_lseekproto=''
420 d_lstat=''
421 d_madvise=''
422 d_mblen=''
423 d_mbstowcs=''
424 d_mbtowc=''
425 d_memchr=''
426 d_memcmp=''
427 d_memcpy=''
428 d_memmove=''
429 d_memset=''
430 d_mkdir=''
431 d_mkdtemp=''
432 d_mkfifo=''
433 d_mkstemp=''
434 d_mkstemps=''
435 d_mktime=''
436 d_mmap=''
437 mmaptype=''
438 d_mprotect=''
439 d_msg=''
440 d_msgctl=''
441 d_msgget=''
442 d_msgrcv=''
443 d_msgsnd=''
444 d_msync=''
445 d_munmap=''
446 d_nice=''
447 d_off64_t=''
448 d_open3=''
449 d_fpathconf=''
450 d_pathconf=''
451 d_pause=''
452 d_pipe=''
453 d_poll=''
454 d_portable=''
455 d_old_pthread_create_joinable=''
456 old_pthread_create_joinable=''
457 d_pthread_yield=''
458 d_sched_yield=''
459 sched_yield=''
460 d_qgcvt=''
461 d_readdir=''
462 d_rewinddir=''
463 d_seekdir=''
464 d_telldir=''
465 d_readlink=''
466 d_rename=''
467 d_rmdir=''
468 d_safebcpy=''
469 d_safemcpy=''
470 d_sanemcmp=''
471 d_select=''
472 d_sem=''
473 d_semctl=''
474 d_semget=''
475 d_semop=''
476 d_setegid=''
477 d_seteuid=''
478 d_setgrent=''
479 d_setgrps=''
480 d_sethent=''
481 d_setlinebuf=''
482 d_setlocale=''
483 d_setnent=''
484 d_setpent=''
485 d_setpgid=''
486 d_setpgrp2=''
487 d_bsdsetpgrp=''
488 d_setpgrp=''
489 d_setprior=''
490 d_setpwent=''
491 d_setregid=''
492 d_setresgid=''
493 d_setresuid=''
494 d_setreuid=''
495 d_setrgid=''
496 d_setruid=''
497 d_setsent=''
498 d_setsid=''
499 d_setspent=''
500 d_setvbuf=''
501 d_sfio=''
502 usesfio=''
503 d_shm=''
504 d_shmat=''
505 d_shmatprototype=''
506 shmattype=''
507 d_shmctl=''
508 d_shmdt=''
509 d_shmget=''
510 d_sigaction=''
511 d_sigsetjmp=''
512 d_msg_ctrunc=''
513 d_msg_dontroute=''
514 d_msg_oob=''
515 d_msg_peek=''
516 d_msg_proxy=''
517 d_oldsock=''
518 d_scm_rights=''
519 d_socket=''
520 d_sockpair=''
521 sockethdr=''
522 socketlib=''
523 d_socklen_t=''
524 d_sqrtl=''
525 d_statblks=''
526 d_statfs_f_flags=''
527 d_statfs_s=''
528 d_fstatvfs=''
529 d_statvfs=''
530 d_stdio_cnt_lval=''
531 d_stdio_ptr_lval=''
532 d_stdiobase=''
533 d_stdstdio=''
534 stdio_base=''
535 stdio_bufsiz=''
536 stdio_cnt=''
537 stdio_filbuf=''
538 stdio_ptr=''
539 d_index=''
540 d_strchr=''
541 d_strcoll=''
542 d_strctcpy=''
543 d_strerrm=''
544 d_strerror=''
545 d_sysernlst=''
546 d_syserrlst=''
547 d_strtod=''
548 d_strtol=''
549 d_strtold=''
550 d_strtoll=''
551 d_strtoul=''
552 d_strtoull=''
553 d_strtouq=''
554 d_strxfrm=''
555 d_symlink=''
556 d_syscall=''
557 d_sysconf=''
558 d_system=''
559 d_tcgetpgrp=''
560 d_tcsetpgrp=''
561 d_telldirproto=''
562 d_time=''
563 timetype=''
564 clocktype=''
565 d_times=''
566 d_truncate=''
567 d_tzname=''
568 d_umask=''
569 d_semctl_semid_ds=''
570 d_semctl_semun=''
571 d_union_semun=''
572 d_ustat=''
573 d_vfork=''
574 usevfork=''
575 d_voidsig=''
576 signal_t=''
577 d_volatile=''
578 d_charvspr=''
579 d_vprintf=''
580 d_wait4=''
581 d_waitpid=''
582 d_wcstombs=''
583 d_wctomb=''
584 dlext=''
585 cccdlflags=''
586 ccdlflags=''
587 dlsrc=''
588 ld=''
589 lddlflags=''
590 usedl=''
591 doublesize=''
592 ebcdic=''
593 fflushNULL=''
594 fflushall=''
595 fpossize=''
596 fpostype=''
597 gidformat=''
598 gidsign=''
599 gidsize=''
600 gidtype=''
601 groupstype=''
602 h_fcntl=''
603 h_sysfile=''
604 i_arpainet=''
605 db_hashtype=''
606 db_prefixtype=''
607 i_db=''
608 i_dbm=''
609 i_rpcsvcdbm=''
610 d_dirnamlen=''
611 direntrytype=''
612 i_dirent=''
613 i_dld=''
614 i_dlfcn=''
615 i_fcntl=''
616 i_float=''
617 i_gdbm=''
618 d_grpasswd=''
619 i_grp=''
620 i_iconv=''
621 i_inttypes=''
622 i_limits=''
623 i_locale=''
624 i_machcthr=''
625 i_malloc=''
626 i_math=''
627 i_memory=''
628 i_mntent=''
629 i_ndbm=''
630 i_netdb=''
631 i_neterrno=''
632 i_netinettcp=''
633 i_niin=''
634 i_sysin=''
635 i_poll=''
636 i_pthread=''
637 d_pwage=''
638 d_pwchange=''
639 d_pwclass=''
640 d_pwcomment=''
641 d_pwexpire=''
642 d_pwgecos=''
643 d_pwpasswd=''
644 d_pwquota=''
645 i_pwd=''
646 i_sfio=''
647 i_shadow=''
648 i_socks=''
649 i_stddef=''
650 i_stdlib=''
651 i_string=''
652 strings=''
653 i_sunmath=''
654 i_sysaccess=''
655 i_sysdir=''
656 i_sysfile=''
657 d_voidtty=''
658 i_bsdioctl=''
659 i_sysfilio=''
660 i_sysioctl=''
661 i_syssockio=''
662 i_syslog=''
663 i_sysmman=''
664 i_sysmode=''
665 i_sysmount=''
666 i_sysndir=''
667 i_sysparam=''
668 i_sysresrc=''
669 i_syssecrt=''
670 i_sysselct=''
671 i_sysstat=''
672 i_sysstatfs=''
673 i_sysstatvfs=''
674 i_systimes=''
675 i_systypes=''
676 i_sysuio=''
677 i_sysun=''
678 i_sysutsname=''
679 i_sysvfs=''
680 i_syswait=''
681 i_sgtty=''
682 i_termio=''
683 i_termios=''
684 i_systime=''
685 i_systimek=''
686 i_time=''
687 timeincl=''
688 i_unistd=''
689 i_ustat=''
690 i_utime=''
691 i_values=''
692 i_stdarg=''
693 i_varargs=''
694 i_varhdr=''
695 i_vfork=''
696 inc_version_list=''
697 inc_version_list_init=''
698 installprefix=''
699 installprefixexp=''
700 installstyle=''
701 installusrbinperl=''
702 intsize=''
703 longsize=''
704 shortsize=''
705 libc=''
706 ldlibpthname=''
707 libperl=''
708 shrpenv=''
709 useshrplib=''
710 glibpth=''
711 libpth=''
712 loclibpth=''
713 plibpth=''
714 xlibpth=''
715 ignore_versioned_solibs=''
716 libs=''
717 libsdirs=''
718 libsfiles=''
719 libsfound=''
720 libspath=''
721 lns=''
722 d_PRIEldbl=''
723 d_PRIFldbl=''
724 d_PRIGldbl=''
725 d_PRIeldbl=''
726 d_PRIfldbl=''
727 d_PRIgldbl=''
728 sPRIEldbl=''
729 sPRIFldbl=''
730 sPRIGldbl=''
731 sPRIeldbl=''
732 sPRIfldbl=''
733 sPRIgldbl=''
734 lseeksize=''
735 lseektype=''
736 make_set_make=''
737 d_mymalloc=''
738 freetype=''
739 mallocobj=''
740 mallocsrc=''
741 malloctype=''
742 usemymalloc=''
743 installman1dir=''
744 man1dir=''
745 man1direxp=''
746 man1ext=''
747 installman3dir=''
748 man3dir=''
749 man3direxp=''
750 man3ext=''
751 huge=''
752 large=''
753 medium=''
754 models=''
755 small=''
756 split=''
757 modetype=''
758 multiarch=''
759 mydomain=''
760 myhostname=''
761 phostname=''
762 c=''
763 n=''
764 d_eofnblk=''
765 eagain=''
766 o_nonblock=''
767 rd_nodata=''
768 netdb_hlen_type=''
769 netdb_host_type=''
770 netdb_name_type=''
771 netdb_net_type=''
772 groupcat=''
773 hostcat=''
774 passcat=''
775 orderlib=''
776 ranlib=''
777 package=''
778 spackage=''
779 pager=''
780 api_revision=''
781 api_subversion=''
782 api_version=''
783 api_versionstring=''
784 patchlevel=''
785 revision=''
786 subversion=''
787 version=''
788 perl5=''
789 perladmin=''
790 perlpath=''
791 d_nv_preserves_uv=''
792 i16size=''
793 i16type=''
794 i32size=''
795 i32type=''
796 i64size=''
797 i64type=''
798 i8size=''
799 i8type=''
800 ivsize=''
801 ivtype=''
802 nvsize=''
803 nvtype=''
804 u16size=''
805 u16type=''
806 u32size=''
807 u32type=''
808 u64size=''
809 u64type=''
810 u8size=''
811 u8type=''
812 uvsize=''
813 uvtype=''
814 ivdformat=''
815 uvoformat=''
816 uvuformat=''
817 uvxformat=''
818 pidtype=''
819 prefix=''
820 prefixexp=''
821 installprivlib=''
822 privlib=''
823 privlibexp=''
824 prototype=''
825 ptrsize=''
826 d_PRIX64=''
827 d_PRId64=''
828 d_PRIi64=''
829 d_PRIo64=''
830 d_PRIu64=''
831 d_PRIx64=''
832 sPRIX64=''
833 sPRId64=''
834 sPRIi64=''
835 sPRIo64=''
836 sPRIu64=''
837 sPRIx64=''
838 d_quad=''
839 quadkind=''
840 quadtype=''
841 uquadtype=''
842 drand01=''
843 randbits=''
844 randfunc=''
845 randseedtype=''
846 seedfunc=''
847 installscript=''
848 scriptdir=''
849 scriptdirexp=''
850 selectminbits=''
851 selecttype=''
852 sh=''
853 sig_count=''
854 sig_name=''
855 sig_name_init=''
856 sig_num=''
857 sig_num_init=''
858 installsitearch=''
859 sitearch=''
860 sitearchexp=''
861 installsitebin=''
862 sitebin=''
863 sitebinexp=''
864 installsitelib=''
865 sitelib=''
866 sitelibexp=''
867 siteprefix=''
868 siteprefixexp=''
869 sizetype=''
870 so=''
871 socksizetype=''
872 sharpbang=''
873 shsharp=''
874 spitshell=''
875 src=''
876 ssizetype=''
877 startperl=''
878 startsh=''
879 stdchar=''
880 d_stdio_stream_array=''
881 stdio_stream_array=''
882 sysman=''
883 trnl=''
884 uidformat=''
885 uidsign=''
886 uidsize=''
887 uidtype=''
888 archname64=''
889 use64bitall=''
890 use64bitint=''
891 uselargefiles=''
892 uselongdouble=''
893 usemorebits=''
894 usemultiplicity=''
895 nm_opt=''
896 nm_so_opt=''
897 runnm=''
898 usenm=''
899 useperlio=''
900 usesocks=''
901 d_oldpthreads=''
902 use5005threads=''
903 useithreads=''
904 usethreads=''
905 incpath=''
906 mips_type=''
907 usrinc=''
908 d_vendorbin=''
909 installvendorbin=''
910 vendorbin=''
911 vendorbinexp=''
912 d_vendorlib=''
913 installvendorlib=''
914 vendorlib=''
915 vendorlibexp=''
916 usevendorprefix=''
917 vendorprefix=''
918 vendorprefixexp=''
919 defvoidused=''
920 voidflags=''
921 pm_apiversion=''
922 xs_apiversion=''
923 CONFIG=''
924
925 define='define'
926 undef='undef'
927 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
928 rmlist=''
929
930 : We must find out about Eunice early
931 eunicefix=':'
932 if test -f /etc/unixtovms; then
933         eunicefix=/etc/unixtovms
934 fi
935 if test -f /etc/unixtovms.exe; then
936         eunicefix=/etc/unixtovms.exe
937 fi
938
939 i_whoami=''
940 : set useposix=false in your hint file to disable the POSIX extension.
941 useposix=true
942 : set useopcode=false in your hint file to disable the Opcode extension.
943 useopcode=true
944 : Trailing extension.  Override this in a hint file, if needed.
945 _exe=''
946 : Extra object files, if any, needed on this platform.
947 archobjs=''
948 : Possible local include directories to search.
949 : Set locincpth to "" in a hint file to defeat local include searches.
950 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
951 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
952 :
953 : no include file wanted by default
954 inclwanted=''
955
956 groupstype=''
957 : change the next line if compiling for Xenix/286 on Xenix/386
958 xlibpth='/usr/lib/386 /lib/386'
959 : Possible local library directories to search.
960 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
961 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
962
963 : general looking path for locating libraries
964 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
965 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
966 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
967 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
968 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
969
970 : Private path used by Configure to find libraries.  Its value
971 : is prepended to libpth. This variable takes care of special
972 : machines, like the mips.  Usually, it should be empty.
973 plibpth=''
974
975 : default library list
976 libswanted=''
977 : some systems want to use only the non-versioned libso:s
978 ignore_versioned_solibs=''
979 : set usemultiplicity on the Configure command line to enable multiplicity.
980 : set usesocks on the Configure command line to enable socks.
981 : set usethreads on the Configure command line to enable threads.
982 : full support for void wanted by default
983 defvoidused=15
984
985 : List of libraries we want.
986 : If anyone needs -lnet, put it in a hint file.
987 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
988 libswanted="$libswanted dld ld sun m c cposix posix"
989 libswanted="$libswanted ndir dir crypt sec"
990 libswanted="$libswanted ucb bsd BSD PW x iconv"
991 : We probably want to search /usr/shlib before most other libraries.
992 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
993 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
994 glibpth="/usr/shlib $glibpth"
995 : Do not use vfork unless overridden by a hint file.
996 usevfork=false
997
998 : Find the basic shell for Bourne shell scripts
999 case "$sh" in
1000 '')
1001         case "$SYSTYPE" in
1002         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1003         *) xxx='/bin/sh';;
1004         esac
1005         if test -f "$xxx"; then
1006                 sh="$xxx"
1007         else
1008                 : Build up a list and do a single loop so we can 'break' out.
1009                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1010                 for xxx in sh bash ksh pdksh ash; do
1011                         for p in $pth; do
1012                                 try="$try ${p}/${xxx}"
1013                         done
1014                 done
1015                 for xxx in $try; do
1016                         if test -f "$xxx"; then
1017                                 sh="$xxx";
1018                                 break
1019                         elif test -f "$xxx.exe"; then
1020                                 sh="$xxx";
1021                                 break
1022                         fi
1023                 done
1024         fi
1025         ;;
1026 esac
1027
1028 case "$sh" in
1029 '')     cat <<EOM >&2
1030 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1031
1032 Usually it's in /bin/sh.  How did you even get this far?
1033 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1034 we'll try to straighten this all out.
1035 EOM
1036         exit 1
1037         ;;
1038 esac
1039
1040 : see if sh knows # comments
1041 if `$sh -c '#' >/dev/null 2>&1`; then
1042         shsharp=true
1043         spitshell=cat
1044         xcat=/bin/cat
1045         test -f $xcat || xcat=/usr/bin/cat
1046         echo "#!$xcat" >try
1047         $eunicefix try
1048         chmod +x try
1049         ./try > today
1050         if test -s today; then
1051                 sharpbang='#!'
1052         else
1053                 echo "#! $xcat" > try
1054                 $eunicefix try
1055                 chmod +x try
1056                 ./try > today
1057                 if test -s today; then
1058                         sharpbang='#! '
1059                 else
1060                         sharpbang=': use '
1061                 fi
1062         fi
1063 else
1064         echo " "
1065         echo "Your $sh doesn't grok # comments--I will strip them later on."
1066         shsharp=false
1067         cd ..
1068         echo "exec grep -v '^[  ]*#'" >spitshell
1069         chmod +x spitshell
1070         $eunicefix spitshell
1071         spitshell=`pwd`/spitshell
1072         cd UU
1073         echo "I presume that if # doesn't work, #! won't work either!"
1074         sharpbang=': use '
1075 fi
1076 rm -f try today
1077
1078 : figure out how to guarantee sh startup
1079 case "$startsh" in
1080 '') startsh=${sharpbang}${sh} ;;
1081 *)
1082 esac
1083 cat >try <<EOSS
1084 $startsh
1085 set abc
1086 test "$?abc" != 1
1087 EOSS
1088
1089 chmod +x try
1090 $eunicefix try
1091 if ./try; then
1092         : echo "Yup, it does."
1093 else
1094         echo "Hmm... '$startsh' does not guarantee sh startup..."
1095         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1096 fi
1097 rm -f try
1098
1099
1100 : Save command line options in file UU/cmdline.opt for later use in
1101 : generating config.sh.
1102 cat > cmdline.opt <<EOSH
1103 # Configure command line arguments.
1104 config_arg0='$0'
1105 config_args='$*'
1106 config_argc=$#
1107 EOSH
1108 argn=1
1109 for arg in "$@"; do
1110         cat >>cmdline.opt <<EOSH
1111 config_arg$argn='$arg'
1112 EOSH
1113         argn=`expr $argn + 1`
1114 done
1115
1116 : produce awk script to parse command line options
1117 cat >options.awk <<'EOF'
1118 BEGIN {
1119         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1120
1121         len = length(optstr);
1122         for (i = 1; i <= len; i++) {
1123                 c = substr(optstr, i, 1);
1124                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1125                 if (a == ":") {
1126                         arg[c] = 1;
1127                         i++;
1128                 }
1129                 opt[c] = 1;
1130         }
1131 }
1132 {
1133         expect = 0;
1134         str = $0;
1135         if (substr(str, 1, 1) != "-") {
1136                 printf("'%s'\n", str);
1137                 next;
1138         }
1139         len = length($0);
1140         for (i = 2; i <= len; i++) {
1141                 c = substr(str, i, 1);
1142                 if (!opt[c]) {
1143                         printf("-%s\n", substr(str, i));
1144                         next;
1145                 }
1146                 printf("-%s\n", c);
1147                 if (arg[c]) {
1148                         if (i < len)
1149                                 printf("'%s'\n", substr(str, i + 1));
1150                         else
1151                                 expect = 1;
1152                         next;
1153                 }
1154         }
1155 }
1156 END {
1157         if (expect)
1158                 print "?";
1159 }
1160 EOF
1161
1162 : process the command line options
1163 set X `for arg in "$@"; do echo "X$arg"; done |
1164         sed -e s/X// | awk -f options.awk`
1165 eval "set $*"
1166 shift
1167 rm -f options.awk
1168
1169 : set up default values
1170 fastread=''
1171 reuseval=false
1172 config_sh=''
1173 alldone=''
1174 error=''
1175 silent=''
1176 extractsh=''
1177 override=''
1178 knowitall=''
1179 rm -f optdef.sh posthint.sh
1180 cat >optdef.sh <<EOS
1181 $startsh
1182 EOS
1183
1184
1185 : option parsing
1186 while test $# -gt 0; do
1187         case "$1" in
1188         -d) shift; fastread=yes;;
1189         -e) shift; alldone=cont;;
1190         -f)
1191                 shift
1192                 cd ..
1193                 if test -r "$1"; then
1194                         config_sh="$1"
1195                 else
1196                         echo "$me: cannot read config file $1." >&2
1197                         error=true
1198                 fi
1199                 cd UU
1200                 shift;;
1201         -h) shift; error=true;;
1202         -r) shift; reuseval=true;;
1203         -s) shift; silent=true; realsilent=true;;
1204         -E) shift; alldone=exit;;
1205         -K) shift; knowitall=true;;
1206         -O) shift; override=true;;
1207         -S) shift; silent=true; extractsh=true;;
1208         -D)
1209                 shift
1210                 case "$1" in
1211                 *=)
1212                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1213                         echo "$me: ignoring -D $1" >&2
1214                         ;;
1215                 *=*) echo "$1" | \
1216                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1217                 *) echo "$1='define'" >> optdef.sh;;
1218                 esac
1219                 shift
1220                 ;;
1221         -U)
1222                 shift
1223                 case "$1" in
1224                 *=) echo "$1" >> optdef.sh;;
1225                 *=*)
1226                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1227                         echo "$me: ignoring -U $1" >&2
1228                         ;;
1229                 *) echo "$1='undef'" >> optdef.sh;;
1230                 esac
1231                 shift
1232                 ;;
1233         -A)
1234             shift
1235             xxx=''
1236             yyy="$1"
1237             zzz=''
1238             uuu=undef
1239             case "$yyy" in
1240             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1241                  case "$zzz" in
1242                  *:*) zzz='' ;;
1243                  *)   xxx=append
1244                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1245                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1246                  esac
1247                  ;;
1248             esac
1249             case "$xxx" in
1250             '')  case "$yyy" in
1251                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1252                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1253                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1254                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1255                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1256                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1257                  esac
1258                  ;;       
1259             esac
1260             case "$xxx" in
1261             append)
1262                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1263             clear)
1264                 echo "$yyy=''"                  >> posthint.sh ;;
1265             define)
1266                 case "$zzz" in
1267                 '') zzz=define ;;
1268                 esac
1269                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1270             eval)
1271                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1272             prepend)
1273                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1274             undef)
1275                 case "$zzz" in
1276                 '') zzz="$uuu" ;;
1277                 esac
1278                 echo "$yyy=$zzz"                >> posthint.sh ;;
1279             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1280             esac
1281             shift
1282             ;;
1283         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1284             exit 0;;
1285         --) break;;
1286         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1287         *) break;;
1288         esac
1289 done
1290
1291 case "$error" in
1292 true)
1293         cat >&2 <<EOM
1294 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1295                  [-U symbol] [-U symbol=] [-A command:symbol...]
1296   -d : use defaults for all answers.
1297   -e : go on without questioning past the production of config.sh.
1298   -f : specify an alternate default configuration file.
1299   -h : print this help message and exit (with an error status).
1300   -r : reuse C symbols value if possible (skips costly nm extraction).
1301   -s : silent mode, only echoes questions and essential information.
1302   -D : define symbol to have some value:
1303          -D symbol         symbol gets the value 'define'
1304          -D symbol=value   symbol gets the value 'value'
1305   -E : stop at the end of questions, after having produced config.sh.
1306   -K : do not use unless you know what you are doing.
1307   -O : let -D and -U override definitions from loaded configuration file.
1308   -S : perform variable substitutions on all .SH files (can mix with -f)
1309   -U : undefine symbol:
1310          -U symbol    symbol gets the value 'undef'
1311          -U symbol=   symbol gets completely empty
1312   -A : manipulate symbol after the platform specific hints have been applied:
1313          -A symbol=value                append " "value to symbol
1314          -A append:symbol=value         append value to symbol
1315          -A define:symbol=value         define symbol to have value
1316          -A clear:symbol                define symbol to be ''
1317          -A define:symbol               define symbol to be 'define'
1318          -A eval:symbol=value           define symbol to be eval of value
1319          -A prepend:symbol=value        prepend value to symbol
1320          -A undef:symbol                define symbol to be 'undef'
1321          -A undef:symbol=               define symbol to be ''
1322   -V : print version number and exit (with a zero status).
1323 EOM
1324         exit 1
1325         ;;
1326 esac
1327
1328 : Sanity checks
1329 case "$fastread$alldone" in
1330 yescont|yesexit) ;;
1331 *)
1332         if test ! -t 0; then
1333                 echo "Say 'sh Configure', not 'sh <Configure'"
1334                 exit 1
1335         fi
1336         ;;
1337 esac
1338
1339 exec 4>&1
1340 case "$silent" in
1341 true) exec 1>/dev/null;;
1342 esac
1343
1344 : run the defines and the undefines, if any, but leave the file out there...
1345 touch optdef.sh
1346 . ./optdef.sh
1347 : create the posthint manipulation script and leave the file out there...
1348 touch posthint.sh
1349
1350 : set package name
1351 package=perl5
1352 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1353 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1354 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1355 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1356 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1357 esac
1358
1359 : Some greps do not return status, grrr.
1360 echo "grimblepritz" >grimble
1361 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1362         contains=contains
1363 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1364         contains=grep
1365 else
1366         contains=contains
1367 fi
1368 rm -f grimble
1369 : the following should work in any shell
1370 case "$contains" in
1371 contains*)
1372         echo " "
1373         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1374         cat >contains <<'EOSS'
1375 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1376 EOSS
1377 chmod +x contains
1378 esac
1379
1380 : Find the path to the source tree
1381 case "$src" in
1382 '') case "$0" in
1383     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1384          case "$src" in
1385          /*)    ;;
1386          *)     src=`cd ../$src && pwd` ;;
1387          esac
1388          ;;
1389     *)   src='.';;
1390     esac;;
1391 esac
1392 case "$src" in
1393 '')     src=/
1394         rsrc=/
1395         ;;
1396 /*) rsrc="$src";;
1397 *) rsrc="../$src";;
1398 esac
1399 if test -f $rsrc/Configure && \
1400         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1401 then
1402    : found it, so we are ok.
1403 else
1404         rsrc=''
1405         for src in . .. ../.. ../../.. ../../../..; do
1406                 if test -f ../$src/Configure && \
1407                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1408                 then
1409                         rsrc=../$src
1410                         break
1411                 fi
1412         done
1413 fi
1414 case "$rsrc" in
1415 '')
1416         cat <<EOM >&4
1417
1418 Sorry, I can't seem to locate the source dir for $package.  Please start
1419 Configure with an explicit path -- i.e. /some/path/Configure.
1420
1421 EOM
1422         exit 1
1423         ;;
1424 ../.)   rsrc='..';;
1425 *)
1426         echo " "
1427         echo "Sources for $package found in \"$src\"." >&4
1428         ;;
1429 esac
1430
1431 : script used to extract .SH files with variable substitutions
1432 cat >extract <<'EOS'
1433 CONFIGDOTSH=true
1434 echo "Doing variable substitutions on .SH files..."
1435 if test -f $src/MANIFEST; then
1436         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1437 else
1438         echo "(Looking for .SH files under the source directory.)"
1439         set x `(cd $src; find . -name "*.SH" -print)`
1440 fi
1441 shift
1442 case $# in
1443 0) set x `(cd $src; echo *.SH)`; shift;;
1444 esac
1445 if test ! -f $src/$1; then
1446         shift
1447 fi
1448 mkdir_p='
1449 name=$1;
1450 create="";
1451 while test $name; do
1452         if test ! -d "$name"; then
1453                 create="$name $create";
1454                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1455                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1456         else
1457                 name="";
1458         fi;
1459 done;
1460 for file in $create; do
1461         mkdir $file;
1462 done
1463 '
1464 for file in $*; do
1465         case "$src" in
1466         ".")
1467                 case "$file" in
1468                 */*)
1469                         dir=`expr X$file : 'X\(.*\)/'`
1470                         file=`expr X$file : 'X.*/\(.*\)'`
1471                         (cd $dir && . ./$file)
1472                         ;;
1473                 *)
1474                         . ./$file
1475                         ;;
1476                 esac
1477                 ;;
1478         *)
1479                 case "$file" in
1480                 */*)
1481                         dir=`expr X$file : 'X\(.*\)/'`
1482                         file=`expr X$file : 'X.*/\(.*\)'`
1483                         (set x $dir; shift; eval $mkdir_p)
1484                         sh <$src/$dir/$file
1485                         ;;
1486                 *)
1487                         sh <$src/$file
1488                         ;;
1489                 esac
1490                 ;;
1491         esac
1492 done
1493 if test -f $src/config_h.SH; then
1494         if test ! -f config.h; then
1495         : oops, they left it out of MANIFEST, probably, so do it anyway.
1496         . $src/config_h.SH
1497         fi
1498 fi
1499 EOS
1500
1501 : extract files and exit if asked to do so
1502 case "$extractsh" in
1503 true)
1504         case "$realsilent" in
1505         true) ;;
1506         *) exec 1>&4;;
1507         esac
1508         case "$config_sh" in
1509         '') config_sh='config.sh';;
1510         esac
1511         echo " "
1512         echo "Fetching answers from $config_sh..."
1513         cd ..
1514         . $config_sh
1515         test "$override" && . ./optdef.sh
1516         echo " "
1517         . UU/extract
1518         rm -rf UU
1519         echo "Done."
1520         exit 0
1521         ;;
1522 esac
1523
1524 : Eunice requires " " instead of "", can you believe it
1525 echo " "
1526 : Here we go...
1527 echo "Beginning of configuration questions for $package."
1528
1529 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1530
1531 : first determine how to suppress newline on echo command
1532 echo " "
1533 echo "Checking echo to see how to suppress newlines..."
1534 (echo "hi there\c" ; echo " ") >.echotmp
1535 if $contains c .echotmp >/dev/null 2>&1 ; then
1536         echo "...using -n."
1537         n='-n'
1538         c=''
1539 else
1540         cat <<'EOM'
1541 ...using \c
1542 EOM
1543         n=''
1544         c='\c'
1545 fi
1546 echo $n "The star should be here-->$c"
1547 echo '*'
1548 rm -f .echotmp
1549
1550 : Now test for existence of everything in MANIFEST
1551 echo " "
1552 if test -f $rsrc/MANIFEST; then
1553         echo "First let's make sure your kit is complete.  Checking..." >&4
1554         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1555         rm -f missing
1556         tmppwd=`pwd`
1557         for filelist in x??; do
1558                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1559         done
1560         if test -s missing; then
1561                 cat missing >&4
1562                 cat >&4 <<'EOM'
1563
1564 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1565
1566 You have the option of continuing the configuration process, despite the
1567 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1568 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1569 and contact the author (perlbug@perl.com).
1570
1571 EOM
1572                 echo $n "Continue? [n] $c" >&4
1573                 read ans
1574                 case "$ans" in
1575                 y*)
1576                         echo "Continuing..." >&4
1577                         rm -f missing
1578                         ;;
1579                 *)
1580                         echo "ABORTING..." >&4
1581                         kill $$
1582                         ;;
1583                 esac
1584         else
1585                 echo "Looks good..."
1586         fi
1587 else
1588         echo "There is no MANIFEST file.  I hope your kit is complete !"
1589 fi
1590 rm -f missing x??
1591
1592 echo " "
1593 : Find the appropriate value for a newline for tr
1594 if test -n "$DJGPP"; then
1595        trnl='\012'
1596 fi
1597 if test X"$trnl" = X; then
1598         case "`echo foo|tr '\n' x 2>/dev/null`" in
1599         foox) trnl='\n' ;;
1600         esac
1601 fi
1602 if test X"$trnl" = X; then
1603         case "`echo foo|tr '\012' x 2>/dev/null`" in
1604         foox) trnl='\012' ;;
1605         esac
1606 fi
1607 if test X"$trnl" = X; then
1608         cat <<EOM >&2
1609
1610 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1611
1612 EOM
1613         exit 1
1614 fi
1615
1616 : compute the number of columns on the terminal for proper question formatting
1617 case "$COLUMNS" in
1618 '') COLUMNS='80';;
1619 esac
1620
1621 : set up the echo used in my read
1622 myecho="case \"\$xxxm\" in
1623 '') echo $n \"\$rp $c\" >&4;;
1624 *) case \"\$rp\" in
1625         '') echo $n \"[\$xxxm] $c\";;
1626         *)
1627                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1628                         echo \"\$rp\" >&4
1629                         echo $n \"[\$xxxm] $c\" >&4
1630                 else
1631                         echo $n \"\$rp [\$xxxm] $c\" >&4
1632                 fi
1633                 ;;
1634         esac;;
1635 esac"
1636
1637 : now set up to do reads with possible shell escape and default assignment
1638 cat <<EOSC >myread
1639 $startsh
1640 xxxm=\$dflt
1641 $myecho
1642 ans='!'
1643 case "\$fastread" in
1644 yes) case "\$dflt" in
1645         '') ;;
1646         *) ans='';
1647                 case "\$silent-\$rp" in
1648                 true-) ;;
1649                 *) echo " " >&4;;
1650                 esac;;
1651         esac;;
1652 *) case "\$silent" in
1653         true) case "\$rp" in
1654                 '') ans='';;
1655                 esac;;
1656         esac;;
1657 esac
1658 while expr "X\$ans" : "X!" >/dev/null; do
1659         read answ
1660         set x \$xxxm
1661         shift
1662         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1663         case  "\$answ" in
1664         "!")
1665                 sh 1>&4
1666                 echo " "
1667                 $myecho
1668                 ;;
1669         !*)
1670                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1671                 shift
1672                 sh 1>&4 -c "\$*"
1673                 echo " "
1674                 $myecho
1675                 ;;
1676         "\$ans")
1677                 case "\$ans" in
1678                 \\&*)
1679                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1680                         shift
1681                         case "\$1" in
1682                         -d)
1683                                 fastread=yes
1684                                 echo "(OK, I'll run with -d after this question.)" >&4
1685                                 ;;
1686                         -*)
1687                                 echo "*** Sorry, \$1 not supported yet." >&4
1688                                 ;;
1689                         esac
1690                         $myecho
1691                         ans=!
1692                         ;;
1693                 esac;;
1694         *)
1695                 case "\$aok" in
1696                 y)
1697                         echo "*** Substitution done -- please confirm."
1698                         xxxm="\$ans"
1699                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1700                         xxxm="\$ans"
1701                         ans=!
1702                         ;;
1703                 *)
1704                         echo "*** Error -- try again."
1705                         ans=!
1706                         ;;
1707                 esac
1708                 $myecho
1709                 ;;
1710         esac
1711         case "\$ans\$xxxm\$nostick" in
1712         '')
1713                 ans=!
1714                 $myecho
1715                 ;;
1716         esac
1717 done
1718 case "\$ans" in
1719 '') ans="\$xxxm";;
1720 esac
1721 EOSC
1722
1723 : create .config dir to save info across Configure sessions
1724 test -d ../.config || mkdir ../.config
1725 cat >../.config/README <<EOF
1726 This directory created by Configure to save information that should
1727 persist across sessions for $package.
1728
1729 You may safely delete it if you wish.
1730 EOF
1731
1732 : general instructions
1733 needman=true
1734 firsttime=true
1735 user=`(logname) 2>/dev/null`
1736 case "$user" in
1737 '') user=`whoami 2>&1`;;
1738 esac
1739 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1740         firsttime=false
1741         echo " "
1742         rp='Would you like to see the instructions?'
1743         dflt=n
1744         . ./myread
1745         case "$ans" in
1746         [yY]*) ;;
1747         *) needman=false;;
1748         esac
1749 fi
1750 if $needman; then
1751         cat <<EOH
1752
1753 This installation shell script will examine your system and ask you questions
1754 to determine how the perl5 package should be installed. If you get
1755 stuck on a question, you may use a ! shell escape to start a subshell or
1756 execute a command.  Many of the questions will have default answers in square
1757 brackets; typing carriage return will give you the default.
1758
1759 On some of the questions which ask for file or directory names you are allowed
1760 to use the ~name construct to specify the login directory belonging to "name",
1761 even if you don't have a shell which knows about that.  Questions where this is
1762 allowed will be marked "(~name ok)".
1763
1764 EOH
1765         rp=''
1766         dflt='Type carriage return to continue'
1767         . ./myread
1768         cat <<'EOH'
1769
1770 The prompter used in this script allows you to use shell variables and
1771 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1772 in the default answer, as if the default line was a set of arguments given to a
1773 script shell.  This means you may also use $* to repeat the whole default line,
1774 so you do not have to re-type everything to add something to the default.
1775
1776 Everytime there is a substitution, you will have to confirm.  If there is an
1777 error (e.g. an unmatched backtick), the default answer will remain unchanged
1778 and you will be prompted again.
1779
1780 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1781 the questions and use the computed defaults (or the previous answers if there
1782 was already a config.sh file). Type 'Configure -h' for a list of options.
1783 You may also start interactively and then answer '& -d' at any prompt to turn
1784 on the non-interactive behaviour for the remainder of the execution.
1785
1786 EOH
1787         . ./myread
1788         cat <<EOH
1789
1790 Much effort has been expended to ensure that this shell script will run on any
1791 Unix system.  If despite that it blows up on yours, your best bet is to edit
1792 Configure and run it again.  If you can't run Configure for some reason,
1793 you'll have to generate a config.sh file by hand.  Whatever problems you
1794 have, let me (perlbug@perl.com) know how I blew it.
1795
1796 This installation script affects things in two ways:
1797
1798 1) it may do direct variable substitutions on some of the files included
1799    in this kit.
1800 2) it builds a config.h file for inclusion in C programs.  You may edit
1801    any of these files as the need arises after running this script.
1802
1803 If you make a mistake on a question, there is no easy way to back up to it
1804 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1805 files.  Configure will offer to let you do this before it runs the SH files.
1806
1807 EOH
1808         dflt='Type carriage return to continue'
1809         . ./myread
1810         case "$firsttime" in
1811         true) echo $user >>../.config/instruct;;
1812         esac
1813 fi
1814
1815 : find out where common programs are
1816 echo " "
1817 echo "Locating common programs..." >&4
1818 cat <<EOSC >loc
1819 $startsh
1820 case \$# in
1821 0) exit 1;;
1822 esac
1823 thing=\$1
1824 shift
1825 dflt=\$1
1826 shift
1827 for dir in \$*; do
1828         case "\$thing" in
1829         .)
1830         if test -d \$dir/\$thing; then
1831                 echo \$dir
1832                 exit 0
1833         fi
1834         ;;
1835         *)
1836         for thisthing in \$dir/\$thing; do
1837                 : just loop through to pick last item
1838         done
1839         if test -f \$thisthing; then
1840                 echo \$thisthing
1841                 exit 0
1842         elif test -f \$dir/\$thing.exe; then
1843                 if test -n "$DJGPP"; then
1844                         echo \$dir/\$thing.exe
1845                 else
1846                         : on Eunice apparently
1847                         echo \$dir/\$thing
1848                 fi
1849                 exit 0
1850         fi
1851         ;;
1852         esac
1853 done
1854 echo \$dflt
1855 exit 1
1856 EOSC
1857 chmod +x loc
1858 $eunicefix loc
1859 loclist="
1860 awk
1861 cat
1862 comm
1863 cp
1864 echo
1865 expr
1866 grep
1867 ls
1868 make
1869 mkdir
1870 rm
1871 sed
1872 sort
1873 touch
1874 tr
1875 uniq
1876 "
1877 trylist="
1878 Mcc
1879 ar
1880 byacc
1881 cpp
1882 csh
1883 date
1884 egrep
1885 gzip
1886 less
1887 ln
1888 more
1889 nm
1890 nroff
1891 pg
1892 test
1893 uname
1894 zip
1895 "
1896 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1897 pth="$pth /lib /usr/lib"
1898 for file in $loclist; do
1899         eval xxx=\$$file
1900         case "$xxx" in
1901         /*|?:[\\/]*)
1902                 if test -f "$xxx"; then
1903                         : ok
1904                 else
1905                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1906                         xxx=`./loc $file $file $pth`
1907                 fi
1908                 ;;
1909         '') xxx=`./loc $file $file $pth`;;
1910         *) xxx=`./loc $xxx $xxx $pth`;;
1911         esac
1912         eval $file=$xxx
1913         eval _$file=$xxx
1914         case "$xxx" in
1915         /*)
1916                 echo $file is in $xxx.
1917                 ;;
1918         ?:[\\/]*)
1919                 echo $file is in $xxx.
1920                 ;;
1921         *)
1922                 echo "I don't know where '$file' is, and my life depends on it." >&4
1923                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1924                 exit 1
1925                 ;;
1926         esac
1927 done
1928 echo " "
1929 echo "Don't worry if any of the following aren't found..."
1930 say=offhand
1931 for file in $trylist; do
1932         eval xxx=\$$file
1933         case "$xxx" in
1934         /*|?:[\\/]*)
1935                 if test -f "$xxx"; then
1936                         : ok
1937                 else
1938                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1939                         xxx=`./loc $file $file $pth`
1940                 fi
1941                 ;;
1942         '') xxx=`./loc $file $file $pth`;;
1943         *) xxx=`./loc $xxx $xxx $pth`;;
1944         esac
1945         eval $file=$xxx
1946         eval _$file=$xxx
1947         case "$xxx" in
1948         /*)
1949                 echo $file is in $xxx.
1950                 ;;
1951         ?:[\\/]*)
1952                 echo $file is in $xxx.
1953                 ;;
1954         *)
1955                 echo "I don't see $file out there, $say."
1956                 say=either
1957                 ;;
1958         esac
1959 done
1960 case "$egrep" in
1961 egrep)
1962         echo "Substituting grep for egrep."
1963         egrep=$grep
1964         ;;
1965 esac
1966 case "$ln" in
1967 ln)
1968         echo "Substituting cp for ln."
1969         ln=$cp
1970         ;;
1971 esac
1972 case "$test" in
1973 test)
1974         echo "Hopefully test is built into your sh."
1975         ;;
1976 *)
1977         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1978                 echo "Using the test built into your sh."
1979                 test=test
1980                 _test=test
1981         fi
1982         ;;
1983 esac
1984 case "$echo" in
1985 echo)
1986         echo "Hopefully echo is built into your sh."
1987         ;;
1988 '') ;;
1989 *)
1990         echo " "
1991 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1992         $echo $n "hi there$c" >foo1
1993         echo $n "hi there$c" >foo2
1994         if cmp foo1 foo2 >/dev/null 2>&1; then
1995                 echo "They are compatible.  In fact, they may be identical."
1996         else
1997                 case "$n" in
1998                 '-n') n='' c='\c';;
1999                 *) n='-n' c='';;
2000                 esac
2001                 cat <<FOO
2002 They are not compatible!  You are probably running ksh on a non-USG system.
2003 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2004 have echo built in and we may have to run some Bourne shell scripts.  That
2005 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2006
2007 FOO
2008                 $echo $n "The star should be here-->$c"
2009                 $echo "*"
2010         fi
2011         $rm -f foo1 foo2
2012         ;;
2013 esac
2014
2015 : determine whether symbolic links are supported
2016 echo " "
2017 $touch blurfl
2018 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2019         echo "Symbolic links are supported." >&4
2020         lns="$ln -s"
2021 else
2022         echo "Symbolic links are NOT supported." >&4
2023         lns="$ln"
2024 fi
2025 $rm -f blurfl sym
2026
2027 : see whether [:lower:] and [:upper:] are supported character classes
2028 echo " "
2029 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2030 ABYZ)
2031         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2032         up='[:upper:]'
2033         low='[:lower:]'
2034         ;;
2035 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2036         # (0xc9 and 0xd1), therefore that is a nice testing point.
2037         if test "X$up" = X -o "X$low" = X; then
2038             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2039             ij) up='[A-Z]'
2040                 low='[a-z]'
2041                 ;;
2042             esac
2043         fi
2044         if test "X$up" = X -o "X$low" = X; then
2045             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2046             ij) up='A-Z'
2047                 low='a-z'
2048                 ;;
2049             esac
2050         fi
2051         if test "X$up" = X -o "X$low" = X; then
2052             case "`echo IJ | od -x 2>/dev/null`" in
2053             *C9D1*|*c9d1*)
2054                 echo "Hey, this might be EBCDIC." >&4
2055                 if test "X$up" = X -o "X$low" = X; then
2056                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2057                     ij) up='[A-IJ-RS-Z]'
2058                         low='[a-ij-rs-z]'
2059                         ;;
2060                     esac
2061                 fi
2062                 if test "X$up" = X -o "X$low" = X; then
2063                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2064                     ij) up='A-IJ-RS-Z'
2065                         low='a-ij-rs-z'
2066                         ;;
2067                     esac
2068                 fi
2069                 ;;
2070             esac
2071         fi
2072 esac
2073 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2074 ij)
2075     echo "Using $up and $low to convert case." >&4
2076     ;;
2077 *)
2078     echo "I don't know how to translate letters from upper to lower case." >&4
2079     echo "Your tr is not acting any way I know of." >&4
2080     exit 1
2081     ;;
2082 esac
2083 : set up the translation script tr, must be called with ./tr of course
2084 cat >tr <<EOSC
2085 $startsh
2086 case "\$1\$2" in
2087 '[A-Z][a-z]') exec $tr '$up' '$low';;
2088 '[a-z][A-Z]') exec $tr '$low' '$up';;
2089 esac
2090 exec $tr "\$@"
2091 EOSC
2092 chmod +x tr
2093 $eunicefix tr
2094
2095 : Try to determine whether config.sh was made on this system
2096 case "$config_sh" in
2097 '')
2098 myuname=`$uname -a 2>/dev/null`
2099 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2100 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2101 # because the A-Z/a-z are not consecutive.
2102 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2103         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2104 newmyuname="$myuname"
2105 dflt=n
2106 case "$knowitall" in
2107 '')
2108         if test -f ../config.sh; then
2109                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2110                         eval "`grep myuname= ../config.sh`"
2111                 fi
2112                 if test "X$myuname" = "X$newmyuname"; then
2113                         dflt=y
2114                 fi
2115         fi
2116         ;;
2117 *) dflt=y;;
2118 esac
2119
2120 : Get old answers from old config file if Configure was run on the
2121 : same system, otherwise use the hints.
2122 hint=default
2123 cd ..
2124 if test -f config.sh; then
2125         echo " "
2126         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2127         . UU/myread
2128         case "$ans" in
2129         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2130         *)  echo "Fetching default answers from your old config.sh file..." >&4
2131                 tmp_n="$n"
2132                 tmp_c="$c"
2133                 tmp_sh="$sh"
2134                 . ./config.sh
2135                 cp config.sh UU
2136                 n="$tmp_n"
2137                 c="$tmp_c"
2138                 : Older versions did not always set $sh.  Catch re-use of such
2139                 : an old config.sh.
2140                 case "$sh" in
2141                 '') sh="$tmp_sh" ;;
2142                 esac
2143                 hint=previous
2144                 ;;
2145         esac
2146 fi
2147 if test ! -f config.sh; then
2148         $cat <<EOM
2149
2150 First time through, eh?  I have some defaults handy for some systems
2151 that need some extra help getting the Configure answers right:
2152
2153 EOM
2154         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2155         dflt=''
2156         : Half the following guesses are probably wrong... If you have better
2157         : tests or hints, please send them to perlbug@perl.com
2158         : The metaconfig authors would also appreciate a copy...
2159         $test -f /irix && osname=irix
2160         $test -f /xenix && osname=sco_xenix
2161         $test -f /dynix && osname=dynix
2162         $test -f /dnix && osname=dnix
2163         $test -f /lynx.os && osname=lynxos
2164         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2165         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2166         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2167         $test -f /bin/mips && /bin/mips && osname=mips
2168         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2169                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2170         $test -d /usr/apollo/bin && osname=apollo
2171         $test -f /etc/saf/_sactab && osname=svr4
2172         $test -d /usr/include/minix && osname=minix
2173         if $test -d /MachTen -o -d /MachTen_Folder; then
2174                 osname=machten
2175                 if $test -x /sbin/version; then
2176                         osvers=`/sbin/version | $awk '{print $2}' |
2177                         $sed -e 's/[A-Za-z]$//'`
2178                 elif $test -x /usr/etc/version; then
2179                         osvers=`/usr/etc/version | $awk '{print $2}' |
2180                         $sed -e 's/[A-Za-z]$//'`
2181                 else
2182                         osvers="$2.$3"
2183                 fi
2184         fi
2185
2186         $test -f /sys/posix.dll &&
2187                 $test -f /usr/bin/what &&
2188                 set X `/usr/bin/what /sys/posix.dll` &&
2189                 $test "$3" = UWIN &&
2190                 osname=uwin &&
2191                 osvers="$5"
2192
2193         if $test -f $uname; then
2194                 set X $myuname
2195                 shift
2196
2197                 case "$5" in
2198                 fps*) osname=fps ;;
2199                 mips*)
2200                         case "$4" in
2201                         umips) osname=umips ;;
2202                         *) osname=mips ;;
2203                         esac;;
2204                 [23]100) osname=mips ;;
2205                 next*) osname=next ;;
2206                 i386*)
2207                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2208                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2209                                 osname='sco'
2210                                 osvers=$tmp
2211                         elif $test -f /etc/kconfig; then
2212                                 osname=isc
2213                                 if test "$lns" = "$ln -s"; then
2214                                         osvers=4
2215                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2216                                         osvers=3
2217                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2218                                         osvers=2
2219                                 fi
2220                         fi
2221                         tmp=''
2222                         ;;
2223                 pc*)
2224                         if test -n "$DJGPP"; then
2225                                 osname=dos
2226                                 osvers=djgpp
2227                         fi
2228                         ;;
2229                 esac
2230
2231                 case "$1" in
2232                 aix) osname=aix
2233                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2234                         case "$tmp" in
2235                         'not found') osvers="$4"."$3" ;;
2236                         '<3240'|'<>3240') osvers=3.2.0 ;;
2237                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2238                         '=3250'|'>3250') osvers=3.2.5 ;;
2239                         *) osvers=$tmp;;
2240                         esac
2241                         ;;
2242                 bsd386) osname=bsd386
2243                         osvers=`$uname -r`
2244                         ;;
2245                 cygwin*) osname=cygwin
2246                         osvers="$3"
2247                         ;;
2248                 *dc.osx) osname=dcosx
2249                         osvers="$3"
2250                         ;;
2251                 dnix) osname=dnix
2252                         osvers="$3"
2253                         ;;
2254                 domainos) osname=apollo
2255                         osvers="$3"
2256                         ;;
2257                 dgux) osname=dgux 
2258                         osvers="$3"
2259                         ;;
2260                 dynixptx*) osname=dynixptx
2261                         osvers=`echo "$4"|sed 's/^v//'`
2262                         ;;
2263                 freebsd) osname=freebsd 
2264                         osvers="$3" ;;
2265                 genix) osname=genix ;;
2266                 hp*) osname=hpux 
2267                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2268                         ;;
2269                 irix*) osname=irix
2270                         case "$3" in
2271                         4*) osvers=4 ;;
2272                         5*) osvers=5 ;;
2273                         *)      osvers="$3" ;;
2274                         esac
2275                         ;;
2276                 linux) osname=linux
2277                         case "$3" in
2278                         *)      osvers="$3" ;;
2279                         esac
2280                         ;;
2281                 MiNT) osname=mint
2282                         ;;
2283                 netbsd*) osname=netbsd
2284                         osvers="$3"
2285                         ;;
2286                 news-os) osvers="$3"
2287                         case "$3" in
2288                         4*) osname=newsos4 ;;
2289                         *) osname=newsos ;;
2290                         esac
2291                         ;;
2292                 next*) osname=next ;;
2293                 POSIX-BC | posix-bc ) osname=posix-bc
2294                         osvers="$3"
2295                         ;;
2296                 powerux | power_ux | powermax_os | powermaxos | \
2297                 powerunix | power_unix) osname=powerux
2298                         osvers="$3"
2299                         ;;
2300                 qnx) osname=qnx
2301                         osvers="$4"
2302                         ;;
2303                 solaris) osname=solaris
2304                         case "$3" in
2305                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2306                         *)      osvers="$3" ;;
2307                         esac
2308                         ;;
2309                 sunos) osname=sunos
2310                         case "$3" in
2311                         5*) osname=solaris
2312                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2313                         *)      osvers="$3" ;;
2314                         esac
2315                         ;;
2316                 titanos) osname=titanos
2317                         case "$3" in
2318                         1*) osvers=1 ;;
2319                         2*) osvers=2 ;;
2320                         3*) osvers=3 ;;
2321                         4*) osvers=4 ;;
2322                         *)      osvers="$3" ;;
2323                         esac
2324                         ;;
2325                 ultrix) osname=ultrix
2326                         osvers="$3"
2327                         ;;
2328                 osf1|mls+)      case "$5" in
2329                                 alpha)
2330                                         osname=dec_osf
2331                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2332                                         ;;
2333                         hp*)    osname=hp_osf1  ;;
2334                         mips)   osname=mips_osf1 ;;
2335                         esac
2336                         ;;
2337                 unixware) osname=svr5
2338                         osvers="$4"
2339                         ;;
2340                 uts) osname=uts
2341                         osvers="$3"
2342                         ;;
2343                 $2) case "$osname" in
2344                         *isc*) ;;
2345                         *freebsd*) ;;
2346                         svr*)
2347                                 : svr4.x or possibly later
2348                                 case "svr$3" in 
2349                                 ${osname}*)
2350                                         osname=svr$3
2351                                         osvers=$4
2352                                         ;;
2353                                 esac
2354                                 case "$osname" in
2355                                 svr4.0)
2356                                         : Check for ESIX
2357                                         if test -f /stand/boot ; then
2358                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2359                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2360                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2361                                                         if test -n "$isesix"; then
2362                                                                 osname=esix4
2363                                                         fi
2364                                                 fi
2365                                         fi
2366                                         ;;
2367                                 esac
2368                                 ;;
2369                         *)      if test -f /etc/systemid; then
2370                                         osname=sco
2371                                         set `echo $3 | $sed 's/\./ /g'` $4
2372                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2373                                                 osvers=$1.$2.$3
2374                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2375                                                 osvers=$1.$2
2376                                         elif $test -f $src/hints/sco_$1.sh; then
2377                                                 osvers=$1
2378                                         fi
2379                                 else
2380                                         case "$osname" in
2381                                         '') : Still unknown.  Probably a generic Sys V.
2382                                                 osname="sysv"
2383                                                 osvers="$3"
2384                                                 ;;
2385                                         esac
2386                                 fi
2387                                 ;;
2388                         esac
2389                         ;;
2390                 *)      case "$osname" in
2391                         '') : Still unknown.  Probably a generic BSD.
2392                                 osname="$1"
2393                                 osvers="$3"
2394                                 ;;
2395                         esac
2396                         ;;
2397                 esac
2398         else
2399                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2400                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2401                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2402                                 osname=news_os
2403                         fi
2404                         $rm -f UU/kernel.what
2405                 elif test -d c:/.; then
2406                         set X $myuname
2407                         osname=os2
2408                         osvers="$5"
2409                 fi
2410         fi
2411         
2412         : Now look for a hint file osname_osvers, unless one has been
2413         : specified already.
2414         case "$hintfile" in
2415         ''|' ')
2416                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2417                 : Also try without trailing minor version numbers.
2418                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2419                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2420                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2421                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2422                 case "$file" in
2423                 '') dflt=none ;;
2424                 *)  case "$osvers" in
2425                         '') dflt=$file
2426                                 ;;
2427                         *)  if $test -f $src/hints/$file.sh ; then
2428                                         dflt=$file
2429                                 elif $test -f $src/hints/$xfile.sh ; then
2430                                         dflt=$xfile
2431                                 elif $test -f $src/hints/$xxfile.sh ; then
2432                                         dflt=$xxfile
2433                                 elif $test -f $src/hints/$xxxfile.sh ; then
2434                                         dflt=$xxxfile
2435                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2436                                         dflt=$xxxxfile
2437                                 elif $test -f "$src/hints/${osname}.sh" ; then
2438                                         dflt="${osname}"
2439                                 else
2440                                         dflt=none
2441                                 fi
2442                                 ;;
2443                         esac
2444                         ;;
2445                 esac
2446                 if $test -f Policy.sh ; then
2447                         case "$dflt" in
2448                         *Policy*) ;;
2449                         none) dflt="Policy" ;;
2450                         *) dflt="Policy $dflt" ;;
2451                         esac
2452                 fi
2453                 ;;
2454         *)
2455                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2456                 ;;
2457         esac
2458
2459         if $test -f Policy.sh ; then
2460                 $cat <<EOM
2461
2462 There's also a Policy hint file available, which should make the
2463 site-specific (policy) questions easier to answer.
2464 EOM
2465
2466         fi
2467
2468         $cat <<EOM
2469
2470 You may give one or more space-separated answers, or "none" if appropriate.
2471 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2472 is a good thing.  DO NOT give a wrong version or a wrong OS.
2473
2474 EOM
2475
2476         rp="Which of these apply, if any?"
2477         . UU/myread
2478         tans=$ans
2479         for file in $tans; do
2480                 if $test X$file = XPolicy -a -f Policy.sh; then
2481                         . Policy.sh
2482                         $cat Policy.sh >> UU/config.sh
2483                 elif $test -f $src/hints/$file.sh; then
2484                         . $src/hints/$file.sh
2485                         $cat $src/hints/$file.sh >> UU/config.sh
2486                 elif $test X$tans = X -o X$tans = Xnone ; then
2487                         : nothing
2488                 else
2489                         : Give one chance to correct a possible typo.
2490                         echo "$file.sh does not exist"
2491                         dflt=$file
2492                         rp="hint to use instead?"
2493                         . UU/myread
2494                         for file in $ans; do
2495                                 if $test -f "$src/hints/$file.sh"; then
2496                                         . $src/hints/$file.sh
2497                                         $cat $src/hints/$file.sh >> UU/config.sh
2498                                 elif $test X$ans = X -o X$ans = Xnone ; then
2499                                         : nothing
2500                                 else
2501                                         echo "$file.sh does not exist -- ignored."
2502                                 fi
2503                         done
2504                 fi
2505         done
2506
2507         hint=recommended
2508         : Remember our hint file for later.
2509         if $test -f "$src/hints/$file.sh" ; then
2510                 hintfile="$file"
2511         else
2512                 hintfile=''
2513         fi
2514 fi
2515 cd UU
2516 ;;
2517 *)
2518         echo " "
2519         echo "Fetching default answers from $config_sh..." >&4
2520         tmp_n="$n"
2521         tmp_c="$c"
2522         cd ..
2523         cp $config_sh config.sh 2>/dev/null
2524         chmod +w config.sh
2525         . ./config.sh
2526         cd UU
2527         cp ../config.sh .
2528         n="$tmp_n"
2529         c="$tmp_c"
2530         hint=previous
2531         ;;
2532 esac
2533 test "$override" && . ./optdef.sh
2534 myuname="$newmyuname"
2535
2536 : Restore computed paths
2537 for file in $loclist $trylist; do
2538         eval $file="\$_$file"
2539 done
2540
2541 cat << EOM
2542
2543 Configure uses the operating system name and version to set some defaults.
2544 The default value is probably right if the name rings a bell. Otherwise,
2545 since spelling matters for me, either accept the default or answer "none"
2546 to leave it blank.
2547
2548 EOM
2549 case "$osname" in
2550         ''|' ')
2551                 case "$hintfile" in
2552                 ''|' '|none) dflt=none ;;
2553                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2554                 esac
2555                 ;;
2556         *) dflt="$osname" ;;
2557 esac
2558 rp="Operating system name?"
2559 . ./myread
2560 case "$ans" in
2561 none)  osname='' ;;
2562 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2563 esac
2564 echo " "
2565 case "$osvers" in
2566         ''|' ')
2567                 case "$hintfile" in
2568                 ''|' '|none) dflt=none ;;
2569                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2570                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2571                         case "$dflt" in
2572                         ''|' ') dflt=none ;;
2573                         esac
2574                         ;;
2575                 esac
2576                 ;;
2577         *) dflt="$osvers" ;;
2578 esac
2579 rp="Operating system version?"
2580 . ./myread
2581 case "$ans" in
2582 none)  osvers='' ;;
2583 *) osvers="$ans" ;;
2584 esac
2585
2586
2587 . ./posthint.sh
2588
2589 : who configured the system
2590 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2591 cf_by=`(logname) 2>/dev/null`
2592 case "$cf_by" in
2593 "")
2594         cf_by=`(whoami) 2>/dev/null`
2595         case "$cf_by" in
2596         "") cf_by=unknown ;;
2597         esac ;;
2598 esac
2599
2600 : set up the script used to warn in case of inconsistency
2601 cat <<EOS >whoa
2602 $startsh
2603 EOS
2604 cat <<'EOSC' >>whoa
2605 dflt=y
2606 echo " "
2607 echo "*** WHOA THERE!!! ***" >&4
2608 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2609 rp="    Keep the $hint value?"
2610 . ./myread
2611 case "$ans" in
2612 y) td=$was; tu=$was;;
2613 esac
2614 EOSC
2615
2616 : function used to set $1 to $val
2617 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2618 case "$val$was" in
2619 $define$undef) . ./whoa; eval "$var=\$td";;
2620 $undef$define) . ./whoa; eval "$var=\$tu";;
2621 *) eval "$var=$val";;
2622 esac'
2623
2624 case "$usethreads" in
2625 $define|true|[yY]*)     dflt='y';;
2626 *) dflt='n';;
2627 esac
2628 cat <<EOM
2629
2630 Perl can be built to take advantage of threads on some systems.
2631 To do so, Configure can be run with -Dusethreads.
2632
2633 Note that threading is a highly experimental feature, and
2634 some known race conditions still remain.  If you choose to try
2635 it, be very sure to not actually deploy it for production
2636 purposes.  README.threads has more details, and is required
2637 reading if you enable threads.
2638
2639 If this doesn't make any sense to you, just accept the default '$dflt'.
2640 EOM
2641 rp='Build a threading Perl?'
2642 . ./myread
2643 case "$ans" in
2644 y|Y)    val="$define" ;;
2645 *)      val="$undef" ;;
2646 esac
2647 set usethreads
2648 eval $setvar
2649
2650 case "$usethreads" in
2651 $define)
2652         $cat <<EOM
2653
2654 As of 5.5.640, Perl has two different internal threading implementations,
2655 the 5.005 version (5005threads) and an interpreter-based version
2656 (ithreads) that has one interpreter per thread.  Both are very 
2657 experimental.  This arrangement exists to help developers work out
2658 which one is better.
2659
2660 If you're a casual user, you probably don't want interpreter-threads
2661 at this time.  There doesn't yet exist a way to create threads from
2662 within Perl in this model, i.e., "use Thread;" will NOT work.
2663 EOM
2664         : Default to ithreads unless overridden on command line or with
2665         : old config.sh
2666         dflt='y'
2667         case "$use5005threads" in
2668                 $define|true|[yY]*) dflt='n';;
2669         esac
2670         case "$useithreads" in
2671                 $undef|false|[nN]*) dflt='n';;
2672         esac
2673         rp='Use interpreter-based ithreads?'
2674         . ./myread
2675         case "$ans" in
2676         y|Y)    val="$define" ;;
2677         *)      val="$undef" ;;
2678         esac
2679         set useithreads
2680         eval $setvar
2681         : Now set use5005threads to the opposite value.
2682         case "$useithreads" in
2683         $define) val="$undef" ;;
2684         *) val="$define" ;;
2685         esac
2686         set use5005threads
2687         eval $setvar
2688         ;;
2689 *)
2690         useithreads="$undef"
2691         use5005threads="$undef"
2692         ;;
2693 esac
2694
2695 case "$d_oldpthreads" in
2696 '')     : Configure tests would be welcome here.  For now, assume undef.
2697         val="$undef" ;;
2698 *)      val="$d_oldpthreads" ;;
2699 esac
2700 set d_oldpthreads
2701 eval $setvar
2702
2703
2704 case "$usethreads" in
2705 "$define"|true|[yY]*)
2706 : Look for a hint-file generated 'call-back-unit'.  If the
2707 : user has specified that a threading perl is to be built,
2708 : we may need to set or change some other defaults.
2709         if $test -f usethreads.cbu; then
2710                 echo "Your platform has some specific hints for threaded builds, using them..."
2711                 . ./usethreads.cbu
2712         else
2713                 $cat <<EOM
2714 (Your platform doesn't have any specific hints for threaded builds.
2715  Assuming POSIX threads, then.)
2716 EOM
2717         fi
2718         ;;
2719 esac
2720
2721 cat <<EOM
2722
2723 Perl can be built so that multiple Perl interpreters can coexist
2724 within the same Perl executable.
2725 EOM
2726
2727 case "$useithreads" in
2728 $define)
2729         cat <<EOM
2730 This multiple interpreter support is required for interpreter-based threads.
2731 EOM
2732         val="$define"
2733         ;;
2734 *)      case "$usemultiplicity" in
2735         $define|true|[yY]*)     dflt='y';;
2736         *) dflt='n';;
2737         esac
2738         echo " "
2739         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2740         rp='Build Perl for multiplicity?'
2741         . ./myread
2742         case "$ans" in
2743         y|Y)    val="$define" ;;
2744         *)      val="$undef" ;;
2745         esac
2746         ;;
2747 esac
2748 set usemultiplicity
2749 eval $setvar
2750
2751 : determine where manual pages are on this system
2752 echo " "
2753 case "$sysman" in
2754 '') 
2755         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2756         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2757         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2758         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2759         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2760         sysman=`./loc . /usr/man/man1 $syspath`
2761         ;;
2762 esac
2763 if $test -d "$sysman"; then
2764         echo "System manual is in $sysman." >&4
2765 else
2766         echo "Could not find manual pages in source form." >&4
2767 fi
2768
2769 : see what memory models we can support
2770 case "$models" in
2771 '')
2772         $cat >pdp11.c <<'EOP'
2773 int main() {
2774 #ifdef pdp11
2775         exit(0);
2776 #else
2777         exit(1);
2778 #endif
2779 }
2780 EOP
2781         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2782         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2783                 dflt='unsplit split'
2784         else
2785                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2786                 case "$tans" in
2787                 X) dflt='none';;
2788                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2789                                 dflt='small'
2790                         else
2791                                 dflt=''
2792                         fi
2793                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2794                                 dflt="$dflt medium"
2795                         fi
2796                         if $test -d /lib/large || $test -d /usr/lib/large; then
2797                                 dflt="$dflt large"
2798                         fi
2799                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2800                                 dflt="$dflt huge"
2801                         fi
2802                 esac
2803         fi;;
2804 *) dflt="$models";;
2805 esac
2806 $cat <<EOM
2807  
2808 Some systems have different model sizes.  On most systems they are called
2809 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2810 split.  If your system doesn't support different memory models, say "none".
2811 If you wish to force everything to one memory model, say "none" here and
2812 put the appropriate flags later when it asks you for other cc and ld flags.
2813 Venix systems may wish to put "none" and let the compiler figure things out.
2814 (In the following question multiple model names should be space separated.)
2815
2816 The default for most systems is "none".
2817
2818 EOM
2819 rp="Which memory models are supported?"
2820 . ./myread
2821 models="$ans"
2822
2823 case "$models" in
2824 none)
2825         small=''
2826         medium=''
2827         large=''
2828         huge=''
2829         unsplit=''
2830         split=''
2831         ;;
2832 *split)
2833         case "$split" in
2834         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2835                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2836                         dflt='-i'
2837                 else
2838                         dflt='none'
2839                 fi;;
2840         *) dflt="$split";;
2841         esac
2842         rp="What flag indicates separate I and D space?"
2843         . ./myread
2844         tans="$ans"
2845         case "$tans" in
2846         none) tans='';;
2847         esac
2848         split="$tans"
2849         unsplit='';;
2850 *large*|*small*|*medium*|*huge*)
2851         case "$models" in
2852         *large*)
2853                 case "$large" in
2854                 '') dflt='-Ml';;
2855                 *) dflt="$large";;
2856                 esac
2857         rp="What flag indicates large model?"
2858         . ./myread
2859         tans="$ans"
2860         case "$tans" in
2861         none) tans='';
2862         esac
2863         large="$tans";;
2864         *) large='';;
2865         esac
2866         case "$models" in
2867         *huge*) case "$huge" in
2868                 '') dflt='-Mh';;
2869                 *) dflt="$huge";;
2870                 esac
2871                 rp="What flag indicates huge model?"
2872                 . ./myread
2873                 tans="$ans"
2874                 case "$tans" in
2875                 none) tans='';
2876                 esac
2877                 huge="$tans";;
2878         *) huge="$large";;
2879         esac
2880         case "$models" in
2881         *medium*) case "$medium" in
2882                 '') dflt='-Mm';;
2883                 *) dflt="$medium";;
2884                 esac
2885                 rp="What flag indicates medium model?"
2886                 . ./myread
2887                 tans="$ans"
2888                 case "$tans" in
2889                 none) tans='';
2890                 esac
2891                 medium="$tans";;
2892         *) medium="$large";;
2893         esac
2894         case "$models" in
2895         *small*) case "$small" in
2896                 '') dflt='none';;
2897                 *) dflt="$small";;
2898                 esac
2899                 rp="What flag indicates small model?"
2900                 . ./myread
2901                 tans="$ans"
2902                 case "$tans" in
2903                 none) tans='';
2904                 esac
2905                 small="$tans";;
2906         *) small='';;
2907         esac
2908         ;;
2909 *)
2910         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2911         ;;
2912 esac
2913 $rm -f pdp11.* pdp11
2914
2915 : make some quick guesses about what we are up against
2916 echo " "
2917 $echo $n "Hmm...  $c"
2918 echo exit 1 >bsd
2919 echo exit 1 >usg
2920 echo exit 1 >v7
2921 echo exit 1 >osf1
2922 echo exit 1 >eunice
2923 echo exit 1 >xenix
2924 echo exit 1 >venix
2925 echo exit 1 >os2
2926 d_bsd="$undef"
2927 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2928 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2929 then
2930         echo "Looks kind of like an OSF/1 system, but we'll see..."
2931         echo exit 0 >osf1
2932 elif test `echo abc | tr a-z A-Z` = Abc ; then
2933         xxx=`./loc addbib blurfl $pth`
2934         if $test -f $xxx; then
2935         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2936                 echo exit 0 >bsd
2937                 echo exit 0 >usg
2938         else
2939                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2940                         echo "Looks kind of like an extended USG system, but we'll see..."
2941                 else
2942                         echo "Looks kind of like a USG system, but we'll see..."
2943                 fi
2944                 echo exit 0 >usg
2945         fi
2946 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2947         echo "Looks kind of like a BSD system, but we'll see..."
2948         d_bsd="$define"
2949         echo exit 0 >bsd
2950 else
2951         echo "Looks kind of like a Version 7 system, but we'll see..."
2952         echo exit 0 >v7
2953 fi
2954 case "$eunicefix" in
2955 *unixtovms*)
2956         $cat <<'EOI'
2957 There is, however, a strange, musty smell in the air that reminds me of
2958 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2959 EOI
2960         echo exit 0 >eunice
2961         d_eunice="$define"
2962 : it so happens the Eunice I know will not run shell scripts in Unix format
2963         ;;
2964 *)
2965         echo " "
2966         echo "Congratulations.  You aren't running Eunice."
2967         d_eunice="$undef"
2968         ;;
2969 esac
2970 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2971 case "$p_" in
2972 :) ;;
2973 *)
2974         $cat <<'EOI'
2975 I have the feeling something is not exactly right, however...don't tell me...
2976 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2977 EOI
2978         echo exit 0 >os2
2979         ;;
2980 esac
2981 if test -f /xenix; then
2982         echo "Actually, this looks more like a XENIX system..."
2983         echo exit 0 >xenix
2984         d_xenix="$define"
2985 else
2986         echo " "
2987         echo "It's not Xenix..."
2988         d_xenix="$undef"
2989 fi
2990 chmod +x xenix
2991 $eunicefix xenix
2992 if test -f /venix; then
2993         echo "Actually, this looks more like a VENIX system..."
2994         echo exit 0 >venix
2995 else
2996         echo " "
2997         if ./xenix; then
2998                 : null
2999         else
3000                 echo "Nor is it Venix..."
3001         fi
3002 fi
3003 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3004 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3005 $rm -f foo
3006
3007 : see if we need a special compiler
3008 echo " "
3009 if ./usg; then
3010         case "$cc" in
3011         '') case "$Mcc" in
3012                 /*) dflt='Mcc';;
3013                 *) case "$large" in
3014                         -M*) dflt='cc';;
3015                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3016                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3017                                                 dflt='cc'
3018                                         else
3019                                                 dflt='cc -M'
3020                                         fi
3021                                 else
3022                                         dflt='cc'
3023                                 fi;;
3024                         esac;;
3025                 esac;;
3026         *)  dflt="$cc";;
3027         esac
3028         case "$dflt" in
3029         *M*)    $cat <<'EOM'
3030 On some older systems the default C compiler will not resolve multiple global
3031 references that happen to have the same name.  On some such systems the "Mcc"
3032 command may be used to force these to be resolved.  On other systems a "cc -M"
3033 command is required.  (Note that the -M flag on other systems indicates a
3034 memory model to use!) If you have the Gnu C compiler, you might wish to use
3035 that instead.
3036
3037 EOM
3038         ;;
3039         esac
3040         rp="Use which C compiler?"
3041         . ./myread
3042         cc="$ans"
3043 else
3044         case "$cc" in
3045         '') dflt=cc;;
3046         *) dflt="$cc";;
3047         esac
3048         rp="Use which C compiler?"
3049         . ./myread
3050         cc="$ans"
3051 fi
3052 : Look for a hint-file generated 'call-back-unit'.  Now that the
3053 : user has specified the compiler, we may need to set or change some
3054 : other defaults.
3055 if $test -f cc.cbu; then
3056     . ./cc.cbu
3057 fi
3058 echo " "
3059 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3060 $cat >gccvers.c <<EOM
3061 #include <stdio.h>
3062 int main() {
3063 #ifdef __GNUC__
3064 #ifdef __VERSION__
3065         printf("%s\n", __VERSION__);
3066 #else
3067         printf("%s\n", "1");
3068 #endif
3069 #endif
3070         exit(0);
3071 }
3072 EOM
3073 if $cc $ldflags -o gccvers gccvers.c; then
3074         gccversion=`./gccvers`
3075         case "$gccversion" in
3076         '') echo "You are not using GNU cc." ;;
3077         *)  echo "You are using GNU cc $gccversion."
3078             ;;
3079         esac
3080 else
3081         echo " "
3082         echo "*** WHOA THERE!!! ***" >&4
3083         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3084         case "$knowitall" in
3085         '')
3086         echo "    You'd better start hunting for one and let me know about it." >&4
3087                 exit 1
3088                 ;;
3089         esac
3090 fi
3091 $rm -f gccvers*
3092 case "$gccversion" in
3093 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3094 esac
3095
3096 : decide how portable to be.  Allow command line overrides.
3097 case "$d_portable" in
3098 "$undef") ;;
3099 *)      d_portable="$define" ;;
3100 esac
3101
3102 : set up shell script to do ~ expansion
3103 cat >filexp <<EOSS
3104 $startsh
3105 : expand filename
3106 case "\$1" in
3107  ~/*|~)
3108         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3109         ;;
3110  ~*)
3111         if $test -f /bin/csh; then
3112                 /bin/csh -f -c "glob \$1"
3113                 failed=\$?
3114                 echo ""
3115                 exit \$failed
3116         else
3117                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3118                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3119                 if $test ! -d "\$dir"; then
3120                         me=\`basename \$0\`
3121                         echo "\$me: can't locate home directory for: \$name" >&2
3122                         exit 1
3123                 fi
3124                 case "\$1" in
3125                 */*)
3126                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3127                         ;;
3128                 *)
3129                         echo \$dir
3130                         ;;
3131                 esac
3132         fi
3133         ;;
3134 *)
3135         echo \$1
3136         ;;
3137 esac
3138 EOSS
3139 chmod +x filexp
3140 $eunicefix filexp
3141
3142 : now set up to get a file name
3143 cat <<EOS >getfile
3144 $startsh
3145 EOS
3146 cat <<'EOSC' >>getfile
3147 tilde=''
3148 fullpath=''
3149 already=''
3150 skip=''
3151 none_ok=''
3152 exp_file=''
3153 nopath_ok=''
3154 orig_rp="$rp"
3155 orig_dflt="$dflt"
3156 case "$gfpth" in
3157 '') gfpth='.' ;;
3158 esac
3159
3160 case "$fn" in
3161 *\(*)
3162         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3163         fn=`echo $fn | sed 's/(.*)//'`
3164         ;;
3165 esac
3166
3167 case "$fn" in
3168 *:*)
3169         loc_file=`expr $fn : '.*:\(.*\)'`
3170         fn=`expr $fn : '\(.*\):.*'`
3171         ;;
3172 esac
3173
3174 case "$fn" in
3175 *~*) tilde=true;;
3176 esac
3177 case "$fn" in
3178 */*) fullpath=true;;
3179 esac
3180 case "$fn" in
3181 *+*) skip=true;;
3182 esac
3183 case "$fn" in
3184 *n*) none_ok=true;;
3185 esac
3186 case "$fn" in
3187 *e*) exp_file=true;;
3188 esac
3189 case "$fn" in
3190 *p*) nopath_ok=true;;
3191 esac
3192
3193 case "$fn" in
3194 *f*) type='File';;
3195 *d*) type='Directory';;
3196 *l*) type='Locate';;
3197 esac
3198
3199 what="$type"
3200 case "$what" in
3201 Locate) what='File';;
3202 esac
3203
3204 case "$exp_file" in
3205 '')
3206         case "$d_portable" in
3207         "$define") ;;
3208         *) exp_file=true;;
3209         esac
3210         ;;
3211 esac
3212
3213 cd ..
3214 while test "$type"; do
3215         redo=''
3216         rp="$orig_rp"
3217         dflt="$orig_dflt"
3218         case "$tilde" in
3219         true) rp="$rp (~name ok)";;
3220         esac
3221         . UU/myread
3222         if test -f UU/getfile.ok && \
3223                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3224         then
3225                 value="$ans"
3226                 ansexp="$ans"
3227                 break
3228         fi
3229         case "$ans" in
3230         none)
3231                 value=''
3232                 ansexp=''
3233                 case "$none_ok" in
3234                 true) type='';;
3235                 esac
3236                 ;;
3237         *)
3238                 case "$tilde" in
3239                 '') value="$ans"
3240                         ansexp="$ans";;
3241                 *)
3242                         value=`UU/filexp $ans`
3243                         case $? in
3244                         0)
3245                                 if test "$ans" != "$value"; then
3246                                         echo "(That expands to $value on this system.)"
3247                                 fi
3248                                 ;;
3249                         *) value="$ans";;
3250                         esac
3251                         ansexp="$value"
3252                         case "$exp_file" in
3253                         '') value="$ans";;
3254                         esac
3255                         ;;
3256                 esac
3257                 case "$fullpath" in
3258                 true)
3259                         case "$ansexp" in
3260                         /*) value="$ansexp" ;;
3261                         *)
3262                                 redo=true
3263                                 case "$already" in
3264                                 true)
3265                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3266                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3267                                         ;;
3268                                 *)
3269                                 echo "Please give a full path name, starting with slash." >&4
3270                                         case "$tilde" in
3271                                         true)
3272                                 echo "Note that using ~name is ok provided it expands well." >&4
3273                                                 already=true
3274                                                 ;;
3275                                         esac
3276                                 esac
3277                                 ;;
3278                         esac
3279                         ;;
3280                 esac
3281                 case "$redo" in
3282                 '')
3283                         case "$type" in
3284                         File)
3285                                 for fp in $gfpth; do
3286                                         if test "X$fp" = X.; then
3287                                             pf="$ansexp"
3288                                         else    
3289                                             pf="$fp/$ansexp"
3290                                         fi
3291                                         if test -f "$pf"; then
3292                                                 type=''
3293                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3294                                         then
3295                                                 echo "($value is not a plain file, but that's ok.)"
3296                                                 type=''
3297                                         fi
3298                                         if test X"$type" = X; then
3299                                             value="$pf"
3300                                             break
3301                                         fi
3302                                 done
3303                                 ;;
3304                         Directory)
3305                                 for fp in $gfpth; do
3306                                         if test "X$fp" = X.; then
3307                                             pf="$ansexp"
3308                                         else    
3309                                             pf="$fp/$ansexp"
3310                                         fi
3311                                         if test -d "$pf"; then
3312                                                 type=''
3313                                                 value="$pf"
3314                                                 break
3315                                         fi
3316                                 done
3317                                 ;;
3318                         Locate)
3319                                 if test -d "$ansexp"; then
3320                                         echo "(Looking for $loc_file in directory $value.)"
3321                                         value="$value/$loc_file"
3322                                         ansexp="$ansexp/$loc_file"
3323                                 fi
3324                                 if test -f "$ansexp"; then
3325                                         type=''
3326                                 fi
3327                                 case "$nopath_ok" in
3328                                 true)   case "$value" in
3329                                         */*) ;;
3330                                         *)      echo "Assuming $value will be in people's path."
3331                                                 type=''
3332                                                 ;;
3333                                         esac
3334                                         ;;
3335                                 esac
3336                                 ;;
3337                         esac
3338
3339                         case "$skip" in
3340                         true) type='';
3341                         esac
3342
3343                         case "$type" in
3344                         '') ;;
3345                         *)
3346                                 if test "$fastread" = yes; then
3347                                         dflt=y
3348                                 else
3349                                         dflt=n
3350                                 fi
3351                                 rp="$what $value doesn't exist.  Use that name anyway?"
3352                                 . UU/myread
3353                                 dflt=''
3354                                 case "$ans" in
3355                                 y*) type='';;
3356                                 *) echo " ";;
3357                                 esac
3358                                 ;;
3359                         esac
3360                         ;;
3361                 esac
3362                 ;;
3363         esac
3364 done
3365 cd UU
3366 ans="$value"
3367 rp="$orig_rp"
3368 dflt="$orig_dflt"
3369 rm -f getfile.ok
3370 test "X$gfpthkeep" != Xy && gfpth=""
3371 EOSC
3372
3373 : What should the include directory be ?
3374 echo " "
3375 $echo $n "Hmm...  $c"
3376 dflt='/usr/include'
3377 incpath=''
3378 mips_type=''
3379 if $test -f /bin/mips && /bin/mips; then
3380         echo "Looks like a MIPS system..."
3381         $cat >usr.c <<'EOCP'
3382 #ifdef SYSTYPE_BSD43
3383 /bsd43
3384 #endif
3385 EOCP
3386         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3387                 dflt='/bsd43/usr/include'
3388                 incpath='/bsd43'
3389                 mips_type='BSD 4.3'
3390         else
3391                 mips_type='System V'
3392         fi
3393         $rm -f usr.c usr.out
3394         echo "and you're compiling with the $mips_type compiler and libraries."
3395         xxx_prompt=y
3396         echo "exit 0" >mips
3397 else
3398         echo "Doesn't look like a MIPS system."
3399         xxx_prompt=n
3400         echo "exit 1" >mips
3401 fi
3402 chmod +x mips
3403 $eunicefix mips
3404 case "$usrinc" in
3405 '') ;;
3406 *) dflt="$usrinc";;
3407 esac
3408 case "$xxx_prompt" in
3409 y)      fn=d/
3410         echo " "
3411         rp='Where are the include files you want to use?'
3412         . ./getfile
3413         usrinc="$ans"
3414         ;;
3415 *)      usrinc="$dflt"
3416         ;;
3417 esac
3418
3419 : see how we invoke the C preprocessor
3420 echo " "
3421 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3422 cat <<'EOT' >testcpp.c
3423 #define ABC abc
3424 #define XYZ xyz
3425 ABC.XYZ
3426 EOT
3427 cd ..
3428 if test ! -f cppstdin; then
3429         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3430                 # AIX cc -E doesn't show the absolute headerfile
3431                 # locations but we'll cheat by using the -M flag.
3432                 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
3433         else
3434                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3435         fi
3436 else
3437         echo "Keeping your $hint cppstdin wrapper."
3438 fi
3439 chmod 755 cppstdin
3440 wrapper=`pwd`/cppstdin
3441 ok='false'
3442 cd UU
3443
3444 if $test "X$cppstdin" != "X" && \
3445         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3446         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3447 then
3448         echo "You used to use $cppstdin $cppminus so we'll use that again."
3449         case "$cpprun" in
3450         '') echo "But let's see if we can live without a wrapper..." ;;
3451         *)
3452                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3453                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3454                 then
3455                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3456                         ok='true'
3457                 else
3458                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3459                 fi
3460                 ;;
3461         esac
3462 else
3463         case "$cppstdin" in
3464         '') ;;
3465         *)
3466                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3467                 ;;
3468         esac
3469 fi
3470
3471 if $ok; then
3472         : nothing
3473 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3474         $cc -E <testcpp.c >testcpp.out 2>&1; \
3475         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3476         echo "Yup, it does."
3477         x_cpp="$cc -E"
3478         x_minus='';
3479 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3480         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3481         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3482         echo "Yup, it does."
3483         x_cpp="$cc -E"
3484         x_minus='-';
3485 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3486         $cc -P <testcpp.c >testcpp.out 2>&1; \
3487         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3488         echo "Yipee, that works!"
3489         x_cpp="$cc -P"
3490         x_minus='';
3491 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3492         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3493         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3494         echo "At long last!"
3495         x_cpp="$cc -P"
3496         x_minus='-';
3497 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3498         $cpp <testcpp.c >testcpp.out 2>&1; \
3499         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3500         echo "It works!"
3501         x_cpp="$cpp"
3502         x_minus='';
3503 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3504         $cpp - <testcpp.c >testcpp.out 2>&1; \
3505         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3506         echo "Hooray, it works!  I was beginning to wonder."
3507         x_cpp="$cpp"
3508         x_minus='-';
3509 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3510         $wrapper <testcpp.c >testcpp.out 2>&1; \
3511         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3512         x_cpp="$wrapper"
3513         x_minus=''
3514         echo "Eureka!"
3515 else
3516         dflt=''
3517         rp="No dice.  I can't find a C preprocessor.  Name one:"
3518         . ./myread
3519         x_cpp="$ans"
3520         x_minus=''
3521         $x_cpp <testcpp.c >testcpp.out 2>&1
3522         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3523                 echo "OK, that will do." >&4
3524         else
3525 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3526                 exit 1
3527         fi
3528 fi
3529
3530 case "$ok" in
3531 false)
3532         cppstdin="$x_cpp"
3533         cppminus="$x_minus"
3534         cpprun="$x_cpp"
3535         cpplast="$x_minus"
3536         set X $x_cpp
3537         shift
3538         case "$1" in
3539         "$cpp")
3540                 echo "Perhaps can we force $cc -E using a wrapper..."
3541                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3542                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3543                 then
3544                         echo "Yup, we can."
3545                         cppstdin="$wrapper"
3546                         cppminus='';
3547                 else
3548                         echo "Nope, we'll have to live without it..."
3549                 fi
3550                 ;;
3551         esac
3552         case "$cpprun" in
3553         "$wrapper")
3554                 cpprun=''
3555                 cpplast=''
3556                 ;;
3557         esac
3558         ;;
3559 esac
3560
3561 case "$cppstdin" in
3562 "$wrapper"|'cppstdin') ;;
3563 *) $rm -f $wrapper;;
3564 esac
3565 $rm -f testcpp.c testcpp.out
3566
3567 : Set private lib path
3568 case "$plibpth" in
3569 '') if ./mips; then
3570                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3571         fi;;
3572 esac
3573 case "$libpth" in
3574 ' ') dlist='';;
3575 '') dlist="$loclibpth $plibpth $glibpth";;
3576 *) dlist="$libpth";;
3577 esac
3578
3579 : Now check and see which directories actually exist, avoiding duplicates
3580 libpth=''
3581 for xxx in $dlist
3582 do
3583     if $test -d $xxx; then
3584                 case " $libpth " in
3585                 *" $xxx "*) ;;
3586                 *) libpth="$libpth $xxx";;
3587                 esac
3588     fi
3589 done
3590 $cat <<'EOM'
3591
3592 Some systems have incompatible or broken versions of libraries.  Among
3593 the directories listed in the question below, please remove any you
3594 know not to be holding relevant libraries, and add any that are needed.
3595 Say "none" for none.
3596
3597 EOM
3598 case "$libpth" in
3599 '') dflt='none';;
3600 *)
3601         set X $libpth
3602         shift
3603         dflt=${1+"$@"}
3604         ;;
3605 esac
3606 rp="Directories to use for library searches?"
3607 . ./myread
3608 case "$ans" in
3609 none) libpth=' ';;
3610 *) libpth="$ans";;
3611 esac
3612
3613 : compute shared library extension
3614 case "$so" in
3615 '')
3616         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3617                 dflt='sl'
3618         else
3619                 dflt='so'
3620         fi
3621         ;;
3622 *) dflt="$so";;
3623 esac
3624 $cat <<EOM
3625
3626 On some systems, shared libraries may be available.  Answer 'none' if
3627 you want to suppress searching of shared libraries for the remainder
3628 of this configuration.
3629
3630 EOM
3631 rp='What is the file extension used for shared libraries?'
3632 . ./myread
3633 so="$ans"
3634
3635 : Define several unixisms.
3636 : Hints files or command line option can be used to override them.
3637 : The convoluted testing is in case hints files set either the old
3638 : or the new name.
3639 case "$_exe" in
3640 '')     case "$exe_ext" in
3641     '') ;;
3642         *)      _exe="$exe_ext" ;;
3643         esac
3644         ;;
3645 esac
3646 case "$_a" in
3647 '')     case "$lib_ext" in
3648     '') _a='.a';;
3649         *)      _a="$lib_ext" ;;
3650         esac
3651         ;;
3652 esac
3653 case "$_o" in
3654 '') case "$obj_ext" in
3655         '')     _o='.o';;
3656         *)      _o="$obj_ext";;
3657         esac
3658         ;;
3659 esac
3660 case "$p_" in
3661 '') case "$path_sep" in
3662         '')     p_=':';;
3663         *)      p_="$path_sep";;
3664         esac
3665         ;;
3666 esac
3667 exe_ext=$_exe
3668 lib_ext=$_a
3669 obj_ext=$_o
3670 path_sep=$p_
3671
3672 : Which makefile gets called first.  This is used by make depend.
3673 case "$firstmakefile" in
3674 '') firstmakefile='makefile';;
3675 esac
3676
3677 case "$usesocks" in
3678 $define|true|[yY]*)     dflt='y';;
3679 *) dflt='n';;
3680 esac
3681 cat <<EOM
3682
3683 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3684 Configure must be run with -Dusesocks.
3685
3686 If this doesn't make any sense to you, just accept the default '$dflt'.
3687 EOM
3688 rp='Build Perl for SOCKS?'
3689 . ./myread
3690 case "$ans" in
3691 y|Y)    val="$define" ;;     
3692 *)      val="$undef" ;;
3693 esac
3694 set usesocks
3695 eval $setvar
3696
3697 : Looking for optional libraries
3698 echo " "
3699 echo "Checking for optional libraries..." >&4
3700 case "$libs" in
3701 ' '|'') dflt='';;
3702 *) dflt="$libs";;
3703 esac
3704 case "$libswanted" in
3705 '') libswanted='c_s';;
3706 esac
3707 case "$usesocks" in
3708 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3709 esac
3710 libsfound=''
3711 libsfiles=''
3712 libsdirs=''
3713 libspath=''
3714 for thisdir in $libpth $xlibpth; do
3715   test -d $thisdir && libspath="$libspath $thisdir"
3716 done
3717 for thislib in $libswanted; do
3718         for thisdir in $libspath; do
3719             xxx=''
3720             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3721                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3722                 $test -f "$xxx" && eval $libscheck
3723                 $test -f "$xxx" && libstyle=shared
3724             fi
3725             if test ! -f "$xxx"; then
3726                 xxx=$thisdir/lib$thislib.$so
3727                 $test -f "$xxx" && eval $libscheck
3728                 $test -f "$xxx" && libstyle=shared
3729             fi  
3730             if test ! -f "$xxx"; then
3731                 xxx=$thisdir/lib$thislib$_a
3732                 $test -f "$xxx" && eval $libscheck
3733                 $test -f "$xxx" && libstyle=static
3734             fi
3735             if test ! -f "$xxx"; then
3736                 xxx=$thisdir/$thislib$_a
3737                 $test -f "$xxx" && eval $libscheck
3738                 $test -f "$xxx" && libstyle=static
3739             fi
3740             if test ! -f "$xxx"; then
3741                 xxx=$thisdir/lib${thislib}_s$_a
3742                 $test -f "$xxx" && eval $libscheck
3743                 $test -f "$xxx" && libstyle=static
3744                 $test -f "$xxx" && thislib=${thislib}_s
3745             fi
3746             if test ! -f "$xxx"; then
3747                 xxx=$thisdir/Slib$thislib$_a
3748                 $test -f "$xxx" && eval $libscheck
3749                 $test -f "$xxx" && libstyle=static
3750             fi
3751             if $test -f "$xxx"; then
3752                 case "$libstyle" in
3753                 shared) echo "Found -l$thislib (shared)." ;;
3754                 static) echo "Found -l$thislib." ;;
3755                 *)      echo "Found -l$thislib ($libstyle)." ;;
3756                 esac
3757                 case " $dflt " in
3758                 *"-l$thislib "*);;
3759                 *) dflt="$dflt -l$thislib"
3760                    libsfound="$libsfound $xxx"
3761                    yyy=`basename $xxx`
3762                    libsfiles="$libsfiles $yyy"
3763                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3764                    case " $libsdirs " in
3765                    *" $yyy "*) ;;
3766                    *) libsdirs="$libsdirs $yyy" ;;
3767                    esac
3768                    ;;
3769                 esac
3770                 break
3771             fi  
3772         done
3773         if $test ! -f "$xxx"; then
3774             echo "No -l$thislib."
3775         fi
3776 done
3777 set X $dflt
3778 shift
3779 dflt="$*"
3780 case "$libs" in
3781 '') dflt="$dflt";;
3782 *) dflt="$libs";;
3783 esac
3784 case "$dflt" in
3785 ' '|'') dflt='none';;
3786 esac
3787
3788 $cat <<EOM
3789
3790 In order to compile $package on your machine, a number of libraries
3791 are usually needed.  Include any other special libraries here as well.
3792 Say "none" for none.  The default list is almost always right.
3793 EOM
3794
3795 echo " "
3796 rp="What libraries to use?"
3797 . ./myread
3798 case "$ans" in
3799 none) libs=' ';;
3800 *) libs="$ans";;
3801 esac
3802
3803 : determine optimization, if desired, or use for debug flag also
3804 case "$optimize" in
3805 ' '|$undef) dflt='none';;
3806 '') dflt='-O';;
3807 *) dflt="$optimize";;
3808 esac
3809 $cat <<EOH
3810
3811 By default, $package compiles with the -O flag to use the optimizer.
3812 Alternately, you might want to use the symbolic debugger, which uses
3813 the -g flag (on traditional Unix systems).  Either flag can be
3814 specified here.  To use neither flag, specify the word "none".
3815
3816 EOH
3817 rp="What optimizer/debugger flag should be used?"
3818 . ./myread
3819 optimize="$ans"
3820 case "$optimize" in
3821 'none') optimize=" ";;
3822 esac
3823
3824 dflt=''
3825 : We will not override a previous value, but we might want to
3826 : augment a hint file
3827 case "$hint" in
3828 default|recommended)
3829         case "$gccversion" in
3830         1*) dflt='-fpcc-struct-return' ;;
3831         esac
3832         case "$optimize" in
3833         *-g*) dflt="$dflt -DDEBUGGING";;
3834         esac
3835         case "$gccversion" in
3836         2*) if test -d /etc/conf/kconfig.d &&
3837                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3838                 then
3839                         dflt="$dflt -posix"
3840                 fi
3841                 ;;
3842         esac
3843         case "$gccversion" in
3844         1*) ;;
3845         2.[0-8]*) ;;
3846         ?*)     echo " "
3847                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3848                 echo 'int main(void) { return 0; }' > gcctest.c
3849                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3850                         echo "Yes, it does." 2>&1
3851                         case "$ccflags" in
3852                         *strict-aliasing*) 
3853                                 echo "Leaving current flags $ccflags alone." 2>&1
3854                                 ;;
3855                         *) dflt="$dflt -fno-strict-aliasing" ;;
3856                         esac
3857                 else
3858                         echo "Nope, it doesn't, but that's ok." 2>&1
3859                 fi
3860                 ;;
3861         esac
3862         ;;
3863 esac
3864
3865 case "$mips_type" in
3866 *BSD*|'') inclwanted="$locincpth $usrinc";;
3867 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3868 esac
3869 for thisincl in $inclwanted; do
3870         if $test -d $thisincl; then
3871                 if $test x$thisincl != x$usrinc; then
3872                         case "$dflt" in
3873                         *$thisincl*);;
3874                         *) dflt="$dflt -I$thisincl";;
3875                         esac
3876                 fi
3877         fi
3878 done
3879
3880 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3881         xxx=true;
3882 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3883         xxx=true;
3884 else
3885         xxx=false;
3886 fi;
3887 if $xxx; then
3888         case "$dflt" in
3889         *$2*);;
3890         *) dflt="$dflt -D$2";;
3891         esac;
3892 fi'
3893
3894 set signal.h LANGUAGE_C; eval $inctest
3895
3896 case "$usesocks" in
3897 $define)
3898         ccflags="$ccflags -DSOCKS"
3899         ;;
3900 esac
3901
3902 case "$hint" in
3903 default|recommended) dflt="$ccflags $dflt" ;;
3904 *) dflt="$ccflags";;
3905 esac
3906
3907 case "$dflt" in
3908 ''|' ') dflt=none;;
3909 esac
3910 $cat <<EOH
3911
3912 Your C compiler may want other flags.  For this question you should include
3913 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3914 but you should NOT include libraries or ld flags like -lwhatever.  If you
3915 want $package to honor its debug switch, you should include -DDEBUGGING here.
3916 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3917
3918 To use no flags, specify the word "none".
3919
3920 EOH
3921 set X $dflt
3922 shift
3923 dflt=${1+"$@"}
3924 rp="Any additional cc flags?"
3925 . ./myread
3926 case "$ans" in
3927 none) ccflags='';;
3928 *) ccflags="$ans";;
3929 esac
3930
3931 : the following weeds options from ccflags that are of no interest to cpp
3932 cppflags="$ccflags"
3933 case "$gccversion" in
3934 1*) cppflags="$cppflags -D__GNUC__"
3935 esac
3936 case "$mips_type" in
3937 '');;
3938 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3939 esac
3940 case "$cppflags" in
3941 '');;
3942 *)
3943         echo " "
3944         echo "Let me guess what the preprocessor flags are..." >&4
3945         set X $cppflags
3946         shift
3947         cppflags=''
3948         $cat >cpp.c <<'EOM'
3949 #define BLURFL foo
3950
3951 BLURFL xx LFRULB
3952 EOM
3953         previous=''
3954         for flag in $*
3955         do
3956                 case "$flag" in
3957                 -*) ftry="$flag";;
3958                 *) ftry="$previous $flag";;
3959                 esac
3960                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3961                         >cpp1.out 2>/dev/null && \
3962                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3963                         >cpp2.out 2>/dev/null && \
3964                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3965                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3966                 then
3967                         cppflags="$cppflags $ftry"
3968                         previous=''
3969                 else
3970                         previous="$flag"
3971                 fi
3972         done
3973         set X $cppflags
3974         shift
3975         cppflags=${1+"$@"}
3976         case "$cppflags" in
3977         *-*)  echo "They appear to be: $cppflags";;
3978         esac
3979         $rm -f cpp.c cpp?.out
3980         ;;
3981 esac
3982
3983 : flags used in final linking phase
3984 case "$ldflags" in
3985 '') if ./venix; then
3986                 dflt='-i -z'
3987         else
3988                 dflt=''
3989         fi
3990         case "$ccflags" in
3991         *-posix*) dflt="$dflt -posix" ;;
3992         esac
3993         ;;
3994 *) dflt="$ldflags";;
3995 esac
3996
3997 : Try to guess additional flags to pick up local libraries.
3998 for thislibdir in $libpth; do
3999         case " $loclibpth " in
4000         *" $thislibdir "*)
4001                 case "$dflt " in 
4002                 *"-L$thislibdir "*) ;;
4003                 *)  dflt="$dflt -L$thislibdir" ;;
4004                 esac
4005                 ;;
4006         esac
4007 done
4008
4009 case "$dflt" in
4010 '') dflt='none' ;;
4011 esac
4012
4013 $cat <<EOH
4014
4015 Your C linker may need flags.  For this question you should
4016 include -L/whatever and any other flags used by the C linker, but you
4017 should NOT include libraries like -lwhatever.
4018
4019 Make sure you include the appropriate -L/path flags if your C linker
4020 does not normally search all of the directories you specified above,
4021 namely
4022         $libpth
4023 To use no flags, specify the word "none".
4024
4025 EOH
4026
4027 rp="Any additional ld flags (NOT including libraries)?"
4028 . ./myread
4029 case "$ans" in
4030 none) ldflags='';;
4031 *) ldflags="$ans";;
4032 esac
4033 rmlist="$rmlist pdp11"
4034
4035 : coherency check
4036 echo " "
4037 echo "Checking your choice of C compiler and flags for coherency..." >&4
4038 $cat > try.c <<'EOF'
4039 #include <stdio.h>
4040 int main() { printf("Ok\n"); exit(0); }
4041 EOF
4042 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4043 shift
4044 $cat >try.msg <<'EOM'
4045 I've tried to compile and run the following simple program:
4046
4047 EOM
4048 $cat try.c >> try.msg
4049
4050 $cat >> try.msg <<EOM
4051
4052 I used the command:
4053
4054         $*
4055         ./try
4056
4057 and I got the following output:
4058
4059 EOM
4060 dflt=y
4061 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4062         if sh -c './try' >>try.msg 2>&1; then
4063                 xxx=`./try`
4064                 case "$xxx" in
4065                 "Ok") dflt=n ;;
4066                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4067                         case " $libs " in
4068                         *" -lsfio "*)
4069                                 cat >> try.msg <<'EOQS'
4070 If $libs contains -lsfio, and sfio is mis-configured, then it
4071 sometimes (apparently) runs and exits with a 0 status, but with no
4072 output!  It may have to do with sfio's use of _exit vs. exit.
4073
4074 EOQS
4075                                 rp="You have a big problem.  Shall I abort Configure"
4076                                 dflt=y
4077                                 ;;
4078                         esac
4079                         ;;
4080                 esac
4081         else
4082                 echo "The program compiled OK, but exited with status $?." >>try.msg
4083                 rp="You have a problem.  Shall I abort Configure"
4084                 dflt=y
4085         fi
4086 else
4087         echo "I can't compile the test program." >>try.msg
4088         rp="You have a BIG problem.  Shall I abort Configure"
4089         dflt=y
4090 fi
4091 case "$dflt" in
4092 y)
4093         $cat try.msg >&4
4094         case "$knowitall" in
4095         '')
4096                 echo "(The supplied flags or libraries might be incorrect.)"
4097                 ;;
4098         *) dflt=n;;
4099         esac
4100         echo " "
4101         . ./myread
4102         case "$ans" in
4103         n*|N*) ;;
4104         *)      echo "Ok.  Stopping Configure." >&4
4105                 exit 1
4106                 ;;
4107         esac
4108         ;;
4109 n) echo "OK, that should do.";;
4110 esac
4111 $rm -f try try.* core
4112
4113 : define an is-a-typedef? function
4114 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4115 case "$inclist" in
4116 "") inclist="sys/types.h";;
4117 esac;
4118 eval "varval=\$$var";
4119 case "$varval" in
4120 "")
4121         $rm -f temp.c;
4122         for inc in $inclist; do
4123                 echo "#include <$inc>" >>temp.c;
4124         done;
4125         echo "#ifdef $type" >> temp.c;
4126         echo "printf(\"We have $type\");" >> temp.c;
4127         echo "#endif" >> temp.c;
4128         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4129         if $contains $type temp.E >/dev/null 2>&1; then
4130                 eval "$var=\$type";
4131         else
4132                 eval "$var=\$def";
4133         fi;
4134         $rm -f temp.?;;
4135 *) eval "$var=\$varval";;
4136 esac'
4137
4138 : define an is-a-typedef? function that prompts if the type is not available.
4139 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4140 case "$inclist" in
4141 "") inclist="sys/types.h";;
4142 esac;
4143 eval "varval=\$$var";
4144 case "$varval" in
4145 "")
4146         $rm -f temp.c;
4147         for inc in $inclist; do
4148                 echo "#include <$inc>" >>temp.c;
4149         done;
4150         echo "#ifdef $type" >> temp.c;
4151         echo "printf(\"We have $type\");" >> temp.c;
4152         echo "#endif" >> temp.c;
4153         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4154         echo " " ;
4155         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4156         if $contains $type temp.E >/dev/null 2>&1; then
4157                 echo "$type found." >&4;
4158                 eval "$var=\$type";
4159         else
4160                 echo "$type NOT found." >&4;
4161                 dflt="$def";
4162                 . ./myread ;
4163                 eval "$var=\$ans";
4164         fi;
4165         $rm -f temp.?;;
4166 *) eval "$var=\$varval";;
4167 esac'
4168
4169 : define a shorthand compile call
4170 compile='
4171 mc_file=$1;
4172 shift;
4173 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4174 : define a shorthand compile call for compilations that should be ok.
4175 compile_ok='
4176 mc_file=$1;
4177 shift;
4178 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4179
4180 : check for lengths of integral types
4181 echo " "
4182 case "$intsize" in
4183 '')
4184         echo "Checking to see how big your integers are..." >&4
4185         $cat >intsize.c <<'EOCP'
4186 #include <stdio.h>
4187 int main()
4188 {
4189         printf("intsize=%d;\n", (int)sizeof(int));
4190         printf("longsize=%d;\n", (int)sizeof(long));
4191         printf("shortsize=%d;\n", (int)sizeof(short));
4192         exit(0);
4193 }
4194 EOCP
4195         set intsize
4196         if eval $compile_ok && ./intsize > /dev/null; then
4197                 eval `./intsize`
4198                 echo "Your integers are $intsize bytes long."
4199                 echo "Your long integers are $longsize bytes long."
4200                 echo "Your short integers are $shortsize bytes long."
4201         else
4202                 $cat >&4 <<EOM
4203 !
4204 Help! I can't compile and run the intsize test program: please enlighten me!
4205 (This is probably a misconfiguration in your system or libraries, and
4206 you really ought to fix it.  Still, I'll try anyway.)
4207 !
4208 EOM
4209                 dflt=4
4210                 rp="What is the size of an integer (in bytes)?"
4211                 . ./myread
4212                 intsize="$ans"
4213                 dflt=$intsize
4214                 rp="What is the size of a long integer (in bytes)?"
4215                 . ./myread
4216                 longsize="$ans"
4217                 dflt=2
4218                 rp="What is the size of a short integer (in bytes)?"
4219                 . ./myread
4220                 shortsize="$ans"
4221         fi
4222         ;;
4223 esac
4224 $rm -f intsize intsize.*
4225
4226 : see what type lseek is declared as in the kernel
4227 rp="What is the type used for lseek's offset on this system?"
4228 set off_t lseektype long stdio.h sys/types.h
4229 eval $typedef_ask
4230
4231 echo " "
4232 echo "Checking to see how big your file offsets are..." >&4
4233 $cat >try.c <<EOCP
4234 #include <sys/types.h>
4235 #include <stdio.h>
4236 int main()
4237 {
4238     printf("%d\n", (int)sizeof($lseektype));
4239     return(0); 
4240 }
4241 EOCP
4242 set try
4243 if eval $compile_ok; then
4244         lseeksize=`./try`
4245         echo "Your file offsets are $lseeksize bytes long."
4246 else
4247         dflt=$longsize
4248         echo " "
4249         echo "(I can't seem to compile the test program.  Guessing...)"
4250         rp="What is the size of your file offsets (in bytes)?"
4251         . ./myread
4252         lseeksize="$ans"
4253 fi
4254 $rm -f try.c try
4255
4256 : see what type file positions are declared as in the library
4257 rp="What is the type for file position used by fsetpos()?"
4258 set fpos_t fpostype long stdio.h sys/types.h
4259 eval $typedef_ask
4260
4261 echo " "
4262 case "$fpostype" in
4263 *_t) zzz="$fpostype"    ;;
4264 *)   zzz="fpos_t"       ;;
4265 esac
4266 echo "Checking the size of $zzz..." >&4 
4267 cat > try.c <<EOCP
4268 #include <sys/types.h>
4269 #include <stdio.h>
4270 int main() {
4271     printf("%d\n", (int)sizeof($fpostype));
4272     exit(0);
4273 }
4274 EOCP
4275 set try
4276 if eval $compile_ok; then
4277         yyy=`./try`
4278         case "$yyy" in
4279         '')     fpossize=4
4280                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4281                 ;;
4282         *)      fpossize=$yyy
4283                 echo "Your $zzz is $fpossize bytes long."
4284                 ;;
4285         esac
4286 else
4287         dflt="$longsize"
4288         echo " " >&4
4289         echo "(I can't compile the test program.  Guessing...)" >&4
4290         rp="What is the size of your file positions (in bytes)?"
4291         . ./myread
4292         fpossize="$ans"
4293 fi
4294
4295
4296
4297 # Backward compatibility (uselfs is deprecated).
4298 case "$uselfs" in
4299 "$define"|true|[yY]*)
4300         cat <<EOM >&4
4301
4302 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4303 EOM
4304         uselargefiles="$define"
4305         ;;
4306 esac                          
4307
4308 case "$lseeksize:$fpossize" in
4309 8:8) cat <<EOM
4310
4311 You can have files larger than 2 gigabytes.
4312 EOM
4313    val="$define" ;;
4314 *)    case "$uselargefiles" in
4315    "$undef"|false|[nN]*) dflt='n' ;;
4316    *)   dflt='y' ;;
4317    esac
4318    cat <<EOM
4319
4320 Perl can be built to understand large files (files larger than 2 gigabytes)
4321 on some systems.  To do so, Configure can be run with -Duselargefiles.
4322
4323 If this doesn't make any sense to you, just accept the default '$dflt'.
4324 EOM
4325    rp='Try to understand large files, if available?'
4326    . ./myread
4327    case "$ans" in
4328    y|Y)         val="$define" ;;
4329    *)           val="$undef"  ;;
4330    esac
4331    ;;
4332 esac
4333 set uselargefiles
4334 eval $setvar
4335 case "$uselargefiles" in
4336 "$define")
4337 : Look for a hint-file generated 'call-back-unit'.  If the
4338 : user has specified that a large files perl is to be built,
4339 : we may need to set or change some other defaults.
4340         if $test -f uselfs.cbu; then
4341                 echo "Your platform has some specific hints for large file builds, using them..."
4342                 . ./uselfs.cbu
4343                 echo " "
4344                 echo "Rechecking to see how big your file offsets are..." >&4
4345                 $cat >try.c <<EOCP
4346 #include <sys/types.h>
4347 #include <stdio.h>
4348 int main()
4349 {
4350     printf("%d\n", (int)sizeof($lseektype));
4351     return(0); 
4352 }
4353 EOCP
4354                 set try
4355                 if eval $compile_ok; then
4356                         lseeksize=`./try`
4357                         $echo "Your file offsets are now $lseeksize bytes long."
4358                 else
4359                         dflt="$lseeksize"
4360                         echo " "
4361                         echo "(I can't seem to compile the test program.  Guessing...)"
4362                         rp="What is the size of your file offsets (in bytes)?"
4363                         . ./myread
4364                         lseeksize="$ans"
4365                 fi
4366                 case "$fpostype" in
4367                 *_t) zzz="$fpostype"    ;;
4368                 *)   zzz="fpos_t"       ;;
4369                 esac
4370                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4371                 $cat > try.c <<EOCP
4372 #include <sys/types.h>
4373 #include <stdio.h>
4374 int main() {
4375     printf("%d\n", (int)sizeof($fpostype));
4376     exit(0);
4377 }
4378 EOCP
4379                 set try
4380                 if eval $compile_ok; then
4381                         yyy=`./try`
4382                         dflt="$lseeksize"
4383                         case "$yyy" in
4384                         '')     echo " "
4385                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4386                                 ;;
4387                         *)      fpossize=$yyy
4388                                 echo " $fpossize bytes." >&4
4389                                 ;;
4390                         esac
4391                 else
4392                         dflt="$fpossize"
4393                         echo " "
4394                         echo "(I can't compile the test program.  Guessing...)" >&4
4395                         rp="What is the size of your file positions (in bytes)?"
4396                         . ./myread
4397                         fpossize="$ans"
4398                 fi
4399                 $rm -f try.c try
4400         fi
4401         ;;
4402 esac
4403
4404
4405 case "$usemorebits" in
4406 "$define"|true|[yY]*)
4407         use64bitint="$define"
4408         uselongdouble="$define"
4409         usemorebits="$define"
4410         ;;
4411 *)      usemorebits="$undef"
4412         ;;
4413 esac
4414
4415
4416 # Backward compatibility (uselonglong is deprecated).
4417 case "$uselonglong" in
4418 "$define"|true|[yY]*)
4419         cat <<EOM >&4
4420
4421 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4422 EOM
4423         use64bitint="$define"
4424         ;;
4425 esac                          
4426 # Backward compatibility (use64bits is deprecated).
4427 case "$use64bits" in
4428 "$define"|true|[yY]*)
4429         cat <<EOM >&4
4430
4431 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4432 EOM
4433         use64bitint="$define"
4434         ;;
4435 esac                          
4436 # Thinko compatibilities.
4437 case "$use64bitints" in
4438 "$define"|true|[yY]*)
4439         cat <<EOM >&4
4440
4441 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4442 EOM
4443         use64bitint="$define"
4444         ;;
4445 esac                          
4446 case "$use64bitsall" in
4447 "$define"|true|[yY]*)
4448         cat <<EOM >&4
4449
4450 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4451 EOM
4452         use64bitall="$define"
4453         ;;
4454 esac                          
4455
4456 case "$ccflags" in
4457 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4458 esac
4459 case "$use64bitall" in
4460 "$define"|true|[yY]*) use64bitint="$define" ;;
4461 esac
4462
4463 case "$longsize" in
4464 8) cat <<EOM
4465
4466 You have natively 64-bit long integers.
4467 EOM
4468    val="$define"
4469    ;;
4470 *) case "$use64bitint" in
4471    "$define"|true|[yY]*) dflt='y';;
4472    *) dflt='n';;
4473    esac
4474    cat <<EOM
4475
4476 Perl can be built to take advantage of 64-bit integer types
4477 on some systems.  To do so, Configure can be run with -Duse64bitint.
4478 Choosing this option will most probably introduce binary incompatibilities.
4479
4480 If this doesn't make any sense to you, just accept the default '$dflt'.
4481 EOM
4482    rp='Try to use 64-bit integers, if available?'
4483    . ./myread
4484    case "$ans" in
4485    [yY]*) val="$define" ;;
4486    *)     val="$undef"  ;;
4487    esac
4488    ;;
4489 esac
4490 set use64bitint
4491 eval $setvar
4492
4493 cat <<EOM
4494
4495 You may also choose to try maximal 64-bitness.  It means using as much
4496 64-bitness as possible on the platform.  This in turn means even more
4497 binary incompatibilities.  On the other hand, your platform may not
4498 have any more 64-bitness available than what you already have chosen.
4499
4500 If this doesn't make any sense to you, just accept the default '$dflt'.
4501 EOM
4502 rp='Try to use maximal 64-bit support, if available?'
4503 case "$use64bitall" in
4504 "$define"|true|[yY]*) dflt='y' ;;
4505 *) case "$longsize" in
4506    8) dflt='y' ;;
4507    *) dflt='n' ;;
4508    esac
4509    ;;
4510 esac    
4511 . ./myread
4512 case "$ans" in
4513 [yY]*) val="$define" ;;
4514 *)     val="$undef"  ;;
4515 esac
4516 set use64bitall
4517 eval $setvar
4518 case "$use64bitall" in
4519 "$define")
4520         case "$use64bitint" in
4521         "$undef")
4522                 cat <<EOM
4523
4524 Since you have chosen a maximally 64-bit build, I'm also turning on
4525 the use of 64-bit integers.
4526 EOM
4527                 use64bitint="$define" ;;
4528         esac
4529         ;;
4530 esac
4531
4532 case "$use64bitint" in
4533 "$define"|true|[yY]*)
4534 : Look for a hint-file generated 'call-back-unit'.  If the
4535 : user has specified that a 64-bit perl is to be built,
4536 : we may need to set or change some other defaults.
4537         if $test -f use64bitint.cbu; then
4538                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4539                 . ./use64bitint.cbu
4540         fi
4541         case "$longsize" in
4542         4) case "$archname64" in
4543            '') archname64=64int ;;
4544            esac
4545            ;;
4546         esac
4547         ;;
4548 esac
4549
4550 case "$use64bitall" in
4551 "$define"|true|[yY]*)
4552 : Look for a hint-file generated 'call-back-unit'.  If the
4553 : user has specified that a maximally 64-bit perl is to be built,
4554 : we may need to set or change some other defaults.
4555         if $test -f use64bitall.cbu; then
4556                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4557                 . ./use64bitall.cbu
4558         fi
4559         case "$longsize" in
4560         4) case "$archname64" in
4561            ''|64int) archname64=64all ;;
4562            esac
4563            ;;
4564         esac
4565         ;;
4566 esac
4567
4568 : determine the architecture name
4569 echo " "
4570 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4571         tarch=`arch`"-$osname"
4572 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4573         if uname -m > tmparch 2>&1 ; then
4574                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4575                         -e 's/$/'"-$osname/" tmparch`
4576         else
4577                 tarch="$osname"
4578         fi
4579         $rm -f tmparch
4580 else
4581         tarch="$osname"
4582 fi
4583 case "$myarchname" in
4584 ''|"$tarch") ;;
4585 *)
4586         echo "(Your architecture name used to be $myarchname.)"
4587         archname=''
4588         ;;
4589 esac
4590 myarchname="$tarch"
4591 case "$archname" in
4592 '') dflt="$tarch";;
4593 *) dflt="$archname";;
4594 esac
4595 rp='What is your architecture name'
4596 . ./myread
4597 archname="$ans"
4598 case "$usethreads" in
4599 $define)
4600         echo "Threads selected." >&4
4601         case "$archname" in
4602         *-thread*) echo "...and architecture name already has -thread." >&4
4603                 ;;
4604         *)      archname="$archname-thread"
4605                 echo "...setting architecture name to $archname." >&4
4606                 ;;
4607         esac
4608         ;;
4609 esac
4610 case "$usemultiplicity" in
4611 $define)
4612         echo "Multiplicity selected." >&4
4613         case "$archname" in
4614         *-multi*) echo "...and architecture name already has -multi." >&4
4615                 ;;
4616         *)      archname="$archname-multi"
4617                 echo "...setting architecture name to $archname." >&4
4618                 ;;
4619         esac
4620         ;;
4621 esac
4622 case "$use64bitint" in
4623 $define)
4624         case "$archname64" in
4625         '')
4626                 ;;
4627         *)
4628                 case "$archname" in
4629                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4630                         ;;
4631                 *)      archname="$archname-$archname64"
4632                         echo "...setting architecture name to $archname." >&4
4633                         ;;
4634                 esac
4635                 ;;
4636         esac
4637 esac
4638
4639 : determine root of directory hierarchy where package will be installed.
4640 case "$prefix" in
4641 '')
4642         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4643         ;;
4644 *)
4645         dflt="$prefix"
4646         ;;
4647 esac
4648 $cat <<EOM
4649
4650 By default, $package will be installed in $dflt/bin, manual pages
4651 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4652 installation directories. Typically this is something like /usr/local.
4653 If you wish to have binaries under /usr/bin but other parts of the
4654 installation under /usr/local, that's ok: you will be prompted
4655 separately for each of the installation directories, the prefix being
4656 only used to set the defaults.
4657
4658 EOM
4659 fn=d~
4660 rp='Installation prefix to use?'
4661 . ./getfile
4662 oldprefix=''
4663 case "$prefix" in
4664 '') ;;
4665 *)
4666         case "$ans" in
4667         "$prefix") ;;
4668         *) oldprefix="$prefix";;
4669         esac
4670         ;;
4671 esac
4672 prefix="$ans"
4673 prefixexp="$ansexp"
4674
4675 : is AFS running?
4676 echo " "
4677 case "$afs" in
4678 $define|true)   afs=true ;;
4679 $undef|false)   afs=false ;;
4680 *)      if test -d /afs; then
4681                 afs=true
4682         else
4683                 afs=false
4684         fi
4685         ;;
4686 esac
4687 if $afs; then
4688         echo "AFS may be running... I'll be extra cautious then..." >&4
4689 else
4690         echo "AFS does not seem to be running..." >&4
4691 fi
4692
4693 : determine installation prefix for where package is to be installed.
4694 if $afs; then 
4695 $cat <<EOM
4696
4697 Since you are running AFS, I need to distinguish the directory in which
4698 files will reside from the directory in which they are installed (and from
4699 which they are presumably copied to the former directory by occult means).
4700
4701 EOM
4702         case "$installprefix" in
4703         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4704         *) dflt="$installprefix";;
4705         esac
4706 else
4707 $cat <<EOM
4708
4709 In some special cases, particularly when building $package for distribution,
4710 it is convenient to distinguish between the directory in which files should 
4711 be installed from the directory ($prefix) in which they 
4712 will eventually reside.  For most users, these two directories are the same.
4713
4714 EOM
4715         case "$installprefix" in
4716         '') dflt=$prefix ;;
4717         *) dflt=$installprefix;;
4718         esac
4719 fi
4720 fn=d~
4721 rp='What installation prefix should I use for installing files?'
4722 . ./getfile
4723 installprefix="$ans"
4724 installprefixexp="$ansexp"
4725
4726 : set the prefixit variable, to compute a suitable default value
4727 prefixit='case "$3" in
4728 ""|none)
4729         case "$oldprefix" in
4730         "") eval "$1=\"\$$2\"";;
4731         *)
4732                 case "$3" in
4733                 "") eval "$1=";;
4734                 none)
4735                         eval "tp=\"\$$2\"";
4736                         case "$tp" in
4737                         ""|" ") eval "$1=\"\$$2\"";;
4738                         *) eval "$1=";;
4739                         esac;;
4740                 esac;;
4741         esac;;
4742 *)
4743         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4744         case "$tp" in
4745         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4746         /*-$oldprefix/*|\~*-$oldprefix/*)
4747                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4748         *) eval "$1=\"\$$2\"";;
4749         esac;;
4750 esac'
4751
4752
4753 : get the patchlevel
4754 echo " "
4755 echo "Getting the current patchlevel..." >&4
4756 if $test -r $rsrc/patchlevel.h;then
4757         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4758         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4759         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4760         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4761         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4762         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4763 else
4764         revision=0
4765         patchlevel=0
4766         subversion=0
4767         api_revision=0
4768         api_version=0
4769         api_subversion=0
4770 fi
4771 $echo $n "(You have $package revision $revision" $c
4772 $echo $n " patchlevel $patchlevel" $c
4773 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4774 echo ".)"
4775 case "$osname" in
4776 dos|vms)
4777         : XXX Should be a Configure test for double-dots in filenames.
4778         version=`echo $revision $patchlevel $subversion | \
4779                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4780         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4781                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4782         ;;
4783 *)
4784         version=`echo $revision $patchlevel $subversion | \
4785                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4786         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4787                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4788         ;;
4789 esac
4790 : Special case the 5.005_xx maintenance series, which used 5.005
4791 : without any subversion label as a subdirectory in $sitelib
4792 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4793         api_versionstring='5.005'
4794 fi
4795
4796 : determine installation style
4797 : For now, try to deduce it from prefix unless it is already set.
4798 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4799 case "$installstyle" in
4800 '')     case "$prefix" in
4801                 *perl*) dflt='lib';;
4802                 *) dflt='lib/perl5' ;;
4803         esac
4804         ;;
4805 *)      dflt='lib/perl5' ;;
4806 esac
4807 : Probably not worth prompting for this since we prompt for all
4808 : the directories individually, and the prompt would be too long and
4809 : confusing anyway.
4810 installstyle=$dflt
4811
4812 : determine where private library files go
4813 : Usual default is /usr/local/lib/perl5/$version.
4814 : Also allow things like /opt/perl/lib/$version, since 
4815 : /opt/perl/lib/perl5... would be redundant.
4816 : The default "style" setting is made in installstyle.U
4817 case "$installstyle" in
4818 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4819 *)       set dflt privlib lib/$version ;;
4820 esac
4821 eval $prefixit
4822 $cat <<EOM
4823
4824 There are some auxiliary files for $package that need to be put into a
4825 private library directory that is accessible by everyone.
4826
4827 EOM
4828 fn=d~+
4829 rp='Pathname where the private library files will reside?'
4830 . ./getfile
4831 privlib="$ans"
4832 privlibexp="$ansexp"
4833 : Change installation prefix, if necessary.
4834 if $test X"$prefix" != X"$installprefix"; then
4835         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4836 else
4837         installprivlib="$privlibexp"
4838 fi
4839
4840 : set the prefixup variable, to restore leading tilda escape
4841 prefixup='case "$prefixexp" in
4842 "$prefix") ;;
4843 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4844 esac'
4845
4846 : determine where public architecture dependent libraries go
4847 set archlib archlib
4848 eval $prefixit
4849 : privlib default is /usr/local/lib/$package/$version
4850 : archlib default is /usr/local/lib/$package/$version/$archname
4851 : privlib may have an optional trailing /share.
4852 tdflt=`echo $privlib | $sed 's,/share$,,'`
4853 tdflt=$tdflt/$archname
4854 case "$archlib" in
4855 '')     dflt=$tdflt
4856         ;;
4857 *)      dflt="$archlib"
4858     ;;
4859 esac
4860 $cat <<EOM
4861
4862 $spackage contains architecture-dependent library files.  If you are
4863 sharing libraries in a heterogeneous environment, you might store
4864 these files in a separate location.  Otherwise, you can just include
4865 them with the rest of the public library files.
4866
4867 EOM
4868 fn=d+~
4869 rp='Where do you want to put the public architecture-dependent libraries?'
4870 . ./getfile
4871 archlib="$ans"
4872 archlibexp="$ansexp"
4873 if $test X"$archlib" = X"$privlib"; then
4874         d_archlib="$undef"
4875 else
4876         d_archlib="$define"
4877 fi
4878 : Change installation prefix, if necessary.
4879 if $test X"$prefix" != X"$installprefix"; then
4880         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4881 else
4882         installarchlib="$archlibexp"
4883 fi
4884
4885
4886 : Binary compatibility with 5.005 is not possible for builds
4887 : with advanced features
4888 case "$usethreads$usemultiplicity" in
4889 *define*)
4890         bincompat5005="$undef"
4891         d_bincompat5005="$undef"
4892         ;;
4893 *)      $cat <<EOM
4894
4895 Perl 5.006 can be compiled for binary compatibility with 5.005.
4896 If you decide to do so, you will be able to continue using most
4897 of the extensions that were compiled for Perl 5.005.
4898
4899 EOM
4900         case "$bincompat5005$d_bincompat5005" in
4901         *"$undef"*) dflt=n ;;
4902         *) dflt=y ;;
4903         esac
4904         rp='Binary compatibility with Perl 5.005?'
4905         . ./myread
4906         case "$ans" in
4907         y*) val="$define" ;;
4908         *)  val="$undef" ;;
4909         esac
4910         set d_bincompat5005
4911         eval $setvar
4912         case "$d_bincompat5005" in
4913         "$define")
4914                 bincompat5005="$define"
4915                 ;;
4916         *)      bincompat5005="$undef"
4917                 d_bincompat5005="$undef"
4918                 ;;
4919         esac
4920         ;;
4921 esac
4922
4923
4924 : see if setuid scripts can be secure
4925 $cat <<EOM
4926
4927 Some kernels have a bug that prevents setuid #! scripts from being
4928 secure.  Some sites have disabled setuid #! scripts because of this.
4929
4930 First let's decide if your kernel supports secure setuid #! scripts.
4931 (If setuid #! scripts would be secure but have been disabled anyway,
4932 don't say that they are secure if asked.)
4933
4934 EOM
4935
4936 val="$undef"
4937 if $test -d /dev/fd; then
4938         echo "#!$ls" >reflect
4939         chmod +x,u+s reflect
4940         ./reflect >flect 2>&1
4941         if $contains "/dev/fd" flect >/dev/null; then
4942                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4943                 val="$define"
4944         else
4945                 $cat <<EOM
4946 If you are not sure if they are secure, I can check but I'll need a
4947 username and password different from the one you are using right now.
4948 If you don't have such a username or don't want me to test, simply
4949 enter 'none'.
4950
4951 EOM
4952                 rp='Other username to test security of setuid scripts with?'
4953                 dflt='none'
4954                 . ./myread
4955                 case "$ans" in
4956                 n|none)
4957                         case "$d_suidsafe" in
4958                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4959                                 dflt=n;;
4960                         "$undef")
4961                                 echo "Well, the $hint value is *not* secure." >&4
4962                                 dflt=n;;
4963                         *)      echo "Well, the $hint value *is* secure." >&4
4964                                 dflt=y;;
4965                         esac
4966                         ;;
4967                 *)
4968                         $rm -f reflect flect
4969                         echo "#!$ls" >reflect
4970                         chmod +x,u+s reflect
4971                         echo >flect
4972                         chmod a+w flect
4973                         echo '"su" will (probably) prompt you for '"$ans's password."
4974                         su $ans -c './reflect >flect'
4975                         if $contains "/dev/fd" flect >/dev/null; then
4976                                 echo "Okay, it looks like setuid scripts are secure." >&4
4977                                 dflt=y
4978                         else
4979                                 echo "I don't think setuid scripts are secure." >&4
4980                                 dflt=n
4981                         fi
4982                         ;;
4983                 esac
4984                 rp='Does your kernel have *secure* setuid scripts?'
4985                 . ./myread
4986                 case "$ans" in
4987                 [yY]*)  val="$define";;
4988                 *)      val="$undef";;
4989                 esac
4990         fi
4991 else
4992         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
4993         echo "(That's for file descriptors, not floppy disks.)"
4994         val="$undef"
4995 fi
4996 set d_suidsafe
4997 eval $setvar
4998
4999 $rm -f reflect flect
5000
5001 : now see if they want to do setuid emulation
5002 echo " "
5003 val="$undef"
5004 case "$d_suidsafe" in
5005 "$define")
5006         val="$undef"
5007         echo "No need to emulate SUID scripts since they are secure here." >& 4
5008         ;;
5009 *)
5010         $cat <<EOM
5011 Some systems have disabled setuid scripts, especially systems where
5012 setuid scripts cannot be secure.  On systems where setuid scripts have
5013 been disabled, the setuid/setgid bits on scripts are currently
5014 useless.  It is possible for $package to detect those bits and emulate
5015 setuid/setgid in a secure fashion.  This emulation will only work if
5016 setuid scripts have been disabled in your kernel.
5017
5018 EOM
5019         case "$d_dosuid" in
5020         "$define") dflt=y ;;
5021         *) dflt=n ;;
5022         esac
5023         rp="Do you want to do setuid/setgid emulation?"
5024         . ./myread
5025         case "$ans" in
5026         [yY]*)  val="$define";;
5027         *)      val="$undef";;
5028         esac
5029         ;;
5030 esac
5031 set d_dosuid
5032 eval $setvar
5033
5034 : determine filename position in cpp output
5035 echo " "
5036 echo "Computing filename position in cpp output for #include directives..." >&4
5037 echo '#include <stdio.h>' > foo.c
5038 $cat >fieldn <<EOF
5039 $startsh
5040 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5041 $grep '^[       ]*#.*stdio\.h' | \
5042 while read cline; do
5043         pos=1
5044         set \$cline
5045         while $test \$# -gt 0; do
5046                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5047                         echo "\$pos"
5048                         exit 0
5049                 fi
5050                 shift
5051                 pos=\`expr \$pos + 1\`
5052         done
5053 done
5054 EOF
5055 chmod +x fieldn
5056 fieldn=`./fieldn`
5057 $rm -f foo.c fieldn
5058 case $fieldn in
5059 '') pos='???';;
5060 1) pos=first;;
5061 2) pos=second;;
5062 3) pos=third;;
5063 *) pos="${fieldn}th";;
5064 esac
5065 echo "Your cpp writes the filename in the $pos field of the line."
5066
5067 : locate header file
5068 $cat >findhdr <<EOF
5069 $startsh
5070 wanted=\$1
5071 name=''
5072 for usrincdir in $usrinc
5073 do
5074         if test -f \$usrincdir/\$wanted; then
5075                 echo "\$usrincdir/\$wanted"
5076                 exit 0
5077         fi
5078 done
5079 awkprg='{ print \$$fieldn }'
5080 echo "#include <\$wanted>" > foo\$\$.c
5081 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5082 $grep "^[       ]*#.*\$wanted" | \
5083 while read cline; do
5084         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5085         case "\$name" in
5086         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5087         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5088         *) exit 2;;
5089         esac;
5090 done;
5091 #
5092 # status = 0: grep returned 0 lines, case statement not executed
5093 # status = 1: headerfile found
5094 # status = 2: while loop executed, no headerfile found
5095 #
5096 status=\$?
5097 $rm -f foo\$\$.c;
5098 if test \$status -eq 1; then
5099         exit 0;
5100 fi
5101 exit 1
5102 EOF
5103 chmod +x findhdr
5104
5105 : define an alternate in-header-list? function
5106 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5107 cont=true; xxf="echo \"<\$1> found.\" >&4";
5108 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5109 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5110 esac;
5111 case $# in 4) instead=instead;; *) instead="at last";; esac;
5112 while $test "$cont"; do
5113         xxx=`./findhdr $1`
5114         var=$2; eval "was=\$$2";
5115         if $test "$xxx" && $test -r "$xxx";
5116         then eval $xxf;
5117         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5118                 cont="";
5119         else eval $xxnf;
5120         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5121         set $yyy; shift; shift; yyy=$@;
5122         case $# in 0) cont="";;
5123         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5124                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5125         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5126                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5127         esac;
5128 done;
5129 while $test "$yyy";
5130 do set $yyy; var=$2; eval "was=\$$2";
5131         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5132         set $yyy; shift; shift; yyy=$@;
5133 done'
5134
5135 : see if this is a malloc.h system
5136 set malloc.h i_malloc
5137 eval $inhdr
5138
5139 : see if stdlib is available
5140 set stdlib.h i_stdlib
5141 eval $inhdr
5142
5143 : determine which malloc to compile in
5144 echo " "
5145 case "$usemymalloc" in
5146 ''|[yY]*|true|$define)  dflt='y' ;;
5147 *)      dflt='n' ;;
5148 esac
5149 rp="Do you wish to attempt to use the malloc that comes with $package?"
5150 . ./myread
5151 usemymalloc="$ans"
5152 case "$ans" in
5153 y*|true)
5154         usemymalloc='y'
5155         mallocsrc='malloc.c'
5156         mallocobj="malloc$_o"
5157         d_mymalloc="$define"
5158         case "$libs" in
5159         *-lmalloc*)
5160                 : Remove malloc from list of libraries to use
5161                 echo "Removing unneeded -lmalloc from library list" >&4
5162                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5163                 shift
5164                 libs="$*"
5165                 echo "libs = $libs" >&4
5166                 ;;
5167         esac
5168         ;;
5169 *)
5170         usemymalloc='n'
5171         mallocsrc=''
5172         mallocobj=''
5173         d_mymalloc="$undef"
5174         ;;
5175 esac
5176
5177 : compute the return types of malloc and free
5178 echo " "
5179 $cat >malloc.c <<END
5180 #$i_malloc I_MALLOC
5181 #$i_stdlib I_STDLIB
5182 #include <stdio.h>
5183 #include <sys/types.h>
5184 #ifdef I_MALLOC
5185 #include <malloc.h>
5186 #endif
5187 #ifdef I_STDLIB
5188 #include <stdlib.h>
5189 #endif
5190 #ifdef TRY_MALLOC
5191 void *malloc();
5192 #endif
5193 #ifdef TRY_FREE
5194 void free();
5195 #endif
5196 END
5197 case "$malloctype" in
5198 '')
5199         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5200                 malloctype='void *'
5201         else
5202                 malloctype='char *'
5203         fi
5204         ;;
5205 esac
5206 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5207
5208 case "$freetype" in
5209 '')
5210         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5211                 freetype='void'
5212         else
5213                 freetype='int'
5214         fi
5215         ;;
5216 esac
5217 echo "Your system uses $freetype free(), it would seem." >&4
5218 $rm -f malloc.[co]
5219 $cat <<EOM
5220
5221 The installation process will also create a directory for
5222 vendor-supplied add-ons.  Vendors who supply perl with their system
5223 may find it convenient to place all vendor-supplied files in this
5224 directory rather than in the main distribution directory.  This will
5225 ease upgrades between binary-compatible maintenance versions of perl.
5226
5227 Of course you may also use these directories in whatever way you see
5228 fit.  For example, you might use them to access modules shared over a
5229 company-wide network.
5230
5231 The default answer should be fine for most people.
5232 This causes further questions about vendor add-ons to be skipped
5233 and no vendor-specific directories will be configured for perl.
5234
5235 EOM
5236 rp='Do you want to configure vendor-specific add-on directories?'
5237 case "$usevendorprefix" in
5238 define|true|[yY]*) dflt=y ;;
5239 *)      : User may have set vendorprefix directly on Configure command line.
5240         case "$vendorprefix" in
5241         ''|' ') dflt=n ;;
5242         *)      dflt=y ;;
5243         esac
5244         ;;
5245 esac
5246 . ./myread
5247 case "$ans" in
5248 [yY]*)  fn=d~+
5249         rp='Installation prefix to use for vendor-supplied add-ons?'
5250         case "$vendorprefix" in
5251         '') dflt='' ;;
5252         *)  dflt=$vendorprefix ;;
5253         esac
5254         . ./getfile
5255         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5256         oldvendorprefix=''
5257         case "$vendorprefix" in
5258         '') ;;
5259         *)      case "$ans" in
5260                 "$prefix") ;;
5261                 *) oldvendorprefix="$prefix";;
5262                 esac
5263                 ;;
5264         esac
5265         usevendorprefix="$define"
5266         vendorprefix="$ans"
5267         vendorprefixexp="$ansexp"
5268         ;;
5269 *)      usevendorprefix="$undef"
5270         vendorprefix=''
5271         vendorprefixexp=''
5272         ;;
5273 esac
5274
5275 case "$vendorprefix" in
5276 '')     d_vendorlib="$undef"
5277         vendorlib=''
5278         vendorlibexp=''
5279         ;;
5280 *)      d_vendorlib="$define"
5281         : determine where vendor-supplied modules go.
5282         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5283         case "$vendorlib" in
5284         '')
5285                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5286                 case "$installstyle" in
5287                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5288                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5289                 esac
5290                 ;;
5291         *)      dflt="$vendorlib"
5292                 ;;
5293         esac
5294         fn=d~+
5295         rp='Pathname for the vendor-supplied library files?'
5296         . ./getfile
5297         vendorlib="$ans"
5298         vendorlibexp="$ansexp"
5299         ;;
5300 esac
5301 : Change installation prefix, if necessary.
5302 if $test X"$prefix" != X"$installprefix"; then
5303         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5304 else
5305         installvendorlib="$vendorlibexp"
5306 fi
5307
5308 : Cruising for prototypes
5309 echo " "
5310 echo "Checking out function prototypes..." >&4
5311 $cat >prototype.c <<'EOCP'
5312 int main(int argc, char *argv[]) {
5313         exit(0);}
5314 EOCP
5315 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5316         echo "Your C compiler appears to support function prototypes."
5317         val="$define"
5318 else
5319         echo "Your C compiler doesn't seem to understand function prototypes."
5320         val="$undef"
5321 fi
5322 set prototype
5323 eval $setvar
5324 $rm -f prototype*
5325
5326 case "$prototype" in
5327 "$define") ;;
5328 *)      ansi2knr='ansi2knr'
5329         echo " "
5330         cat <<EOM >&4
5331
5332 $me:  FATAL ERROR:
5333 This version of $package can only be compiled by a compiler that 
5334 understands function prototypes.  Unfortunately, your C compiler 
5335         $cc $ccflags
5336 doesn't seem to understand them.  Sorry about that.
5337
5338 If GNU cc is available for your system, perhaps you could try that instead.  
5339
5340 Eventually, we hope to support building Perl with pre-ANSI compilers.
5341 If you would like to help in that effort, please contact <perlbug@perl.org>.
5342
5343 Aborting Configure now.
5344 EOM
5345         exit 2
5346         ;;
5347 esac
5348
5349 : determine where public executables go
5350 echo " "
5351 set dflt bin bin
5352 eval $prefixit
5353 fn=d~
5354 rp='Pathname where the public executables will reside?'
5355 . ./getfile
5356 if $test "X$ansexp" != "X$binexp"; then
5357         installbin=''
5358 fi
5359 bin="$ans"
5360 binexp="$ansexp"
5361 : Change installation prefix, if necessary.
5362 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5363 if $test X"$prefix" != X"$installprefix"; then
5364         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5365 else
5366         installbin="$binexp"
5367 fi
5368
5369 : Find perl5.005 or later.
5370 echo "Looking for a previously installed perl5.005 or later... "
5371 case "$perl5" in
5372 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5373                 : Check if this perl is recent and can load a simple module
5374                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5375                         perl5=$tdir/perl
5376                         break;
5377                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5378                         perl5=$tdir/perl
5379                         break;
5380                 fi
5381         done
5382         ;;
5383 *)      perl5="$perl5"
5384         ;;
5385 esac
5386 case "$perl5" in
5387 '')     echo "None found.  That's ok.";;
5388 *)      echo "Using $perl5." ;;
5389 esac
5390
5391 $cat <<EOM
5392
5393 After $package is installed, you may wish to install various
5394 add-on modules and utilities.  Typically, these add-ons will
5395 be installed under $prefix with the rest
5396 of this package.  However, you may wish to install such add-ons
5397 elsewhere under a different prefix.
5398
5399 If you do not wish to put everything under a single prefix, that's
5400 ok.  You will be prompted for the individual locations; this siteprefix
5401 is only used to suggest the defaults.
5402
5403 The default should be fine for most people.
5404
5405 EOM
5406 fn=d~+
5407 rp='Installation prefix to use for add-on modules and utilities?'
5408 : XXX Here might be another good place for an installstyle setting.
5409 case "$siteprefix" in
5410 '') dflt=$prefix ;;
5411 *)  dflt=$siteprefix ;;
5412 esac
5413 . ./getfile
5414 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5415 oldsiteprefix=''
5416 case "$siteprefix" in
5417 '') ;;
5418 *)      case "$ans" in
5419         "$prefix") ;;
5420         *) oldsiteprefix="$prefix";;
5421         esac
5422         ;;
5423 esac
5424 siteprefix="$ans"
5425 siteprefixexp="$ansexp"
5426
5427 : determine where site specific libraries go.
5428 : Usual default is /usr/local/lib/perl5/site_perl/$version
5429 : The default "style" setting is made in installstyle.U
5430 : XXX No longer works with Prefixit stuff.
5431 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5432 case "$sitelib" in
5433 '') case "$installstyle" in
5434         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5435         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5436         esac
5437         ;;
5438 *)      dflt="$sitelib"
5439         ;;
5440 esac
5441 $cat <<EOM
5442
5443 The installation process will create a directory for
5444 site-specific extensions and modules.  Most users find it convenient
5445 to place all site-specific files in this directory rather than in the
5446 main distribution directory.
5447
5448 EOM
5449 fn=d~+
5450 rp='Pathname for the site-specific library files?'
5451 . ./getfile
5452 sitelib="$ans"
5453 sitelibexp="$ansexp"
5454 : Change installation prefix, if necessary.
5455 if $test X"$prefix" != X"$installprefix"; then
5456         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5457 else
5458         installsitelib="$sitelibexp"
5459 fi
5460
5461 : Determine list of previous versions to include in @INC
5462 $cat > getverlist <<EOPL
5463 #!$perl5 -w
5464 use File::Basename;
5465 \$api_versionstring = "$api_versionstring";
5466 \$version = "$version";
5467 \$sitelib = "$sitelib";
5468 \$archname = "$archname";
5469 EOPL
5470         $cat >> getverlist <<'EOPL'
5471 # Can't have leading @ because metaconfig interprets it as a command!
5472 ;@inc_version_list=();
5473 $stem=dirname($sitelib);
5474 # XXX Redo to do opendir/readdir? 
5475 if (-d $stem) {
5476     chdir($stem);
5477     ;@candidates = glob("5.*");
5478 }
5479 else {
5480     ;@candidates = ();
5481 }
5482
5483 # XXX ToDo:  These comparisons must be reworked when two-digit
5484 # subversions come along, so that 5.7.10 compares as greater than
5485 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5486 # widespread that we can use the built-in version vectors rather
5487 # than reinventing them here.  For 5.6.0, however, we must
5488 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5489 foreach $d (@candidates) {
5490     if ($d lt $version) {
5491         if ($d ge $api_versionstring) {
5492             unshift(@inc_version_list, "$d/$archname", $d);
5493         }
5494         elsif ($d ge "5.005") {
5495             unshift(@inc_version_list, $d);
5496         }
5497     }
5498     else {
5499         # Skip newer version.  I.e. don't look in
5500         # 5.7.0 if we're installing 5.6.1.
5501     }
5502 }
5503
5504 if (@inc_version_list) {
5505     print join(' ', @inc_version_list);
5506 }
5507 else {
5508     # Blank space to preserve value for next Configure run.
5509     print " ";
5510 }
5511 EOPL
5512 chmod +x getverlist
5513 case "$inc_version_list" in
5514 '')     if test -x "$perl5"; then
5515                 dflt=`$perl5 getverlist`
5516         else
5517                 dflt='none'
5518         fi
5519         ;;
5520 $undef) dflt='none' ;;
5521 *)  dflt="$inc_version_list" ;;
5522 esac
5523 case "$dflt" in
5524 ''|' ') dflt=none ;;
5525 esac
5526 $cat <<'EOM'
5527
5528 In order to ease the process of upgrading, this version of perl 
5529 can be configured to use modules built and installed with earlier 
5530 versions of perl that were installed under $prefix.  Specify here
5531 the list of earlier versions that this version of perl should check.
5532 If Configure detected no earlier versions of perl installed under
5533 $prefix, then the list will be empty.  Answer 'none' to tell perl
5534 to not search earlier versions.
5535
5536 The default should almost always be sensible, so if you're not sure,
5537 just accept the default.
5538 EOM
5539
5540 rp='List of earlier versions to include in @INC?'
5541 . ./myread
5542 case "$ans" in
5543 [Nn]one|''|' ') inc_version_list=' ' ;;
5544 *) inc_version_list="$ans" ;;
5545 esac
5546 case "$inc_version_list" in
5547 ''|' ') 
5548         inc_version_list_init='0';;
5549 *)      inc_version_list_init=`echo $inc_version_list |
5550                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5551         ;;
5552 esac
5553 $rm -f getverlist
5554
5555 : determine whether to install perl also as /usr/bin/perl
5556
5557 echo " "
5558 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5559         $cat <<EOM
5560 Many scripts expect to perl to be installed as /usr/bin/perl.
5561 I can install the perl you are about to compile also as /usr/bin/perl
5562 (in addition to $installbin/perl).
5563 EOM
5564         case "$installusrbinperl" in
5565         "$undef"|[nN]*) dflt='n';;
5566         *)              dflt='y';;
5567         esac
5568         rp="Do you want to install perl as /usr/bin/perl?"
5569         . ./myread
5570         case "$ans" in
5571         [yY]*)  val="$define";;
5572         *)      val="$undef" ;;
5573         esac
5574 else
5575         val="$undef"
5576 fi
5577 set installusrbinperl
5578 eval $setvar
5579
5580 echo " "
5581 echo "Checking for GNU C Library..." >&4
5582 cat >gnulibc.c <<EOM
5583 #include <stdio.h>
5584 int main()
5585 {
5586 #ifdef __GLIBC__
5587     exit(0);
5588 #else
5589     exit(1);
5590 #endif
5591 }
5592 EOM
5593 set gnulibc
5594 if eval $compile_ok && ./gnulibc; then
5595         val="$define"
5596         echo "You are using the GNU C Library"
5597 else
5598         val="$undef"
5599         echo "You are not using the GNU C Library"
5600 fi
5601 $rm -f gnulibc*
5602 set d_gnulibc
5603 eval $setvar
5604
5605 : see if nm is to be used to determine whether a symbol is defined or not
5606 case "$usenm" in
5607 '')
5608         dflt=''
5609         case "$d_gnulibc" in
5610         "$define")
5611                 echo " "
5612                 echo "nm probably won't work on the GNU C Library." >&4
5613                 dflt=n
5614                 ;;
5615         esac
5616         case "$dflt" in
5617         '') 
5618                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5619                         echo " "
5620                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5621                         echo "'nm' won't be sufficient on this sytem." >&4
5622                         dflt=n
5623                 fi
5624                 ;;
5625         esac
5626         case "$dflt" in
5627         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5628                 if $test $dflt -gt 20; then
5629                         dflt=y
5630                 else
5631                         dflt=n
5632                 fi
5633                 ;;
5634         esac
5635         ;;
5636 *)
5637         case "$usenm" in
5638         true|$define) dflt=y;;
5639         *) dflt=n;;
5640         esac
5641         ;;
5642 esac
5643 $cat <<EOM
5644
5645 I can use $nm to extract the symbols from your C libraries. This
5646 is a time consuming task which may generate huge output on the disk (up
5647 to 3 megabytes) but that should make the symbols extraction faster. The
5648 alternative is to skip the 'nm' extraction part and to compile a small
5649 test program instead to determine whether each symbol is present. If
5650 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5651 this may be the best solution.
5652
5653 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5654
5655 EOM
5656 rp="Shall I use $nm to extract C symbols from the libraries?"
5657 . ./myread
5658 case "$ans" in
5659 [Nn]*) usenm=false;;
5660 *) usenm=true;;
5661 esac
5662
5663 runnm=$usenm
5664 case "$reuseval" in
5665 true) runnm=false;;
5666 esac
5667
5668 : nm options which may be necessary
5669 case "$nm_opt" in
5670 '') if $test -f /mach_boot; then
5671                 nm_opt=''       # Mach
5672         elif $test -d /usr/ccs/lib; then
5673                 nm_opt='-p'     # Solaris (and SunOS?)
5674         elif $test -f /dgux; then
5675                 nm_opt='-p'     # DG-UX
5676         elif $test -f /lib64/rld; then
5677                 nm_opt='-p'     # 64-bit Irix
5678         else
5679                 nm_opt=''
5680         fi;;
5681 esac
5682
5683 : nm options which may be necessary for shared libraries but illegal
5684 : for archive libraries.  Thank you, Linux.
5685 case "$nm_so_opt" in
5686 '')     case "$myuname" in
5687         *linux*)
5688                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5689                         nm_so_opt='--dynamic'
5690                 fi
5691                 ;;
5692         esac
5693         ;;
5694 esac
5695
5696 case "$runnm" in
5697 true)
5698 : get list of predefined functions in a handy place
5699 echo " "
5700 case "$libc" in
5701 '') libc=unknown
5702         case "$libs" in
5703         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5704         esac
5705         ;;
5706 esac
5707 libnames='';
5708 case "$libs" in
5709 '') ;;
5710 *)  for thislib in $libs; do
5711         case "$thislib" in
5712         -lc|-lc_s)
5713                 : Handle C library specially below.
5714                 ;;
5715         -l*)
5716                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5717                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5718                         :
5719                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5720                         :
5721                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5722                         :
5723                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5724                         :
5725                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5726                         :
5727                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5728                         :
5729                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5730                         :
5731                 else
5732                         try=''
5733                 fi
5734                 libnames="$libnames $try"
5735                 ;;
5736         *) libnames="$libnames $thislib" ;;
5737         esac
5738         done
5739         ;;
5740 esac
5741 xxx=normal
5742 case "$libc" in
5743 unknown)
5744         set /lib/libc.$so
5745         for xxx in $libpth; do
5746                 $test -r $1 || set $xxx/libc.$so
5747                 : The messy sed command sorts on library version numbers.
5748                 $test -r $1 || \
5749                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5750                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5751                                 h
5752                                 s/[0-9][0-9]*/0000&/g
5753                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5754                                 G
5755                                 s/\n/ /' | \
5756                          sort | $sed -e 's/^.* //'`
5757                 eval set \$$#
5758         done
5759         $test -r $1 || set /usr/ccs/lib/libc.$so
5760         $test -r $1 || set /lib/libsys_s$_a
5761         ;;
5762 *)
5763         set blurfl
5764         ;;
5765 esac
5766 if $test -r "$1"; then
5767         echo "Your (shared) C library seems to be in $1."
5768         libc="$1"
5769 elif $test -r /lib/libc && $test -r /lib/clib; then
5770         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5771         xxx=apollo
5772         libc='/lib/clib /lib/libc'
5773         if $test -r /lib/syslib; then
5774                 echo "(Your math library is in /lib/syslib.)"
5775                 libc="$libc /lib/syslib"
5776         fi
5777 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5778         echo "Your C library seems to be in $libc, as you said before."
5779 elif $test -r $incpath/usr/lib/libc$_a; then
5780         libc=$incpath/usr/lib/libc$_a;
5781         echo "Your C library seems to be in $libc.  That's fine."
5782 elif $test -r /lib/libc$_a; then
5783         libc=/lib/libc$_a;
5784         echo "Your C library seems to be in $libc.  You're normal."
5785 else
5786         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5787                 :
5788         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5789                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5790         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5791                 :
5792         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5793                 :
5794         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5795                 :
5796         else
5797                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5798         fi
5799         if $test -r "$tans"; then
5800                 echo "Your C library seems to be in $tans, of all places."
5801                 libc=$tans
5802         else
5803                 libc='blurfl'
5804         fi
5805 fi
5806 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5807         dflt="$libc"
5808         cat <<EOM
5809
5810 If the guess above is wrong (which it might be if you're using a strange
5811 compiler, or your machine supports multiple models), you can override it here.
5812
5813 EOM
5814 else
5815         dflt=''
5816         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5817         cat >&4 <<EOM
5818 I can't seem to find your C library.  I've looked in the following places:
5819
5820 EOM
5821         $sed 's/^/      /' libpath
5822         cat <<EOM
5823
5824 None of these seems to contain your C library. I need to get its name...
5825
5826 EOM
5827 fi
5828 fn=f
5829 rp='Where is your C library?'
5830 . ./getfile
5831 libc="$ans"
5832
5833 echo " "
5834 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5835 set X `cat libnames`
5836 shift
5837 xxx=files
5838 case $# in 1) xxx=file; esac
5839 echo "Extracting names from the following $xxx for later perusal:" >&4
5840 echo " "
5841 $sed 's/^/      /' libnames >&4
5842 echo " "
5843 $echo $n "This may take a while...$c" >&4
5844
5845 for file in $*; do
5846         case $file in
5847         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5848         *) $nm $nm_opt $file 2>/dev/null;;
5849         esac
5850 done >libc.tmp
5851
5852 $echo $n ".$c"
5853 $grep fprintf libc.tmp > libc.ptf
5854 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5855 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5856 xxx='[ADTSIW]'
5857 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5858         eval $xscan;\
5859         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5860                 eval $xrun
5861 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5862         eval $xscan;\
5863         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5864                 eval $xrun
5865 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5866         eval $xscan;\
5867         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5868                 eval $xrun
5869 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5870         eval $xscan;\
5871         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5872                 eval $xrun
5873 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5874         eval $xscan;\
5875         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5876                 eval $xrun
5877 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5878         eval $xscan;\
5879         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5880                 eval $xrun
5881 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5882                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5883         eval $xscan;\
5884         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5885                 eval $xrun
5886 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5887         eval $xscan;\
5888         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5889                 eval $xrun
5890 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5891         eval $xscan;\
5892         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5893                 eval $xrun
5894 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5895         eval $xscan;\
5896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5897                 eval $xrun
5898 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5899         eval $xscan;\
5900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5901                 eval $xrun
5902 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5903         eval $xscan;\
5904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5905                 eval $xrun
5906 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5907         eval $xscan;\
5908         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5909                 eval $xrun
5910 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5911         eval $xscan;\
5912         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5913                 eval $xrun
5914 else
5915         $nm -p $* 2>/dev/null >libc.tmp
5916         $grep fprintf libc.tmp > libc.ptf
5917         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5918                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5919         then
5920                 nm_opt='-p'
5921                 eval $xrun
5922         else
5923                 echo " "
5924                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5925                 com=''
5926                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5927                         for thisname in $libnames $libc; do
5928                                 $ar t $thisname >>libc.tmp
5929                         done
5930                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5931                         echo "Ok." >&4
5932                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5933                         # Repeat libc to extract forwarders to DLL entries too
5934                         for thisname in $libnames $libc; do
5935                                 $ar tv $thisname >>libc.tmp
5936                                 # Revision 50 of EMX has bug in $ar.
5937                                 # it will not extract forwarders to DLL entries
5938                                 # Use emximp which will extract exactly them.
5939                                 emximp -o tmp.imp $thisname \
5940                                     2>/dev/null && \
5941                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5942                                     < tmp.imp >>libc.tmp
5943                                 $rm tmp.imp
5944                         done
5945                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5946                         echo "Ok." >&4
5947                 else
5948                         echo "$ar didn't seem to work right." >&4
5949                         echo "Maybe this is a Cray...trying bld instead..." >&4
5950                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5951                         then
5952                                 for thisname in $libnames; do
5953                                         bld t $libnames | \
5954                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5955                                         $ar t $thisname >>libc.tmp
5956                                 done
5957                                 echo "Ok." >&4
5958                         else
5959                                 echo "That didn't work either.  Giving up." >&4
5960                                 exit 1
5961                         fi
5962                 fi
5963         fi
5964 fi
5965 nm_extract="$com"
5966 if $test -f /lib/syscalls.exp; then
5967         echo " "
5968         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5969         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5970 fi
5971 ;;
5972 esac
5973 $rm -f libnames libpath
5974
5975 : see if dld is available
5976 set dld.h i_dld
5977 eval $inhdr
5978
5979 : is a C symbol defined?
5980 csym='tlook=$1;
5981 case "$3" in
5982 -v) tf=libc.tmp; tc=""; tdc="";;
5983 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5984 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5985 esac;
5986 tx=yes;
5987 case "$reuseval-$4" in
5988 true-) ;;
5989 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5990 esac;
5991 case "$tx" in
5992 yes)
5993         case "$runnm" in
5994         true)
5995                 if $contains $tlook $tf >/dev/null 2>&1;
5996                 then tval=true;
5997                 else tval=false;
5998                 fi;;
5999         *)
6000                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6001                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6002                 then tval=true;
6003                 else tval=false;
6004                 fi;
6005                 $rm -f t t.c;;
6006         esac;;
6007 *)
6008         case "$tval" in
6009         $define) tval=true;;
6010         *) tval=false;;
6011         esac;;
6012 esac;
6013 eval "$2=$tval"'
6014
6015 : define an is-in-libc? function
6016 inlibc='echo " "; td=$define; tu=$undef;
6017 sym=$1; var=$2; eval "was=\$$2";
6018 tx=yes;
6019 case "$reuseval$was" in
6020 true) ;;
6021 true*) tx=no;;
6022 esac;
6023 case "$tx" in
6024 yes)
6025         set $sym tres -f;
6026         eval $csym;
6027         case "$tres" in
6028         true)
6029                 echo "$sym() found." >&4;
6030                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6031         *)
6032                 echo "$sym() NOT found." >&4;
6033                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6034         esac;;
6035 *)
6036         case "$was" in
6037         $define) echo "$sym() found." >&4;;
6038         *) echo "$sym() NOT found." >&4;;
6039         esac;;
6040 esac'
6041
6042 : see if dlopen exists
6043 xxx_runnm="$runnm"
6044 runnm=false
6045 set dlopen d_dlopen
6046 eval $inlibc
6047 runnm="$xxx_runnm"
6048
6049 : determine which dynamic loading, if any, to compile in
6050 echo " "
6051 dldir="ext/DynaLoader"
6052 case "$usedl" in
6053 $define|y|true)
6054         dflt='y'
6055         usedl="$define"
6056         ;;
6057 $undef|n|false)
6058         dflt='n'
6059         usedl="$undef"
6060         ;;
6061 *) 
6062         dflt='n'
6063         case "$d_dlopen" in
6064             $define) dflt='y' ;;
6065         esac
6066         case "$i_dld" in
6067             $define) dflt='y' ;;
6068         esac
6069         : Does a dl_xxx.xs file exist for this operating system
6070         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6071         ;;
6072 esac
6073 rp="Do you wish to use dynamic loading?"
6074 . ./myread
6075 usedl="$ans"
6076 case "$ans" in
6077 y*) usedl="$define"
6078         case "$dlsrc" in
6079         '')
6080                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6081                         dflt="$dldir/dl_${osname}.xs"
6082                 elif $test "$d_dlopen" = "$define" ; then
6083                         dflt="$dldir/dl_dlopen.xs"
6084                 elif $test "$i_dld" = "$define" ; then
6085                         dflt="$dldir/dl_dld.xs"
6086                 else
6087                         dflt=''
6088                 fi
6089                 ;;
6090         *)      dflt="$dldir/$dlsrc"
6091                 ;;
6092         esac
6093     echo "The following dynamic loading files are available:"
6094         : Can not go over to $dldir because getfile has path hard-coded in.
6095         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6096         rp="Source file to use for dynamic loading"
6097         fn="fne"
6098         gfpth="$src"
6099         . ./getfile
6100         usedl="$define"
6101         : emulate basename
6102         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6103
6104         $cat << EOM
6105
6106 Some systems may require passing special flags to $cc -c to
6107 compile modules that will be used to create a shared library.
6108 To use no flags, say "none".
6109
6110 EOM
6111     case "$cccdlflags" in
6112     '') case "$gccversion" in
6113                 '') case "$osname" in
6114                         hpux)   dflt='+z' ;;
6115                         next)   dflt='none' ;;
6116                         irix*)  dflt='-KPIC' ;;
6117                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6118                         sunos)  dflt='-pic' ;;
6119                         *)      dflt='none' ;;
6120                     esac
6121                         ;;
6122                 *)  case "$osname" in
6123                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6124                         *)      dflt='-fpic' ;;
6125                     esac ;;
6126             esac ;;
6127         ' ') dflt='none' ;;
6128     *)  dflt="$cccdlflags" ;;
6129     esac
6130     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6131     . ./myread
6132     case "$ans" in
6133     none) cccdlflags=' ' ;;
6134     *) cccdlflags="$ans" ;;
6135     esac
6136
6137     cat << EOM
6138
6139 Some systems use ld to create libraries that can be dynamically loaded,
6140 while other systems (such as those using ELF) use $cc.
6141
6142 EOM
6143         case "$ld" in
6144         '')     $cat >try.c <<'EOM'
6145 /* Test for whether ELF binaries are produced */
6146 #include <fcntl.h>
6147 #include <stdlib.h>
6148 int main() {
6149         char b[4];
6150         int i = open("a.out",O_RDONLY);
6151         if(i == -1) 
6152                 exit(1); /* fail */
6153         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6154                 exit(0); /* succeed (yes, it's ELF) */
6155         else
6156                 exit(1); /* fail */
6157 }
6158 EOM
6159                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6160                         cat <<EOM
6161 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6162 EOM
6163                         dflt="$cc"
6164                 else
6165                         echo "I'll use ld to build dynamic libraries."
6166                         dflt='ld'
6167                 fi
6168                 rm -f try.c a.out
6169                 ;;
6170         *)      dflt="$ld"
6171                 ;;
6172         esac
6173
6174     rp="What command should be used to create dynamic libraries?"
6175     . ./myread
6176         ld="$ans"
6177
6178     cat << EOM
6179
6180 Some systems may require passing special flags to $ld to create a
6181 library that can be dynamically loaded.  If your ld flags include
6182 -L/other/path options to locate libraries outside your loader's normal
6183 search path, you may need to specify those -L options here as well.  To
6184 use no flags, say "none".
6185
6186 EOM
6187     case "$lddlflags" in
6188     '') case "$osname" in
6189                         beos) dflt='-nostart' ;;
6190                         hpux) dflt='-b';
6191                               case "$gccversion" in
6192                               '') dflt="$dflt +vnocompatwarnings" ;;
6193                               esac
6194                               ;;        
6195                         linux|irix*)    dflt='-shared' ;;
6196                         next)  dflt='none' ;;
6197                         solaris) dflt='-G' ;;
6198                         sunos) dflt='-assert nodefinitions' ;;
6199                         svr4*|esix*) dflt="-G $ldflags" ;;
6200                 *)     dflt='none' ;;
6201                         esac
6202                         ;;
6203     *) dflt="$lddlflags" ;;
6204     esac
6205
6206         : Try to guess additional flags to pick up local libraries.
6207         : Be careful not to append to a plain 'none'
6208         case "$dflt" in
6209         none) dflt='' ;;
6210         esac
6211         for thisflag in $ldflags; do
6212                 case "$thisflag" in
6213                 -L*)
6214                         case " $dflt " in
6215                         *" $thisflag "*) ;;
6216                         *) dflt="$dflt $thisflag" ;;
6217                         esac
6218                         ;;
6219                 esac
6220         done
6221
6222         case "$dflt" in
6223         ''|' ') dflt='none' ;;
6224         esac
6225
6226     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6227     . ./myread
6228     case "$ans" in
6229     none) lddlflags=' ' ;;
6230     *) lddlflags="$ans" ;;
6231     esac
6232
6233         cat <<EOM
6234
6235 Some systems may require passing special flags to $cc to indicate that
6236 the resulting executable will use dynamic linking.  To use no flags,
6237 say "none".
6238
6239 EOM
6240     case "$ccdlflags" in
6241     '') case "$osname" in
6242                 hpux)   dflt='-Wl,-E' ;;
6243                 linux)  dflt='-rdynamic' ;;
6244                 next)   dflt='none' ;;
6245                 sunos)  dflt='none' ;;
6246                 *)      dflt='none' ;;
6247             esac ;;
6248     ' ')  dflt='none' ;;
6249     *)  dflt="$ccdlflags" ;;
6250     esac
6251     rp="Any special flags to pass to $cc to use dynamic linking?"
6252     . ./myread
6253     case "$ans" in
6254     none) ccdlflags=' ' ;;
6255     *) ccdlflags="$ans" ;;
6256     esac
6257     ;;
6258 *)  usedl="$undef"
6259         ld='ld'
6260     dlsrc='dl_none.xs'
6261     lddlflags=''
6262     ccdlflags=''
6263     ;;
6264 esac
6265
6266 also=''
6267 case "$usedl" in
6268 $undef)
6269         # No dynamic loading being used, so don't bother even to prompt.
6270         useshrplib='false'
6271         ;;
6272 *)      case "$useshrplib" in
6273         '')     case "$osname" in
6274                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6275                         dflt=y
6276                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6277                         ;;
6278                 next*)
6279                         case "$osvers" in
6280                         4*)     dflt=y
6281                                 also='Building a shared libperl is needed for MAB support.'
6282                                 ;;
6283                         *)      dflt=n
6284                                 ;;
6285                         esac
6286                         ;;
6287                 *)      dflt=n
6288                         ;;
6289                 esac
6290                 ;;
6291         $define|true|[Yy]*)
6292                 dflt=y
6293                 ;;
6294         *)      dflt=n
6295                 ;;
6296         esac
6297         $cat << EOM
6298
6299 The perl executable is normally obtained by linking perlmain.c with
6300 libperl${_a}, any static extensions (usually just DynaLoader), and
6301 any other libraries needed on this system (such as -lm, etc.).  Since
6302 your system supports dynamic loading, it is probably possible to build
6303 a shared libperl.$so.  If you will have more than one executable linked
6304 to libperl.$so, this will significantly reduce the size of each
6305 executable, but it may have a noticeable affect on performance.  The
6306 default is probably sensible for your system.
6307 $also
6308
6309 EOM
6310         rp="Build a shared libperl.$so (y/n)"
6311         . ./myread
6312         case "$ans" in
6313         true|$define|[Yy]*)
6314                 useshrplib='true'  ;;
6315         *)      useshrplib='false' ;;
6316         esac
6317         ;;
6318 esac
6319
6320 case "$useshrplib" in
6321 true)
6322         case "$libperl" in
6323         '')
6324                 # Figure out a good name for libperl.so.  Since it gets stored in
6325                 # a version-specific architecture-dependent library, the version
6326                 # number isn't really that important, except for making cc/ld happy.
6327                 #
6328                 # A name such as libperl.so.3.1
6329                 majmin="libperl.$so.$patchlevel.$subversion"
6330                 # A name such as libperl.so.301
6331                 majonly=`echo $patchlevel $subversion |
6332                         $awk '{printf "%d%02d", $1, $2}'`
6333                 majonly=libperl.$so.$majonly
6334                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6335                 # rely on figuring it out from the naming of libc.
6336                 case "${osname}${osvers}" in
6337                 next4*)
6338                         dflt=libperl.5.$so
6339                         # XXX How handle the --version stuff for MAB?
6340                         ;;
6341                 linux*)  # ld won't link with a bare -lperl otherwise.
6342                         dflt=libperl.$so
6343                         ;;
6344                 cygwin*) # include version
6345                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6346                         ;;
6347                 *)      # Try to guess based on whether libc has major.minor.
6348                         case "$libc" in
6349                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6350                         *libc.$so.[0-9]*) dflt=$majonly ;;
6351                         *)      dflt=libperl.$so ;;
6352                         esac
6353                         ;;
6354                 esac
6355                 ;;
6356         *)      dflt=$libperl
6357                 ;;
6358         esac
6359         cat << EOM
6360
6361 I need to select a good name for the shared libperl.  If your system uses
6362 library names with major and minor numbers, then you might want something
6363 like $majmin.  Alternatively, if your system uses a single version
6364 number for shared libraries, then you might want to use $majonly.
6365 Or, your system might be quite happy with a simple libperl.$so.
6366
6367 Since the shared libperl will get installed into a version-specific
6368 architecture-dependent directory, the version number of the shared perl
6369 library probably isn't important, so the default should be o.k.
6370
6371 EOM
6372         rp='What name do you want to give to the shared libperl?'
6373         . ./myread
6374         libperl=$ans
6375         echo "Ok, I'll use $libperl"
6376         ;;
6377 *)
6378         libperl="libperl${_a}"
6379         ;;
6380 esac
6381
6382 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6383 case "$shrpdir" in
6384 '') ;;
6385 *)      $cat >&4 <<EOM
6386 WARNING:  Use of the shrpdir variable for the installation location of
6387 the shared $libperl is not supported.  It was never documented and
6388 will not work in this version.  Let me (perlbug@perl.com)
6389 know of any problems this may cause.
6390
6391 EOM
6392         case "$shrpdir" in
6393         "$archlibexp/CORE")
6394                 $cat >&4 <<EOM
6395 But your current setting of $shrpdir is
6396 the default anyway, so it's harmless.
6397 EOM
6398                 ;;
6399         *)
6400                 $cat >&4 <<EOM
6401 Further, your current attempted setting of $shrpdir
6402 conflicts with the value of $archlibexp/CORE
6403 that installperl will use.
6404 EOM
6405                 ;;
6406         esac
6407         ;;
6408 esac
6409
6410 # How will the perl executable find the installed shared $libperl?
6411 # Add $xxx to ccdlflags.
6412 # If we can't figure out a command-line option, use $shrpenv to
6413 # set env LD_RUN_PATH.  The main perl makefile uses this.
6414 shrpdir=$archlibexp/CORE
6415 xxx=''
6416 tmp_shrpenv=''
6417 if "$useshrplib"; then
6418     case "$osname" in 
6419         aix)
6420                 # We'll set it in Makefile.SH...
6421                 ;;
6422         solaris|netbsd)
6423                 xxx="-R $shrpdir"
6424                 ;;
6425         freebsd)
6426                 xxx="-Wl,-R$shrpdir"
6427                 ;;
6428         linux|irix*|dec_osf)
6429                 xxx="-Wl,-rpath,$shrpdir"
6430                 ;;
6431         next)
6432                 # next doesn't like the default...
6433                 ;;
6434         beos)
6435                 # beos doesn't like the default, either.
6436                 ;;
6437         hpux*)
6438                 # hpux doesn't like the default, either.
6439                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6440                 ;;
6441         *)
6442                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6443                 ;;
6444         esac
6445         case "$xxx" in
6446         '') ;;
6447         *)      
6448                 # Only add $xxx if it isn't already in ccdlflags.
6449                 case " $ccdlflags " in
6450                 *" $xxx "*)     ;;
6451                 *)      ccdlflags="$ccdlflags $xxx"
6452                         cat <<EOM >&4
6453
6454 Adding $xxx to the flags
6455 passed to $ld so that the perl executable will find the 
6456 installed shared $libperl.
6457
6458 EOM
6459                         ;;
6460                 esac
6461                 ;;
6462         esac
6463 fi
6464 # Fix ccdlflags in AIX for building external extensions.
6465 # (For building Perl itself bare -bE:perl.exp is needed,
6466 #  Makefile.SH takes care of this.)
6467 case "$osname" in
6468 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6469 esac
6470 # Respect a hint or command-line value.
6471 case "$shrpenv" in
6472 '') shrpenv="$tmp_shrpenv" ;;
6473 esac
6474 case "$ldlibpthname" in
6475 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6476 none)   ldlibpthname='' ;;
6477 esac
6478
6479 : determine where manual pages go
6480 set man1dir man1dir none
6481 eval $prefixit
6482 $cat <<EOM
6483
6484 $spackage has manual pages available in source form.
6485 EOM
6486 case "$nroff" in
6487 nroff)
6488         echo "However, you don't have nroff, so they're probably useless to you."
6489         case "$man1dir" in
6490         '') man1dir="none";;
6491         esac;;
6492 esac
6493 echo "If you don't want the manual sources installed, answer 'none'."
6494 case "$man1dir" in
6495 ' ') dflt=none
6496         ;;
6497 '')
6498         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6499         lookpath="$lookpath $prefixexp/man/p_man/man1"
6500         lookpath="$lookpath $prefixexp/man/u_man/man1"
6501         lookpath="$lookpath $prefixexp/man/man.1"
6502         case "$sysman" in
6503         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6504         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6505         esac
6506         set dflt
6507         eval $prefixup
6508         ;;
6509 *)  dflt="$man1dir"
6510         ;;
6511 esac
6512 echo " "
6513 fn=dn+~
6514 rp="Where do the main $spackage manual pages (source) go?"
6515 . ./getfile
6516 if $test "X$man1direxp" != "X$ansexp"; then
6517         installman1dir=''
6518 fi
6519 man1dir="$ans"
6520 man1direxp="$ansexp"
6521 case "$man1dir" in
6522 '')     man1dir=' '
6523         installman1dir='';;
6524 esac
6525
6526 : Change installation prefix, if necessary.
6527 if $test X"$prefix" != X"$installprefix"; then
6528         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6529 else
6530         installman1dir="$man1direxp"
6531 fi
6532
6533 : What suffix to use on installed man pages
6534
6535 case "$man1dir" in
6536 ' ')
6537         man1ext='0'
6538         ;;
6539 *)
6540         rp="What suffix should be used for the main $spackage man pages?"
6541         case "$man1ext" in
6542         '')     case "$man1dir" in
6543                 *1)  dflt=1 ;;
6544                 *1p) dflt=1p ;;
6545                 *1pm) dflt=1pm ;;
6546                 *l) dflt=l;;
6547                 *n) dflt=n;;
6548                 *o) dflt=o;;
6549                 *p) dflt=p;;
6550                 *C) dflt=C;;
6551                 *L) dflt=L;;
6552                 *L1) dflt=L1;;
6553                 *) dflt=1;;
6554                 esac
6555                 ;;
6556         *)      dflt="$man1ext";;
6557         esac
6558         . ./myread
6559         man1ext="$ans"
6560         ;;
6561 esac
6562
6563 : see if we can have long filenames
6564 echo " "
6565 rmlist="$rmlist /tmp/cf$$"
6566 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6567 first=123456789abcdef
6568 second=/tmp/cf$$/$first
6569 $rm -f $first $second
6570 if (echo hi >$first) 2>/dev/null; then
6571         if $test -f 123456789abcde; then
6572                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6573                 val="$undef"
6574         else
6575                 if (echo hi >$second) 2>/dev/null; then
6576                         if $test -f /tmp/cf$$/123456789abcde; then
6577                                 $cat <<'EOM'
6578 That's peculiar... You can have filenames longer than 14 characters, but only
6579 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6580 I shall consider your system cannot support long filenames at all.
6581 EOM
6582                                 val="$undef"
6583                         else
6584                                 echo 'You can have filenames longer than 14 characters.' >&4
6585                                 val="$define"
6586                         fi
6587                 else
6588                         $cat <<'EOM'
6589 How confusing! Some of your filesystems are sane enough to allow filenames
6590 longer than 14 characters but some others like /tmp can't even think about them.
6591 So, for now on, I shall assume your kernel does not allow them at all.
6592 EOM
6593                         val="$undef"
6594                 fi
6595         fi
6596 else
6597         $cat <<'EOM'
6598 You can't have filenames longer than 14 chars.  You can't even think about them!
6599 EOM
6600         val="$undef"
6601 fi 
6602 set d_flexfnam
6603 eval $setvar
6604 $rm -rf /tmp/cf$$ 123456789abcde*
6605
6606 : determine where library module manual pages go
6607 set man3dir man3dir none
6608 eval $prefixit
6609 $cat <<EOM
6610
6611 $spackage has manual pages for many of the library modules.
6612 EOM
6613
6614 case "$nroff" in
6615 nroff)
6616         $cat <<'EOM'
6617 However, you don't have nroff, so they're probably useless to you.
6618 EOM
6619         case "$man3dir" in
6620         '') man3dir="none";;
6621         esac;;
6622 esac
6623
6624 case "$d_flexfnam" in
6625 undef)
6626         $cat <<'EOM'
6627 However, your system can't handle the long file names like File::Basename.3. 
6628 EOM
6629         case "$man3dir" in
6630         '') man3dir="none";;
6631         esac;;
6632 esac
6633
6634 echo "If you don't want the manual sources installed, answer 'none'."
6635 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6636 case "$man3dir" in
6637 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6638         if $test -d "$privlib/man/man3"; then
6639                 cat <<EOM >&4
6640
6641 WARNING:  Previous versions of perl installed man3 pages into
6642 $privlib/man/man3.  This version will suggest a 
6643 new default of $dflt.  
6644 EOM
6645                 tdflt=$dflt
6646                 dflt='n'
6647                 rp='Do you wish to preserve the old behavior?(y/n)'
6648                 . ./myread
6649                 case "$ans" in
6650                 y*) dflt="$privlib/man/man3" ;;
6651                 *)  dflt=$tdflt ;;
6652                 esac
6653     fi
6654         ;;
6655 ' ') dflt=none;;
6656 *)      dflt="$man3dir" ;;
6657 esac
6658 echo " "
6659 fn=dn+~
6660 rp="Where do the $package library man pages (source) go?"
6661 . ./getfile
6662 man3dir="$ans"
6663 man3direxp="$ansexp"
6664 case "$man1dir" in
6665 '')     man3dir=' '
6666         installman3dir='';;
6667 esac
6668
6669 : Change installation prefix, if necessary.
6670 if $test X"$prefix" != X"$installprefix"; then
6671         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6672 else
6673         installman3dir="$man3direxp"
6674 fi
6675
6676 : What suffix to use on installed man pages
6677 case "$man3dir" in
6678 ' ')
6679         man3ext='0'
6680         ;;
6681 *)
6682         rp="What suffix should be used for the $package library man pages?"
6683         case "$man3ext" in
6684         '')     case "$man3dir" in
6685                 *3)  dflt=3 ;;
6686                 *3p) dflt=3p ;;
6687                 *3pm) dflt=3pm ;;
6688                 *l) dflt=l;;
6689                 *n) dflt=n;;
6690                 *o) dflt=o;;
6691                 *p) dflt=p;;
6692                 *C) dflt=C;;
6693                 *L) dflt=L;;
6694                 *L3) dflt=L3;;
6695                 *) dflt=3;;
6696                 esac
6697                 ;;
6698         *)      dflt="$man3ext";;
6699         esac
6700         . ./myread
6701         man3ext="$ans"
6702         ;;
6703 esac
6704
6705 : see if we have to deal with yellow pages, now NIS.
6706 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6707         if $test -f /usr/etc/nibindd; then
6708                 echo " "
6709                 echo "I'm fairly confident you're on a NeXT."
6710                 echo " "
6711                 rp='Do you get the hosts file via NetInfo?'
6712                 dflt=y
6713                 case "$hostcat" in
6714                 nidump*) ;;
6715                 '') ;;
6716                 *) dflt=n;;
6717                 esac
6718                 . ./myread
6719                 case "$ans" in
6720                 y*) hostcat='nidump hosts .';;
6721                 *)      case "$hostcat" in
6722                         nidump*) hostcat='';;
6723                         esac
6724                         ;;
6725                 esac
6726         fi
6727         case "$hostcat" in
6728         nidump*) ;;
6729         *)
6730                 case "$hostcat" in
6731                 *ypcat*) dflt=y;;
6732                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6733                                 dflt=y
6734                         else
6735                                 dflt=n
6736                         fi;;
6737                 *) dflt=n;;
6738                 esac
6739                 echo " "
6740                 rp='Are you getting the hosts file via yellow pages?'
6741                 . ./myread
6742                 case "$ans" in
6743                 y*) hostcat='ypcat hosts';;
6744                 *) hostcat='cat /etc/hosts';;
6745                 esac
6746                 ;;
6747         esac
6748 fi
6749 case "$hostcat" in
6750 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6751 esac
6752 case "$groupcat" in
6753 '') test -f /etc/group && groupcat='cat /etc/group';;
6754 esac
6755 case "$passcat" in
6756 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6757 esac
6758
6759 : now get the host name
6760 echo " "
6761 echo "Figuring out host name..." >&4
6762 case "$myhostname" in
6763 '') cont=true
6764         echo 'Maybe "hostname" will work...'
6765         if tans=`sh -c hostname 2>&1` ; then
6766                 myhostname=$tans
6767                 phostname=hostname
6768                 cont=''
6769         fi
6770         ;;
6771 *) cont='';;
6772 esac
6773 if $test "$cont"; then
6774         if ./xenix; then
6775                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6776                 if tans=`cat /etc/systemid 2>&1` ; then
6777                         myhostname=$tans
6778                         phostname='cat /etc/systemid'
6779                         echo "Whadyaknow.  Xenix always was a bit strange..."
6780                         cont=''
6781                 fi
6782         elif $test -r /etc/systemid; then
6783                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6784         fi
6785 fi
6786 if $test "$cont"; then
6787         echo 'No, maybe "uuname -l" will work...'
6788         if tans=`sh -c 'uuname -l' 2>&1` ; then
6789                 myhostname=$tans
6790                 phostname='uuname -l'
6791         else
6792                 echo 'Strange.  Maybe "uname -n" will work...'
6793                 if tans=`sh -c 'uname -n' 2>&1` ; then
6794                         myhostname=$tans
6795                         phostname='uname -n'
6796                 else
6797                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6798                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6799                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6800                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6801                         else
6802                                 case "$myhostname" in
6803                                 '') echo "Does this machine have an identity crisis or something?"
6804                                         phostname='';;
6805                                 *)
6806                                         echo "Well, you said $myhostname before..."
6807                                         phostname='echo $myhostname';;
6808                                 esac
6809                         fi
6810                 fi
6811         fi
6812 fi
6813 : you do not want to know about this
6814 set $myhostname
6815 myhostname=$1
6816
6817 : verify guess
6818 if $test "$myhostname" ; then
6819         dflt=y
6820         rp='Your host name appears to be "'$myhostname'".'" Right?"
6821         . ./myread
6822         case "$ans" in
6823         y*) ;;
6824         *) myhostname='';;
6825         esac
6826 fi
6827
6828 : bad guess or no guess
6829 while $test "X$myhostname" = X ; do
6830         dflt=''
6831         rp="Please type the (one word) name of your host:"
6832         . ./myread
6833         myhostname="$ans"
6834 done
6835
6836 : translate upper to lower if necessary
6837 case "$myhostname" in
6838 *[A-Z]*)
6839         echo "(Normalizing case in your host name)"
6840         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6841         ;;
6842 esac
6843
6844 case "$myhostname" in
6845 *.*)
6846         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6847         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6848         echo "(Trimming domain name from host name--host name is now $myhostname)"
6849         ;;
6850 *) case "$mydomain" in
6851         '')
6852                 {
6853                         test "X$hostcat" = "Xypcat hosts" &&
6854                         ypmatch "$myhostname" hosts 2>/dev/null |\
6855                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6856                         $test -s hosts
6857                 } || {
6858                         test "X$hostcat" != "X" &&
6859                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6860                                         /[       ]$myhostname[  . ]/p" > hosts
6861                 }
6862                 tmp_re="[       . ]"
6863                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6864                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6865                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6866                         hosts | $sort | $uniq | \
6867                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6868                 case `$echo X$dflt` in
6869                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6870                         dflt=.
6871                         ;;
6872                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6873                         ;;
6874                 esac
6875                 case "$dflt" in
6876                 .)
6877                         tans=`./loc resolv.conf X /etc /usr/etc`
6878                         if $test -f "$tans"; then
6879                                 echo "(Attempting domain name extraction from $tans)"
6880                                 dflt=.`$sed -n -e 's/   / /g' \
6881                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6882                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6883                                 case "$dflt" in
6884                                 .) dflt=.`$sed -n -e 's/        / /g' \
6885                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6886                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6887                                         ;;
6888                                 esac
6889                         fi
6890                         ;;
6891                 esac
6892                 case "$dflt" in
6893                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6894                         dflt=.`sh -c domainname 2>/dev/null`
6895                         case "$dflt" in
6896                         '') dflt='.';;
6897                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6898                         esac
6899                         ;;
6900                 esac
6901                 case "$dflt" in
6902                 .) echo "(Lost all hope -- silly guess then)"
6903                         dflt='.uucp'
6904                         ;;
6905                 esac
6906                 $rm -f hosts
6907                 ;;
6908         *) dflt="$mydomain";;
6909         esac;;
6910 esac
6911 echo " "
6912 rp="What is your domain name?"
6913 . ./myread
6914 tans="$ans"
6915 case "$ans" in
6916 '') ;;
6917 .*) ;;
6918 *) tans=".$tans";;
6919 esac
6920 mydomain="$tans"
6921
6922 : translate upper to lower if necessary
6923 case "$mydomain" in
6924 *[A-Z]*)
6925         echo "(Normalizing case in your domain name)"
6926         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6927         ;;
6928 esac
6929
6930 : a little sanity check here
6931 case "$phostname" in
6932 '') ;;
6933 *)
6934         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6935         $myhostname$mydomain|$myhostname) ;;
6936         *)
6937                 case "$phostname" in
6938                 sed*)
6939                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6940                         ;;
6941                 *)
6942                         echo "(That doesn't agree with your $phostname command, by the way.)"
6943                         ;;
6944                 esac
6945         ;;
6946         esac
6947         ;;
6948 esac
6949
6950 $cat <<EOM
6951
6952 I need to get your e-mail address in Internet format if possible, i.e.
6953 something like user@host.domain. Please answer accurately since I have
6954 no easy means to double check it. The default value provided below
6955 is most probably close to reality but may not be valid from outside
6956 your organization...
6957
6958 EOM
6959 cont=x
6960 while test "$cont"; do
6961         case "$cf_email" in
6962         '') dflt="$cf_by@$myhostname$mydomain";;
6963         *) dflt="$cf_email";;
6964         esac
6965         rp='What is your e-mail address?'
6966         . ./myread
6967         cf_email="$ans"
6968         case "$cf_email" in
6969         *@*.*) cont='' ;;
6970         *)
6971                 rp='Address does not look like an Internet one.  Use it anyway?'
6972                 case "$fastread" in
6973                 yes) dflt=y ;;
6974                 *) dflt=n ;;
6975                 esac
6976                 . ./myread
6977                 case "$ans" in
6978                 y*) cont='' ;;
6979                 *) echo " " ;;
6980                 esac
6981                 ;;
6982         esac
6983 done
6984
6985 $cat <<EOM
6986
6987 If you or somebody else will be maintaining perl at your site, please
6988 fill in the correct e-mail address here so that they may be contacted
6989 if necessary. Currently, the "perlbug" program included with perl
6990 will send mail to this address in addition to perlbug@perl.com. You may
6991 enter "none" for no administrator.
6992
6993 EOM
6994 case "$perladmin" in
6995 '') dflt="$cf_email";;
6996 *) dflt="$perladmin";;
6997 esac
6998 rp='Perl administrator e-mail address'
6999 . ./myread
7000 perladmin="$ans"
7001
7002 : figure out how to guarantee perl startup
7003 case "$startperl" in
7004 '')
7005         case "$sharpbang" in
7006         *!)
7007                 $cat <<EOH
7008
7009 I can use the #! construct to start perl on your system. This will
7010 make startup of perl scripts faster, but may cause problems if you
7011 want to share those scripts and perl is not in a standard place
7012 ($binexp/perl) on all your platforms. The alternative is to force
7013 a shell by starting the script with a single ':' character.
7014
7015 EOH
7016                 dflt="$binexp/perl"
7017                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7018                 . ./myread
7019                 case "$ans" in
7020                 none)   startperl=": # use perl";;
7021                 *)      startperl="#!$ans"
7022                         if $test 30 -lt `echo "$ans" | wc -c`; then
7023                                 $cat >&4 <<EOM
7024
7025 WARNING:  Some systems limit the #! command to 32 characters.
7026 If you experience difficulty running Perl scripts with #!, try
7027 installing Perl in a directory with a shorter pathname.
7028
7029 EOM
7030                         fi ;;
7031                 esac
7032                 ;;
7033         *) startperl=": # use perl"
7034                 ;;
7035         esac
7036         ;;
7037 esac
7038 echo "I'll use $startperl to start perl scripts."
7039
7040 : figure best path for perl in scripts
7041 case "$perlpath" in
7042 '')
7043         perlpath="$binexp/perl"
7044         case "$startperl" in
7045         *!*) ;;
7046         *)
7047                 $cat <<EOH
7048
7049 I will use the "eval 'exec'" idiom to start Perl on your system.
7050 I can use the full path of your Perl binary for this purpose, but
7051 doing so may cause problems if you want to share those scripts and
7052 Perl is not always in a standard place ($binexp/perl).
7053
7054 EOH
7055                 dflt="$binexp/perl"
7056                 rp="What path shall I use in \"eval 'exec'\"?"
7057                 . ./myread
7058                 perlpath="$ans"
7059                 ;;
7060         esac
7061         ;;
7062 esac
7063 case "$startperl" in
7064 *!*)    ;;
7065 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7066 esac
7067
7068 : determine where public executable scripts go
7069 set scriptdir scriptdir
7070 eval $prefixit
7071 case "$scriptdir" in
7072 '')
7073         dflt="$bin"
7074         : guess some guesses
7075         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7076         $test -d /usr/share/bin     && dflt=/usr/share/bin
7077         $test -d /usr/local/script  && dflt=/usr/local/script
7078         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7079         $test -d $prefixexp/script  && dflt=$prefixexp/script
7080         set dflt
7081         eval $prefixup
7082         ;;
7083 *)  dflt="$scriptdir"
7084         ;;
7085 esac
7086 $cat <<EOM
7087  
7088 Some installations have a separate directory just for executable scripts so
7089 that they can mount it across multiple architectures but keep the scripts in
7090 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7091 Or you might just lump your scripts in with all your other executables.
7092  
7093 EOM
7094 fn=d~
7095 rp='Where do you keep publicly executable scripts?'
7096 . ./getfile
7097 if $test "X$ansexp" != "X$scriptdirexp"; then
7098         installscript=''
7099 fi
7100 scriptdir="$ans"
7101 scriptdirexp="$ansexp"
7102 : Change installation prefix, if necessary.
7103 if $test X"$prefix" != X"$installprefix"; then
7104         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7105 else
7106         installscript="$scriptdirexp"
7107 fi
7108
7109 : determine where site specific architecture-dependent libraries go.
7110 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7111 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7112 : sitelib may have an optional trailing /share.
7113 case "$sitearch" in
7114 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7115         dflt="$dflt/$archname"
7116         ;;
7117 *)      dflt="$sitearch"
7118         ;;
7119 esac
7120 set sitearch sitearch none
7121 eval $prefixit
7122 $cat <<EOM
7123
7124 The installation process will also create a directory for
7125 architecture-dependent site-specific extensions and modules.
7126
7127 EOM
7128 fn=d~+
7129 rp='Pathname for the site-specific architecture-dependent library files?'
7130 . ./getfile
7131 sitearch="$ans"
7132 sitearchexp="$ansexp"
7133 : Change installation prefix, if necessary.
7134 if $test X"$prefix" != X"$installprefix"; then
7135         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7136 else
7137         installsitearch="$sitearchexp"
7138 fi
7139
7140 : determine where add-on public executables go
7141 case "$sitebin" in
7142 '')     dflt=$siteprefix/bin ;;
7143 *)      dflt=$sitebin ;;
7144 esac
7145 fn=d~
7146 rp='Pathname where the add-on public executables should be installed?'
7147 . ./getfile
7148 sitebin="$ans"
7149 sitebinexp="$ansexp"
7150 : Change installation prefix, if necessary.
7151 if $test X"$prefix" != X"$installprefix"; then
7152         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7153 else
7154         installsitebin="$sitebinexp"
7155 fi
7156
7157 : see if sqrtl exists
7158 set sqrtl d_sqrtl
7159 eval $inlibc
7160
7161 case "$ccflags" in
7162 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7163 esac
7164
7165 case "$uselongdouble" in
7166 $define|true|[yY]*)     dflt='y';;
7167 *) dflt='n';;
7168 esac
7169 cat <<EOM
7170
7171 Perl can be built to take advantage of long doubles which
7172 (if available) may give more accuracy and range for floating point numbers.
7173
7174 If this doesn't make any sense to you, just accept the default '$dflt'.
7175 EOM
7176 rp='Try to use long doubles if available?'
7177 . ./myread
7178 case "$ans" in
7179 y|Y)    val="$define"   ;;
7180 *)      val="$undef"    ;;
7181 esac
7182 set uselongdouble
7183 eval $setvar
7184
7185 case "$uselongdouble" in
7186 true|[yY]*) uselongdouble="$define" ;;
7187 esac
7188
7189 case "$uselongdouble" in
7190 $define)
7191 : Look for a hint-file generated 'call-back-unit'.  If the
7192 : user has specified that long doubles should be used,
7193 : we may need to set or change some other defaults.
7194         if $test -f uselongdouble.cbu; then
7195                 echo "Your platform has some specific hints for long doubles, using them..."
7196                 . ./uselongdouble.cbu
7197         else
7198                 $cat <<EOM
7199 (Your platform doesn't have any specific hints for long doubles.)
7200 EOM
7201         fi
7202         ;;
7203 esac
7204
7205 case "$uselongdouble:$d_sqrtl" in
7206 $define:$undef)
7207                 $cat <<EOM >&4
7208
7209 *** You requested the use of long doubles but you do not seem to have
7210 *** the mathematic functions for long doubles.  I'm disabling the use
7211 *** of long doubles.
7212
7213 EOM
7214         uselongdouble=$undef
7215         ;;
7216 esac
7217
7218 case "$useperlio" in
7219 $define|true|[yY]*)     dflt='y';;
7220 *) dflt='n';;
7221 esac
7222 cat <<EOM
7223
7224 Previous version of $package used the standard IO mechanisms as defined
7225 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7226 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7227 the default.  This abstraction layer can use AT&T's sfio (if you already
7228 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7229 problems with some extension modules.  Using PerlIO with stdio is safe,
7230 but it is slower than plain stdio and therefore is not the default.
7231
7232 If this doesn't make any sense to you, just accept the default '$dflt'.
7233 EOM
7234 rp='Use the experimental PerlIO abstraction layer?'
7235 . ./myread
7236 case "$ans" in
7237 y|Y) 
7238         val="$define"
7239         ;;     
7240 *)      
7241         echo "Ok, doing things the stdio way"
7242         val="$undef"
7243         ;;
7244 esac
7245 set useperlio
7246 eval $setvar 
7247
7248 case "$vendorprefix" in
7249 '')     d_vendorbin="$undef"
7250         vendorbin=''
7251         vendorbinexp=''
7252         ;;
7253 *)      d_vendorbin="$define"
7254         : determine where vendor-supplied executables go.
7255         case "$vendorbin" in
7256         '') dflt=$vendorprefix/bin ;;
7257         *)      dflt="$vendorbin" ;;
7258         esac
7259         fn=d~+
7260         rp='Pathname for the vendor-supplied executables directory?'
7261         . ./getfile
7262         vendorbin="$ans"
7263         vendorbinexp="$ansexp"
7264         ;;
7265 esac
7266 : Change installation prefix, if necessary.
7267 if $test X"$prefix" != X"$installprefix"; then
7268         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7269 else
7270         installvendorbin="$vendorbinexp"
7271 fi
7272
7273 : see if qgcvt exists
7274 set qgcvt d_qgcvt
7275 eval $inlibc
7276
7277 : check for length of double
7278 echo " "
7279 case "$doublesize" in
7280 '')
7281         echo "Checking to see how big your double precision numbers are..." >&4
7282         $cat >try.c <<'EOCP'
7283 #include <stdio.h>
7284 int main()
7285 {
7286     printf("%d\n", (int)sizeof(double));
7287     exit(0);
7288 }
7289 EOCP
7290         set try
7291         if eval $compile_ok; then
7292                 doublesize=`./try`
7293                 echo "Your double is $doublesize bytes long."
7294         else
7295                 dflt='8'
7296                 echo "(I can't seem to compile the test program.  Guessing...)"
7297                 rp="What is the size of a double precision number (in bytes)?"
7298                 . ./myread
7299                 doublesize="$ans"
7300         fi
7301         ;;
7302 esac
7303 $rm -f try.c try
7304
7305 : check for long doubles
7306 echo " "
7307 echo "Checking to see if you have long double..." >&4
7308 echo 'int main() { long double x = 7.0; }' > try.c
7309 set try
7310 if eval $compile; then
7311         val="$define"
7312         echo "You have long double."
7313 else
7314         val="$undef"
7315         echo "You do not have long double."
7316 fi
7317 $rm try.*
7318 set d_longdbl
7319 eval $setvar
7320
7321 : check for length of long double
7322 case "${d_longdbl}${longdblsize}" in
7323 $define)
7324         echo " "
7325         echo "Checking to see how big your long doubles are..." >&4
7326         $cat >try.c <<'EOCP'
7327 #include <stdio.h>
7328 int main()
7329 {
7330         printf("%d\n", sizeof(long double));
7331 }
7332 EOCP
7333         set try
7334         set try
7335         if eval $compile; then
7336                 longdblsize=`./try$exe_ext`
7337                 echo "Your long doubles are $longdblsize bytes long."
7338         else
7339                 dflt='8'
7340                 echo " "
7341                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7342                 rp="What is the size of a long double (in bytes)?"
7343                 . ./myread
7344                 longdblsize="$ans"
7345         fi
7346         if $test "X$doublesize" = "X$longdblsize"; then
7347                 echo "(That isn't any different from an ordinary double.)"
7348         fi      
7349         ;;
7350 esac
7351 $rm -f try.* try
7352
7353 echo " "
7354
7355 if $test X"$d_longdbl" = X"$define"; then
7356
7357 echo "Checking how to print long doubles..." >&4
7358
7359 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7360         $cat >try.c <<'EOCP'
7361 #include <sys/types.h>
7362 #include <stdio.h>
7363 int main() {
7364   double d = 123.456;
7365   printf("%.3f\n", d);
7366 }
7367 EOCP
7368         set try
7369         if eval $compile; then
7370                 yyy=`./try$exe_ext`
7371                 case "$yyy" in
7372                 123.456)
7373                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7374                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7375                         echo "We will use %f."
7376                         ;;
7377                 esac
7378         fi
7379 fi
7380
7381 if $test X"$sPRIfldbl" = X; then
7382         $cat >try.c <<'EOCP'
7383 #include <sys/types.h>
7384 #include <stdio.h>
7385 int main() {
7386   long double d = 123.456;
7387   printf("%.3llf\n", d);
7388 }
7389 EOCP
7390         set try
7391         if eval $compile; then
7392                 yyy=`./try$exe_ext`
7393                 case "$yyy" in
7394                 123.456)
7395                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7396                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7397                         echo "We will use %llf."
7398                         ;;
7399                 esac
7400         fi
7401 fi
7402
7403 if $test X"$sPRIfldbl" = X; then
7404         $cat >try.c <<'EOCP'
7405 #include <sys/types.h>
7406 #include <stdio.h>
7407 int main() {
7408   long double d = 123.456;
7409   printf("%.3Lf\n", d);
7410 }
7411 EOCP
7412         set try
7413         if eval $compile; then
7414                 yyy=`./try$exe_ext`
7415                 case "$yyy" in
7416                 123.456)
7417                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7418                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7419                         echo "We will use %Lf."
7420                         ;;
7421                 esac
7422         fi
7423 fi
7424
7425 if $test X"$sPRIfldbl" = X; then
7426         $cat >try.c <<'EOCP'
7427 #include <sys/types.h>
7428 #include <stdio.h>
7429 int main() {
7430   long double d = 123.456;
7431   printf("%.3lf\n", d);
7432 }
7433 EOCP
7434         set try
7435         if eval $compile; then
7436                 yyy=`./try$exe_ext`
7437                 case "$yyy" in
7438                 123.456)
7439                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7440                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7441                         echo "We will use %lf."
7442                         ;;
7443                 esac
7444         fi
7445 fi
7446
7447 if $test X"$sPRIfldbl" = X; then
7448         echo "Cannot figure out how to print long doubles." >&4
7449 fi
7450
7451 $rm -f try try.*
7452
7453 fi # d_longdbl
7454
7455 case "$sPRIfldbl" in
7456 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7457         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7458         ;;
7459 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7460         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7461         ;;
7462 esac
7463
7464 : Check how to convert floats to strings.
7465 if test "X$d_Gconvert" = X; then
7466         echo " "
7467         echo "Checking for an efficient way to convert floats to strings."
7468         echo " " > try.c
7469         case "$uselongdouble" in
7470         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7471         esac
7472         case "$d_longdbl" in
7473         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7474         esac
7475         case "$d_PRIgldbl" in
7476         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7477         esac
7478         $cat >>try.c <<EOP
7479 #ifdef TRY_gconvert
7480 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7481 char *myname = "gconvert";
7482 #endif
7483 #ifdef TRY_gcvt
7484 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7485 char *myname = "gcvt";
7486 #endif
7487 #ifdef TRY_qgcvt
7488 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7489 char *myname = "qgcvt";
7490 #define DOUBLETYPE long double
7491 #endif
7492 #ifdef TRY_sprintf
7493 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7494 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7495 #else
7496 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7497 #endif
7498 char *myname = "sprintf";
7499 #endif
7500
7501 #ifndef DOUBLETYPE
7502 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7503 #define DOUBLETYPE long double
7504 #else
7505 #define DOUBLETYPE double
7506 #endif
7507 #endif
7508
7509 #include <stdio.h>
7510
7511 #define I_STDLIB $i_stdlib
7512 #ifdef I_STDLIB
7513 #include <stdlib.h>
7514 #endif
7515
7516 int
7517 checkit(expect, got)
7518 char *expect;
7519 char *got;
7520 {
7521     if (strcmp(expect, got)) {
7522                 printf("%s oddity:  Expected %s, got %s\n",
7523                         myname, expect, got);
7524                 exit(1);
7525         }
7526 }
7527
7528 int main()
7529
7530         char buf[64]; 
7531         buf[63] = '\0';
7532
7533         /* This must be 1st test on (which?) platform */
7534         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7535         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7536         checkit("0.1", buf);
7537
7538         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7539         checkit("1", buf);
7540
7541         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7542         checkit("1.1", buf);
7543
7544         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7545         checkit("1.01", buf);
7546
7547         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7548         checkit("1.001", buf);
7549
7550         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7551         checkit("1.0001", buf);
7552
7553         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7554         checkit("1.00001", buf);
7555
7556         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7557         checkit("1.000001", buf);
7558
7559         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7560         checkit("0", buf);
7561
7562         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7563         checkit("-1", buf);
7564
7565         /* Some Linux gcvt's give 1.e+5 here. */
7566         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7567         checkit("100000", buf);
7568         
7569         /* Some Linux gcvt's give -1.e+5 here. */
7570         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7571         checkit("-100000", buf);
7572
7573         exit(0);
7574 }
7575 EOP
7576         case "$d_Gconvert" in
7577         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7578         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7579         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7580         *) xxx_list='gconvert gcvt sprintf' ;;
7581         esac
7582
7583         case "$d_longdbl$uselongdouble$d_qgcvt" in
7584         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7585         esac
7586
7587         for xxx_convert in $xxx_list; do
7588                 echo "Trying $xxx_convert..."
7589                 $rm -f try try$_o
7590                 set try -DTRY_$xxx_convert
7591                 if eval $compile; then
7592                         echo "$xxx_convert() found." >&4
7593                         if ./try; then
7594                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7595                                 break;
7596                         else
7597                                 echo "...But $xxx_convert didn't work as I expected."
7598                         fi
7599                 else
7600                         echo "$xxx_convert NOT found." >&4
7601                 fi
7602         done
7603                 
7604         case "$xxx_convert" in
7605         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7606         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7607         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7608         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7609            "$define$define$define")
7610               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7611            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7612            esac
7613            ;;  
7614         esac
7615 fi
7616
7617 : Initialize h_fcntl
7618 h_fcntl=false
7619
7620 : Initialize h_sysfile
7621 h_sysfile=false
7622
7623 : access call always available on UNIX
7624 set access d_access
7625 eval $inlibc
7626
7627 : locate the flags for 'access()'
7628 case "$d_access" in
7629 "$define")
7630         echo " "
7631         $cat >access.c <<'EOCP'
7632 #include <sys/types.h>
7633 #ifdef I_FCNTL
7634 #include <fcntl.h>
7635 #endif
7636 #ifdef I_SYS_FILE
7637 #include <sys/file.h>
7638 #endif
7639 #ifdef I_UNISTD
7640 #include <unistd.h>
7641 #endif
7642 int main() {
7643         exit(R_OK);
7644 }
7645 EOCP
7646         : check sys/file.h first, no particular reason here
7647         if $test `./findhdr sys/file.h` && \
7648                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7649                 h_sysfile=true;
7650                 echo "<sys/file.h> defines the *_OK access constants." >&4
7651         elif $test `./findhdr fcntl.h` && \
7652                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7653                 h_fcntl=true;
7654                 echo "<fcntl.h> defines the *_OK access constants." >&4
7655         elif $test `./findhdr unistd.h` && \
7656                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7657                 echo "<unistd.h> defines the *_OK access constants." >&4
7658         else
7659                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7660         fi
7661         ;;
7662 esac
7663 $rm -f access*
7664
7665 : see if accessx exists
7666 set accessx d_accessx
7667 eval $inlibc
7668
7669 : see if alarm exists
7670 set alarm d_alarm
7671 eval $inlibc
7672
7673 : see if atolf exists
7674 set atolf d_atolf
7675 eval $inlibc
7676
7677 : see if atoll exists
7678 set atoll d_atoll
7679 eval $inlibc
7680
7681 : Look for GNU-cc style attribute checking
7682 echo " "
7683 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7684 $cat >attrib.c <<'EOCP'
7685 #include <stdio.h>
7686 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7687 EOCP
7688 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7689         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7690                 echo "Your C compiler doesn't fully support __attribute__."
7691                 val="$undef"
7692         else
7693                 echo "Your C compiler supports __attribute__."
7694                 val="$define"
7695         fi
7696 else
7697         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7698         val="$undef"
7699 fi
7700 set d_attribut
7701 eval $setvar
7702 $rm -f attrib*
7703
7704 : see if bcmp exists
7705 set bcmp d_bcmp
7706 eval $inlibc
7707
7708 : see if bcopy exists
7709 set bcopy d_bcopy
7710 eval $inlibc
7711
7712 : see if this is a unistd.h system
7713 set unistd.h i_unistd
7714 eval $inhdr
7715
7716 : see if getpgrp exists
7717 set getpgrp d_getpgrp
7718 eval $inlibc
7719
7720 case "$d_getpgrp" in
7721 "$define")
7722         echo " "
7723         echo "Checking to see which flavor of getpgrp is in use..."
7724         $cat >set.c <<EOP
7725 #$i_unistd I_UNISTD
7726 #include <sys/types.h>
7727 #ifdef I_UNISTD
7728 #  include <unistd.h>
7729 #endif
7730 int main()
7731 {
7732         if (getuid() == 0) {
7733                 printf("(I see you are running Configure as super-user...)\n");
7734                 setuid(1);
7735         }
7736 #ifdef TRY_BSD_PGRP
7737         if (getpgrp(1) == 0)
7738                 exit(0);
7739 #else
7740         if (getpgrp() > 0)
7741                 exit(0);
7742 #endif
7743         exit(1);
7744 }
7745 EOP
7746         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7747                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7748                 val="$define"
7749         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7750                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7751                 val="$undef"
7752         else
7753                 echo "I can't seem to compile and run the test program."
7754                 if ./usg; then
7755                         xxx="a USG one, i.e. you use getpgrp()."
7756                 else
7757                         # SVR4 systems can appear rather BSD-ish.
7758                         case "$i_unistd" in
7759                         $undef)
7760                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7761                                 val="$define"
7762                                 ;;
7763                         $define)
7764                                 xxx="probably a USG one, i.e. you use getpgrp()."
7765                                 val="$undef"
7766                                 ;;
7767                         esac
7768                 fi
7769                 echo "Assuming your getpgrp is $xxx" >&4
7770         fi
7771         ;;
7772 *) val="$undef";;
7773 esac
7774 set d_bsdgetpgrp
7775 eval $setvar
7776 $rm -f set set.c
7777
7778 : see if setpgrp exists
7779 set setpgrp d_setpgrp
7780 eval $inlibc
7781
7782 case "$d_setpgrp" in
7783 "$define")
7784         echo " "
7785         echo "Checking to see which flavor of setpgrp is in use..."
7786         $cat >set.c <<EOP
7787 #$i_unistd I_UNISTD
7788 #include <sys/types.h>
7789 #ifdef I_UNISTD
7790 #  include <unistd.h>
7791 #endif
7792 int main()
7793 {
7794         if (getuid() == 0) {
7795                 printf("(I see you are running Configure as super-user...)\n");
7796                 setuid(1);
7797         }
7798 #ifdef TRY_BSD_PGRP
7799         if (-1 == setpgrp(1, 1))
7800                 exit(0);
7801 #else
7802         if (setpgrp() != -1)
7803                 exit(0);
7804 #endif
7805         exit(1);
7806 }
7807 EOP
7808         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7809                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7810                 val="$define"
7811         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7812                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7813                 val="$undef"
7814         else
7815                 echo "(I can't seem to compile and run the test program.)"
7816                 if ./usg; then
7817                         xxx="a USG one, i.e. you use setpgrp()."
7818                 else
7819                         # SVR4 systems can appear rather BSD-ish.
7820                         case "$i_unistd" in
7821                         $undef)
7822                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7823                                 val="$define"
7824                                 ;;
7825                         $define)
7826                                 xxx="probably a USG one, i.e. you use setpgrp()."
7827                                 val="$undef"
7828                                 ;;
7829                         esac
7830                 fi
7831                 echo "Assuming your setpgrp is $xxx" >&4
7832         fi
7833         ;;
7834 *) val="$undef";;
7835 esac
7836 set d_bsdsetpgrp
7837 eval $setvar
7838 $rm -f set set.c
7839 : see if bzero exists
7840 set bzero d_bzero
7841 eval $inlibc
7842
7843 : see if signal is declared as pointer to function returning int or void
7844 echo " "
7845 xxx=`./findhdr signal.h`
7846 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7847 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7848         echo "You have int (*signal())() instead of void." >&4
7849         val="$undef"
7850 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7851         echo "You have void (*signal())()." >&4
7852         val="$define"
7853 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7854         echo "You have int (*signal())() instead of void." >&4
7855         val="$undef"
7856 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7857         echo "You have void (*signal())()." >&4
7858         val="$define"
7859 else
7860         case "$d_voidsig" in
7861         '')
7862         echo "I can't determine whether signal handler returns void or int..." >&4
7863                 dflt=void
7864                 rp="What type does your signal handler return?"
7865                 . ./myread
7866                 case "$ans" in
7867                 v*) val="$define";;
7868                 *) val="$undef";;
7869                 esac;;
7870         "$define")
7871                 echo "As you already told me, signal handler returns void." >&4
7872                 val="$define"
7873                 ;;
7874         *)      echo "As you already told me, signal handler returns int." >&4
7875                 val="$undef"
7876                 ;;
7877         esac
7878 fi
7879 set d_voidsig
7880 eval $setvar
7881 case "$d_voidsig" in
7882 "$define") signal_t="void";;
7883 *) signal_t="int";;
7884 esac
7885 $rm -f $$.tmp
7886
7887 : check for ability to cast large floats to 32-bit ints.
7888 echo " "
7889 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7890 if $test "$intsize" -ge 4; then
7891         xxx=int
7892 else
7893         xxx=long
7894 fi
7895 $cat >try.c <<EOCP
7896 #include <stdio.h>
7897 #include <sys/types.h>
7898 #include <signal.h>
7899 $signal_t blech(s) int s; { exit(3); }
7900 int main()
7901 {
7902         $xxx i32;
7903         double f, g;
7904         int result = 0;
7905         char str[16];
7906         signal(SIGFPE, blech);
7907
7908         /* Don't let compiler optimize the test away.  Store the number 
7909            in a writable string for gcc to pass to sscanf under HP/UX.
7910         */
7911         sprintf(str, "2147483647");
7912         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7913         g = 10 * f;
7914         i32  = ($xxx) g;
7915
7916         /* x86 processors will probably give 0x8000 0000, which is a
7917        sign change.  We don't want that.  We want to mimic SPARC
7918            behavior here, which is to preserve the sign and give
7919            back 0x7fff ffff.
7920         */
7921         if (i32 != ($xxx) f)
7922                 result |= 1;
7923         exit(result);
7924 }
7925 EOCP
7926 set try
7927 if eval $compile_ok; then
7928         ./try
7929         yyy=$?
7930 else
7931         echo "(I can't seem to compile the test program--assuming it can't)"
7932         yyy=1
7933 fi
7934 case "$yyy" in
7935 0)      val="$define"
7936         echo "Yup, it can."
7937         ;;
7938 *)      val="$undef"
7939         echo "Nope, it can't."
7940         ;;
7941 esac
7942 set d_casti32
7943 eval $setvar
7944 $rm -f try try.*
7945
7946 : check for ability to cast negative floats to unsigned
7947 echo " "
7948 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7949 $cat >try.c <<EOCP
7950 #include <stdio.h>
7951 #include <sys/types.h>
7952 #include <signal.h>
7953 $signal_t blech(s) int s; { exit(7); }
7954 $signal_t blech_in_list(s) int s; { exit(4); }
7955 unsigned long dummy_long(p) unsigned long p; { return p; }
7956 unsigned int dummy_int(p) unsigned int p; { return p; }
7957 unsigned short dummy_short(p) unsigned short p; { return p; }
7958 int main()
7959 {
7960         double f;
7961         unsigned long along;
7962         unsigned int aint;
7963         unsigned short ashort;
7964         int result = 0;
7965         char str[16];
7966         
7967         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7968            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7969            optimized the whole file away
7970         */
7971         /* Store the number in a writable string for gcc to pass to 
7972            sscanf under HP/UX.
7973         */
7974         sprintf(str, "-123");
7975         sscanf(str, "%lf", &f);  /* f = -123.; */
7976
7977         signal(SIGFPE, blech);
7978         along = (unsigned long)f;
7979         aint = (unsigned int)f;
7980         ashort = (unsigned short)f;
7981         if (along != (unsigned long)-123)
7982                 result |= 1;
7983         if (aint != (unsigned int)-123)
7984                 result |= 1;
7985         if (ashort != (unsigned short)-123)
7986                 result |= 1;
7987         sprintf(str, "1073741824.");
7988         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7989         f = f + f;
7990         along = 0;
7991         along = (unsigned long)f;
7992         if (along != 0x80000000)
7993                 result |= 2;
7994         f -= 1.;
7995         along = 0;
7996         along = (unsigned long)f;
7997         if (along != 0x7fffffff)
7998                 result |= 1;
7999         f += 2.;
8000         along = 0;
8001         along = (unsigned long)f;
8002         if (along != 0x80000001)
8003                 result |= 2;
8004         if (result)
8005                 exit(result);
8006         signal(SIGFPE, blech_in_list);
8007         sprintf(str, "123.");
8008         sscanf(str, "%lf", &f);  /* f = 123.; */
8009         along = dummy_long((unsigned long)f);
8010         aint = dummy_int((unsigned int)f);
8011         ashort = dummy_short((unsigned short)f);
8012         if (along != (unsigned long)123)
8013                 result |= 4;
8014         if (aint != (unsigned int)123)
8015                 result |= 4;
8016         if (ashort != (unsigned short)123)
8017                 result |= 4;
8018         exit(result);
8019
8020 }
8021 EOCP
8022 set try
8023 if eval $compile_ok; then
8024         ./try
8025         castflags=$?
8026 else
8027         echo "(I can't seem to compile the test program--assuming it can't)"
8028         castflags=7
8029 fi
8030 case "$castflags" in
8031 0)      val="$define"
8032         echo "Yup, it can."
8033         ;;
8034 *)      val="$undef"
8035         echo "Nope, it can't."
8036         ;;
8037 esac
8038 set d_castneg
8039 eval $setvar
8040 $rm -f try.*
8041
8042 : see if vprintf exists
8043 echo " "
8044 if set vprintf val -f d_vprintf; eval $csym; $val; then
8045         echo 'vprintf() found.' >&4
8046         val="$define"
8047         $cat >vprintf.c <<'EOF'
8048 #include <varargs.h>
8049
8050 int main() { xxx("foo"); }
8051
8052 xxx(va_alist)
8053 va_dcl
8054 {
8055         va_list args;
8056         char buf[10];
8057
8058         va_start(args);
8059         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8060 }
8061 EOF
8062         set vprintf
8063         if eval $compile && ./vprintf; then
8064                 echo "Your vsprintf() returns (int)." >&4
8065                 val2="$undef"
8066         else
8067                 echo "Your vsprintf() returns (char*)." >&4
8068                 val2="$define"
8069         fi
8070 else
8071         echo 'vprintf() NOT found.' >&4
8072                 val="$undef"
8073                 val2="$undef"
8074 fi
8075 set d_vprintf
8076 eval $setvar
8077 val=$val2
8078 set d_charvspr
8079 eval $setvar
8080
8081 : see if chown exists
8082 set chown d_chown
8083 eval $inlibc
8084
8085 : see if chroot exists
8086 set chroot d_chroot
8087 eval $inlibc
8088
8089 : see if chsize exists
8090 set chsize d_chsize
8091 eval $inlibc
8092
8093 : check for const keyword
8094 echo " "
8095 echo 'Checking to see if your C compiler knows about "const"...' >&4
8096 $cat >const.c <<'EOCP'
8097 typedef struct spug { int drokk; } spug;
8098 int main()
8099 {
8100         const char *foo;
8101         const spug y;
8102 }
8103 EOCP
8104 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8105         val="$define"
8106         echo "Yup, it does."
8107 else
8108         val="$undef"
8109         echo "Nope, it doesn't."
8110 fi
8111 set d_const
8112 eval $setvar
8113
8114 : see if crypt exists
8115 echo " "
8116 if set crypt val -f d_crypt; eval $csym; $val; then
8117         echo 'crypt() found.' >&4
8118         val="$define"
8119         cryptlib=''
8120 else
8121         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8122         if $test -z "$cryptlib"; then
8123                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8124         else
8125                 cryptlib=-lcrypt
8126         fi
8127         if $test -z "$cryptlib"; then
8128                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8129         else
8130                 cryptlib=-lcrypt
8131         fi
8132         if $test -z "$cryptlib"; then
8133                 cryptlib=`./loc libcrypt$_a "" $libpth`
8134         else
8135                 cryptlib=-lcrypt
8136         fi
8137         if $test -z "$cryptlib"; then
8138                 echo 'crypt() NOT found.' >&4
8139                 val="$undef"
8140         else
8141                 val="$define"
8142         fi
8143 fi
8144 set d_crypt
8145 eval $setvar
8146
8147 : get csh whereabouts
8148 case "$csh" in
8149 'csh') val="$undef" ;;
8150 *) val="$define" ;;
8151 esac
8152 set d_csh
8153 eval $setvar
8154 : Respect a hint or command line value for full_csh.
8155 case "$full_csh" in
8156 '') full_csh=$csh ;;
8157 esac
8158
8159 : see if cuserid exists
8160 set cuserid d_cuserid
8161 eval $inlibc
8162
8163 : see if this is a limits.h system
8164 set limits.h i_limits
8165 eval $inhdr
8166
8167 : see if this is a float.h system
8168 set float.h i_float
8169 eval $inhdr
8170
8171 : See if number of significant digits in a double precision number is known
8172 echo " "
8173 $cat >dbl_dig.c <<EOM
8174 #$i_limits I_LIMITS
8175 #$i_float I_FLOAT
8176 #ifdef I_LIMITS
8177 #include <limits.h>
8178 #endif
8179 #ifdef I_FLOAT
8180 #include <float.h>
8181 #endif
8182 #ifdef DBL_DIG
8183 printf("Contains DBL_DIG");
8184 #endif
8185 EOM
8186 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8187 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8188         echo "DBL_DIG found." >&4
8189         val="$define"
8190 else
8191         echo "DBL_DIG NOT found." >&4
8192         val="$undef"
8193 fi
8194 $rm -f dbl_dig.?
8195 set d_dbl_dig
8196 eval $setvar
8197
8198 : see if difftime exists
8199 set difftime d_difftime
8200 eval $inlibc
8201
8202 : see if this is a dirent system
8203 echo " "
8204 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8205         val="$define"
8206         echo "<dirent.h> found." >&4
8207 else
8208         val="$undef"
8209         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8210                 echo "<sys/dir.h> found." >&4
8211                 echo " "
8212         else
8213                 xinc=`./findhdr sys/ndir.h`
8214         fi
8215         echo "<dirent.h> NOT found." >&4
8216 fi
8217 set i_dirent
8218 eval $setvar
8219
8220 : Look for type of directory structure.
8221 echo " "
8222 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8223
8224 case "$direntrytype" in
8225 ''|' ')
8226         case "$i_dirent" in
8227         $define) guess1='struct dirent' ;;
8228         *) guess1='struct direct'  ;;
8229         esac
8230         ;;
8231 *)      guess1="$direntrytype"
8232         ;;
8233 esac
8234
8235 case "$guess1" in
8236 'struct dirent') guess2='struct direct' ;;
8237 *) guess2='struct dirent' ;;
8238 esac
8239                 
8240 if $contains "$guess1" try.c >/dev/null 2>&1; then
8241         direntrytype="$guess1"
8242         echo "Your directory entries are $direntrytype." >&4
8243 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8244         direntrytype="$guess2"
8245         echo "Your directory entries seem to be $direntrytype." >&4
8246 else
8247         echo "I don't recognize your system's directory entries." >&4
8248         rp="What type is used for directory entries on this system?"
8249         dflt="$guess1"
8250         . ./myread
8251         direntrytype="$ans"
8252 fi
8253 $rm -f try.c
8254
8255
8256 : see if the directory entry stores field length
8257 echo " "
8258 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8259 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8260         echo "Good, your directory entry keeps length information in d_namlen." >&4
8261         val="$define"
8262 else
8263         echo "Your directory entry does not know about the d_namlen field." >&4
8264         val="$undef"
8265 fi
8266 set d_dirnamlen
8267 eval $setvar
8268 $rm -f try.c
8269
8270 : see if dlerror exists
8271 xxx_runnm="$runnm"
8272 runnm=false
8273 set dlerror d_dlerror
8274 eval $inlibc
8275 runnm="$xxx_runnm"
8276
8277 : see if dlfcn is available
8278 set dlfcn.h i_dlfcn
8279 eval $inhdr
8280
8281 case "$usedl" in
8282 $define|y|true)
8283         $cat << EOM
8284
8285 On a few systems, the dynamically loaded modules that perl generates and uses
8286 will need a different extension than shared libs. The default will probably
8287 be appropriate.
8288
8289 EOM
8290         case "$dlext" in
8291         '')     dflt="$so" ;;
8292         *)      dflt="$dlext" ;;
8293         esac
8294         rp='What is the extension of dynamically loaded modules'
8295         . ./myread
8296         dlext="$ans"
8297         ;;
8298 *)
8299         dlext="none"
8300         ;;
8301 esac
8302
8303 : Check if dlsym need a leading underscore
8304 echo " "
8305 val="$undef"
8306
8307 case "$dlsrc" in
8308 dl_dlopen.xs)
8309         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8310         $cat >dyna.c <<'EOM'
8311 fred () { }
8312 EOM
8313
8314 $cat >fred.c<<EOM
8315
8316 #include <stdio.h>
8317 #$i_dlfcn I_DLFCN
8318 #ifdef I_DLFCN
8319 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8320 #else
8321 #include <sys/types.h>
8322 #include <nlist.h>
8323 #include <link.h>
8324 #endif
8325
8326 extern int fred() ;
8327
8328 int main()
8329 {
8330     void * handle ;
8331     void * symbol ;
8332 #ifndef RTLD_LAZY
8333     int mode = 1 ;
8334 #else
8335     int mode = RTLD_LAZY ;
8336 #endif
8337     handle = dlopen("./dyna.$dlext", mode) ;
8338     if (handle == NULL) {
8339         printf ("1\n") ;
8340         fflush (stdout) ;
8341         exit(0);
8342     }
8343     symbol = dlsym(handle, "fred") ;
8344     if (symbol == NULL) {
8345         /* try putting a leading underscore */
8346         symbol = dlsym(handle, "_fred") ;
8347         if (symbol == NULL) {
8348             printf ("2\n") ;
8349             fflush (stdout) ;
8350             exit(0);
8351         }
8352         printf ("3\n") ;
8353     }
8354     else
8355         printf ("4\n") ;
8356     fflush (stdout) ;
8357     exit(0);
8358 }
8359 EOM
8360         : Call the object file tmp-dyna.o in case dlext=o.
8361         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8362                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8363                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8364                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8365                 xxx=`./fred`
8366                 case $xxx in
8367                 1)      echo "Test program failed using dlopen." >&4
8368                         echo "Perhaps you should not use dynamic loading." >&4;;
8369                 2)      echo "Test program failed using dlsym." >&4
8370                         echo "Perhaps you should not use dynamic loading." >&4;;
8371                 3)      echo "dlsym needs a leading underscore" >&4
8372                         val="$define" ;;
8373                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8374                 esac
8375         else
8376                 echo "I can't compile and run the test program." >&4
8377                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8378         fi
8379         ;;
8380 esac
8381                 
8382 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8383
8384 set d_dlsymun
8385 eval $setvar
8386
8387 hasproto='varname=$1; func=$2; shift; shift;
8388 while $test $# -ge 2; do
8389         case "$1" in
8390         $define) echo "#include <$2>";;
8391         esac ;
8392     shift 2;
8393 done > try.c;
8394 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8395 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8396         echo "$func() prototype found.";
8397         val="$define";
8398 else
8399         echo "$func() prototype NOT found.";
8400         val="$undef";
8401 fi;
8402 set $varname;
8403 eval $setvar;
8404 $rm -f try.c tryout.c'
8405
8406 : see if prototype for drand48 is available
8407 echo " "
8408 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8409 eval $hasproto
8410
8411 : see if dup2 exists
8412 set dup2 d_dup2
8413 eval $inlibc
8414
8415 : see if eaccess exists
8416 set eaccess d_eaccess
8417 eval $inlibc
8418
8419 : see if endgrent exists
8420 set endgrent d_endgrent
8421 eval $inlibc
8422
8423 : see if endhostent exists
8424 set endhostent d_endhent
8425 eval $inlibc
8426
8427 : see if endnetent exists
8428 set endnetent d_endnent
8429 eval $inlibc
8430
8431 : see if endprotoent exists
8432 set endprotoent d_endpent
8433 eval $inlibc
8434
8435 : see if endpwent exists
8436 set endpwent d_endpwent
8437 eval $inlibc
8438
8439 : see if endservent exists
8440 set endservent d_endsent
8441 eval $inlibc
8442
8443 : see if endspent exists
8444 set endspent d_endspent
8445 eval $inlibc
8446
8447 : Locate the flags for 'open()'
8448 echo " "
8449 $cat >open3.c <<'EOCP'
8450 #include <sys/types.h>
8451 #ifdef I_FCNTL
8452 #include <fcntl.h>
8453 #endif
8454 #ifdef I_SYS_FILE
8455 #include <sys/file.h>
8456 #endif
8457 int main() {
8458         if(O_RDONLY);
8459 #ifdef O_TRUNC
8460         exit(0);
8461 #else
8462         exit(1);
8463 #endif
8464 }
8465 EOCP
8466 : check sys/file.h first to get FREAD on Sun
8467 if $test `./findhdr sys/file.h` && \
8468                 set open3 -DI_SYS_FILE && eval $compile; then
8469         h_sysfile=true;
8470         echo "<sys/file.h> defines the O_* constants..." >&4
8471         if ./open3; then
8472                 echo "and you have the 3 argument form of open()." >&4
8473                 val="$define"
8474         else
8475                 echo "but not the 3 argument form of open().  Oh, well." >&4
8476                 val="$undef"
8477         fi
8478 elif $test `./findhdr fcntl.h` && \
8479                 set open3 -DI_FCNTL && eval $compile; then
8480         h_fcntl=true;
8481         echo "<fcntl.h> defines the O_* constants..." >&4
8482         if ./open3; then
8483                 echo "and you have the 3 argument form of open()." >&4
8484                 val="$define"
8485         else
8486                 echo "but not the 3 argument form of open().  Oh, well." >&4
8487                 val="$undef"
8488         fi
8489 else
8490         val="$undef"
8491         echo "I can't find the O_* constant definitions!  You got problems." >&4
8492 fi
8493 set d_open3
8494 eval $setvar
8495 $rm -f open3*
8496
8497 : see which of string.h or strings.h is needed
8498 echo " "
8499 strings=`./findhdr string.h`
8500 if $test "$strings" && $test -r "$strings"; then
8501         echo "Using <string.h> instead of <strings.h>." >&4
8502         val="$define"
8503 else
8504         val="$undef"
8505         strings=`./findhdr strings.h`
8506         if $test "$strings" && $test -r "$strings"; then
8507                 echo "Using <strings.h> instead of <string.h>." >&4
8508         else
8509                 echo "No string header found -- You'll surely have problems." >&4
8510         fi
8511 fi
8512 set i_string
8513 eval $setvar
8514 case "$i_string" in
8515 "$undef") strings=`./findhdr strings.h`;;
8516 *)        strings=`./findhdr string.h`;;
8517 esac
8518
8519 : check for non-blocking I/O stuff
8520 case "$h_sysfile" in
8521 true) echo "#include <sys/file.h>" > head.c;;
8522 *)
8523         case "$h_fcntl" in
8524         true) echo "#include <fcntl.h>" > head.c;;
8525         *) echo "#include <sys/fcntl.h>" > head.c;;
8526         esac
8527         ;;
8528 esac
8529 echo " "
8530 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8531 case "$o_nonblock" in
8532 '')
8533         $cat head.c > try.c
8534         $cat >>try.c <<'EOCP'
8535 #include <stdio.h>
8536 int main() {
8537 #ifdef O_NONBLOCK
8538         printf("O_NONBLOCK\n");
8539         exit(0);
8540 #endif
8541 #ifdef O_NDELAY
8542         printf("O_NDELAY\n");
8543         exit(0);
8544 #endif
8545 #ifdef FNDELAY
8546         printf("FNDELAY\n");
8547         exit(0);
8548 #endif
8549         exit(0);
8550 }
8551 EOCP
8552         set try
8553         if eval $compile_ok; then
8554                 o_nonblock=`./try`
8555                 case "$o_nonblock" in
8556                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8557                 *) echo "Seems like we can use $o_nonblock.";;
8558                 esac
8559         else
8560                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8561         fi
8562         ;;
8563 *) echo "Using $hint value $o_nonblock.";;
8564 esac
8565 $rm -f try try.* .out core
8566
8567 echo " "
8568 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8569 case "$eagain" in
8570 '')
8571         $cat head.c > try.c
8572         $cat >>try.c <<EOCP
8573 #include <errno.h>
8574 #include <sys/types.h>
8575 #include <signal.h>
8576 #include <stdio.h> 
8577 #define MY_O_NONBLOCK $o_nonblock
8578 #ifndef errno  /* XXX need better Configure test */
8579 extern int errno;
8580 #endif
8581 #$i_unistd I_UNISTD
8582 #ifdef I_UNISTD
8583 #include <unistd.h>
8584 #endif
8585 #ifdef $i_string
8586 #include <string.h>
8587 #else
8588 #include <strings.h>
8589 #endif
8590 $signal_t blech(x) int x; { exit(3); }
8591 EOCP
8592         $cat >> try.c <<'EOCP'
8593 int main()
8594 {
8595         int pd[2];
8596         int pu[2];
8597         char buf[1];
8598         char string[100];
8599
8600         pipe(pd);       /* Down: child -> parent */
8601         pipe(pu);       /* Up: parent -> child */
8602         if (0 != fork()) {
8603                 int ret;
8604                 close(pd[1]);   /* Parent reads from pd[0] */
8605                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8606                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8607                         exit(1);
8608                 signal(SIGALRM, blech);
8609                 alarm(5);
8610                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8611                         exit(2);
8612                 sprintf(string, "%d\n", ret);
8613                 write(2, string, strlen(string));
8614                 alarm(0);
8615 #ifdef EAGAIN
8616                 if (errno == EAGAIN) {
8617                         printf("EAGAIN\n");
8618                         goto ok;
8619                 }
8620 #endif
8621 #ifdef EWOULDBLOCK
8622                 if (errno == EWOULDBLOCK)
8623                         printf("EWOULDBLOCK\n");
8624 #endif
8625         ok:
8626                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8627                 sleep(2);                               /* Give it time to close our pipe */
8628                 alarm(5);
8629                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8630                 alarm(0);
8631                 sprintf(string, "%d\n", ret);
8632                 write(3, string, strlen(string));
8633                 exit(0);
8634         }
8635
8636         close(pd[0]);                   /* We write to pd[1] */
8637         close(pu[1]);                   /* We read from pu[0] */
8638         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8639         close(pd[1]);                   /* Pipe pd is now fully closed! */
8640         exit(0);                                /* Bye bye, thank you for playing! */
8641 }
8642 EOCP
8643         set try
8644         if eval $compile_ok; then
8645                 echo "$startsh" >mtry
8646                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8647                 chmod +x mtry
8648                 ./mtry >/dev/null 2>&1
8649                 case $? in
8650                 0) eagain=`$cat try.out`;;
8651                 1) echo "Could not perform non-blocking setting!";;
8652                 2) echo "I did a successful read() for something that was not there!";;
8653                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8654                 *) echo "Something terribly wrong happened during testing.";;
8655                 esac
8656                 rd_nodata=`$cat try.ret`
8657                 echo "A read() system call with no data present returns $rd_nodata."
8658                 case "$rd_nodata" in
8659                 0|-1) ;;
8660                 *)
8661                         echo "(That's peculiar, fixing that to be -1.)"
8662                         rd_nodata=-1
8663                         ;;
8664                 esac
8665                 case "$eagain" in
8666                 '')
8667                         echo "Forcing errno EAGAIN on read() with no data available."
8668                         eagain=EAGAIN
8669                         ;;
8670                 *)
8671                         echo "Your read() sets errno to $eagain when no data is available."
8672                         ;;
8673                 esac
8674                 status=`$cat try.err`
8675                 case "$status" in
8676                 0) echo "And it correctly returns 0 to signal EOF.";;
8677                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8678                 *) echo "However, your read() returns '$status' on EOF??";;
8679                 esac
8680                 val="$define"
8681                 if test "$status" = "$rd_nodata"; then
8682                         echo "WARNING: you can't distinguish between EOF and no data!"
8683                         val="$undef"
8684                 fi
8685         else
8686                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8687                 eagain=EAGAIN
8688         fi
8689         set d_eofnblk
8690         eval $setvar
8691         ;;
8692 *)
8693         echo "Using $hint value $eagain."
8694         echo "Your read() returns $rd_nodata when no data is present."
8695         case "$d_eofnblk" in
8696         "$define") echo "And you can see EOF because read() returns 0.";;
8697         "$undef") echo "But you can't see EOF status from read() returned value.";;
8698         *)
8699                 echo "(Assuming you can't see EOF status from read anyway.)"
8700                 d_eofnblk=$undef
8701                 ;;
8702         esac
8703         ;;
8704 esac
8705 $rm -f try try.* .out core head.c mtry
8706
8707 : see if fchmod exists
8708 set fchmod d_fchmod
8709 eval $inlibc
8710
8711 : see if fchown exists
8712 set fchown d_fchown
8713 eval $inlibc
8714
8715 : see if this is an fcntl system
8716 set fcntl d_fcntl
8717 eval $inlibc
8718
8719 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8720 while $test $# -ge 2; do
8721         case "$1" in
8722         $define) echo "#include <$2>";;
8723         esac ;
8724     shift 2;
8725 done > try.c;
8726 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8727 set try;
8728 if eval $compile; then
8729         val="$define";
8730 else
8731         val="$undef";
8732 fi;
8733 set $varname;
8734 eval $setvar;
8735 $rm -f try.c try.o'
8736
8737 socketlib=''
8738 sockethdr=''
8739 : see whether socket exists
8740 echo " "
8741 $echo $n "Hmm... $c" >&4
8742 if set socket val -f d_socket; eval $csym; $val; then
8743         echo "Looks like you have Berkeley networking support." >&4
8744         d_socket="$define"
8745         if set setsockopt val -f; eval $csym; $val; then
8746                 d_oldsock="$undef"
8747         else
8748                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8749                 d_oldsock="$define"
8750         fi
8751 else
8752         if $contains socklib libc.list >/dev/null 2>&1; then
8753                 echo "Looks like you have Berkeley networking support." >&4
8754                 d_socket="$define"
8755                 : we will have to assume that it supports the 4.2 BSD interface
8756                 d_oldsock="$undef"
8757         else
8758                 echo "You don't have Berkeley networking in libc$_a..." >&4
8759                 if test "X$d_socket" = "X$define"; then
8760                    echo "...but you seem to believe that you have sockets." >&4
8761                 else
8762                         for net in net socket
8763                         do
8764                                 if test -f /usr/lib/lib$net$_a; then
8765                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8766                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8767                                         if $contains socket libc.list >/dev/null 2>&1; then
8768                                                 d_socket="$define"
8769                                                 socketlib="-l$net"
8770                                                 case "$net" in
8771                                                 net)
8772                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8773                                                         sockethdr="-I/usr/netinclude"
8774                                                         ;;
8775                                                 esac
8776                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8777                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8778                                                         d_oldsock="$undef"
8779                                                 else
8780                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8781                                                         d_oldsock="$define"
8782                                                 fi
8783                                                 break
8784                                         fi
8785                                 fi
8786                         done
8787                         if test "X$d_socket" != "X$define"; then
8788                            echo "or anywhere else I see." >&4
8789                            d_socket="$undef"
8790                            d_oldsock="$undef"
8791                         fi
8792                 fi
8793         fi
8794 fi
8795
8796 : see if socketpair exists
8797 set socketpair d_sockpair
8798 eval $inlibc
8799
8800
8801 echo " "
8802 echo "Checking the availability of certain socket constants..." >& 4
8803 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8804         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8805         $cat >try.c <<EOF
8806 #include <sys/types.h>
8807 #include <sys/socket.h>
8808 int main() {
8809     int i = $ENUM;
8810 }
8811 EOF
8812         val="$undef"
8813         set try; if eval $compile; then
8814                 val="$define"
8815         fi
8816         set d_${enum}; eval $setvar
8817         $rm -f try.c try
8818 done
8819
8820 : see if sys/select.h has to be included
8821 set sys/select.h i_sysselct
8822 eval $inhdr
8823
8824 : see if we should include time.h, sys/time.h, or both
8825 echo " "
8826 if test "X$timeincl" = X; then
8827         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8828         $echo $n "I'm now running the test program...$c"
8829         $cat >try.c <<'EOCP'
8830 #include <sys/types.h>
8831 #ifdef I_TIME
8832 #include <time.h>
8833 #endif
8834 #ifdef I_SYSTIME
8835 #ifdef SYSTIMEKERNEL
8836 #define KERNEL
8837 #endif
8838 #include <sys/time.h>
8839 #endif
8840 #ifdef I_SYSSELECT
8841 #include <sys/select.h>
8842 #endif
8843 int main()
8844 {
8845         struct tm foo;
8846 #ifdef S_TIMEVAL
8847         struct timeval bar;
8848 #endif
8849 #ifdef S_TIMEZONE
8850         struct timezone tzp;
8851 #endif
8852         if (foo.tm_sec == foo.tm_sec)
8853                 exit(0);
8854 #ifdef S_TIMEVAL
8855         if (bar.tv_sec == bar.tv_sec)
8856                 exit(0);
8857 #endif
8858         exit(1);
8859 }
8860 EOCP
8861         flags=''
8862         for s_timezone in '-DS_TIMEZONE' ''; do
8863         sysselect=''
8864         for s_timeval in '-DS_TIMEVAL' ''; do
8865         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8866         for i_time in '' '-DI_TIME'; do
8867         for i_systime in '-DI_SYSTIME' ''; do
8868                 case "$flags" in
8869                 '') $echo $n ".$c"
8870                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8871                         if eval $compile; then
8872                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8873                                 shift
8874                                 flags="$*"
8875                                 echo " "
8876                                 $echo $n "Succeeded with $flags$c"
8877                         fi
8878                         ;;
8879                 esac
8880         done
8881         done
8882         done
8883         done
8884         done
8885         timeincl=''
8886         echo " "
8887         case "$flags" in
8888         *SYSTIMEKERNEL*) i_systimek="$define"
8889                 timeincl=`./findhdr sys/time.h`
8890                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8891         *) i_systimek="$undef";;
8892         esac
8893         case "$flags" in
8894         *I_TIME*) i_time="$define"
8895                 timeincl=`./findhdr time.h`" $timeincl"
8896                 echo "We'll include <time.h>." >&4;;
8897         *) i_time="$undef";;
8898         esac
8899         case "$flags" in
8900         *I_SYSTIME*) i_systime="$define"
8901                 timeincl=`./findhdr sys/time.h`" $timeincl"
8902                 echo "We'll include <sys/time.h>." >&4;;
8903         *) i_systime="$undef";;
8904         esac
8905         $rm -f try.c try
8906 fi
8907
8908 : check for fd_set items
8909 $cat <<EOM
8910
8911 Checking to see how well your C compiler handles fd_set and friends ...
8912 EOM
8913 $cat >fd_set.c <<EOCP
8914 #$i_systime I_SYS_TIME
8915 #$i_sysselct I_SYS_SELECT
8916 #$d_socket HAS_SOCKET
8917 #include <sys/types.h>
8918 #ifdef HAS_SOCKET
8919 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8920 #endif
8921 #ifdef I_SYS_TIME
8922 #include <sys/time.h>
8923 #endif
8924 #ifdef I_SYS_SELECT
8925 #include <sys/select.h>
8926 #endif
8927 int main() {
8928         fd_set fds;
8929
8930 #ifdef TRYBITS
8931         if(fds.fds_bits);
8932 #endif
8933
8934 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8935         exit(0);
8936 #else
8937         exit(1);
8938 #endif
8939 }
8940 EOCP
8941 set fd_set -DTRYBITS
8942 if eval $compile; then
8943         d_fds_bits="$define"
8944         d_fd_set="$define"
8945         echo "Well, your system knows about the normal fd_set typedef..." >&4
8946         if ./fd_set; then
8947                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8948                 d_fd_macros="$define"
8949         else
8950                 $cat >&4 <<'EOM'
8951 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8952 EOM
8953                 d_fd_macros="$undef"
8954         fi
8955 else
8956         $cat <<'EOM'
8957 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8958 EOM
8959         set fd_set
8960         if eval $compile; then
8961                 d_fds_bits="$undef"
8962                 d_fd_set="$define"
8963                 echo "Well, your system has some sort of fd_set available..." >&4
8964                 if ./fd_set; then
8965                         echo "and you have the normal fd_set macros." >&4
8966                         d_fd_macros="$define"
8967                 else
8968                         $cat <<'EOM'
8969 but not the normal fd_set macros!  Gross!  More work for me...
8970 EOM
8971                         d_fd_macros="$undef"
8972                 fi
8973         else
8974         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8975                 d_fd_set="$undef"
8976                 d_fds_bits="$undef"
8977                 d_fd_macros="$undef"
8978         fi
8979 fi
8980 $rm -f fd_set*
8981
8982 : see if fgetpos exists
8983 set fgetpos d_fgetpos
8984 eval $inlibc
8985
8986 : see if flock exists
8987 set flock d_flock
8988 eval $inlibc
8989
8990 : see if fork exists
8991 set fork d_fork
8992 eval $inlibc
8993
8994 : see if pathconf exists
8995 set pathconf d_pathconf
8996 eval $inlibc
8997
8998 : see if fpathconf exists
8999 set fpathconf d_fpathconf
9000 eval $inlibc
9001
9002
9003 : check for fpos64_t
9004 echo " "
9005 echo "Checking to see if you have fpos64_t..." >&4
9006 $cat >try.c <<EOCP
9007 #include <stdio.h>
9008 int main() { fpos64_t x = 7; }
9009 EOCP
9010 set try
9011 if eval $compile; then
9012         val="$define"
9013         echo "You have fpos64_t."
9014 else
9015         val="$undef"
9016         echo "You do not have fpos64_t."
9017         case "$fpossize" in
9018         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9019         esac
9020 fi
9021 $rm -f try.* try
9022 set d_fpos64_t
9023 eval $setvar
9024
9025 hasstruct='varname=$1; struct=$2; shift; shift;
9026 while $test $# -ge 2; do
9027         case "$1" in
9028         $define) echo "#include <$2>";;
9029         esac ;
9030     shift 2;
9031 done > try.c;
9032 echo "int main () { struct $struct foo; }" >> try.c;
9033 set try;
9034 if eval $compile; then
9035         val="$define";
9036 else
9037         val="$undef";
9038 fi;
9039 set $varname;
9040 eval $setvar;
9041 $rm -f try.c try.o'
9042
9043 : see if this is a sys/param system
9044 set sys/param.h i_sysparam
9045 eval $inhdr
9046
9047 : see if this is a sys/mount.h system
9048 set sys/mount.h i_sysmount
9049 eval $inhdr
9050
9051 : see if sys/types.h has to be included
9052 set sys/types.h i_systypes
9053 eval $inhdr
9054
9055
9056 echo " "
9057 echo "Checking to see if your system supports struct fs_data..." >&4
9058 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9059 eval $hasstruct
9060 case "$d_fs_data_s" in
9061 "$define")      echo "Yes, it does."   ;;
9062 *)              echo "No, it doesn't." ;;
9063 esac
9064
9065 : see if fseeko exists
9066 set fseeko d_fseeko
9067 eval $inlibc
9068 case "$longsize" in
9069 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9070 esac
9071
9072 : see if fsetpos exists
9073 set fsetpos d_fsetpos
9074 eval $inlibc
9075
9076
9077 : see if fstatfs exists
9078 set fstatfs d_fstatfs
9079 eval $inlibc
9080
9081
9082 : see if statvfs exists
9083 set statvfs d_statvfs
9084 eval $inlibc
9085
9086 : see if fstatvfs exists
9087 set fstatvfs d_fstatvfs
9088 eval $inlibc
9089
9090
9091 : see if ftello exists
9092 set ftello d_ftello
9093 eval $inlibc
9094 case "$longsize" in
9095 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9096 esac
9097
9098 : see if getcwd exists
9099 set getcwd d_getcwd
9100 eval $inlibc
9101
9102
9103 : see if getfsstat exists
9104 set getfsstat d_getfsstat
9105 eval $inlibc
9106
9107 : see if getgrent exists
9108 set getgrent d_getgrent
9109 eval $inlibc
9110
9111 : see if gethostbyaddr exists
9112 set gethostbyaddr d_gethbyaddr
9113 eval $inlibc
9114
9115 : see if gethostbyname exists
9116 set gethostbyname d_gethbyname
9117 eval $inlibc
9118
9119 : see if gethostent exists
9120 set gethostent d_gethent
9121 eval $inlibc
9122
9123 : see how we will look up host name
9124 echo " "
9125 call=''
9126 if set gethostname val -f d_gethname; eval $csym; $val; then
9127         echo 'gethostname() found.' >&4
9128         d_gethname="$define"
9129         call=gethostname
9130 fi
9131 if set uname val -f d_uname; eval $csym; $val; then
9132         if ./xenix; then
9133                 $cat <<'EOM'
9134 uname() was found, but you're running xenix, and older versions of xenix
9135 have a broken uname(). If you don't really know whether your xenix is old
9136 enough to have a broken system call, use the default answer.
9137
9138 EOM
9139                 dflt=y
9140                 case "$d_uname" in
9141                 "$define") dflt=n;;
9142                 esac
9143                 rp='Is your uname() broken?'
9144                 . ./myread
9145                 case "$ans" in
9146                 n*) d_uname="$define"; call=uname;;
9147                 esac
9148         else
9149                 echo 'uname() found.' >&4
9150                 d_uname="$define"
9151                 case "$call" in
9152                 '') call=uname ;;
9153                 esac
9154         fi
9155 fi
9156 case "$d_gethname" in
9157 '') d_gethname="$undef";;
9158 esac
9159 case "$d_uname" in
9160 '') d_uname="$undef";;
9161 esac
9162 case "$d_uname$d_gethname" in
9163 *define*)
9164         dflt=n
9165         cat <<EOM
9166  
9167 Every now and then someone has a $call() that lies about the hostname
9168 but can't be fixed for political or economic reasons.  If you wish, I can
9169 pretend $call() isn't there and maybe compute hostname at run-time
9170 thanks to the '$phostname' command.
9171
9172 EOM
9173         rp="Shall I ignore $call() from now on?"
9174         . ./myread
9175         case "$ans" in
9176         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9177         esac;;
9178 esac
9179 case "$phostname" in
9180 '') aphostname='';;
9181 *) case "$aphostname" in
9182         /*) ;;
9183         *) set X $phostname
9184                 shift
9185                 file=$1
9186                 shift
9187                 file=`./loc $file $file $pth`
9188                 aphostname=`echo $file $*`
9189                 ;;
9190         esac
9191         ;;
9192 esac
9193 case "$d_uname$d_gethname" in
9194 *define*) ;;
9195 *)
9196         case "$phostname" in
9197         '')
9198                 echo "There will be no way for $package to get your hostname." >&4;;
9199         *)
9200         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9201                 ;;
9202         esac;;
9203 esac
9204 case "$d_phostname" in
9205 '') d_phostname="$undef";;
9206 esac
9207
9208 : see if this is a netdb.h system
9209 set netdb.h i_netdb
9210 eval $inhdr
9211
9212 : see if prototypes for various gethostxxx netdb.h functions are available
9213 echo " "
9214 set d_gethostprotos gethostent $i_netdb netdb.h
9215 eval $hasproto
9216
9217 : see if getlogin exists
9218 set getlogin d_getlogin
9219 eval $inlibc
9220
9221 : see if getmnt exists
9222 set getmnt d_getmnt
9223 eval $inlibc
9224
9225 : see if getmntent exists
9226 set getmntent d_getmntent
9227 eval $inlibc
9228
9229 : see if getnetbyaddr exists
9230 set getnetbyaddr d_getnbyaddr
9231 eval $inlibc
9232
9233 : see if getnetbyname exists
9234 set getnetbyname d_getnbyname
9235 eval $inlibc
9236
9237 : see if getnetent exists
9238 set getnetent d_getnent
9239 eval $inlibc
9240
9241 : see if prototypes for various getnetxxx netdb.h functions are available
9242 echo " "
9243 set d_getnetprotos getnetent $i_netdb netdb.h
9244 eval $hasproto
9245
9246
9247 : see if getprotobyname exists
9248 set getprotobyname d_getpbyname
9249 eval $inlibc
9250
9251 : see if getprotobynumber exists
9252 set getprotobynumber d_getpbynumber
9253 eval $inlibc
9254
9255 : see if getprotoent exists
9256 set getprotoent d_getpent
9257 eval $inlibc
9258
9259 : see if getpgid exists
9260 set getpgid d_getpgid
9261 eval $inlibc
9262
9263 : see if getpgrp2 exists
9264 set getpgrp2 d_getpgrp2
9265 eval $inlibc
9266
9267 : see if getppid exists
9268 set getppid d_getppid
9269 eval $inlibc
9270
9271 : see if getpriority exists
9272 set getpriority d_getprior
9273 eval $inlibc
9274
9275 : see if prototypes for various getprotoxxx netdb.h functions are available
9276 echo " "
9277 set d_getprotoprotos getprotoent $i_netdb netdb.h
9278 eval $hasproto
9279
9280 : see if getpwent exists
9281 set getpwent d_getpwent
9282 eval $inlibc
9283
9284
9285 : see if getservbyname exists
9286 set getservbyname d_getsbyname
9287 eval $inlibc
9288
9289 : see if getservbyport exists
9290 set getservbyport d_getsbyport
9291 eval $inlibc
9292
9293 : see if getservent exists
9294 set getservent d_getsent
9295 eval $inlibc
9296
9297 : see if prototypes for various getservxxx netdb.h functions are available
9298 echo " "
9299 set d_getservprotos getservent $i_netdb netdb.h
9300 eval $hasproto
9301
9302 : see if getspent exists
9303 set getspent d_getspent
9304 eval $inlibc
9305
9306 : see if getspnam exists
9307 set getspnam d_getspnam
9308 eval $inlibc
9309
9310 : see if gettimeofday or ftime exists
9311 set gettimeofday d_gettimeod
9312 eval $inlibc
9313 case "$d_gettimeod" in
9314 "$undef")
9315         set ftime d_ftime 
9316         eval $inlibc
9317         ;;
9318 *)
9319         val="$undef"; set d_ftime; eval $setvar
9320         ;;
9321 esac
9322 case "$d_gettimeod$d_ftime" in
9323 "$undef$undef")
9324         echo " "
9325         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9326         ;;
9327 esac
9328
9329 : see if this is an grp system
9330 set grp.h i_grp
9331 eval $inhdr
9332
9333 case "$i_grp" in
9334 $define)
9335         xxx=`./findhdr grp.h`
9336         $cppstdin $cppflags $cppminus < $xxx >$$.h
9337
9338         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9339                 val="$define"
9340         else
9341                 val="$undef"
9342         fi
9343         set d_grpasswd
9344         eval $setvar
9345
9346         $rm -f $$.h
9347         ;;
9348 *)
9349         val="$undef";
9350         set d_grpasswd; eval $setvar
9351         ;;
9352 esac
9353
9354 : see if hasmntopt exists
9355 set hasmntopt d_hasmntopt
9356 eval $inlibc
9357
9358 : see if this is a netinet/in.h or sys/in.h system
9359 set netinet/in.h i_niin sys/in.h i_sysin
9360 eval $inhdr
9361
9362 : see if arpa/inet.h has to be included
9363 set arpa/inet.h i_arpainet
9364 eval $inhdr
9365
9366 : see if htonl --and friends-- exists
9367 val=''
9368 set htonl val
9369 eval $inlibc
9370
9371 : Maybe they are macros.
9372 case "$val" in
9373 $undef)
9374         $cat >htonl.c <<EOM
9375 #include <stdio.h>
9376 #include <sys/types.h>
9377 #$i_niin I_NETINET_IN
9378 #$i_sysin I_SYS_IN
9379 #$i_arpainet I_ARPA_INET
9380 #ifdef I_NETINET_IN
9381 #include <netinet/in.h>
9382 #endif
9383 #ifdef I_SYS_IN
9384 #include <sys/in.h>
9385 #endif
9386 #ifdef I_ARPA_INET
9387 #include <arpa/inet.h>
9388 #endif
9389 #ifdef htonl
9390 printf("Defined as a macro.");
9391 #endif
9392 EOM
9393         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9394         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9395                 val="$define"
9396                 echo "But it seems to be defined as a macro." >&4
9397         fi
9398         $rm -f htonl.?
9399         ;;
9400 esac
9401 set d_htonl
9402 eval $setvar
9403
9404 : see if iconv exists
9405 set iconv d_iconv
9406 eval $inlibc
9407
9408 : index or strchr
9409 echo " "
9410 if set index val -f; eval $csym; $val; then
9411         if set strchr val -f d_strchr; eval $csym; $val; then
9412                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9413                         val="$define"
9414                         vali="$undef"
9415                         echo "strchr() found." >&4
9416                 else
9417                         val="$undef"
9418                         vali="$define"
9419                         echo "index() found." >&4
9420                 fi
9421         else
9422                 val="$undef"
9423                 vali="$define"
9424                 echo "index() found." >&4
9425         fi
9426 else
9427         if set strchr val -f d_strchr; eval $csym; $val; then
9428                 val="$define"
9429                 vali="$undef"
9430                 echo "strchr() found." >&4
9431         else
9432                 echo "No index() or strchr() found!" >&4
9433                 val="$undef"
9434                 vali="$undef"
9435         fi
9436 fi
9437 set d_strchr; eval $setvar
9438 val="$vali"
9439 set d_index; eval $setvar
9440
9441 : check whether inet_aton exists
9442 set inet_aton d_inetaton
9443 eval $inlibc
9444
9445 : see if inttypes.h is available
9446 : we want a real compile instead of Inhdr because some systems
9447 : have an inttypes.h which includes non-existent headers
9448 echo " "
9449 $cat >try.c <<EOCP
9450 #include <inttypes.h>
9451 int main() {
9452         static int32_t foo32 = 0x12345678;
9453 }
9454 EOCP
9455 set try
9456 if eval $compile; then
9457         echo "<inttypes.h> found." >&4
9458         val="$define"
9459 else
9460         echo "<inttypes.h> NOT found." >&4
9461         val="$undef"
9462 fi
9463 $rm -f try.c try
9464 set i_inttypes
9465 eval $setvar
9466
9467 : check for int64_t
9468 echo " "
9469 echo "Checking to see if you have int64_t..." >&4
9470 $cat >try.c <<EOCP
9471 #include <sys/types.h>
9472 #$i_inttypes I_INTTYPES
9473 #ifdef I_INTTYPES
9474 #include <inttypes.h>
9475 #endif
9476 int main() { int64_t x = 7; }
9477 EOCP
9478 set try
9479 if eval $compile; then
9480         val="$define"
9481         echo "You have int64_t."
9482 else
9483         val="$undef"
9484         echo "You do not have int64_t."
9485 fi
9486 $rm -f try try.*
9487 set d_int64_t
9488 eval $setvar
9489
9490 : Look for isascii
9491 echo " "
9492 $cat >isascii.c <<'EOCP'
9493 #include <stdio.h>
9494 #include <ctype.h>
9495 int main() {
9496         int c = 'A';
9497         if (isascii(c))
9498                 exit(0);
9499         else
9500                 exit(1);
9501 }
9502 EOCP
9503 set isascii
9504 if eval $compile; then
9505         echo "isascii() found." >&4
9506         val="$define"
9507 else
9508         echo "isascii() NOT found." >&4
9509         val="$undef"
9510 fi
9511 set d_isascii
9512 eval $setvar
9513 $rm -f isascii*
9514
9515 : see if killpg exists
9516 set killpg d_killpg
9517 eval $inlibc
9518
9519 : see if lchown exists
9520 echo " "
9521 $cat > try.c <<'EOCP'
9522 /* System header to define __stub macros and hopefully few prototypes,
9523     which can conflict with char lchown(); below.  */
9524 #include <assert.h>
9525 /* Override any gcc2 internal prototype to avoid an error.  */
9526 /* We use char because int might match the return type of a gcc2
9527    builtin and then its argument prototype would still apply.  */
9528 char lchown();
9529 int main() {
9530     /*  The GNU C library defines this for functions which it implements
9531         to always fail with ENOSYS.  Some functions are actually named
9532         something starting with __ and the normal name is an alias.  */
9533 #if defined (__stub_lchown) || defined (__stub___lchown)
9534 choke me
9535 #else
9536 lchown();
9537 #endif
9538 ; return 0; }
9539 EOCP
9540 set try
9541 if eval $compile; then
9542     $echo "lchown() found." >&4
9543     val="$define"
9544 else
9545     $echo "lchown() NOT found." >&4
9546     val="$undef"
9547 fi
9548 set d_lchown
9549 eval $setvar
9550
9551 : See if number of significant digits in a double precision number is known
9552 echo " "
9553 $cat >ldbl_dig.c <<EOM
9554 #$i_limits I_LIMITS
9555 #$i_float I_FLOAT
9556 #ifdef I_LIMITS
9557 #include <limits.h>
9558 #endif
9559 #ifdef I_FLOAT
9560 #include <float.h>
9561 #endif
9562 #ifdef LDBL_DIG
9563 printf("Contains LDBL_DIG");
9564 #endif
9565 EOM
9566 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9567 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9568         echo "LDBL_DIG found." >&4
9569         val="$define"
9570 else
9571         echo "LDBL_DIG NOT found." >&4
9572         val="$undef"
9573 fi
9574 $rm -f ldbl_dig.?
9575 set d_ldbl_dig
9576 eval $setvar
9577
9578 : see if link exists
9579 set link d_link
9580 eval $inlibc
9581
9582 : see if localeconv exists
9583 set localeconv d_locconv
9584 eval $inlibc
9585
9586 : see if lockf exists
9587 set lockf d_lockf
9588 eval $inlibc
9589
9590 : check for long long
9591 echo " "
9592 echo "Checking to see if you have long long..." >&4
9593 echo 'int main() { long long x = 7; return 0; }' > try.c
9594 set try
9595 if eval $compile; then
9596         val="$define"
9597         echo "You have have long long."
9598 else
9599         val="$undef"
9600         echo "You do not have long long."
9601 fi
9602 $rm try.*
9603 set d_longlong
9604 eval $setvar
9605
9606 : check for length of long long
9607 case "${d_longlong}${longlongsize}" in
9608 $define)
9609         echo " "
9610         echo "Checking to see how big your long longs are..." >&4
9611         $cat >try.c <<'EOCP'
9612 #include <stdio.h>
9613 int main()
9614 {
9615     printf("%d\n", (int)sizeof(long long));
9616     return(0);
9617 }
9618 EOCP
9619         set try
9620         if eval $compile_ok; then
9621                 longlongsize=`./try$exe_ext`
9622                 echo "Your long longs are $longlongsize bytes long."
9623         else
9624                 dflt='8'
9625                 echo " "
9626                 echo "(I can't seem to compile the test program.  Guessing...)"
9627                 rp="What is the size of a long long (in bytes)?"
9628                 . ./myread
9629                 longlongsize="$ans"
9630         fi
9631         if $test "X$longsize" = "X$longlongsize"; then
9632                 echo "(That isn't any different from an ordinary long.)"
9633         fi      
9634         ;;
9635 esac
9636 $rm -f try.* try
9637
9638 : see if prototype for lseek is available
9639 echo " "
9640 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9641 eval $hasproto
9642
9643 : see if lstat exists
9644 set lstat d_lstat
9645 eval $inlibc
9646
9647 : see if madvise exists
9648 set madvise d_madvise
9649 eval $inlibc
9650
9651 : see if mblen exists
9652 set mblen d_mblen
9653 eval $inlibc
9654
9655 : see if mbstowcs exists
9656 set mbstowcs d_mbstowcs
9657 eval $inlibc
9658
9659 : see if mbtowc exists
9660 set mbtowc d_mbtowc
9661 eval $inlibc
9662
9663 : see if memchr exists
9664 set memchr d_memchr
9665 eval $inlibc
9666
9667 : see if memcmp exists
9668 set memcmp d_memcmp
9669 eval $inlibc
9670
9671 : see if memcpy exists
9672 set memcpy d_memcpy
9673 eval $inlibc
9674
9675 : see if memmove exists
9676 set memmove d_memmove
9677 eval $inlibc
9678
9679 : see if memset exists
9680 set memset d_memset
9681 eval $inlibc
9682
9683 : see if mkdir exists
9684 set mkdir d_mkdir
9685 eval $inlibc
9686
9687 : see if mkdtemp exists
9688 set mkdtemp d_mkdtemp
9689 eval $inlibc
9690
9691 : see if mkfifo exists
9692 set mkfifo d_mkfifo
9693 eval $inlibc
9694
9695 : see if mkstemp exists
9696 set mkstemp d_mkstemp
9697 eval $inlibc
9698
9699 : see if mkstemps exists
9700 set mkstemps d_mkstemps
9701 eval $inlibc
9702
9703 : see if mktime exists
9704 set mktime d_mktime
9705 eval $inlibc
9706
9707 : see if this is a sys/mman.h system
9708 set sys/mman.h i_sysmman
9709 eval $inhdr
9710
9711 : see if mmap exists
9712 set mmap d_mmap
9713 eval $inlibc
9714 : see what shmat returns
9715 : default to something harmless
9716 mmaptype='void *'
9717 case "$i_sysmman$d_mmap" in
9718 "$define$define")
9719         $cat >mmap.c <<'END'
9720 #include <sys/mman.h>
9721 void *mmap();
9722 END
9723         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9724                 mmaptype='void *'
9725         else
9726                 mmaptype='caddr_t'
9727         fi
9728         echo "and it returns ($mmaptype)." >&4
9729         ;;
9730 esac
9731
9732
9733
9734 : see if mprotect exists
9735 set mprotect d_mprotect
9736 eval $inlibc
9737
9738 : see if msgctl exists
9739 set msgctl d_msgctl
9740 eval $inlibc
9741
9742 : see if msgget exists
9743 set msgget d_msgget
9744 eval $inlibc
9745
9746 : see if msgsnd exists
9747 set msgsnd d_msgsnd
9748 eval $inlibc
9749
9750 : see if msgrcv exists
9751 set msgrcv d_msgrcv
9752 eval $inlibc
9753
9754 : see how much of the 'msg*(2)' library is present.
9755 h_msg=true
9756 echo " "
9757 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9758 *"$undef"*) h_msg=false;;
9759 esac
9760 case "$osname" in
9761 freebsd)
9762     case "`ipcs 2>&1`" in
9763     "SVID messages"*"not configured"*)
9764         echo "Your $osname does not have the msg*(2) configured." >&4
9765         h_msg=false
9766         val="$undef"
9767         set msgctl d_msgctl
9768         eval $setvar
9769         set msgget d_msgget
9770         eval $setvar
9771         set msgsnd d_msgsnd
9772         eval $setvar
9773         set msgrcv d_msgrcv
9774         eval $setvar
9775         ;;
9776     esac
9777     ;;
9778 esac
9779 : we could also check for sys/ipc.h ...
9780 if $h_msg && $test `./findhdr sys/msg.h`; then
9781         echo "You have the full msg*(2) library." >&4
9782         val="$define"
9783 else
9784         echo "You don't have the full msg*(2) library." >&4
9785         val="$undef"
9786 fi
9787 set d_msg
9788 eval $setvar
9789
9790 : see if msync exists
9791 set msync d_msync
9792 eval $inlibc
9793
9794 : see if munmap exists
9795 set munmap d_munmap
9796 eval $inlibc
9797
9798 : see if nice exists
9799 set nice d_nice
9800 eval $inlibc
9801
9802
9803 echo " "
9804 echo "Checking which 64-bit integer type we could use..." >&4
9805
9806 case "$intsize" in
9807 8) val=int
9808    set quadtype
9809    eval $setvar
9810    val='"unsigned int"'
9811    set uquadtype
9812    eval $setvar
9813    quadkind=1
9814    ;;
9815 *) case "$longsize" in
9816    8) val=long
9817       set quadtype
9818       eval $setvar
9819       val='"unsigned long"'
9820       set uquadtype
9821       eval $setvar
9822       quadkind=2
9823       ;;
9824    *) case "$d_longlong:$longlongsize" in
9825       define:8)
9826         val='"long long"'
9827         set quadtype
9828         eval $setvar
9829         val='"unsigned long long"'
9830         set uquadtype
9831         eval $setvar
9832         quadkind=3
9833         ;;
9834       *) case "$d_int64_t" in
9835          define)
9836            val=int64_t
9837            set quadtype
9838            eval $setvar
9839            val=uint64_t
9840            set uquadtype
9841            eval $setvar
9842            quadkind=4
9843            ;;
9844          esac
9845          ;;
9846       esac
9847       ;;
9848    esac
9849    ;;
9850 esac
9851
9852 case "$quadtype" in
9853 '')     echo "Alas, no 64-bit integer types in sight." >&4
9854         d_quad="$undef"
9855         ;;
9856 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9857             verb="will"
9858         else
9859             verb="could"
9860         fi
9861         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9862         d_quad="$define"
9863         ;;
9864 esac
9865
9866 : check for length of character
9867 echo " "
9868 case "$charsize" in
9869 '')
9870         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9871         $cat >try.c <<'EOCP'
9872 #include <stdio.h>
9873 int main()
9874 {
9875     printf("%d\n", (int)sizeof(char));
9876     exit(0);
9877 }
9878 EOCP
9879         set try
9880         if eval $compile_ok; then
9881                 dflt=`./try`
9882         else
9883                 dflt='1'
9884                 echo "(I can't seem to compile the test program.  Guessing...)"
9885         fi
9886         ;;
9887 *)
9888         dflt="$charsize"
9889         ;;
9890 esac
9891 rp="What is the size of a character (in bytes)?"
9892 . ./myread
9893 charsize="$ans"
9894 $rm -f try.c try
9895
9896
9897 echo " "
9898 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9899
9900 case "$use64bitint:$d_quad:$quadtype" in
9901 define:define:?*)
9902         ivtype="$quadtype"
9903         uvtype="$uquadtype"
9904         ivsize=8
9905         uvsize=8
9906         ;;
9907 *)      ivtype="long"
9908         uvtype="unsigned long"
9909         ivsize=$longsize
9910         uvsize=$longsize
9911         ;;
9912 esac
9913
9914 case "$uselongdouble:$d_longdbl" in
9915 define:define)
9916         nvtype="long double"
9917         nvsize=$longdblsize
9918         ;;
9919 *)      nvtype=double
9920         nvsize=$doublesize
9921         ;;
9922 esac
9923
9924 $echo "(IV will be "$ivtype", $ivsize bytes)"
9925 $echo "(UV will be "$uvtype", $uvsize bytes)"
9926 $echo "(NV will be "$nvtype", $nvsize bytes)"
9927
9928 $cat >try.c <<EOCP
9929 #$i_inttypes I_INTTYPES
9930 #ifdef I_INTTYPES
9931 #include <inttypes.h>
9932 #endif
9933 #include <stdio.h>
9934 int main() {
9935 #ifdef INT8
9936    int8_t i =  INT8_MAX;
9937   uint8_t u = UINT8_MAX;
9938   printf("int8_t\n");
9939 #endif
9940 #ifdef INT16
9941    int16_t i =  INT16_MAX;
9942   uint16_t i = UINT16_MAX;
9943   printf("int16_t\n");
9944 #endif
9945 #ifdef INT32
9946    int32_t i =  INT32_MAX;
9947   uint32_t u = UINT32_MAX;
9948   printf("int32_t\n");
9949 #endif
9950 }
9951 EOCP
9952
9953 case "$i8type" in
9954 '')     case "$charsize" in
9955         1)      i8type=char
9956                 u8type="unsigned char"
9957                 i8size=$charsize
9958                 u8size=$charsize
9959                 ;;
9960         esac
9961         ;;
9962 esac
9963 case "$i8type" in
9964 '')     set try -DINT8
9965         if eval $compile; then
9966                 case "`./try$exe_ext`" in
9967                 int8_t) i8type=int8_t
9968                         u8type=uint8_t
9969                         i8size=1
9970                         u8size=1
9971                         ;;
9972                 esac
9973         fi
9974         ;;
9975 esac
9976 case "$i8type" in
9977 '')     if $test $charsize -ge 1; then
9978                 i8type=char
9979                 u8type="unsigned char"
9980                 i8size=$charsize
9981                 u8size=$charsize
9982         fi
9983         ;;
9984 esac
9985
9986 case "$i16type" in
9987 '')     case "$shortsize" in
9988         2)      i16type=short
9989                 u16type="unsigned short"
9990                 i16size=$shortsize
9991                 u16size=$shortsize
9992                 ;;
9993         esac
9994         ;;
9995 esac
9996 case "$i16type" in
9997 '')     set try -DINT16
9998         if eval $compile; then
9999                 case "`./try$exe_ext`" in
10000                 int16_t)
10001                         i16type=int16_t
10002                         u16type=uint16_t
10003                         i16size=2
10004                         u16size=2
10005                         ;;
10006                 esac
10007         fi
10008         ;;
10009 esac
10010 case "$i16type" in
10011 '')     if $test $shortsize -ge 2; then
10012                 i16type=short
10013                 u16type="unsigned short"
10014                 i16size=$shortsize
10015                 u16size=$shortsize
10016         fi
10017         ;;
10018 esac
10019
10020 case "$i32type" in
10021 '')     case "$longsize" in
10022         4)      i32type=long
10023                 u32type="unsigned long"
10024                 i32size=$longsize
10025                 u32size=$longsize
10026                 ;;
10027         *)      case "$intsize" in
10028                 4)      i32type=int
10029                         u32type="unsigned int"
10030                         i32size=$intsize
10031                         u32size=$intsize
10032                         ;;
10033                 esac
10034                 ;;
10035         esac
10036         ;;
10037 esac
10038 case "$i32type" in
10039 '')     set try -DINT32
10040         if eval $compile; then
10041                 case "`./try$exe_ext`" in
10042                 int32_t)
10043                         i32type=int32_t
10044                         u32type=uint32_t
10045                         i32size=4
10046                         u32size=4
10047                         ;;
10048                 esac
10049         fi
10050         ;;
10051 esac
10052 case "$i32type" in
10053 '')     if $test $intsize -ge 4; then
10054                 i32type=int
10055                 u32type="unsigned int"
10056                 i32size=$intsize
10057                 u32size=$intsize
10058         fi
10059         ;;
10060 esac
10061
10062 case "$i64type" in
10063 '')     case "$d_quad:$quadtype" in
10064         define:?*)
10065                 i64type="$quadtype"
10066                 u64type="$uquadtype"
10067                 i64size=8
10068                 u64size=8
10069                 ;;
10070         esac
10071         ;;
10072 esac
10073
10074 $echo "Checking whether your NVs can preserve your UVs..." >&4
10075 $cat <<EOP >try.c
10076 #include <stdio.h>
10077 int main() {
10078     $uvtype k = ($uvtype)~0, l;
10079     $nvtype d;
10080     l = k;
10081     d = ($nvtype)l;
10082     l = ($uvtype)d;
10083     if (l == k)
10084        printf("preserve\n");
10085     exit(0);
10086 }
10087 EOP
10088 set try
10089 if eval $compile; then
10090         case "`./try$exe_ext`" in
10091         preserve) d_nv_preserves_uv="$define" ;;
10092         esac
10093 fi      
10094 case "$d_nv_preserves_uv" in
10095 $define) $echo "Yes, they can."  2>&1 ;;
10096 *)       $echo "No, they can't." 2>&1
10097          d_nv_preserves_uv="$undef"
10098          ;;
10099 esac
10100
10101 $rm -f try.* try
10102
10103
10104 : check for off64_t
10105 echo " "
10106 echo "Checking to see if you have off64_t..." >&4
10107 $cat >try.c <<EOCP
10108 #include <sys/types.h>
10109 #include <unistd.h>
10110 int main() { off64_t x = 7; }
10111 EOCP
10112 set try
10113 if eval $compile; then
10114         val="$define"
10115         echo "You have off64_t."
10116 else
10117         val="$undef"
10118         echo "You do not have off64_t."
10119         case "$lseeksize" in
10120         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10121         esac
10122 fi
10123 $rm -f try.* try
10124 set d_off64_t
10125 eval $setvar
10126
10127 : see if POSIX threads are available
10128 set pthread.h i_pthread
10129 eval $inhdr
10130
10131
10132
10133
10134 : how to create joinable pthreads
10135 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10136         echo " "
10137         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10138         $cat >try.c <<'EOCP'
10139 #include <pthread.h>
10140 int main() {
10141     int detachstate = JOINABLE;
10142 }
10143 EOCP
10144         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10145         if eval $compile; then
10146                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10147                 val="$undef" # Yes, undef.
10148                 set d_old_pthread_create_joinable
10149                 eval $setvar
10150                 val=""
10151                 set old_pthread_create_joinable
10152                 eval $setvar
10153         else
10154                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10155                 if eval $compile; then
10156                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10157                         val="$define"
10158                         set d_old_pthread_create_joinable
10159                         eval $setvar
10160                         val=PTHREAD_CREATE_UNDETACHED
10161                         set old_pthread_create_joinable
10162                         eval $setvar
10163                 else            
10164                         set try -DJOINABLE=__UNDETACHED
10165                         if eval $compile; then
10166                                 echo "You seem to use __UNDETACHED." >&4
10167                                 val="$define"
10168                                 set d_old_pthread_create_joinable
10169                                 eval $setvar
10170                                 val=__UNDETACHED
10171                                 set old_pthread_create_joinable
10172                                 eval $setvar
10173                         else
10174                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10175                                 val="$define"
10176                                 set d_old_pthread_create_joinable
10177                                 eval $setvar
10178                                 val=0
10179                                 set old_pthread_create_joinable
10180                                 eval $setvar
10181                         fi
10182                 fi
10183         fi
10184         $rm -f try try.*
10185 else
10186     d_old_pthread_create_joinable="$undef"
10187     old_pthread_create_joinable=""
10188 fi
10189
10190 : see if pause exists
10191 set pause d_pause
10192 eval $inlibc
10193
10194 : see if pipe exists
10195 set pipe d_pipe
10196 eval $inlibc
10197
10198 : see if poll exists
10199 set poll d_poll
10200 eval $inlibc
10201
10202
10203 : see whether the various POSIXish _yields exist
10204 $cat >try.c <<EOP
10205 #include <pthread.h>
10206 #include <stdio.h>
10207 int main() {
10208 #ifdef SCHED_YIELD
10209         sched_yield();
10210 #else
10211 #ifdef PTHREAD_YIELD
10212         pthread_yield();
10213 #else
10214 #ifdef PTHREAD_YIELD_NULL
10215         pthread_yield(NULL);
10216 #endif
10217 #endif
10218 #endif
10219 }
10220 EOP
10221 : see if sched_yield exists
10222 set try -DSCHED_YIELD
10223 if eval $compile; then
10224     val="$define"
10225     sched_yield='sched_yield()'
10226 else
10227     val="$undef"
10228 fi
10229 case "$usethreads" in
10230 $define)
10231         case "$val" in
10232         $define) echo 'sched_yield() found.' >&4        ;;
10233         *)       echo 'sched_yield() NOT found.' >&4    ;;
10234         esac
10235 esac
10236 set d_sched_yield
10237 eval $setvar
10238
10239 : see if pthread_yield exists
10240 set try -DPTHREAD_YIELD
10241 if eval $compile; then
10242     val="$define"
10243     case "$sched_yield" in
10244     '') sched_yield='pthread_yield()' ;;
10245     esac
10246 else
10247     set try -DPTHREAD_YIELD_NULL
10248     if eval $compile; then
10249         val="$define"
10250         case "$sched_yield" in
10251         '') sched_yield='pthread_yield(NULL)' ;;
10252         esac
10253     else
10254         val="$undef"
10255     fi
10256 fi
10257 case "$usethreads" in
10258 $define)
10259         case "$val" in
10260         $define) echo 'pthread_yield() found.' >&4      ;;
10261         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10262         esac
10263         ;;
10264 esac
10265 set d_pthread_yield
10266 eval $setvar
10267
10268 case "$sched_yield" in
10269 '') sched_yield=undef ;;
10270 esac
10271
10272 $rm -f try try.*
10273
10274 : see if this is a pwd.h system
10275 set pwd.h i_pwd
10276 eval $inhdr
10277
10278 case "$i_pwd" in
10279 $define)
10280         xxx=`./findhdr pwd.h`
10281         $cppstdin $cppflags $cppminus < $xxx >$$.h
10282
10283         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10284                 val="$define"
10285         else
10286                 val="$undef"
10287         fi
10288         set d_pwquota
10289         eval $setvar
10290
10291         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10292                 val="$define"
10293         else
10294                 val="$undef"
10295         fi
10296         set d_pwage
10297         eval $setvar
10298
10299         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10300                 val="$define"
10301         else
10302                 val="$undef"
10303         fi
10304         set d_pwchange
10305         eval $setvar
10306
10307         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10308                 val="$define"
10309         else
10310                 val="$undef"
10311         fi
10312         set d_pwclass
10313         eval $setvar
10314
10315         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10316                 val="$define"
10317         else
10318                 val="$undef"
10319         fi
10320         set d_pwexpire
10321         eval $setvar
10322
10323         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10324                 val="$define"
10325         else
10326                 val="$undef"
10327         fi
10328         set d_pwcomment
10329         eval $setvar
10330
10331         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10332                 val="$define"
10333         else
10334                 val="$undef"
10335         fi
10336         set d_pwgecos
10337         eval $setvar
10338
10339         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10340                 val="$define"
10341         else
10342                 val="$undef"
10343         fi
10344         set d_pwpasswd
10345         eval $setvar
10346
10347         $rm -f $$.h
10348         ;;
10349 *)
10350         val="$undef"; 
10351         set d_pwquota; eval $setvar
10352         set d_pwage; eval $setvar
10353         set d_pwchange; eval $setvar
10354         set d_pwclass; eval $setvar
10355         set d_pwexpire; eval $setvar
10356         set d_pwcomment; eval $setvar
10357         set d_pwgecos; eval $setvar
10358         set d_pwpasswd; eval $setvar
10359         ;;
10360 esac
10361
10362 : see if readdir and friends exist
10363 set readdir d_readdir
10364 eval $inlibc
10365 set seekdir d_seekdir
10366 eval $inlibc
10367 set telldir d_telldir
10368 eval $inlibc
10369 set rewinddir d_rewinddir
10370 eval $inlibc
10371
10372 : see if readlink exists
10373 set readlink d_readlink
10374 eval $inlibc
10375
10376 : see if rename exists
10377 set rename d_rename
10378 eval $inlibc
10379
10380 : see if rmdir exists
10381 set rmdir d_rmdir
10382 eval $inlibc
10383
10384 : see if memory.h is available.
10385 val=''
10386 set memory.h val
10387 eval $inhdr
10388
10389 : See if it conflicts with string.h
10390 case "$val" in
10391 $define)
10392         case "$strings" in
10393         '') ;;
10394         *)
10395                 $cppstdin $cppflags $cppminus < $strings > mem.h
10396                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10397                         echo " "
10398                         echo "We won't be including <memory.h>."
10399                         val="$undef"
10400                 fi
10401                 $rm -f mem.h
10402                 ;;
10403         esac
10404 esac
10405 set i_memory
10406 eval $setvar
10407
10408 : can bcopy handle overlapping blocks?
10409 val="$undef"
10410 case "$d_bcopy" in
10411 "$define")
10412         echo " "
10413         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10414         $cat >try.c <<EOCP
10415 #$i_memory I_MEMORY
10416 #$i_stdlib I_STDLIB
10417 #$i_string I_STRING
10418 #$i_unistd I_UNISTD
10419 EOCP
10420         $cat >>try.c <<'EOCP'
10421 #include <stdio.h>
10422 #ifdef I_MEMORY
10423 #  include <memory.h>
10424 #endif
10425 #ifdef I_STDLIB
10426 #  include <stdlib.h>
10427 #endif
10428 #ifdef I_STRING
10429 #  include <string.h>
10430 #else
10431 #  include <strings.h>
10432 #endif
10433 #ifdef I_UNISTD
10434 #  include <unistd.h>  /* Needed for NetBSD */
10435 #endif
10436 int main()
10437 {
10438 char buf[128], abc[128];
10439 char *b;
10440 int len;
10441 int off;
10442 int align;
10443
10444 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10445
10446 for (align = 7; align >= 0; align--) {
10447         for (len = 36; len; len--) {
10448                 b = buf+align;
10449                 bcopy(abc, b, len);
10450                 for (off = 1; off <= len; off++) {
10451                         bcopy(b, b+off, len);
10452                         bcopy(b+off, b, len);
10453                         if (bcmp(b, abc, len))
10454                                 exit(1);
10455                 }
10456         }
10457 }
10458 exit(0);
10459 }
10460 EOCP
10461         set try
10462         if eval $compile_ok; then
10463                 if ./try 2>/dev/null; then
10464                         echo "Yes, it can."
10465                         val="$define"
10466                 else
10467                         echo "It can't, sorry."
10468                         case "$d_memmove" in
10469                         "$define") echo "But that's Ok since you have memmove()." ;;
10470                         esac
10471                 fi
10472         else
10473                 echo "(I can't compile the test program, so we'll assume not...)"
10474                 case "$d_memmove" in
10475                 "$define") echo "But that's Ok since you have memmove()." ;;
10476                 esac
10477         fi
10478         ;;
10479 esac
10480 $rm -f try.* try core
10481 set d_safebcpy
10482 eval $setvar
10483
10484 : can memcpy handle overlapping blocks?
10485 val="$undef"
10486 case "$d_memcpy" in
10487 "$define")
10488         echo " "
10489         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10490         $cat >try.c <<EOCP
10491 #$i_memory I_MEMORY
10492 #$i_stdlib I_STDLIB
10493 #$i_string I_STRING
10494 #$i_unistd I_UNISTD
10495 EOCP
10496         $cat >>try.c <<'EOCP'
10497 #include <stdio.h>
10498 #ifdef I_MEMORY
10499 #  include <memory.h>
10500 #endif
10501 #ifdef I_STDLIB
10502 #  include <stdlib.h>
10503 #endif
10504 #ifdef I_STRING
10505 #  include <string.h>
10506 #else
10507 #  include <strings.h>
10508 #endif
10509 #ifdef I_UNISTD
10510 #  include <unistd.h>  /* Needed for NetBSD */
10511 #endif
10512 int main()
10513 {
10514 char buf[128], abc[128];
10515 char *b;
10516 int len;
10517 int off;
10518 int align;
10519
10520 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10521    try to store the string in read-only memory. */
10522 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10523
10524 for (align = 7; align >= 0; align--) {
10525         for (len = 36; len; len--) {
10526                 b = buf+align;
10527                 memcpy(b, abc, len);
10528                 for (off = 1; off <= len; off++) {
10529                         memcpy(b+off, b, len);
10530                         memcpy(b, b+off, len);
10531                         if (memcmp(b, abc, len))
10532                                 exit(1);
10533                 }
10534         }
10535 }
10536 exit(0);
10537 }
10538 EOCP
10539         set try
10540         if eval $compile_ok; then
10541                 if ./try 2>/dev/null; then
10542                         echo "Yes, it can."
10543                         val="$define"
10544                 else
10545                         echo "It can't, sorry."
10546                         case "$d_memmove" in
10547                         "$define") echo "But that's Ok since you have memmove()." ;;
10548                         esac
10549                 fi
10550         else
10551                 echo "(I can't compile the test program, so we'll assume not...)"
10552                 case "$d_memmove" in
10553                 "$define") echo "But that's Ok since you have memmove()." ;;
10554                 esac
10555         fi
10556         ;;
10557 esac
10558 $rm -f try.* try core
10559 set d_safemcpy
10560 eval $setvar
10561
10562 : can memcmp be trusted to compare relative magnitude?
10563 val="$undef"
10564 case "$d_memcmp" in
10565 "$define")
10566         echo " "
10567         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10568         $cat >try.c <<EOCP
10569 #$i_memory I_MEMORY
10570 #$i_stdlib I_STDLIB
10571 #$i_string I_STRING
10572 #$i_unistd I_UNISTD
10573 EOCP
10574         $cat >>try.c <<'EOCP'
10575 #include <stdio.h>
10576 #ifdef I_MEMORY
10577 #  include <memory.h>
10578 #endif
10579 #ifdef I_STDLIB
10580 #  include <stdlib.h>
10581 #endif
10582 #ifdef I_STRING
10583 #  include <string.h>
10584 #else
10585 #  include <strings.h>
10586 #endif
10587 #ifdef I_UNISTD
10588 #  include <unistd.h>  /* Needed for NetBSD */
10589 #endif
10590 int main()
10591 {
10592 char a = -1;
10593 char b = 0;
10594 if ((a < b) && memcmp(&a, &b, 1) < 0)
10595         exit(1);
10596 exit(0);
10597 }
10598 EOCP
10599         set try
10600         if eval $compile_ok; then
10601                 if ./try 2>/dev/null; then
10602                         echo "Yes, it can."
10603                         val="$define"
10604                 else
10605                         echo "No, it can't (it uses signed chars)."
10606                 fi
10607         else
10608                 echo "(I can't compile the test program, so we'll assume not...)"
10609         fi
10610         ;;
10611 esac
10612 $rm -f try.* try core
10613 set d_sanemcmp
10614 eval $setvar
10615
10616 : see if select exists
10617 set select d_select
10618 eval $inlibc
10619
10620 : see if semctl exists
10621 set semctl d_semctl
10622 eval $inlibc
10623
10624 : see if semget exists
10625 set semget d_semget
10626 eval $inlibc
10627
10628 : see if semop exists
10629 set semop d_semop
10630 eval $inlibc
10631
10632 : see how much of the 'sem*(2)' library is present.
10633 h_sem=true
10634 echo " "
10635 case "$d_semctl$d_semget$d_semop" in
10636 *"$undef"*) h_sem=false;;
10637 esac
10638 case "$osname" in
10639 freebsd)
10640     case "`ipcs 2>&1`" in
10641     "SVID messages"*"not configured"*)
10642         echo "Your $osname does not have the sem*(2) configured." >&4
10643         h_sem=false
10644         val="$undef"
10645         set semctl d_semctl
10646         eval $setvar
10647         set semget d_semget
10648         eval $setvar
10649         set semop d_semop
10650         eval $setvar
10651         ;;
10652     esac
10653     ;;
10654 esac
10655 : we could also check for sys/ipc.h ...
10656 if $h_sem && $test `./findhdr sys/sem.h`; then
10657         echo "You have the full sem*(2) library." >&4
10658         val="$define"
10659 else
10660         echo "You don't have the full sem*(2) library." >&4
10661         val="$undef"
10662 fi
10663 set d_sem
10664 eval $setvar
10665
10666 : see whether sys/sem.h defines union semun
10667 echo " "
10668 $cat > try.c <<'END'
10669 #include <sys/types.h>
10670 #include <sys/ipc.h>
10671 #include <sys/sem.h>
10672 int main () { union semun semun; semun.buf = 0; }
10673 END
10674 set try
10675 if eval $compile; then
10676     echo "You have union semun in <sys/sem.h>." >&4
10677     val="$define"
10678 else
10679     echo "You do not have union semun in <sys/sem.h>." >&4
10680     val="$undef"
10681 fi
10682 $rm -f try try.c try.h
10683 set d_union_semun
10684 eval $setvar
10685
10686 : see how to do semctl IPC_STAT
10687 case "$d_sem" in
10688 $define)
10689     : see whether semctl IPC_STAT can use union semun
10690     echo " "
10691     $cat > try.h <<END
10692 #ifndef S_IRUSR
10693 #   ifdef S_IREAD
10694 #       define S_IRUSR S_IREAD
10695 #       define S_IWUSR S_IWRITE
10696 #       define S_IXUSR S_IEXEC
10697 #   else
10698 #       define S_IRUSR 0400
10699 #       define S_IWUSR 0200
10700 #       define S_IXUSR 0100
10701 #   endif
10702 #   define S_IRGRP (S_IRUSR>>3)
10703 #   define S_IWGRP (S_IWUSR>>3)
10704 #   define S_IXGRP (S_IXUSR>>3)
10705 #   define S_IROTH (S_IRUSR>>6)
10706 #   define S_IWOTH (S_IWUSR>>6)
10707 #   define S_IXOTH (S_IXUSR>>6)
10708 #endif
10709 #ifndef S_IRWXU
10710 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10711 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10712 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10713 #endif
10714 END
10715
10716     $cat > try.c <<END
10717 #include <sys/types.h>
10718 #include <sys/ipc.h>
10719 #include <sys/sem.h>
10720 #include <sys/stat.h>
10721 #include <stdio.h>
10722 #include <errno.h>
10723 #include "try.h"
10724 #ifndef errno
10725 extern int errno;
10726 #endif
10727 #$d_union_semun HAS_UNION_SEMUN
10728 int main() {
10729     union semun
10730 #ifndef HAS_UNION_SEMUN
10731     {
10732         int val;
10733         struct semid_ds *buf;
10734         unsigned short *array;
10735     }
10736 #endif
10737     arg;
10738     int sem, st;
10739
10740 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10741     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10742     if (sem > -1) {
10743         struct semid_ds argbuf;
10744         arg.buf = &argbuf;
10745 #       ifdef IPC_STAT
10746         st = semctl(sem, 0, IPC_STAT, arg);
10747         if (st == 0)
10748             printf("semun\n");
10749         else
10750 #       endif /* IPC_STAT */
10751             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10752 #       ifdef IPC_RMID
10753         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10754 #       endif /* IPC_RMID */
10755             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10756     } else
10757 #endif /* IPC_PRIVATE && ... */
10758         printf("semget failed: errno = %d\n", errno);
10759   return 0;
10760 }
10761 END
10762     val="$undef"
10763     set try
10764     if eval $compile; then
10765         xxx=`./try`
10766         case "$xxx" in
10767         semun) val="$define" ;;
10768         esac
10769     fi
10770     $rm -f try try.c
10771     set d_semctl_semun
10772     eval $setvar
10773     case "$d_semctl_semun" in
10774     $define)
10775         echo "You can use union semun for semctl IPC_STAT." >&4
10776         also='also'
10777         ;;
10778     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10779         also=''
10780         ;;
10781     esac
10782
10783     : see whether semctl IPC_STAT can use struct semid_ds pointer
10784     $cat > try.c <<'END'
10785 #include <sys/types.h>
10786 #include <sys/ipc.h>
10787 #include <sys/sem.h>
10788 #include <sys/stat.h>
10789 #include "try.h"
10790 #include <stdio.h>
10791 #include <errno.h>
10792 #ifndef errno
10793 extern int errno;
10794 #endif
10795 int main() {
10796     struct semid_ds arg;
10797     int sem, st;
10798
10799 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10800     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10801     if (sem > -1) {
10802 #       ifdef IPC_STAT
10803         st = semctl(sem, 0, IPC_STAT, &arg);
10804         if (st == 0)
10805             printf("semid_ds\n");
10806         else
10807 #       endif /* IPC_STAT */
10808             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10809 #       ifdef IPC_RMID
10810         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10811 #       endif /* IPC_RMID */
10812             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10813     } else
10814 #endif /* IPC_PRIVATE && ... */
10815         printf("semget failed: errno = %d\n", errno);
10816
10817     return 0;
10818 }
10819 END
10820     val="$undef"
10821     set try
10822     if eval $compile; then
10823         xxx=`./try`
10824         case "$xxx" in
10825         semid_ds) val="$define" ;;
10826         esac
10827     fi
10828     $rm -f try try.c
10829     set d_semctl_semid_ds
10830     eval $setvar
10831     case "$d_semctl_semid_ds" in
10832     $define)
10833         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10834         ;;
10835     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10836         ;;
10837     esac
10838     $rm -f try.h
10839     ;;
10840 *)  val="$undef"
10841
10842     # We do not have the full sem*(2) library, so assume we can not
10843     # use either.
10844
10845     set d_semctl_semun
10846     eval $setvar
10847
10848     set d_semctl_semid_ds
10849     eval $setvar
10850     ;;
10851 esac
10852
10853 : see if setegid exists
10854 set setegid d_setegid
10855 eval $inlibc
10856
10857 : see if seteuid exists
10858 set seteuid d_seteuid
10859 eval $inlibc
10860
10861 : see if setgrent exists
10862 set setgrent d_setgrent
10863 eval $inlibc
10864
10865 : see if sethostent exists
10866 set sethostent d_sethent
10867 eval $inlibc
10868
10869 : see if setlinebuf exists
10870 set setlinebuf d_setlinebuf
10871 eval $inlibc
10872
10873 : see if setlocale exists
10874 set setlocale d_setlocale
10875 eval $inlibc
10876
10877 : see if setnetent exists
10878 set setnetent d_setnent
10879 eval $inlibc
10880
10881 : see if setprotoent exists
10882 set setprotoent d_setpent
10883 eval $inlibc
10884
10885 : see if setpgid exists
10886 set setpgid d_setpgid
10887 eval $inlibc
10888
10889 : see if setpgrp2 exists
10890 set setpgrp2 d_setpgrp2
10891 eval $inlibc
10892
10893 : see if setpriority exists
10894 set setpriority d_setprior
10895 eval $inlibc
10896
10897 : see if setpwent exists
10898 set setpwent d_setpwent
10899 eval $inlibc
10900
10901 : see if setregid exists
10902 set setregid d_setregid
10903 eval $inlibc
10904 set setresgid d_setresgid
10905 eval $inlibc
10906
10907 : see if setreuid exists
10908 set setreuid d_setreuid
10909 eval $inlibc
10910 set setresuid d_setresuid
10911 eval $inlibc
10912
10913 : see if setrgid exists
10914 set setrgid d_setrgid
10915 eval $inlibc
10916
10917 : see if setruid exists
10918 set setruid d_setruid
10919 eval $inlibc
10920
10921 : see if setservent exists
10922 set setservent d_setsent
10923 eval $inlibc
10924
10925 : see if setsid exists
10926 set setsid d_setsid
10927 eval $inlibc
10928
10929 : see if setspent exists
10930 set setspent d_setspent
10931 eval $inlibc
10932
10933 : see if setvbuf exists
10934 set setvbuf d_setvbuf
10935 eval $inlibc
10936
10937 : see if sfio.h is available
10938 set sfio.h i_sfio
10939 eval $inhdr
10940
10941
10942 : see if sfio library is available
10943 case "$i_sfio" in
10944 $define)
10945         val=''
10946         set sfreserve val
10947         eval $inlibc
10948         ;;
10949 *)
10950         val="$undef"
10951         ;;
10952 esac
10953 : Ok, but do we want to use it.
10954 case "$val" in
10955 $define)
10956         case "$usesfio" in
10957         true|$define|[yY]*) dflt='y';;
10958         *) dflt='n';;
10959         esac
10960         echo "$package can use the sfio library, but it is experimental."
10961         rp="You seem to have sfio available, do you want to try using it?"
10962         . ./myread
10963         case "$ans" in
10964         y|Y) ;;
10965         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10966                 val="$undef"
10967                 : Remove sfio from list of libraries to use
10968                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10969                 shift
10970                 libs="$*"
10971                 echo "libs = $libs" >&4
10972                 ;;
10973         esac
10974         ;;
10975 *)      case "$usesfio" in
10976         true|$define|[yY]*)
10977                 echo "Sorry, cannot find sfio on this machine" >&4
10978                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10979                 ;;
10980         esac
10981         ;;
10982 esac
10983 set d_sfio
10984 eval $setvar
10985 case "$d_sfio" in
10986 $define) usesfio='true';;
10987 *) usesfio='false';;
10988 esac
10989
10990 : see if shmctl exists
10991 set shmctl d_shmctl
10992 eval $inlibc
10993
10994 : see if shmget exists
10995 set shmget d_shmget
10996 eval $inlibc
10997
10998 : see if shmat exists
10999 set shmat d_shmat
11000 eval $inlibc
11001 : see what shmat returns
11002 case "$d_shmat" in
11003 "$define")
11004         $cat >shmat.c <<'END'
11005 #include <sys/shm.h>
11006 void *shmat();
11007 END
11008         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11009                 shmattype='void *'
11010         else
11011                 shmattype='char *'
11012         fi
11013         echo "and it returns ($shmattype)." >&4
11014         : see if a prototype for shmat is available
11015         xxx=`./findhdr sys/shm.h`
11016         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11017         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11018                 val="$define"
11019         else
11020                 val="$undef"
11021         fi
11022         $rm -f shmat.[co]
11023         ;;
11024 *)
11025         val="$undef"
11026         ;;
11027 esac
11028 set d_shmatprototype
11029 eval $setvar
11030
11031 : see if shmdt exists
11032 set shmdt d_shmdt
11033 eval $inlibc
11034
11035 : see how much of the 'shm*(2)' library is present.
11036 h_shm=true
11037 echo " "
11038 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11039 *"$undef"*) h_shm=false;;
11040 esac
11041 case "$osname" in
11042 freebsd)
11043     case "`ipcs 2>&1`" in
11044     "SVID shared memory"*"not configured"*)
11045         echo "Your $osname does not have the shm*(2) configured." >&4
11046         h_shm=false
11047         val="$undef"
11048         set shmctl d_shmctl
11049         evat $setvar
11050         set shmget d_shmget
11051         evat $setvar
11052         set shmat d_shmat
11053         evat $setvar
11054         set shmdt d_shmdt
11055         evat $setvar
11056         ;;
11057     esac
11058     ;;
11059 esac
11060 : we could also check for sys/ipc.h ...
11061 if $h_shm && $test `./findhdr sys/shm.h`; then
11062         echo "You have the full shm*(2) library." >&4
11063         val="$define"
11064 else
11065         echo "You don't have the full shm*(2) library." >&4
11066         val="$undef"
11067 fi
11068 set d_shm
11069 eval $setvar
11070
11071 echo " "
11072 : see if we have sigaction
11073 if set sigaction val -f d_sigaction; eval $csym; $val; then
11074         echo 'sigaction() found.' >&4
11075         $cat > try.c <<'EOP'
11076 #include <stdio.h>
11077 #include <sys/types.h>
11078 #include <signal.h>
11079 int main()
11080 {
11081     struct sigaction act, oact;
11082     act.sa_flags = 0;
11083     oact.sa_handler = 0;
11084     /* so that act and oact are used */
11085     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11086 }
11087 EOP
11088         set try
11089         if eval $compile_ok; then
11090                 val="$define"
11091         else
11092                 echo "But you don't seem to have a useable struct sigaction." >&4
11093                 val="$undef"
11094         fi
11095 else
11096         echo 'sigaction NOT found.' >&4
11097         val="$undef"
11098 fi
11099 set d_sigaction; eval $setvar
11100 $rm -f try try$_o try.c
11101
11102 : see if sigsetjmp exists
11103 echo " "
11104 case "$d_sigsetjmp" in
11105 '')
11106         $cat >try.c <<'EOP'
11107 #include <setjmp.h>
11108 sigjmp_buf env;
11109 int set = 1;
11110 int main()
11111 {
11112         if (sigsetjmp(env,1))
11113                 exit(set);
11114         set = 0;
11115         siglongjmp(env, 1);
11116         exit(1);
11117 }
11118 EOP
11119         set try
11120         if eval $compile; then
11121                 if ./try >/dev/null 2>&1; then
11122                         echo "POSIX sigsetjmp found." >&4
11123                         val="$define"
11124                 else
11125                         $cat >&4 <<EOM
11126 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11127 I'll ignore them.
11128 EOM
11129                         val="$undef"
11130                 fi
11131         else
11132                 echo "sigsetjmp not found." >&4
11133                 val="$undef"
11134         fi
11135         ;;
11136 *) val="$d_sigsetjmp"
11137         case "$d_sigsetjmp" in
11138         $define) echo "POSIX sigsetjmp found." >&4;;
11139         $undef) echo "sigsetjmp not found." >&4;;
11140         esac
11141         ;;
11142 esac
11143 set d_sigsetjmp
11144 eval $setvar
11145 $rm -f try.c try
11146
11147 : see if sys/stat.h is available
11148 set sys/stat.h i_sysstat
11149 eval $inhdr
11150
11151
11152 : see if stat knows about block sizes
11153 echo " "
11154 echo "Checking to see if your struct stat has st_blocks field..." >&4
11155 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11156 eval $hasfield
11157
11158
11159 : see if this is a sys/vfs.h system
11160 set sys/vfs.h i_sysvfs
11161 eval $inhdr
11162
11163
11164 : see if this is a sys/statfs.h system
11165 set sys/statfs.h i_sysstatfs
11166 eval $inhdr
11167
11168
11169 echo " "
11170 echo "Checking to see if your system supports struct statfs..." >&4
11171 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
11172 eval $hasstruct
11173 case "$d_statfs_s" in
11174 "$define")      echo "Yes, it does."   ;;
11175 *)              echo "No, it doesn't." ;;
11176 esac
11177
11178
11179
11180 : see if struct statfs knows about f_flags
11181 case "$d_statfs_s" in
11182 define) 
11183         echo " "
11184         echo "Checking to see if your struct statfs has f_flags field..." >&4
11185         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
11186         eval $hasfield
11187         ;;
11188 *)      val="$undef"
11189         set d_statfs_f_flags
11190         eval $setvar
11191         ;;
11192 esac
11193 case "$d_statfs_f_flags" in
11194 "$define")      echo "Yes, it does."   ;;
11195 *)              echo "No, it doesn't." ;;
11196 esac
11197
11198 : see if _ptr and _cnt from stdio act std
11199 echo " "
11200 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11201         echo "(Looks like you have stdio.h from Linux.)"
11202         case "$stdio_ptr" in
11203         '') stdio_ptr='((fp)->_IO_read_ptr)'
11204                 ptr_lval=$define
11205                 ;;
11206         *)      ptr_lval=$d_stdio_ptr_lval;;
11207         esac
11208         case "$stdio_cnt" in
11209         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11210                 cnt_lval=$undef
11211                 ;;
11212         *)      cnt_lval=$d_stdio_cnt_lval;;
11213         esac
11214         case "$stdio_base" in
11215         '') stdio_base='((fp)->_IO_read_base)';;
11216         esac
11217         case "$stdio_bufsiz" in
11218         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11219         esac
11220 else
11221         case "$stdio_ptr" in
11222         '') stdio_ptr='((fp)->_ptr)'
11223                 ptr_lval=$define
11224                 ;;
11225         *)      ptr_lval=$d_stdio_ptr_lval;;
11226         esac
11227         case "$stdio_cnt" in
11228         '') stdio_cnt='((fp)->_cnt)'
11229                 cnt_lval=$define
11230                 ;;
11231         *)      cnt_lval=$d_stdio_cnt_lval;;
11232         esac
11233         case "$stdio_base" in
11234         '') stdio_base='((fp)->_base)';;
11235         esac
11236         case "$stdio_bufsiz" in
11237         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11238         esac
11239 fi
11240 : test whether _ptr and _cnt really work
11241 echo "Checking how std your stdio is..." >&4
11242 $cat >try.c <<EOP
11243 #include <stdio.h>
11244 #define FILE_ptr(fp)    $stdio_ptr
11245 #define FILE_cnt(fp)    $stdio_cnt
11246 int main() {
11247         FILE *fp = fopen("try.c", "r");
11248         char c = getc(fp);
11249         if (
11250                 18 <= FILE_cnt(fp) &&
11251                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11252         )
11253                 exit(0);
11254         exit(1);
11255 }
11256 EOP
11257 val="$undef"
11258 set try
11259 if eval $compile; then
11260         if ./try; then
11261                 echo "Your stdio acts pretty std."
11262                 val="$define"
11263         else
11264                 echo "Your stdio isn't very std."
11265         fi
11266 else
11267         echo "Your stdio doesn't appear very std."
11268 fi
11269 $rm -f try.c try
11270 set d_stdstdio
11271 eval $setvar
11272
11273 : Can _ptr be used as an lvalue?
11274 case "$d_stdstdio$ptr_lval" in
11275 $define$define) val=$define ;;
11276 *) val=$undef ;;
11277 esac
11278 set d_stdio_ptr_lval
11279 eval $setvar
11280
11281 : Can _cnt be used as an lvalue?
11282 case "$d_stdstdio$cnt_lval" in
11283 $define$define) val=$define ;;
11284 *) val=$undef ;;
11285 esac
11286 set d_stdio_cnt_lval
11287 eval $setvar
11288
11289 : see if _base is also standard
11290 val="$undef"
11291 case "$d_stdstdio" in
11292 $define)
11293         $cat >try.c <<EOP
11294 #include <stdio.h>
11295 #define FILE_base(fp)   $stdio_base
11296 #define FILE_bufsiz(fp) $stdio_bufsiz
11297 int main() {
11298         FILE *fp = fopen("try.c", "r");
11299         char c = getc(fp);
11300         if (
11301                 19 <= FILE_bufsiz(fp) &&
11302                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11303         )
11304                 exit(0);
11305         exit(1);
11306 }
11307 EOP
11308         set try
11309         if eval $compile; then
11310                 if ./try; then
11311                         echo "And its _base field acts std."
11312                         val="$define"
11313                 else
11314                         echo "But its _base field isn't std."
11315                 fi
11316         else
11317                 echo "However, it seems to be lacking the _base field."
11318         fi
11319         $rm -f try.c try
11320         ;;
11321 esac
11322 set d_stdiobase
11323 eval $setvar
11324
11325 $cat >&4 <<EOM
11326 Checking how to access stdio streams by file descriptor number...
11327 EOM
11328 case "$stdio_stream_array" in
11329 '')     $cat >try.c <<EOCP
11330 #include <stdio.h>
11331 int main() {
11332   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11333     printf("yes\n");
11334 }
11335 EOCP
11336         for s in _iob __iob __sF
11337         do
11338                 set try -DSTDIO_STREAM_ARRAY=$s
11339                 if eval $compile; then
11340                         case "`./try$exe_ext`" in
11341                         yes)    stdio_stream_array=$s; break ;;
11342                         esac
11343                 fi
11344         done
11345         $rm -f try.* try$exe_ext
11346 esac
11347 case "$stdio_stream_array" in
11348 '')     $cat >&4 <<EOM
11349 I can't figure out how to access stdio streams by file descriptor number.
11350 EOM
11351         d_stdio_stream_array="$undef"
11352         ;;
11353 *)      $cat >&4 <<EOM
11354 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11355 EOM
11356         d_stdio_stream_array="$define"
11357         ;;
11358 esac
11359
11360 : see if strcoll exists
11361 set strcoll d_strcoll
11362 eval $inlibc
11363
11364 : check for structure copying
11365 echo " "
11366 echo "Checking to see if your C compiler can copy structs..." >&4
11367 $cat >try.c <<'EOCP'
11368 int main()
11369 {
11370         struct blurfl {
11371                 int dyick;
11372         } foo, bar;
11373
11374         foo = bar;
11375 }
11376 EOCP
11377 if $cc -c try.c >/dev/null 2>&1 ; then
11378         val="$define"
11379         echo "Yup, it can."
11380 else
11381         val="$undef"
11382         echo "Nope, it can't."
11383 fi
11384 set d_strctcpy
11385 eval $setvar
11386 $rm -f try.*
11387
11388 : see if strerror and/or sys_errlist[] exist
11389 echo " "
11390 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11391     if set strerror val -f d_strerror; eval $csym; $val; then
11392                 echo 'strerror() found.' >&4
11393                 d_strerror="$define"
11394                 d_strerrm='strerror(e)'
11395                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11396                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11397                         d_syserrlst="$define"
11398                 else
11399                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11400                         d_syserrlst="$undef"
11401                 fi
11402     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11403                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11404                 echo 'strerror() found in string header.' >&4
11405                 d_strerror="$define"
11406                 d_strerrm='strerror(e)'
11407                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11408                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11409                                 d_syserrlst="$define"
11410                 else
11411                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11412                         d_syserrlst="$undef"
11413                 fi
11414     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11415                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11416                 d_strerror="$undef"
11417                 d_syserrlst="$define"
11418                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11419     else
11420                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11421                 d_strerror="$undef"
11422                 d_syserrlst="$undef"
11423                 d_strerrm='"unknown"'
11424     fi
11425 fi
11426
11427 : see if strtod exists
11428 set strtod d_strtod
11429 eval $inlibc
11430
11431 : see if strtol exists
11432 set strtol d_strtol
11433 eval $inlibc
11434
11435 : see if strtold exists
11436 set strtold d_strtold
11437 eval $inlibc
11438
11439 : see if strtoll exists
11440 set strtoll d_strtoll
11441 eval $inlibc
11442
11443 : see if strtoul exists
11444 set strtoul d_strtoul
11445 eval $inlibc
11446
11447 : see if strtoull exists
11448 set strtoull d_strtoull
11449 eval $inlibc
11450
11451 : see if strtouq exists
11452 set strtouq d_strtouq
11453 eval $inlibc
11454
11455 : see if strxfrm exists
11456 set strxfrm d_strxfrm
11457 eval $inlibc
11458
11459 : see if symlink exists
11460 set symlink d_symlink
11461 eval $inlibc
11462
11463 : see if syscall exists
11464 set syscall d_syscall
11465 eval $inlibc
11466
11467 : see if sysconf exists
11468 set sysconf d_sysconf
11469 eval $inlibc
11470
11471 : see if system exists
11472 set system d_system
11473 eval $inlibc
11474
11475 : see if tcgetpgrp exists
11476 set tcgetpgrp d_tcgetpgrp
11477 eval $inlibc
11478
11479 : see if tcsetpgrp exists
11480 set tcsetpgrp d_tcsetpgrp
11481 eval $inlibc
11482
11483 : see if prototype for telldir is available
11484 echo " "
11485 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11486 eval $hasproto
11487
11488 : see if this is a sys/times.h system
11489 set sys/times.h i_systimes
11490 eval $inhdr
11491
11492 : see if times exists
11493 echo " "
11494 if set times val -f d_times; eval $csym; $val; then
11495         echo 'times() found.' >&4
11496         d_times="$define"
11497         inc=''
11498         case "$i_systimes" in
11499         "$define") inc='sys/times.h';;
11500         esac
11501         rp="What is the type returned by times() on this system?"
11502         set clock_t clocktype long stdio.h sys/types.h $inc
11503         eval $typedef_ask
11504 else
11505         echo 'times() NOT found, hope that will do.' >&4
11506         d_times="$undef"
11507         clocktype='int'
11508 fi
11509
11510 : see if truncate exists
11511 set truncate d_truncate
11512 eval $inlibc
11513
11514 : see if tzname[] exists
11515 echo " "
11516 if set tzname val -a d_tzname; eval $csym; $val; then
11517         val="$define"
11518         echo 'tzname[] found.' >&4
11519 else
11520         val="$undef"
11521         echo 'tzname[] NOT found.' >&4
11522 fi
11523 set d_tzname
11524 eval $setvar
11525
11526 : see if umask exists
11527 set umask d_umask
11528 eval $inlibc
11529
11530 : see if ustat exists
11531 set ustat d_ustat
11532 eval $inlibc
11533
11534 : backward compatibility for d_hvfork
11535 if test X$d_hvfork != X; then
11536         d_vfork="$d_hvfork"
11537         d_hvfork=''
11538 fi
11539 : see if there is a vfork
11540 val=''
11541 set vfork val
11542 eval $inlibc
11543
11544 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11545 : perl on Solaris 2.x, and probably elsewhere.
11546 case "$val" in
11547 $define)
11548         echo " "
11549         case "$usevfork" in
11550         false) dflt='n';;
11551         *) dflt='y';;
11552         esac
11553         cat <<'EOM'
11554  
11555 Perl can only use a vfork() that doesn't suffer from strict
11556 restrictions on calling functions or modifying global data in
11557 the child.  For example, glibc-2.1 contains such a vfork()
11558 that is unsuitable.  If your system provides a proper fork()
11559 call, chances are that you do NOT want perl to use vfork().
11560
11561 EOM
11562         rp="Do you still want to use vfork()?"
11563         . ./myread
11564         case "$ans" in
11565         y|Y) ;;
11566         *)
11567                 echo "Ok, we won't use vfork()."
11568                 val="$undef"
11569                 ;;
11570         esac
11571         ;;
11572 esac
11573 set d_vfork
11574 eval $setvar
11575 case "$d_vfork" in
11576 $define) usevfork='true';;
11577 *) usevfork='false';;
11578 esac
11579
11580 : see if this is an sysdir system
11581 set sys/dir.h i_sysdir
11582 eval $inhdr
11583
11584 : see if this is an sysndir system
11585 set sys/ndir.h i_sysndir
11586 eval $inhdr
11587
11588 : see if closedir exists
11589 set closedir d_closedir
11590 eval $inlibc
11591
11592 case "$d_closedir" in
11593 "$define")
11594         echo " "
11595         echo "Checking whether closedir() returns a status..." >&4
11596         cat > closedir.c <<EOM
11597 #$i_dirent I_DIRENT             /**/
11598 #$i_sysdir I_SYS_DIR            /**/
11599 #$i_sysndir I_SYS_NDIR          /**/
11600 #$i_systypes I_SYS_TYPES        /**/
11601
11602 #if defined(I_SYS_TYPES)
11603 #include <sys/types.h>
11604 #endif
11605 #if defined(I_DIRENT)
11606 #include <dirent.h>
11607 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11608 #include <sys/dir.h>
11609 #endif
11610 #else
11611 #ifdef I_SYS_NDIR
11612 #include <sys/ndir.h>
11613 #else
11614 #ifdef I_SYS_DIR
11615 #ifdef hp9000s500
11616 #include <ndir.h>       /* may be wrong in the future */
11617 #else
11618 #include <sys/dir.h>
11619 #endif
11620 #endif
11621 #endif
11622 #endif 
11623 int main() { return closedir(opendir(".")); }
11624 EOM
11625         set closedir
11626         if eval $compile_ok; then
11627                 if ./closedir > /dev/null 2>&1 ; then
11628                         echo "Yes, it does."
11629                         val="$undef"
11630                 else
11631                         echo "No, it doesn't."
11632                         val="$define"
11633                 fi
11634         else
11635                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11636                 val="$define"
11637         fi
11638         ;;
11639 *)
11640         val="$undef";
11641         ;;
11642 esac
11643 set d_void_closedir
11644 eval $setvar
11645 $rm -f closedir*
11646 : check for volatile keyword
11647 echo " "
11648 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11649 $cat >try.c <<'EOCP'
11650 int main()
11651 {
11652         typedef struct _goo_struct goo_struct;
11653         goo_struct * volatile goo = ((goo_struct *)0);
11654         struct _goo_struct {
11655                 long long_int;
11656                 int reg_int;
11657                 char char_var;
11658         };
11659         typedef unsigned short foo_t;
11660         char *volatile foo;
11661         volatile int bar;
11662         volatile foo_t blech;
11663         foo = foo;
11664 }
11665 EOCP
11666 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11667         val="$define"
11668         echo "Yup, it does."
11669 else
11670         val="$undef"
11671         echo "Nope, it doesn't."
11672 fi
11673 set d_volatile
11674 eval $setvar
11675 $rm -f try.*
11676
11677 : see if there is a wait4
11678 set wait4 d_wait4
11679 eval $inlibc
11680
11681 : see if waitpid exists
11682 set waitpid d_waitpid
11683 eval $inlibc
11684
11685 : see if wcstombs exists
11686 set wcstombs d_wcstombs
11687 eval $inlibc
11688
11689 : see if wctomb exists
11690 set wctomb d_wctomb
11691 eval $inlibc
11692
11693 : preserve RCS keywords in files with variable substitution, grrr
11694 Date='$Date'
11695 Id='$Id'
11696 Log='$Log'
11697 RCSfile='$RCSfile'
11698 Revision='$Revision'
11699
11700 case "$crosscompile" in
11701 ''|[nN]*) crosscompile="$undef" ;;
11702 esac
11703
11704 case "$osname" in
11705 next|rhapsody|darwin) multiarch="$define" ;;
11706 esac
11707 case "$multiarch" in
11708 ''|[nN]*) multiarch="$undef" ;;
11709 esac
11710
11711 : check for alignment requirements
11712 echo " "
11713 case "$crosscompile$multiarch" in
11714 *$define*)
11715         $cat <<EOM
11716 You seem to be either cross-compiling or doing a multiarchitecture build,
11717 skipping the memory alignment check.
11718
11719 EOM
11720         case "$alignbytes" in
11721         '') alignbytes=8 ;;
11722         esac
11723         ;;
11724 *)
11725         case "$alignbytes" in
11726         '') echo "Checking alignment constraints..." >&4
11727                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11728                         $cat >try.c <<'EOCP'
11729 typedef long double NV;
11730 EOCP
11731                 else
11732                         $cat >try.c <<'EOCP'
11733 typedef double NV;
11734 EOCP
11735                 fi
11736                 $cat >>try.c <<'EOCP'
11737 #include <stdio.h>
11738 struct foobar {
11739         char foo;
11740         NV bar;
11741 } try_algn;
11742 int main()
11743 {
11744     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11745     return(0);
11746 }
11747 EOCP
11748                 set try
11749                 if eval $compile_ok; then
11750                         dflt=`./try`
11751                 else
11752                         dflt='8'
11753                         echo "(I can't seem to compile the test program...)"
11754                 fi
11755                 ;;
11756         *) dflt="$alignbytes"
11757                 ;;
11758         esac
11759         rp="Doubles must be aligned on a how-many-byte boundary?"
11760         . ./myread
11761         alignbytes="$ans"
11762         $rm -f try.c try
11763         ;;
11764 esac
11765
11766
11767 : set the base revision
11768 baserev=5.0
11769
11770 : check for ordering of bytes in a long
11771 echo " "
11772 case "$crosscompile$multiarch" in
11773 *$define*)
11774         $cat <<EOM
11775 You seem to be either cross-compiling or doing a multiarchitecture build,
11776 skipping the byteorder check.
11777
11778 EOM
11779         byteorder='0xffff'
11780         ;;
11781 *)
11782         case "$byteorder" in
11783         '')
11784                 $cat <<'EOM'
11785 In the following, larger digits indicate more significance.  A big-endian
11786 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11787 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11788 machines may have weird orders like 3412.  A Cray will report 87654321,
11789 an Alpha will report 12345678. If the test program works the default is
11790 probably right.
11791 I'm now running the test program...
11792 EOM
11793                 $cat >try.c <<'EOCP'
11794 #include <stdio.h>
11795 int main()
11796 {
11797         int i;
11798         union {
11799                 unsigned long l;
11800                 char c[sizeof(long)];
11801         } u;
11802
11803         if (sizeof(long) > 4)
11804                 u.l = (0x08070605L << 32) | 0x04030201L;
11805         else
11806                 u.l = 0x04030201L;
11807         for (i = 0; i < sizeof(long); i++)
11808                 printf("%c", u.c[i]+'0');
11809         printf("\n");
11810         exit(0);
11811 }
11812 EOCP
11813                 xxx_prompt=y
11814                 set try
11815                 if eval $compile && ./try > /dev/null; then
11816                         dflt=`./try`
11817                         case "$dflt" in
11818                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11819                                 echo "(The test program ran ok.)"
11820                                 echo "byteorder=$dflt"
11821                                 xxx_prompt=n
11822                         ;;
11823                         ????|????????) echo "(The test program ran ok.)" ;;
11824                         *) echo "(The test program didn't run right for some reason.)" ;;
11825                         esac
11826                 else
11827                         dflt='4321'
11828                         cat <<'EOM'
11829 (I can't seem to compile the test program.  Guessing big-endian...)
11830 EOM
11831                 fi
11832                 case "$xxx_prompt" in
11833                 y)
11834                         rp="What is the order of bytes in a long?"
11835                         . ./myread
11836                         byteorder="$ans"
11837                         ;;
11838                 *)      byteorder=$dflt
11839                         ;;
11840                 esac
11841                 ;;
11842         esac
11843         $rm -f try.c try
11844         ;;
11845 esac
11846
11847
11848 : how do we catenate cpp tokens here?
11849 echo " "
11850 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11851 $cat >cpp_stuff.c <<'EOCP'
11852 #define RCAT(a,b)a/**/b
11853 #define ACAT(a,b)a ## b
11854 RCAT(Rei,ser)
11855 ACAT(Cir,cus)
11856 EOCP
11857 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11858 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11859         echo "Oh!  Smells like ANSI's been here." >&4
11860         echo "We can catify or stringify, separately or together!"
11861         cpp_stuff=42
11862 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11863         echo "Ah, yes!  The good old days!" >&4
11864         echo "However, in the good old days we don't know how to stringify and"
11865         echo "catify at the same time."
11866         cpp_stuff=1
11867 else
11868         $cat >&4 <<EOM
11869 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11870 to have to edit the values of CAT[2-5] in config.h...
11871 EOM
11872         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11873 fi
11874 $rm -f cpp_stuff.*
11875
11876 : see if this is a db.h system
11877 set db.h i_db
11878 eval $inhdr
11879
11880 case "$i_db" in
11881 $define)
11882         : Check db version.
11883         echo " "
11884         echo "Checking Berkeley DB version ..." >&4
11885         $cat >try.c <<EOCP
11886 #$d_const HASCONST
11887 #ifndef HASCONST
11888 #define const
11889 #endif
11890 #include <sys/types.h>
11891 #include <stdio.h>
11892 #include <db.h>
11893 int main()
11894 {
11895 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11896     int Major, Minor, Patch ;
11897     unsigned long Version ;
11898     (void)db_version(&Major, &Minor, &Patch) ;
11899     printf("You have Berkeley DB Version 2 or greater\n");
11900
11901     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11902                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11903     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11904                 Major, Minor, Patch) ;
11905
11906     /* check that db.h & libdb are compatible */
11907     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11908         printf("db.h and libdb are incompatible\n") ;
11909         exit(3);        
11910     }
11911
11912     printf("db.h and libdb are compatible\n") ;
11913
11914     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11915                 + DB_VERSION_PATCH ;
11916
11917     /* needs to be >= 2.3.4 */
11918     if (Version < 2003004) {
11919     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11920         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11921         exit(2);        
11922     }
11923
11924     exit(0);
11925 #else
11926 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11927     printf("You have Berkeley DB Version 1\n");
11928     exit(0);    /* DB version < 2: the coast is clear. */
11929 #else
11930     exit(1);    /* <db.h> not Berkeley DB? */
11931 #endif
11932 #endif
11933 }
11934 EOCP
11935         set try
11936         if eval $compile_ok && ./try; then
11937                 echo 'Looks OK.' >&4
11938         else
11939                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11940                 i_db=$undef
11941                 case " $libs " in
11942                 *"-ldb "*)
11943                         : Remove db from list of libraries to use
11944                         echo "Removing unusable -ldb from library list" >&4
11945                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11946                         shift
11947                         libs="$*"
11948                         echo "libs = $libs" >&4
11949                         ;;
11950                 esac
11951         fi
11952         $rm -f try.*
11953         ;;
11954 esac
11955
11956 case "$i_db" in
11957 define)
11958         : Check the return type needed for hash 
11959         echo " "
11960         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11961         $cat >try.c <<EOCP
11962 #$d_const HASCONST
11963 #ifndef HASCONST
11964 #define const
11965 #endif
11966 #include <sys/types.h>
11967 #include <db.h>
11968
11969 #ifndef DB_VERSION_MAJOR
11970 u_int32_t hash_cb (ptr, size)
11971 const void *ptr;
11972 size_t size;
11973 {
11974 }
11975 HASHINFO info;
11976 int main()
11977 {
11978         info.hash = hash_cb;
11979 }
11980 #endif
11981 EOCP
11982         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11983                 if $contains warning try.out >>/dev/null 2>&1 ; then
11984                         db_hashtype='int'
11985                 else
11986                         db_hashtype='u_int32_t'
11987                 fi
11988         else
11989                 : XXX Maybe we should just give up here.
11990                 db_hashtype=u_int32_t
11991                 $cat try.out >&4
11992                 echo "Help:  I can't seem to compile the db test program." >&4
11993                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11994         fi
11995         $rm -f try.*
11996         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11997         ;;
11998 *)      db_hashtype=u_int32_t
11999         ;;
12000 esac
12001 case "$i_db" in
12002 define)
12003         : Check the return type needed for prefix 
12004         echo " "
12005         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12006         cat >try.c <<EOCP
12007 #$d_const HASCONST
12008 #ifndef HASCONST
12009 #define const
12010 #endif
12011 #include <sys/types.h>
12012 #include <db.h>
12013
12014 #ifndef DB_VERSION_MAJOR
12015 size_t prefix_cb (key1, key2)
12016 const DBT *key1;
12017 const DBT *key2;
12018 {
12019 }
12020 BTREEINFO info;
12021 int main()
12022 {
12023         info.prefix = prefix_cb;
12024 }
12025 #endif
12026 EOCP
12027         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12028                 if $contains warning try.out >>/dev/null 2>&1 ; then
12029                         db_prefixtype='int'
12030                 else
12031                         db_prefixtype='size_t'
12032                 fi
12033         else
12034                 db_prefixtype='size_t'
12035                 : XXX Maybe we should just give up here.
12036                 $cat try.out >&4
12037                 echo "Help:  I can't seem to compile the db test program." >&4
12038                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12039         fi
12040         $rm -f try.*
12041         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12042         ;;
12043 *)      db_prefixtype='size_t'
12044         ;;
12045 esac
12046
12047 : check for void type
12048 echo " "
12049 echo "Checking to see how well your C compiler groks the void type..." >&4
12050 case "$voidflags" in
12051 '')
12052         $cat >try.c <<'EOCP'
12053 #if TRY & 1
12054 void sub() {
12055 #else
12056 sub() {
12057 #endif
12058         extern void moo();      /* function returning void */
12059         void (*goo)();          /* ptr to func returning void */
12060 #if TRY & 8
12061         void *hue;              /* generic ptr */
12062 #endif
12063 #if TRY & 2
12064         void (*foo[10])();
12065 #endif
12066
12067 #if TRY & 4
12068         if(goo == moo) {
12069                 exit(0);
12070         }
12071 #endif
12072         exit(0);
12073 }
12074 int main() { sub(); }
12075 EOCP
12076         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12077                 voidflags=$defvoidused
12078         echo "Good.  It appears to support void to the level $package wants.">&4
12079                 if $contains warning .out >/dev/null 2>&1; then
12080                         echo "However, you might get some warnings that look like this:"
12081                         $cat .out
12082                 fi
12083         else
12084 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12085                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12086                         echo "It supports 1..."
12087                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12088                                 echo "It also supports 2..."
12089                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12090                                         voidflags=7
12091                                         echo "And it supports 4 but not 8 definitely."
12092                                 else
12093                                         echo "It doesn't support 4..."
12094                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12095                                                 voidflags=11
12096                                                 echo "But it supports 8."
12097                                         else
12098                                                 voidflags=3
12099                                                 echo "Neither does it support 8."
12100                                         fi
12101                                 fi
12102                         else
12103                                 echo "It does not support 2..."
12104                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12105                                         voidflags=13
12106                                         echo "But it supports 4 and 8."
12107                                 else
12108                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12109                                                 voidflags=5
12110                                                 echo "And it supports 4 but has not heard about 8."
12111                                         else
12112                                                 echo "However it supports 8 but not 4."
12113                                         fi
12114                                 fi
12115                         fi
12116                 else
12117                         echo "There is no support at all for void."
12118                         voidflags=0
12119                 fi
12120         fi
12121 esac
12122 case "$voidflags" in
12123 "$defvoidused") ;;
12124 *)      $cat >&4 <<'EOM'
12125   Support flag bits are:
12126     1: basic void declarations.
12127     2: arrays of pointers to functions returning void.
12128     4: operations between pointers to and addresses of void functions.
12129     8: generic void pointers.
12130 EOM
12131         dflt="$voidflags";
12132         rp="Your void support flags add up to what?"
12133         . ./myread
12134         voidflags="$ans"
12135         ;;
12136 esac
12137 $rm -f try.* .out
12138
12139
12140 : How can we generate normalized random numbers ?
12141 echo " "
12142 echo "Looking for a random number function..." >&4
12143 case "$randfunc" in
12144 '')
12145         if set drand48 val -f; eval $csym; $val; then
12146                 dflt="drand48"
12147                 echo "Good, found drand48()." >&4
12148         elif set random val -f; eval $csym; $val; then
12149                 dflt="random"
12150                 echo "OK, found random()." >&4
12151         else
12152                 dflt="rand"
12153                 echo "Yick, looks like I have to use rand()." >&4
12154         fi
12155         echo " "
12156         ;;
12157 *)
12158         dflt="$randfunc"
12159         ;;
12160 esac
12161 cont=true
12162
12163 case "$ccflags" in
12164 *-Dmy_rand=*|*-Dmy_srand=*)
12165         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12166         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12167         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12168         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12169         ;;
12170 esac
12171
12172 while $test "$cont"; do
12173         rp="Use which function to generate random numbers?"
12174         . ./myread
12175         if $test "$ans" = "$dflt"; then
12176                 : null
12177         else
12178                 randbits=''
12179         fi
12180         randfunc="$ans"
12181         if set $ans val -f; eval $csym; $val; then
12182                 cont=''
12183         else
12184                 dflt=y
12185                 rp="I cannot find function $ans. Use that name anyway?"
12186                 . ./myread
12187                 dflt=rand
12188                 case "$ans" in
12189                         [yY]*) cont='';;
12190                 esac
12191         fi
12192         case "$cont" in
12193         '')
12194                 case "$randfunc" in
12195                 drand48)
12196                         drand01="drand48()"
12197                         seedfunc="srand48"
12198                         randbits=48
12199                         randseedtype=long
12200                         ;;
12201                 rand|random)
12202                         case "$randbits" in
12203                         '')
12204 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12205                                 $cat >try.c <<EOCP
12206 #$i_unistd I_UNISTD
12207 #$i_stdlib I_STDLIB
12208 #include <stdio.h>
12209 #ifdef I_UNISTD
12210 #  include <unistd.h>
12211 #endif
12212 #ifdef I_STDLIB
12213 #  include <stdlib.h>
12214 #endif
12215 int main()
12216 {
12217         register int i;
12218         register unsigned long tmp;
12219         register unsigned long max = 0L;
12220
12221         for (i = 1000; i; i--) {
12222                 tmp = (unsigned long) $randfunc();
12223                 if (tmp > max) max = tmp;
12224         }
12225         for (i = 0; max; i++)
12226                 max /= 2;
12227         printf("%d\n",i);
12228 }
12229 EOCP
12230                                 set try
12231                                 if eval $compile_ok; then
12232                                         dflt=`try`
12233                                 else
12234                                         dflt='?'
12235                                         echo "(I can't seem to compile the test program...)"
12236                                 fi
12237                                 ;;
12238                         *)
12239                                 dflt="$randbits"
12240                                 ;;
12241                         esac
12242                         rp="How many bits does your $randfunc() function produce?"
12243                         . ./myread
12244                         randbits="$ans"
12245                         $rm -f try.c try
12246                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12247                         seedfunc="s$randfunc"
12248                         randseedtype=unsigned
12249                         ;;
12250                 *)
12251                         dflt="31"
12252                         rp="How many bits does your $randfunc() function produce?"
12253                         . ./myread
12254                         randbits="$ans"
12255                         seedfunc="s$randfunc"
12256                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12257                         if set $seedfunc val -f; eval $csym; $val; then
12258                                 echo "(Using $seedfunc() to seed random generator)"
12259                         else
12260                                 echo "(Warning: no $seedfunc() to seed random generator)"
12261                                 seedfunc=rand
12262                         fi
12263                         randseedtype=unsigned
12264                         ;;
12265                 esac
12266                 ;;
12267         esac
12268 done
12269
12270 echo " "
12271 echo "Determining whether or not we are on an EBCDIC system..." >&4
12272 $cat >tebcdic.c <<'EOM'
12273 int main()
12274 {
12275   if ('M'==0xd4) return 0;
12276   return 1;
12277 }
12278 EOM
12279
12280 val=$undef
12281 set tebcdic
12282 if eval $compile_ok; then
12283         if ./tebcdic; then
12284                 echo "You have EBCDIC." >&4
12285                 val="$define"
12286         else
12287                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12288         fi
12289 else
12290         echo "I'm unable to compile the test program." >&4
12291         echo "I'll assume ASCII or some ISO Latin." >&4
12292 fi
12293 $rm -f tebcdic.c tebcdic
12294 set ebcdic
12295 eval $setvar
12296
12297 echo " "
12298 $cat >&4 <<EOM
12299 Checking how to flush all pending stdio output...
12300 EOM
12301 # I only know how to find the first 32 possibly open files on SunOS.
12302 # See also hints/sunos_4_1.sh and util.c  --AD
12303 case "$osname" in
12304 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12305 esac
12306 $cat >>try.c <<EOCP
12307 #include <stdio.h>
12308 #$i_unistd I_UNISTD
12309 #ifdef I_UNISTD
12310 # include <unistd.h>
12311 #endif
12312 #$d_sysconf HAS_SYSCONF
12313 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12314 #ifdef HAS_STDIO_STREAM_ARRAY
12315 # define STDIO_STREAM_ARRAY $stdio_stream_array
12316 #endif
12317 int main() {
12318   FILE* p = fopen("try.out", "w");
12319 #ifdef TRY_FPUTC
12320   fputc('x', p);
12321 #else
12322 # ifdef TRY_FPRINTF
12323   fprintf(p, "x");
12324 # endif
12325 #endif
12326 #ifdef TRY_FFLUSH_NULL
12327   fflush(NULL);
12328 #endif
12329 #ifdef TRY_FFLUSH_ALL
12330   {
12331     long open_max = -1;
12332 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12333     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12334 # else
12335 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12336     open_max = sysconf(_SC_OPEN_MAX);
12337 #  else
12338 #   ifdef FOPEN_MAX
12339     open_max = FOPEN_MAX;
12340 #   else
12341 #    ifdef OPEN_MAX
12342     open_max = OPEN_MAX;
12343 #    else
12344 #     ifdef _NFILE
12345     open_max = _NFILE;
12346 #     endif
12347 #    endif
12348 #   endif
12349 #  endif
12350 # endif 
12351 # ifdef HAS_STDIO_STREAM_ARRAY
12352     if (open_max > 0) {
12353       long i;
12354       for (i = 0; i < open_max; i++)
12355             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12356                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12357                 STDIO_STREAM_ARRAY[i]._flag)
12358                 fflush(&STDIO_STREAM_ARRAY[i]);
12359     }   
12360   }
12361 # endif
12362 #endif
12363   _exit(42);
12364 }
12365 EOCP
12366 : first we have to find out how _not_ to flush
12367 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12368     output=''
12369     set try -DTRY_FPUTC
12370     if eval $compile; then
12371             $rm -f try.out
12372             ./try$exe_ext 2>/dev/null
12373             if $test ! -s try.out -a "X$?" = X42; then
12374                 output=-DTRY_FPUTC
12375             fi
12376     fi
12377     case "$output" in
12378     '')
12379             set try -DTRY_FPRINTF
12380             $rm -f try.out
12381             if eval $compile; then
12382                     $rm -f try.out
12383                     ./try$exe_ext 2>/dev/null
12384                     if $test ! -s try.out -a "X$?" = X42; then
12385                         output=-DTRY_FPRINTF
12386                     fi
12387             fi
12388         ;;
12389     esac
12390 fi
12391 : check for fflush NULL behaviour
12392 case "$fflushNULL" in
12393 '')     set try -DTRY_FFLUSH_NULL $output
12394         if eval $compile; then
12395                 $rm -f try.out
12396                 ./try$exe_ext 2>/dev/null
12397                 code="$?"
12398                 if $test -s try.out -a "X$code" = X42; then
12399                         fflushNULL="`$cat try.out`"
12400                 else
12401                         if $test "X$code" != X42; then
12402                                 $cat >&4 <<EOM
12403 (If this test failed, don't worry, we'll try another method shortly.)
12404 EOM
12405                         fi
12406                 fi
12407         fi
12408         $rm -f core try.core core.try.*
12409         case "$fflushNULL" in
12410         x)      $cat >&4 <<EOM
12411 Your fflush(NULL) works okay.
12412 EOM
12413                 fflushNULL="$define"
12414                 ;;
12415         '')     $cat >&4 <<EOM
12416 Your fflush(NULL) isn't working (contrary to ANSI C).
12417 EOM
12418                 fflushNULL="$undef"
12419                 ;;
12420         *)      $cat >&4 <<EOM
12421 Cannot figure out whether your fflush(NULL) works or not.
12422 I'm assuming it doesn't (contrary to ANSI C).
12423 EOM
12424                 fflushNULL="$undef"
12425                 ;;
12426         esac
12427         ;;
12428 $define|true|[yY]*)
12429         fflushNULL="$define"
12430         ;;
12431 *)
12432         fflushNULL="$undef"
12433         ;;
12434 esac
12435 : check explicit looping only if NULL did not work
12436 case "$fflushNULL" in
12437 "$undef")
12438         : check for fflush all behaviour
12439         case "$fflushall" in
12440         '')     set try -DTRY_FFLUSH_ALL $output
12441                 if eval $compile; then
12442                         $cat >&4 <<EOM
12443 (Now testing the other method--but note that also this may fail.)
12444 EOM
12445                         $rm -f try.out
12446                         ./try$exe_ext 2>/dev/null
12447                         if $test -s try.out -a "X$?" = X42; then
12448                                 fflushall="`$cat try.out`"
12449                         fi
12450                 fi
12451                 $rm -f core try.core core.try.*
12452                 case "$fflushall" in
12453                 x)      $cat >&4 <<EOM
12454 Whew. Flushing explicitly all the stdio streams works.
12455 EOM
12456                         fflushall="$define"
12457                         ;;
12458                 '')     $cat >&4 <<EOM
12459 Sigh. Flushing explicitly all the stdio streams doesn't work.
12460 EOM
12461                         fflushall="$undef"
12462                         ;;
12463                 *)      $cat >&4 <<EOM
12464 Cannot figure out whether flushing stdio streams explicitly works or not.
12465 I'm assuming it doesn't.
12466 EOM
12467                         fflushall="$undef"
12468                         ;;
12469                 esac
12470                 ;;
12471         "$define"|true|[yY]*)
12472                 fflushall="$define"
12473                 ;;
12474         *)
12475                 fflushall="$undef"
12476                 ;;
12477         esac
12478         ;;
12479 *)      fflushall="$undef"      
12480         ;;
12481 esac
12482 case "$fflushNULL$fflushall" in
12483 undefundef)
12484         $cat <<EOM
12485 I cannot figure out how to flush pending stdio output.
12486 EOM
12487         ;;
12488 esac
12489 $rm -f try.* try$exe_ext
12490
12491 : Store the full pathname to the ar program for use in the C program
12492 : Respect a hint or command line value for full_ar.
12493 case "$full_ar" in
12494 '') full_ar=$ar ;;
12495 esac
12496
12497 : Store the full pathname to the sed program for use in the C program
12498 full_sed=$sed
12499
12500 : see what type gids are declared as in the kernel
12501 echo " "
12502 echo "Looking for the type for group ids returned by getgid()."
12503 set gid_t gidtype xxx stdio.h sys/types.h
12504 eval $typedef
12505 case "$gidtype" in
12506 xxx)
12507         xxx=`./findhdr sys/user.h`
12508         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12509         case $1 in
12510         unsigned) dflt="$1 $2" ;;
12511         *) dflt="$1" ;;
12512         esac
12513         ;;
12514 *) dflt="$gidtype";;
12515 esac
12516 case "$gidtype" in
12517 gid_t) echo "gid_t found." ;;
12518 *)      rp="What is the type for group ids returned by getgid()?"
12519         . ./myread
12520         gidtype="$ans"
12521         ;;
12522 esac
12523
12524 echo " "
12525 case "$gidtype" in
12526 *_t) zzz="$gidtype"     ;;
12527 *)   zzz="gid"          ;;
12528 esac
12529 echo "Checking the size of $zzz..." >&4 
12530 cat > try.c <<EOCP
12531 #include <sys/types.h>
12532 #include <stdio.h>
12533 int main() {
12534     printf("%d\n", (int)sizeof($gidtype));
12535     exit(0);
12536 }
12537 EOCP
12538 set try
12539 if eval $compile_ok; then
12540         yyy=`./try`
12541         case "$yyy" in
12542         '')     gidsize=4
12543                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12544                 ;;
12545         *)      gidsize=$yyy
12546                 echo "Your $zzz is $gidsize bytes long."
12547                 ;;
12548         esac
12549 else
12550         gidsize=4
12551         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12552 fi
12553
12554
12555 echo " "
12556 case "$gidtype" in
12557 *_t) zzz="$gidtype"     ;;
12558 *)   zzz="gid"          ;;
12559 esac
12560 echo "Checking the sign of $zzz..." >&4 
12561 cat > try.c <<EOCP
12562 #include <sys/types.h>
12563 #include <stdio.h>
12564 int main() {
12565         $gidtype foo = -1;
12566         if (foo < 0)
12567                 printf("-1\n");
12568         else
12569                 printf("1\n");
12570 }
12571 EOCP
12572 set try
12573 if eval $compile; then
12574         yyy=`./try`
12575         case "$yyy" in
12576         '')     gidsign=1
12577                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12578                 ;;
12579         *)      gidsign=$yyy
12580                 case "$gidsign" in
12581                  1) echo "Your $zzz is unsigned." ;;
12582                 -1) echo "Your $zzz is signed."   ;;
12583                 esac
12584                 ;;
12585         esac
12586 else
12587         gidsign=1
12588         echo "(I can't compile the test program--guessing unsigned.)" >&4
12589 fi
12590
12591
12592 echo " "
12593
12594 if $test X"$quadtype" != X; then
12595
12596 echo "Checking how to print 64-bit integers..." >&4
12597
12598 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12599         $cat >try.c <<'EOCP'
12600 #include <sys/types.h>
12601 #include <stdio.h>
12602 int main() {
12603   int q = 12345678901;
12604   printf("%ld\n", q);
12605 }
12606 EOCP
12607         set try
12608         if eval $compile; then
12609                 yyy=`./try$exe_ext`
12610                 case "$yyy" in
12611                 12345678901)
12612                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12613                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12614                         echo "We will use %d."
12615                         ;;
12616                 esac
12617         fi
12618 fi
12619
12620 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12621         $cat >try.c <<'EOCP'
12622 #include <sys/types.h>
12623 #include <stdio.h>
12624 int main() {
12625   long q = 12345678901;
12626   printf("%ld\n", q);
12627 }
12628 EOCP
12629         set try
12630         if eval $compile; then
12631                 yyy=`./try$exe_ext`
12632                 case "$yyy" in
12633                 12345678901)
12634                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12635                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12636                         echo "We will use %ld."
12637                         ;;
12638                 esac
12639         fi
12640 fi
12641
12642 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12643         $cat >try.c <<'EOCP'
12644 #include <sys/types.h>
12645 #include <inttypes.h>
12646 #include <stdio.h>
12647 int main() {
12648   int64_t q = 12345678901;
12649   printf("%" PRId64 "\n", q);
12650 }
12651 EOCP
12652         set try
12653         if eval $compile; then
12654                 yyy=`./try$exe_ext`
12655                 case "$yyy" in
12656                 12345678901)
12657                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12658                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12659                         echo "We will use the C9X style."
12660                         ;;
12661                 esac
12662         fi
12663 fi
12664
12665 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12666         $cat >try.c <<'EOCP'
12667 #include <sys/types.h>
12668 #include <stdio.h>
12669 int main() {
12670   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12671   printf("%lld\n", q);
12672 }
12673 EOCP
12674         set try
12675         if eval $compile; then
12676                 yyy=`./try$exe_ext`
12677                 case "$yyy" in
12678                 12345678901)
12679                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12680                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12681                         echo "We will use the %lld style."
12682                         ;;
12683                 esac
12684         fi
12685 fi
12686
12687 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12688         $cat >try.c <<EOCP
12689 #include <sys/types.h>
12690 #include <stdio.h>
12691 int main() {
12692   $quadtype q = 12345678901;
12693   printf("%Ld\n", q);
12694 }
12695 EOCP
12696         set try
12697         if eval $compile; then
12698                 yyy=`./try$exe_ext`
12699                 case "$yyy" in
12700                 12345678901)
12701                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12702                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12703                         echo "We will use %Ld."
12704                         ;;
12705                 esac
12706         fi
12707 fi
12708
12709 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12710         $cat >try.c <<EOCP
12711 #include <sys/types.h>
12712 #include <stdio.h>
12713 int main() {
12714   $quadtype q = 12345678901;
12715   printf("%qd\n", q);
12716 }
12717 EOCP
12718         set try
12719         if eval $compile; then
12720                 yyy=`./try$exe_ext`
12721                 case "$yyy" in
12722                 12345678901)
12723                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12724                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12725                         echo "We will use %qd."
12726                         ;;
12727                 esac
12728         fi
12729 fi
12730
12731 if $test X"$sPRId64" = X; then
12732         echo "Cannot figure out how to print 64-bit integers." >&4
12733 fi
12734
12735 $rm -f try try.*
12736
12737 fi
12738
12739 case "$sPRId64" in
12740 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12741         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12742         ;;
12743 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12744         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12745         ;;
12746 esac
12747
12748
12749 echo " "
12750 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12751
12752 if $test X"$ivsize" = X8; then
12753         ivdformat="$sPRId64"
12754         uvuformat="$sPRIu64"
12755         uvoformat="$sPRIo64"
12756         uvxformat="$sPRIx64"
12757 else
12758         if $test X"$ivsize" = X"$longsize"; then
12759                 ivdformat='"ld"'
12760                 uvuformat='"lu"'
12761                 uvoformat='"lo"'
12762                 uvxformat='"lx"'
12763         else
12764                 if $test X"$ivsize" = X"$intsize"; then
12765                         ivdformat='"d"'
12766                         uvuformat='"u"'
12767                         uvoformat='"o"'
12768                         uvxformat='"x"'
12769                 else
12770                         : far out
12771                         if $test X"$ivsize" = X"$shortsize"; then
12772                                 ivdformat='"hd"'
12773                                 uvuformat='"hu"'
12774                                 uvoformat='"ho"'
12775                                 uvxformat='"hx"'
12776                         fi
12777                 fi
12778         fi
12779 fi
12780
12781 case "$ivdformat" in
12782 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12783     exit 1
12784     ;;
12785 esac
12786
12787
12788 echo " "
12789 $echo "Checking the format string to be used for gids..." >&4
12790
12791 case "$gidsign" in
12792 -1)     if $test X"$gidsize" = X"$ivsize"; then
12793                 gidformat="$ivdformat"
12794         else
12795                 if $test X"$gidsize" = X"$longsize"; then
12796                         gidformat='"ld"'
12797                 else
12798                         if $test X"$gidsize" = X"$intsize"; then
12799                                 gidformat='"d"'
12800                         else
12801                                 if $test X"$gidsize" = X"$shortsize"; then
12802                                         gidformat='"hd"'
12803                                 fi
12804                         fi
12805                 fi
12806         fi
12807         ;;
12808 *)      if $test X"$gidsize" = X"$uvsize"; then
12809                 gidformat="$uvuformat"
12810         else
12811                 if $test X"$gidsize" = X"$longsize"; then
12812                         gidformat='"lu"'
12813                 else
12814                         if $test X"$gidsize" = X"$intsize"; then
12815                                 gidformat='"u"'
12816                         else
12817                                 if $test X"$gidsize" = X"$shortsize"; then
12818                                         gidformat='"hu"'
12819                                 fi
12820                         fi
12821                 fi
12822         fi
12823         ;;
12824 esac
12825
12826 : see if getgroups exists
12827 set getgroups d_getgrps
12828 eval $inlibc
12829
12830 : see if setgroups exists
12831 set setgroups d_setgrps
12832 eval $inlibc
12833
12834
12835 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12836 echo " "
12837 case "$d_getgrps$d_setgrps" in
12838 *define*)
12839         case "$groupstype" in
12840         '') dflt="$gidtype" ;;
12841         *)  dflt="$groupstype" ;;
12842         esac
12843         $cat <<EOM
12844 What type of pointer is the second argument to getgroups() and setgroups()?
12845 Usually this is the same as group ids, $gidtype, but not always.
12846
12847 EOM
12848         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12849         . ./myread
12850         groupstype="$ans"
12851         ;;
12852 *)  groupstype="$gidtype";;
12853 esac
12854
12855 echo " "
12856 echo "Checking if your $make program sets \$(MAKE)..." >&4
12857 case "$make_set_make" in
12858 '')
12859         $sed 's/^X //' > testmake.mak << 'EOF'
12860 Xall:
12861 X       @echo 'maketemp="$(MAKE)"'
12862 EOF
12863         case "`$make -f testmake.mak 2>/dev/null`" in
12864         *maketemp=*) make_set_make='#' ;;
12865         *)      make_set_make="MAKE=$make" ;;
12866         esac
12867         $rm -f testmake.mak
12868         ;;
12869 esac
12870 case "$make_set_make" in
12871 '#') echo "Yup, it does.";;
12872 *) echo "Nope, it doesn't.";;
12873 esac
12874
12875 : see what type is used for mode_t
12876 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12877 set mode_t modetype int stdio.h sys/types.h
12878 eval $typedef_ask
12879
12880 : define a fucntion to check prototypes
12881 $cat > protochk <<EOSH
12882 $startsh
12883 cc="$cc"
12884 optimize="$optimize"
12885 ccflags="$ccflags"
12886 prototype="$prototype"
12887 define="$define"
12888 rm=$rm
12889 EOSH
12890
12891 $cat >> protochk <<'EOSH'
12892
12893 $rm -f try.c
12894 foo="$1"
12895 shift
12896 while test $# -ge 2; do
12897         case "$1" in
12898                 $define) echo "#include <$2>" >> try.c ;;
12899                 literal) echo "$2" >> try.c ;;
12900         esac
12901     shift 2
12902 done
12903 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12904 cat >> try.c <<'EOCP'
12905 #ifdef CAN_PROTOTYPE
12906 #define _(args) args
12907 #else
12908 #define _(args) ()
12909 #endif
12910 EOCP
12911 echo "$foo" >> try.c
12912 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12913 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12914 status=$?
12915 $rm -f try.[co]
12916 exit $status
12917 EOSH
12918 chmod +x protochk
12919 $eunicefix protochk
12920
12921 : see what type is used for size_t
12922 rp="What is the type used for the length parameter for string functions?"
12923 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12924 eval $typedef_ask
12925
12926 : check for type of arguments to gethostbyaddr. 
12927 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12928         case "$d_gethbyaddr" in
12929         $define)
12930                 $cat <<EOM
12931
12932 Checking to see what type of arguments are accepted by gethostbyaddr().
12933 EOM
12934                 hdrs="$define sys/types.h
12935                         $d_socket sys/socket.h 
12936                         $i_niin netinet/in.h 
12937                         $i_netdb netdb.h
12938                         $i_unistd unistd.h"
12939                 : The first arg can 'char *' or 'void *'
12940                 : The second arg is some of integral type
12941                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12942                         for yyy in size_t long int; do
12943                                 case "$netdb_host_type" in
12944                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12945                                         if ./protochk "$try" $hdrs; then
12946                                                 echo "Your system accepts $xxx for the first arg."
12947                                                 echo "...and $yyy for the second arg."
12948                                                 netdb_host_type="$xxx"
12949                                                 netdb_hlen_type="$yyy"
12950                                         fi
12951                                         ;;
12952                                 esac
12953                         done
12954                 done
12955                 : In case none of those worked, prompt the user.
12956                 case "$netdb_host_type" in
12957                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12958                         dflt='char *'
12959                         . ./myread
12960                         netdb_host_type=$ans
12961                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12962                         dflt="$sizetype"
12963                         . ./myread
12964                         netdb_hlen_type=$ans
12965                         ;;
12966                 esac
12967                 ;;
12968         *)      : no gethostbyaddr, so pick harmless defaults
12969                 netdb_host_type='char *'
12970                 netdb_hlen_type="$sizetype"
12971                 ;;
12972         esac
12973         # Remove the "const" if needed. -- but then we'll have a 
12974         # prototype clash!
12975         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12976 fi
12977
12978 : check for type of argument to gethostbyname. 
12979 if test "X$netdb_name_type" = X ; then
12980         case "$d_gethbyname" in
12981         $define)
12982                 $cat <<EOM
12983
12984 Checking to see what type of argument is accepted by gethostbyname().
12985 EOM
12986                 hdrs="$define sys/types.h
12987                         $d_socket sys/socket.h 
12988                         $i_niin netinet/in.h 
12989                         $i_netdb netdb.h
12990                         $i_unistd unistd.h"
12991                 for xxx in "const char *" "char *"; do
12992                         case "$netdb_name_type" in
12993                         '')     try="extern struct hostent *gethostbyname($xxx);"
12994                                 if ./protochk "$try" $hdrs; then
12995                                         echo "Your system accepts $xxx."
12996                                         netdb_name_type="$xxx"
12997                                 fi
12998                                 ;;
12999                         esac
13000                 done
13001                 : In case none of those worked, prompt the user.
13002                 case "$netdb_name_type" in
13003                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13004                         dflt='char *'
13005                         . ./myread
13006                         netdb_name_type=$ans
13007                         ;;
13008                 esac
13009                 ;;
13010         *)      : no gethostbyname, so pick harmless default
13011                 netdb_name_type='char *'
13012                 ;;
13013         esac
13014 fi
13015
13016 : check for type of 1st argument to getnetbyaddr. 
13017 if test "X$netdb_net_type" = X ; then
13018         case "$d_getnbyaddr" in
13019         $define)
13020                 $cat <<EOM
13021
13022 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13023 EOM
13024                 hdrs="$define sys/types.h
13025                         $d_socket sys/socket.h 
13026                         $i_niin netinet/in.h 
13027                         $i_netdb netdb.h
13028                         $i_unistd unistd.h"
13029                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13030                         case "$netdb_net_type" in
13031                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13032                                 if ./protochk "$try" $hdrs; then
13033                                         echo "Your system accepts $xxx."
13034                                         netdb_net_type="$xxx"
13035                                 fi
13036                                 ;;
13037                         esac
13038                 done
13039                 : In case none of those worked, prompt the user.
13040                 case "$netdb_net_type" in
13041                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13042                         dflt='long'
13043                         . ./myread
13044                         netdb_net_type=$ans
13045                         ;;
13046                 esac
13047                 ;;
13048         *)      : no getnetbyaddr, so pick harmless default
13049                 netdb_net_type='long'
13050                 ;;
13051         esac
13052 fi
13053 : locate the preferred pager for this system
13054 case "$pager" in
13055 '')
13056         dflt=''
13057         case "$pg" in
13058         /*) dflt=$pg;;
13059         esac
13060         case "$more" in
13061         /*) dflt=$more;;
13062         esac
13063         case "$less" in
13064         /*) dflt=$less;;
13065         esac
13066         case "$dflt" in
13067         '') dflt=/usr/ucb/more;;
13068         esac
13069         ;;
13070 *) dflt="$pager";;
13071 esac
13072 echo " "
13073 fn=f/
13074 rp='What pager is used on your system?'
13075 . ./getfile
13076 pager="$ans"
13077
13078 : see what type pids are declared as in the kernel
13079 rp="What is the type of process ids on this system?"
13080 set pid_t pidtype int stdio.h sys/types.h
13081 eval $typedef_ask
13082
13083 : Find earliest binary compatible site_perl subdirectory perl can use.
13084 case "$bincompat5005" in
13085 "$define") xs_apiversion='5.005' ;;
13086 *) xs_apiversion=$version ;;   # The current site_perl version.
13087 esac
13088 : Find earliest pure perl site_perl subdirectory perl can use.
13089 : The versioned directories started at 5.005.
13090 pm_apiversion='5.005'
13091
13092 : check for length of pointer
13093 echo " "
13094 case "$ptrsize" in
13095 '')
13096         echo "Checking to see how big your pointers are..." >&4
13097         if test "$voidflags" -gt 7; then
13098                 echo '#define VOID_PTR char *' > try.c
13099         else
13100                 echo '#define VOID_PTR void *' > try.c
13101         fi
13102         $cat >>try.c <<'EOCP'
13103 #include <stdio.h>
13104 int main()
13105 {
13106     printf("%d\n", (int)sizeof(VOID_PTR));
13107     exit(0);
13108 }
13109 EOCP
13110         set try
13111         if eval $compile_ok; then
13112                 ptrsize=`./try`
13113                 echo "Your pointers are $ptrsize bytes long."
13114         else
13115                 dflt='4'
13116                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13117                 rp="What is the size of a pointer (in bytes)?"
13118                 . ./myread
13119                 ptrsize="$ans"
13120         fi
13121         ;;
13122 esac
13123 $rm -f try.c try
13124
13125 : see if ar generates random libraries by itself
13126 echo " "
13127 echo "Checking how to generate random libraries on your machine..." >&4
13128 echo 'int bar1() { return bar2(); }' > bar1.c
13129 echo 'int bar2() { return 2; }' > bar2.c
13130 $cat > foo.c <<'EOP'
13131 int main() { printf("%d\n", bar1()); exit(0); }
13132 EOP
13133 $cc $ccflags -c bar1.c >/dev/null 2>&1
13134 $cc $ccflags -c bar2.c >/dev/null 2>&1
13135 $cc $ccflags -c foo.c >/dev/null 2>&1
13136 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13137 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13138         ./foobar >/dev/null 2>&1; then
13139         echo "$ar appears to generate random libraries itself."
13140         orderlib=false
13141         ranlib=":"
13142 elif $ar ts bar$_a >/dev/null 2>&1 &&
13143         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13144         ./foobar >/dev/null 2>&1; then
13145                 echo "a table of contents needs to be added with '$ar ts'."
13146                 orderlib=false
13147                 ranlib="$ar ts"
13148 else
13149         case "$ranlib" in
13150         :) ranlib='';;
13151         '')
13152                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13153                 $test -f $ranlib || ranlib=''
13154                 ;;
13155         esac
13156         if $test -n "$ranlib"; then
13157                 echo "your system has '$ranlib'; we'll use that."
13158                 orderlib=false
13159         else
13160                 echo "your system doesn't seem to support random libraries"
13161                 echo "so we'll use lorder and tsort to order the libraries."
13162                 orderlib=true
13163                 ranlib=":"
13164         fi
13165 fi
13166 $rm -f foo* bar* 
13167
13168 : check for type of arguments to select. 
13169 case "$selecttype" in
13170 '') case "$d_select" in
13171         $define)
13172                 echo " "
13173                 $cat <<EOM
13174 Checking to see what type of arguments are accepted by select().
13175 EOM
13176                 hdrs="$define sys/types.h
13177                         $i_systime sys/time.h 
13178                         $i_sysselct sys/select.h
13179                         $d_socket sys/socket.h"
13180                 : The first arg can be int, unsigned, or size_t
13181                 : The last arg may or may not be 'const'
13182                 val=''
13183                 : void pointer has been seen but using that
13184                 : breaks the selectminbits test
13185                 for xxx in 'fd_set *' 'int *'; do
13186                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13187                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13188                                         case "$val" in
13189                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13190                                                 if ./protochk "$try" $hdrs; then
13191                                                         echo "Your system accepts $xxx."
13192                                                         val="$xxx"
13193                                                 fi
13194                                                 ;;
13195                                         esac
13196                                 done
13197                         done
13198                 done
13199                 case "$val" in
13200                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13201                         case "$d_fd_set" in
13202                                 $define) dflt="fd_set *" ;;
13203                                 *)              dflt="int *" ;;
13204                         esac
13205                         . ./myread
13206                         val=$ans
13207                         ;;
13208                 esac
13209                 selecttype="$val"
13210                 ;;
13211         *)      : no select, so pick a harmless default
13212                 selecttype='int *'
13213                 ;;
13214         esac
13215         ;;
13216 esac
13217
13218 : check for the select 'width'
13219 case "$selectminbits" in
13220 '') case "$d_select" in
13221         $define)
13222                 $cat <<EOM
13223
13224 Checking to see on how many bits at a time your select() operates...
13225 EOM
13226                 $cat >try.c <<EOCP
13227 #include <sys/types.h>
13228 #$i_time I_TIME
13229 #$i_systime I_SYS_TIME
13230 #$i_systimek I_SYS_TIME_KERNEL
13231 #ifdef I_TIME
13232 #   include <time.h>
13233 #endif
13234 #ifdef I_SYS_TIME
13235 #   ifdef I_SYS_TIME_KERNEL
13236 #       define KERNEL
13237 #   endif
13238 #   include <sys/time.h>
13239 #   ifdef I_SYS_TIME_KERNEL
13240 #       undef KERNEL
13241 #   endif
13242 #endif
13243 #$i_sysselct I_SYS_SELECT
13244 #ifdef I_SYS_SELECT
13245 #include <sys/select.h>
13246 #endif
13247 #$d_socket HAS_SOCKET
13248 #ifdef HAS_SOCKET
13249 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13250 #endif
13251 #include <stdio.h>
13252 $selecttype b;
13253 #define S sizeof(*(b))
13254 #define MINBITS 64
13255 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13256 #define NBITS  (NBYTES * 8)
13257 int main() {
13258     char s[NBYTES];
13259     struct timeval t;
13260     int i;
13261     FILE* fp;
13262     int fd;
13263
13264     fclose(stdin);
13265     fp = fopen("try.c", "r");
13266     if (fp == 0)
13267       exit(1);
13268     fd = fileno(fp);
13269     if (fd < 0)
13270       exit(2);
13271     b = ($selecttype)s;
13272     for (i = 0; i < NBITS; i++)
13273         FD_SET(i, b);
13274     t.tv_sec  = 0;
13275     t.tv_usec = 0;
13276     select(fd + 1, b, 0, 0, &t);
13277     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13278     printf("%d\n", i + 1);
13279     return 0;
13280 }
13281 EOCP
13282                 set try
13283                 if eval $compile_ok; then
13284                         selectminbits=`./try`
13285                         case "$selectminbits" in
13286                         '')     cat >&4 <<EOM
13287 Cannot figure out on how many bits at a time your select() operates.
13288 I'll play safe and guess it is 32 bits.
13289 EOM
13290                                 selectminbits=32
13291                                 bits="32 bits"
13292                                 ;;
13293                         1)      bits="1 bit" ;;
13294                         *)      bits="$selectminbits bits" ;;
13295                         esac
13296                         echo "Your select() operates on $bits at a time." >&4
13297                 else
13298                         rp='What is the minimum number of bits your select() operates on?'
13299                         case "$byteorder" in
13300                         1234|12345678)  dflt=32 ;;
13301                         *)              dflt=1  ;;
13302                         esac
13303                         . ./myread
13304                         val=$ans
13305                         selectminbits="$val"
13306                 fi
13307                 $rm -f try.* try
13308                 ;;
13309         *)      : no select, so pick a harmless default
13310                 selectminbits='32'
13311                 ;;
13312         esac
13313         ;;
13314 esac
13315
13316 : Trace out the files included by signal.h, then look for SIGxxx names.
13317 : Remove SIGARRAYSIZE used by HPUX.
13318 : Remove SIGSTKSIZE used by Linux.
13319 : Remove SIGSTKSZ used by Posix.
13320 : Remove SIGTYP void lines used by OS2.
13321 : Some cpps, like os390, dont give the file name anywhere
13322 if [ "X$fieldn" = X ]; then
13323         : Just make some guesses.  We check them later.
13324         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13325 else
13326         xxx=`echo '#include <signal.h>' |
13327         $cppstdin $cppminus $cppflags 2>/dev/null |
13328         $grep '^[       ]*#.*include' | 
13329         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13330 fi
13331 : Check this list of files to be sure we have parsed the cpp output ok.
13332 : This will also avoid potentially non-existent files, such 
13333 : as ../foo/bar.h
13334 xxxfiles=''
13335 for xx in $xxx /dev/null ; do
13336         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13337 done
13338 : If we have found no files, at least try signal.h
13339 case "$xxxfiles" in
13340 '')     xxxfiles=`./findhdr signal.h` ;;
13341 esac
13342 xxx=`awk '
13343 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13344         print substr($2, 4, 20)
13345 }
13346 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13347         print substr($3, 4, 20)
13348 }' $xxxfiles`
13349 : Append some common names just in case the awk scan failed.
13350 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13351 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13352 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13353 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13354 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13355
13356 : generate a few handy files for later
13357 $cat > signal.c <<'EOCP'
13358 #include <sys/types.h>
13359 #include <signal.h>
13360 #include <stdio.h>
13361 int main() {
13362
13363 /* Strange style to avoid deeply-nested #if/#else/#endif */
13364 #ifndef NSIG
13365 #  ifdef _NSIG
13366 #    define NSIG (_NSIG)
13367 #  endif
13368 #endif
13369
13370 #ifndef NSIG
13371 #  ifdef SIGMAX
13372 #    define NSIG (SIGMAX+1)
13373 #  endif
13374 #endif
13375
13376 #ifndef NSIG
13377 #  ifdef SIG_MAX
13378 #    define NSIG (SIG_MAX+1)
13379 #  endif
13380 #endif
13381
13382 #ifndef NSIG
13383 #  ifdef MAXSIG
13384 #    define NSIG (MAXSIG+1)
13385 #  endif
13386 #endif
13387
13388 #ifndef NSIG
13389 #  ifdef MAX_SIG
13390 #    define NSIG (MAX_SIG+1)
13391 #  endif
13392 #endif
13393
13394 #ifndef NSIG
13395 #  ifdef SIGARRAYSIZE
13396 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13397 #  endif
13398 #endif
13399
13400 #ifndef NSIG
13401 #  ifdef _sys_nsig
13402 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13403 #  endif
13404 #endif
13405
13406 /* Default to some arbitrary number that's big enough to get most
13407    of the common signals.
13408 */
13409 #ifndef NSIG
13410 #    define NSIG 50
13411 #endif
13412
13413 printf("NSIG %d\n", NSIG);
13414
13415 #ifndef JUST_NSIG
13416
13417 EOCP
13418
13419 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13420 {
13421         printf "#ifdef SIG"; printf $1; printf "\n"
13422         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13423         printf $1; printf ");\n"
13424         printf "#endif\n"
13425 }
13426 END {
13427         printf "#endif /* JUST_NSIG */\n";
13428         printf "exit(0);\n}\n";
13429 }
13430 ' >>signal.c
13431 $cat >signal.awk <<'EOP'
13432 BEGIN { ndups = 0 }
13433 $1 ~ /^NSIG$/ { nsig = $2 }
13434 ($1 !~ /^NSIG$/) && (NF == 2) {
13435     if ($2 > maxsig) { maxsig = $2 }
13436     if (sig_name[$2]) {
13437         dup_name[ndups] = $1
13438         dup_num[ndups] = $2
13439         ndups++ 
13440     }
13441     else {
13442         sig_name[$2] = $1
13443         sig_num[$2] = $2
13444     }
13445 }
13446 END { 
13447     if (nsig == 0) {
13448         nsig = maxsig + 1
13449     }
13450     printf("NSIG %d\n", nsig);
13451     for (n = 1; n < nsig; n++) {
13452         if (sig_name[n]) {
13453             printf("%s %d\n", sig_name[n], sig_num[n])
13454         }
13455         else {
13456             printf("NUM%d %d\n", n, n) 
13457         }
13458     }
13459     for (n = 0; n < ndups; n++) {
13460         printf("%s %d\n", dup_name[n], dup_num[n])
13461     }
13462 }
13463 EOP
13464 $cat >signal_cmd <<EOS
13465 $startsh
13466 if $test -s signal.lst; then
13467     echo "Using your existing signal.lst file"
13468         exit 0
13469 fi
13470 xxx="$xxx"
13471 EOS
13472 $cat >>signal_cmd <<'EOS'
13473
13474 set signal
13475 if eval $compile_ok; then
13476         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13477 else
13478         echo "(I can't seem be able to compile the whole test program)" >&4
13479         echo "(I'll try it in little pieces.)" >&4
13480         set signal -DJUST_NSIG
13481         if eval $compile_ok; then
13482                 ./signal$_exe > signal.nsg
13483                 $cat signal.nsg
13484         else
13485                 echo "I can't seem to figure out how many signals you have." >&4
13486                 echo "Guessing 50." >&4
13487                 echo 'NSIG 50' > signal.nsg
13488         fi
13489         : Now look at all the signal names, one at a time.
13490         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13491                 $cat > signal.c <<EOCP
13492 #include <sys/types.h>
13493 #include <signal.h>
13494 #include <stdio.h>
13495 int main() {
13496 printf("$xx %d\n", SIG${xx});
13497 return 0;
13498 }
13499 EOCP
13500                 set signal
13501                 if eval $compile; then
13502                         echo "SIG${xx} found."
13503                         ./signal$_exe  >> signal.ls1
13504                 else
13505                         echo "SIG${xx} NOT found."
13506                 fi
13507         done
13508         if $test -s signal.ls1; then
13509                 $cat signal.nsg signal.ls1 |
13510                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13511         fi
13512
13513 fi
13514 if $test -s signal.lst; then
13515         :
13516 else
13517         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13518         echo 'kill -l' >signal
13519         set X `csh -f <signal`
13520         $rm -f signal
13521         shift
13522         case $# in
13523         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13524         esac
13525         echo $@ | $tr ' ' $trnl | \
13526             $awk '{ printf "%s %d\n", $1, ++s; }
13527                   END { printf "NSIG %d\n", ++s }' >signal.lst
13528 fi
13529 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13530 EOS
13531 chmod a+x signal_cmd
13532 $eunicefix signal_cmd
13533
13534 : generate list of signal names
13535 echo " "
13536 case "$sig_name_init" in
13537 '') doinit=yes ;;
13538 *)  case "$sig_num_init" in
13539     ''|*,*) doinit=yes ;;
13540     esac ;;
13541 esac
13542 case "$doinit" in
13543 yes)
13544         echo "Generating a list of signal names and numbers..." >&4
13545         . ./signal_cmd
13546         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13547         sig_name=`$awk 'BEGIN { printf "ZERO " }
13548                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13549         sig_num=`$awk  'BEGIN { printf "0 " }
13550                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13551         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13552                              !/^NSIG/   { printf "\"%s\", ", $1 }
13553                              END        { printf "0\n" }' signal.lst`
13554         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13555                              !/^NSIG/   { printf "%d, ", $2}
13556                              END        { printf "0\n"}' signal.lst`
13557         ;;
13558 esac
13559 echo "The following $sig_count signals are available:"
13560 echo " "
13561 echo $sig_name | $awk \
13562 'BEGIN { linelen = 0 }
13563 {
13564         for (i = 1; i <= NF; i++) {
13565                 name = "SIG" $i " "
13566                 linelen = linelen + length(name)
13567                 if (linelen > 70) {
13568                         printf "\n"
13569                         linelen = length(name)
13570                 }
13571                 printf "%s", name
13572         }
13573         printf "\n"
13574 }'
13575 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13576
13577 : check for socklen_t
13578 echo " "
13579 echo "Checking to see if you have socklen_t..." >&4
13580 $cat >try.c <<EOCP
13581 #include <sys/types.h>
13582 #$d_socket HAS_SOCKET
13583 #ifdef HAS_SOCKET
13584 #include <sys/socket.h>
13585 #endif
13586 int main() { socklen_t x = 16; }
13587 EOCP
13588 set try
13589 if eval $compile; then
13590         val="$define"
13591         echo "You have socklen_t."
13592 else
13593         val="$undef"
13594         echo "You do not have socklen_t."
13595         case "$sizetype" in
13596         size_t) echo "(You do have size_t, that might work.)" ;;
13597         esac
13598 fi
13599 $rm -f try try.*
13600 set d_socklen_t
13601 eval $setvar
13602
13603 : check for type of the size argument to socket calls
13604 case "$d_socket" in
13605 "$define")
13606         $cat <<EOM
13607
13608 Checking to see what type is the last argument of accept().
13609 EOM
13610         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13611         yyy=''
13612         case "$d_socklen_t" in
13613         "$define") yyy="$yyy socklen_t"
13614         esac
13615         yyy="$yyy $sizetype int long"
13616         for xxx in $yyy; do
13617                 case "$socksizetype" in
13618                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13619                         if ./protochk "$try" $hdrs; then
13620                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13621                                 socksizetype="$xxx"
13622                         fi
13623                         ;;
13624                 esac
13625         done
13626 : In case none of those worked, prompt the user.
13627         case "$socksizetype" in
13628         '')     rp='What is the type for socket address structure sizes?'
13629                 dflt='int'
13630                 . ./myread
13631                 socksizetype=$ans
13632                 ;;
13633         esac
13634         ;;
13635 *)      : no sockets, so pick relatively harmless defaults
13636         socksizetype='char *'
13637         ;;
13638 esac
13639
13640 : see what type is used for signed size_t
13641 set ssize_t ssizetype int stdio.h sys/types.h
13642 eval $typedef
13643 dflt="$ssizetype"
13644 $cat > ssize.c <<EOM
13645 #include <stdio.h>
13646 #include <sys/types.h>
13647 #define Size_t $sizetype
13648 #define SSize_t $dflt
13649 int main()
13650 {
13651         if (sizeof(Size_t) == sizeof(SSize_t))
13652                 printf("$dflt\n");
13653         else if (sizeof(Size_t) == sizeof(int))
13654                 printf("int\n");
13655         else 
13656                 printf("long\n");
13657         exit(0);
13658 }
13659 EOM
13660 echo " "
13661 set ssize
13662 if eval $compile_ok && ./ssize > /dev/null; then
13663         ssizetype=`./ssize`
13664         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13665 else
13666         $cat >&4 <<EOM
13667 Help! I can't compile and run the ssize_t test program: please enlighten me!
13668 (This is probably a misconfiguration in your system or libraries, and
13669 you really ought to fix it.  Still, I'll try anyway.)
13670
13671 I need a type that is the same size as $sizetype, but is guaranteed to
13672 be signed.  Common values are ssize_t, int and long.
13673
13674 EOM
13675         rp="What signed type is the same size as $sizetype?"
13676         . ./myread
13677         ssizetype="$ans"
13678 fi
13679 $rm -f ssize ssize.*
13680
13681 : see what type of char stdio uses.
13682 echo " "
13683 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13684         echo "Your stdio uses unsigned chars." >&4
13685         stdchar="unsigned char"
13686 else
13687         echo "Your stdio uses signed chars." >&4
13688         stdchar="char"
13689 fi
13690
13691 : see if time exists
13692 echo " "
13693 if test "X$d_time" = X -o X"$timetype" = X; then
13694     if set time val -f d_time; eval $csym; $val; then
13695                 echo 'time() found.' >&4
13696                 val="$define"
13697                 rp="What is the type returned by time() on this system?"
13698                 set time_t timetype long stdio.h sys/types.h
13699                 eval $typedef_ask
13700     else
13701                 echo 'time() not found, hope that will do.' >&4
13702                 val="$undef"
13703                 timetype='int';
13704     fi
13705     set d_time
13706     eval $setvar
13707 fi
13708
13709 : see what type uids are declared as in the kernel
13710 echo " "
13711 echo "Looking for the type for user ids returned by getuid()."
13712 set uid_t uidtype xxx stdio.h sys/types.h
13713 eval $typedef
13714 case "$uidtype" in
13715 xxx)
13716         xxx=`./findhdr sys/user.h`
13717         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13718         case $1 in
13719         unsigned) dflt="$1 $2" ;;
13720         *) dflt="$1" ;;
13721         esac
13722         ;;
13723 *) dflt="$uidtype";;
13724 esac
13725 case "$uidtype" in
13726 uid_t)  echo "uid_t found." ;;
13727 *)      rp="What is the type for user ids returned by getuid()?"
13728         . ./myread
13729         uidtype="$ans"
13730         ;;
13731 esac
13732
13733 echo " "
13734 case "$uidtype" in
13735 *_t) zzz="$uidtype"     ;;
13736 *)   zzz="uid"          ;;
13737 esac
13738 echo "Checking the size of $zzz..." >&4 
13739 cat > try.c <<EOCP
13740 #include <sys/types.h>
13741 #include <stdio.h>
13742 int main() {
13743     printf("%d\n", (int)sizeof($uidtype));
13744     exit(0);
13745 }
13746 EOCP
13747 set try
13748 if eval $compile_ok; then
13749         yyy=`./try`
13750         case "$yyy" in
13751         '')     uidsize=4
13752                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13753                 ;;
13754         *)      uidsize=$yyy
13755                 echo "Your $zzz is $uidsize bytes long."
13756                 ;;
13757         esac
13758 else
13759         uidsize=4
13760         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13761 fi
13762
13763 echo " "
13764 case "$uidtype" in
13765 *_t) zzz="$uidtype"     ;;
13766 *)   zzz="uid"          ;;
13767 esac
13768 echo "Checking the sign of $zzz..." >&4
13769 cat > try.c <<EOCP
13770 #include <sys/types.h>
13771 #include <stdio.h>
13772 int main() {
13773         $uidtype foo = -1;
13774         if (foo < 0)
13775                 printf("-1\n");
13776         else
13777                 printf("1\n");
13778 }
13779 EOCP
13780 set try
13781 if eval $compile; then
13782         yyy=`./try`
13783         case "$yyy" in
13784         '')     uidsign=1
13785                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13786                 ;;
13787         *)      uidsign=$yyy
13788                 case "$uidsign" in
13789                  1) echo "Your $zzz is unsigned." ;;
13790                 -1) echo "Your $zzz is signed."   ;;
13791                 esac
13792                 ;;
13793         esac
13794 else
13795         uidsign=1
13796         echo "(I can't compile the test program--guessing unsigned.)" >&4
13797 fi
13798
13799
13800
13801 echo " "
13802 $echo "Checking the format string to be used for uids..." >&4
13803
13804 case "$uidsign" in
13805 -1)     if $test X"$uidsize" = X"$ivsize"; then
13806                 uidformat="$ivdformat"
13807         else
13808                 if $test X"$uidsize" = X"$longsize"; then
13809                         uidformat='"ld"'
13810                 else
13811                         if $test X"$uidsize" = X"$intsize"; then
13812                                 uidformat='"d"'
13813                         else
13814                                 if $test X"$uidsize" = X"$shortsize"; then
13815                                         uidformat='"hd"'
13816                                 fi
13817                         fi
13818                 fi
13819         fi
13820         ;;
13821 *)      if $test X"$uidsize" = X"$uvsize"; then
13822                 uidformat="$uvuformat"
13823         else
13824                 if $test X"$uidsize" = X"$longsize"; then
13825                         uidformat='"lu"'
13826                 else
13827                         if $test X"$uidsize" = X"$intsize"; then
13828                                 uidformat='"u"'
13829                         else
13830                                 if $test X"$uidsize" = X"$shortsize"; then
13831                                         uidformat='"hu"'
13832                                 fi
13833                         fi
13834                 fi
13835         fi
13836         ;;
13837 esac
13838
13839 : see if dbm.h is available
13840 : see if dbmclose exists
13841 set dbmclose d_dbmclose
13842 eval $inlibc
13843
13844 case "$d_dbmclose" in
13845 $define)
13846         set dbm.h i_dbm
13847         eval $inhdr
13848         case "$i_dbm" in
13849         $define)
13850                 val="$undef"
13851                 set i_rpcsvcdbm
13852                 eval $setvar
13853                 ;;
13854         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13855                 eval $inhdr
13856                 ;;
13857         esac
13858         ;;
13859 *)      echo "We won't be including <dbm.h>"
13860         val="$undef"
13861         set i_dbm
13862         eval $setvar
13863         val="$undef"
13864         set i_rpcsvcdbm
13865         eval $setvar
13866         ;;
13867 esac
13868
13869 : see if this is a sys/file.h system
13870 val=''
13871 set sys/file.h val
13872 eval $inhdr
13873
13874 : do we need to include sys/file.h ?
13875 case "$val" in
13876 "$define")
13877         echo " "
13878         if $h_sysfile; then
13879                 val="$define"
13880                 echo "We'll be including <sys/file.h>." >&4
13881         else
13882                 val="$undef"
13883                 echo "We won't be including <sys/file.h>." >&4
13884         fi
13885         ;;
13886 *)
13887         h_sysfile=false
13888         ;;
13889 esac
13890 set i_sysfile
13891 eval $setvar
13892
13893 : see if fcntl.h is there
13894 val=''
13895 set fcntl.h val
13896 eval $inhdr
13897
13898 : see if we can include fcntl.h
13899 case "$val" in
13900 "$define")
13901         echo " "
13902         if $h_fcntl; then
13903                 val="$define"
13904                 echo "We'll be including <fcntl.h>." >&4
13905         else
13906                 val="$undef"
13907                 if $h_sysfile; then
13908         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13909                 else
13910                         echo "We won't be including <fcntl.h>." >&4
13911                 fi
13912         fi
13913         ;;
13914 *)
13915         h_fcntl=false
13916         val="$undef"
13917         ;;
13918 esac
13919 set i_fcntl
13920 eval $setvar
13921
13922 : see if this is a iconv.h system
13923 set iconv.h i_iconv
13924 eval $inhdr
13925
13926 : see if locale.h is available
13927 set locale.h i_locale
13928 eval $inhdr
13929
13930 : see if mach cthreads are available
13931 if test "X$usethreads" = "X$define"; then
13932         set mach/cthreads.h i_machcthr
13933         eval $inhdr
13934 else
13935         i_machcthr="$undef"
13936 fi
13937
13938
13939
13940 : see if this is a math.h system
13941 set math.h i_math
13942 eval $inhdr
13943
13944 : see if this is a mntent.h system
13945 set mntent.h i_mntent
13946 eval $inhdr
13947
13948 : see if ndbm.h is available
13949 set ndbm.h t_ndbm
13950 eval $inhdr
13951 case "$t_ndbm" in
13952 $define)
13953         : see if dbm_open exists
13954         set dbm_open d_dbm_open
13955         eval $inlibc
13956         case "$d_dbm_open" in
13957         $undef)
13958                 t_ndbm="$undef"
13959                 echo "We won't be including <ndbm.h>"
13960                 ;;
13961         esac
13962         ;;
13963 esac
13964 val="$t_ndbm"
13965 set i_ndbm
13966 eval $setvar
13967
13968 : see if net/errno.h is available
13969 val=''
13970 set net/errno.h val
13971 eval $inhdr
13972
13973 : Unfortunately, it causes problems on some systems.  Arrgh.
13974 case "$val" in
13975 $define)
13976         cat > try.c <<'EOM'
13977 #include <stdio.h>
13978 #include <errno.h>
13979 #include <net/errno.h>
13980 int func()
13981 {
13982         return ENOTSOCK;
13983 }
13984 EOM
13985         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13986                 echo "We'll be including <net/errno.h>." >&4
13987         else
13988                 echo "We won't be including <net/errno.h>." >&4
13989                 val="$undef"
13990         fi
13991         $rm -f try.* try
13992         ;;
13993 esac
13994 set i_neterrno
13995 eval $setvar
13996
13997 : see if netinet/tcp.h is available
13998 set netinet/tcp.h i_netinettcp
13999 eval $inhdr
14000
14001 : see if this is a poll.h system
14002 set poll.h i_poll
14003 eval $inhdr
14004
14005 echo " "
14006 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14007 $cat <<'EOSH' > Cppsym.know
14008 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14009 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14010 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14011 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14012 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14013 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14014 bull c cadmus clipper CMU COFF COMPILER_VERSION
14015 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14016 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14017 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14018 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14019 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14020 H3050R H3050RX hbullx20 hcx host_mips
14021 hp200 hp300 hp700 HP700 hp800 hp9000
14022 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14023 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14024 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14025 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14026 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14027 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14028 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14029 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14030 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14031 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14032 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14033 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14034 MATH_HAS_NO_SIDE_EFFECTS
14035 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14036 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14037 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14038 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14039 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14040 NetBSD news1500 news1700 news1800 news1900 news3700
14041 news700 news800 news900 NeXT NLS ns16000 ns32000
14042 ns32016 ns32332 ns32k nsc32000
14043 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14044 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14045 pc532 pdp11 PGC PIC plexus PORTAR posix
14046 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14047 POSIX_C_SOURCE POSIX_SOURCE POWER
14048 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14049 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14050 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14051 sony sony_news sonyrisc sparc sparclite spectrum
14052 stardent stdc STDC_EXT stratos sun sun3 sun386
14053 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14054 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14055 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14056 sysV68 sysV88 Tek4132 Tek4300 titan
14057 tower tower32 tower32_200 tower32_600 tower32_700
14058 tower32_800 tower32_850 tss
14059 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14060 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14061 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14062 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14063 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14064 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14065 z8000
14066 EOSH
14067 # Maybe put other stuff here too.
14068 cat <<EOSH >>Cppsym.know
14069 $osname
14070 EOSH
14071 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14072 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14073 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14074 $rm -f Cppsym.a Cppsym.b
14075 cat <<EOSH > Cppsym
14076 $startsh
14077 if $test \$# -gt 0; then
14078     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14079     if $test -s Cppsym.got; then
14080         $rm -f Cppsym.got
14081         exit 0
14082     fi
14083     $rm -f Cppsym.got
14084     exit 1
14085 else
14086     $tr " " "$trnl" | ./Cppsym.try
14087     exit 0
14088 fi
14089 EOSH
14090 chmod +x Cppsym
14091 $eunicefix Cppsym
14092 cat <<EOSH > Cppsym.try
14093 $startsh
14094 cat <<'EOCP' > try.c
14095 #include <stdio.h>
14096 int main() {
14097 EOCP
14098 $awk \\
14099 EOSH
14100 cat <<'EOSH' >> Cppsym.try
14101 'length($1) > 0 {
14102     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
14103     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
14104     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
14105     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
14106 }'       >> try.c
14107 echo '}' >> try.c
14108 EOSH
14109 cat <<EOSH >> Cppsym.try
14110 ccflags="$ccflags"
14111 case "$osname-$gccversion" in
14112 irix-) ccflags="\$ccflags -woff 1178" ;;
14113 esac
14114 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14115 EOSH
14116 chmod +x Cppsym.try
14117 $eunicefix Cppsym.try
14118 ./Cppsym < Cppsym.know > Cppsym.true
14119 : now check the C compiler for additional symbols
14120 postprocess_cc_v=''
14121 case "$osname" in
14122 aix) postprocess_cc_v="|$tr , ' '" ;;
14123 esac
14124 $cat >ccsym <<EOS
14125 $startsh
14126 $cat >tmp.c <<EOF
14127 extern int foo;
14128 EOF
14129 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14130 do
14131         case "\$i" in
14132         -D*) echo "\$i" | $sed 's/^-D//';;
14133         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14134         esac
14135 done
14136 $rm -f try.c
14137 EOS
14138 postprocess_cc_v=''
14139 chmod +x ccsym
14140 $eunicefix ccsym
14141 ./ccsym > ccsym1.raw
14142 if $test -s ccsym1.raw; then
14143        $sort ccsym1.raw | $uniq >ccsym.raw
14144 else
14145        mv ccsym1.raw ccsym.raw
14146 fi
14147
14148 $awk '/\=/ { print $0; next }
14149         { print $0"=1" }' ccsym.raw >ccsym.list
14150 $awk '/\=/ { print $0; next }
14151         { print $0"=1" }' Cppsym.true >ccsym.true
14152 $comm -13 ccsym.true ccsym.list >ccsym.own
14153 $comm -12 ccsym.true ccsym.list >ccsym.com
14154 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14155 also=''
14156 if $test -z ccsym.raw; then
14157         echo "Your C compiler doesn't seem to define any symbols!" >&4
14158         echo " "
14159         echo "However, your C preprocessor defines the following symbols:"
14160         $cat Cppsym.true
14161         ccsymbols=''
14162         cppsymbols=`$cat Cppsym.true`
14163         cppsymbols=`echo $cppsymbols`
14164         cppccsymbols="$cppsymbols"
14165 else
14166         if $test -s ccsym.com; then
14167                 echo "Your C compiler and pre-processor define these symbols:"
14168                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14169                 also='also '
14170                 symbols='ones'
14171                 cppccsymbols=`$cat ccsym.com`
14172                 cppccsymbols=`echo $cppccsymbols`
14173                 $test "$silent" || sleep 1
14174         fi
14175         if $test -s ccsym.cpp; then
14176                 $test "$also" && echo " "
14177                 echo "Your C pre-processor ${also}defines the following symbols:"
14178                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14179                 also='further '
14180                 cppsymbols=`$cat ccsym.cpp`
14181                 cppsymbols=`echo $cppsymbols`
14182                 $test "$silent" || sleep 1
14183         fi
14184         if $test -s ccsym.own; then
14185                 $test "$also" && echo " "
14186                 echo "Your C compiler ${also}defines the following cpp symbols:"
14187                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14188                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14189                 ccsymbols=`$cat ccsym.own`
14190                 ccsymbols=`echo $ccsymbols`
14191                 $test "$silent" || sleep 1
14192         fi
14193 fi
14194 $rm -f ccsym*
14195
14196 : see if this is a termio system
14197 val="$undef"
14198 val2="$undef"
14199 val3="$undef"
14200 if $test `./findhdr termios.h`; then
14201         set tcsetattr i_termios
14202         eval $inlibc
14203         val3="$i_termios"
14204 fi
14205 echo " "
14206 case "$val3" in
14207 "$define") echo "You have POSIX termios.h... good!" >&4;;
14208 *) if ./Cppsym pyr; then
14209                 case "`/bin/universe`" in
14210                 ucb) if $test `./findhdr sgtty.h`; then
14211                                 val2="$define"
14212                                 echo "<sgtty.h> found." >&4
14213                         else
14214                                 echo "System is pyramid with BSD universe."
14215                                 echo "<sgtty.h> not found--you could have problems." >&4
14216                         fi;;
14217                 *) if $test `./findhdr termio.h`; then
14218                                 val="$define"
14219                                 echo "<termio.h> found." >&4
14220                         else
14221                                 echo "System is pyramid with USG universe."
14222                                 echo "<termio.h> not found--you could have problems." >&4
14223                         fi;;
14224                 esac
14225         elif ./usg; then
14226                 if $test `./findhdr termio.h`; then
14227                         echo "<termio.h> found." >&4
14228                         val="$define"
14229                 elif $test `./findhdr sgtty.h`; then
14230                         echo "<sgtty.h> found." >&4
14231                         val2="$define"
14232                 else
14233 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14234                 fi
14235         else
14236                 if $test `./findhdr sgtty.h`; then
14237                         echo "<sgtty.h> found." >&4
14238                         val2="$define"
14239                 elif $test `./findhdr termio.h`; then
14240                         echo "<termio.h> found." >&4
14241                         val="$define"
14242                 else
14243 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14244                 fi
14245         fi;;
14246 esac
14247 set i_termio; eval $setvar
14248 val=$val2; set i_sgtty; eval $setvar
14249 val=$val3; set i_termios; eval $setvar
14250
14251 : see if this is a shadow.h system
14252 set shadow.h i_shadow
14253 eval $inhdr
14254
14255 : see if this is a socks.h system
14256 set socks.h i_socks
14257 eval $inhdr
14258
14259 : see if stdarg is available
14260 echo " "
14261 if $test `./findhdr stdarg.h`; then
14262         echo "<stdarg.h> found." >&4
14263         valstd="$define"
14264 else
14265         echo "<stdarg.h> NOT found." >&4
14266         valstd="$undef"
14267 fi
14268
14269 : see if varags is available
14270 echo " "
14271 if $test `./findhdr varargs.h`; then
14272         echo "<varargs.h> found." >&4
14273 else
14274         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14275 fi
14276
14277 : set up the varargs testing programs
14278 $cat > varargs.c <<EOP
14279 #ifdef I_STDARG
14280 #include <stdarg.h>
14281 #endif
14282 #ifdef I_VARARGS
14283 #include <varargs.h>
14284 #endif
14285
14286 #ifdef I_STDARG
14287 int f(char *p, ...)
14288 #else
14289 int f(va_alist)
14290 va_dcl
14291 #endif
14292 {
14293         va_list ap;
14294 #ifndef I_STDARG
14295         char *p;
14296 #endif
14297 #ifdef I_STDARG
14298         va_start(ap,p);
14299 #else
14300         va_start(ap);
14301         p = va_arg(ap, char *);
14302 #endif
14303         va_end(ap);
14304 }
14305 EOP
14306 $cat > varargs <<EOP
14307 $startsh
14308 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14309         echo "true"
14310 else
14311         echo "false"
14312 fi
14313 $rm -f varargs$_o
14314 EOP
14315 chmod +x varargs
14316
14317 : now check which varargs header should be included
14318 echo " "
14319 i_varhdr=''
14320 case "$valstd" in
14321 "$define")
14322         if `./varargs I_STDARG`; then
14323                 val='stdarg.h'
14324         elif `./varargs I_VARARGS`; then
14325                 val='varargs.h'
14326         fi
14327         ;;
14328 *)
14329         if `./varargs I_VARARGS`; then
14330                 val='varargs.h'
14331         fi
14332         ;;
14333 esac
14334 case "$val" in
14335 '')
14336 echo "I could not find the definition for va_dcl... You have problems..." >&4
14337         val="$undef"; set i_stdarg; eval $setvar
14338         val="$undef"; set i_varargs; eval $setvar
14339         ;;
14340 *) 
14341         set i_varhdr
14342         eval $setvar
14343         case "$i_varhdr" in
14344         stdarg.h)
14345                 val="$define"; set i_stdarg; eval $setvar
14346                 val="$undef"; set i_varargs; eval $setvar
14347                 ;;
14348         varargs.h)
14349                 val="$undef"; set i_stdarg; eval $setvar
14350                 val="$define"; set i_varargs; eval $setvar
14351                 ;;
14352         esac
14353         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14354 esac
14355 $rm -f varargs*
14356
14357 : see if stddef is available
14358 set stddef.h i_stddef
14359 eval $inhdr
14360
14361 : see if this is a sunmath.h system
14362 set sunmath.h i_sunmath
14363 eval $inhdr
14364
14365 : see if sys/access.h is available
14366 set sys/access.h i_sysaccess
14367 eval $inhdr
14368
14369 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14370 set sys/filio.h i_sysfilio
14371 eval $inhdr
14372 echo " "
14373 if $test `./findhdr sys/ioctl.h`; then
14374         val="$define"
14375         echo '<sys/ioctl.h> found.' >&4
14376 else
14377         val="$undef"
14378         if $test $i_sysfilio = "$define"; then
14379             echo '<sys/ioctl.h> NOT found.' >&4
14380         else
14381                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14382                 $test $i_termio = "$define" && xxx="termio.h"
14383                 $test $i_termios = "$define" && xxx="termios.h"
14384 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14385         fi
14386 fi
14387 set i_sysioctl
14388 eval $setvar
14389
14390
14391 : see if this is a syslog.h system
14392 set syslog.h i_syslog
14393 eval $inhdr
14394
14395
14396 : see if this is a sys/mode.h system
14397 set sys/mode.h i_sysmode
14398 eval $inhdr
14399
14400 : see if sys/resource.h has to be included
14401 set sys/resource.h i_sysresrc
14402 eval $inhdr
14403
14404 : see if sys/security.h is available
14405 set sys/security.h i_syssecrt
14406 eval $inhdr
14407
14408 : see if this is a sys/statvfs.h system
14409 set sys/statvfs.h i_sysstatvfs
14410 eval $inhdr
14411
14412 : see if this is a sys/uio.h system
14413 set sys/uio.h i_sysuio
14414 eval $inhdr
14415
14416 : see if this is a sys/un.h system
14417 set sys/un.h i_sysun
14418 eval $inhdr
14419
14420
14421 : see if this is a sys/utsname.h system
14422 set sys/utsname.h i_sysutsname
14423 eval $inhdr
14424
14425 : see if this is a syswait system
14426 set sys/wait.h i_syswait
14427 eval $inhdr
14428
14429 : see if this is a ustat.h system
14430 set ustat.h i_ustat
14431 eval $inhdr
14432
14433 : see if this is an utime system
14434 set utime.h i_utime
14435 eval $inhdr
14436
14437 : see if this is a values.h system
14438 set values.h i_values
14439 eval $inhdr
14440
14441 : see if this is a vfork system
14442 case "$d_vfork" in
14443 "$define")
14444         set vfork.h i_vfork
14445         eval $inhdr
14446         ;;
14447 *)
14448         i_vfork="$undef"
14449         ;;
14450 esac
14451
14452 : see if gdbm.h is available
14453 set gdbm.h t_gdbm
14454 eval $inhdr
14455 case "$t_gdbm" in
14456 $define)
14457         : see if gdbm_open exists
14458         set gdbm_open d_gdbm_open
14459         eval $inlibc
14460         case "$d_gdbm_open" in
14461         $undef)
14462                 t_gdbm="$undef"
14463                 echo "We won't be including <gdbm.h>"
14464                 ;;
14465         esac
14466         ;;
14467 esac
14468 val="$t_gdbm"
14469 set i_gdbm
14470 eval $setvar
14471
14472 echo " "
14473 echo "Looking for extensions..." >&4
14474 : If we are using the old config.sh, known_extensions may contain
14475 : old or inaccurate or duplicate values.
14476 known_extensions=''
14477 nonxs_extensions=''
14478 : We do not use find because it might not be available.
14479 : We do not just use MANIFEST because the user may have dropped
14480 : some additional extensions into the source tree and expect them
14481 : to be built.
14482
14483 : Function to recursively find available extensions, ignoring DynaLoader
14484 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14485 find_extensions='
14486     for xxx in *; do
14487        case "$xxx" in
14488            DynaLoader|dynaload) ;;
14489            *)
14490            if $test -f $xxx/$xxx.xs; then
14491                known_extensions="$known_extensions $1$xxx";
14492            elif $test -f $xxx/Makefile.PL; then
14493                nonxs_extensions="$nonxs_extensions $1$xxx";
14494            else
14495                if $test -d $xxx -a $# -lt 10; then
14496                    set $1$xxx/ $*;
14497                    cd $xxx;
14498                    eval $find_extensions;
14499                    cd ..;
14500                    shift;
14501                fi;
14502            fi
14503            ;;
14504        esac;
14505     done'
14506 tdir=`pwd`
14507 cd $rsrc/ext
14508 set X
14509 shift
14510 eval $find_extensions
14511 set X $nonxs_extensions
14512 shift
14513 nonxs_extensions="$*"
14514 set X $known_extensions
14515 shift
14516 known_extensions="$*"
14517 cd $tdir
14518
14519 : Now see which are supported on this system.
14520 avail_ext=''
14521 for xxx in $known_extensions ; do
14522         case "$xxx" in
14523         DB_File|db_file)
14524                 case "$i_db" in
14525                 $define) avail_ext="$avail_ext $xxx" ;;
14526                 esac
14527                 ;;
14528         GDBM_File|gdbm_fil)
14529                 case "$i_gdbm" in 
14530                 $define) avail_ext="$avail_ext $xxx" ;;
14531                 esac
14532                 ;;
14533         NDBM_File|ndbm_fil)
14534                 case "$i_ndbm" in
14535                 $define)
14536                     case "$osname-$use64bitint" in
14537                     hpux-define)
14538                         case "$libs" in
14539                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14540                         esac
14541                         ;;
14542                     *) avail_ext="$avail_ext $xxx" ;;
14543                     esac
14544                     ;;
14545                 esac
14546                 ;;
14547         ODBM_File|odbm_fil) 
14548                 case "${i_dbm}${i_rpcsvcdbm}" in
14549                 *"${define}"*)
14550                     case "$osname-$use64bitint" in
14551                     hpux-define)
14552                         case "$libs" in
14553                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14554                         esac
14555                         ;;
14556                     *) avail_ext="$avail_ext $xxx" ;;
14557                     esac
14558                     ;;
14559                 esac
14560                 ;;
14561         POSIX|posix)
14562                 case "$useposix" in
14563                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14564                 esac
14565                 ;;
14566         Opcode|opcode)
14567                 case "$useopcode" in
14568                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14569                 esac
14570                 ;;
14571         Socket|socket)
14572                 case "$d_socket" in 
14573                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14574                 esac
14575                 ;;
14576         Thread|thread)
14577                 case "$usethreads" in 
14578                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14579                 esac
14580                 ;;
14581         IPC/SysV|ipc/sysv)
14582                 : XXX Do we need a useipcsysv variable here
14583                 case "${d_msg}${d_sem}${d_shm}" in 
14584                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14585                 esac
14586                 ;;
14587         *)      avail_ext="$avail_ext $xxx"
14588                 ;;
14589         esac
14590 done
14591
14592 set X $avail_ext
14593 shift
14594 avail_ext="$*"
14595
14596 : Now see which nonxs extensions are supported on this system.
14597 : For now assume all are.
14598 nonxs_ext=''
14599 for xxx in $nonxs_extensions ; do
14600         case "$xxx" in
14601         *)      nonxs_ext="$nonxs_ext $xxx"
14602                 ;;
14603         esac
14604 done
14605
14606 set X $nonxs_ext
14607 shift
14608 nonxs_ext="$*"
14609
14610 case $usedl in
14611 $define)
14612         $cat <<EOM
14613 A number of extensions are supplied with $package.  You may choose to
14614 compile these extensions for dynamic loading (the default), compile
14615 them into the $package executable (static loading), or not include
14616 them at all.  Answer "none" to include no extensions.
14617 Note that DynaLoader is always built and need not be mentioned here.
14618
14619 EOM
14620         case "$dynamic_ext" in
14621         '') dflt="$avail_ext" ;;
14622         *)      dflt="$dynamic_ext"
14623                 # Perhaps we are reusing an old out-of-date config.sh.
14624                 case "$hint" in
14625                 previous)
14626                         if test X"$dynamic_ext" != X"$avail_ext"; then
14627                                 $cat <<EOM
14628 NOTICE:  Your previous config.sh list may be incorrect. 
14629 The extensions now available to you are 
14630         ${avail_ext}
14631 but the default list from your previous config.sh is
14632         ${dynamic_ext} 
14633
14634 EOM
14635                         fi
14636                         ;;
14637                 esac
14638                 ;;
14639         esac
14640         case "$dflt" in
14641         '')     dflt=none;;
14642         esac
14643         rp="What extensions do you wish to load dynamically?"
14644         . ./myread
14645         case "$ans" in
14646         none) dynamic_ext=' ' ;;
14647         *) dynamic_ext="$ans" ;;
14648         esac
14649
14650         case "$static_ext" in
14651         '')
14652                 : Exclude those already listed in dynamic linking
14653                 dflt=''
14654                 for xxx in $avail_ext; do
14655                         case " $dynamic_ext " in
14656                         *" $xxx "*) ;;
14657                         *) dflt="$dflt $xxx" ;;
14658                         esac
14659                 done
14660                 set X $dflt
14661                 shift
14662                 dflt="$*"
14663                 ;;
14664         *)  dflt="$static_ext" 
14665                 ;;
14666         esac
14667
14668         case "$dflt" in
14669         '')     dflt=none;;
14670         esac
14671         rp="What extensions do you wish to load statically?"
14672         . ./myread
14673         case "$ans" in
14674         none) static_ext=' ' ;;
14675         *) static_ext="$ans" ;;
14676         esac
14677         ;;
14678 *)
14679         $cat <<EOM
14680 A number of extensions are supplied with $package.  Answer "none" 
14681 to include no extensions. 
14682 Note that DynaLoader is always built and need not be mentioned here.
14683
14684 EOM
14685         case "$static_ext" in
14686         '') dflt="$avail_ext" ;;
14687         *)      dflt="$static_ext"
14688                 # Perhaps we are reusing an old out-of-date config.sh.
14689                 case "$hint" in
14690                 previous)
14691                         if test X"$static_ext" != X"$avail_ext"; then
14692                                 $cat <<EOM
14693 NOTICE:  Your previous config.sh list may be incorrect. 
14694 The extensions now available to you are 
14695         ${avail_ext}
14696 but the default list from your previous config.sh is
14697         ${static_ext} 
14698
14699 EOM
14700                         fi
14701                         ;;
14702                 esac
14703                 ;;
14704         esac
14705         : Exclude those that are not xs extensions
14706         case "$dflt" in
14707         '')     dflt=none;;
14708         esac
14709         rp="What extensions do you wish to include?"
14710         . ./myread
14711         case "$ans" in
14712         none) static_ext=' ' ;;
14713         *) static_ext="$ans" ;;
14714         esac
14715         ;;
14716 esac
14717
14718 set X $dynamic_ext $static_ext $nonxs_ext
14719 shift
14720 extensions="$*"
14721
14722 : Remove build directory name from cppstdin so it can be used from
14723 : either the present location or the final installed location.
14724 echo " "
14725 : Get out of the UU directory to get correct path name.
14726 cd ..
14727 case "$cppstdin" in
14728 `pwd`/cppstdin)
14729         echo "Stripping down cppstdin path name"
14730         cppstdin=cppstdin
14731         ;;
14732 esac
14733 cd UU
14734
14735 : end of configuration questions
14736 echo " "
14737 echo "End of configuration questions."
14738 echo " "
14739
14740 : back to where it started
14741 if test -d ../UU; then
14742         cd ..
14743 fi
14744
14745 : configuration may be patched via a 'config.over' file
14746 if $test -f config.over; then
14747         echo " "
14748         dflt=y
14749         rp='I see a config.over file.  Do you wish to load it?'
14750         . UU/myread
14751         case "$ans" in
14752         n*) echo "OK, I'll ignore it.";;
14753         *)      . ./config.over
14754                 echo "Configuration override changes have been loaded."
14755                 ;;
14756         esac
14757 fi
14758
14759 : in case they want portability, strip down executable paths
14760 case "$d_portable" in
14761 "$define")
14762         echo " "
14763         echo "Stripping down executable paths..." >&4
14764         for file in $loclist $trylist; do
14765                 eval temp=\$$file
14766                 eval $file=`basename $temp`
14767         done
14768         ;;
14769 esac
14770
14771 : create config.sh file
14772 echo " "
14773 echo "Creating config.sh..." >&4
14774 $spitshell <<EOT >config.sh
14775 $startsh
14776 #
14777 # This file was produced by running the Configure script. It holds all the
14778 # definitions figured out by Configure. Should you modify one of these values,
14779 # do not forget to propagate your changes by running "Configure -der". You may
14780 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14781 #
14782
14783 # Package name      : $package
14784 # Source directory  : $src
14785 # Configuration time: $cf_time
14786 # Configured by     : $cf_by
14787 # Target system     : $myuname
14788
14789 Author='$Author'
14790 Date='$Date'
14791 Header='$Header'
14792 Id='$Id'
14793 Locker='$Locker'
14794 Log='$Log'
14795 Mcc='$Mcc'
14796 RCSfile='$RCSfile'
14797 Revision='$Revision'
14798 Source='$Source'
14799 State='$State'
14800 _a='$_a'
14801 _exe='$_exe'
14802 _o='$_o'
14803 afs='$afs'
14804 alignbytes='$alignbytes'
14805 ansi2knr='$ansi2knr'
14806 aphostname='$aphostname'
14807 api_revision='$api_revision'
14808 api_subversion='$api_subversion'
14809 api_version='$api_version'
14810 api_versionstring='$api_versionstring'
14811 ar='$ar'
14812 archlib='$archlib'
14813 archlibexp='$archlibexp'
14814 archname64='$archname64'
14815 archname='$archname'
14816 archobjs='$archobjs'
14817 awk='$awk'
14818 baserev='$baserev'
14819 bash='$bash'
14820 bin='$bin'
14821 bincompat5005='$bincompat5005'
14822 binexp='$binexp'
14823 bison='$bison'
14824 byacc='$byacc'
14825 byteorder='$byteorder'
14826 c='$c'
14827 castflags='$castflags'
14828 cat='$cat'
14829 cc='$cc'
14830 cccdlflags='$cccdlflags'
14831 ccdlflags='$ccdlflags'
14832 ccflags='$ccflags'
14833 ccsymbols='$ccsymbols'
14834 cf_by='$cf_by'
14835 cf_email='$cf_email'
14836 cf_time='$cf_time'
14837 charsize='$charsize'
14838 chgrp='$chgrp'
14839 chmod='$chmod'
14840 chown='$chown'
14841 clocktype='$clocktype'
14842 comm='$comm'
14843 compress='$compress'
14844 contains='$contains'
14845 cp='$cp'
14846 cpio='$cpio'
14847 cpp='$cpp'
14848 cpp_stuff='$cpp_stuff'
14849 cppccsymbols='$cppccsymbols'
14850 cppflags='$cppflags'
14851 cpplast='$cpplast'
14852 cppminus='$cppminus'
14853 cpprun='$cpprun'
14854 cppstdin='$cppstdin'
14855 cppsymbols='$cppsymbols'
14856 crosscompile='$crosscompile'
14857 cryptlib='$cryptlib'
14858 csh='$csh'
14859 d_Gconvert='$d_Gconvert'
14860 d_PRIEldbl='$d_PRIEldbl'
14861 d_PRIFldbl='$d_PRIFldbl'
14862 d_PRIGldbl='$d_PRIGldbl'
14863 d_PRIX64='$d_PRIX64'
14864 d_PRId64='$d_PRId64'
14865 d_PRIeldbl='$d_PRIeldbl'
14866 d_PRIfldbl='$d_PRIfldbl'
14867 d_PRIgldbl='$d_PRIgldbl'
14868 d_PRIi64='$d_PRIi64'
14869 d_PRIo64='$d_PRIo64'
14870 d_PRIu64='$d_PRIu64'
14871 d_PRIx64='$d_PRIx64'
14872 d_access='$d_access'
14873 d_accessx='$d_accessx'
14874 d_alarm='$d_alarm'
14875 d_archlib='$d_archlib'
14876 d_atolf='$d_atolf'
14877 d_atoll='$d_atoll'
14878 d_attribut='$d_attribut'
14879 d_bcmp='$d_bcmp'
14880 d_bcopy='$d_bcopy'
14881 d_bincompat5005='$d_bincompat5005'
14882 d_bsd='$d_bsd'
14883 d_bsdgetpgrp='$d_bsdgetpgrp'
14884 d_bsdsetpgrp='$d_bsdsetpgrp'
14885 d_bzero='$d_bzero'
14886 d_casti32='$d_casti32'
14887 d_castneg='$d_castneg'
14888 d_charvspr='$d_charvspr'
14889 d_chown='$d_chown'
14890 d_chroot='$d_chroot'
14891 d_chsize='$d_chsize'
14892 d_closedir='$d_closedir'
14893 d_const='$d_const'
14894 d_crypt='$d_crypt'
14895 d_csh='$d_csh'
14896 d_cuserid='$d_cuserid'
14897 d_dbl_dig='$d_dbl_dig'
14898 d_difftime='$d_difftime'
14899 d_dirnamlen='$d_dirnamlen'
14900 d_dlerror='$d_dlerror'
14901 d_dlopen='$d_dlopen'
14902 d_dlsymun='$d_dlsymun'
14903 d_dosuid='$d_dosuid'
14904 d_drand48proto='$d_drand48proto'
14905 d_dup2='$d_dup2'
14906 d_eaccess='$d_eaccess'
14907 d_endgrent='$d_endgrent'
14908 d_endhent='$d_endhent'
14909 d_endnent='$d_endnent'
14910 d_endpent='$d_endpent'
14911 d_endpwent='$d_endpwent'
14912 d_endsent='$d_endsent'
14913 d_endspent='$d_endspent'
14914 d_eofnblk='$d_eofnblk'
14915 d_eunice='$d_eunice'
14916 d_fchmod='$d_fchmod'
14917 d_fchown='$d_fchown'
14918 d_fcntl='$d_fcntl'
14919 d_fd_macros='$d_fd_macros'
14920 d_fd_set='$d_fd_set'
14921 d_fds_bits='$d_fds_bits'
14922 d_fgetpos='$d_fgetpos'
14923 d_flexfnam='$d_flexfnam'
14924 d_flock='$d_flock'
14925 d_fork='$d_fork'
14926 d_fpathconf='$d_fpathconf'
14927 d_fpos64_t='$d_fpos64_t'
14928 d_fs_data_s='$d_fs_data_s'
14929 d_fseeko='$d_fseeko'
14930 d_fsetpos='$d_fsetpos'
14931 d_fstatfs='$d_fstatfs'
14932 d_fstatvfs='$d_fstatvfs'
14933 d_ftello='$d_ftello'
14934 d_ftime='$d_ftime'
14935 d_getcwd='$d_getcwd'
14936 d_getfsstat='$d_getfsstat'
14937 d_getgrent='$d_getgrent'
14938 d_getgrps='$d_getgrps'
14939 d_gethbyaddr='$d_gethbyaddr'
14940 d_gethbyname='$d_gethbyname'
14941 d_gethent='$d_gethent'
14942 d_gethname='$d_gethname'
14943 d_gethostprotos='$d_gethostprotos'
14944 d_getlogin='$d_getlogin'
14945 d_getmnt='$d_getmnt'
14946 d_getmntent='$d_getmntent'
14947 d_getnbyaddr='$d_getnbyaddr'
14948 d_getnbyname='$d_getnbyname'
14949 d_getnent='$d_getnent'
14950 d_getnetprotos='$d_getnetprotos'
14951 d_getpbyname='$d_getpbyname'
14952 d_getpbynumber='$d_getpbynumber'
14953 d_getpent='$d_getpent'
14954 d_getpgid='$d_getpgid'
14955 d_getpgrp2='$d_getpgrp2'
14956 d_getpgrp='$d_getpgrp'
14957 d_getppid='$d_getppid'
14958 d_getprior='$d_getprior'
14959 d_getprotoprotos='$d_getprotoprotos'
14960 d_getpwent='$d_getpwent'
14961 d_getsbyname='$d_getsbyname'
14962 d_getsbyport='$d_getsbyport'
14963 d_getsent='$d_getsent'
14964 d_getservprotos='$d_getservprotos'
14965 d_getspent='$d_getspent'
14966 d_getspnam='$d_getspnam'
14967 d_gettimeod='$d_gettimeod'
14968 d_gnulibc='$d_gnulibc'
14969 d_grpasswd='$d_grpasswd'
14970 d_hasmntopt='$d_hasmntopt'
14971 d_htonl='$d_htonl'
14972 d_iconv='$d_iconv'
14973 d_index='$d_index'
14974 d_inetaton='$d_inetaton'
14975 d_int64_t='$d_int64_t'
14976 d_isascii='$d_isascii'
14977 d_killpg='$d_killpg'
14978 d_lchown='$d_lchown'
14979 d_ldbl_dig='$d_ldbl_dig'
14980 d_link='$d_link'
14981 d_locconv='$d_locconv'
14982 d_lockf='$d_lockf'
14983 d_longdbl='$d_longdbl'
14984 d_longlong='$d_longlong'
14985 d_lseekproto='$d_lseekproto'
14986 d_lstat='$d_lstat'
14987 d_madvise='$d_madvise'
14988 d_mblen='$d_mblen'
14989 d_mbstowcs='$d_mbstowcs'
14990 d_mbtowc='$d_mbtowc'
14991 d_memchr='$d_memchr'
14992 d_memcmp='$d_memcmp'
14993 d_memcpy='$d_memcpy'
14994 d_memmove='$d_memmove'
14995 d_memset='$d_memset'
14996 d_mkdir='$d_mkdir'
14997 d_mkdtemp='$d_mkdtemp'
14998 d_mkfifo='$d_mkfifo'
14999 d_mkstemp='$d_mkstemp'
15000 d_mkstemps='$d_mkstemps'
15001 d_mktime='$d_mktime'
15002 d_mmap='$d_mmap'
15003 d_mprotect='$d_mprotect'
15004 d_msg='$d_msg'
15005 d_msg_ctrunc='$d_msg_ctrunc'
15006 d_msg_dontroute='$d_msg_dontroute'
15007 d_msg_oob='$d_msg_oob'
15008 d_msg_peek='$d_msg_peek'
15009 d_msg_proxy='$d_msg_proxy'
15010 d_msgctl='$d_msgctl'
15011 d_msgget='$d_msgget'
15012 d_msgrcv='$d_msgrcv'
15013 d_msgsnd='$d_msgsnd'
15014 d_msync='$d_msync'
15015 d_munmap='$d_munmap'
15016 d_mymalloc='$d_mymalloc'
15017 d_nice='$d_nice'
15018 d_nv_preserves_uv='$d_nv_preserves_uv'
15019 d_off64_t='$d_off64_t'
15020 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15021 d_oldpthreads='$d_oldpthreads'
15022 d_oldsock='$d_oldsock'
15023 d_open3='$d_open3'
15024 d_pathconf='$d_pathconf'
15025 d_pause='$d_pause'
15026 d_phostname='$d_phostname'
15027 d_pipe='$d_pipe'
15028 d_poll='$d_poll'
15029 d_portable='$d_portable'
15030 d_pthread_yield='$d_pthread_yield'
15031 d_pwage='$d_pwage'
15032 d_pwchange='$d_pwchange'
15033 d_pwclass='$d_pwclass'
15034 d_pwcomment='$d_pwcomment'
15035 d_pwexpire='$d_pwexpire'
15036 d_pwgecos='$d_pwgecos'
15037 d_pwpasswd='$d_pwpasswd'
15038 d_pwquota='$d_pwquota'
15039 d_qgcvt='$d_qgcvt'
15040 d_quad='$d_quad'
15041 d_readdir='$d_readdir'
15042 d_readlink='$d_readlink'
15043 d_rename='$d_rename'
15044 d_rewinddir='$d_rewinddir'
15045 d_rmdir='$d_rmdir'
15046 d_safebcpy='$d_safebcpy'
15047 d_safemcpy='$d_safemcpy'
15048 d_sanemcmp='$d_sanemcmp'
15049 d_sched_yield='$d_sched_yield'
15050 d_scm_rights='$d_scm_rights'
15051 d_seekdir='$d_seekdir'
15052 d_select='$d_select'
15053 d_sem='$d_sem'
15054 d_semctl='$d_semctl'
15055 d_semctl_semid_ds='$d_semctl_semid_ds'
15056 d_semctl_semun='$d_semctl_semun'
15057 d_semget='$d_semget'
15058 d_semop='$d_semop'
15059 d_setegid='$d_setegid'
15060 d_seteuid='$d_seteuid'
15061 d_setgrent='$d_setgrent'
15062 d_setgrps='$d_setgrps'
15063 d_sethent='$d_sethent'
15064 d_setlinebuf='$d_setlinebuf'
15065 d_setlocale='$d_setlocale'
15066 d_setnent='$d_setnent'
15067 d_setpent='$d_setpent'
15068 d_setpgid='$d_setpgid'
15069 d_setpgrp2='$d_setpgrp2'
15070 d_setpgrp='$d_setpgrp'
15071 d_setprior='$d_setprior'
15072 d_setpwent='$d_setpwent'
15073 d_setregid='$d_setregid'
15074 d_setresgid='$d_setresgid'
15075 d_setresuid='$d_setresuid'
15076 d_setreuid='$d_setreuid'
15077 d_setrgid='$d_setrgid'
15078 d_setruid='$d_setruid'
15079 d_setsent='$d_setsent'
15080 d_setsid='$d_setsid'
15081 d_setspent='$d_setspent'
15082 d_setvbuf='$d_setvbuf'
15083 d_sfio='$d_sfio'
15084 d_shm='$d_shm'
15085 d_shmat='$d_shmat'
15086 d_shmatprototype='$d_shmatprototype'
15087 d_shmctl='$d_shmctl'
15088 d_shmdt='$d_shmdt'
15089 d_shmget='$d_shmget'
15090 d_sigaction='$d_sigaction'
15091 d_sigsetjmp='$d_sigsetjmp'
15092 d_socket='$d_socket'
15093 d_socklen_t='$d_socklen_t'
15094 d_sockpair='$d_sockpair'
15095 d_sqrtl='$d_sqrtl'
15096 d_statblks='$d_statblks'
15097 d_statfs_f_flags='$d_statfs_f_flags'
15098 d_statfs_s='$d_statfs_s'
15099 d_statvfs='$d_statvfs'
15100 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15101 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15102 d_stdio_stream_array='$d_stdio_stream_array'
15103 d_stdiobase='$d_stdiobase'
15104 d_stdstdio='$d_stdstdio'
15105 d_strchr='$d_strchr'
15106 d_strcoll='$d_strcoll'
15107 d_strctcpy='$d_strctcpy'
15108 d_strerrm='$d_strerrm'
15109 d_strerror='$d_strerror'
15110 d_strtod='$d_strtod'
15111 d_strtol='$d_strtol'
15112 d_strtold='$d_strtold'
15113 d_strtoll='$d_strtoll'
15114 d_strtoul='$d_strtoul'
15115 d_strtoull='$d_strtoull'
15116 d_strtouq='$d_strtouq'
15117 d_strxfrm='$d_strxfrm'
15118 d_suidsafe='$d_suidsafe'
15119 d_symlink='$d_symlink'
15120 d_syscall='$d_syscall'
15121 d_sysconf='$d_sysconf'
15122 d_sysernlst='$d_sysernlst'
15123 d_syserrlst='$d_syserrlst'
15124 d_system='$d_system'
15125 d_tcgetpgrp='$d_tcgetpgrp'
15126 d_tcsetpgrp='$d_tcsetpgrp'
15127 d_telldir='$d_telldir'
15128 d_telldirproto='$d_telldirproto'
15129 d_time='$d_time'
15130 d_times='$d_times'
15131 d_truncate='$d_truncate'
15132 d_tzname='$d_tzname'
15133 d_umask='$d_umask'
15134 d_uname='$d_uname'
15135 d_union_semun='$d_union_semun'
15136 d_ustat='$d_ustat'
15137 d_vendorbin='$d_vendorbin'
15138 d_vendorlib='$d_vendorlib'
15139 d_vfork='$d_vfork'
15140 d_void_closedir='$d_void_closedir'
15141 d_voidsig='$d_voidsig'
15142 d_voidtty='$d_voidtty'
15143 d_volatile='$d_volatile'
15144 d_vprintf='$d_vprintf'
15145 d_wait4='$d_wait4'
15146 d_waitpid='$d_waitpid'
15147 d_wcstombs='$d_wcstombs'
15148 d_wctomb='$d_wctomb'
15149 d_xenix='$d_xenix'
15150 date='$date'
15151 db_hashtype='$db_hashtype'
15152 db_prefixtype='$db_prefixtype'
15153 defvoidused='$defvoidused'
15154 direntrytype='$direntrytype'
15155 dlext='$dlext'
15156 dlsrc='$dlsrc'
15157 doublesize='$doublesize'
15158 drand01='$drand01'
15159 dynamic_ext='$dynamic_ext'
15160 eagain='$eagain'
15161 ebcdic='$ebcdic'
15162 echo='$echo'
15163 egrep='$egrep'
15164 emacs='$emacs'
15165 eunicefix='$eunicefix'
15166 exe_ext='$exe_ext'
15167 expr='$expr'
15168 extensions='$extensions'
15169 fflushNULL='$fflushNULL'
15170 fflushall='$fflushall'
15171 find='$find'
15172 firstmakefile='$firstmakefile'
15173 flex='$flex'
15174 fpossize='$fpossize'
15175 fpostype='$fpostype'
15176 freetype='$freetype'
15177 full_ar='$full_ar'
15178 full_csh='$full_csh'
15179 full_sed='$full_sed'
15180 gccversion='$gccversion'
15181 gidformat='$gidformat'
15182 gidsign='$gidsign'
15183 gidsize='$gidsize'
15184 gidtype='$gidtype'
15185 glibpth='$glibpth'
15186 grep='$grep'
15187 groupcat='$groupcat'
15188 groupstype='$groupstype'
15189 gzip='$gzip'
15190 h_fcntl='$h_fcntl'
15191 h_sysfile='$h_sysfile'
15192 hint='$hint'
15193 hostcat='$hostcat'
15194 huge='$huge'
15195 i16size='$i16size'
15196 i16type='$i16type'
15197 i32size='$i32size'
15198 i32type='$i32type'
15199 i64size='$i64size'
15200 i64type='$i64type'
15201 i8size='$i8size'
15202 i8type='$i8type'
15203 i_arpainet='$i_arpainet'
15204 i_bsdioctl='$i_bsdioctl'
15205 i_db='$i_db'
15206 i_dbm='$i_dbm'
15207 i_dirent='$i_dirent'
15208 i_dld='$i_dld'
15209 i_dlfcn='$i_dlfcn'
15210 i_fcntl='$i_fcntl'
15211 i_float='$i_float'
15212 i_gdbm='$i_gdbm'
15213 i_grp='$i_grp'
15214 i_iconv='$i_iconv'
15215 i_inttypes='$i_inttypes'
15216 i_limits='$i_limits'
15217 i_locale='$i_locale'
15218 i_machcthr='$i_machcthr'
15219 i_malloc='$i_malloc'
15220 i_math='$i_math'
15221 i_memory='$i_memory'
15222 i_mntent='$i_mntent'
15223 i_ndbm='$i_ndbm'
15224 i_netdb='$i_netdb'
15225 i_neterrno='$i_neterrno'
15226 i_netinettcp='$i_netinettcp'
15227 i_niin='$i_niin'
15228 i_poll='$i_poll'
15229 i_pthread='$i_pthread'
15230 i_pwd='$i_pwd'
15231 i_rpcsvcdbm='$i_rpcsvcdbm'
15232 i_sfio='$i_sfio'
15233 i_sgtty='$i_sgtty'
15234 i_shadow='$i_shadow'
15235 i_socks='$i_socks'
15236 i_stdarg='$i_stdarg'
15237 i_stddef='$i_stddef'
15238 i_stdlib='$i_stdlib'
15239 i_string='$i_string'
15240 i_sunmath='$i_sunmath'
15241 i_sysaccess='$i_sysaccess'
15242 i_sysdir='$i_sysdir'
15243 i_sysfile='$i_sysfile'
15244 i_sysfilio='$i_sysfilio'
15245 i_sysin='$i_sysin'
15246 i_sysioctl='$i_sysioctl'
15247 i_syslog='$i_syslog'
15248 i_sysmman='$i_sysmman'
15249 i_sysmode='$i_sysmode'
15250 i_sysmount='$i_sysmount'
15251 i_sysndir='$i_sysndir'
15252 i_sysparam='$i_sysparam'
15253 i_sysresrc='$i_sysresrc'
15254 i_syssecrt='$i_syssecrt'
15255 i_sysselct='$i_sysselct'
15256 i_syssockio='$i_syssockio'
15257 i_sysstat='$i_sysstat'
15258 i_sysstatfs='$i_sysstatfs'
15259 i_sysstatvfs='$i_sysstatvfs'
15260 i_systime='$i_systime'
15261 i_systimek='$i_systimek'
15262 i_systimes='$i_systimes'
15263 i_systypes='$i_systypes'
15264 i_sysuio='$i_sysuio'
15265 i_sysun='$i_sysun'
15266 i_sysutsname='$i_sysutsname'
15267 i_sysvfs='$i_sysvfs'
15268 i_syswait='$i_syswait'
15269 i_termio='$i_termio'
15270 i_termios='$i_termios'
15271 i_time='$i_time'
15272 i_unistd='$i_unistd'
15273 i_ustat='$i_ustat'
15274 i_utime='$i_utime'
15275 i_values='$i_values'
15276 i_varargs='$i_varargs'
15277 i_varhdr='$i_varhdr'
15278 i_vfork='$i_vfork'
15279 ignore_versioned_solibs='$ignore_versioned_solibs'
15280 inc_version_list='$inc_version_list'
15281 inc_version_list_init='$inc_version_list_init'
15282 incpath='$incpath'
15283 inews='$inews'
15284 installarchlib='$installarchlib'
15285 installbin='$installbin'
15286 installman1dir='$installman1dir'
15287 installman3dir='$installman3dir'
15288 installprefix='$installprefix'
15289 installprefixexp='$installprefixexp'
15290 installprivlib='$installprivlib'
15291 installscript='$installscript'
15292 installsitearch='$installsitearch'
15293 installsitebin='$installsitebin'
15294 installsitelib='$installsitelib'
15295 installstyle='$installstyle'
15296 installusrbinperl='$installusrbinperl'
15297 installvendorbin='$installvendorbin'
15298 installvendorlib='$installvendorlib'
15299 intsize='$intsize'
15300 ivdformat='$ivdformat'
15301 ivsize='$ivsize'
15302 ivtype='$ivtype'
15303 known_extensions='$known_extensions'
15304 ksh='$ksh'
15305 large='$large'
15306 ld='$ld'
15307 lddlflags='$lddlflags'
15308 ldflags='$ldflags'
15309 ldlibpthname='$ldlibpthname'
15310 less='$less'
15311 lib_ext='$lib_ext'
15312 libc='$libc'
15313 libperl='$libperl'
15314 libpth='$libpth'
15315 libs='$libs'
15316 libsdirs='$libsdirs'
15317 libsfiles='$libsfiles'
15318 libsfound='$libsfound'
15319 libspath='$libspath'
15320 libswanted='$libswanted'
15321 line='$line'
15322 lint='$lint'
15323 lkflags='$lkflags'
15324 ln='$ln'
15325 lns='$lns'
15326 locincpth='$locincpth'
15327 loclibpth='$loclibpth'
15328 longdblsize='$longdblsize'
15329 longlongsize='$longlongsize'
15330 longsize='$longsize'
15331 lp='$lp'
15332 lpr='$lpr'
15333 ls='$ls'
15334 lseeksize='$lseeksize'
15335 lseektype='$lseektype'
15336 mail='$mail'
15337 mailx='$mailx'
15338 make='$make'
15339 make_set_make='$make_set_make'
15340 mallocobj='$mallocobj'
15341 mallocsrc='$mallocsrc'
15342 malloctype='$malloctype'
15343 man1dir='$man1dir'
15344 man1direxp='$man1direxp'
15345 man1ext='$man1ext'
15346 man3dir='$man3dir'
15347 man3direxp='$man3direxp'
15348 man3ext='$man3ext'
15349 medium='$medium'
15350 mips_type='$mips_type'
15351 mkdir='$mkdir'
15352 mmaptype='$mmaptype'
15353 models='$models'
15354 modetype='$modetype'
15355 more='$more'
15356 multiarch='$multiarch'
15357 mv='$mv'
15358 myarchname='$myarchname'
15359 mydomain='$mydomain'
15360 myhostname='$myhostname'
15361 myuname='$myuname'
15362 n='$n'
15363 netdb_hlen_type='$netdb_hlen_type'
15364 netdb_host_type='$netdb_host_type'
15365 netdb_name_type='$netdb_name_type'
15366 netdb_net_type='$netdb_net_type'
15367 nm='$nm'
15368 nm_opt='$nm_opt'
15369 nm_so_opt='$nm_so_opt'
15370 nonxs_ext='$nonxs_ext'
15371 nroff='$nroff'
15372 nvsize='$nvsize'
15373 nvtype='$nvtype'
15374 o_nonblock='$o_nonblock'
15375 obj_ext='$obj_ext'
15376 old_pthread_create_joinable='$old_pthread_create_joinable'
15377 optimize='$optimize'
15378 orderlib='$orderlib'
15379 osname='$osname'
15380 osvers='$osvers'
15381 package='$package'
15382 pager='$pager'
15383 passcat='$passcat'
15384 patchlevel='$patchlevel'
15385 path_sep='$path_sep'
15386 perl5='$perl5'
15387 perl='$perl'
15388 perladmin='$perladmin'
15389 perlpath='$perlpath'
15390 pg='$pg'
15391 phostname='$phostname'
15392 pidtype='$pidtype'
15393 plibpth='$plibpth'
15394 pm_apiversion='$pm_apiversion'
15395 pmake='$pmake'
15396 pr='$pr'
15397 prefix='$prefix'
15398 prefixexp='$prefixexp'
15399 privlib='$privlib'
15400 privlibexp='$privlibexp'
15401 prototype='$prototype'
15402 ptrsize='$ptrsize'
15403 quadkind='$quadkind'
15404 quadtype='$quadtype'
15405 randbits='$randbits'
15406 randfunc='$randfunc'
15407 randseedtype='$randseedtype'
15408 ranlib='$ranlib'
15409 rd_nodata='$rd_nodata'
15410 revision='$revision'
15411 rm='$rm'
15412 rmail='$rmail'
15413 runnm='$runnm'
15414 sPRIEldbl='$sPRIEldbl'
15415 sPRIFldbl='$sPRIFldbl'
15416 sPRIGldbl='$sPRIGldbl'
15417 sPRIX64='$sPRIX64'
15418 sPRId64='$sPRId64'
15419 sPRIeldbl='$sPRIeldbl'
15420 sPRIfldbl='$sPRIfldbl'
15421 sPRIgldbl='$sPRIgldbl'
15422 sPRIi64='$sPRIi64'
15423 sPRIo64='$sPRIo64'
15424 sPRIu64='$sPRIu64'
15425 sPRIx64='$sPRIx64'
15426 sched_yield='$sched_yield'
15427 scriptdir='$scriptdir'
15428 scriptdirexp='$scriptdirexp'
15429 sed='$sed'
15430 seedfunc='$seedfunc'
15431 selectminbits='$selectminbits'
15432 selecttype='$selecttype'
15433 sendmail='$sendmail'
15434 sh='$sh'
15435 shar='$shar'
15436 sharpbang='$sharpbang'
15437 shmattype='$shmattype'
15438 shortsize='$shortsize'
15439 shrpenv='$shrpenv'
15440 shsharp='$shsharp'
15441 sig_count='$sig_count'
15442 sig_name='$sig_name'
15443 sig_name_init='$sig_name_init'
15444 sig_num='$sig_num'
15445 sig_num_init='$sig_num_init'
15446 signal_t='$signal_t'
15447 sitearch='$sitearch'
15448 sitearchexp='$sitearchexp'
15449 sitebin='$sitebin'
15450 sitebinexp='$sitebinexp'
15451 sitelib='$sitelib'
15452 sitelibexp='$sitelibexp'
15453 siteprefix='$siteprefix'
15454 siteprefixexp='$siteprefixexp'
15455 sizetype='$sizetype'
15456 sleep='$sleep'
15457 smail='$smail'
15458 small='$small'
15459 so='$so'
15460 sockethdr='$sockethdr'
15461 socketlib='$socketlib'
15462 socksizetype='$socksizetype'
15463 sort='$sort'
15464 spackage='$spackage'
15465 spitshell='$spitshell'
15466 split='$split'
15467 src='$src'
15468 ssizetype='$ssizetype'
15469 startperl='$startperl'
15470 startsh='$startsh'
15471 static_ext='$static_ext'
15472 stdchar='$stdchar'
15473 stdio_base='$stdio_base'
15474 stdio_bufsiz='$stdio_bufsiz'
15475 stdio_cnt='$stdio_cnt'
15476 stdio_filbuf='$stdio_filbuf'
15477 stdio_ptr='$stdio_ptr'
15478 stdio_stream_array='$stdio_stream_array'
15479 strings='$strings'
15480 submit='$submit'
15481 subversion='$subversion'
15482 sysman='$sysman'
15483 tail='$tail'
15484 tar='$tar'
15485 tbl='$tbl'
15486 tee='$tee'
15487 test='$test'
15488 timeincl='$timeincl'
15489 timetype='$timetype'
15490 touch='$touch'
15491 tr='$tr'
15492 trnl='$trnl'
15493 troff='$troff'
15494 u16size='$u16size'
15495 u16type='$u16type'
15496 u32size='$u32size'
15497 u32type='$u32type'
15498 u64size='$u64size'
15499 u64type='$u64type'
15500 u8size='$u8size'
15501 u8type='$u8type'
15502 uidformat='$uidformat'
15503 uidsign='$uidsign'
15504 uidsize='$uidsize'
15505 uidtype='$uidtype'
15506 uname='$uname'
15507 uniq='$uniq'
15508 uquadtype='$uquadtype'
15509 use5005threads='$use5005threads'
15510 use64bitall='$use64bitall'
15511 use64bitint='$use64bitint'
15512 usedl='$usedl'
15513 useithreads='$useithreads'
15514 uselargefiles='$uselargefiles'
15515 uselongdouble='$uselongdouble'
15516 usemorebits='$usemorebits'
15517 usemultiplicity='$usemultiplicity'
15518 usemymalloc='$usemymalloc'
15519 usenm='$usenm'
15520 useopcode='$useopcode'
15521 useperlio='$useperlio'
15522 useposix='$useposix'
15523 usesfio='$usesfio'
15524 useshrplib='$useshrplib'
15525 usesocks='$usesocks'
15526 usethreads='$usethreads'
15527 usevendorprefix='$usevendorprefix'
15528 usevfork='$usevfork'
15529 usrinc='$usrinc'
15530 uuname='$uuname'
15531 uvoformat='$uvoformat'
15532 uvsize='$uvsize'
15533 uvtype='$uvtype'
15534 uvuformat='$uvuformat'
15535 uvxformat='$uvxformat'
15536 vendorbin='$vendorbin'
15537 vendorbinexp='$vendorbinexp'
15538 vendorlib='$vendorlib'
15539 vendorlibexp='$vendorlibexp'
15540 vendorprefix='$vendorprefix'
15541 vendorprefixexp='$vendorprefixexp'
15542 version='$version'
15543 vi='$vi'
15544 voidflags='$voidflags'
15545 xlibpth='$xlibpth'
15546 xs_apiversion='$xs_apiversion'
15547 zcat='$zcat'
15548 zip='$zip'
15549 EOT
15550
15551 : Add in command line options if available
15552 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15553
15554 : add special variables
15555 $test -f $src/patchlevel.h && \
15556 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15557 echo "CONFIGDOTSH=true" >>config.sh
15558
15559 : propagate old symbols
15560 if $test -f UU/config.sh; then
15561         <UU/config.sh sort | uniq >UU/oldconfig.sh
15562         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15563         sort | uniq -u >UU/oldsyms
15564         set X `cat UU/oldsyms`
15565         shift
15566         case $# in
15567         0) ;;
15568         *)
15569                 cat <<EOM
15570 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15571 EOM
15572                 echo "# Variables propagated from previous config.sh file." >>config.sh
15573                 for sym in `cat UU/oldsyms`; do
15574                         echo "    Propagating $hint variable "'$'"$sym..."
15575                         eval 'tmp="$'"${sym}"'"'
15576                         echo "$tmp" | \
15577                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15578                 done
15579                 ;;
15580         esac
15581 fi
15582
15583 : Finish up by extracting the .SH files
15584 case "$alldone" in
15585 exit)
15586         $rm -rf UU
15587         echo "Done."
15588         exit 0
15589         ;;
15590 cont)
15591         ;;
15592 '')
15593         dflt=''
15594         nostick=true
15595         $cat <<EOM
15596
15597 If you'd like to make any changes to the config.sh file before I begin
15598 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15599
15600 EOM
15601         rp="Press return or use a shell escape to edit config.sh:"
15602         . UU/myread
15603         nostick=''
15604         case "$ans" in
15605         '') ;;
15606         *) : in case they cannot read
15607                 sh 1>&4 -c "$ans";;
15608         esac
15609         ;;
15610 esac
15611
15612 : if this fails, just run all the .SH files by hand
15613 . ./config.sh
15614
15615 echo " "
15616 exec 1>&4
15617 . ./UU/extract
15618
15619 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15620         dflt=y
15621         case "$silent" in
15622         true) ;;
15623         *)
15624                 $cat <<EOM
15625
15626 Now you need to generate make dependencies by running "$make depend".
15627 You might prefer to run it in background: "$make depend > makedepend.out &"
15628 It can take a while, so you might not want to run it right now.
15629
15630 EOM
15631                 ;;
15632         esac
15633         rp="Run $make depend now?"
15634         . UU/myread
15635         case "$ans" in
15636         y*)
15637                 $make depend && echo "Now you must run a $make."
15638                 ;;
15639         *)
15640                 echo "You must run '$make depend' then '$make'."
15641                 ;;
15642         esac
15643 elif test -f [Mm]akefile; then
15644         echo " "
15645         echo "Now you must run a $make."
15646 else
15647         echo "Done."
15648 fi
15649
15650 if $test -f Policy.sh; then
15651     $cat <<EOM
15652
15653 If you compile $package on a different machine or from a different object
15654 directory, copy the Policy.sh file from this object directory to the
15655 new one before you run Configure -- this will help you with most of
15656 the policy defaults.
15657
15658 EOM
15659 fi
15660 if $test -f config.msg; then
15661     echo "Hmm.  I also noted the following information while running:"
15662     echo " "
15663     $cat config.msg >&4
15664     $rm -f config.msg
15665 fi
15666 $rm -f kit*isdone ark*isdone
15667 $rm -rf UU
15668
15669 : End of Configure
15670