nit from Spider Boardman
[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 Thu Mar  2 19:38:01 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 uselargefiles.cbu; then
4341                 echo "Your platform has some specific hints for large file builds, using them..."
4342                 . ./uselargefiles.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 case "$uselonglong" in
4417 "$define"|true|[yY]*)
4418         cat <<EOM >&4
4419
4420 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4421 EOM
4422         use64bitint="$define"
4423         ;;
4424 esac                          
4425 case "$use64bits" in
4426 "$define"|true|[yY]*)
4427         cat <<EOM >&4
4428
4429 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4430 EOM
4431         use64bitint="$define"
4432         ;;
4433 esac                          
4434 case "$use64bitints" in
4435 "$define"|true|[yY]*)
4436         cat <<EOM >&4
4437
4438 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4439 EOM
4440         use64bitint="$define"
4441         ;;
4442 esac                          
4443 case "$use64bitsint" in
4444 "$define"|true|[yY]*)
4445         cat <<EOM >&4
4446
4447 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4448 EOM
4449         use64bitint="$define"
4450         ;;
4451 esac                          
4452 case "$uselonglongs" in
4453 "$define"|true|[yY]*)
4454         cat <<EOM >&4
4455
4456 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4457 EOM
4458         use64bitint="$define"
4459         ;;
4460 esac                          
4461 case "$use64bitsall" in
4462 "$define"|true|[yY]*)
4463         cat <<EOM >&4
4464
4465 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4466 EOM
4467         use64bitall="$define"
4468         ;;
4469 esac                          
4470
4471 case "$ccflags" in
4472 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4473 esac
4474 case "$use64bitall" in
4475 "$define"|true|[yY]*) use64bitint="$define" ;;
4476 esac
4477
4478 case "$longsize" in
4479 8) cat <<EOM
4480
4481 You have natively 64-bit long integers.
4482 EOM
4483    val="$define"
4484    ;;
4485 *) case "$use64bitint" in
4486    "$define"|true|[yY]*) dflt='y';;
4487    *) dflt='n';;
4488    esac
4489    cat <<EOM
4490
4491 Perl can be built to take advantage of 64-bit integer types
4492 on some systems.  To do so, Configure can be run with -Duse64bitint.
4493 Choosing this option will most probably introduce binary incompatibilities.
4494
4495 If this doesn't make any sense to you, just accept the default '$dflt'.
4496 EOM
4497    rp='Try to use 64-bit integers, if available?'
4498    . ./myread
4499    case "$ans" in
4500    [yY]*) val="$define" ;;
4501    *)     val="$undef"  ;;
4502    esac
4503    ;;
4504 esac
4505 set use64bitint
4506 eval $setvar
4507
4508 cat <<EOM
4509
4510 You may also choose to try maximal 64-bitness.  It means using as much
4511 64-bitness as possible on the platform.  This in turn means even more
4512 binary incompatibilities.  On the other hand, your platform may not
4513 have any more 64-bitness available than what you already have chosen.
4514
4515 If this doesn't make any sense to you, just accept the default '$dflt'.
4516 EOM
4517 rp='Try to use maximal 64-bit support, if available?'
4518 case "$use64bitall" in
4519 "$define"|true|[yY]*) dflt='y' ;;
4520 *) case "$longsize" in
4521    8) dflt='y' ;;
4522    *) dflt='n' ;;
4523    esac
4524    ;;
4525 esac    
4526 . ./myread
4527 case "$ans" in
4528 [yY]*) val="$define" ;;
4529 *)     val="$undef"  ;;
4530 esac
4531 set use64bitall
4532 eval $setvar
4533 case "$use64bitall" in
4534 "$define")
4535         case "$use64bitint" in
4536         "$undef")
4537                 cat <<EOM
4538
4539 Since you have chosen a maximally 64-bit build, I'm also turning on
4540 the use of 64-bit integers.
4541 EOM
4542                 use64bitint="$define" ;;
4543         esac
4544         ;;
4545 esac
4546
4547 case "$use64bitint" in
4548 "$define"|true|[yY]*)
4549 : Look for a hint-file generated 'call-back-unit'.  If the
4550 : user has specified that a 64-bit perl is to be built,
4551 : we may need to set or change some other defaults.
4552         if $test -f use64bitint.cbu; then
4553                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4554                 . ./use64bitint.cbu
4555         fi
4556         case "$longsize" in
4557         4) case "$archname64" in
4558            '') archname64=64int ;;
4559            esac
4560            ;;
4561         esac
4562         ;;
4563 esac
4564
4565 case "$use64bitall" in
4566 "$define"|true|[yY]*)
4567 : Look for a hint-file generated 'call-back-unit'.  If the
4568 : user has specified that a maximally 64-bit perl is to be built,
4569 : we may need to set or change some other defaults.
4570         if $test -f use64bitall.cbu; then
4571                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4572                 . ./use64bitall.cbu
4573         fi
4574         case "$longsize" in
4575         4) case "$archname64" in
4576            ''|64int) archname64=64all ;;
4577            esac
4578            ;;
4579         esac
4580         ;;
4581 esac
4582
4583 : determine the architecture name
4584 echo " "
4585 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4586         tarch=`arch`"-$osname"
4587 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4588         if uname -m > tmparch 2>&1 ; then
4589                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4590                         -e 's/$/'"-$osname/" tmparch`
4591         else
4592                 tarch="$osname"
4593         fi
4594         $rm -f tmparch
4595 else
4596         tarch="$osname"
4597 fi
4598 case "$myarchname" in
4599 ''|"$tarch") ;;
4600 *)
4601         echo "(Your architecture name used to be $myarchname.)"
4602         archname=''
4603         ;;
4604 esac
4605 myarchname="$tarch"
4606 case "$archname" in
4607 '') dflt="$tarch";;
4608 *) dflt="$archname";;
4609 esac
4610 rp='What is your architecture name'
4611 . ./myread
4612 archname="$ans"
4613 case "$usethreads" in
4614 $define)
4615         echo "Threads selected." >&4
4616         case "$archname" in
4617         *-thread*) echo "...and architecture name already has -thread." >&4
4618                 ;;
4619         *)      archname="$archname-thread"
4620                 echo "...setting architecture name to $archname." >&4
4621                 ;;
4622         esac
4623         ;;
4624 esac
4625 case "$usemultiplicity" in
4626 $define)
4627         echo "Multiplicity selected." >&4
4628         case "$archname" in
4629         *-multi*) echo "...and architecture name already has -multi." >&4
4630                 ;;
4631         *)      archname="$archname-multi"
4632                 echo "...setting architecture name to $archname." >&4
4633                 ;;
4634         esac
4635         ;;
4636 esac
4637 case "$use64bitint" in
4638 $define)
4639         case "$archname64" in
4640         '')
4641                 ;;
4642         *)
4643                 case "$archname" in
4644                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4645                         ;;
4646                 *)      archname="$archname-$archname64"
4647                         echo "...setting architecture name to $archname." >&4
4648                         ;;
4649                 esac
4650                 ;;
4651         esac
4652 esac
4653
4654 : determine root of directory hierarchy where package will be installed.
4655 case "$prefix" in
4656 '')
4657         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4658         ;;
4659 *)
4660         dflt="$prefix"
4661         ;;
4662 esac
4663 $cat <<EOM
4664
4665 By default, $package will be installed in $dflt/bin, manual pages
4666 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4667 installation directories. Typically this is something like /usr/local.
4668 If you wish to have binaries under /usr/bin but other parts of the
4669 installation under /usr/local, that's ok: you will be prompted
4670 separately for each of the installation directories, the prefix being
4671 only used to set the defaults.
4672
4673 EOM
4674 fn=d~
4675 rp='Installation prefix to use?'
4676 . ./getfile
4677 oldprefix=''
4678 case "$prefix" in
4679 '') ;;
4680 *)
4681         case "$ans" in
4682         "$prefix") ;;
4683         *) oldprefix="$prefix";;
4684         esac
4685         ;;
4686 esac
4687 prefix="$ans"
4688 prefixexp="$ansexp"
4689
4690 : is AFS running?
4691 echo " "
4692 case "$afs" in
4693 $define|true)   afs=true ;;
4694 $undef|false)   afs=false ;;
4695 *)      if test -d /afs; then
4696                 afs=true
4697         else
4698                 afs=false
4699         fi
4700         ;;
4701 esac
4702 if $afs; then
4703         echo "AFS may be running... I'll be extra cautious then..." >&4
4704 else
4705         echo "AFS does not seem to be running..." >&4
4706 fi
4707
4708 : determine installation prefix for where package is to be installed.
4709 if $afs; then 
4710 $cat <<EOM
4711
4712 Since you are running AFS, I need to distinguish the directory in which
4713 files will reside from the directory in which they are installed (and from
4714 which they are presumably copied to the former directory by occult means).
4715
4716 EOM
4717         case "$installprefix" in
4718         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4719         *) dflt="$installprefix";;
4720         esac
4721 else
4722 $cat <<EOM
4723
4724 In some special cases, particularly when building $package for distribution,
4725 it is convenient to distinguish between the directory in which files should 
4726 be installed from the directory ($prefix) in which they 
4727 will eventually reside.  For most users, these two directories are the same.
4728
4729 EOM
4730         case "$installprefix" in
4731         '') dflt=$prefix ;;
4732         *) dflt=$installprefix;;
4733         esac
4734 fi
4735 fn=d~
4736 rp='What installation prefix should I use for installing files?'
4737 . ./getfile
4738 installprefix="$ans"
4739 installprefixexp="$ansexp"
4740
4741 : set the prefixit variable, to compute a suitable default value
4742 prefixit='case "$3" in
4743 ""|none)
4744         case "$oldprefix" in
4745         "") eval "$1=\"\$$2\"";;
4746         *)
4747                 case "$3" in
4748                 "") eval "$1=";;
4749                 none)
4750                         eval "tp=\"\$$2\"";
4751                         case "$tp" in
4752                         ""|" ") eval "$1=\"\$$2\"";;
4753                         *) eval "$1=";;
4754                         esac;;
4755                 esac;;
4756         esac;;
4757 *)
4758         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4759         case "$tp" in
4760         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4761         /*-$oldprefix/*|\~*-$oldprefix/*)
4762                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4763         *) eval "$1=\"\$$2\"";;
4764         esac;;
4765 esac'
4766
4767
4768 : get the patchlevel
4769 echo " "
4770 echo "Getting the current patchlevel..." >&4
4771 if $test -r $rsrc/patchlevel.h;then
4772         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4773         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4774         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4775         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4776         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4777         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4778 else
4779         revision=0
4780         patchlevel=0
4781         subversion=0
4782         api_revision=0
4783         api_version=0
4784         api_subversion=0
4785 fi
4786 $echo $n "(You have $package revision $revision" $c
4787 $echo $n " patchlevel $patchlevel" $c
4788 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4789 echo ".)"
4790 case "$osname" in
4791 dos|vms)
4792         : XXX Should be a Configure test for double-dots in filenames.
4793         version=`echo $revision $patchlevel $subversion | \
4794                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4795         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4796                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4797         ;;
4798 *)
4799         version=`echo $revision $patchlevel $subversion | \
4800                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4801         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4802                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4803         ;;
4804 esac
4805 : Special case the 5.005_xx maintenance series, which used 5.005
4806 : without any subversion label as a subdirectory in $sitelib
4807 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4808         api_versionstring='5.005'
4809 fi
4810
4811 : determine installation style
4812 : For now, try to deduce it from prefix unless it is already set.
4813 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4814 case "$installstyle" in
4815 '')     case "$prefix" in
4816                 *perl*) dflt='lib';;
4817                 *) dflt='lib/perl5' ;;
4818         esac
4819         ;;
4820 *)      dflt='lib/perl5' ;;
4821 esac
4822 : Probably not worth prompting for this since we prompt for all
4823 : the directories individually, and the prompt would be too long and
4824 : confusing anyway.
4825 installstyle=$dflt
4826
4827 : determine where private library files go
4828 : Usual default is /usr/local/lib/perl5/$version.
4829 : Also allow things like /opt/perl/lib/$version, since 
4830 : /opt/perl/lib/perl5... would be redundant.
4831 : The default "style" setting is made in installstyle.U
4832 case "$installstyle" in
4833 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4834 *)       set dflt privlib lib/$version ;;
4835 esac
4836 eval $prefixit
4837 $cat <<EOM
4838
4839 There are some auxiliary files for $package that need to be put into a
4840 private library directory that is accessible by everyone.
4841
4842 EOM
4843 fn=d~+
4844 rp='Pathname where the private library files will reside?'
4845 . ./getfile
4846 privlib="$ans"
4847 privlibexp="$ansexp"
4848 : Change installation prefix, if necessary.
4849 if $test X"$prefix" != X"$installprefix"; then
4850         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4851 else
4852         installprivlib="$privlibexp"
4853 fi
4854
4855 : set the prefixup variable, to restore leading tilda escape
4856 prefixup='case "$prefixexp" in
4857 "$prefix") ;;
4858 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4859 esac'
4860
4861 : determine where public architecture dependent libraries go
4862 set archlib archlib
4863 eval $prefixit
4864 : privlib default is /usr/local/lib/$package/$version
4865 : archlib default is /usr/local/lib/$package/$version/$archname
4866 : privlib may have an optional trailing /share.
4867 tdflt=`echo $privlib | $sed 's,/share$,,'`
4868 tdflt=$tdflt/$archname
4869 case "$archlib" in
4870 '')     dflt=$tdflt
4871         ;;
4872 *)      dflt="$archlib"
4873     ;;
4874 esac
4875 $cat <<EOM
4876
4877 $spackage contains architecture-dependent library files.  If you are
4878 sharing libraries in a heterogeneous environment, you might store
4879 these files in a separate location.  Otherwise, you can just include
4880 them with the rest of the public library files.
4881
4882 EOM
4883 fn=d+~
4884 rp='Where do you want to put the public architecture-dependent libraries?'
4885 . ./getfile
4886 archlib="$ans"
4887 archlibexp="$ansexp"
4888 if $test X"$archlib" = X"$privlib"; then
4889         d_archlib="$undef"
4890 else
4891         d_archlib="$define"
4892 fi
4893 : Change installation prefix, if necessary.
4894 if $test X"$prefix" != X"$installprefix"; then
4895         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4896 else
4897         installarchlib="$archlibexp"
4898 fi
4899
4900
4901 : Binary compatibility with 5.005 is not possible for builds
4902 : with advanced features
4903 case "$usethreads$usemultiplicity" in
4904 *define*)
4905         bincompat5005="$undef"
4906         d_bincompat5005="$undef"
4907         ;;
4908 *)      $cat <<EOM
4909
4910 Perl 5.006 can be compiled for binary compatibility with 5.005.
4911 If you decide to do so, you will be able to continue using most
4912 of the extensions that were compiled for Perl 5.005.
4913
4914 EOM
4915         case "$bincompat5005$d_bincompat5005" in
4916         *"$undef"*) dflt=n ;;
4917         *) dflt=y ;;
4918         esac
4919         rp='Binary compatibility with Perl 5.005?'
4920         . ./myread
4921         case "$ans" in
4922         y*) val="$define" ;;
4923         *)  val="$undef" ;;
4924         esac
4925         set d_bincompat5005
4926         eval $setvar
4927         case "$d_bincompat5005" in
4928         "$define")
4929                 bincompat5005="$define"
4930                 ;;
4931         *)      bincompat5005="$undef"
4932                 d_bincompat5005="$undef"
4933                 ;;
4934         esac
4935         ;;
4936 esac
4937
4938
4939 : see if setuid scripts can be secure
4940 $cat <<EOM
4941
4942 Some kernels have a bug that prevents setuid #! scripts from being
4943 secure.  Some sites have disabled setuid #! scripts because of this.
4944
4945 First let's decide if your kernel supports secure setuid #! scripts.
4946 (If setuid #! scripts would be secure but have been disabled anyway,
4947 don't say that they are secure if asked.)
4948
4949 EOM
4950
4951 val="$undef"
4952 if $test -d /dev/fd; then
4953         echo "#!$ls" >reflect
4954         chmod +x,u+s reflect
4955         ./reflect >flect 2>&1
4956         if $contains "/dev/fd" flect >/dev/null; then
4957                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4958                 val="$define"
4959         else
4960                 $cat <<EOM
4961 If you are not sure if they are secure, I can check but I'll need a
4962 username and password different from the one you are using right now.
4963 If you don't have such a username or don't want me to test, simply
4964 enter 'none'.
4965
4966 EOM
4967                 rp='Other username to test security of setuid scripts with?'
4968                 dflt='none'
4969                 . ./myread
4970                 case "$ans" in
4971                 n|none)
4972                         case "$d_suidsafe" in
4973                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4974                                 dflt=n;;
4975                         "$undef")
4976                                 echo "Well, the $hint value is *not* secure." >&4
4977                                 dflt=n;;
4978                         *)      echo "Well, the $hint value *is* secure." >&4
4979                                 dflt=y;;
4980                         esac
4981                         ;;
4982                 *)
4983                         $rm -f reflect flect
4984                         echo "#!$ls" >reflect
4985                         chmod +x,u+s reflect
4986                         echo >flect
4987                         chmod a+w flect
4988                         echo '"su" will (probably) prompt you for '"$ans's password."
4989                         su $ans -c './reflect >flect'
4990                         if $contains "/dev/fd" flect >/dev/null; then
4991                                 echo "Okay, it looks like setuid scripts are secure." >&4
4992                                 dflt=y
4993                         else
4994                                 echo "I don't think setuid scripts are secure." >&4
4995                                 dflt=n
4996                         fi
4997                         ;;
4998                 esac
4999                 rp='Does your kernel have *secure* setuid scripts?'
5000                 . ./myread
5001                 case "$ans" in
5002                 [yY]*)  val="$define";;
5003                 *)      val="$undef";;
5004                 esac
5005         fi
5006 else
5007         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5008         echo "(That's for file descriptors, not floppy disks.)"
5009         val="$undef"
5010 fi
5011 set d_suidsafe
5012 eval $setvar
5013
5014 $rm -f reflect flect
5015
5016 : now see if they want to do setuid emulation
5017 echo " "
5018 val="$undef"
5019 case "$d_suidsafe" in
5020 "$define")
5021         val="$undef"
5022         echo "No need to emulate SUID scripts since they are secure here." >& 4
5023         ;;
5024 *)
5025         $cat <<EOM
5026 Some systems have disabled setuid scripts, especially systems where
5027 setuid scripts cannot be secure.  On systems where setuid scripts have
5028 been disabled, the setuid/setgid bits on scripts are currently
5029 useless.  It is possible for $package to detect those bits and emulate
5030 setuid/setgid in a secure fashion.  This emulation will only work if
5031 setuid scripts have been disabled in your kernel.
5032
5033 EOM
5034         case "$d_dosuid" in
5035         "$define") dflt=y ;;
5036         *) dflt=n ;;
5037         esac
5038         rp="Do you want to do setuid/setgid emulation?"
5039         . ./myread
5040         case "$ans" in
5041         [yY]*)  val="$define";;
5042         *)      val="$undef";;
5043         esac
5044         ;;
5045 esac
5046 set d_dosuid
5047 eval $setvar
5048
5049 : determine filename position in cpp output
5050 echo " "
5051 echo "Computing filename position in cpp output for #include directives..." >&4
5052 echo '#include <stdio.h>' > foo.c
5053 $cat >fieldn <<EOF
5054 $startsh
5055 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5056 $grep '^[       ]*#.*stdio\.h' | \
5057 while read cline; do
5058         pos=1
5059         set \$cline
5060         while $test \$# -gt 0; do
5061                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5062                         echo "\$pos"
5063                         exit 0
5064                 fi
5065                 shift
5066                 pos=\`expr \$pos + 1\`
5067         done
5068 done
5069 EOF
5070 chmod +x fieldn
5071 fieldn=`./fieldn`
5072 $rm -f foo.c fieldn
5073 case $fieldn in
5074 '') pos='???';;
5075 1) pos=first;;
5076 2) pos=second;;
5077 3) pos=third;;
5078 *) pos="${fieldn}th";;
5079 esac
5080 echo "Your cpp writes the filename in the $pos field of the line."
5081
5082 : locate header file
5083 $cat >findhdr <<EOF
5084 $startsh
5085 wanted=\$1
5086 name=''
5087 for usrincdir in $usrinc
5088 do
5089         if test -f \$usrincdir/\$wanted; then
5090                 echo "\$usrincdir/\$wanted"
5091                 exit 0
5092         fi
5093 done
5094 awkprg='{ print \$$fieldn }'
5095 echo "#include <\$wanted>" > foo\$\$.c
5096 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5097 $grep "^[       ]*#.*\$wanted" | \
5098 while read cline; do
5099         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5100         case "\$name" in
5101         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5102         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5103         *) exit 2;;
5104         esac;
5105 done;
5106 #
5107 # status = 0: grep returned 0 lines, case statement not executed
5108 # status = 1: headerfile found
5109 # status = 2: while loop executed, no headerfile found
5110 #
5111 status=\$?
5112 $rm -f foo\$\$.c;
5113 if test \$status -eq 1; then
5114         exit 0;
5115 fi
5116 exit 1
5117 EOF
5118 chmod +x findhdr
5119
5120 : define an alternate in-header-list? function
5121 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5122 cont=true; xxf="echo \"<\$1> found.\" >&4";
5123 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5124 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5125 esac;
5126 case $# in 4) instead=instead;; *) instead="at last";; esac;
5127 while $test "$cont"; do
5128         xxx=`./findhdr $1`
5129         var=$2; eval "was=\$$2";
5130         if $test "$xxx" && $test -r "$xxx";
5131         then eval $xxf;
5132         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5133                 cont="";
5134         else eval $xxnf;
5135         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5136         set $yyy; shift; shift; yyy=$@;
5137         case $# in 0) cont="";;
5138         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5139                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5140         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5141                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5142         esac;
5143 done;
5144 while $test "$yyy";
5145 do set $yyy; var=$2; eval "was=\$$2";
5146         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5147         set $yyy; shift; shift; yyy=$@;
5148 done'
5149
5150 : see if this is a malloc.h system
5151 set malloc.h i_malloc
5152 eval $inhdr
5153
5154 : see if stdlib is available
5155 set stdlib.h i_stdlib
5156 eval $inhdr
5157
5158 : determine which malloc to compile in
5159 echo " "
5160 case "$usemymalloc" in
5161 ''|[yY]*|true|$define)  dflt='y' ;;
5162 *)      dflt='n' ;;
5163 esac
5164 rp="Do you wish to attempt to use the malloc that comes with $package?"
5165 . ./myread
5166 usemymalloc="$ans"
5167 case "$ans" in
5168 y*|true)
5169         usemymalloc='y'
5170         mallocsrc='malloc.c'
5171         mallocobj="malloc$_o"
5172         d_mymalloc="$define"
5173         case "$libs" in
5174         *-lmalloc*)
5175                 : Remove malloc from list of libraries to use
5176                 echo "Removing unneeded -lmalloc from library list" >&4
5177                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5178                 shift
5179                 libs="$*"
5180                 echo "libs = $libs" >&4
5181                 ;;
5182         esac
5183         ;;
5184 *)
5185         usemymalloc='n'
5186         mallocsrc=''
5187         mallocobj=''
5188         d_mymalloc="$undef"
5189         ;;
5190 esac
5191
5192 : compute the return types of malloc and free
5193 echo " "
5194 $cat >malloc.c <<END
5195 #$i_malloc I_MALLOC
5196 #$i_stdlib I_STDLIB
5197 #include <stdio.h>
5198 #include <sys/types.h>
5199 #ifdef I_MALLOC
5200 #include <malloc.h>
5201 #endif
5202 #ifdef I_STDLIB
5203 #include <stdlib.h>
5204 #endif
5205 #ifdef TRY_MALLOC
5206 void *malloc();
5207 #endif
5208 #ifdef TRY_FREE
5209 void free();
5210 #endif
5211 END
5212 case "$malloctype" in
5213 '')
5214         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5215                 malloctype='void *'
5216         else
5217                 malloctype='char *'
5218         fi
5219         ;;
5220 esac
5221 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5222
5223 case "$freetype" in
5224 '')
5225         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5226                 freetype='void'
5227         else
5228                 freetype='int'
5229         fi
5230         ;;
5231 esac
5232 echo "Your system uses $freetype free(), it would seem." >&4
5233 $rm -f malloc.[co]
5234 $cat <<EOM
5235
5236 The installation process will also create a directory for
5237 vendor-supplied add-ons.  Vendors who supply perl with their system
5238 may find it convenient to place all vendor-supplied files in this
5239 directory rather than in the main distribution directory.  This will
5240 ease upgrades between binary-compatible maintenance versions of perl.
5241
5242 Of course you may also use these directories in whatever way you see
5243 fit.  For example, you might use them to access modules shared over a
5244 company-wide network.
5245
5246 The default answer should be fine for most people.
5247 This causes further questions about vendor add-ons to be skipped
5248 and no vendor-specific directories will be configured for perl.
5249
5250 EOM
5251 rp='Do you want to configure vendor-specific add-on directories?'
5252 case "$usevendorprefix" in
5253 define|true|[yY]*) dflt=y ;;
5254 *)      : User may have set vendorprefix directly on Configure command line.
5255         case "$vendorprefix" in
5256         ''|' ') dflt=n ;;
5257         *)      dflt=y ;;
5258         esac
5259         ;;
5260 esac
5261 . ./myread
5262 case "$ans" in
5263 [yY]*)  fn=d~+
5264         rp='Installation prefix to use for vendor-supplied add-ons?'
5265         case "$vendorprefix" in
5266         '') dflt='' ;;
5267         *)  dflt=$vendorprefix ;;
5268         esac
5269         . ./getfile
5270         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5271         oldvendorprefix=''
5272         case "$vendorprefix" in
5273         '') ;;
5274         *)      case "$ans" in
5275                 "$prefix") ;;
5276                 *) oldvendorprefix="$prefix";;
5277                 esac
5278                 ;;
5279         esac
5280         usevendorprefix="$define"
5281         vendorprefix="$ans"
5282         vendorprefixexp="$ansexp"
5283         ;;
5284 *)      usevendorprefix="$undef"
5285         vendorprefix=''
5286         vendorprefixexp=''
5287         ;;
5288 esac
5289
5290 case "$vendorprefix" in
5291 '')     d_vendorlib="$undef"
5292         vendorlib=''
5293         vendorlibexp=''
5294         ;;
5295 *)      d_vendorlib="$define"
5296         : determine where vendor-supplied modules go.
5297         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5298         case "$vendorlib" in
5299         '')
5300                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5301                 case "$installstyle" in
5302                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5303                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5304                 esac
5305                 ;;
5306         *)      dflt="$vendorlib"
5307                 ;;
5308         esac
5309         fn=d~+
5310         rp='Pathname for the vendor-supplied library files?'
5311         . ./getfile
5312         vendorlib="$ans"
5313         vendorlibexp="$ansexp"
5314         ;;
5315 esac
5316 : Change installation prefix, if necessary.
5317 if $test X"$prefix" != X"$installprefix"; then
5318         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5319 else
5320         installvendorlib="$vendorlibexp"
5321 fi
5322
5323 : Cruising for prototypes
5324 echo " "
5325 echo "Checking out function prototypes..." >&4
5326 $cat >prototype.c <<'EOCP'
5327 int main(int argc, char *argv[]) {
5328         exit(0);}
5329 EOCP
5330 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5331         echo "Your C compiler appears to support function prototypes."
5332         val="$define"
5333 else
5334         echo "Your C compiler doesn't seem to understand function prototypes."
5335         val="$undef"
5336 fi
5337 set prototype
5338 eval $setvar
5339 $rm -f prototype*
5340
5341 case "$prototype" in
5342 "$define") ;;
5343 *)      ansi2knr='ansi2knr'
5344         echo " "
5345         cat <<EOM >&4
5346
5347 $me:  FATAL ERROR:
5348 This version of $package can only be compiled by a compiler that 
5349 understands function prototypes.  Unfortunately, your C compiler 
5350         $cc $ccflags
5351 doesn't seem to understand them.  Sorry about that.
5352
5353 If GNU cc is available for your system, perhaps you could try that instead.  
5354
5355 Eventually, we hope to support building Perl with pre-ANSI compilers.
5356 If you would like to help in that effort, please contact <perlbug@perl.org>.
5357
5358 Aborting Configure now.
5359 EOM
5360         exit 2
5361         ;;
5362 esac
5363
5364 : determine where public executables go
5365 echo " "
5366 set dflt bin bin
5367 eval $prefixit
5368 fn=d~
5369 rp='Pathname where the public executables will reside?'
5370 . ./getfile
5371 if $test "X$ansexp" != "X$binexp"; then
5372         installbin=''
5373 fi
5374 bin="$ans"
5375 binexp="$ansexp"
5376 : Change installation prefix, if necessary.
5377 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5378 if $test X"$prefix" != X"$installprefix"; then
5379         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5380 else
5381         installbin="$binexp"
5382 fi
5383
5384 : Find perl5.005 or later.
5385 echo "Looking for a previously installed perl5.005 or later... "
5386 case "$perl5" in
5387 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5388                 : Check if this perl is recent and can load a simple module
5389                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5390                         perl5=$tdir/perl
5391                         break;
5392                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5393                         perl5=$tdir/perl
5394                         break;
5395                 fi
5396         done
5397         ;;
5398 *)      perl5="$perl5"
5399         ;;
5400 esac
5401 case "$perl5" in
5402 '')     echo "None found.  That's ok.";;
5403 *)      echo "Using $perl5." ;;
5404 esac
5405
5406 $cat <<EOM
5407
5408 After $package is installed, you may wish to install various
5409 add-on modules and utilities.  Typically, these add-ons will
5410 be installed under $prefix with the rest
5411 of this package.  However, you may wish to install such add-ons
5412 elsewhere under a different prefix.
5413
5414 If you do not wish to put everything under a single prefix, that's
5415 ok.  You will be prompted for the individual locations; this siteprefix
5416 is only used to suggest the defaults.
5417
5418 The default should be fine for most people.
5419
5420 EOM
5421 fn=d~+
5422 rp='Installation prefix to use for add-on modules and utilities?'
5423 : XXX Here might be another good place for an installstyle setting.
5424 case "$siteprefix" in
5425 '') dflt=$prefix ;;
5426 *)  dflt=$siteprefix ;;
5427 esac
5428 . ./getfile
5429 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5430 oldsiteprefix=''
5431 case "$siteprefix" in
5432 '') ;;
5433 *)      case "$ans" in
5434         "$prefix") ;;
5435         *) oldsiteprefix="$prefix";;
5436         esac
5437         ;;
5438 esac
5439 siteprefix="$ans"
5440 siteprefixexp="$ansexp"
5441
5442 : determine where site specific libraries go.
5443 : Usual default is /usr/local/lib/perl5/site_perl/$version
5444 : The default "style" setting is made in installstyle.U
5445 : XXX No longer works with Prefixit stuff.
5446 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5447 case "$sitelib" in
5448 '') case "$installstyle" in
5449         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5450         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5451         esac
5452         ;;
5453 *)      dflt="$sitelib"
5454         ;;
5455 esac
5456 $cat <<EOM
5457
5458 The installation process will create a directory for
5459 site-specific extensions and modules.  Most users find it convenient
5460 to place all site-specific files in this directory rather than in the
5461 main distribution directory.
5462
5463 EOM
5464 fn=d~+
5465 rp='Pathname for the site-specific library files?'
5466 . ./getfile
5467 sitelib="$ans"
5468 sitelibexp="$ansexp"
5469 : Change installation prefix, if necessary.
5470 if $test X"$prefix" != X"$installprefix"; then
5471         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5472 else
5473         installsitelib="$sitelibexp"
5474 fi
5475
5476 : Determine list of previous versions to include in @INC
5477 $cat > getverlist <<EOPL
5478 #!$perl5 -w
5479 use File::Basename;
5480 \$api_versionstring = "$api_versionstring";
5481 \$version = "$version";
5482 \$sitelib = "$sitelib";
5483 \$archname = "$archname";
5484 EOPL
5485         $cat >> getverlist <<'EOPL'
5486 # Can't have leading @ because metaconfig interprets it as a command!
5487 ;@inc_version_list=();
5488 $stem=dirname($sitelib);
5489 # XXX Redo to do opendir/readdir? 
5490 if (-d $stem) {
5491     chdir($stem);
5492     ;@candidates = glob("5.*");
5493 }
5494 else {
5495     ;@candidates = ();
5496 }
5497
5498 # XXX ToDo:  These comparisons must be reworked when two-digit
5499 # subversions come along, so that 5.7.10 compares as greater than
5500 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5501 # widespread that we can use the built-in version vectors rather
5502 # than reinventing them here.  For 5.6.0, however, we must
5503 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5504 foreach $d (@candidates) {
5505     if ($d lt $version) {
5506         if ($d ge $api_versionstring) {
5507             unshift(@inc_version_list, "$d/$archname", $d);
5508         }
5509         elsif ($d ge "5.005") {
5510             unshift(@inc_version_list, $d);
5511         }
5512     }
5513     else {
5514         # Skip newer version.  I.e. don't look in
5515         # 5.7.0 if we're installing 5.6.1.
5516     }
5517 }
5518
5519 if (@inc_version_list) {
5520     print join(' ', @inc_version_list);
5521 }
5522 else {
5523     # Blank space to preserve value for next Configure run.
5524     print " ";
5525 }
5526 EOPL
5527 chmod +x getverlist
5528 case "$inc_version_list" in
5529 '')     if test -x "$perl5"; then
5530                 dflt=`$perl5 getverlist`
5531         else
5532                 dflt='none'
5533         fi
5534         ;;
5535 $undef) dflt='none' ;;
5536 *)  dflt="$inc_version_list" ;;
5537 esac
5538 case "$dflt" in
5539 ''|' ') dflt=none ;;
5540 esac
5541 $cat <<'EOM'
5542
5543 In order to ease the process of upgrading, this version of perl 
5544 can be configured to use modules built and installed with earlier 
5545 versions of perl that were installed under $prefix.  Specify here
5546 the list of earlier versions that this version of perl should check.
5547 If Configure detected no earlier versions of perl installed under
5548 $prefix, then the list will be empty.  Answer 'none' to tell perl
5549 to not search earlier versions.
5550
5551 The default should almost always be sensible, so if you're not sure,
5552 just accept the default.
5553 EOM
5554
5555 rp='List of earlier versions to include in @INC?'
5556 . ./myread
5557 case "$ans" in
5558 [Nn]one|''|' ') inc_version_list=' ' ;;
5559 *) inc_version_list="$ans" ;;
5560 esac
5561 case "$inc_version_list" in
5562 ''|' ') 
5563         inc_version_list_init='0';;
5564 *)      inc_version_list_init=`echo $inc_version_list |
5565                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5566         ;;
5567 esac
5568 $rm -f getverlist
5569
5570 : determine whether to install perl also as /usr/bin/perl
5571
5572 echo " "
5573 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5574         $cat <<EOM
5575 Many scripts expect to perl to be installed as /usr/bin/perl.
5576 I can install the perl you are about to compile also as /usr/bin/perl
5577 (in addition to $installbin/perl).
5578 EOM
5579         case "$installusrbinperl" in
5580         "$undef"|[nN]*) dflt='n';;
5581         *)              dflt='y';;
5582         esac
5583         rp="Do you want to install perl as /usr/bin/perl?"
5584         . ./myread
5585         case "$ans" in
5586         [yY]*)  val="$define";;
5587         *)      val="$undef" ;;
5588         esac
5589 else
5590         val="$undef"
5591 fi
5592 set installusrbinperl
5593 eval $setvar
5594
5595 echo " "
5596 echo "Checking for GNU C Library..." >&4
5597 cat >gnulibc.c <<EOM
5598 #include <stdio.h>
5599 int main()
5600 {
5601 #ifdef __GLIBC__
5602     exit(0);
5603 #else
5604     exit(1);
5605 #endif
5606 }
5607 EOM
5608 set gnulibc
5609 if eval $compile_ok && ./gnulibc; then
5610         val="$define"
5611         echo "You are using the GNU C Library"
5612 else
5613         val="$undef"
5614         echo "You are not using the GNU C Library"
5615 fi
5616 $rm -f gnulibc*
5617 set d_gnulibc
5618 eval $setvar
5619
5620 : see if nm is to be used to determine whether a symbol is defined or not
5621 case "$usenm" in
5622 '')
5623         dflt=''
5624         case "$d_gnulibc" in
5625         "$define")
5626                 echo " "
5627                 echo "nm probably won't work on the GNU C Library." >&4
5628                 dflt=n
5629                 ;;
5630         esac
5631         case "$dflt" in
5632         '') 
5633                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5634                         echo " "
5635                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5636                         echo "'nm' won't be sufficient on this sytem." >&4
5637                         dflt=n
5638                 fi
5639                 ;;
5640         esac
5641         case "$dflt" in
5642         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5643                 if $test $dflt -gt 20; then
5644                         dflt=y
5645                 else
5646                         dflt=n
5647                 fi
5648                 ;;
5649         esac
5650         ;;
5651 *)
5652         case "$usenm" in
5653         true|$define) dflt=y;;
5654         *) dflt=n;;
5655         esac
5656         ;;
5657 esac
5658 $cat <<EOM
5659
5660 I can use $nm to extract the symbols from your C libraries. This
5661 is a time consuming task which may generate huge output on the disk (up
5662 to 3 megabytes) but that should make the symbols extraction faster. The
5663 alternative is to skip the 'nm' extraction part and to compile a small
5664 test program instead to determine whether each symbol is present. If
5665 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5666 this may be the best solution.
5667
5668 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5669
5670 EOM
5671 rp="Shall I use $nm to extract C symbols from the libraries?"
5672 . ./myread
5673 case "$ans" in
5674 [Nn]*) usenm=false;;
5675 *) usenm=true;;
5676 esac
5677
5678 runnm=$usenm
5679 case "$reuseval" in
5680 true) runnm=false;;
5681 esac
5682
5683 : nm options which may be necessary
5684 case "$nm_opt" in
5685 '') if $test -f /mach_boot; then
5686                 nm_opt=''       # Mach
5687         elif $test -d /usr/ccs/lib; then
5688                 nm_opt='-p'     # Solaris (and SunOS?)
5689         elif $test -f /dgux; then
5690                 nm_opt='-p'     # DG-UX
5691         elif $test -f /lib64/rld; then
5692                 nm_opt='-p'     # 64-bit Irix
5693         else
5694                 nm_opt=''
5695         fi;;
5696 esac
5697
5698 : nm options which may be necessary for shared libraries but illegal
5699 : for archive libraries.  Thank you, Linux.
5700 case "$nm_so_opt" in
5701 '')     case "$myuname" in
5702         *linux*)
5703                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5704                         nm_so_opt='--dynamic'
5705                 fi
5706                 ;;
5707         esac
5708         ;;
5709 esac
5710
5711 case "$runnm" in
5712 true)
5713 : get list of predefined functions in a handy place
5714 echo " "
5715 case "$libc" in
5716 '') libc=unknown
5717         case "$libs" in
5718         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5719         esac
5720         ;;
5721 esac
5722 libnames='';
5723 case "$libs" in
5724 '') ;;
5725 *)  for thislib in $libs; do
5726         case "$thislib" in
5727         -lc|-lc_s)
5728                 : Handle C library specially below.
5729                 ;;
5730         -l*)
5731                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5732                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5733                         :
5734                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5735                         :
5736                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5737                         :
5738                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5739                         :
5740                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5741                         :
5742                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5743                         :
5744                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5745                         :
5746                 else
5747                         try=''
5748                 fi
5749                 libnames="$libnames $try"
5750                 ;;
5751         *) libnames="$libnames $thislib" ;;
5752         esac
5753         done
5754         ;;
5755 esac
5756 xxx=normal
5757 case "$libc" in
5758 unknown)
5759         set /lib/libc.$so
5760         for xxx in $libpth; do
5761                 $test -r $1 || set $xxx/libc.$so
5762                 : The messy sed command sorts on library version numbers.
5763                 $test -r $1 || \
5764                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5765                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5766                                 h
5767                                 s/[0-9][0-9]*/0000&/g
5768                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5769                                 G
5770                                 s/\n/ /' | \
5771                          sort | $sed -e 's/^.* //'`
5772                 eval set \$$#
5773         done
5774         $test -r $1 || set /usr/ccs/lib/libc.$so
5775         $test -r $1 || set /lib/libsys_s$_a
5776         ;;
5777 *)
5778         set blurfl
5779         ;;
5780 esac
5781 if $test -r "$1"; then
5782         echo "Your (shared) C library seems to be in $1."
5783         libc="$1"
5784 elif $test -r /lib/libc && $test -r /lib/clib; then
5785         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5786         xxx=apollo
5787         libc='/lib/clib /lib/libc'
5788         if $test -r /lib/syslib; then
5789                 echo "(Your math library is in /lib/syslib.)"
5790                 libc="$libc /lib/syslib"
5791         fi
5792 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5793         echo "Your C library seems to be in $libc, as you said before."
5794 elif $test -r $incpath/usr/lib/libc$_a; then
5795         libc=$incpath/usr/lib/libc$_a;
5796         echo "Your C library seems to be in $libc.  That's fine."
5797 elif $test -r /lib/libc$_a; then
5798         libc=/lib/libc$_a;
5799         echo "Your C library seems to be in $libc.  You're normal."
5800 else
5801         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5802                 :
5803         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5804                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5805         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5806                 :
5807         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5808                 :
5809         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5810                 :
5811         else
5812                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5813         fi
5814         if $test -r "$tans"; then
5815                 echo "Your C library seems to be in $tans, of all places."
5816                 libc=$tans
5817         else
5818                 libc='blurfl'
5819         fi
5820 fi
5821 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5822         dflt="$libc"
5823         cat <<EOM
5824
5825 If the guess above is wrong (which it might be if you're using a strange
5826 compiler, or your machine supports multiple models), you can override it here.
5827
5828 EOM
5829 else
5830         dflt=''
5831         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5832         cat >&4 <<EOM
5833 I can't seem to find your C library.  I've looked in the following places:
5834
5835 EOM
5836         $sed 's/^/      /' libpath
5837         cat <<EOM
5838
5839 None of these seems to contain your C library. I need to get its name...
5840
5841 EOM
5842 fi
5843 fn=f
5844 rp='Where is your C library?'
5845 . ./getfile
5846 libc="$ans"
5847
5848 echo " "
5849 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5850 set X `cat libnames`
5851 shift
5852 xxx=files
5853 case $# in 1) xxx=file; esac
5854 echo "Extracting names from the following $xxx for later perusal:" >&4
5855 echo " "
5856 $sed 's/^/      /' libnames >&4
5857 echo " "
5858 $echo $n "This may take a while...$c" >&4
5859
5860 for file in $*; do
5861         case $file in
5862         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5863         *) $nm $nm_opt $file 2>/dev/null;;
5864         esac
5865 done >libc.tmp
5866
5867 $echo $n ".$c"
5868 $grep fprintf libc.tmp > libc.ptf
5869 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5870 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5871 xxx='[ADTSIW]'
5872 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5873         eval $xscan;\
5874         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5875                 eval $xrun
5876 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5877         eval $xscan;\
5878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5879                 eval $xrun
5880 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5881         eval $xscan;\
5882         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5883                 eval $xrun
5884 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5885         eval $xscan;\
5886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5887                 eval $xrun
5888 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5889         eval $xscan;\
5890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5891                 eval $xrun
5892 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5893         eval $xscan;\
5894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5895                 eval $xrun
5896 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5897                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5898         eval $xscan;\
5899         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5900                 eval $xrun
5901 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5902         eval $xscan;\
5903         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5904                 eval $xrun
5905 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5906         eval $xscan;\
5907         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5908                 eval $xrun
5909 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5910         eval $xscan;\
5911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5912                 eval $xrun
5913 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5914         eval $xscan;\
5915         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5916                 eval $xrun
5917 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5918         eval $xscan;\
5919         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5920                 eval $xrun
5921 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5922         eval $xscan;\
5923         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5924                 eval $xrun
5925 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5926         eval $xscan;\
5927         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5928                 eval $xrun
5929 else
5930         $nm -p $* 2>/dev/null >libc.tmp
5931         $grep fprintf libc.tmp > libc.ptf
5932         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5933                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5934         then
5935                 nm_opt='-p'
5936                 eval $xrun
5937         else
5938                 echo " "
5939                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5940                 com=''
5941                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5942                         for thisname in $libnames $libc; do
5943                                 $ar t $thisname >>libc.tmp
5944                         done
5945                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5946                         echo "Ok." >&4
5947                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5948                         # Repeat libc to extract forwarders to DLL entries too
5949                         for thisname in $libnames $libc; do
5950                                 $ar tv $thisname >>libc.tmp
5951                                 # Revision 50 of EMX has bug in $ar.
5952                                 # it will not extract forwarders to DLL entries
5953                                 # Use emximp which will extract exactly them.
5954                                 emximp -o tmp.imp $thisname \
5955                                     2>/dev/null && \
5956                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5957                                     < tmp.imp >>libc.tmp
5958                                 $rm tmp.imp
5959                         done
5960                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5961                         echo "Ok." >&4
5962                 else
5963                         echo "$ar didn't seem to work right." >&4
5964                         echo "Maybe this is a Cray...trying bld instead..." >&4
5965                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5966                         then
5967                                 for thisname in $libnames; do
5968                                         bld t $libnames | \
5969                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5970                                         $ar t $thisname >>libc.tmp
5971                                 done
5972                                 echo "Ok." >&4
5973                         else
5974                                 echo "That didn't work either.  Giving up." >&4
5975                                 exit 1
5976                         fi
5977                 fi
5978         fi
5979 fi
5980 nm_extract="$com"
5981 if $test -f /lib/syscalls.exp; then
5982         echo " "
5983         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5984         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5985 fi
5986 ;;
5987 esac
5988 $rm -f libnames libpath
5989
5990 : see if dld is available
5991 set dld.h i_dld
5992 eval $inhdr
5993
5994 : is a C symbol defined?
5995 csym='tlook=$1;
5996 case "$3" in
5997 -v) tf=libc.tmp; tc=""; tdc="";;
5998 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5999 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6000 esac;
6001 tx=yes;
6002 case "$reuseval-$4" in
6003 true-) ;;
6004 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6005 esac;
6006 case "$tx" in
6007 yes)
6008         case "$runnm" in
6009         true)
6010                 if $contains $tlook $tf >/dev/null 2>&1;
6011                 then tval=true;
6012                 else tval=false;
6013                 fi;;
6014         *)
6015                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6016                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6017                 then tval=true;
6018                 else tval=false;
6019                 fi;
6020                 $rm -f t t.c;;
6021         esac;;
6022 *)
6023         case "$tval" in
6024         $define) tval=true;;
6025         *) tval=false;;
6026         esac;;
6027 esac;
6028 eval "$2=$tval"'
6029
6030 : define an is-in-libc? function
6031 inlibc='echo " "; td=$define; tu=$undef;
6032 sym=$1; var=$2; eval "was=\$$2";
6033 tx=yes;
6034 case "$reuseval$was" in
6035 true) ;;
6036 true*) tx=no;;
6037 esac;
6038 case "$tx" in
6039 yes)
6040         set $sym tres -f;
6041         eval $csym;
6042         case "$tres" in
6043         true)
6044                 echo "$sym() found." >&4;
6045                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6046         *)
6047                 echo "$sym() NOT found." >&4;
6048                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6049         esac;;
6050 *)
6051         case "$was" in
6052         $define) echo "$sym() found." >&4;;
6053         *) echo "$sym() NOT found." >&4;;
6054         esac;;
6055 esac'
6056
6057 : see if dlopen exists
6058 xxx_runnm="$runnm"
6059 runnm=false
6060 set dlopen d_dlopen
6061 eval $inlibc
6062 runnm="$xxx_runnm"
6063
6064 : determine which dynamic loading, if any, to compile in
6065 echo " "
6066 dldir="ext/DynaLoader"
6067 case "$usedl" in
6068 $define|y|true)
6069         dflt='y'
6070         usedl="$define"
6071         ;;
6072 $undef|n|false)
6073         dflt='n'
6074         usedl="$undef"
6075         ;;
6076 *) 
6077         dflt='n'
6078         case "$d_dlopen" in
6079             $define) dflt='y' ;;
6080         esac
6081         case "$i_dld" in
6082             $define) dflt='y' ;;
6083         esac
6084         : Does a dl_xxx.xs file exist for this operating system
6085         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6086         ;;
6087 esac
6088 rp="Do you wish to use dynamic loading?"
6089 . ./myread
6090 usedl="$ans"
6091 case "$ans" in
6092 y*) usedl="$define"
6093         case "$dlsrc" in
6094         '')
6095                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6096                         dflt="$dldir/dl_${osname}.xs"
6097                 elif $test "$d_dlopen" = "$define" ; then
6098                         dflt="$dldir/dl_dlopen.xs"
6099                 elif $test "$i_dld" = "$define" ; then
6100                         dflt="$dldir/dl_dld.xs"
6101                 else
6102                         dflt=''
6103                 fi
6104                 ;;
6105         *)      dflt="$dldir/$dlsrc"
6106                 ;;
6107         esac
6108     echo "The following dynamic loading files are available:"
6109         : Can not go over to $dldir because getfile has path hard-coded in.
6110         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6111         rp="Source file to use for dynamic loading"
6112         fn="fne"
6113         gfpth="$src"
6114         . ./getfile
6115         usedl="$define"
6116         : emulate basename
6117         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6118
6119         $cat << EOM
6120
6121 Some systems may require passing special flags to $cc -c to
6122 compile modules that will be used to create a shared library.
6123 To use no flags, say "none".
6124
6125 EOM
6126     case "$cccdlflags" in
6127     '') case "$gccversion" in
6128                 '') case "$osname" in
6129                         hpux)   dflt='+z' ;;
6130                         next)   dflt='none' ;;
6131                         irix*)  dflt='-KPIC' ;;
6132                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6133                         sunos)  dflt='-pic' ;;
6134                         *)      dflt='none' ;;
6135                     esac
6136                         ;;
6137                 *)  case "$osname" in
6138                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6139                         *)      dflt='-fpic' ;;
6140                     esac ;;
6141             esac ;;
6142         ' ') dflt='none' ;;
6143     *)  dflt="$cccdlflags" ;;
6144     esac
6145     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6146     . ./myread
6147     case "$ans" in
6148     none) cccdlflags=' ' ;;
6149     *) cccdlflags="$ans" ;;
6150     esac
6151
6152     cat << EOM
6153
6154 Some systems use ld to create libraries that can be dynamically loaded,
6155 while other systems (such as those using ELF) use $cc.
6156
6157 EOM
6158         case "$ld" in
6159         '')     $cat >try.c <<'EOM'
6160 /* Test for whether ELF binaries are produced */
6161 #include <fcntl.h>
6162 #include <stdlib.h>
6163 int main() {
6164         char b[4];
6165         int i = open("a.out",O_RDONLY);
6166         if(i == -1) 
6167                 exit(1); /* fail */
6168         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6169                 exit(0); /* succeed (yes, it's ELF) */
6170         else
6171                 exit(1); /* fail */
6172 }
6173 EOM
6174                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6175                         cat <<EOM
6176 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6177 EOM
6178                         dflt="$cc"
6179                 else
6180                         echo "I'll use ld to build dynamic libraries."
6181                         dflt='ld'
6182                 fi
6183                 rm -f try.c a.out
6184                 ;;
6185         *)      dflt="$ld"
6186                 ;;
6187         esac
6188
6189     rp="What command should be used to create dynamic libraries?"
6190     . ./myread
6191         ld="$ans"
6192
6193     cat << EOM
6194
6195 Some systems may require passing special flags to $ld to create a
6196 library that can be dynamically loaded.  If your ld flags include
6197 -L/other/path options to locate libraries outside your loader's normal
6198 search path, you may need to specify those -L options here as well.  To
6199 use no flags, say "none".
6200
6201 EOM
6202     case "$lddlflags" in
6203     '') case "$osname" in
6204                         beos) dflt='-nostart' ;;
6205                         hpux) dflt='-b';
6206                               case "$gccversion" in
6207                               '') dflt="$dflt +vnocompatwarnings" ;;
6208                               esac
6209                               ;;        
6210                         linux|irix*)    dflt='-shared' ;;
6211                         next)  dflt='none' ;;
6212                         solaris) dflt='-G' ;;
6213                         sunos) dflt='-assert nodefinitions' ;;
6214                         svr4*|esix*) dflt="-G $ldflags" ;;
6215                 *)     dflt='none' ;;
6216                         esac
6217                         ;;
6218     *) dflt="$lddlflags" ;;
6219     esac
6220
6221         : Try to guess additional flags to pick up local libraries.
6222         : Be careful not to append to a plain 'none'
6223         case "$dflt" in
6224         none) dflt='' ;;
6225         esac
6226         for thisflag in $ldflags; do
6227                 case "$thisflag" in
6228                 -L*)
6229                         case " $dflt " in
6230                         *" $thisflag "*) ;;
6231                         *) dflt="$dflt $thisflag" ;;
6232                         esac
6233                         ;;
6234                 esac
6235         done
6236
6237         case "$dflt" in
6238         ''|' ') dflt='none' ;;
6239         esac
6240
6241     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6242     . ./myread
6243     case "$ans" in
6244     none) lddlflags=' ' ;;
6245     *) lddlflags="$ans" ;;
6246     esac
6247
6248         cat <<EOM
6249
6250 Some systems may require passing special flags to $cc to indicate that
6251 the resulting executable will use dynamic linking.  To use no flags,
6252 say "none".
6253
6254 EOM
6255     case "$ccdlflags" in
6256     '') case "$osname" in
6257                 hpux)   dflt='-Wl,-E' ;;
6258                 linux)  dflt='-rdynamic' ;;
6259                 next)   dflt='none' ;;
6260                 sunos)  dflt='none' ;;
6261                 *)      dflt='none' ;;
6262             esac ;;
6263     ' ')  dflt='none' ;;
6264     *)  dflt="$ccdlflags" ;;
6265     esac
6266     rp="Any special flags to pass to $cc to use dynamic linking?"
6267     . ./myread
6268     case "$ans" in
6269     none) ccdlflags=' ' ;;
6270     *) ccdlflags="$ans" ;;
6271     esac
6272     ;;
6273 *)  usedl="$undef"
6274         ld='ld'
6275     dlsrc='dl_none.xs'
6276     lddlflags=''
6277     ccdlflags=''
6278     ;;
6279 esac
6280
6281 also=''
6282 case "$usedl" in
6283 $undef)
6284         # No dynamic loading being used, so don't bother even to prompt.
6285         useshrplib='false'
6286         ;;
6287 *)      case "$useshrplib" in
6288         '')     case "$osname" in
6289                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6290                         dflt=y
6291                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6292                         ;;
6293                 next*)
6294                         case "$osvers" in
6295                         4*)     dflt=y
6296                                 also='Building a shared libperl is needed for MAB support.'
6297                                 ;;
6298                         *)      dflt=n
6299                                 ;;
6300                         esac
6301                         ;;
6302                 *)      dflt=n
6303                         ;;
6304                 esac
6305                 ;;
6306         $define|true|[Yy]*)
6307                 dflt=y
6308                 ;;
6309         *)      dflt=n
6310                 ;;
6311         esac
6312         $cat << EOM
6313
6314 The perl executable is normally obtained by linking perlmain.c with
6315 libperl${_a}, any static extensions (usually just DynaLoader), and
6316 any other libraries needed on this system (such as -lm, etc.).  Since
6317 your system supports dynamic loading, it is probably possible to build
6318 a shared libperl.$so.  If you will have more than one executable linked
6319 to libperl.$so, this will significantly reduce the size of each
6320 executable, but it may have a noticeable affect on performance.  The
6321 default is probably sensible for your system.
6322 $also
6323
6324 EOM
6325         rp="Build a shared libperl.$so (y/n)"
6326         . ./myread
6327         case "$ans" in
6328         true|$define|[Yy]*)
6329                 useshrplib='true'  ;;
6330         *)      useshrplib='false' ;;
6331         esac
6332         ;;
6333 esac
6334
6335 case "$useshrplib" in
6336 true)
6337         case "$libperl" in
6338         '')
6339                 # Figure out a good name for libperl.so.  Since it gets stored in
6340                 # a version-specific architecture-dependent library, the version
6341                 # number isn't really that important, except for making cc/ld happy.
6342                 #
6343                 # A name such as libperl.so.3.1
6344                 majmin="libperl.$so.$patchlevel.$subversion"
6345                 # A name such as libperl.so.301
6346                 majonly=`echo $patchlevel $subversion |
6347                         $awk '{printf "%d%02d", $1, $2}'`
6348                 majonly=libperl.$so.$majonly
6349                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6350                 # rely on figuring it out from the naming of libc.
6351                 case "${osname}${osvers}" in
6352                 next4*)
6353                         dflt=libperl.5.$so
6354                         # XXX How handle the --version stuff for MAB?
6355                         ;;
6356                 linux*)  # ld won't link with a bare -lperl otherwise.
6357                         dflt=libperl.$so
6358                         ;;
6359                 cygwin*) # include version
6360                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6361                         ;;
6362                 *)      # Try to guess based on whether libc has major.minor.
6363                         case "$libc" in
6364                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6365                         *libc.$so.[0-9]*) dflt=$majonly ;;
6366                         *)      dflt=libperl.$so ;;
6367                         esac
6368                         ;;
6369                 esac
6370                 ;;
6371         *)      dflt=$libperl
6372                 ;;
6373         esac
6374         cat << EOM
6375
6376 I need to select a good name for the shared libperl.  If your system uses
6377 library names with major and minor numbers, then you might want something
6378 like $majmin.  Alternatively, if your system uses a single version
6379 number for shared libraries, then you might want to use $majonly.
6380 Or, your system might be quite happy with a simple libperl.$so.
6381
6382 Since the shared libperl will get installed into a version-specific
6383 architecture-dependent directory, the version number of the shared perl
6384 library probably isn't important, so the default should be o.k.
6385
6386 EOM
6387         rp='What name do you want to give to the shared libperl?'
6388         . ./myread
6389         libperl=$ans
6390         echo "Ok, I'll use $libperl"
6391         ;;
6392 *)
6393         libperl="libperl${_a}"
6394         ;;
6395 esac
6396
6397 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6398 case "$shrpdir" in
6399 '') ;;
6400 *)      $cat >&4 <<EOM
6401 WARNING:  Use of the shrpdir variable for the installation location of
6402 the shared $libperl is not supported.  It was never documented and
6403 will not work in this version.  Let me (perlbug@perl.com)
6404 know of any problems this may cause.
6405
6406 EOM
6407         case "$shrpdir" in
6408         "$archlibexp/CORE")
6409                 $cat >&4 <<EOM
6410 But your current setting of $shrpdir is
6411 the default anyway, so it's harmless.
6412 EOM
6413                 ;;
6414         *)
6415                 $cat >&4 <<EOM
6416 Further, your current attempted setting of $shrpdir
6417 conflicts with the value of $archlibexp/CORE
6418 that installperl will use.
6419 EOM
6420                 ;;
6421         esac
6422         ;;
6423 esac
6424
6425 # How will the perl executable find the installed shared $libperl?
6426 # Add $xxx to ccdlflags.
6427 # If we can't figure out a command-line option, use $shrpenv to
6428 # set env LD_RUN_PATH.  The main perl makefile uses this.
6429 shrpdir=$archlibexp/CORE
6430 xxx=''
6431 tmp_shrpenv=''
6432 if "$useshrplib"; then
6433     case "$osname" in 
6434         aix)
6435                 # We'll set it in Makefile.SH...
6436                 ;;
6437         solaris|netbsd)
6438                 xxx="-R $shrpdir"
6439                 ;;
6440         freebsd)
6441                 xxx="-Wl,-R$shrpdir"
6442                 ;;
6443         linux|irix*|dec_osf)
6444                 xxx="-Wl,-rpath,$shrpdir"
6445                 ;;
6446         next)
6447                 # next doesn't like the default...
6448                 ;;
6449         beos)
6450                 # beos doesn't like the default, either.
6451                 ;;
6452         hpux*)
6453                 # hpux doesn't like the default, either.
6454                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6455                 ;;
6456         *)
6457                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6458                 ;;
6459         esac
6460         case "$xxx" in
6461         '') ;;
6462         *)      
6463                 # Only add $xxx if it isn't already in ccdlflags.
6464                 case " $ccdlflags " in
6465                 *" $xxx "*)     ;;
6466                 *)      ccdlflags="$ccdlflags $xxx"
6467                         cat <<EOM >&4
6468
6469 Adding $xxx to the flags
6470 passed to $ld so that the perl executable will find the 
6471 installed shared $libperl.
6472
6473 EOM
6474                         ;;
6475                 esac
6476                 ;;
6477         esac
6478 fi
6479 # Fix ccdlflags in AIX for building external extensions.
6480 # (For building Perl itself bare -bE:perl.exp is needed,
6481 #  Makefile.SH takes care of this.)
6482 case "$osname" in
6483 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6484 esac
6485 # Respect a hint or command-line value.
6486 case "$shrpenv" in
6487 '') shrpenv="$tmp_shrpenv" ;;
6488 esac
6489 case "$ldlibpthname" in
6490 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6491 none)   ldlibpthname='' ;;
6492 esac
6493
6494 : determine where manual pages go
6495 set man1dir man1dir none
6496 eval $prefixit
6497 $cat <<EOM
6498
6499 $spackage has manual pages available in source form.
6500 EOM
6501 case "$nroff" in
6502 nroff)
6503         echo "However, you don't have nroff, so they're probably useless to you."
6504         case "$man1dir" in
6505         '') man1dir="none";;
6506         esac;;
6507 esac
6508 echo "If you don't want the manual sources installed, answer 'none'."
6509 case "$man1dir" in
6510 ' ') dflt=none
6511         ;;
6512 '')
6513         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6514         lookpath="$lookpath $prefixexp/man/p_man/man1"
6515         lookpath="$lookpath $prefixexp/man/u_man/man1"
6516         lookpath="$lookpath $prefixexp/man/man.1"
6517         case "$sysman" in
6518         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6519         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6520         esac
6521         set dflt
6522         eval $prefixup
6523         ;;
6524 *)  dflt="$man1dir"
6525         ;;
6526 esac
6527 echo " "
6528 fn=dn+~
6529 rp="Where do the main $spackage manual pages (source) go?"
6530 . ./getfile
6531 if $test "X$man1direxp" != "X$ansexp"; then
6532         installman1dir=''
6533 fi
6534 man1dir="$ans"
6535 man1direxp="$ansexp"
6536 case "$man1dir" in
6537 '')     man1dir=' '
6538         installman1dir='';;
6539 esac
6540
6541 : Change installation prefix, if necessary.
6542 if $test X"$prefix" != X"$installprefix"; then
6543         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6544 else
6545         installman1dir="$man1direxp"
6546 fi
6547
6548 : What suffix to use on installed man pages
6549
6550 case "$man1dir" in
6551 ' ')
6552         man1ext='0'
6553         ;;
6554 *)
6555         rp="What suffix should be used for the main $spackage man pages?"
6556         case "$man1ext" in
6557         '')     case "$man1dir" in
6558                 *1)  dflt=1 ;;
6559                 *1p) dflt=1p ;;
6560                 *1pm) dflt=1pm ;;
6561                 *l) dflt=l;;
6562                 *n) dflt=n;;
6563                 *o) dflt=o;;
6564                 *p) dflt=p;;
6565                 *C) dflt=C;;
6566                 *L) dflt=L;;
6567                 *L1) dflt=L1;;
6568                 *) dflt=1;;
6569                 esac
6570                 ;;
6571         *)      dflt="$man1ext";;
6572         esac
6573         . ./myread
6574         man1ext="$ans"
6575         ;;
6576 esac
6577
6578 : see if we can have long filenames
6579 echo " "
6580 rmlist="$rmlist /tmp/cf$$"
6581 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6582 first=123456789abcdef
6583 second=/tmp/cf$$/$first
6584 $rm -f $first $second
6585 if (echo hi >$first) 2>/dev/null; then
6586         if $test -f 123456789abcde; then
6587                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6588                 val="$undef"
6589         else
6590                 if (echo hi >$second) 2>/dev/null; then
6591                         if $test -f /tmp/cf$$/123456789abcde; then
6592                                 $cat <<'EOM'
6593 That's peculiar... You can have filenames longer than 14 characters, but only
6594 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6595 I shall consider your system cannot support long filenames at all.
6596 EOM
6597                                 val="$undef"
6598                         else
6599                                 echo 'You can have filenames longer than 14 characters.' >&4
6600                                 val="$define"
6601                         fi
6602                 else
6603                         $cat <<'EOM'
6604 How confusing! Some of your filesystems are sane enough to allow filenames
6605 longer than 14 characters but some others like /tmp can't even think about them.
6606 So, for now on, I shall assume your kernel does not allow them at all.
6607 EOM
6608                         val="$undef"
6609                 fi
6610         fi
6611 else
6612         $cat <<'EOM'
6613 You can't have filenames longer than 14 chars.  You can't even think about them!
6614 EOM
6615         val="$undef"
6616 fi 
6617 set d_flexfnam
6618 eval $setvar
6619 $rm -rf /tmp/cf$$ 123456789abcde*
6620
6621 : determine where library module manual pages go
6622 set man3dir man3dir none
6623 eval $prefixit
6624 $cat <<EOM
6625
6626 $spackage has manual pages for many of the library modules.
6627 EOM
6628
6629 case "$nroff" in
6630 nroff)
6631         $cat <<'EOM'
6632 However, you don't have nroff, so they're probably useless to you.
6633 EOM
6634         case "$man3dir" in
6635         '') man3dir="none";;
6636         esac;;
6637 esac
6638
6639 case "$d_flexfnam" in
6640 undef)
6641         $cat <<'EOM'
6642 However, your system can't handle the long file names like File::Basename.3. 
6643 EOM
6644         case "$man3dir" in
6645         '') man3dir="none";;
6646         esac;;
6647 esac
6648
6649 echo "If you don't want the manual sources installed, answer 'none'."
6650 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6651 case "$man3dir" in
6652 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6653         if $test -d "$privlib/man/man3"; then
6654                 cat <<EOM >&4
6655
6656 WARNING:  Previous versions of perl installed man3 pages into
6657 $privlib/man/man3.  This version will suggest a 
6658 new default of $dflt.  
6659 EOM
6660                 tdflt=$dflt
6661                 dflt='n'
6662                 rp='Do you wish to preserve the old behavior?(y/n)'
6663                 . ./myread
6664                 case "$ans" in
6665                 y*) dflt="$privlib/man/man3" ;;
6666                 *)  dflt=$tdflt ;;
6667                 esac
6668     fi
6669         ;;
6670 ' ') dflt=none;;
6671 *)      dflt="$man3dir" ;;
6672 esac
6673 echo " "
6674 fn=dn+~
6675 rp="Where do the $package library man pages (source) go?"
6676 . ./getfile
6677 man3dir="$ans"
6678 man3direxp="$ansexp"
6679 case "$man1dir" in
6680 '')     man3dir=' '
6681         installman3dir='';;
6682 esac
6683
6684 : Change installation prefix, if necessary.
6685 if $test X"$prefix" != X"$installprefix"; then
6686         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6687 else
6688         installman3dir="$man3direxp"
6689 fi
6690
6691 : What suffix to use on installed man pages
6692 case "$man3dir" in
6693 ' ')
6694         man3ext='0'
6695         ;;
6696 *)
6697         rp="What suffix should be used for the $package library man pages?"
6698         case "$man3ext" in
6699         '')     case "$man3dir" in
6700                 *3)  dflt=3 ;;
6701                 *3p) dflt=3p ;;
6702                 *3pm) dflt=3pm ;;
6703                 *l) dflt=l;;
6704                 *n) dflt=n;;
6705                 *o) dflt=o;;
6706                 *p) dflt=p;;
6707                 *C) dflt=C;;
6708                 *L) dflt=L;;
6709                 *L3) dflt=L3;;
6710                 *) dflt=3;;
6711                 esac
6712                 ;;
6713         *)      dflt="$man3ext";;
6714         esac
6715         . ./myread
6716         man3ext="$ans"
6717         ;;
6718 esac
6719
6720 : see if we have to deal with yellow pages, now NIS.
6721 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6722         if $test -f /usr/etc/nibindd; then
6723                 echo " "
6724                 echo "I'm fairly confident you're on a NeXT."
6725                 echo " "
6726                 rp='Do you get the hosts file via NetInfo?'
6727                 dflt=y
6728                 case "$hostcat" in
6729                 nidump*) ;;
6730                 '') ;;
6731                 *) dflt=n;;
6732                 esac
6733                 . ./myread
6734                 case "$ans" in
6735                 y*) hostcat='nidump hosts .';;
6736                 *)      case "$hostcat" in
6737                         nidump*) hostcat='';;
6738                         esac
6739                         ;;
6740                 esac
6741         fi
6742         case "$hostcat" in
6743         nidump*) ;;
6744         *)
6745                 case "$hostcat" in
6746                 *ypcat*) dflt=y;;
6747                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6748                                 dflt=y
6749                         else
6750                                 dflt=n
6751                         fi;;
6752                 *) dflt=n;;
6753                 esac
6754                 echo " "
6755                 rp='Are you getting the hosts file via yellow pages?'
6756                 . ./myread
6757                 case "$ans" in
6758                 y*) hostcat='ypcat hosts';;
6759                 *) hostcat='cat /etc/hosts';;
6760                 esac
6761                 ;;
6762         esac
6763 fi
6764 case "$hostcat" in
6765 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6766 esac
6767 case "$groupcat" in
6768 '') test -f /etc/group && groupcat='cat /etc/group';;
6769 esac
6770 case "$passcat" in
6771 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6772 esac
6773
6774 : now get the host name
6775 echo " "
6776 echo "Figuring out host name..." >&4
6777 case "$myhostname" in
6778 '') cont=true
6779         echo 'Maybe "hostname" will work...'
6780         if tans=`sh -c hostname 2>&1` ; then
6781                 myhostname=$tans
6782                 phostname=hostname
6783                 cont=''
6784         fi
6785         ;;
6786 *) cont='';;
6787 esac
6788 if $test "$cont"; then
6789         if ./xenix; then
6790                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6791                 if tans=`cat /etc/systemid 2>&1` ; then
6792                         myhostname=$tans
6793                         phostname='cat /etc/systemid'
6794                         echo "Whadyaknow.  Xenix always was a bit strange..."
6795                         cont=''
6796                 fi
6797         elif $test -r /etc/systemid; then
6798                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6799         fi
6800 fi
6801 if $test "$cont"; then
6802         echo 'No, maybe "uuname -l" will work...'
6803         if tans=`sh -c 'uuname -l' 2>&1` ; then
6804                 myhostname=$tans
6805                 phostname='uuname -l'
6806         else
6807                 echo 'Strange.  Maybe "uname -n" will work...'
6808                 if tans=`sh -c 'uname -n' 2>&1` ; then
6809                         myhostname=$tans
6810                         phostname='uname -n'
6811                 else
6812                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6813                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6814                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6815                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6816                         else
6817                                 case "$myhostname" in
6818                                 '') echo "Does this machine have an identity crisis or something?"
6819                                         phostname='';;
6820                                 *)
6821                                         echo "Well, you said $myhostname before..."
6822                                         phostname='echo $myhostname';;
6823                                 esac
6824                         fi
6825                 fi
6826         fi
6827 fi
6828 : you do not want to know about this
6829 set $myhostname
6830 myhostname=$1
6831
6832 : verify guess
6833 if $test "$myhostname" ; then
6834         dflt=y
6835         rp='Your host name appears to be "'$myhostname'".'" Right?"
6836         . ./myread
6837         case "$ans" in
6838         y*) ;;
6839         *) myhostname='';;
6840         esac
6841 fi
6842
6843 : bad guess or no guess
6844 while $test "X$myhostname" = X ; do
6845         dflt=''
6846         rp="Please type the (one word) name of your host:"
6847         . ./myread
6848         myhostname="$ans"
6849 done
6850
6851 : translate upper to lower if necessary
6852 case "$myhostname" in
6853 *[A-Z]*)
6854         echo "(Normalizing case in your host name)"
6855         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6856         ;;
6857 esac
6858
6859 case "$myhostname" in
6860 *.*)
6861         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6862         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6863         echo "(Trimming domain name from host name--host name is now $myhostname)"
6864         ;;
6865 *) case "$mydomain" in
6866         '')
6867                 {
6868                         test "X$hostcat" = "Xypcat hosts" &&
6869                         ypmatch "$myhostname" hosts 2>/dev/null |\
6870                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6871                         $test -s hosts
6872                 } || {
6873                         test "X$hostcat" != "X" &&
6874                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6875                                         /[       ]$myhostname[  . ]/p" > hosts
6876                 }
6877                 tmp_re="[       . ]"
6878                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6879                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6880                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6881                         hosts | $sort | $uniq | \
6882                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6883                 case `$echo X$dflt` in
6884                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6885                         dflt=.
6886                         ;;
6887                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6888                         ;;
6889                 esac
6890                 case "$dflt" in
6891                 .)
6892                         tans=`./loc resolv.conf X /etc /usr/etc`
6893                         if $test -f "$tans"; then
6894                                 echo "(Attempting domain name extraction from $tans)"
6895                                 dflt=.`$sed -n -e 's/   / /g' \
6896                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6897                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6898                                 case "$dflt" in
6899                                 .) dflt=.`$sed -n -e 's/        / /g' \
6900                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6901                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6902                                         ;;
6903                                 esac
6904                         fi
6905                         ;;
6906                 esac
6907                 case "$dflt" in
6908                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6909                         dflt=.`sh -c domainname 2>/dev/null`
6910                         case "$dflt" in
6911                         '') dflt='.';;
6912                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6913                         esac
6914                         ;;
6915                 esac
6916                 case "$dflt" in
6917                 .) echo "(Lost all hope -- silly guess then)"
6918                         dflt='.uucp'
6919                         ;;
6920                 esac
6921                 $rm -f hosts
6922                 ;;
6923         *) dflt="$mydomain";;
6924         esac;;
6925 esac
6926 echo " "
6927 rp="What is your domain name?"
6928 . ./myread
6929 tans="$ans"
6930 case "$ans" in
6931 '') ;;
6932 .*) ;;
6933 *) tans=".$tans";;
6934 esac
6935 mydomain="$tans"
6936
6937 : translate upper to lower if necessary
6938 case "$mydomain" in
6939 *[A-Z]*)
6940         echo "(Normalizing case in your domain name)"
6941         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6942         ;;
6943 esac
6944
6945 : a little sanity check here
6946 case "$phostname" in
6947 '') ;;
6948 *)
6949         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6950         $myhostname$mydomain|$myhostname) ;;
6951         *)
6952                 case "$phostname" in
6953                 sed*)
6954                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6955                         ;;
6956                 *)
6957                         echo "(That doesn't agree with your $phostname command, by the way.)"
6958                         ;;
6959                 esac
6960         ;;
6961         esac
6962         ;;
6963 esac
6964
6965 $cat <<EOM
6966
6967 I need to get your e-mail address in Internet format if possible, i.e.
6968 something like user@host.domain. Please answer accurately since I have
6969 no easy means to double check it. The default value provided below
6970 is most probably close to reality but may not be valid from outside
6971 your organization...
6972
6973 EOM
6974 cont=x
6975 while test "$cont"; do
6976         case "$cf_email" in
6977         '') dflt="$cf_by@$myhostname$mydomain";;
6978         *) dflt="$cf_email";;
6979         esac
6980         rp='What is your e-mail address?'
6981         . ./myread
6982         cf_email="$ans"
6983         case "$cf_email" in
6984         *@*.*) cont='' ;;
6985         *)
6986                 rp='Address does not look like an Internet one.  Use it anyway?'
6987                 case "$fastread" in
6988                 yes) dflt=y ;;
6989                 *) dflt=n ;;
6990                 esac
6991                 . ./myread
6992                 case "$ans" in
6993                 y*) cont='' ;;
6994                 *) echo " " ;;
6995                 esac
6996                 ;;
6997         esac
6998 done
6999
7000 $cat <<EOM
7001
7002 If you or somebody else will be maintaining perl at your site, please
7003 fill in the correct e-mail address here so that they may be contacted
7004 if necessary. Currently, the "perlbug" program included with perl
7005 will send mail to this address in addition to perlbug@perl.com. You may
7006 enter "none" for no administrator.
7007
7008 EOM
7009 case "$perladmin" in
7010 '') dflt="$cf_email";;
7011 *) dflt="$perladmin";;
7012 esac
7013 rp='Perl administrator e-mail address'
7014 . ./myread
7015 perladmin="$ans"
7016
7017 : figure out how to guarantee perl startup
7018 case "$startperl" in
7019 '')
7020         case "$sharpbang" in
7021         *!)
7022                 $cat <<EOH
7023
7024 I can use the #! construct to start perl on your system. This will
7025 make startup of perl scripts faster, but may cause problems if you
7026 want to share those scripts and perl is not in a standard place
7027 ($binexp/perl) on all your platforms. The alternative is to force
7028 a shell by starting the script with a single ':' character.
7029
7030 EOH
7031                 dflt="$binexp/perl"
7032                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7033                 . ./myread
7034                 case "$ans" in
7035                 none)   startperl=": # use perl";;
7036                 *)      startperl="#!$ans"
7037                         if $test 30 -lt `echo "$ans" | wc -c`; then
7038                                 $cat >&4 <<EOM
7039
7040 WARNING:  Some systems limit the #! command to 32 characters.
7041 If you experience difficulty running Perl scripts with #!, try
7042 installing Perl in a directory with a shorter pathname.
7043
7044 EOM
7045                         fi ;;
7046                 esac
7047                 ;;
7048         *) startperl=": # use perl"
7049                 ;;
7050         esac
7051         ;;
7052 esac
7053 echo "I'll use $startperl to start perl scripts."
7054
7055 : figure best path for perl in scripts
7056 case "$perlpath" in
7057 '')
7058         perlpath="$binexp/perl"
7059         case "$startperl" in
7060         *!*) ;;
7061         *)
7062                 $cat <<EOH
7063
7064 I will use the "eval 'exec'" idiom to start Perl on your system.
7065 I can use the full path of your Perl binary for this purpose, but
7066 doing so may cause problems if you want to share those scripts and
7067 Perl is not always in a standard place ($binexp/perl).
7068
7069 EOH
7070                 dflt="$binexp/perl"
7071                 rp="What path shall I use in \"eval 'exec'\"?"
7072                 . ./myread
7073                 perlpath="$ans"
7074                 ;;
7075         esac
7076         ;;
7077 esac
7078 case "$startperl" in
7079 *!*)    ;;
7080 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7081 esac
7082
7083 : determine where public executable scripts go
7084 set scriptdir scriptdir
7085 eval $prefixit
7086 case "$scriptdir" in
7087 '')
7088         dflt="$bin"
7089         : guess some guesses
7090         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7091         $test -d /usr/share/bin     && dflt=/usr/share/bin
7092         $test -d /usr/local/script  && dflt=/usr/local/script
7093         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7094         $test -d $prefixexp/script  && dflt=$prefixexp/script
7095         set dflt
7096         eval $prefixup
7097         ;;
7098 *)  dflt="$scriptdir"
7099         ;;
7100 esac
7101 $cat <<EOM
7102  
7103 Some installations have a separate directory just for executable scripts so
7104 that they can mount it across multiple architectures but keep the scripts in
7105 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7106 Or you might just lump your scripts in with all your other executables.
7107  
7108 EOM
7109 fn=d~
7110 rp='Where do you keep publicly executable scripts?'
7111 . ./getfile
7112 if $test "X$ansexp" != "X$scriptdirexp"; then
7113         installscript=''
7114 fi
7115 scriptdir="$ans"
7116 scriptdirexp="$ansexp"
7117 : Change installation prefix, if necessary.
7118 if $test X"$prefix" != X"$installprefix"; then
7119         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7120 else
7121         installscript="$scriptdirexp"
7122 fi
7123
7124 : determine where site specific architecture-dependent libraries go.
7125 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7126 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7127 : sitelib may have an optional trailing /share.
7128 case "$sitearch" in
7129 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7130         dflt="$dflt/$archname"
7131         ;;
7132 *)      dflt="$sitearch"
7133         ;;
7134 esac
7135 set sitearch sitearch none
7136 eval $prefixit
7137 $cat <<EOM
7138
7139 The installation process will also create a directory for
7140 architecture-dependent site-specific extensions and modules.
7141
7142 EOM
7143 fn=d~+
7144 rp='Pathname for the site-specific architecture-dependent library files?'
7145 . ./getfile
7146 sitearch="$ans"
7147 sitearchexp="$ansexp"
7148 : Change installation prefix, if necessary.
7149 if $test X"$prefix" != X"$installprefix"; then
7150         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7151 else
7152         installsitearch="$sitearchexp"
7153 fi
7154
7155 : determine where add-on public executables go
7156 case "$sitebin" in
7157 '')     dflt=$siteprefix/bin ;;
7158 *)      dflt=$sitebin ;;
7159 esac
7160 fn=d~
7161 rp='Pathname where the add-on public executables should be installed?'
7162 . ./getfile
7163 sitebin="$ans"
7164 sitebinexp="$ansexp"
7165 : Change installation prefix, if necessary.
7166 if $test X"$prefix" != X"$installprefix"; then
7167         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7168 else
7169         installsitebin="$sitebinexp"
7170 fi
7171
7172 : see if sqrtl exists
7173 set sqrtl d_sqrtl
7174 eval $inlibc
7175
7176 case "$ccflags" in
7177 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7178 esac
7179
7180 case "$uselongdouble" in
7181 $define|true|[yY]*)     dflt='y';;
7182 *) dflt='n';;
7183 esac
7184 cat <<EOM
7185
7186 Perl can be built to take advantage of long doubles which
7187 (if available) may give more accuracy and range for floating point numbers.
7188
7189 If this doesn't make any sense to you, just accept the default '$dflt'.
7190 EOM
7191 rp='Try to use long doubles if available?'
7192 . ./myread
7193 case "$ans" in
7194 y|Y)    val="$define"   ;;
7195 *)      val="$undef"    ;;
7196 esac
7197 set uselongdouble
7198 eval $setvar
7199
7200 case "$uselongdouble" in
7201 true|[yY]*) uselongdouble="$define" ;;
7202 esac
7203
7204 case "$uselongdouble" in
7205 $define)
7206 : Look for a hint-file generated 'call-back-unit'.  If the
7207 : user has specified that long doubles should be used,
7208 : we may need to set or change some other defaults.
7209         if $test -f uselongdouble.cbu; then
7210                 echo "Your platform has some specific hints for long doubles, using them..."
7211                 . ./uselongdouble.cbu
7212         else
7213                 $cat <<EOM
7214 (Your platform doesn't have any specific hints for long doubles.)
7215 EOM
7216         fi
7217         ;;
7218 esac
7219
7220 case "$uselongdouble:$d_sqrtl" in
7221 $define:$undef)
7222                 $cat <<EOM >&4
7223
7224 *** You requested the use of long doubles but you do not seem to have
7225 *** the mathematic functions for long doubles.  I'm disabling the use
7226 *** of long doubles.
7227
7228 EOM
7229         uselongdouble=$undef
7230         ;;
7231 esac
7232
7233 case "$useperlio" in
7234 $define|true|[yY]*)     dflt='y';;
7235 *) dflt='n';;
7236 esac
7237 cat <<EOM
7238
7239 Previous version of $package used the standard IO mechanisms as defined
7240 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7241 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7242 the default.  This abstraction layer can use AT&T's sfio (if you already
7243 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7244 problems with some extension modules.  Using PerlIO with stdio is safe,
7245 but it is slower than plain stdio and therefore is not the default.
7246
7247 If this doesn't make any sense to you, just accept the default '$dflt'.
7248 EOM
7249 rp='Use the experimental PerlIO abstraction layer?'
7250 . ./myread
7251 case "$ans" in
7252 y|Y) 
7253         val="$define"
7254         ;;     
7255 *)      
7256         echo "Ok, doing things the stdio way"
7257         val="$undef"
7258         ;;
7259 esac
7260 set useperlio
7261 eval $setvar 
7262
7263 case "$vendorprefix" in
7264 '')     d_vendorbin="$undef"
7265         vendorbin=''
7266         vendorbinexp=''
7267         ;;
7268 *)      d_vendorbin="$define"
7269         : determine where vendor-supplied executables go.
7270         case "$vendorbin" in
7271         '') dflt=$vendorprefix/bin ;;
7272         *)      dflt="$vendorbin" ;;
7273         esac
7274         fn=d~+
7275         rp='Pathname for the vendor-supplied executables directory?'
7276         . ./getfile
7277         vendorbin="$ans"
7278         vendorbinexp="$ansexp"
7279         ;;
7280 esac
7281 : Change installation prefix, if necessary.
7282 if $test X"$prefix" != X"$installprefix"; then
7283         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7284 else
7285         installvendorbin="$vendorbinexp"
7286 fi
7287
7288 : see if qgcvt exists
7289 set qgcvt d_qgcvt
7290 eval $inlibc
7291
7292 : check for length of double
7293 echo " "
7294 case "$doublesize" in
7295 '')
7296         echo "Checking to see how big your double precision numbers are..." >&4
7297         $cat >try.c <<'EOCP'
7298 #include <stdio.h>
7299 int main()
7300 {
7301     printf("%d\n", (int)sizeof(double));
7302     exit(0);
7303 }
7304 EOCP
7305         set try
7306         if eval $compile_ok; then
7307                 doublesize=`./try`
7308                 echo "Your double is $doublesize bytes long."
7309         else
7310                 dflt='8'
7311                 echo "(I can't seem to compile the test program.  Guessing...)"
7312                 rp="What is the size of a double precision number (in bytes)?"
7313                 . ./myread
7314                 doublesize="$ans"
7315         fi
7316         ;;
7317 esac
7318 $rm -f try.c try
7319
7320 : check for long doubles
7321 echo " "
7322 echo "Checking to see if you have long double..." >&4
7323 echo 'int main() { long double x = 7.0; }' > try.c
7324 set try
7325 if eval $compile; then
7326         val="$define"
7327         echo "You have long double."
7328 else
7329         val="$undef"
7330         echo "You do not have long double."
7331 fi
7332 $rm try.*
7333 set d_longdbl
7334 eval $setvar
7335
7336 : check for length of long double
7337 case "${d_longdbl}${longdblsize}" in
7338 $define)
7339         echo " "
7340         echo "Checking to see how big your long doubles are..." >&4
7341         $cat >try.c <<'EOCP'
7342 #include <stdio.h>
7343 int main()
7344 {
7345         printf("%d\n", sizeof(long double));
7346 }
7347 EOCP
7348         set try
7349         set try
7350         if eval $compile; then
7351                 longdblsize=`./try$exe_ext`
7352                 echo "Your long doubles are $longdblsize bytes long."
7353         else
7354                 dflt='8'
7355                 echo " "
7356                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7357                 rp="What is the size of a long double (in bytes)?"
7358                 . ./myread
7359                 longdblsize="$ans"
7360         fi
7361         if $test "X$doublesize" = "X$longdblsize"; then
7362                 echo "(That isn't any different from an ordinary double.)"
7363         fi      
7364         ;;
7365 esac
7366 $rm -f try.* try
7367
7368 echo " "
7369
7370 if $test X"$d_longdbl" = X"$define"; then
7371
7372 echo "Checking how to print long doubles..." >&4
7373
7374 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7375         $cat >try.c <<'EOCP'
7376 #include <sys/types.h>
7377 #include <stdio.h>
7378 int main() {
7379   double d = 123.456;
7380   printf("%.3f\n", d);
7381 }
7382 EOCP
7383         set try
7384         if eval $compile; then
7385                 yyy=`./try$exe_ext`
7386                 case "$yyy" in
7387                 123.456)
7388                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7389                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7390                         echo "We will use %f."
7391                         ;;
7392                 esac
7393         fi
7394 fi
7395
7396 if $test X"$sPRIfldbl" = X; then
7397         $cat >try.c <<'EOCP'
7398 #include <sys/types.h>
7399 #include <stdio.h>
7400 int main() {
7401   long double d = 123.456;
7402   printf("%.3llf\n", d);
7403 }
7404 EOCP
7405         set try
7406         if eval $compile; then
7407                 yyy=`./try$exe_ext`
7408                 case "$yyy" in
7409                 123.456)
7410                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7411                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7412                         echo "We will use %llf."
7413                         ;;
7414                 esac
7415         fi
7416 fi
7417
7418 if $test X"$sPRIfldbl" = X; then
7419         $cat >try.c <<'EOCP'
7420 #include <sys/types.h>
7421 #include <stdio.h>
7422 int main() {
7423   long double d = 123.456;
7424   printf("%.3Lf\n", d);
7425 }
7426 EOCP
7427         set try
7428         if eval $compile; then
7429                 yyy=`./try$exe_ext`
7430                 case "$yyy" in
7431                 123.456)
7432                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7433                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7434                         echo "We will use %Lf."
7435                         ;;
7436                 esac
7437         fi
7438 fi
7439
7440 if $test X"$sPRIfldbl" = X; then
7441         $cat >try.c <<'EOCP'
7442 #include <sys/types.h>
7443 #include <stdio.h>
7444 int main() {
7445   long double d = 123.456;
7446   printf("%.3lf\n", d);
7447 }
7448 EOCP
7449         set try
7450         if eval $compile; then
7451                 yyy=`./try$exe_ext`
7452                 case "$yyy" in
7453                 123.456)
7454                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7455                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7456                         echo "We will use %lf."
7457                         ;;
7458                 esac
7459         fi
7460 fi
7461
7462 if $test X"$sPRIfldbl" = X; then
7463         echo "Cannot figure out how to print long doubles." >&4
7464 fi
7465
7466 $rm -f try try.*
7467
7468 fi # d_longdbl
7469
7470 case "$sPRIfldbl" in
7471 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7472         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7473         ;;
7474 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7475         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7476         ;;
7477 esac
7478
7479 : Check how to convert floats to strings.
7480 if test "X$d_Gconvert" = X; then
7481         echo " "
7482         echo "Checking for an efficient way to convert floats to strings."
7483         echo " " > try.c
7484         case "$uselongdouble" in
7485         "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7486         esac
7487         case "$d_longdbl" in
7488         "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7489         esac
7490         case "$d_PRIgldbl" in
7491         "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7492         esac
7493         $cat >>try.c <<EOP
7494 #ifdef TRY_gconvert
7495 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7496 char *myname = "gconvert";
7497 #endif
7498 #ifdef TRY_gcvt
7499 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7500 char *myname = "gcvt";
7501 #endif
7502 #ifdef TRY_qgcvt
7503 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7504 char *myname = "qgcvt";
7505 #define DOUBLETYPE long double
7506 #endif
7507 #ifdef TRY_sprintf
7508 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7509 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7510 #else
7511 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7512 #endif
7513 char *myname = "sprintf";
7514 #endif
7515
7516 #ifndef DOUBLETYPE
7517 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7518 #define DOUBLETYPE long double
7519 #else
7520 #define DOUBLETYPE double
7521 #endif
7522 #endif
7523
7524 #include <stdio.h>
7525
7526 #define I_STDLIB $i_stdlib
7527 #ifdef I_STDLIB
7528 #include <stdlib.h>
7529 #endif
7530
7531 int
7532 checkit(expect, got)
7533 char *expect;
7534 char *got;
7535 {
7536     if (strcmp(expect, got)) {
7537                 printf("%s oddity:  Expected %s, got %s\n",
7538                         myname, expect, got);
7539                 exit(1);
7540         }
7541 }
7542
7543 int main()
7544
7545         char buf[64]; 
7546         buf[63] = '\0';
7547
7548         /* This must be 1st test on (which?) platform */
7549         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7550         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7551         checkit("0.1", buf);
7552
7553         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7554         checkit("1", buf);
7555
7556         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7557         checkit("1.1", buf);
7558
7559         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7560         checkit("1.01", buf);
7561
7562         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7563         checkit("1.001", buf);
7564
7565         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7566         checkit("1.0001", buf);
7567
7568         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7569         checkit("1.00001", buf);
7570
7571         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7572         checkit("1.000001", buf);
7573
7574         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7575         checkit("0", buf);
7576
7577         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7578         checkit("-1", buf);
7579
7580         /* Some Linux gcvt's give 1.e+5 here. */
7581         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7582         checkit("100000", buf);
7583         
7584         /* Some Linux gcvt's give -1.e+5 here. */
7585         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7586         checkit("-100000", buf);
7587
7588         exit(0);
7589 }
7590 EOP
7591         case "$d_Gconvert" in
7592         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7593         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7594         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7595         *) xxx_list='gconvert gcvt sprintf' ;;
7596         esac
7597
7598         case "$d_longdbl$uselongdouble$d_qgcvt" in
7599         "$define$define$define") xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7600         esac
7601
7602         for xxx_convert in $xxx_list; do
7603                 echo "Trying $xxx_convert..."
7604                 $rm -f try try$_o
7605                 set try -DTRY_$xxx_convert
7606                 if eval $compile; then
7607                         echo "$xxx_convert() found." >&4
7608                         if ./try; then
7609                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7610                                 break;
7611                         else
7612                                 echo "...But $xxx_convert didn't work as I expected."
7613                         fi
7614                 else
7615                         echo "$xxx_convert NOT found." >&4
7616                 fi
7617         done
7618                 
7619         case "$xxx_convert" in
7620         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7621         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7622         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7623         *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7624            "$define$define$define")
7625               d_Gconvert="sprintf((b),\"%.*$sPRIgldbl\",(n),(x))" ;;
7626            *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7627            esac
7628            ;;  
7629         esac
7630 fi
7631
7632 : Initialize h_fcntl
7633 h_fcntl=false
7634
7635 : Initialize h_sysfile
7636 h_sysfile=false
7637
7638 : access call always available on UNIX
7639 set access d_access
7640 eval $inlibc
7641
7642 : locate the flags for 'access()'
7643 case "$d_access" in
7644 "$define")
7645         echo " "
7646         $cat >access.c <<'EOCP'
7647 #include <sys/types.h>
7648 #ifdef I_FCNTL
7649 #include <fcntl.h>
7650 #endif
7651 #ifdef I_SYS_FILE
7652 #include <sys/file.h>
7653 #endif
7654 #ifdef I_UNISTD
7655 #include <unistd.h>
7656 #endif
7657 int main() {
7658         exit(R_OK);
7659 }
7660 EOCP
7661         : check sys/file.h first, no particular reason here
7662         if $test `./findhdr sys/file.h` && \
7663                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7664                 h_sysfile=true;
7665                 echo "<sys/file.h> defines the *_OK access constants." >&4
7666         elif $test `./findhdr fcntl.h` && \
7667                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7668                 h_fcntl=true;
7669                 echo "<fcntl.h> defines the *_OK access constants." >&4
7670         elif $test `./findhdr unistd.h` && \
7671                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7672                 echo "<unistd.h> defines the *_OK access constants." >&4
7673         else
7674                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7675         fi
7676         ;;
7677 esac
7678 $rm -f access*
7679
7680 : see if accessx exists
7681 set accessx d_accessx
7682 eval $inlibc
7683
7684 : see if alarm exists
7685 set alarm d_alarm
7686 eval $inlibc
7687
7688 : see if atolf exists
7689 set atolf d_atolf
7690 eval $inlibc
7691
7692 : see if atoll exists
7693 set atoll d_atoll
7694 eval $inlibc
7695
7696 : Look for GNU-cc style attribute checking
7697 echo " "
7698 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7699 $cat >attrib.c <<'EOCP'
7700 #include <stdio.h>
7701 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7702 EOCP
7703 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7704         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7705                 echo "Your C compiler doesn't fully support __attribute__."
7706                 val="$undef"
7707         else
7708                 echo "Your C compiler supports __attribute__."
7709                 val="$define"
7710         fi
7711 else
7712         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7713         val="$undef"
7714 fi
7715 set d_attribut
7716 eval $setvar
7717 $rm -f attrib*
7718
7719 : see if bcmp exists
7720 set bcmp d_bcmp
7721 eval $inlibc
7722
7723 : see if bcopy exists
7724 set bcopy d_bcopy
7725 eval $inlibc
7726
7727 : see if this is a unistd.h system
7728 set unistd.h i_unistd
7729 eval $inhdr
7730
7731 : see if getpgrp exists
7732 set getpgrp d_getpgrp
7733 eval $inlibc
7734
7735 case "$d_getpgrp" in
7736 "$define")
7737         echo " "
7738         echo "Checking to see which flavor of getpgrp is in use..."
7739         $cat >set.c <<EOP
7740 #$i_unistd I_UNISTD
7741 #include <sys/types.h>
7742 #ifdef I_UNISTD
7743 #  include <unistd.h>
7744 #endif
7745 int main()
7746 {
7747         if (getuid() == 0) {
7748                 printf("(I see you are running Configure as super-user...)\n");
7749                 setuid(1);
7750         }
7751 #ifdef TRY_BSD_PGRP
7752         if (getpgrp(1) == 0)
7753                 exit(0);
7754 #else
7755         if (getpgrp() > 0)
7756                 exit(0);
7757 #endif
7758         exit(1);
7759 }
7760 EOP
7761         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7762                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7763                 val="$define"
7764         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7765                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7766                 val="$undef"
7767         else
7768                 echo "I can't seem to compile and run the test program."
7769                 if ./usg; then
7770                         xxx="a USG one, i.e. you use getpgrp()."
7771                 else
7772                         # SVR4 systems can appear rather BSD-ish.
7773                         case "$i_unistd" in
7774                         $undef)
7775                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7776                                 val="$define"
7777                                 ;;
7778                         $define)
7779                                 xxx="probably a USG one, i.e. you use getpgrp()."
7780                                 val="$undef"
7781                                 ;;
7782                         esac
7783                 fi
7784                 echo "Assuming your getpgrp is $xxx" >&4
7785         fi
7786         ;;
7787 *) val="$undef";;
7788 esac
7789 set d_bsdgetpgrp
7790 eval $setvar
7791 $rm -f set set.c
7792
7793 : see if setpgrp exists
7794 set setpgrp d_setpgrp
7795 eval $inlibc
7796
7797 case "$d_setpgrp" in
7798 "$define")
7799         echo " "
7800         echo "Checking to see which flavor of setpgrp is in use..."
7801         $cat >set.c <<EOP
7802 #$i_unistd I_UNISTD
7803 #include <sys/types.h>
7804 #ifdef I_UNISTD
7805 #  include <unistd.h>
7806 #endif
7807 int main()
7808 {
7809         if (getuid() == 0) {
7810                 printf("(I see you are running Configure as super-user...)\n");
7811                 setuid(1);
7812         }
7813 #ifdef TRY_BSD_PGRP
7814         if (-1 == setpgrp(1, 1))
7815                 exit(0);
7816 #else
7817         if (setpgrp() != -1)
7818                 exit(0);
7819 #endif
7820         exit(1);
7821 }
7822 EOP
7823         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7824                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7825                 val="$define"
7826         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7827                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7828                 val="$undef"
7829         else
7830                 echo "(I can't seem to compile and run the test program.)"
7831                 if ./usg; then
7832                         xxx="a USG one, i.e. you use setpgrp()."
7833                 else
7834                         # SVR4 systems can appear rather BSD-ish.
7835                         case "$i_unistd" in
7836                         $undef)
7837                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7838                                 val="$define"
7839                                 ;;
7840                         $define)
7841                                 xxx="probably a USG one, i.e. you use setpgrp()."
7842                                 val="$undef"
7843                                 ;;
7844                         esac
7845                 fi
7846                 echo "Assuming your setpgrp is $xxx" >&4
7847         fi
7848         ;;
7849 *) val="$undef";;
7850 esac
7851 set d_bsdsetpgrp
7852 eval $setvar
7853 $rm -f set set.c
7854 : see if bzero exists
7855 set bzero d_bzero
7856 eval $inlibc
7857
7858 : see if signal is declared as pointer to function returning int or void
7859 echo " "
7860 xxx=`./findhdr signal.h`
7861 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7862 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7863         echo "You have int (*signal())() instead of void." >&4
7864         val="$undef"
7865 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7866         echo "You have void (*signal())()." >&4
7867         val="$define"
7868 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7869         echo "You have int (*signal())() instead of void." >&4
7870         val="$undef"
7871 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7872         echo "You have void (*signal())()." >&4
7873         val="$define"
7874 else
7875         case "$d_voidsig" in
7876         '')
7877         echo "I can't determine whether signal handler returns void or int..." >&4
7878                 dflt=void
7879                 rp="What type does your signal handler return?"
7880                 . ./myread
7881                 case "$ans" in
7882                 v*) val="$define";;
7883                 *) val="$undef";;
7884                 esac;;
7885         "$define")
7886                 echo "As you already told me, signal handler returns void." >&4
7887                 val="$define"
7888                 ;;
7889         *)      echo "As you already told me, signal handler returns int." >&4
7890                 val="$undef"
7891                 ;;
7892         esac
7893 fi
7894 set d_voidsig
7895 eval $setvar
7896 case "$d_voidsig" in
7897 "$define") signal_t="void";;
7898 *) signal_t="int";;
7899 esac
7900 $rm -f $$.tmp
7901
7902 : check for ability to cast large floats to 32-bit ints.
7903 echo " "
7904 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7905 if $test "$intsize" -ge 4; then
7906         xxx=int
7907 else
7908         xxx=long
7909 fi
7910 $cat >try.c <<EOCP
7911 #include <stdio.h>
7912 #include <sys/types.h>
7913 #include <signal.h>
7914 $signal_t blech(s) int s; { exit(3); }
7915 int main()
7916 {
7917         $xxx i32;
7918         double f, g;
7919         int result = 0;
7920         char str[16];
7921         signal(SIGFPE, blech);
7922
7923         /* Don't let compiler optimize the test away.  Store the number 
7924            in a writable string for gcc to pass to sscanf under HP/UX.
7925         */
7926         sprintf(str, "2147483647");
7927         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7928         g = 10 * f;
7929         i32  = ($xxx) g;
7930
7931         /* x86 processors will probably give 0x8000 0000, which is a
7932        sign change.  We don't want that.  We want to mimic SPARC
7933            behavior here, which is to preserve the sign and give
7934            back 0x7fff ffff.
7935         */
7936         if (i32 != ($xxx) f)
7937                 result |= 1;
7938         exit(result);
7939 }
7940 EOCP
7941 set try
7942 if eval $compile_ok; then
7943         ./try
7944         yyy=$?
7945 else
7946         echo "(I can't seem to compile the test program--assuming it can't)"
7947         yyy=1
7948 fi
7949 case "$yyy" in
7950 0)      val="$define"
7951         echo "Yup, it can."
7952         ;;
7953 *)      val="$undef"
7954         echo "Nope, it can't."
7955         ;;
7956 esac
7957 set d_casti32
7958 eval $setvar
7959 $rm -f try try.*
7960
7961 : check for ability to cast negative floats to unsigned
7962 echo " "
7963 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7964 $cat >try.c <<EOCP
7965 #include <stdio.h>
7966 #include <sys/types.h>
7967 #include <signal.h>
7968 $signal_t blech(s) int s; { exit(7); }
7969 $signal_t blech_in_list(s) int s; { exit(4); }
7970 unsigned long dummy_long(p) unsigned long p; { return p; }
7971 unsigned int dummy_int(p) unsigned int p; { return p; }
7972 unsigned short dummy_short(p) unsigned short p; { return p; }
7973 int main()
7974 {
7975         double f;
7976         unsigned long along;
7977         unsigned int aint;
7978         unsigned short ashort;
7979         int result = 0;
7980         char str[16];
7981         
7982         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7983            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7984            optimized the whole file away
7985         */
7986         /* Store the number in a writable string for gcc to pass to 
7987            sscanf under HP/UX.
7988         */
7989         sprintf(str, "-123");
7990         sscanf(str, "%lf", &f);  /* f = -123.; */
7991
7992         signal(SIGFPE, blech);
7993         along = (unsigned long)f;
7994         aint = (unsigned int)f;
7995         ashort = (unsigned short)f;
7996         if (along != (unsigned long)-123)
7997                 result |= 1;
7998         if (aint != (unsigned int)-123)
7999                 result |= 1;
8000         if (ashort != (unsigned short)-123)
8001                 result |= 1;
8002         sprintf(str, "1073741824.");
8003         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8004         f = f + f;
8005         along = 0;
8006         along = (unsigned long)f;
8007         if (along != 0x80000000)
8008                 result |= 2;
8009         f -= 1.;
8010         along = 0;
8011         along = (unsigned long)f;
8012         if (along != 0x7fffffff)
8013                 result |= 1;
8014         f += 2.;
8015         along = 0;
8016         along = (unsigned long)f;
8017         if (along != 0x80000001)
8018                 result |= 2;
8019         if (result)
8020                 exit(result);
8021         signal(SIGFPE, blech_in_list);
8022         sprintf(str, "123.");
8023         sscanf(str, "%lf", &f);  /* f = 123.; */
8024         along = dummy_long((unsigned long)f);
8025         aint = dummy_int((unsigned int)f);
8026         ashort = dummy_short((unsigned short)f);
8027         if (along != (unsigned long)123)
8028                 result |= 4;
8029         if (aint != (unsigned int)123)
8030                 result |= 4;
8031         if (ashort != (unsigned short)123)
8032                 result |= 4;
8033         exit(result);
8034
8035 }
8036 EOCP
8037 set try
8038 if eval $compile_ok; then
8039         ./try
8040         castflags=$?
8041 else
8042         echo "(I can't seem to compile the test program--assuming it can't)"
8043         castflags=7
8044 fi
8045 case "$castflags" in
8046 0)      val="$define"
8047         echo "Yup, it can."
8048         ;;
8049 *)      val="$undef"
8050         echo "Nope, it can't."
8051         ;;
8052 esac
8053 set d_castneg
8054 eval $setvar
8055 $rm -f try.*
8056
8057 : see if vprintf exists
8058 echo " "
8059 if set vprintf val -f d_vprintf; eval $csym; $val; then
8060         echo 'vprintf() found.' >&4
8061         val="$define"
8062         $cat >vprintf.c <<'EOF'
8063 #include <varargs.h>
8064
8065 int main() { xxx("foo"); }
8066
8067 xxx(va_alist)
8068 va_dcl
8069 {
8070         va_list args;
8071         char buf[10];
8072
8073         va_start(args);
8074         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8075 }
8076 EOF
8077         set vprintf
8078         if eval $compile && ./vprintf; then
8079                 echo "Your vsprintf() returns (int)." >&4
8080                 val2="$undef"
8081         else
8082                 echo "Your vsprintf() returns (char*)." >&4
8083                 val2="$define"
8084         fi
8085 else
8086         echo 'vprintf() NOT found.' >&4
8087                 val="$undef"
8088                 val2="$undef"
8089 fi
8090 set d_vprintf
8091 eval $setvar
8092 val=$val2
8093 set d_charvspr
8094 eval $setvar
8095
8096 : see if chown exists
8097 set chown d_chown
8098 eval $inlibc
8099
8100 : see if chroot exists
8101 set chroot d_chroot
8102 eval $inlibc
8103
8104 : see if chsize exists
8105 set chsize d_chsize
8106 eval $inlibc
8107
8108 : check for const keyword
8109 echo " "
8110 echo 'Checking to see if your C compiler knows about "const"...' >&4
8111 $cat >const.c <<'EOCP'
8112 typedef struct spug { int drokk; } spug;
8113 int main()
8114 {
8115         const char *foo;
8116         const spug y;
8117 }
8118 EOCP
8119 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8120         val="$define"
8121         echo "Yup, it does."
8122 else
8123         val="$undef"
8124         echo "Nope, it doesn't."
8125 fi
8126 set d_const
8127 eval $setvar
8128
8129 : see if crypt exists
8130 echo " "
8131 if set crypt val -f d_crypt; eval $csym; $val; then
8132         echo 'crypt() found.' >&4
8133         val="$define"
8134         cryptlib=''
8135 else
8136         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8137         if $test -z "$cryptlib"; then
8138                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8139         else
8140                 cryptlib=-lcrypt
8141         fi
8142         if $test -z "$cryptlib"; then
8143                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8144         else
8145                 cryptlib=-lcrypt
8146         fi
8147         if $test -z "$cryptlib"; then
8148                 cryptlib=`./loc libcrypt$_a "" $libpth`
8149         else
8150                 cryptlib=-lcrypt
8151         fi
8152         if $test -z "$cryptlib"; then
8153                 echo 'crypt() NOT found.' >&4
8154                 val="$undef"
8155         else
8156                 val="$define"
8157         fi
8158 fi
8159 set d_crypt
8160 eval $setvar
8161
8162 : get csh whereabouts
8163 case "$csh" in
8164 'csh') val="$undef" ;;
8165 *) val="$define" ;;
8166 esac
8167 set d_csh
8168 eval $setvar
8169 : Respect a hint or command line value for full_csh.
8170 case "$full_csh" in
8171 '') full_csh=$csh ;;
8172 esac
8173
8174 : see if cuserid exists
8175 set cuserid d_cuserid
8176 eval $inlibc
8177
8178 : see if this is a limits.h system
8179 set limits.h i_limits
8180 eval $inhdr
8181
8182 : see if this is a float.h system
8183 set float.h i_float
8184 eval $inhdr
8185
8186 : See if number of significant digits in a double precision number is known
8187 echo " "
8188 $cat >dbl_dig.c <<EOM
8189 #$i_limits I_LIMITS
8190 #$i_float I_FLOAT
8191 #ifdef I_LIMITS
8192 #include <limits.h>
8193 #endif
8194 #ifdef I_FLOAT
8195 #include <float.h>
8196 #endif
8197 #ifdef DBL_DIG
8198 printf("Contains DBL_DIG");
8199 #endif
8200 EOM
8201 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8202 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8203         echo "DBL_DIG found." >&4
8204         val="$define"
8205 else
8206         echo "DBL_DIG NOT found." >&4
8207         val="$undef"
8208 fi
8209 $rm -f dbl_dig.?
8210 set d_dbl_dig
8211 eval $setvar
8212
8213 : see if difftime exists
8214 set difftime d_difftime
8215 eval $inlibc
8216
8217 : see if this is a dirent system
8218 echo " "
8219 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8220         val="$define"
8221         echo "<dirent.h> found." >&4
8222 else
8223         val="$undef"
8224         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8225                 echo "<sys/dir.h> found." >&4
8226                 echo " "
8227         else
8228                 xinc=`./findhdr sys/ndir.h`
8229         fi
8230         echo "<dirent.h> NOT found." >&4
8231 fi
8232 set i_dirent
8233 eval $setvar
8234
8235 : Look for type of directory structure.
8236 echo " "
8237 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8238
8239 case "$direntrytype" in
8240 ''|' ')
8241         case "$i_dirent" in
8242         $define) guess1='struct dirent' ;;
8243         *) guess1='struct direct'  ;;
8244         esac
8245         ;;
8246 *)      guess1="$direntrytype"
8247         ;;
8248 esac
8249
8250 case "$guess1" in
8251 'struct dirent') guess2='struct direct' ;;
8252 *) guess2='struct dirent' ;;
8253 esac
8254                 
8255 if $contains "$guess1" try.c >/dev/null 2>&1; then
8256         direntrytype="$guess1"
8257         echo "Your directory entries are $direntrytype." >&4
8258 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8259         direntrytype="$guess2"
8260         echo "Your directory entries seem to be $direntrytype." >&4
8261 else
8262         echo "I don't recognize your system's directory entries." >&4
8263         rp="What type is used for directory entries on this system?"
8264         dflt="$guess1"
8265         . ./myread
8266         direntrytype="$ans"
8267 fi
8268 $rm -f try.c
8269
8270
8271 : see if the directory entry stores field length
8272 echo " "
8273 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8274 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8275         echo "Good, your directory entry keeps length information in d_namlen." >&4
8276         val="$define"
8277 else
8278         echo "Your directory entry does not know about the d_namlen field." >&4
8279         val="$undef"
8280 fi
8281 set d_dirnamlen
8282 eval $setvar
8283 $rm -f try.c
8284
8285 : see if dlerror exists
8286 xxx_runnm="$runnm"
8287 runnm=false
8288 set dlerror d_dlerror
8289 eval $inlibc
8290 runnm="$xxx_runnm"
8291
8292 : see if dlfcn is available
8293 set dlfcn.h i_dlfcn
8294 eval $inhdr
8295
8296 case "$usedl" in
8297 $define|y|true)
8298         $cat << EOM
8299
8300 On a few systems, the dynamically loaded modules that perl generates and uses
8301 will need a different extension than shared libs. The default will probably
8302 be appropriate.
8303
8304 EOM
8305         case "$dlext" in
8306         '')     dflt="$so" ;;
8307         *)      dflt="$dlext" ;;
8308         esac
8309         rp='What is the extension of dynamically loaded modules'
8310         . ./myread
8311         dlext="$ans"
8312         ;;
8313 *)
8314         dlext="none"
8315         ;;
8316 esac
8317
8318 : Check if dlsym need a leading underscore
8319 echo " "
8320 val="$undef"
8321
8322 case "$dlsrc" in
8323 dl_dlopen.xs)
8324         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8325         $cat >dyna.c <<'EOM'
8326 fred () { }
8327 EOM
8328
8329 $cat >fred.c<<EOM
8330
8331 #include <stdio.h>
8332 #$i_dlfcn I_DLFCN
8333 #ifdef I_DLFCN
8334 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8335 #else
8336 #include <sys/types.h>
8337 #include <nlist.h>
8338 #include <link.h>
8339 #endif
8340
8341 extern int fred() ;
8342
8343 int main()
8344 {
8345     void * handle ;
8346     void * symbol ;
8347 #ifndef RTLD_LAZY
8348     int mode = 1 ;
8349 #else
8350     int mode = RTLD_LAZY ;
8351 #endif
8352     handle = dlopen("./dyna.$dlext", mode) ;
8353     if (handle == NULL) {
8354         printf ("1\n") ;
8355         fflush (stdout) ;
8356         exit(0);
8357     }
8358     symbol = dlsym(handle, "fred") ;
8359     if (symbol == NULL) {
8360         /* try putting a leading underscore */
8361         symbol = dlsym(handle, "_fred") ;
8362         if (symbol == NULL) {
8363             printf ("2\n") ;
8364             fflush (stdout) ;
8365             exit(0);
8366         }
8367         printf ("3\n") ;
8368     }
8369     else
8370         printf ("4\n") ;
8371     fflush (stdout) ;
8372     exit(0);
8373 }
8374 EOM
8375         : Call the object file tmp-dyna.o in case dlext=o.
8376         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8377                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8378                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8379                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8380                 xxx=`./fred`
8381                 case $xxx in
8382                 1)      echo "Test program failed using dlopen." >&4
8383                         echo "Perhaps you should not use dynamic loading." >&4;;
8384                 2)      echo "Test program failed using dlsym." >&4
8385                         echo "Perhaps you should not use dynamic loading." >&4;;
8386                 3)      echo "dlsym needs a leading underscore" >&4
8387                         val="$define" ;;
8388                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8389                 esac
8390         else
8391                 echo "I can't compile and run the test program." >&4
8392                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8393         fi
8394         ;;
8395 esac
8396                 
8397 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8398
8399 set d_dlsymun
8400 eval $setvar
8401
8402 hasproto='varname=$1; func=$2; shift; shift;
8403 while $test $# -ge 2; do
8404         case "$1" in
8405         $define) echo "#include <$2>";;
8406         esac ;
8407     shift 2;
8408 done > try.c;
8409 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8410 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8411         echo "$func() prototype found.";
8412         val="$define";
8413 else
8414         echo "$func() prototype NOT found.";
8415         val="$undef";
8416 fi;
8417 set $varname;
8418 eval $setvar;
8419 $rm -f try.c tryout.c'
8420
8421 : see if prototype for drand48 is available
8422 echo " "
8423 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8424 eval $hasproto
8425
8426 : see if dup2 exists
8427 set dup2 d_dup2
8428 eval $inlibc
8429
8430 : see if eaccess exists
8431 set eaccess d_eaccess
8432 eval $inlibc
8433
8434 : see if endgrent exists
8435 set endgrent d_endgrent
8436 eval $inlibc
8437
8438 : see if endhostent exists
8439 set endhostent d_endhent
8440 eval $inlibc
8441
8442 : see if endnetent exists
8443 set endnetent d_endnent
8444 eval $inlibc
8445
8446 : see if endprotoent exists
8447 set endprotoent d_endpent
8448 eval $inlibc
8449
8450 : see if endpwent exists
8451 set endpwent d_endpwent
8452 eval $inlibc
8453
8454 : see if endservent exists
8455 set endservent d_endsent
8456 eval $inlibc
8457
8458 : see if endspent exists
8459 set endspent d_endspent
8460 eval $inlibc
8461
8462 : Locate the flags for 'open()'
8463 echo " "
8464 $cat >open3.c <<'EOCP'
8465 #include <sys/types.h>
8466 #ifdef I_FCNTL
8467 #include <fcntl.h>
8468 #endif
8469 #ifdef I_SYS_FILE
8470 #include <sys/file.h>
8471 #endif
8472 int main() {
8473         if(O_RDONLY);
8474 #ifdef O_TRUNC
8475         exit(0);
8476 #else
8477         exit(1);
8478 #endif
8479 }
8480 EOCP
8481 : check sys/file.h first to get FREAD on Sun
8482 if $test `./findhdr sys/file.h` && \
8483                 set open3 -DI_SYS_FILE && eval $compile; then
8484         h_sysfile=true;
8485         echo "<sys/file.h> defines the O_* constants..." >&4
8486         if ./open3; then
8487                 echo "and you have the 3 argument form of open()." >&4
8488                 val="$define"
8489         else
8490                 echo "but not the 3 argument form of open().  Oh, well." >&4
8491                 val="$undef"
8492         fi
8493 elif $test `./findhdr fcntl.h` && \
8494                 set open3 -DI_FCNTL && eval $compile; then
8495         h_fcntl=true;
8496         echo "<fcntl.h> defines the O_* constants..." >&4
8497         if ./open3; then
8498                 echo "and you have the 3 argument form of open()." >&4
8499                 val="$define"
8500         else
8501                 echo "but not the 3 argument form of open().  Oh, well." >&4
8502                 val="$undef"
8503         fi
8504 else
8505         val="$undef"
8506         echo "I can't find the O_* constant definitions!  You got problems." >&4
8507 fi
8508 set d_open3
8509 eval $setvar
8510 $rm -f open3*
8511
8512 : see which of string.h or strings.h is needed
8513 echo " "
8514 strings=`./findhdr string.h`
8515 if $test "$strings" && $test -r "$strings"; then
8516         echo "Using <string.h> instead of <strings.h>." >&4
8517         val="$define"
8518 else
8519         val="$undef"
8520         strings=`./findhdr strings.h`
8521         if $test "$strings" && $test -r "$strings"; then
8522                 echo "Using <strings.h> instead of <string.h>." >&4
8523         else
8524                 echo "No string header found -- You'll surely have problems." >&4
8525         fi
8526 fi
8527 set i_string
8528 eval $setvar
8529 case "$i_string" in
8530 "$undef") strings=`./findhdr strings.h`;;
8531 *)        strings=`./findhdr string.h`;;
8532 esac
8533
8534 : check for non-blocking I/O stuff
8535 case "$h_sysfile" in
8536 true) echo "#include <sys/file.h>" > head.c;;
8537 *)
8538         case "$h_fcntl" in
8539         true) echo "#include <fcntl.h>" > head.c;;
8540         *) echo "#include <sys/fcntl.h>" > head.c;;
8541         esac
8542         ;;
8543 esac
8544 echo " "
8545 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8546 case "$o_nonblock" in
8547 '')
8548         $cat head.c > try.c
8549         $cat >>try.c <<'EOCP'
8550 #include <stdio.h>
8551 int main() {
8552 #ifdef O_NONBLOCK
8553         printf("O_NONBLOCK\n");
8554         exit(0);
8555 #endif
8556 #ifdef O_NDELAY
8557         printf("O_NDELAY\n");
8558         exit(0);
8559 #endif
8560 #ifdef FNDELAY
8561         printf("FNDELAY\n");
8562         exit(0);
8563 #endif
8564         exit(0);
8565 }
8566 EOCP
8567         set try
8568         if eval $compile_ok; then
8569                 o_nonblock=`./try`
8570                 case "$o_nonblock" in
8571                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8572                 *) echo "Seems like we can use $o_nonblock.";;
8573                 esac
8574         else
8575                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8576         fi
8577         ;;
8578 *) echo "Using $hint value $o_nonblock.";;
8579 esac
8580 $rm -f try try.* .out core
8581
8582 echo " "
8583 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8584 case "$eagain" in
8585 '')
8586         $cat head.c > try.c
8587         $cat >>try.c <<EOCP
8588 #include <errno.h>
8589 #include <sys/types.h>
8590 #include <signal.h>
8591 #include <stdio.h> 
8592 #define MY_O_NONBLOCK $o_nonblock
8593 #ifndef errno  /* XXX need better Configure test */
8594 extern int errno;
8595 #endif
8596 #$i_unistd I_UNISTD
8597 #ifdef I_UNISTD
8598 #include <unistd.h>
8599 #endif
8600 #ifdef $i_string
8601 #include <string.h>
8602 #else
8603 #include <strings.h>
8604 #endif
8605 $signal_t blech(x) int x; { exit(3); }
8606 EOCP
8607         $cat >> try.c <<'EOCP'
8608 int main()
8609 {
8610         int pd[2];
8611         int pu[2];
8612         char buf[1];
8613         char string[100];
8614
8615         pipe(pd);       /* Down: child -> parent */
8616         pipe(pu);       /* Up: parent -> child */
8617         if (0 != fork()) {
8618                 int ret;
8619                 close(pd[1]);   /* Parent reads from pd[0] */
8620                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8621                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8622                         exit(1);
8623                 signal(SIGALRM, blech);
8624                 alarm(5);
8625                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8626                         exit(2);
8627                 sprintf(string, "%d\n", ret);
8628                 write(2, string, strlen(string));
8629                 alarm(0);
8630 #ifdef EAGAIN
8631                 if (errno == EAGAIN) {
8632                         printf("EAGAIN\n");
8633                         goto ok;
8634                 }
8635 #endif
8636 #ifdef EWOULDBLOCK
8637                 if (errno == EWOULDBLOCK)
8638                         printf("EWOULDBLOCK\n");
8639 #endif
8640         ok:
8641                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8642                 sleep(2);                               /* Give it time to close our pipe */
8643                 alarm(5);
8644                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8645                 alarm(0);
8646                 sprintf(string, "%d\n", ret);
8647                 write(3, string, strlen(string));
8648                 exit(0);
8649         }
8650
8651         close(pd[0]);                   /* We write to pd[1] */
8652         close(pu[1]);                   /* We read from pu[0] */
8653         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8654         close(pd[1]);                   /* Pipe pd is now fully closed! */
8655         exit(0);                                /* Bye bye, thank you for playing! */
8656 }
8657 EOCP
8658         set try
8659         if eval $compile_ok; then
8660                 echo "$startsh" >mtry
8661                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8662                 chmod +x mtry
8663                 ./mtry >/dev/null 2>&1
8664                 case $? in
8665                 0) eagain=`$cat try.out`;;
8666                 1) echo "Could not perform non-blocking setting!";;
8667                 2) echo "I did a successful read() for something that was not there!";;
8668                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8669                 *) echo "Something terribly wrong happened during testing.";;
8670                 esac
8671                 rd_nodata=`$cat try.ret`
8672                 echo "A read() system call with no data present returns $rd_nodata."
8673                 case "$rd_nodata" in
8674                 0|-1) ;;
8675                 *)
8676                         echo "(That's peculiar, fixing that to be -1.)"
8677                         rd_nodata=-1
8678                         ;;
8679                 esac
8680                 case "$eagain" in
8681                 '')
8682                         echo "Forcing errno EAGAIN on read() with no data available."
8683                         eagain=EAGAIN
8684                         ;;
8685                 *)
8686                         echo "Your read() sets errno to $eagain when no data is available."
8687                         ;;
8688                 esac
8689                 status=`$cat try.err`
8690                 case "$status" in
8691                 0) echo "And it correctly returns 0 to signal EOF.";;
8692                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8693                 *) echo "However, your read() returns '$status' on EOF??";;
8694                 esac
8695                 val="$define"
8696                 if test "$status" = "$rd_nodata"; then
8697                         echo "WARNING: you can't distinguish between EOF and no data!"
8698                         val="$undef"
8699                 fi
8700         else
8701                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8702                 eagain=EAGAIN
8703         fi
8704         set d_eofnblk
8705         eval $setvar
8706         ;;
8707 *)
8708         echo "Using $hint value $eagain."
8709         echo "Your read() returns $rd_nodata when no data is present."
8710         case "$d_eofnblk" in
8711         "$define") echo "And you can see EOF because read() returns 0.";;
8712         "$undef") echo "But you can't see EOF status from read() returned value.";;
8713         *)
8714                 echo "(Assuming you can't see EOF status from read anyway.)"
8715                 d_eofnblk=$undef
8716                 ;;
8717         esac
8718         ;;
8719 esac
8720 $rm -f try try.* .out core head.c mtry
8721
8722 : see if fchmod exists
8723 set fchmod d_fchmod
8724 eval $inlibc
8725
8726 : see if fchown exists
8727 set fchown d_fchown
8728 eval $inlibc
8729
8730 : see if this is an fcntl system
8731 set fcntl d_fcntl
8732 eval $inlibc
8733
8734 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8735 while $test $# -ge 2; do
8736         case "$1" in
8737         $define) echo "#include <$2>";;
8738         esac ;
8739     shift 2;
8740 done > try.c;
8741 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8742 set try;
8743 if eval $compile; then
8744         val="$define";
8745 else
8746         val="$undef";
8747 fi;
8748 set $varname;
8749 eval $setvar;
8750 $rm -f try.c try.o'
8751
8752 socketlib=''
8753 sockethdr=''
8754 : see whether socket exists
8755 echo " "
8756 $echo $n "Hmm... $c" >&4
8757 if set socket val -f d_socket; eval $csym; $val; then
8758         echo "Looks like you have Berkeley networking support." >&4
8759         d_socket="$define"
8760         if set setsockopt val -f; eval $csym; $val; then
8761                 d_oldsock="$undef"
8762         else
8763                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8764                 d_oldsock="$define"
8765         fi
8766 else
8767         if $contains socklib libc.list >/dev/null 2>&1; then
8768                 echo "Looks like you have Berkeley networking support." >&4
8769                 d_socket="$define"
8770                 : we will have to assume that it supports the 4.2 BSD interface
8771                 d_oldsock="$undef"
8772         else
8773                 echo "You don't have Berkeley networking in libc$_a..." >&4
8774                 if test "X$d_socket" = "X$define"; then
8775                    echo "...but you seem to believe that you have sockets." >&4
8776                 else
8777                         for net in net socket
8778                         do
8779                                 if test -f /usr/lib/lib$net$_a; then
8780                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8781                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8782                                         if $contains socket libc.list >/dev/null 2>&1; then
8783                                                 d_socket="$define"
8784                                                 socketlib="-l$net"
8785                                                 case "$net" in
8786                                                 net)
8787                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8788                                                         sockethdr="-I/usr/netinclude"
8789                                                         ;;
8790                                                 esac
8791                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8792                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8793                                                         d_oldsock="$undef"
8794                                                 else
8795                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8796                                                         d_oldsock="$define"
8797                                                 fi
8798                                                 break
8799                                         fi
8800                                 fi
8801                         done
8802                         if test "X$d_socket" != "X$define"; then
8803                            echo "or anywhere else I see." >&4
8804                            d_socket="$undef"
8805                            d_oldsock="$undef"
8806                         fi
8807                 fi
8808         fi
8809 fi
8810
8811 : see if socketpair exists
8812 set socketpair d_sockpair
8813 eval $inlibc
8814
8815
8816 echo " "
8817 echo "Checking the availability of certain socket constants..." >& 4
8818 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8819         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8820         $cat >try.c <<EOF
8821 #include <sys/types.h>
8822 #include <sys/socket.h>
8823 int main() {
8824     int i = $ENUM;
8825 }
8826 EOF
8827         val="$undef"
8828         set try; if eval $compile; then
8829                 val="$define"
8830         fi
8831         set d_${enum}; eval $setvar
8832         $rm -f try.c try
8833 done
8834
8835 : see if sys/select.h has to be included
8836 set sys/select.h i_sysselct
8837 eval $inhdr
8838
8839 : see if we should include time.h, sys/time.h, or both
8840 echo " "
8841 if test "X$timeincl" = X; then
8842         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8843         $echo $n "I'm now running the test program...$c"
8844         $cat >try.c <<'EOCP'
8845 #include <sys/types.h>
8846 #ifdef I_TIME
8847 #include <time.h>
8848 #endif
8849 #ifdef I_SYSTIME
8850 #ifdef SYSTIMEKERNEL
8851 #define KERNEL
8852 #endif
8853 #include <sys/time.h>
8854 #endif
8855 #ifdef I_SYSSELECT
8856 #include <sys/select.h>
8857 #endif
8858 int main()
8859 {
8860         struct tm foo;
8861 #ifdef S_TIMEVAL
8862         struct timeval bar;
8863 #endif
8864 #ifdef S_TIMEZONE
8865         struct timezone tzp;
8866 #endif
8867         if (foo.tm_sec == foo.tm_sec)
8868                 exit(0);
8869 #ifdef S_TIMEVAL
8870         if (bar.tv_sec == bar.tv_sec)
8871                 exit(0);
8872 #endif
8873         exit(1);
8874 }
8875 EOCP
8876         flags=''
8877         for s_timezone in '-DS_TIMEZONE' ''; do
8878         sysselect=''
8879         for s_timeval in '-DS_TIMEVAL' ''; do
8880         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8881         for i_time in '' '-DI_TIME'; do
8882         for i_systime in '-DI_SYSTIME' ''; do
8883                 case "$flags" in
8884                 '') $echo $n ".$c"
8885                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8886                         if eval $compile; then
8887                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8888                                 shift
8889                                 flags="$*"
8890                                 echo " "
8891                                 $echo $n "Succeeded with $flags$c"
8892                         fi
8893                         ;;
8894                 esac
8895         done
8896         done
8897         done
8898         done
8899         done
8900         timeincl=''
8901         echo " "
8902         case "$flags" in
8903         *SYSTIMEKERNEL*) i_systimek="$define"
8904                 timeincl=`./findhdr sys/time.h`
8905                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8906         *) i_systimek="$undef";;
8907         esac
8908         case "$flags" in
8909         *I_TIME*) i_time="$define"
8910                 timeincl=`./findhdr time.h`" $timeincl"
8911                 echo "We'll include <time.h>." >&4;;
8912         *) i_time="$undef";;
8913         esac
8914         case "$flags" in
8915         *I_SYSTIME*) i_systime="$define"
8916                 timeincl=`./findhdr sys/time.h`" $timeincl"
8917                 echo "We'll include <sys/time.h>." >&4;;
8918         *) i_systime="$undef";;
8919         esac
8920         $rm -f try.c try
8921 fi
8922
8923 : check for fd_set items
8924 $cat <<EOM
8925
8926 Checking to see how well your C compiler handles fd_set and friends ...
8927 EOM
8928 $cat >fd_set.c <<EOCP
8929 #$i_systime I_SYS_TIME
8930 #$i_sysselct I_SYS_SELECT
8931 #$d_socket HAS_SOCKET
8932 #include <sys/types.h>
8933 #ifdef HAS_SOCKET
8934 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8935 #endif
8936 #ifdef I_SYS_TIME
8937 #include <sys/time.h>
8938 #endif
8939 #ifdef I_SYS_SELECT
8940 #include <sys/select.h>
8941 #endif
8942 int main() {
8943         fd_set fds;
8944
8945 #ifdef TRYBITS
8946         if(fds.fds_bits);
8947 #endif
8948
8949 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8950         exit(0);
8951 #else
8952         exit(1);
8953 #endif
8954 }
8955 EOCP
8956 set fd_set -DTRYBITS
8957 if eval $compile; then
8958         d_fds_bits="$define"
8959         d_fd_set="$define"
8960         echo "Well, your system knows about the normal fd_set typedef..." >&4
8961         if ./fd_set; then
8962                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8963                 d_fd_macros="$define"
8964         else
8965                 $cat >&4 <<'EOM'
8966 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8967 EOM
8968                 d_fd_macros="$undef"
8969         fi
8970 else
8971         $cat <<'EOM'
8972 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8973 EOM
8974         set fd_set
8975         if eval $compile; then
8976                 d_fds_bits="$undef"
8977                 d_fd_set="$define"
8978                 echo "Well, your system has some sort of fd_set available..." >&4
8979                 if ./fd_set; then
8980                         echo "and you have the normal fd_set macros." >&4
8981                         d_fd_macros="$define"
8982                 else
8983                         $cat <<'EOM'
8984 but not the normal fd_set macros!  Gross!  More work for me...
8985 EOM
8986                         d_fd_macros="$undef"
8987                 fi
8988         else
8989         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8990                 d_fd_set="$undef"
8991                 d_fds_bits="$undef"
8992                 d_fd_macros="$undef"
8993         fi
8994 fi
8995 $rm -f fd_set*
8996
8997 : see if fgetpos exists
8998 set fgetpos d_fgetpos
8999 eval $inlibc
9000
9001 : see if flock exists
9002 set flock d_flock
9003 eval $inlibc
9004
9005 : see if fork exists
9006 set fork d_fork
9007 eval $inlibc
9008
9009 : see if pathconf exists
9010 set pathconf d_pathconf
9011 eval $inlibc
9012
9013 : see if fpathconf exists
9014 set fpathconf d_fpathconf
9015 eval $inlibc
9016
9017
9018 : check for fpos64_t
9019 echo " "
9020 echo "Checking to see if you have fpos64_t..." >&4
9021 $cat >try.c <<EOCP
9022 #include <stdio.h>
9023 int main() { fpos64_t x = 7; }
9024 EOCP
9025 set try
9026 if eval $compile; then
9027         val="$define"
9028         echo "You have fpos64_t."
9029 else
9030         val="$undef"
9031         echo "You do not have fpos64_t."
9032         case "$fpossize" in
9033         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9034         esac
9035 fi
9036 $rm -f try.* try
9037 set d_fpos64_t
9038 eval $setvar
9039
9040 hasstruct='varname=$1; struct=$2; shift; shift;
9041 while $test $# -ge 2; do
9042         case "$1" in
9043         $define) echo "#include <$2>";;
9044         esac ;
9045     shift 2;
9046 done > try.c;
9047 echo "int main () { struct $struct foo; }" >> try.c;
9048 set try;
9049 if eval $compile; then
9050         val="$define";
9051 else
9052         val="$undef";
9053 fi;
9054 set $varname;
9055 eval $setvar;
9056 $rm -f try.c try.o'
9057
9058 : see if this is a sys/param system
9059 set sys/param.h i_sysparam
9060 eval $inhdr
9061
9062 : see if this is a sys/mount.h system
9063 set sys/mount.h i_sysmount
9064 eval $inhdr
9065
9066 : see if sys/types.h has to be included
9067 set sys/types.h i_systypes
9068 eval $inhdr
9069
9070
9071 echo " "
9072 echo "Checking to see if your system supports struct fs_data..." >&4
9073 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9074 eval $hasstruct
9075 case "$d_fs_data_s" in
9076 "$define")      echo "Yes, it does."   ;;
9077 *)              echo "No, it doesn't." ;;
9078 esac
9079
9080 : see if fseeko exists
9081 set fseeko d_fseeko
9082 eval $inlibc
9083 case "$longsize" in
9084 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9085 esac
9086
9087 : see if fsetpos exists
9088 set fsetpos d_fsetpos
9089 eval $inlibc
9090
9091
9092 : see if fstatfs exists
9093 set fstatfs d_fstatfs
9094 eval $inlibc
9095
9096
9097 : see if statvfs exists
9098 set statvfs d_statvfs
9099 eval $inlibc
9100
9101 : see if fstatvfs exists
9102 set fstatvfs d_fstatvfs
9103 eval $inlibc
9104
9105
9106 : see if ftello exists
9107 set ftello d_ftello
9108 eval $inlibc
9109 case "$longsize" in
9110 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9111 esac
9112
9113 : see if getcwd exists
9114 set getcwd d_getcwd
9115 eval $inlibc
9116
9117
9118 : see if getfsstat exists
9119 set getfsstat d_getfsstat
9120 eval $inlibc
9121
9122 : see if getgrent exists
9123 set getgrent d_getgrent
9124 eval $inlibc
9125
9126 : see if gethostbyaddr exists
9127 set gethostbyaddr d_gethbyaddr
9128 eval $inlibc
9129
9130 : see if gethostbyname exists
9131 set gethostbyname d_gethbyname
9132 eval $inlibc
9133
9134 : see if gethostent exists
9135 set gethostent d_gethent
9136 eval $inlibc
9137
9138 : see how we will look up host name
9139 echo " "
9140 call=''
9141 if set gethostname val -f d_gethname; eval $csym; $val; then
9142         echo 'gethostname() found.' >&4
9143         d_gethname="$define"
9144         call=gethostname
9145 fi
9146 if set uname val -f d_uname; eval $csym; $val; then
9147         if ./xenix; then
9148                 $cat <<'EOM'
9149 uname() was found, but you're running xenix, and older versions of xenix
9150 have a broken uname(). If you don't really know whether your xenix is old
9151 enough to have a broken system call, use the default answer.
9152
9153 EOM
9154                 dflt=y
9155                 case "$d_uname" in
9156                 "$define") dflt=n;;
9157                 esac
9158                 rp='Is your uname() broken?'
9159                 . ./myread
9160                 case "$ans" in
9161                 n*) d_uname="$define"; call=uname;;
9162                 esac
9163         else
9164                 echo 'uname() found.' >&4
9165                 d_uname="$define"
9166                 case "$call" in
9167                 '') call=uname ;;
9168                 esac
9169         fi
9170 fi
9171 case "$d_gethname" in
9172 '') d_gethname="$undef";;
9173 esac
9174 case "$d_uname" in
9175 '') d_uname="$undef";;
9176 esac
9177 case "$d_uname$d_gethname" in
9178 *define*)
9179         dflt=n
9180         cat <<EOM
9181  
9182 Every now and then someone has a $call() that lies about the hostname
9183 but can't be fixed for political or economic reasons.  If you wish, I can
9184 pretend $call() isn't there and maybe compute hostname at run-time
9185 thanks to the '$phostname' command.
9186
9187 EOM
9188         rp="Shall I ignore $call() from now on?"
9189         . ./myread
9190         case "$ans" in
9191         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9192         esac;;
9193 esac
9194 case "$phostname" in
9195 '') aphostname='';;
9196 *) case "$aphostname" in
9197         /*) ;;
9198         *) set X $phostname
9199                 shift
9200                 file=$1
9201                 shift
9202                 file=`./loc $file $file $pth`
9203                 aphostname=`echo $file $*`
9204                 ;;
9205         esac
9206         ;;
9207 esac
9208 case "$d_uname$d_gethname" in
9209 *define*) ;;
9210 *)
9211         case "$phostname" in
9212         '')
9213                 echo "There will be no way for $package to get your hostname." >&4;;
9214         *)
9215         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9216                 ;;
9217         esac;;
9218 esac
9219 case "$d_phostname" in
9220 '') d_phostname="$undef";;
9221 esac
9222
9223 : see if this is a netdb.h system
9224 set netdb.h i_netdb
9225 eval $inhdr
9226
9227 : see if prototypes for various gethostxxx netdb.h functions are available
9228 echo " "
9229 set d_gethostprotos gethostent $i_netdb netdb.h
9230 eval $hasproto
9231
9232 : see if getlogin exists
9233 set getlogin d_getlogin
9234 eval $inlibc
9235
9236 : see if getmnt exists
9237 set getmnt d_getmnt
9238 eval $inlibc
9239
9240 : see if getmntent exists
9241 set getmntent d_getmntent
9242 eval $inlibc
9243
9244 : see if getnetbyaddr exists
9245 set getnetbyaddr d_getnbyaddr
9246 eval $inlibc
9247
9248 : see if getnetbyname exists
9249 set getnetbyname d_getnbyname
9250 eval $inlibc
9251
9252 : see if getnetent exists
9253 set getnetent d_getnent
9254 eval $inlibc
9255
9256 : see if prototypes for various getnetxxx netdb.h functions are available
9257 echo " "
9258 set d_getnetprotos getnetent $i_netdb netdb.h
9259 eval $hasproto
9260
9261
9262 : see if getprotobyname exists
9263 set getprotobyname d_getpbyname
9264 eval $inlibc
9265
9266 : see if getprotobynumber exists
9267 set getprotobynumber d_getpbynumber
9268 eval $inlibc
9269
9270 : see if getprotoent exists
9271 set getprotoent d_getpent
9272 eval $inlibc
9273
9274 : see if getpgid exists
9275 set getpgid d_getpgid
9276 eval $inlibc
9277
9278 : see if getpgrp2 exists
9279 set getpgrp2 d_getpgrp2
9280 eval $inlibc
9281
9282 : see if getppid exists
9283 set getppid d_getppid
9284 eval $inlibc
9285
9286 : see if getpriority exists
9287 set getpriority d_getprior
9288 eval $inlibc
9289
9290 : see if prototypes for various getprotoxxx netdb.h functions are available
9291 echo " "
9292 set d_getprotoprotos getprotoent $i_netdb netdb.h
9293 eval $hasproto
9294
9295 : see if getpwent exists
9296 set getpwent d_getpwent
9297 eval $inlibc
9298
9299
9300 : see if getservbyname exists
9301 set getservbyname d_getsbyname
9302 eval $inlibc
9303
9304 : see if getservbyport exists
9305 set getservbyport d_getsbyport
9306 eval $inlibc
9307
9308 : see if getservent exists
9309 set getservent d_getsent
9310 eval $inlibc
9311
9312 : see if prototypes for various getservxxx netdb.h functions are available
9313 echo " "
9314 set d_getservprotos getservent $i_netdb netdb.h
9315 eval $hasproto
9316
9317 : see if getspent exists
9318 set getspent d_getspent
9319 eval $inlibc
9320
9321 : see if getspnam exists
9322 set getspnam d_getspnam
9323 eval $inlibc
9324
9325 : see if gettimeofday or ftime exists
9326 set gettimeofday d_gettimeod
9327 eval $inlibc
9328 case "$d_gettimeod" in
9329 "$undef")
9330         set ftime d_ftime 
9331         eval $inlibc
9332         ;;
9333 *)
9334         val="$undef"; set d_ftime; eval $setvar
9335         ;;
9336 esac
9337 case "$d_gettimeod$d_ftime" in
9338 "$undef$undef")
9339         echo " "
9340         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9341         ;;
9342 esac
9343
9344 : see if this is an grp system
9345 set grp.h i_grp
9346 eval $inhdr
9347
9348 case "$i_grp" in
9349 $define)
9350         xxx=`./findhdr grp.h`
9351         $cppstdin $cppflags $cppminus < $xxx >$$.h
9352
9353         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9354                 val="$define"
9355         else
9356                 val="$undef"
9357         fi
9358         set d_grpasswd
9359         eval $setvar
9360
9361         $rm -f $$.h
9362         ;;
9363 *)
9364         val="$undef";
9365         set d_grpasswd; eval $setvar
9366         ;;
9367 esac
9368
9369 : see if hasmntopt exists
9370 set hasmntopt d_hasmntopt
9371 eval $inlibc
9372
9373 : see if this is a netinet/in.h or sys/in.h system
9374 set netinet/in.h i_niin sys/in.h i_sysin
9375 eval $inhdr
9376
9377 : see if arpa/inet.h has to be included
9378 set arpa/inet.h i_arpainet
9379 eval $inhdr
9380
9381 : see if htonl --and friends-- exists
9382 val=''
9383 set htonl val
9384 eval $inlibc
9385
9386 : Maybe they are macros.
9387 case "$val" in
9388 $undef)
9389         $cat >htonl.c <<EOM
9390 #include <stdio.h>
9391 #include <sys/types.h>
9392 #$i_niin I_NETINET_IN
9393 #$i_sysin I_SYS_IN
9394 #$i_arpainet I_ARPA_INET
9395 #ifdef I_NETINET_IN
9396 #include <netinet/in.h>
9397 #endif
9398 #ifdef I_SYS_IN
9399 #include <sys/in.h>
9400 #endif
9401 #ifdef I_ARPA_INET
9402 #include <arpa/inet.h>
9403 #endif
9404 #ifdef htonl
9405 printf("Defined as a macro.");
9406 #endif
9407 EOM
9408         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9409         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9410                 val="$define"
9411                 echo "But it seems to be defined as a macro." >&4
9412         fi
9413         $rm -f htonl.?
9414         ;;
9415 esac
9416 set d_htonl
9417 eval $setvar
9418
9419 : see if iconv exists
9420 set iconv d_iconv
9421 eval $inlibc
9422
9423 : index or strchr
9424 echo " "
9425 if set index val -f; eval $csym; $val; then
9426         if set strchr val -f d_strchr; eval $csym; $val; then
9427                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9428                         val="$define"
9429                         vali="$undef"
9430                         echo "strchr() found." >&4
9431                 else
9432                         val="$undef"
9433                         vali="$define"
9434                         echo "index() found." >&4
9435                 fi
9436         else
9437                 val="$undef"
9438                 vali="$define"
9439                 echo "index() found." >&4
9440         fi
9441 else
9442         if set strchr val -f d_strchr; eval $csym; $val; then
9443                 val="$define"
9444                 vali="$undef"
9445                 echo "strchr() found." >&4
9446         else
9447                 echo "No index() or strchr() found!" >&4
9448                 val="$undef"
9449                 vali="$undef"
9450         fi
9451 fi
9452 set d_strchr; eval $setvar
9453 val="$vali"
9454 set d_index; eval $setvar
9455
9456 : check whether inet_aton exists
9457 set inet_aton d_inetaton
9458 eval $inlibc
9459
9460 : see if inttypes.h is available
9461 : we want a real compile instead of Inhdr because some systems
9462 : have an inttypes.h which includes non-existent headers
9463 echo " "
9464 $cat >try.c <<EOCP
9465 #include <inttypes.h>
9466 int main() {
9467         static int32_t foo32 = 0x12345678;
9468 }
9469 EOCP
9470 set try
9471 if eval $compile; then
9472         echo "<inttypes.h> found." >&4
9473         val="$define"
9474 else
9475         echo "<inttypes.h> NOT found." >&4
9476         val="$undef"
9477 fi
9478 $rm -f try.c try
9479 set i_inttypes
9480 eval $setvar
9481
9482 : check for int64_t
9483 echo " "
9484 echo "Checking to see if you have int64_t..." >&4
9485 $cat >try.c <<EOCP
9486 #include <sys/types.h>
9487 #$i_inttypes I_INTTYPES
9488 #ifdef I_INTTYPES
9489 #include <inttypes.h>
9490 #endif
9491 int main() { int64_t x = 7; }
9492 EOCP
9493 set try
9494 if eval $compile; then
9495         val="$define"
9496         echo "You have int64_t."
9497 else
9498         val="$undef"
9499         echo "You do not have int64_t."
9500 fi
9501 $rm -f try try.*
9502 set d_int64_t
9503 eval $setvar
9504
9505 : Look for isascii
9506 echo " "
9507 $cat >isascii.c <<'EOCP'
9508 #include <stdio.h>
9509 #include <ctype.h>
9510 int main() {
9511         int c = 'A';
9512         if (isascii(c))
9513                 exit(0);
9514         else
9515                 exit(1);
9516 }
9517 EOCP
9518 set isascii
9519 if eval $compile; then
9520         echo "isascii() found." >&4
9521         val="$define"
9522 else
9523         echo "isascii() NOT found." >&4
9524         val="$undef"
9525 fi
9526 set d_isascii
9527 eval $setvar
9528 $rm -f isascii*
9529
9530 : see if killpg exists
9531 set killpg d_killpg
9532 eval $inlibc
9533
9534 : see if lchown exists
9535 echo " "
9536 $cat > try.c <<'EOCP'
9537 /* System header to define __stub macros and hopefully few prototypes,
9538     which can conflict with char lchown(); below.  */
9539 #include <assert.h>
9540 /* Override any gcc2 internal prototype to avoid an error.  */
9541 /* We use char because int might match the return type of a gcc2
9542    builtin and then its argument prototype would still apply.  */
9543 char lchown();
9544 int main() {
9545     /*  The GNU C library defines this for functions which it implements
9546         to always fail with ENOSYS.  Some functions are actually named
9547         something starting with __ and the normal name is an alias.  */
9548 #if defined (__stub_lchown) || defined (__stub___lchown)
9549 choke me
9550 #else
9551 lchown();
9552 #endif
9553 ; return 0; }
9554 EOCP
9555 set try
9556 if eval $compile; then
9557     $echo "lchown() found." >&4
9558     val="$define"
9559 else
9560     $echo "lchown() NOT found." >&4
9561     val="$undef"
9562 fi
9563 set d_lchown
9564 eval $setvar
9565
9566 : See if number of significant digits in a double precision number is known
9567 echo " "
9568 $cat >ldbl_dig.c <<EOM
9569 #$i_limits I_LIMITS
9570 #$i_float I_FLOAT
9571 #ifdef I_LIMITS
9572 #include <limits.h>
9573 #endif
9574 #ifdef I_FLOAT
9575 #include <float.h>
9576 #endif
9577 #ifdef LDBL_DIG
9578 printf("Contains LDBL_DIG");
9579 #endif
9580 EOM
9581 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9582 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9583         echo "LDBL_DIG found." >&4
9584         val="$define"
9585 else
9586         echo "LDBL_DIG NOT found." >&4
9587         val="$undef"
9588 fi
9589 $rm -f ldbl_dig.?
9590 set d_ldbl_dig
9591 eval $setvar
9592
9593 : see if link exists
9594 set link d_link
9595 eval $inlibc
9596
9597 : see if localeconv exists
9598 set localeconv d_locconv
9599 eval $inlibc
9600
9601 : see if lockf exists
9602 set lockf d_lockf
9603 eval $inlibc
9604
9605 : check for long long
9606 echo " "
9607 echo "Checking to see if you have long long..." >&4
9608 echo 'int main() { long long x = 7; return 0; }' > try.c
9609 set try
9610 if eval $compile; then
9611         val="$define"
9612         echo "You have have long long."
9613 else
9614         val="$undef"
9615         echo "You do not have long long."
9616 fi
9617 $rm try.*
9618 set d_longlong
9619 eval $setvar
9620
9621 : check for length of long long
9622 case "${d_longlong}${longlongsize}" in
9623 $define)
9624         echo " "
9625         echo "Checking to see how big your long longs are..." >&4
9626         $cat >try.c <<'EOCP'
9627 #include <stdio.h>
9628 int main()
9629 {
9630     printf("%d\n", (int)sizeof(long long));
9631     return(0);
9632 }
9633 EOCP
9634         set try
9635         if eval $compile_ok; then
9636                 longlongsize=`./try$exe_ext`
9637                 echo "Your long longs are $longlongsize bytes long."
9638         else
9639                 dflt='8'
9640                 echo " "
9641                 echo "(I can't seem to compile the test program.  Guessing...)"
9642                 rp="What is the size of a long long (in bytes)?"
9643                 . ./myread
9644                 longlongsize="$ans"
9645         fi
9646         if $test "X$longsize" = "X$longlongsize"; then
9647                 echo "(That isn't any different from an ordinary long.)"
9648         fi      
9649         ;;
9650 esac
9651 $rm -f try.* try
9652
9653 : see if prototype for lseek is available
9654 echo " "
9655 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9656 eval $hasproto
9657
9658 : see if lstat exists
9659 set lstat d_lstat
9660 eval $inlibc
9661
9662 : see if madvise exists
9663 set madvise d_madvise
9664 eval $inlibc
9665
9666 : see if mblen exists
9667 set mblen d_mblen
9668 eval $inlibc
9669
9670 : see if mbstowcs exists
9671 set mbstowcs d_mbstowcs
9672 eval $inlibc
9673
9674 : see if mbtowc exists
9675 set mbtowc d_mbtowc
9676 eval $inlibc
9677
9678 : see if memchr exists
9679 set memchr d_memchr
9680 eval $inlibc
9681
9682 : see if memcmp exists
9683 set memcmp d_memcmp
9684 eval $inlibc
9685
9686 : see if memcpy exists
9687 set memcpy d_memcpy
9688 eval $inlibc
9689
9690 : see if memmove exists
9691 set memmove d_memmove
9692 eval $inlibc
9693
9694 : see if memset exists
9695 set memset d_memset
9696 eval $inlibc
9697
9698 : see if mkdir exists
9699 set mkdir d_mkdir
9700 eval $inlibc
9701
9702 : see if mkdtemp exists
9703 set mkdtemp d_mkdtemp
9704 eval $inlibc
9705
9706 : see if mkfifo exists
9707 set mkfifo d_mkfifo
9708 eval $inlibc
9709
9710 : see if mkstemp exists
9711 set mkstemp d_mkstemp
9712 eval $inlibc
9713
9714 : see if mkstemps exists
9715 set mkstemps d_mkstemps
9716 eval $inlibc
9717
9718 : see if mktime exists
9719 set mktime d_mktime
9720 eval $inlibc
9721
9722 : see if this is a sys/mman.h system
9723 set sys/mman.h i_sysmman
9724 eval $inhdr
9725
9726 : see if mmap exists
9727 set mmap d_mmap
9728 eval $inlibc
9729 : see what shmat returns
9730 : default to something harmless
9731 mmaptype='void *'
9732 case "$i_sysmman$d_mmap" in
9733 "$define$define")
9734         $cat >mmap.c <<'END'
9735 #include <sys/mman.h>
9736 void *mmap();
9737 END
9738         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9739                 mmaptype='void *'
9740         else
9741                 mmaptype='caddr_t'
9742         fi
9743         echo "and it returns ($mmaptype)." >&4
9744         ;;
9745 esac
9746
9747
9748
9749 : see if mprotect exists
9750 set mprotect d_mprotect
9751 eval $inlibc
9752
9753 : see if msgctl exists
9754 set msgctl d_msgctl
9755 eval $inlibc
9756
9757 : see if msgget exists
9758 set msgget d_msgget
9759 eval $inlibc
9760
9761 : see if msgsnd exists
9762 set msgsnd d_msgsnd
9763 eval $inlibc
9764
9765 : see if msgrcv exists
9766 set msgrcv d_msgrcv
9767 eval $inlibc
9768
9769 : see how much of the 'msg*(2)' library is present.
9770 h_msg=true
9771 echo " "
9772 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9773 *"$undef"*) h_msg=false;;
9774 esac
9775 case "$osname" in
9776 freebsd)
9777     case "`ipcs 2>&1`" in
9778     "SVID messages"*"not configured"*)
9779         echo "Your $osname does not have the msg*(2) configured." >&4
9780         h_msg=false
9781         val="$undef"
9782         set msgctl d_msgctl
9783         eval $setvar
9784         set msgget d_msgget
9785         eval $setvar
9786         set msgsnd d_msgsnd
9787         eval $setvar
9788         set msgrcv d_msgrcv
9789         eval $setvar
9790         ;;
9791     esac
9792     ;;
9793 esac
9794 : we could also check for sys/ipc.h ...
9795 if $h_msg && $test `./findhdr sys/msg.h`; then
9796         echo "You have the full msg*(2) library." >&4
9797         val="$define"
9798 else
9799         echo "You don't have the full msg*(2) library." >&4
9800         val="$undef"
9801 fi
9802 set d_msg
9803 eval $setvar
9804
9805 : see if msync exists
9806 set msync d_msync
9807 eval $inlibc
9808
9809 : see if munmap exists
9810 set munmap d_munmap
9811 eval $inlibc
9812
9813 : see if nice exists
9814 set nice d_nice
9815 eval $inlibc
9816
9817
9818 echo " "
9819 echo "Checking which 64-bit integer type we could use..." >&4
9820
9821 case "$intsize" in
9822 8) val=int
9823    set quadtype
9824    eval $setvar
9825    val='"unsigned int"'
9826    set uquadtype
9827    eval $setvar
9828    quadkind=1
9829    ;;
9830 *) case "$longsize" in
9831    8) val=long
9832       set quadtype
9833       eval $setvar
9834       val='"unsigned long"'
9835       set uquadtype
9836       eval $setvar
9837       quadkind=2
9838       ;;
9839    *) case "$d_longlong:$longlongsize" in
9840       define:8)
9841         val='"long long"'
9842         set quadtype
9843         eval $setvar
9844         val='"unsigned long long"'
9845         set uquadtype
9846         eval $setvar
9847         quadkind=3
9848         ;;
9849       *) case "$d_int64_t" in
9850          define)
9851            val=int64_t
9852            set quadtype
9853            eval $setvar
9854            val=uint64_t
9855            set uquadtype
9856            eval $setvar
9857            quadkind=4
9858            ;;
9859          esac
9860          ;;
9861       esac
9862       ;;
9863    esac
9864    ;;
9865 esac
9866
9867 case "$quadtype" in
9868 '')     echo "Alas, no 64-bit integer types in sight." >&4
9869         d_quad="$undef"
9870         ;;
9871 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9872             verb="will"
9873         else
9874             verb="could"
9875         fi
9876         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9877         d_quad="$define"
9878         ;;
9879 esac
9880
9881 : check for length of character
9882 echo " "
9883 case "$charsize" in
9884 '')
9885         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9886         $cat >try.c <<'EOCP'
9887 #include <stdio.h>
9888 int main()
9889 {
9890     printf("%d\n", (int)sizeof(char));
9891     exit(0);
9892 }
9893 EOCP
9894         set try
9895         if eval $compile_ok; then
9896                 dflt=`./try`
9897         else
9898                 dflt='1'
9899                 echo "(I can't seem to compile the test program.  Guessing...)"
9900         fi
9901         ;;
9902 *)
9903         dflt="$charsize"
9904         ;;
9905 esac
9906 rp="What is the size of a character (in bytes)?"
9907 . ./myread
9908 charsize="$ans"
9909 $rm -f try.c try
9910
9911
9912 echo " "
9913 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9914
9915 case "$use64bitint:$d_quad:$quadtype" in
9916 define:define:?*)
9917         ivtype="$quadtype"
9918         uvtype="$uquadtype"
9919         ivsize=8
9920         uvsize=8
9921         ;;
9922 *)      ivtype="long"
9923         uvtype="unsigned long"
9924         ivsize=$longsize
9925         uvsize=$longsize
9926         ;;
9927 esac
9928
9929 case "$uselongdouble:$d_longdbl" in
9930 define:define)
9931         nvtype="long double"
9932         nvsize=$longdblsize
9933         ;;
9934 *)      nvtype=double
9935         nvsize=$doublesize
9936         ;;
9937 esac
9938
9939 $echo "(IV will be "$ivtype", $ivsize bytes)"
9940 $echo "(UV will be "$uvtype", $uvsize bytes)"
9941 $echo "(NV will be "$nvtype", $nvsize bytes)"
9942
9943 $cat >try.c <<EOCP
9944 #$i_inttypes I_INTTYPES
9945 #ifdef I_INTTYPES
9946 #include <inttypes.h>
9947 #endif
9948 #include <stdio.h>
9949 int main() {
9950 #ifdef INT8
9951    int8_t i =  INT8_MAX;
9952   uint8_t u = UINT8_MAX;
9953   printf("int8_t\n");
9954 #endif
9955 #ifdef INT16
9956    int16_t i =  INT16_MAX;
9957   uint16_t i = UINT16_MAX;
9958   printf("int16_t\n");
9959 #endif
9960 #ifdef INT32
9961    int32_t i =  INT32_MAX;
9962   uint32_t u = UINT32_MAX;
9963   printf("int32_t\n");
9964 #endif
9965 }
9966 EOCP
9967
9968 case "$i8type" in
9969 '')     case "$charsize" in
9970         1)      i8type=char
9971                 u8type="unsigned char"
9972                 i8size=$charsize
9973                 u8size=$charsize
9974                 ;;
9975         esac
9976         ;;
9977 esac
9978 case "$i8type" in
9979 '')     set try -DINT8
9980         if eval $compile; then
9981                 case "`./try$exe_ext`" in
9982                 int8_t) i8type=int8_t
9983                         u8type=uint8_t
9984                         i8size=1
9985                         u8size=1
9986                         ;;
9987                 esac
9988         fi
9989         ;;
9990 esac
9991 case "$i8type" in
9992 '')     if $test $charsize -ge 1; then
9993                 i8type=char
9994                 u8type="unsigned char"
9995                 i8size=$charsize
9996                 u8size=$charsize
9997         fi
9998         ;;
9999 esac
10000
10001 case "$i16type" in
10002 '')     case "$shortsize" in
10003         2)      i16type=short
10004                 u16type="unsigned short"
10005                 i16size=$shortsize
10006                 u16size=$shortsize
10007                 ;;
10008         esac
10009         ;;
10010 esac
10011 case "$i16type" in
10012 '')     set try -DINT16
10013         if eval $compile; then
10014                 case "`./try$exe_ext`" in
10015                 int16_t)
10016                         i16type=int16_t
10017                         u16type=uint16_t
10018                         i16size=2
10019                         u16size=2
10020                         ;;
10021                 esac
10022         fi
10023         ;;
10024 esac
10025 case "$i16type" in
10026 '')     if $test $shortsize -ge 2; then
10027                 i16type=short
10028                 u16type="unsigned short"
10029                 i16size=$shortsize
10030                 u16size=$shortsize
10031         fi
10032         ;;
10033 esac
10034
10035 case "$i32type" in
10036 '')     case "$longsize" in
10037         4)      i32type=long
10038                 u32type="unsigned long"
10039                 i32size=$longsize
10040                 u32size=$longsize
10041                 ;;
10042         *)      case "$intsize" in
10043                 4)      i32type=int
10044                         u32type="unsigned int"
10045                         i32size=$intsize
10046                         u32size=$intsize
10047                         ;;
10048                 esac
10049                 ;;
10050         esac
10051         ;;
10052 esac
10053 case "$i32type" in
10054 '')     set try -DINT32
10055         if eval $compile; then
10056                 case "`./try$exe_ext`" in
10057                 int32_t)
10058                         i32type=int32_t
10059                         u32type=uint32_t
10060                         i32size=4
10061                         u32size=4
10062                         ;;
10063                 esac
10064         fi
10065         ;;
10066 esac
10067 case "$i32type" in
10068 '')     if $test $intsize -ge 4; then
10069                 i32type=int
10070                 u32type="unsigned int"
10071                 i32size=$intsize
10072                 u32size=$intsize
10073         fi
10074         ;;
10075 esac
10076
10077 case "$i64type" in
10078 '')     case "$d_quad:$quadtype" in
10079         define:?*)
10080                 i64type="$quadtype"
10081                 u64type="$uquadtype"
10082                 i64size=8
10083                 u64size=8
10084                 ;;
10085         esac
10086         ;;
10087 esac
10088
10089 $echo "Checking whether your NVs can preserve your UVs..." >&4
10090 $cat <<EOP >try.c
10091 #include <stdio.h>
10092 int main() {
10093     $uvtype k = ($uvtype)~0, l;
10094     $nvtype d;
10095     l = k;
10096     d = ($nvtype)l;
10097     l = ($uvtype)d;
10098     if (l == k)
10099        printf("preserve\n");
10100     exit(0);
10101 }
10102 EOP
10103 set try
10104 if eval $compile; then
10105         case "`./try$exe_ext`" in
10106         preserve) d_nv_preserves_uv="$define" ;;
10107         esac
10108 fi      
10109 case "$d_nv_preserves_uv" in
10110 $define) $echo "Yes, they can."  2>&1 ;;
10111 *)       $echo "No, they can't." 2>&1
10112          d_nv_preserves_uv="$undef"
10113          ;;
10114 esac
10115
10116 $rm -f try.* try
10117
10118
10119 : check for off64_t
10120 echo " "
10121 echo "Checking to see if you have off64_t..." >&4
10122 $cat >try.c <<EOCP
10123 #include <sys/types.h>
10124 #include <unistd.h>
10125 int main() { off64_t x = 7; }
10126 EOCP
10127 set try
10128 if eval $compile; then
10129         val="$define"
10130         echo "You have off64_t."
10131 else
10132         val="$undef"
10133         echo "You do not have off64_t."
10134         case "$lseeksize" in
10135         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10136         esac
10137 fi
10138 $rm -f try.* try
10139 set d_off64_t
10140 eval $setvar
10141
10142 : see if POSIX threads are available
10143 set pthread.h i_pthread
10144 eval $inhdr
10145
10146
10147
10148
10149 : how to create joinable pthreads
10150 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10151         echo " "
10152         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10153         $cat >try.c <<'EOCP'
10154 #include <pthread.h>
10155 int main() {
10156     int detachstate = JOINABLE;
10157 }
10158 EOCP
10159         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10160         if eval $compile; then
10161                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10162                 val="$undef" # Yes, undef.
10163                 set d_old_pthread_create_joinable
10164                 eval $setvar
10165                 val=""
10166                 set old_pthread_create_joinable
10167                 eval $setvar
10168         else
10169                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10170                 if eval $compile; then
10171                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10172                         val="$define"
10173                         set d_old_pthread_create_joinable
10174                         eval $setvar
10175                         val=PTHREAD_CREATE_UNDETACHED
10176                         set old_pthread_create_joinable
10177                         eval $setvar
10178                 else            
10179                         set try -DJOINABLE=__UNDETACHED
10180                         if eval $compile; then
10181                                 echo "You seem to use __UNDETACHED." >&4
10182                                 val="$define"
10183                                 set d_old_pthread_create_joinable
10184                                 eval $setvar
10185                                 val=__UNDETACHED
10186                                 set old_pthread_create_joinable
10187                                 eval $setvar
10188                         else
10189                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10190                                 val="$define"
10191                                 set d_old_pthread_create_joinable
10192                                 eval $setvar
10193                                 val=0
10194                                 set old_pthread_create_joinable
10195                                 eval $setvar
10196                         fi
10197                 fi
10198         fi
10199         $rm -f try try.*
10200 else
10201     d_old_pthread_create_joinable="$undef"
10202     old_pthread_create_joinable=""
10203 fi
10204
10205 : see if pause exists
10206 set pause d_pause
10207 eval $inlibc
10208
10209 : see if pipe exists
10210 set pipe d_pipe
10211 eval $inlibc
10212
10213 : see if poll exists
10214 set poll d_poll
10215 eval $inlibc
10216
10217
10218 : see whether the various POSIXish _yields exist
10219 $cat >try.c <<EOP
10220 #include <pthread.h>
10221 #include <stdio.h>
10222 int main() {
10223 #ifdef SCHED_YIELD
10224         sched_yield();
10225 #else
10226 #ifdef PTHREAD_YIELD
10227         pthread_yield();
10228 #else
10229 #ifdef PTHREAD_YIELD_NULL
10230         pthread_yield(NULL);
10231 #endif
10232 #endif
10233 #endif
10234 }
10235 EOP
10236 : see if sched_yield exists
10237 set try -DSCHED_YIELD
10238 if eval $compile; then
10239     val="$define"
10240     sched_yield='sched_yield()'
10241 else
10242     val="$undef"
10243 fi
10244 case "$usethreads" in
10245 $define)
10246         case "$val" in
10247         $define) echo 'sched_yield() found.' >&4        ;;
10248         *)       echo 'sched_yield() NOT found.' >&4    ;;
10249         esac
10250 esac
10251 set d_sched_yield
10252 eval $setvar
10253
10254 : see if pthread_yield exists
10255 set try -DPTHREAD_YIELD
10256 if eval $compile; then
10257     val="$define"
10258     case "$sched_yield" in
10259     '') sched_yield='pthread_yield()' ;;
10260     esac
10261 else
10262     set try -DPTHREAD_YIELD_NULL
10263     if eval $compile; then
10264         val="$define"
10265         case "$sched_yield" in
10266         '') sched_yield='pthread_yield(NULL)' ;;
10267         esac
10268     else
10269         val="$undef"
10270     fi
10271 fi
10272 case "$usethreads" in
10273 $define)
10274         case "$val" in
10275         $define) echo 'pthread_yield() found.' >&4      ;;
10276         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10277         esac
10278         ;;
10279 esac
10280 set d_pthread_yield
10281 eval $setvar
10282
10283 case "$sched_yield" in
10284 '') sched_yield=undef ;;
10285 esac
10286
10287 $rm -f try try.*
10288
10289 : see if this is a pwd.h system
10290 set pwd.h i_pwd
10291 eval $inhdr
10292
10293 case "$i_pwd" in
10294 $define)
10295         xxx=`./findhdr pwd.h`
10296         $cppstdin $cppflags $cppminus < $xxx >$$.h
10297
10298         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10299                 val="$define"
10300         else
10301                 val="$undef"
10302         fi
10303         set d_pwquota
10304         eval $setvar
10305
10306         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10307                 val="$define"
10308         else
10309                 val="$undef"
10310         fi
10311         set d_pwage
10312         eval $setvar
10313
10314         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10315                 val="$define"
10316         else
10317                 val="$undef"
10318         fi
10319         set d_pwchange
10320         eval $setvar
10321
10322         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10323                 val="$define"
10324         else
10325                 val="$undef"
10326         fi
10327         set d_pwclass
10328         eval $setvar
10329
10330         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10331                 val="$define"
10332         else
10333                 val="$undef"
10334         fi
10335         set d_pwexpire
10336         eval $setvar
10337
10338         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10339                 val="$define"
10340         else
10341                 val="$undef"
10342         fi
10343         set d_pwcomment
10344         eval $setvar
10345
10346         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10347                 val="$define"
10348         else
10349                 val="$undef"
10350         fi
10351         set d_pwgecos
10352         eval $setvar
10353
10354         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10355                 val="$define"
10356         else
10357                 val="$undef"
10358         fi
10359         set d_pwpasswd
10360         eval $setvar
10361
10362         $rm -f $$.h
10363         ;;
10364 *)
10365         val="$undef"; 
10366         set d_pwquota; eval $setvar
10367         set d_pwage; eval $setvar
10368         set d_pwchange; eval $setvar
10369         set d_pwclass; eval $setvar
10370         set d_pwexpire; eval $setvar
10371         set d_pwcomment; eval $setvar
10372         set d_pwgecos; eval $setvar
10373         set d_pwpasswd; eval $setvar
10374         ;;
10375 esac
10376
10377 : see if readdir and friends exist
10378 set readdir d_readdir
10379 eval $inlibc
10380 set seekdir d_seekdir
10381 eval $inlibc
10382 set telldir d_telldir
10383 eval $inlibc
10384 set rewinddir d_rewinddir
10385 eval $inlibc
10386
10387 : see if readlink exists
10388 set readlink d_readlink
10389 eval $inlibc
10390
10391 : see if rename exists
10392 set rename d_rename
10393 eval $inlibc
10394
10395 : see if rmdir exists
10396 set rmdir d_rmdir
10397 eval $inlibc
10398
10399 : see if memory.h is available.
10400 val=''
10401 set memory.h val
10402 eval $inhdr
10403
10404 : See if it conflicts with string.h
10405 case "$val" in
10406 $define)
10407         case "$strings" in
10408         '') ;;
10409         *)
10410                 $cppstdin $cppflags $cppminus < $strings > mem.h
10411                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10412                         echo " "
10413                         echo "We won't be including <memory.h>."
10414                         val="$undef"
10415                 fi
10416                 $rm -f mem.h
10417                 ;;
10418         esac
10419 esac
10420 set i_memory
10421 eval $setvar
10422
10423 : can bcopy handle overlapping blocks?
10424 val="$undef"
10425 case "$d_bcopy" in
10426 "$define")
10427         echo " "
10428         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10429         $cat >try.c <<EOCP
10430 #$i_memory I_MEMORY
10431 #$i_stdlib I_STDLIB
10432 #$i_string I_STRING
10433 #$i_unistd I_UNISTD
10434 EOCP
10435         $cat >>try.c <<'EOCP'
10436 #include <stdio.h>
10437 #ifdef I_MEMORY
10438 #  include <memory.h>
10439 #endif
10440 #ifdef I_STDLIB
10441 #  include <stdlib.h>
10442 #endif
10443 #ifdef I_STRING
10444 #  include <string.h>
10445 #else
10446 #  include <strings.h>
10447 #endif
10448 #ifdef I_UNISTD
10449 #  include <unistd.h>  /* Needed for NetBSD */
10450 #endif
10451 int main()
10452 {
10453 char buf[128], abc[128];
10454 char *b;
10455 int len;
10456 int off;
10457 int align;
10458
10459 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10460
10461 for (align = 7; align >= 0; align--) {
10462         for (len = 36; len; len--) {
10463                 b = buf+align;
10464                 bcopy(abc, b, len);
10465                 for (off = 1; off <= len; off++) {
10466                         bcopy(b, b+off, len);
10467                         bcopy(b+off, b, len);
10468                         if (bcmp(b, abc, len))
10469                                 exit(1);
10470                 }
10471         }
10472 }
10473 exit(0);
10474 }
10475 EOCP
10476         set try
10477         if eval $compile_ok; then
10478                 if ./try 2>/dev/null; then
10479                         echo "Yes, it can."
10480                         val="$define"
10481                 else
10482                         echo "It can't, sorry."
10483                         case "$d_memmove" in
10484                         "$define") echo "But that's Ok since you have memmove()." ;;
10485                         esac
10486                 fi
10487         else
10488                 echo "(I can't compile the test program, so we'll assume not...)"
10489                 case "$d_memmove" in
10490                 "$define") echo "But that's Ok since you have memmove()." ;;
10491                 esac
10492         fi
10493         ;;
10494 esac
10495 $rm -f try.* try core
10496 set d_safebcpy
10497 eval $setvar
10498
10499 : can memcpy handle overlapping blocks?
10500 val="$undef"
10501 case "$d_memcpy" in
10502 "$define")
10503         echo " "
10504         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10505         $cat >try.c <<EOCP
10506 #$i_memory I_MEMORY
10507 #$i_stdlib I_STDLIB
10508 #$i_string I_STRING
10509 #$i_unistd I_UNISTD
10510 EOCP
10511         $cat >>try.c <<'EOCP'
10512 #include <stdio.h>
10513 #ifdef I_MEMORY
10514 #  include <memory.h>
10515 #endif
10516 #ifdef I_STDLIB
10517 #  include <stdlib.h>
10518 #endif
10519 #ifdef I_STRING
10520 #  include <string.h>
10521 #else
10522 #  include <strings.h>
10523 #endif
10524 #ifdef I_UNISTD
10525 #  include <unistd.h>  /* Needed for NetBSD */
10526 #endif
10527 int main()
10528 {
10529 char buf[128], abc[128];
10530 char *b;
10531 int len;
10532 int off;
10533 int align;
10534
10535 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10536    try to store the string in read-only memory. */
10537 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10538
10539 for (align = 7; align >= 0; align--) {
10540         for (len = 36; len; len--) {
10541                 b = buf+align;
10542                 memcpy(b, abc, len);
10543                 for (off = 1; off <= len; off++) {
10544                         memcpy(b+off, b, len);
10545                         memcpy(b, b+off, len);
10546                         if (memcmp(b, abc, len))
10547                                 exit(1);
10548                 }
10549         }
10550 }
10551 exit(0);
10552 }
10553 EOCP
10554         set try
10555         if eval $compile_ok; then
10556                 if ./try 2>/dev/null; then
10557                         echo "Yes, it can."
10558                         val="$define"
10559                 else
10560                         echo "It can't, sorry."
10561                         case "$d_memmove" in
10562                         "$define") echo "But that's Ok since you have memmove()." ;;
10563                         esac
10564                 fi
10565         else
10566                 echo "(I can't compile the test program, so we'll assume not...)"
10567                 case "$d_memmove" in
10568                 "$define") echo "But that's Ok since you have memmove()." ;;
10569                 esac
10570         fi
10571         ;;
10572 esac
10573 $rm -f try.* try core
10574 set d_safemcpy
10575 eval $setvar
10576
10577 : can memcmp be trusted to compare relative magnitude?
10578 val="$undef"
10579 case "$d_memcmp" in
10580 "$define")
10581         echo " "
10582         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10583         $cat >try.c <<EOCP
10584 #$i_memory I_MEMORY
10585 #$i_stdlib I_STDLIB
10586 #$i_string I_STRING
10587 #$i_unistd I_UNISTD
10588 EOCP
10589         $cat >>try.c <<'EOCP'
10590 #include <stdio.h>
10591 #ifdef I_MEMORY
10592 #  include <memory.h>
10593 #endif
10594 #ifdef I_STDLIB
10595 #  include <stdlib.h>
10596 #endif
10597 #ifdef I_STRING
10598 #  include <string.h>
10599 #else
10600 #  include <strings.h>
10601 #endif
10602 #ifdef I_UNISTD
10603 #  include <unistd.h>  /* Needed for NetBSD */
10604 #endif
10605 int main()
10606 {
10607 char a = -1;
10608 char b = 0;
10609 if ((a < b) && memcmp(&a, &b, 1) < 0)
10610         exit(1);
10611 exit(0);
10612 }
10613 EOCP
10614         set try
10615         if eval $compile_ok; then
10616                 if ./try 2>/dev/null; then
10617                         echo "Yes, it can."
10618                         val="$define"
10619                 else
10620                         echo "No, it can't (it uses signed chars)."
10621                 fi
10622         else
10623                 echo "(I can't compile the test program, so we'll assume not...)"
10624         fi
10625         ;;
10626 esac
10627 $rm -f try.* try core
10628 set d_sanemcmp
10629 eval $setvar
10630
10631 : see if select exists
10632 set select d_select
10633 eval $inlibc
10634
10635 : see if semctl exists
10636 set semctl d_semctl
10637 eval $inlibc
10638
10639 : see if semget exists
10640 set semget d_semget
10641 eval $inlibc
10642
10643 : see if semop exists
10644 set semop d_semop
10645 eval $inlibc
10646
10647 : see how much of the 'sem*(2)' library is present.
10648 h_sem=true
10649 echo " "
10650 case "$d_semctl$d_semget$d_semop" in
10651 *"$undef"*) h_sem=false;;
10652 esac
10653 case "$osname" in
10654 freebsd)
10655     case "`ipcs 2>&1`" in
10656     "SVID messages"*"not configured"*)
10657         echo "Your $osname does not have the sem*(2) configured." >&4
10658         h_sem=false
10659         val="$undef"
10660         set semctl d_semctl
10661         eval $setvar
10662         set semget d_semget
10663         eval $setvar
10664         set semop d_semop
10665         eval $setvar
10666         ;;
10667     esac
10668     ;;
10669 esac
10670 : we could also check for sys/ipc.h ...
10671 if $h_sem && $test `./findhdr sys/sem.h`; then
10672         echo "You have the full sem*(2) library." >&4
10673         val="$define"
10674 else
10675         echo "You don't have the full sem*(2) library." >&4
10676         val="$undef"
10677 fi
10678 set d_sem
10679 eval $setvar
10680
10681 : see whether sys/sem.h defines union semun
10682 echo " "
10683 $cat > try.c <<'END'
10684 #include <sys/types.h>
10685 #include <sys/ipc.h>
10686 #include <sys/sem.h>
10687 int main () { union semun semun; semun.buf = 0; }
10688 END
10689 set try
10690 if eval $compile; then
10691     echo "You have union semun in <sys/sem.h>." >&4
10692     val="$define"
10693 else
10694     echo "You do not have union semun in <sys/sem.h>." >&4
10695     val="$undef"
10696 fi
10697 $rm -f try try.c try.h
10698 set d_union_semun
10699 eval $setvar
10700
10701 : see how to do semctl IPC_STAT
10702 case "$d_sem" in
10703 $define)
10704     : see whether semctl IPC_STAT can use union semun
10705     echo " "
10706     $cat > try.h <<END
10707 #ifndef S_IRUSR
10708 #   ifdef S_IREAD
10709 #       define S_IRUSR S_IREAD
10710 #       define S_IWUSR S_IWRITE
10711 #       define S_IXUSR S_IEXEC
10712 #   else
10713 #       define S_IRUSR 0400
10714 #       define S_IWUSR 0200
10715 #       define S_IXUSR 0100
10716 #   endif
10717 #   define S_IRGRP (S_IRUSR>>3)
10718 #   define S_IWGRP (S_IWUSR>>3)
10719 #   define S_IXGRP (S_IXUSR>>3)
10720 #   define S_IROTH (S_IRUSR>>6)
10721 #   define S_IWOTH (S_IWUSR>>6)
10722 #   define S_IXOTH (S_IXUSR>>6)
10723 #endif
10724 #ifndef S_IRWXU
10725 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10726 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10727 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10728 #endif
10729 END
10730
10731     $cat > try.c <<END
10732 #include <sys/types.h>
10733 #include <sys/ipc.h>
10734 #include <sys/sem.h>
10735 #include <sys/stat.h>
10736 #include <stdio.h>
10737 #include <errno.h>
10738 #include "try.h"
10739 #ifndef errno
10740 extern int errno;
10741 #endif
10742 #$d_union_semun HAS_UNION_SEMUN
10743 int main() {
10744     union semun
10745 #ifndef HAS_UNION_SEMUN
10746     {
10747         int val;
10748         struct semid_ds *buf;
10749         unsigned short *array;
10750     }
10751 #endif
10752     arg;
10753     int sem, st;
10754
10755 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10756     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10757     if (sem > -1) {
10758         struct semid_ds argbuf;
10759         arg.buf = &argbuf;
10760 #       ifdef IPC_STAT
10761         st = semctl(sem, 0, IPC_STAT, arg);
10762         if (st == 0)
10763             printf("semun\n");
10764         else
10765 #       endif /* IPC_STAT */
10766             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10767 #       ifdef IPC_RMID
10768         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10769 #       endif /* IPC_RMID */
10770             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10771     } else
10772 #endif /* IPC_PRIVATE && ... */
10773         printf("semget failed: errno = %d\n", errno);
10774   return 0;
10775 }
10776 END
10777     val="$undef"
10778     set try
10779     if eval $compile; then
10780         xxx=`./try`
10781         case "$xxx" in
10782         semun) val="$define" ;;
10783         esac
10784     fi
10785     $rm -f try try.c
10786     set d_semctl_semun
10787     eval $setvar
10788     case "$d_semctl_semun" in
10789     $define)
10790         echo "You can use union semun for semctl IPC_STAT." >&4
10791         also='also'
10792         ;;
10793     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10794         also=''
10795         ;;
10796     esac
10797
10798     : see whether semctl IPC_STAT can use struct semid_ds pointer
10799     $cat > try.c <<'END'
10800 #include <sys/types.h>
10801 #include <sys/ipc.h>
10802 #include <sys/sem.h>
10803 #include <sys/stat.h>
10804 #include "try.h"
10805 #include <stdio.h>
10806 #include <errno.h>
10807 #ifndef errno
10808 extern int errno;
10809 #endif
10810 int main() {
10811     struct semid_ds arg;
10812     int sem, st;
10813
10814 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10815     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10816     if (sem > -1) {
10817 #       ifdef IPC_STAT
10818         st = semctl(sem, 0, IPC_STAT, &arg);
10819         if (st == 0)
10820             printf("semid_ds\n");
10821         else
10822 #       endif /* IPC_STAT */
10823             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10824 #       ifdef IPC_RMID
10825         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10826 #       endif /* IPC_RMID */
10827             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10828     } else
10829 #endif /* IPC_PRIVATE && ... */
10830         printf("semget failed: errno = %d\n", errno);
10831
10832     return 0;
10833 }
10834 END
10835     val="$undef"
10836     set try
10837     if eval $compile; then
10838         xxx=`./try`
10839         case "$xxx" in
10840         semid_ds) val="$define" ;;
10841         esac
10842     fi
10843     $rm -f try try.c
10844     set d_semctl_semid_ds
10845     eval $setvar
10846     case "$d_semctl_semid_ds" in
10847     $define)
10848         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10849         ;;
10850     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10851         ;;
10852     esac
10853     $rm -f try.h
10854     ;;
10855 *)  val="$undef"
10856
10857     # We do not have the full sem*(2) library, so assume we can not
10858     # use either.
10859
10860     set d_semctl_semun
10861     eval $setvar
10862
10863     set d_semctl_semid_ds
10864     eval $setvar
10865     ;;
10866 esac
10867
10868 : see if setegid exists
10869 set setegid d_setegid
10870 eval $inlibc
10871
10872 : see if seteuid exists
10873 set seteuid d_seteuid
10874 eval $inlibc
10875
10876 : see if setgrent exists
10877 set setgrent d_setgrent
10878 eval $inlibc
10879
10880 : see if sethostent exists
10881 set sethostent d_sethent
10882 eval $inlibc
10883
10884 : see if setlinebuf exists
10885 set setlinebuf d_setlinebuf
10886 eval $inlibc
10887
10888 : see if setlocale exists
10889 set setlocale d_setlocale
10890 eval $inlibc
10891
10892 : see if setnetent exists
10893 set setnetent d_setnent
10894 eval $inlibc
10895
10896 : see if setprotoent exists
10897 set setprotoent d_setpent
10898 eval $inlibc
10899
10900 : see if setpgid exists
10901 set setpgid d_setpgid
10902 eval $inlibc
10903
10904 : see if setpgrp2 exists
10905 set setpgrp2 d_setpgrp2
10906 eval $inlibc
10907
10908 : see if setpriority exists
10909 set setpriority d_setprior
10910 eval $inlibc
10911
10912 : see if setpwent exists
10913 set setpwent d_setpwent
10914 eval $inlibc
10915
10916 : see if setregid exists
10917 set setregid d_setregid
10918 eval $inlibc
10919 set setresgid d_setresgid
10920 eval $inlibc
10921
10922 : see if setreuid exists
10923 set setreuid d_setreuid
10924 eval $inlibc
10925 set setresuid d_setresuid
10926 eval $inlibc
10927
10928 : see if setrgid exists
10929 set setrgid d_setrgid
10930 eval $inlibc
10931
10932 : see if setruid exists
10933 set setruid d_setruid
10934 eval $inlibc
10935
10936 : see if setservent exists
10937 set setservent d_setsent
10938 eval $inlibc
10939
10940 : see if setsid exists
10941 set setsid d_setsid
10942 eval $inlibc
10943
10944 : see if setspent exists
10945 set setspent d_setspent
10946 eval $inlibc
10947
10948 : see if setvbuf exists
10949 set setvbuf d_setvbuf
10950 eval $inlibc
10951
10952 : see if sfio.h is available
10953 set sfio.h i_sfio
10954 eval $inhdr
10955
10956
10957 : see if sfio library is available
10958 case "$i_sfio" in
10959 $define)
10960         val=''
10961         set sfreserve val
10962         eval $inlibc
10963         ;;
10964 *)
10965         val="$undef"
10966         ;;
10967 esac
10968 : Ok, but do we want to use it.
10969 case "$val" in
10970 $define)
10971         case "$usesfio" in
10972         true|$define|[yY]*) dflt='y';;
10973         *) dflt='n';;
10974         esac
10975         echo "$package can use the sfio library, but it is experimental."
10976         rp="You seem to have sfio available, do you want to try using it?"
10977         . ./myread
10978         case "$ans" in
10979         y|Y) ;;
10980         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10981                 val="$undef"
10982                 : Remove sfio from list of libraries to use
10983                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10984                 shift
10985                 libs="$*"
10986                 echo "libs = $libs" >&4
10987                 ;;
10988         esac
10989         ;;
10990 *)      case "$usesfio" in
10991         true|$define|[yY]*)
10992                 echo "Sorry, cannot find sfio on this machine" >&4
10993                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10994                 ;;
10995         esac
10996         ;;
10997 esac
10998 set d_sfio
10999 eval $setvar
11000 case "$d_sfio" in
11001 $define) usesfio='true';;
11002 *) usesfio='false';;
11003 esac
11004
11005 : see if shmctl exists
11006 set shmctl d_shmctl
11007 eval $inlibc
11008
11009 : see if shmget exists
11010 set shmget d_shmget
11011 eval $inlibc
11012
11013 : see if shmat exists
11014 set shmat d_shmat
11015 eval $inlibc
11016 : see what shmat returns
11017 case "$d_shmat" in
11018 "$define")
11019         $cat >shmat.c <<'END'
11020 #include <sys/shm.h>
11021 void *shmat();
11022 END
11023         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11024                 shmattype='void *'
11025         else
11026                 shmattype='char *'
11027         fi
11028         echo "and it returns ($shmattype)." >&4
11029         : see if a prototype for shmat is available
11030         xxx=`./findhdr sys/shm.h`
11031         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11032         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11033                 val="$define"
11034         else
11035                 val="$undef"
11036         fi
11037         $rm -f shmat.[co]
11038         ;;
11039 *)
11040         val="$undef"
11041         ;;
11042 esac
11043 set d_shmatprototype
11044 eval $setvar
11045
11046 : see if shmdt exists
11047 set shmdt d_shmdt
11048 eval $inlibc
11049
11050 : see how much of the 'shm*(2)' library is present.
11051 h_shm=true
11052 echo " "
11053 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11054 *"$undef"*) h_shm=false;;
11055 esac
11056 case "$osname" in
11057 freebsd)
11058     case "`ipcs 2>&1`" in
11059     "SVID shared memory"*"not configured"*)
11060         echo "Your $osname does not have the shm*(2) configured." >&4
11061         h_shm=false
11062         val="$undef"
11063         set shmctl d_shmctl
11064         evat $setvar
11065         set shmget d_shmget
11066         evat $setvar
11067         set shmat d_shmat
11068         evat $setvar
11069         set shmdt d_shmdt
11070         evat $setvar
11071         ;;
11072     esac
11073     ;;
11074 esac
11075 : we could also check for sys/ipc.h ...
11076 if $h_shm && $test `./findhdr sys/shm.h`; then
11077         echo "You have the full shm*(2) library." >&4
11078         val="$define"
11079 else
11080         echo "You don't have the full shm*(2) library." >&4
11081         val="$undef"
11082 fi
11083 set d_shm
11084 eval $setvar
11085
11086 echo " "
11087 : see if we have sigaction
11088 if set sigaction val -f d_sigaction; eval $csym; $val; then
11089         echo 'sigaction() found.' >&4
11090         $cat > try.c <<'EOP'
11091 #include <stdio.h>
11092 #include <sys/types.h>
11093 #include <signal.h>
11094 int main()
11095 {
11096     struct sigaction act, oact;
11097     act.sa_flags = 0;
11098     oact.sa_handler = 0;
11099     /* so that act and oact are used */
11100     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11101 }
11102 EOP
11103         set try
11104         if eval $compile_ok; then
11105                 val="$define"
11106         else
11107                 echo "But you don't seem to have a useable struct sigaction." >&4
11108                 val="$undef"
11109         fi
11110 else
11111         echo 'sigaction NOT found.' >&4
11112         val="$undef"
11113 fi
11114 set d_sigaction; eval $setvar
11115 $rm -f try try$_o try.c
11116
11117 : see if sigsetjmp exists
11118 echo " "
11119 case "$d_sigsetjmp" in
11120 '')
11121         $cat >try.c <<'EOP'
11122 #include <setjmp.h>
11123 sigjmp_buf env;
11124 int set = 1;
11125 int main()
11126 {
11127         if (sigsetjmp(env,1))
11128                 exit(set);
11129         set = 0;
11130         siglongjmp(env, 1);
11131         exit(1);
11132 }
11133 EOP
11134         set try
11135         if eval $compile; then
11136                 if ./try >/dev/null 2>&1; then
11137                         echo "POSIX sigsetjmp found." >&4
11138                         val="$define"
11139                 else
11140                         $cat >&4 <<EOM
11141 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11142 I'll ignore them.
11143 EOM
11144                         val="$undef"
11145                 fi
11146         else
11147                 echo "sigsetjmp not found." >&4
11148                 val="$undef"
11149         fi
11150         ;;
11151 *) val="$d_sigsetjmp"
11152         case "$d_sigsetjmp" in
11153         $define) echo "POSIX sigsetjmp found." >&4;;
11154         $undef) echo "sigsetjmp not found." >&4;;
11155         esac
11156         ;;
11157 esac
11158 set d_sigsetjmp
11159 eval $setvar
11160 $rm -f try.c try
11161
11162 : see if sys/stat.h is available
11163 set sys/stat.h i_sysstat
11164 eval $inhdr
11165
11166
11167 : see if stat knows about block sizes
11168 echo " "
11169 echo "Checking to see if your struct stat has st_blocks field..." >&4
11170 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11171 eval $hasfield
11172
11173
11174 : see if this is a sys/vfs.h system
11175 set sys/vfs.h i_sysvfs
11176 eval $inhdr
11177
11178
11179 : see if this is a sys/statfs.h system
11180 set sys/statfs.h i_sysstatfs
11181 eval $inhdr
11182
11183
11184 echo " "
11185 echo "Checking to see if your system supports struct statfs..." >&4
11186 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
11187 eval $hasstruct
11188 case "$d_statfs_s" in
11189 "$define")      echo "Yes, it does."   ;;
11190 *)              echo "No, it doesn't." ;;
11191 esac
11192
11193
11194
11195 : see if struct statfs knows about f_flags
11196 case "$d_statfs_s" in
11197 define) 
11198         echo " "
11199         echo "Checking to see if your struct statfs has f_flags field..." >&4
11200         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
11201         eval $hasfield
11202         ;;
11203 *)      val="$undef"
11204         set d_statfs_f_flags
11205         eval $setvar
11206         ;;
11207 esac
11208 case "$d_statfs_f_flags" in
11209 "$define")      echo "Yes, it does."   ;;
11210 *)              echo "No, it doesn't." ;;
11211 esac
11212
11213 : see if _ptr and _cnt from stdio act std
11214 echo " "
11215 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11216         echo "(Looks like you have stdio.h from Linux.)"
11217         case "$stdio_ptr" in
11218         '') stdio_ptr='((fp)->_IO_read_ptr)'
11219                 ptr_lval=$define
11220                 ;;
11221         *)      ptr_lval=$d_stdio_ptr_lval;;
11222         esac
11223         case "$stdio_cnt" in
11224         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11225                 cnt_lval=$undef
11226                 ;;
11227         *)      cnt_lval=$d_stdio_cnt_lval;;
11228         esac
11229         case "$stdio_base" in
11230         '') stdio_base='((fp)->_IO_read_base)';;
11231         esac
11232         case "$stdio_bufsiz" in
11233         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11234         esac
11235 else
11236         case "$stdio_ptr" in
11237         '') stdio_ptr='((fp)->_ptr)'
11238                 ptr_lval=$define
11239                 ;;
11240         *)      ptr_lval=$d_stdio_ptr_lval;;
11241         esac
11242         case "$stdio_cnt" in
11243         '') stdio_cnt='((fp)->_cnt)'
11244                 cnt_lval=$define
11245                 ;;
11246         *)      cnt_lval=$d_stdio_cnt_lval;;
11247         esac
11248         case "$stdio_base" in
11249         '') stdio_base='((fp)->_base)';;
11250         esac
11251         case "$stdio_bufsiz" in
11252         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11253         esac
11254 fi
11255 : test whether _ptr and _cnt really work
11256 echo "Checking how std your stdio is..." >&4
11257 $cat >try.c <<EOP
11258 #include <stdio.h>
11259 #define FILE_ptr(fp)    $stdio_ptr
11260 #define FILE_cnt(fp)    $stdio_cnt
11261 int main() {
11262         FILE *fp = fopen("try.c", "r");
11263         char c = getc(fp);
11264         if (
11265                 18 <= FILE_cnt(fp) &&
11266                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11267         )
11268                 exit(0);
11269         exit(1);
11270 }
11271 EOP
11272 val="$undef"
11273 set try
11274 if eval $compile; then
11275         if ./try; then
11276                 echo "Your stdio acts pretty std."
11277                 val="$define"
11278         else
11279                 echo "Your stdio isn't very std."
11280         fi
11281 else
11282         echo "Your stdio doesn't appear very std."
11283 fi
11284 $rm -f try.c try
11285 set d_stdstdio
11286 eval $setvar
11287
11288 : Can _ptr be used as an lvalue?
11289 case "$d_stdstdio$ptr_lval" in
11290 $define$define) val=$define ;;
11291 *) val=$undef ;;
11292 esac
11293 set d_stdio_ptr_lval
11294 eval $setvar
11295
11296 : Can _cnt be used as an lvalue?
11297 case "$d_stdstdio$cnt_lval" in
11298 $define$define) val=$define ;;
11299 *) val=$undef ;;
11300 esac
11301 set d_stdio_cnt_lval
11302 eval $setvar
11303
11304 : see if _base is also standard
11305 val="$undef"
11306 case "$d_stdstdio" in
11307 $define)
11308         $cat >try.c <<EOP
11309 #include <stdio.h>
11310 #define FILE_base(fp)   $stdio_base
11311 #define FILE_bufsiz(fp) $stdio_bufsiz
11312 int main() {
11313         FILE *fp = fopen("try.c", "r");
11314         char c = getc(fp);
11315         if (
11316                 19 <= FILE_bufsiz(fp) &&
11317                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11318         )
11319                 exit(0);
11320         exit(1);
11321 }
11322 EOP
11323         set try
11324         if eval $compile; then
11325                 if ./try; then
11326                         echo "And its _base field acts std."
11327                         val="$define"
11328                 else
11329                         echo "But its _base field isn't std."
11330                 fi
11331         else
11332                 echo "However, it seems to be lacking the _base field."
11333         fi
11334         $rm -f try.c try
11335         ;;
11336 esac
11337 set d_stdiobase
11338 eval $setvar
11339
11340 $cat >&4 <<EOM
11341 Checking how to access stdio streams by file descriptor number...
11342 EOM
11343 case "$stdio_stream_array" in
11344 '')     $cat >try.c <<EOCP
11345 #include <stdio.h>
11346 int main() {
11347   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11348     printf("yes\n");
11349 }
11350 EOCP
11351         for s in _iob __iob __sF
11352         do
11353                 set try -DSTDIO_STREAM_ARRAY=$s
11354                 if eval $compile; then
11355                         case "`./try$exe_ext`" in
11356                         yes)    stdio_stream_array=$s; break ;;
11357                         esac
11358                 fi
11359         done
11360         $rm -f try.* try$exe_ext
11361 esac
11362 case "$stdio_stream_array" in
11363 '')     $cat >&4 <<EOM
11364 I can't figure out how to access stdio streams by file descriptor number.
11365 EOM
11366         d_stdio_stream_array="$undef"
11367         ;;
11368 *)      $cat >&4 <<EOM
11369 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11370 EOM
11371         d_stdio_stream_array="$define"
11372         ;;
11373 esac
11374
11375 : see if strcoll exists
11376 set strcoll d_strcoll
11377 eval $inlibc
11378
11379 : check for structure copying
11380 echo " "
11381 echo "Checking to see if your C compiler can copy structs..." >&4
11382 $cat >try.c <<'EOCP'
11383 int main()
11384 {
11385         struct blurfl {
11386                 int dyick;
11387         } foo, bar;
11388
11389         foo = bar;
11390 }
11391 EOCP
11392 if $cc -c try.c >/dev/null 2>&1 ; then
11393         val="$define"
11394         echo "Yup, it can."
11395 else
11396         val="$undef"
11397         echo "Nope, it can't."
11398 fi
11399 set d_strctcpy
11400 eval $setvar
11401 $rm -f try.*
11402
11403 : see if strerror and/or sys_errlist[] exist
11404 echo " "
11405 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11406     if set strerror val -f d_strerror; eval $csym; $val; then
11407                 echo 'strerror() found.' >&4
11408                 d_strerror="$define"
11409                 d_strerrm='strerror(e)'
11410                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11411                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11412                         d_syserrlst="$define"
11413                 else
11414                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11415                         d_syserrlst="$undef"
11416                 fi
11417     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11418                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11419                 echo 'strerror() found in string header.' >&4
11420                 d_strerror="$define"
11421                 d_strerrm='strerror(e)'
11422                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11423                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11424                                 d_syserrlst="$define"
11425                 else
11426                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11427                         d_syserrlst="$undef"
11428                 fi
11429     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11430                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11431                 d_strerror="$undef"
11432                 d_syserrlst="$define"
11433                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11434     else
11435                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11436                 d_strerror="$undef"
11437                 d_syserrlst="$undef"
11438                 d_strerrm='"unknown"'
11439     fi
11440 fi
11441
11442 : see if strtod exists
11443 set strtod d_strtod
11444 eval $inlibc
11445
11446 : see if strtol exists
11447 set strtol d_strtol
11448 eval $inlibc
11449
11450 : see if strtold exists
11451 set strtold d_strtold
11452 eval $inlibc
11453
11454 : see if strtoll exists
11455 set strtoll d_strtoll
11456 eval $inlibc
11457
11458 : see if strtoul exists
11459 set strtoul d_strtoul
11460 eval $inlibc
11461
11462 : see if strtoull exists
11463 set strtoull d_strtoull
11464 eval $inlibc
11465
11466 : see if strtouq exists
11467 set strtouq d_strtouq
11468 eval $inlibc
11469
11470 : see if strxfrm exists
11471 set strxfrm d_strxfrm
11472 eval $inlibc
11473
11474 : see if symlink exists
11475 set symlink d_symlink
11476 eval $inlibc
11477
11478 : see if syscall exists
11479 set syscall d_syscall
11480 eval $inlibc
11481
11482 : see if sysconf exists
11483 set sysconf d_sysconf
11484 eval $inlibc
11485
11486 : see if system exists
11487 set system d_system
11488 eval $inlibc
11489
11490 : see if tcgetpgrp exists
11491 set tcgetpgrp d_tcgetpgrp
11492 eval $inlibc
11493
11494 : see if tcsetpgrp exists
11495 set tcsetpgrp d_tcsetpgrp
11496 eval $inlibc
11497
11498 : see if prototype for telldir is available
11499 echo " "
11500 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11501 eval $hasproto
11502
11503 : see if this is a sys/times.h system
11504 set sys/times.h i_systimes
11505 eval $inhdr
11506
11507 : see if times exists
11508 echo " "
11509 if set times val -f d_times; eval $csym; $val; then
11510         echo 'times() found.' >&4
11511         d_times="$define"
11512         inc=''
11513         case "$i_systimes" in
11514         "$define") inc='sys/times.h';;
11515         esac
11516         rp="What is the type returned by times() on this system?"
11517         set clock_t clocktype long stdio.h sys/types.h $inc
11518         eval $typedef_ask
11519 else
11520         echo 'times() NOT found, hope that will do.' >&4
11521         d_times="$undef"
11522         clocktype='int'
11523 fi
11524
11525 : see if truncate exists
11526 set truncate d_truncate
11527 eval $inlibc
11528
11529 : see if tzname[] exists
11530 echo " "
11531 if set tzname val -a d_tzname; eval $csym; $val; then
11532         val="$define"
11533         echo 'tzname[] found.' >&4
11534 else
11535         val="$undef"
11536         echo 'tzname[] NOT found.' >&4
11537 fi
11538 set d_tzname
11539 eval $setvar
11540
11541 : see if umask exists
11542 set umask d_umask
11543 eval $inlibc
11544
11545 : see if ustat exists
11546 set ustat d_ustat
11547 eval $inlibc
11548
11549 : backward compatibility for d_hvfork
11550 if test X$d_hvfork != X; then
11551         d_vfork="$d_hvfork"
11552         d_hvfork=''
11553 fi
11554 : see if there is a vfork
11555 val=''
11556 set vfork val
11557 eval $inlibc
11558
11559 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11560 : perl on Solaris 2.x, and probably elsewhere.
11561 case "$val" in
11562 $define)
11563         echo " "
11564         case "$usevfork" in
11565         false) dflt='n';;
11566         *) dflt='y';;
11567         esac
11568         cat <<'EOM'
11569  
11570 Perl can only use a vfork() that doesn't suffer from strict
11571 restrictions on calling functions or modifying global data in
11572 the child.  For example, glibc-2.1 contains such a vfork()
11573 that is unsuitable.  If your system provides a proper fork()
11574 call, chances are that you do NOT want perl to use vfork().
11575
11576 EOM
11577         rp="Do you still want to use vfork()?"
11578         . ./myread
11579         case "$ans" in
11580         y|Y) ;;
11581         *)
11582                 echo "Ok, we won't use vfork()."
11583                 val="$undef"
11584                 ;;
11585         esac
11586         ;;
11587 esac
11588 set d_vfork
11589 eval $setvar
11590 case "$d_vfork" in
11591 $define) usevfork='true';;
11592 *) usevfork='false';;
11593 esac
11594
11595 : see if this is an sysdir system
11596 set sys/dir.h i_sysdir
11597 eval $inhdr
11598
11599 : see if this is an sysndir system
11600 set sys/ndir.h i_sysndir
11601 eval $inhdr
11602
11603 : see if closedir exists
11604 set closedir d_closedir
11605 eval $inlibc
11606
11607 case "$d_closedir" in
11608 "$define")
11609         echo " "
11610         echo "Checking whether closedir() returns a status..." >&4
11611         cat > closedir.c <<EOM
11612 #$i_dirent I_DIRENT             /**/
11613 #$i_sysdir I_SYS_DIR            /**/
11614 #$i_sysndir I_SYS_NDIR          /**/
11615 #$i_systypes I_SYS_TYPES        /**/
11616
11617 #if defined(I_SYS_TYPES)
11618 #include <sys/types.h>
11619 #endif
11620 #if defined(I_DIRENT)
11621 #include <dirent.h>
11622 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11623 #include <sys/dir.h>
11624 #endif
11625 #else
11626 #ifdef I_SYS_NDIR
11627 #include <sys/ndir.h>
11628 #else
11629 #ifdef I_SYS_DIR
11630 #ifdef hp9000s500
11631 #include <ndir.h>       /* may be wrong in the future */
11632 #else
11633 #include <sys/dir.h>
11634 #endif
11635 #endif
11636 #endif
11637 #endif 
11638 int main() { return closedir(opendir(".")); }
11639 EOM
11640         set closedir
11641         if eval $compile_ok; then
11642                 if ./closedir > /dev/null 2>&1 ; then
11643                         echo "Yes, it does."
11644                         val="$undef"
11645                 else
11646                         echo "No, it doesn't."
11647                         val="$define"
11648                 fi
11649         else
11650                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11651                 val="$define"
11652         fi
11653         ;;
11654 *)
11655         val="$undef";
11656         ;;
11657 esac
11658 set d_void_closedir
11659 eval $setvar
11660 $rm -f closedir*
11661 : check for volatile keyword
11662 echo " "
11663 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11664 $cat >try.c <<'EOCP'
11665 int main()
11666 {
11667         typedef struct _goo_struct goo_struct;
11668         goo_struct * volatile goo = ((goo_struct *)0);
11669         struct _goo_struct {
11670                 long long_int;
11671                 int reg_int;
11672                 char char_var;
11673         };
11674         typedef unsigned short foo_t;
11675         char *volatile foo;
11676         volatile int bar;
11677         volatile foo_t blech;
11678         foo = foo;
11679 }
11680 EOCP
11681 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11682         val="$define"
11683         echo "Yup, it does."
11684 else
11685         val="$undef"
11686         echo "Nope, it doesn't."
11687 fi
11688 set d_volatile
11689 eval $setvar
11690 $rm -f try.*
11691
11692 : see if there is a wait4
11693 set wait4 d_wait4
11694 eval $inlibc
11695
11696 : see if waitpid exists
11697 set waitpid d_waitpid
11698 eval $inlibc
11699
11700 : see if wcstombs exists
11701 set wcstombs d_wcstombs
11702 eval $inlibc
11703
11704 : see if wctomb exists
11705 set wctomb d_wctomb
11706 eval $inlibc
11707
11708 : preserve RCS keywords in files with variable substitution, grrr
11709 Date='$Date'
11710 Id='$Id'
11711 Log='$Log'
11712 RCSfile='$RCSfile'
11713 Revision='$Revision'
11714
11715 case "$crosscompile" in
11716 ''|[nN]*) crosscompile="$undef" ;;
11717 esac
11718
11719 case "$osname" in
11720 next|rhapsody|darwin) multiarch="$define" ;;
11721 esac
11722 case "$multiarch" in
11723 ''|[nN]*) multiarch="$undef" ;;
11724 esac
11725
11726 : check for alignment requirements
11727 echo " "
11728 case "$crosscompile$multiarch" in
11729 *$define*)
11730         $cat <<EOM
11731 You seem to be either cross-compiling or doing a multiarchitecture build,
11732 skipping the memory alignment check.
11733
11734 EOM
11735         case "$alignbytes" in
11736         '') alignbytes=8 ;;
11737         esac
11738         ;;
11739 *)
11740         case "$alignbytes" in
11741         '') echo "Checking alignment constraints..." >&4
11742                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11743                         $cat >try.c <<'EOCP'
11744 typedef long double NV;
11745 EOCP
11746                 else
11747                         $cat >try.c <<'EOCP'
11748 typedef double NV;
11749 EOCP
11750                 fi
11751                 $cat >>try.c <<'EOCP'
11752 #include <stdio.h>
11753 struct foobar {
11754         char foo;
11755         NV bar;
11756 } try_algn;
11757 int main()
11758 {
11759     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11760     return(0);
11761 }
11762 EOCP
11763                 set try
11764                 if eval $compile_ok; then
11765                         dflt=`./try`
11766                 else
11767                         dflt='8'
11768                         echo "(I can't seem to compile the test program...)"
11769                 fi
11770                 ;;
11771         *) dflt="$alignbytes"
11772                 ;;
11773         esac
11774         rp="Doubles must be aligned on a how-many-byte boundary?"
11775         . ./myread
11776         alignbytes="$ans"
11777         $rm -f try.c try
11778         ;;
11779 esac
11780
11781
11782 : set the base revision
11783 baserev=5.0
11784
11785 : check for ordering of bytes in a long
11786 echo " "
11787 case "$crosscompile$multiarch" in
11788 *$define*)
11789         $cat <<EOM
11790 You seem to be either cross-compiling or doing a multiarchitecture build,
11791 skipping the byteorder check.
11792
11793 EOM
11794         byteorder='0xffff'
11795         ;;
11796 *)
11797         case "$byteorder" in
11798         '')
11799                 $cat <<'EOM'
11800 In the following, larger digits indicate more significance.  A big-endian
11801 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11802 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11803 machines may have weird orders like 3412.  A Cray will report 87654321,
11804 an Alpha will report 12345678. If the test program works the default is
11805 probably right.
11806 I'm now running the test program...
11807 EOM
11808                 $cat >try.c <<'EOCP'
11809 #include <stdio.h>
11810 int main()
11811 {
11812         int i;
11813         union {
11814                 unsigned long l;
11815                 char c[sizeof(long)];
11816         } u;
11817
11818         if (sizeof(long) > 4)
11819                 u.l = (0x08070605L << 32) | 0x04030201L;
11820         else
11821                 u.l = 0x04030201L;
11822         for (i = 0; i < sizeof(long); i++)
11823                 printf("%c", u.c[i]+'0');
11824         printf("\n");
11825         exit(0);
11826 }
11827 EOCP
11828                 xxx_prompt=y
11829                 set try
11830                 if eval $compile && ./try > /dev/null; then
11831                         dflt=`./try`
11832                         case "$dflt" in
11833                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11834                                 echo "(The test program ran ok.)"
11835                                 echo "byteorder=$dflt"
11836                                 xxx_prompt=n
11837                         ;;
11838                         ????|????????) echo "(The test program ran ok.)" ;;
11839                         *) echo "(The test program didn't run right for some reason.)" ;;
11840                         esac
11841                 else
11842                         dflt='4321'
11843                         cat <<'EOM'
11844 (I can't seem to compile the test program.  Guessing big-endian...)
11845 EOM
11846                 fi
11847                 case "$xxx_prompt" in
11848                 y)
11849                         rp="What is the order of bytes in a long?"
11850                         . ./myread
11851                         byteorder="$ans"
11852                         ;;
11853                 *)      byteorder=$dflt
11854                         ;;
11855                 esac
11856                 ;;
11857         esac
11858         $rm -f try.c try
11859         ;;
11860 esac
11861
11862
11863 : how do we catenate cpp tokens here?
11864 echo " "
11865 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11866 $cat >cpp_stuff.c <<'EOCP'
11867 #define RCAT(a,b)a/**/b
11868 #define ACAT(a,b)a ## b
11869 RCAT(Rei,ser)
11870 ACAT(Cir,cus)
11871 EOCP
11872 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11873 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11874         echo "Oh!  Smells like ANSI's been here." >&4
11875         echo "We can catify or stringify, separately or together!"
11876         cpp_stuff=42
11877 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11878         echo "Ah, yes!  The good old days!" >&4
11879         echo "However, in the good old days we don't know how to stringify and"
11880         echo "catify at the same time."
11881         cpp_stuff=1
11882 else
11883         $cat >&4 <<EOM
11884 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11885 to have to edit the values of CAT[2-5] in config.h...
11886 EOM
11887         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11888 fi
11889 $rm -f cpp_stuff.*
11890
11891 : see if this is a db.h system
11892 set db.h i_db
11893 eval $inhdr
11894
11895 case "$i_db" in
11896 $define)
11897         : Check db version.
11898         echo " "
11899         echo "Checking Berkeley DB version ..." >&4
11900         $cat >try.c <<EOCP
11901 #$d_const HASCONST
11902 #ifndef HASCONST
11903 #define const
11904 #endif
11905 #include <sys/types.h>
11906 #include <stdio.h>
11907 #include <db.h>
11908 int main()
11909 {
11910 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11911     int Major, Minor, Patch ;
11912     unsigned long Version ;
11913     (void)db_version(&Major, &Minor, &Patch) ;
11914     printf("You have Berkeley DB Version 2 or greater\n");
11915
11916     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11917                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11918     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11919                 Major, Minor, Patch) ;
11920
11921     /* check that db.h & libdb are compatible */
11922     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11923         printf("db.h and libdb are incompatible\n") ;
11924         exit(3);        
11925     }
11926
11927     printf("db.h and libdb are compatible\n") ;
11928
11929     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11930                 + DB_VERSION_PATCH ;
11931
11932     /* needs to be >= 2.3.4 */
11933     if (Version < 2003004) {
11934     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11935         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11936         exit(2);        
11937     }
11938
11939     exit(0);
11940 #else
11941 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11942     printf("You have Berkeley DB Version 1\n");
11943     exit(0);    /* DB version < 2: the coast is clear. */
11944 #else
11945     exit(1);    /* <db.h> not Berkeley DB? */
11946 #endif
11947 #endif
11948 }
11949 EOCP
11950         set try
11951         if eval $compile_ok && ./try; then
11952                 echo 'Looks OK.' >&4
11953         else
11954                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11955                 i_db=$undef
11956                 case " $libs " in
11957                 *"-ldb "*)
11958                         : Remove db from list of libraries to use
11959                         echo "Removing unusable -ldb from library list" >&4
11960                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11961                         shift
11962                         libs="$*"
11963                         echo "libs = $libs" >&4
11964                         ;;
11965                 esac
11966         fi
11967         $rm -f try.*
11968         ;;
11969 esac
11970
11971 case "$i_db" in
11972 define)
11973         : Check the return type needed for hash 
11974         echo " "
11975         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11976         $cat >try.c <<EOCP
11977 #$d_const HASCONST
11978 #ifndef HASCONST
11979 #define const
11980 #endif
11981 #include <sys/types.h>
11982 #include <db.h>
11983
11984 #ifndef DB_VERSION_MAJOR
11985 u_int32_t hash_cb (ptr, size)
11986 const void *ptr;
11987 size_t size;
11988 {
11989 }
11990 HASHINFO info;
11991 int main()
11992 {
11993         info.hash = hash_cb;
11994 }
11995 #endif
11996 EOCP
11997         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11998                 if $contains warning try.out >>/dev/null 2>&1 ; then
11999                         db_hashtype='int'
12000                 else
12001                         db_hashtype='u_int32_t'
12002                 fi
12003         else
12004                 : XXX Maybe we should just give up here.
12005                 db_hashtype=u_int32_t
12006                 $cat try.out >&4
12007                 echo "Help:  I can't seem to compile the db test program." >&4
12008                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12009         fi
12010         $rm -f try.*
12011         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12012         ;;
12013 *)      db_hashtype=u_int32_t
12014         ;;
12015 esac
12016 case "$i_db" in
12017 define)
12018         : Check the return type needed for prefix 
12019         echo " "
12020         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12021         cat >try.c <<EOCP
12022 #$d_const HASCONST
12023 #ifndef HASCONST
12024 #define const
12025 #endif
12026 #include <sys/types.h>
12027 #include <db.h>
12028
12029 #ifndef DB_VERSION_MAJOR
12030 size_t prefix_cb (key1, key2)
12031 const DBT *key1;
12032 const DBT *key2;
12033 {
12034 }
12035 BTREEINFO info;
12036 int main()
12037 {
12038         info.prefix = prefix_cb;
12039 }
12040 #endif
12041 EOCP
12042         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12043                 if $contains warning try.out >>/dev/null 2>&1 ; then
12044                         db_prefixtype='int'
12045                 else
12046                         db_prefixtype='size_t'
12047                 fi
12048         else
12049                 db_prefixtype='size_t'
12050                 : XXX Maybe we should just give up here.
12051                 $cat try.out >&4
12052                 echo "Help:  I can't seem to compile the db test program." >&4
12053                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12054         fi
12055         $rm -f try.*
12056         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12057         ;;
12058 *)      db_prefixtype='size_t'
12059         ;;
12060 esac
12061
12062 : check for void type
12063 echo " "
12064 echo "Checking to see how well your C compiler groks the void type..." >&4
12065 case "$voidflags" in
12066 '')
12067         $cat >try.c <<'EOCP'
12068 #if TRY & 1
12069 void sub() {
12070 #else
12071 sub() {
12072 #endif
12073         extern void moo();      /* function returning void */
12074         void (*goo)();          /* ptr to func returning void */
12075 #if TRY & 8
12076         void *hue;              /* generic ptr */
12077 #endif
12078 #if TRY & 2
12079         void (*foo[10])();
12080 #endif
12081
12082 #if TRY & 4
12083         if(goo == moo) {
12084                 exit(0);
12085         }
12086 #endif
12087         exit(0);
12088 }
12089 int main() { sub(); }
12090 EOCP
12091         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12092                 voidflags=$defvoidused
12093         echo "Good.  It appears to support void to the level $package wants.">&4
12094                 if $contains warning .out >/dev/null 2>&1; then
12095                         echo "However, you might get some warnings that look like this:"
12096                         $cat .out
12097                 fi
12098         else
12099 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12100                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12101                         echo "It supports 1..."
12102                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12103                                 echo "It also supports 2..."
12104                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12105                                         voidflags=7
12106                                         echo "And it supports 4 but not 8 definitely."
12107                                 else
12108                                         echo "It doesn't support 4..."
12109                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12110                                                 voidflags=11
12111                                                 echo "But it supports 8."
12112                                         else
12113                                                 voidflags=3
12114                                                 echo "Neither does it support 8."
12115                                         fi
12116                                 fi
12117                         else
12118                                 echo "It does not support 2..."
12119                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12120                                         voidflags=13
12121                                         echo "But it supports 4 and 8."
12122                                 else
12123                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12124                                                 voidflags=5
12125                                                 echo "And it supports 4 but has not heard about 8."
12126                                         else
12127                                                 echo "However it supports 8 but not 4."
12128                                         fi
12129                                 fi
12130                         fi
12131                 else
12132                         echo "There is no support at all for void."
12133                         voidflags=0
12134                 fi
12135         fi
12136 esac
12137 case "$voidflags" in
12138 "$defvoidused") ;;
12139 *)      $cat >&4 <<'EOM'
12140   Support flag bits are:
12141     1: basic void declarations.
12142     2: arrays of pointers to functions returning void.
12143     4: operations between pointers to and addresses of void functions.
12144     8: generic void pointers.
12145 EOM
12146         dflt="$voidflags";
12147         rp="Your void support flags add up to what?"
12148         . ./myread
12149         voidflags="$ans"
12150         ;;
12151 esac
12152 $rm -f try.* .out
12153
12154
12155 : How can we generate normalized random numbers ?
12156 echo " "
12157 echo "Looking for a random number function..." >&4
12158 case "$randfunc" in
12159 '')
12160         if set drand48 val -f; eval $csym; $val; then
12161                 dflt="drand48"
12162                 echo "Good, found drand48()." >&4
12163         elif set random val -f; eval $csym; $val; then
12164                 dflt="random"
12165                 echo "OK, found random()." >&4
12166         else
12167                 dflt="rand"
12168                 echo "Yick, looks like I have to use rand()." >&4
12169         fi
12170         echo " "
12171         ;;
12172 *)
12173         dflt="$randfunc"
12174         ;;
12175 esac
12176 cont=true
12177
12178 case "$ccflags" in
12179 *-Dmy_rand=*|*-Dmy_srand=*)
12180         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12181         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12182         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12183         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12184         ;;
12185 esac
12186
12187 while $test "$cont"; do
12188         rp="Use which function to generate random numbers?"
12189         . ./myread
12190         if $test "$ans" = "$dflt"; then
12191                 : null
12192         else
12193                 randbits=''
12194         fi
12195         randfunc="$ans"
12196         if set $ans val -f; eval $csym; $val; then
12197                 cont=''
12198         else
12199                 dflt=y
12200                 rp="I cannot find function $ans. Use that name anyway?"
12201                 . ./myread
12202                 dflt=rand
12203                 case "$ans" in
12204                         [yY]*) cont='';;
12205                 esac
12206         fi
12207         case "$cont" in
12208         '')
12209                 case "$randfunc" in
12210                 drand48)
12211                         drand01="drand48()"
12212                         seedfunc="srand48"
12213                         randbits=48
12214                         randseedtype=long
12215                         ;;
12216                 rand|random)
12217                         case "$randbits" in
12218                         '')
12219 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12220                                 $cat >try.c <<EOCP
12221 #$i_unistd I_UNISTD
12222 #$i_stdlib I_STDLIB
12223 #include <stdio.h>
12224 #ifdef I_UNISTD
12225 #  include <unistd.h>
12226 #endif
12227 #ifdef I_STDLIB
12228 #  include <stdlib.h>
12229 #endif
12230 int main()
12231 {
12232         register int i;
12233         register unsigned long tmp;
12234         register unsigned long max = 0L;
12235
12236         for (i = 1000; i; i--) {
12237                 tmp = (unsigned long) $randfunc();
12238                 if (tmp > max) max = tmp;
12239         }
12240         for (i = 0; max; i++)
12241                 max /= 2;
12242         printf("%d\n",i);
12243 }
12244 EOCP
12245                                 set try
12246                                 if eval $compile_ok; then
12247                                         dflt=`try`
12248                                 else
12249                                         dflt='?'
12250                                         echo "(I can't seem to compile the test program...)"
12251                                 fi
12252                                 ;;
12253                         *)
12254                                 dflt="$randbits"
12255                                 ;;
12256                         esac
12257                         rp="How many bits does your $randfunc() function produce?"
12258                         . ./myread
12259                         randbits="$ans"
12260                         $rm -f try.c try
12261                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12262                         seedfunc="s$randfunc"
12263                         randseedtype=unsigned
12264                         ;;
12265                 *)
12266                         dflt="31"
12267                         rp="How many bits does your $randfunc() function produce?"
12268                         . ./myread
12269                         randbits="$ans"
12270                         seedfunc="s$randfunc"
12271                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12272                         if set $seedfunc val -f; eval $csym; $val; then
12273                                 echo "(Using $seedfunc() to seed random generator)"
12274                         else
12275                                 echo "(Warning: no $seedfunc() to seed random generator)"
12276                                 seedfunc=rand
12277                         fi
12278                         randseedtype=unsigned
12279                         ;;
12280                 esac
12281                 ;;
12282         esac
12283 done
12284
12285 echo " "
12286 echo "Determining whether or not we are on an EBCDIC system..." >&4
12287 $cat >tebcdic.c <<'EOM'
12288 int main()
12289 {
12290   if ('M'==0xd4) return 0;
12291   return 1;
12292 }
12293 EOM
12294
12295 val=$undef
12296 set tebcdic
12297 if eval $compile_ok; then
12298         if ./tebcdic; then
12299                 echo "You have EBCDIC." >&4
12300                 val="$define"
12301         else
12302                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12303         fi
12304 else
12305         echo "I'm unable to compile the test program." >&4
12306         echo "I'll assume ASCII or some ISO Latin." >&4
12307 fi
12308 $rm -f tebcdic.c tebcdic
12309 set ebcdic
12310 eval $setvar
12311
12312 echo " "
12313 $cat >&4 <<EOM
12314 Checking how to flush all pending stdio output...
12315 EOM
12316 # I only know how to find the first 32 possibly open files on SunOS.
12317 # See also hints/sunos_4_1.sh and util.c  --AD
12318 case "$osname" in
12319 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12320 esac
12321 $cat >>try.c <<EOCP
12322 #include <stdio.h>
12323 #$i_unistd I_UNISTD
12324 #ifdef I_UNISTD
12325 # include <unistd.h>
12326 #endif
12327 #$d_sysconf HAS_SYSCONF
12328 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12329 #ifdef HAS_STDIO_STREAM_ARRAY
12330 # define STDIO_STREAM_ARRAY $stdio_stream_array
12331 #endif
12332 int main() {
12333   FILE* p = fopen("try.out", "w");
12334 #ifdef TRY_FPUTC
12335   fputc('x', p);
12336 #else
12337 # ifdef TRY_FPRINTF
12338   fprintf(p, "x");
12339 # endif
12340 #endif
12341 #ifdef TRY_FFLUSH_NULL
12342   fflush(NULL);
12343 #endif
12344 #ifdef TRY_FFLUSH_ALL
12345   {
12346     long open_max = -1;
12347 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12348     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12349 # else
12350 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12351     open_max = sysconf(_SC_OPEN_MAX);
12352 #  else
12353 #   ifdef FOPEN_MAX
12354     open_max = FOPEN_MAX;
12355 #   else
12356 #    ifdef OPEN_MAX
12357     open_max = OPEN_MAX;
12358 #    else
12359 #     ifdef _NFILE
12360     open_max = _NFILE;
12361 #     endif
12362 #    endif
12363 #   endif
12364 #  endif
12365 # endif 
12366 # ifdef HAS_STDIO_STREAM_ARRAY
12367     if (open_max > 0) {
12368       long i;
12369       for (i = 0; i < open_max; i++)
12370             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12371                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12372                 STDIO_STREAM_ARRAY[i]._flag)
12373                 fflush(&STDIO_STREAM_ARRAY[i]);
12374     }   
12375   }
12376 # endif
12377 #endif
12378   _exit(42);
12379 }
12380 EOCP
12381 : first we have to find out how _not_ to flush
12382 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12383     output=''
12384     set try -DTRY_FPUTC
12385     if eval $compile; then
12386             $rm -f try.out
12387             ./try$exe_ext 2>/dev/null
12388             if $test ! -s try.out -a "X$?" = X42; then
12389                 output=-DTRY_FPUTC
12390             fi
12391     fi
12392     case "$output" in
12393     '')
12394             set try -DTRY_FPRINTF
12395             $rm -f try.out
12396             if eval $compile; then
12397                     $rm -f try.out
12398                     ./try$exe_ext 2>/dev/null
12399                     if $test ! -s try.out -a "X$?" = X42; then
12400                         output=-DTRY_FPRINTF
12401                     fi
12402             fi
12403         ;;
12404     esac
12405 fi
12406 : check for fflush NULL behaviour
12407 case "$fflushNULL" in
12408 '')     set try -DTRY_FFLUSH_NULL $output
12409         if eval $compile; then
12410                 $rm -f try.out
12411                 ./try$exe_ext 2>/dev/null
12412                 code="$?"
12413                 if $test -s try.out -a "X$code" = X42; then
12414                         fflushNULL="`$cat try.out`"
12415                 else
12416                         if $test "X$code" != X42; then
12417                                 $cat >&4 <<EOM
12418 (If this test failed, don't worry, we'll try another method shortly.)
12419 EOM
12420                         fi
12421                 fi
12422         fi
12423         $rm -f core try.core core.try.*
12424         case "$fflushNULL" in
12425         x)      $cat >&4 <<EOM
12426 Your fflush(NULL) works okay.
12427 EOM
12428                 fflushNULL="$define"
12429                 ;;
12430         '')     $cat >&4 <<EOM
12431 Your fflush(NULL) isn't working (contrary to ANSI C).
12432 EOM
12433                 fflushNULL="$undef"
12434                 ;;
12435         *)      $cat >&4 <<EOM
12436 Cannot figure out whether your fflush(NULL) works or not.
12437 I'm assuming it doesn't (contrary to ANSI C).
12438 EOM
12439                 fflushNULL="$undef"
12440                 ;;
12441         esac
12442         ;;
12443 $define|true|[yY]*)
12444         fflushNULL="$define"
12445         ;;
12446 *)
12447         fflushNULL="$undef"
12448         ;;
12449 esac
12450 : check explicit looping only if NULL did not work
12451 case "$fflushNULL" in
12452 "$undef")
12453         : check for fflush all behaviour
12454         case "$fflushall" in
12455         '')     set try -DTRY_FFLUSH_ALL $output
12456                 if eval $compile; then
12457                         $cat >&4 <<EOM
12458 (Now testing the other method--but note that also this may fail.)
12459 EOM
12460                         $rm -f try.out
12461                         ./try$exe_ext 2>/dev/null
12462                         if $test -s try.out -a "X$?" = X42; then
12463                                 fflushall="`$cat try.out`"
12464                         fi
12465                 fi
12466                 $rm -f core try.core core.try.*
12467                 case "$fflushall" in
12468                 x)      $cat >&4 <<EOM
12469 Whew. Flushing explicitly all the stdio streams works.
12470 EOM
12471                         fflushall="$define"
12472                         ;;
12473                 '')     $cat >&4 <<EOM
12474 Sigh. Flushing explicitly all the stdio streams doesn't work.
12475 EOM
12476                         fflushall="$undef"
12477                         ;;
12478                 *)      $cat >&4 <<EOM
12479 Cannot figure out whether flushing stdio streams explicitly works or not.
12480 I'm assuming it doesn't.
12481 EOM
12482                         fflushall="$undef"
12483                         ;;
12484                 esac
12485                 ;;
12486         "$define"|true|[yY]*)
12487                 fflushall="$define"
12488                 ;;
12489         *)
12490                 fflushall="$undef"
12491                 ;;
12492         esac
12493         ;;
12494 *)      fflushall="$undef"      
12495         ;;
12496 esac
12497 case "$fflushNULL$fflushall" in
12498 undefundef)
12499         $cat <<EOM
12500 I cannot figure out how to flush pending stdio output.
12501 EOM
12502         ;;
12503 esac
12504 $rm -f try.* try$exe_ext
12505
12506 : Store the full pathname to the ar program for use in the C program
12507 : Respect a hint or command line value for full_ar.
12508 case "$full_ar" in
12509 '') full_ar=$ar ;;
12510 esac
12511
12512 : Store the full pathname to the sed program for use in the C program
12513 full_sed=$sed
12514
12515 : see what type gids are declared as in the kernel
12516 echo " "
12517 echo "Looking for the type for group ids returned by getgid()."
12518 set gid_t gidtype xxx stdio.h sys/types.h
12519 eval $typedef
12520 case "$gidtype" in
12521 xxx)
12522         xxx=`./findhdr sys/user.h`
12523         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12524         case $1 in
12525         unsigned) dflt="$1 $2" ;;
12526         *) dflt="$1" ;;
12527         esac
12528         ;;
12529 *) dflt="$gidtype";;
12530 esac
12531 case "$gidtype" in
12532 gid_t) echo "gid_t found." ;;
12533 *)      rp="What is the type for group ids returned by getgid()?"
12534         . ./myread
12535         gidtype="$ans"
12536         ;;
12537 esac
12538
12539 echo " "
12540 case "$gidtype" in
12541 *_t) zzz="$gidtype"     ;;
12542 *)   zzz="gid"          ;;
12543 esac
12544 echo "Checking the size of $zzz..." >&4 
12545 cat > try.c <<EOCP
12546 #include <sys/types.h>
12547 #include <stdio.h>
12548 int main() {
12549     printf("%d\n", (int)sizeof($gidtype));
12550     exit(0);
12551 }
12552 EOCP
12553 set try
12554 if eval $compile_ok; then
12555         yyy=`./try`
12556         case "$yyy" in
12557         '')     gidsize=4
12558                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12559                 ;;
12560         *)      gidsize=$yyy
12561                 echo "Your $zzz is $gidsize bytes long."
12562                 ;;
12563         esac
12564 else
12565         gidsize=4
12566         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12567 fi
12568
12569
12570 echo " "
12571 case "$gidtype" in
12572 *_t) zzz="$gidtype"     ;;
12573 *)   zzz="gid"          ;;
12574 esac
12575 echo "Checking the sign of $zzz..." >&4 
12576 cat > try.c <<EOCP
12577 #include <sys/types.h>
12578 #include <stdio.h>
12579 int main() {
12580         $gidtype foo = -1;
12581         if (foo < 0)
12582                 printf("-1\n");
12583         else
12584                 printf("1\n");
12585 }
12586 EOCP
12587 set try
12588 if eval $compile; then
12589         yyy=`./try`
12590         case "$yyy" in
12591         '')     gidsign=1
12592                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12593                 ;;
12594         *)      gidsign=$yyy
12595                 case "$gidsign" in
12596                  1) echo "Your $zzz is unsigned." ;;
12597                 -1) echo "Your $zzz is signed."   ;;
12598                 esac
12599                 ;;
12600         esac
12601 else
12602         gidsign=1
12603         echo "(I can't compile the test program--guessing unsigned.)" >&4
12604 fi
12605
12606
12607 echo " "
12608
12609 if $test X"$quadtype" != X; then
12610
12611 echo "Checking how to print 64-bit integers..." >&4
12612
12613 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12614         $cat >try.c <<'EOCP'
12615 #include <sys/types.h>
12616 #include <stdio.h>
12617 int main() {
12618   int q = 12345678901;
12619   printf("%ld\n", q);
12620 }
12621 EOCP
12622         set try
12623         if eval $compile; then
12624                 yyy=`./try$exe_ext`
12625                 case "$yyy" in
12626                 12345678901)
12627                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12628                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12629                         echo "We will use %d."
12630                         ;;
12631                 esac
12632         fi
12633 fi
12634
12635 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12636         $cat >try.c <<'EOCP'
12637 #include <sys/types.h>
12638 #include <stdio.h>
12639 int main() {
12640   long q = 12345678901;
12641   printf("%ld\n", q);
12642 }
12643 EOCP
12644         set try
12645         if eval $compile; then
12646                 yyy=`./try$exe_ext`
12647                 case "$yyy" in
12648                 12345678901)
12649                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12650                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12651                         echo "We will use %ld."
12652                         ;;
12653                 esac
12654         fi
12655 fi
12656
12657 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12658         $cat >try.c <<'EOCP'
12659 #include <sys/types.h>
12660 #include <inttypes.h>
12661 #include <stdio.h>
12662 int main() {
12663   int64_t q = 12345678901;
12664   printf("%" PRId64 "\n", q);
12665 }
12666 EOCP
12667         set try
12668         if eval $compile; then
12669                 yyy=`./try$exe_ext`
12670                 case "$yyy" in
12671                 12345678901)
12672                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12673                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12674                         echo "We will use the C9X style."
12675                         ;;
12676                 esac
12677         fi
12678 fi
12679
12680 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12681         $cat >try.c <<'EOCP'
12682 #include <sys/types.h>
12683 #include <stdio.h>
12684 int main() {
12685   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12686   printf("%lld\n", q);
12687 }
12688 EOCP
12689         set try
12690         if eval $compile; then
12691                 yyy=`./try$exe_ext`
12692                 case "$yyy" in
12693                 12345678901)
12694                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12695                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12696                         echo "We will use the %lld style."
12697                         ;;
12698                 esac
12699         fi
12700 fi
12701
12702 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12703         $cat >try.c <<EOCP
12704 #include <sys/types.h>
12705 #include <stdio.h>
12706 int main() {
12707   $quadtype q = 12345678901;
12708   printf("%Ld\n", q);
12709 }
12710 EOCP
12711         set try
12712         if eval $compile; then
12713                 yyy=`./try$exe_ext`
12714                 case "$yyy" in
12715                 12345678901)
12716                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12717                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12718                         echo "We will use %Ld."
12719                         ;;
12720                 esac
12721         fi
12722 fi
12723
12724 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12725         $cat >try.c <<EOCP
12726 #include <sys/types.h>
12727 #include <stdio.h>
12728 int main() {
12729   $quadtype q = 12345678901;
12730   printf("%qd\n", q);
12731 }
12732 EOCP
12733         set try
12734         if eval $compile; then
12735                 yyy=`./try$exe_ext`
12736                 case "$yyy" in
12737                 12345678901)
12738                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12739                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12740                         echo "We will use %qd."
12741                         ;;
12742                 esac
12743         fi
12744 fi
12745
12746 if $test X"$sPRId64" = X; then
12747         echo "Cannot figure out how to print 64-bit integers." >&4
12748 fi
12749
12750 $rm -f try try.*
12751
12752 fi
12753
12754 case "$sPRId64" in
12755 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12756         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12757         ;;
12758 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12759         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12760         ;;
12761 esac
12762
12763
12764 echo " "
12765 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12766
12767 if $test X"$ivsize" = X8; then
12768         ivdformat="$sPRId64"
12769         uvuformat="$sPRIu64"
12770         uvoformat="$sPRIo64"
12771         uvxformat="$sPRIx64"
12772 else
12773         if $test X"$ivsize" = X"$longsize"; then
12774                 ivdformat='"ld"'
12775                 uvuformat='"lu"'
12776                 uvoformat='"lo"'
12777                 uvxformat='"lx"'
12778         else
12779                 if $test X"$ivsize" = X"$intsize"; then
12780                         ivdformat='"d"'
12781                         uvuformat='"u"'
12782                         uvoformat='"o"'
12783                         uvxformat='"x"'
12784                 else
12785                         : far out
12786                         if $test X"$ivsize" = X"$shortsize"; then
12787                                 ivdformat='"hd"'
12788                                 uvuformat='"hu"'
12789                                 uvoformat='"ho"'
12790                                 uvxformat='"hx"'
12791                         fi
12792                 fi
12793         fi
12794 fi
12795
12796 case "$ivdformat" in
12797 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12798     exit 1
12799     ;;
12800 esac
12801
12802
12803 echo " "
12804 $echo "Checking the format string to be used for gids..." >&4
12805
12806 case "$gidsign" in
12807 -1)     if $test X"$gidsize" = X"$ivsize"; then
12808                 gidformat="$ivdformat"
12809         else
12810                 if $test X"$gidsize" = X"$longsize"; then
12811                         gidformat='"ld"'
12812                 else
12813                         if $test X"$gidsize" = X"$intsize"; then
12814                                 gidformat='"d"'
12815                         else
12816                                 if $test X"$gidsize" = X"$shortsize"; then
12817                                         gidformat='"hd"'
12818                                 fi
12819                         fi
12820                 fi
12821         fi
12822         ;;
12823 *)      if $test X"$gidsize" = X"$uvsize"; then
12824                 gidformat="$uvuformat"
12825         else
12826                 if $test X"$gidsize" = X"$longsize"; then
12827                         gidformat='"lu"'
12828                 else
12829                         if $test X"$gidsize" = X"$intsize"; then
12830                                 gidformat='"u"'
12831                         else
12832                                 if $test X"$gidsize" = X"$shortsize"; then
12833                                         gidformat='"hu"'
12834                                 fi
12835                         fi
12836                 fi
12837         fi
12838         ;;
12839 esac
12840
12841 : see if getgroups exists
12842 set getgroups d_getgrps
12843 eval $inlibc
12844
12845 : see if setgroups exists
12846 set setgroups d_setgrps
12847 eval $inlibc
12848
12849
12850 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12851 echo " "
12852 case "$d_getgrps$d_setgrps" in
12853 *define*)
12854         case "$groupstype" in
12855         '') dflt="$gidtype" ;;
12856         *)  dflt="$groupstype" ;;
12857         esac
12858         $cat <<EOM
12859 What type of pointer is the second argument to getgroups() and setgroups()?
12860 Usually this is the same as group ids, $gidtype, but not always.
12861
12862 EOM
12863         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12864         . ./myread
12865         groupstype="$ans"
12866         ;;
12867 *)  groupstype="$gidtype";;
12868 esac
12869
12870 echo " "
12871 echo "Checking if your $make program sets \$(MAKE)..." >&4
12872 case "$make_set_make" in
12873 '')
12874         $sed 's/^X //' > testmake.mak << 'EOF'
12875 Xall:
12876 X       @echo 'maketemp="$(MAKE)"'
12877 EOF
12878         case "`$make -f testmake.mak 2>/dev/null`" in
12879         *maketemp=*) make_set_make='#' ;;
12880         *)      make_set_make="MAKE=$make" ;;
12881         esac
12882         $rm -f testmake.mak
12883         ;;
12884 esac
12885 case "$make_set_make" in
12886 '#') echo "Yup, it does.";;
12887 *) echo "Nope, it doesn't.";;
12888 esac
12889
12890 : see what type is used for mode_t
12891 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12892 set mode_t modetype int stdio.h sys/types.h
12893 eval $typedef_ask
12894
12895 : define a fucntion to check prototypes
12896 $cat > protochk <<EOSH
12897 $startsh
12898 cc="$cc"
12899 optimize="$optimize"
12900 ccflags="$ccflags"
12901 prototype="$prototype"
12902 define="$define"
12903 rm=$rm
12904 EOSH
12905
12906 $cat >> protochk <<'EOSH'
12907
12908 $rm -f try.c
12909 foo="$1"
12910 shift
12911 while test $# -ge 2; do
12912         case "$1" in
12913                 $define) echo "#include <$2>" >> try.c ;;
12914                 literal) echo "$2" >> try.c ;;
12915         esac
12916     shift 2
12917 done
12918 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12919 cat >> try.c <<'EOCP'
12920 #ifdef CAN_PROTOTYPE
12921 #define _(args) args
12922 #else
12923 #define _(args) ()
12924 #endif
12925 EOCP
12926 echo "$foo" >> try.c
12927 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12928 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12929 status=$?
12930 $rm -f try.[co]
12931 exit $status
12932 EOSH
12933 chmod +x protochk
12934 $eunicefix protochk
12935
12936 : see what type is used for size_t
12937 rp="What is the type used for the length parameter for string functions?"
12938 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12939 eval $typedef_ask
12940
12941 : check for type of arguments to gethostbyaddr. 
12942 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12943         case "$d_gethbyaddr" in
12944         $define)
12945                 $cat <<EOM
12946
12947 Checking to see what type of arguments are accepted by gethostbyaddr().
12948 EOM
12949                 hdrs="$define sys/types.h
12950                         $d_socket sys/socket.h 
12951                         $i_niin netinet/in.h 
12952                         $i_netdb netdb.h
12953                         $i_unistd unistd.h"
12954                 : The first arg can 'char *' or 'void *'
12955                 : The second arg is some of integral type
12956                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12957                         for yyy in size_t long int; do
12958                                 case "$netdb_host_type" in
12959                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12960                                         if ./protochk "$try" $hdrs; then
12961                                                 echo "Your system accepts $xxx for the first arg."
12962                                                 echo "...and $yyy for the second arg."
12963                                                 netdb_host_type="$xxx"
12964                                                 netdb_hlen_type="$yyy"
12965                                         fi
12966                                         ;;
12967                                 esac
12968                         done
12969                 done
12970                 : In case none of those worked, prompt the user.
12971                 case "$netdb_host_type" in
12972                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12973                         dflt='char *'
12974                         . ./myread
12975                         netdb_host_type=$ans
12976                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12977                         dflt="$sizetype"
12978                         . ./myread
12979                         netdb_hlen_type=$ans
12980                         ;;
12981                 esac
12982                 ;;
12983         *)      : no gethostbyaddr, so pick harmless defaults
12984                 netdb_host_type='char *'
12985                 netdb_hlen_type="$sizetype"
12986                 ;;
12987         esac
12988         # Remove the "const" if needed. -- but then we'll have a 
12989         # prototype clash!
12990         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12991 fi
12992
12993 : check for type of argument to gethostbyname. 
12994 if test "X$netdb_name_type" = X ; then
12995         case "$d_gethbyname" in
12996         $define)
12997                 $cat <<EOM
12998
12999 Checking to see what type of argument is accepted by gethostbyname().
13000 EOM
13001                 hdrs="$define sys/types.h
13002                         $d_socket sys/socket.h 
13003                         $i_niin netinet/in.h 
13004                         $i_netdb netdb.h
13005                         $i_unistd unistd.h"
13006                 for xxx in "const char *" "char *"; do
13007                         case "$netdb_name_type" in
13008                         '')     try="extern struct hostent *gethostbyname($xxx);"
13009                                 if ./protochk "$try" $hdrs; then
13010                                         echo "Your system accepts $xxx."
13011                                         netdb_name_type="$xxx"
13012                                 fi
13013                                 ;;
13014                         esac
13015                 done
13016                 : In case none of those worked, prompt the user.
13017                 case "$netdb_name_type" in
13018                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13019                         dflt='char *'
13020                         . ./myread
13021                         netdb_name_type=$ans
13022                         ;;
13023                 esac
13024                 ;;
13025         *)      : no gethostbyname, so pick harmless default
13026                 netdb_name_type='char *'
13027                 ;;
13028         esac
13029 fi
13030
13031 : check for type of 1st argument to getnetbyaddr. 
13032 if test "X$netdb_net_type" = X ; then
13033         case "$d_getnbyaddr" in
13034         $define)
13035                 $cat <<EOM
13036
13037 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13038 EOM
13039                 hdrs="$define sys/types.h
13040                         $d_socket sys/socket.h 
13041                         $i_niin netinet/in.h 
13042                         $i_netdb netdb.h
13043                         $i_unistd unistd.h"
13044                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13045                         case "$netdb_net_type" in
13046                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13047                                 if ./protochk "$try" $hdrs; then
13048                                         echo "Your system accepts $xxx."
13049                                         netdb_net_type="$xxx"
13050                                 fi
13051                                 ;;
13052                         esac
13053                 done
13054                 : In case none of those worked, prompt the user.
13055                 case "$netdb_net_type" in
13056                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13057                         dflt='long'
13058                         . ./myread
13059                         netdb_net_type=$ans
13060                         ;;
13061                 esac
13062                 ;;
13063         *)      : no getnetbyaddr, so pick harmless default
13064                 netdb_net_type='long'
13065                 ;;
13066         esac
13067 fi
13068 : locate the preferred pager for this system
13069 case "$pager" in
13070 '')
13071         dflt=''
13072         case "$pg" in
13073         /*) dflt=$pg;;
13074         esac
13075         case "$more" in
13076         /*) dflt=$more;;
13077         esac
13078         case "$less" in
13079         /*) dflt=$less;;
13080         esac
13081         case "$dflt" in
13082         '') dflt=/usr/ucb/more;;
13083         esac
13084         ;;
13085 *) dflt="$pager";;
13086 esac
13087 echo " "
13088 fn=f/
13089 rp='What pager is used on your system?'
13090 . ./getfile
13091 pager="$ans"
13092
13093 : see what type pids are declared as in the kernel
13094 rp="What is the type of process ids on this system?"
13095 set pid_t pidtype int stdio.h sys/types.h
13096 eval $typedef_ask
13097
13098 : Find earliest binary compatible site_perl subdirectory perl can use.
13099 case "$bincompat5005" in
13100 "$define") xs_apiversion='5.005' ;;
13101 *) xs_apiversion=$version ;;   # The current site_perl version.
13102 esac
13103 : Find earliest pure perl site_perl subdirectory perl can use.
13104 : The versioned directories started at 5.005.
13105 pm_apiversion='5.005'
13106
13107 : check for length of pointer
13108 echo " "
13109 case "$ptrsize" in
13110 '')
13111         echo "Checking to see how big your pointers are..." >&4
13112         if test "$voidflags" -gt 7; then
13113                 echo '#define VOID_PTR char *' > try.c
13114         else
13115                 echo '#define VOID_PTR void *' > try.c
13116         fi
13117         $cat >>try.c <<'EOCP'
13118 #include <stdio.h>
13119 int main()
13120 {
13121     printf("%d\n", (int)sizeof(VOID_PTR));
13122     exit(0);
13123 }
13124 EOCP
13125         set try
13126         if eval $compile_ok; then
13127                 ptrsize=`./try`
13128                 echo "Your pointers are $ptrsize bytes long."
13129         else
13130                 dflt='4'
13131                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13132                 rp="What is the size of a pointer (in bytes)?"
13133                 . ./myread
13134                 ptrsize="$ans"
13135         fi
13136         ;;
13137 esac
13138 $rm -f try.c try
13139
13140 : see if ar generates random libraries by itself
13141 echo " "
13142 echo "Checking how to generate random libraries on your machine..." >&4
13143 echo 'int bar1() { return bar2(); }' > bar1.c
13144 echo 'int bar2() { return 2; }' > bar2.c
13145 $cat > foo.c <<'EOP'
13146 int main() { printf("%d\n", bar1()); exit(0); }
13147 EOP
13148 $cc $ccflags -c bar1.c >/dev/null 2>&1
13149 $cc $ccflags -c bar2.c >/dev/null 2>&1
13150 $cc $ccflags -c foo.c >/dev/null 2>&1
13151 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13152 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13153         ./foobar >/dev/null 2>&1; then
13154         echo "$ar appears to generate random libraries itself."
13155         orderlib=false
13156         ranlib=":"
13157 elif $ar ts bar$_a >/dev/null 2>&1 &&
13158         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13159         ./foobar >/dev/null 2>&1; then
13160                 echo "a table of contents needs to be added with '$ar ts'."
13161                 orderlib=false
13162                 ranlib="$ar ts"
13163 else
13164         case "$ranlib" in
13165         :) ranlib='';;
13166         '')
13167                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13168                 $test -f $ranlib || ranlib=''
13169                 ;;
13170         esac
13171         if $test -n "$ranlib"; then
13172                 echo "your system has '$ranlib'; we'll use that."
13173                 orderlib=false
13174         else
13175                 echo "your system doesn't seem to support random libraries"
13176                 echo "so we'll use lorder and tsort to order the libraries."
13177                 orderlib=true
13178                 ranlib=":"
13179         fi
13180 fi
13181 $rm -f foo* bar* 
13182
13183 : check for type of arguments to select. 
13184 case "$selecttype" in
13185 '') case "$d_select" in
13186         $define)
13187                 echo " "
13188                 $cat <<EOM
13189 Checking to see what type of arguments are accepted by select().
13190 EOM
13191                 hdrs="$define sys/types.h
13192                         $i_systime sys/time.h 
13193                         $i_sysselct sys/select.h
13194                         $d_socket sys/socket.h"
13195                 : The first arg can be int, unsigned, or size_t
13196                 : The last arg may or may not be 'const'
13197                 val=''
13198                 : void pointer has been seen but using that
13199                 : breaks the selectminbits test
13200                 for xxx in 'fd_set *' 'int *'; do
13201                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13202                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13203                                         case "$val" in
13204                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13205                                                 if ./protochk "$try" $hdrs; then
13206                                                         echo "Your system accepts $xxx."
13207                                                         val="$xxx"
13208                                                 fi
13209                                                 ;;
13210                                         esac
13211                                 done
13212                         done
13213                 done
13214                 case "$val" in
13215                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13216                         case "$d_fd_set" in
13217                                 $define) dflt="fd_set *" ;;
13218                                 *)              dflt="int *" ;;
13219                         esac
13220                         . ./myread
13221                         val=$ans
13222                         ;;
13223                 esac
13224                 selecttype="$val"
13225                 ;;
13226         *)      : no select, so pick a harmless default
13227                 selecttype='int *'
13228                 ;;
13229         esac
13230         ;;
13231 esac
13232
13233 : check for the select 'width'
13234 case "$selectminbits" in
13235 '') case "$d_select" in
13236         $define)
13237                 $cat <<EOM
13238
13239 Checking to see on how many bits at a time your select() operates...
13240 EOM
13241                 $cat >try.c <<EOCP
13242 #include <sys/types.h>
13243 #$i_time I_TIME
13244 #$i_systime I_SYS_TIME
13245 #$i_systimek I_SYS_TIME_KERNEL
13246 #ifdef I_TIME
13247 #   include <time.h>
13248 #endif
13249 #ifdef I_SYS_TIME
13250 #   ifdef I_SYS_TIME_KERNEL
13251 #       define KERNEL
13252 #   endif
13253 #   include <sys/time.h>
13254 #   ifdef I_SYS_TIME_KERNEL
13255 #       undef KERNEL
13256 #   endif
13257 #endif
13258 #$i_sysselct I_SYS_SELECT
13259 #ifdef I_SYS_SELECT
13260 #include <sys/select.h>
13261 #endif
13262 #$d_socket HAS_SOCKET
13263 #ifdef HAS_SOCKET
13264 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13265 #endif
13266 #include <stdio.h>
13267 $selecttype b;
13268 #define S sizeof(*(b))
13269 #define MINBITS 64
13270 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13271 #define NBITS  (NBYTES * 8)
13272 int main() {
13273     char s[NBYTES];
13274     struct timeval t;
13275     int i;
13276     FILE* fp;
13277     int fd;
13278
13279     fclose(stdin);
13280     fp = fopen("try.c", "r");
13281     if (fp == 0)
13282       exit(1);
13283     fd = fileno(fp);
13284     if (fd < 0)
13285       exit(2);
13286     b = ($selecttype)s;
13287     for (i = 0; i < NBITS; i++)
13288         FD_SET(i, b);
13289     t.tv_sec  = 0;
13290     t.tv_usec = 0;
13291     select(fd + 1, b, 0, 0, &t);
13292     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13293     printf("%d\n", i + 1);
13294     return 0;
13295 }
13296 EOCP
13297                 set try
13298                 if eval $compile_ok; then
13299                         selectminbits=`./try`
13300                         case "$selectminbits" in
13301                         '')     cat >&4 <<EOM
13302 Cannot figure out on how many bits at a time your select() operates.
13303 I'll play safe and guess it is 32 bits.
13304 EOM
13305                                 selectminbits=32
13306                                 bits="32 bits"
13307                                 ;;
13308                         1)      bits="1 bit" ;;
13309                         *)      bits="$selectminbits bits" ;;
13310                         esac
13311                         echo "Your select() operates on $bits at a time." >&4
13312                 else
13313                         rp='What is the minimum number of bits your select() operates on?'
13314                         case "$byteorder" in
13315                         1234|12345678)  dflt=32 ;;
13316                         *)              dflt=1  ;;
13317                         esac
13318                         . ./myread
13319                         val=$ans
13320                         selectminbits="$val"
13321                 fi
13322                 $rm -f try.* try
13323                 ;;
13324         *)      : no select, so pick a harmless default
13325                 selectminbits='32'
13326                 ;;
13327         esac
13328         ;;
13329 esac
13330
13331 : Trace out the files included by signal.h, then look for SIGxxx names.
13332 : Remove SIGARRAYSIZE used by HPUX.
13333 : Remove SIGSTKSIZE used by Linux.
13334 : Remove SIGSTKSZ used by Posix.
13335 : Remove SIGTYP void lines used by OS2.
13336 : Some cpps, like os390, dont give the file name anywhere
13337 if [ "X$fieldn" = X ]; then
13338         : Just make some guesses.  We check them later.
13339         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13340 else
13341         xxx=`echo '#include <signal.h>' |
13342         $cppstdin $cppminus $cppflags 2>/dev/null |
13343         $grep '^[       ]*#.*include' | 
13344         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13345 fi
13346 : Check this list of files to be sure we have parsed the cpp output ok.
13347 : This will also avoid potentially non-existent files, such 
13348 : as ../foo/bar.h
13349 xxxfiles=''
13350 for xx in $xxx /dev/null ; do
13351         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13352 done
13353 : If we have found no files, at least try signal.h
13354 case "$xxxfiles" in
13355 '')     xxxfiles=`./findhdr signal.h` ;;
13356 esac
13357 xxx=`awk '
13358 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13359         print substr($2, 4, 20)
13360 }
13361 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13362         print substr($3, 4, 20)
13363 }' $xxxfiles`
13364 : Append some common names just in case the awk scan failed.
13365 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13366 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13367 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13368 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13369 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13370
13371 : generate a few handy files for later
13372 $cat > signal.c <<'EOCP'
13373 #include <sys/types.h>
13374 #include <signal.h>
13375 #include <stdio.h>
13376 int main() {
13377
13378 /* Strange style to avoid deeply-nested #if/#else/#endif */
13379 #ifndef NSIG
13380 #  ifdef _NSIG
13381 #    define NSIG (_NSIG)
13382 #  endif
13383 #endif
13384
13385 #ifndef NSIG
13386 #  ifdef SIGMAX
13387 #    define NSIG (SIGMAX+1)
13388 #  endif
13389 #endif
13390
13391 #ifndef NSIG
13392 #  ifdef SIG_MAX
13393 #    define NSIG (SIG_MAX+1)
13394 #  endif
13395 #endif
13396
13397 #ifndef NSIG
13398 #  ifdef MAXSIG
13399 #    define NSIG (MAXSIG+1)
13400 #  endif
13401 #endif
13402
13403 #ifndef NSIG
13404 #  ifdef MAX_SIG
13405 #    define NSIG (MAX_SIG+1)
13406 #  endif
13407 #endif
13408
13409 #ifndef NSIG
13410 #  ifdef SIGARRAYSIZE
13411 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13412 #  endif
13413 #endif
13414
13415 #ifndef NSIG
13416 #  ifdef _sys_nsig
13417 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13418 #  endif
13419 #endif
13420
13421 /* Default to some arbitrary number that's big enough to get most
13422    of the common signals.
13423 */
13424 #ifndef NSIG
13425 #    define NSIG 50
13426 #endif
13427
13428 printf("NSIG %d\n", NSIG);
13429
13430 #ifndef JUST_NSIG
13431
13432 EOCP
13433
13434 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13435 {
13436         printf "#ifdef SIG"; printf $1; printf "\n"
13437         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13438         printf $1; printf ");\n"
13439         printf "#endif\n"
13440 }
13441 END {
13442         printf "#endif /* JUST_NSIG */\n";
13443         printf "exit(0);\n}\n";
13444 }
13445 ' >>signal.c
13446 $cat >signal.awk <<'EOP'
13447 BEGIN { ndups = 0 }
13448 $1 ~ /^NSIG$/ { nsig = $2 }
13449 ($1 !~ /^NSIG$/) && (NF == 2) {
13450     if ($2 > maxsig) { maxsig = $2 }
13451     if (sig_name[$2]) {
13452         dup_name[ndups] = $1
13453         dup_num[ndups] = $2
13454         ndups++ 
13455     }
13456     else {
13457         sig_name[$2] = $1
13458         sig_num[$2] = $2
13459     }
13460 }
13461 END { 
13462     if (nsig == 0) {
13463         nsig = maxsig + 1
13464     }
13465     printf("NSIG %d\n", nsig);
13466     for (n = 1; n < nsig; n++) {
13467         if (sig_name[n]) {
13468             printf("%s %d\n", sig_name[n], sig_num[n])
13469         }
13470         else {
13471             printf("NUM%d %d\n", n, n) 
13472         }
13473     }
13474     for (n = 0; n < ndups; n++) {
13475         printf("%s %d\n", dup_name[n], dup_num[n])
13476     }
13477 }
13478 EOP
13479 $cat >signal_cmd <<EOS
13480 $startsh
13481 if $test -s signal.lst; then
13482     echo "Using your existing signal.lst file"
13483         exit 0
13484 fi
13485 xxx="$xxx"
13486 EOS
13487 $cat >>signal_cmd <<'EOS'
13488
13489 set signal
13490 if eval $compile_ok; then
13491         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13492 else
13493         echo "(I can't seem be able to compile the whole test program)" >&4
13494         echo "(I'll try it in little pieces.)" >&4
13495         set signal -DJUST_NSIG
13496         if eval $compile_ok; then
13497                 ./signal$_exe > signal.nsg
13498                 $cat signal.nsg
13499         else
13500                 echo "I can't seem to figure out how many signals you have." >&4
13501                 echo "Guessing 50." >&4
13502                 echo 'NSIG 50' > signal.nsg
13503         fi
13504         : Now look at all the signal names, one at a time.
13505         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13506                 $cat > signal.c <<EOCP
13507 #include <sys/types.h>
13508 #include <signal.h>
13509 #include <stdio.h>
13510 int main() {
13511 printf("$xx %d\n", SIG${xx});
13512 return 0;
13513 }
13514 EOCP
13515                 set signal
13516                 if eval $compile; then
13517                         echo "SIG${xx} found."
13518                         ./signal$_exe  >> signal.ls1
13519                 else
13520                         echo "SIG${xx} NOT found."
13521                 fi
13522         done
13523         if $test -s signal.ls1; then
13524                 $cat signal.nsg signal.ls1 |
13525                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13526         fi
13527
13528 fi
13529 if $test -s signal.lst; then
13530         :
13531 else
13532         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13533         echo 'kill -l' >signal
13534         set X `csh -f <signal`
13535         $rm -f signal
13536         shift
13537         case $# in
13538         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13539         esac
13540         echo $@ | $tr ' ' $trnl | \
13541             $awk '{ printf "%s %d\n", $1, ++s; }
13542                   END { printf "NSIG %d\n", ++s }' >signal.lst
13543 fi
13544 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13545 EOS
13546 chmod a+x signal_cmd
13547 $eunicefix signal_cmd
13548
13549 : generate list of signal names
13550 echo " "
13551 case "$sig_name_init" in
13552 '') doinit=yes ;;
13553 *)  case "$sig_num_init" in
13554     ''|*,*) doinit=yes ;;
13555     esac ;;
13556 esac
13557 case "$doinit" in
13558 yes)
13559         echo "Generating a list of signal names and numbers..." >&4
13560         . ./signal_cmd
13561         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13562         sig_name=`$awk 'BEGIN { printf "ZERO " }
13563                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13564         sig_num=`$awk  'BEGIN { printf "0 " }
13565                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13566         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13567                              !/^NSIG/   { printf "\"%s\", ", $1 }
13568                              END        { printf "0\n" }' signal.lst`
13569         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13570                              !/^NSIG/   { printf "%d, ", $2}
13571                              END        { printf "0\n"}' signal.lst`
13572         ;;
13573 esac
13574 echo "The following $sig_count signals are available:"
13575 echo " "
13576 echo $sig_name | $awk \
13577 'BEGIN { linelen = 0 }
13578 {
13579         for (i = 1; i <= NF; i++) {
13580                 name = "SIG" $i " "
13581                 linelen = linelen + length(name)
13582                 if (linelen > 70) {
13583                         printf "\n"
13584                         linelen = length(name)
13585                 }
13586                 printf "%s", name
13587         }
13588         printf "\n"
13589 }'
13590 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13591
13592 : check for socklen_t
13593 echo " "
13594 echo "Checking to see if you have socklen_t..." >&4
13595 $cat >try.c <<EOCP
13596 #include <sys/types.h>
13597 #$d_socket HAS_SOCKET
13598 #ifdef HAS_SOCKET
13599 #include <sys/socket.h>
13600 #endif
13601 int main() { socklen_t x = 16; }
13602 EOCP
13603 set try
13604 if eval $compile; then
13605         val="$define"
13606         echo "You have socklen_t."
13607 else
13608         val="$undef"
13609         echo "You do not have socklen_t."
13610         case "$sizetype" in
13611         size_t) echo "(You do have size_t, that might work.)" ;;
13612         esac
13613 fi
13614 $rm -f try try.*
13615 set d_socklen_t
13616 eval $setvar
13617
13618 : check for type of the size argument to socket calls
13619 case "$d_socket" in
13620 "$define")
13621         $cat <<EOM
13622
13623 Checking to see what type is the last argument of accept().
13624 EOM
13625         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13626         yyy=''
13627         case "$d_socklen_t" in
13628         "$define") yyy="$yyy socklen_t"
13629         esac
13630         yyy="$yyy $sizetype int long"
13631         for xxx in $yyy; do
13632                 case "$socksizetype" in
13633                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13634                         if ./protochk "$try" $hdrs; then
13635                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13636                                 socksizetype="$xxx"
13637                         fi
13638                         ;;
13639                 esac
13640         done
13641 : In case none of those worked, prompt the user.
13642         case "$socksizetype" in
13643         '')     rp='What is the type for socket address structure sizes?'
13644                 dflt='int'
13645                 . ./myread
13646                 socksizetype=$ans
13647                 ;;
13648         esac
13649         ;;
13650 *)      : no sockets, so pick relatively harmless defaults
13651         socksizetype='char *'
13652         ;;
13653 esac
13654
13655 : see what type is used for signed size_t
13656 set ssize_t ssizetype int stdio.h sys/types.h
13657 eval $typedef
13658 dflt="$ssizetype"
13659 $cat > ssize.c <<EOM
13660 #include <stdio.h>
13661 #include <sys/types.h>
13662 #define Size_t $sizetype
13663 #define SSize_t $dflt
13664 int main()
13665 {
13666         if (sizeof(Size_t) == sizeof(SSize_t))
13667                 printf("$dflt\n");
13668         else if (sizeof(Size_t) == sizeof(int))
13669                 printf("int\n");
13670         else 
13671                 printf("long\n");
13672         exit(0);
13673 }
13674 EOM
13675 echo " "
13676 set ssize
13677 if eval $compile_ok && ./ssize > /dev/null; then
13678         ssizetype=`./ssize`
13679         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13680 else
13681         $cat >&4 <<EOM
13682 Help! I can't compile and run the ssize_t test program: please enlighten me!
13683 (This is probably a misconfiguration in your system or libraries, and
13684 you really ought to fix it.  Still, I'll try anyway.)
13685
13686 I need a type that is the same size as $sizetype, but is guaranteed to
13687 be signed.  Common values are ssize_t, int and long.
13688
13689 EOM
13690         rp="What signed type is the same size as $sizetype?"
13691         . ./myread
13692         ssizetype="$ans"
13693 fi
13694 $rm -f ssize ssize.*
13695
13696 : see what type of char stdio uses.
13697 echo " "
13698 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13699         echo "Your stdio uses unsigned chars." >&4
13700         stdchar="unsigned char"
13701 else
13702         echo "Your stdio uses signed chars." >&4
13703         stdchar="char"
13704 fi
13705
13706 : see if time exists
13707 echo " "
13708 if test "X$d_time" = X -o X"$timetype" = X; then
13709     if set time val -f d_time; eval $csym; $val; then
13710                 echo 'time() found.' >&4
13711                 val="$define"
13712                 rp="What is the type returned by time() on this system?"
13713                 set time_t timetype long stdio.h sys/types.h
13714                 eval $typedef_ask
13715     else
13716                 echo 'time() not found, hope that will do.' >&4
13717                 val="$undef"
13718                 timetype='int';
13719     fi
13720     set d_time
13721     eval $setvar
13722 fi
13723
13724 : see what type uids are declared as in the kernel
13725 echo " "
13726 echo "Looking for the type for user ids returned by getuid()."
13727 set uid_t uidtype xxx stdio.h sys/types.h
13728 eval $typedef
13729 case "$uidtype" in
13730 xxx)
13731         xxx=`./findhdr sys/user.h`
13732         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13733         case $1 in
13734         unsigned) dflt="$1 $2" ;;
13735         *) dflt="$1" ;;
13736         esac
13737         ;;
13738 *) dflt="$uidtype";;
13739 esac
13740 case "$uidtype" in
13741 uid_t)  echo "uid_t found." ;;
13742 *)      rp="What is the type for user ids returned by getuid()?"
13743         . ./myread
13744         uidtype="$ans"
13745         ;;
13746 esac
13747
13748 echo " "
13749 case "$uidtype" in
13750 *_t) zzz="$uidtype"     ;;
13751 *)   zzz="uid"          ;;
13752 esac
13753 echo "Checking the size of $zzz..." >&4 
13754 cat > try.c <<EOCP
13755 #include <sys/types.h>
13756 #include <stdio.h>
13757 int main() {
13758     printf("%d\n", (int)sizeof($uidtype));
13759     exit(0);
13760 }
13761 EOCP
13762 set try
13763 if eval $compile_ok; then
13764         yyy=`./try`
13765         case "$yyy" in
13766         '')     uidsize=4
13767                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13768                 ;;
13769         *)      uidsize=$yyy
13770                 echo "Your $zzz is $uidsize bytes long."
13771                 ;;
13772         esac
13773 else
13774         uidsize=4
13775         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13776 fi
13777
13778 echo " "
13779 case "$uidtype" in
13780 *_t) zzz="$uidtype"     ;;
13781 *)   zzz="uid"          ;;
13782 esac
13783 echo "Checking the sign of $zzz..." >&4
13784 cat > try.c <<EOCP
13785 #include <sys/types.h>
13786 #include <stdio.h>
13787 int main() {
13788         $uidtype foo = -1;
13789         if (foo < 0)
13790                 printf("-1\n");
13791         else
13792                 printf("1\n");
13793 }
13794 EOCP
13795 set try
13796 if eval $compile; then
13797         yyy=`./try`
13798         case "$yyy" in
13799         '')     uidsign=1
13800                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13801                 ;;
13802         *)      uidsign=$yyy
13803                 case "$uidsign" in
13804                  1) echo "Your $zzz is unsigned." ;;
13805                 -1) echo "Your $zzz is signed."   ;;
13806                 esac
13807                 ;;
13808         esac
13809 else
13810         uidsign=1
13811         echo "(I can't compile the test program--guessing unsigned.)" >&4
13812 fi
13813
13814
13815
13816 echo " "
13817 $echo "Checking the format string to be used for uids..." >&4
13818
13819 case "$uidsign" in
13820 -1)     if $test X"$uidsize" = X"$ivsize"; then
13821                 uidformat="$ivdformat"
13822         else
13823                 if $test X"$uidsize" = X"$longsize"; then
13824                         uidformat='"ld"'
13825                 else
13826                         if $test X"$uidsize" = X"$intsize"; then
13827                                 uidformat='"d"'
13828                         else
13829                                 if $test X"$uidsize" = X"$shortsize"; then
13830                                         uidformat='"hd"'
13831                                 fi
13832                         fi
13833                 fi
13834         fi
13835         ;;
13836 *)      if $test X"$uidsize" = X"$uvsize"; then
13837                 uidformat="$uvuformat"
13838         else
13839                 if $test X"$uidsize" = X"$longsize"; then
13840                         uidformat='"lu"'
13841                 else
13842                         if $test X"$uidsize" = X"$intsize"; then
13843                                 uidformat='"u"'
13844                         else
13845                                 if $test X"$uidsize" = X"$shortsize"; then
13846                                         uidformat='"hu"'
13847                                 fi
13848                         fi
13849                 fi
13850         fi
13851         ;;
13852 esac
13853
13854 : see if dbm.h is available
13855 : see if dbmclose exists
13856 set dbmclose d_dbmclose
13857 eval $inlibc
13858
13859 case "$d_dbmclose" in
13860 $define)
13861         set dbm.h i_dbm
13862         eval $inhdr
13863         case "$i_dbm" in
13864         $define)
13865                 val="$undef"
13866                 set i_rpcsvcdbm
13867                 eval $setvar
13868                 ;;
13869         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13870                 eval $inhdr
13871                 ;;
13872         esac
13873         ;;
13874 *)      echo "We won't be including <dbm.h>"
13875         val="$undef"
13876         set i_dbm
13877         eval $setvar
13878         val="$undef"
13879         set i_rpcsvcdbm
13880         eval $setvar
13881         ;;
13882 esac
13883
13884 : see if this is a sys/file.h system
13885 val=''
13886 set sys/file.h val
13887 eval $inhdr
13888
13889 : do we need to include sys/file.h ?
13890 case "$val" in
13891 "$define")
13892         echo " "
13893         if $h_sysfile; then
13894                 val="$define"
13895                 echo "We'll be including <sys/file.h>." >&4
13896         else
13897                 val="$undef"
13898                 echo "We won't be including <sys/file.h>." >&4
13899         fi
13900         ;;
13901 *)
13902         h_sysfile=false
13903         ;;
13904 esac
13905 set i_sysfile
13906 eval $setvar
13907
13908 : see if fcntl.h is there
13909 val=''
13910 set fcntl.h val
13911 eval $inhdr
13912
13913 : see if we can include fcntl.h
13914 case "$val" in
13915 "$define")
13916         echo " "
13917         if $h_fcntl; then
13918                 val="$define"
13919                 echo "We'll be including <fcntl.h>." >&4
13920         else
13921                 val="$undef"
13922                 if $h_sysfile; then
13923         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13924                 else
13925                         echo "We won't be including <fcntl.h>." >&4
13926                 fi
13927         fi
13928         ;;
13929 *)
13930         h_fcntl=false
13931         val="$undef"
13932         ;;
13933 esac
13934 set i_fcntl
13935 eval $setvar
13936
13937 : see if this is a iconv.h system
13938 set iconv.h i_iconv
13939 eval $inhdr
13940
13941 : see if locale.h is available
13942 set locale.h i_locale
13943 eval $inhdr
13944
13945 : see if mach cthreads are available
13946 if test "X$usethreads" = "X$define"; then
13947         set mach/cthreads.h i_machcthr
13948         eval $inhdr
13949 else
13950         i_machcthr="$undef"
13951 fi
13952
13953
13954
13955 : see if this is a math.h system
13956 set math.h i_math
13957 eval $inhdr
13958
13959 : see if this is a mntent.h system
13960 set mntent.h i_mntent
13961 eval $inhdr
13962
13963 : see if ndbm.h is available
13964 set ndbm.h t_ndbm
13965 eval $inhdr
13966 case "$t_ndbm" in
13967 $define)
13968         : see if dbm_open exists
13969         set dbm_open d_dbm_open
13970         eval $inlibc
13971         case "$d_dbm_open" in
13972         $undef)
13973                 t_ndbm="$undef"
13974                 echo "We won't be including <ndbm.h>"
13975                 ;;
13976         esac
13977         ;;
13978 esac
13979 val="$t_ndbm"
13980 set i_ndbm
13981 eval $setvar
13982
13983 : see if net/errno.h is available
13984 val=''
13985 set net/errno.h val
13986 eval $inhdr
13987
13988 : Unfortunately, it causes problems on some systems.  Arrgh.
13989 case "$val" in
13990 $define)
13991         cat > try.c <<'EOM'
13992 #include <stdio.h>
13993 #include <errno.h>
13994 #include <net/errno.h>
13995 int func()
13996 {
13997         return ENOTSOCK;
13998 }
13999 EOM
14000         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14001                 echo "We'll be including <net/errno.h>." >&4
14002         else
14003                 echo "We won't be including <net/errno.h>." >&4
14004                 val="$undef"
14005         fi
14006         $rm -f try.* try
14007         ;;
14008 esac
14009 set i_neterrno
14010 eval $setvar
14011
14012 : see if netinet/tcp.h is available
14013 set netinet/tcp.h i_netinettcp
14014 eval $inhdr
14015
14016 : see if this is a poll.h system
14017 set poll.h i_poll
14018 eval $inhdr
14019
14020 echo " "
14021 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14022 $cat <<'EOSH' > Cppsym.know
14023 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14024 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14025 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14026 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14027 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14028 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14029 bull c cadmus clipper CMU COFF COMPILER_VERSION
14030 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14031 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14032 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14033 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14034 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14035 H3050R H3050RX hbullx20 hcx host_mips
14036 hp200 hp300 hp700 HP700 hp800 hp9000
14037 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14038 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14039 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14040 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14041 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14042 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14043 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14044 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14045 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14046 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14047 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14048 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14049 MATH_HAS_NO_SIDE_EFFECTS
14050 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14051 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14052 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14053 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14054 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14055 NetBSD news1500 news1700 news1800 news1900 news3700
14056 news700 news800 news900 NeXT NLS ns16000 ns32000
14057 ns32016 ns32332 ns32k nsc32000
14058 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14059 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14060 pc532 pdp11 PGC PIC plexus PORTAR posix
14061 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14062 POSIX_C_SOURCE POSIX_SOURCE POWER
14063 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14064 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14065 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14066 sony sony_news sonyrisc sparc sparclite spectrum
14067 stardent stdc STDC_EXT stratos sun sun3 sun386
14068 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14069 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14070 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14071 sysV68 sysV88 Tek4132 Tek4300 titan
14072 tower tower32 tower32_200 tower32_600 tower32_700
14073 tower32_800 tower32_850 tss
14074 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14075 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14076 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14077 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14078 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14079 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14080 z8000
14081 EOSH
14082 # Maybe put other stuff here too.
14083 cat <<EOSH >>Cppsym.know
14084 $osname
14085 EOSH
14086 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14087 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14088 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14089 $rm -f Cppsym.a Cppsym.b
14090 cat <<EOSH > Cppsym
14091 $startsh
14092 if $test \$# -gt 0; then
14093     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14094     if $test -s Cppsym.got; then
14095         $rm -f Cppsym.got
14096         exit 0
14097     fi
14098     $rm -f Cppsym.got
14099     exit 1
14100 else
14101     $tr " " "$trnl" | ./Cppsym.try
14102     exit 0
14103 fi
14104 EOSH
14105 chmod +x Cppsym
14106 $eunicefix Cppsym
14107 cat <<EOSH > Cppsym.try
14108 $startsh
14109 cat <<'EOCP' > try.c
14110 #include <stdio.h>
14111 int main() {
14112 EOCP
14113 $awk \\
14114 EOSH
14115 cat <<'EOSH' >> Cppsym.try
14116 'length($1) > 0 {
14117     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
14118     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
14119     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
14120     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
14121 }'       >> try.c
14122 echo '}' >> try.c
14123 EOSH
14124 cat <<EOSH >> Cppsym.try
14125 ccflags="$ccflags"
14126 case "$osname-$gccversion" in
14127 irix-) ccflags="\$ccflags -woff 1178" ;;
14128 esac
14129 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14130 EOSH
14131 chmod +x Cppsym.try
14132 $eunicefix Cppsym.try
14133 ./Cppsym < Cppsym.know > Cppsym.true
14134 : now check the C compiler for additional symbols
14135 postprocess_cc_v=''
14136 case "$osname" in
14137 aix) postprocess_cc_v="|$tr , ' '" ;;
14138 esac
14139 $cat >ccsym <<EOS
14140 $startsh
14141 $cat >tmp.c <<EOF
14142 extern int foo;
14143 EOF
14144 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14145 do
14146         case "\$i" in
14147         -D*) echo "\$i" | $sed 's/^-D//';;
14148         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14149         esac
14150 done
14151 $rm -f try.c
14152 EOS
14153 postprocess_cc_v=''
14154 chmod +x ccsym
14155 $eunicefix ccsym
14156 ./ccsym > ccsym1.raw
14157 if $test -s ccsym1.raw; then
14158        $sort ccsym1.raw | $uniq >ccsym.raw
14159 else
14160        mv ccsym1.raw ccsym.raw
14161 fi
14162
14163 $awk '/\=/ { print $0; next }
14164         { print $0"=1" }' ccsym.raw >ccsym.list
14165 $awk '/\=/ { print $0; next }
14166         { print $0"=1" }' Cppsym.true >ccsym.true
14167 $comm -13 ccsym.true ccsym.list >ccsym.own
14168 $comm -12 ccsym.true ccsym.list >ccsym.com
14169 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14170 also=''
14171 if $test -z ccsym.raw; then
14172         echo "Your C compiler doesn't seem to define any symbols!" >&4
14173         echo " "
14174         echo "However, your C preprocessor defines the following symbols:"
14175         $cat Cppsym.true
14176         ccsymbols=''
14177         cppsymbols=`$cat Cppsym.true`
14178         cppsymbols=`echo $cppsymbols`
14179         cppccsymbols="$cppsymbols"
14180 else
14181         if $test -s ccsym.com; then
14182                 echo "Your C compiler and pre-processor define these symbols:"
14183                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14184                 also='also '
14185                 symbols='ones'
14186                 cppccsymbols=`$cat ccsym.com`
14187                 cppccsymbols=`echo $cppccsymbols`
14188                 $test "$silent" || sleep 1
14189         fi
14190         if $test -s ccsym.cpp; then
14191                 $test "$also" && echo " "
14192                 echo "Your C pre-processor ${also}defines the following symbols:"
14193                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14194                 also='further '
14195                 cppsymbols=`$cat ccsym.cpp`
14196                 cppsymbols=`echo $cppsymbols`
14197                 $test "$silent" || sleep 1
14198         fi
14199         if $test -s ccsym.own; then
14200                 $test "$also" && echo " "
14201                 echo "Your C compiler ${also}defines the following cpp symbols:"
14202                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14203                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14204                 ccsymbols=`$cat ccsym.own`
14205                 ccsymbols=`echo $ccsymbols`
14206                 $test "$silent" || sleep 1
14207         fi
14208 fi
14209 $rm -f ccsym*
14210
14211 : see if this is a termio system
14212 val="$undef"
14213 val2="$undef"
14214 val3="$undef"
14215 if $test `./findhdr termios.h`; then
14216         set tcsetattr i_termios
14217         eval $inlibc
14218         val3="$i_termios"
14219 fi
14220 echo " "
14221 case "$val3" in
14222 "$define") echo "You have POSIX termios.h... good!" >&4;;
14223 *) if ./Cppsym pyr; then
14224                 case "`/bin/universe`" in
14225                 ucb) if $test `./findhdr sgtty.h`; then
14226                                 val2="$define"
14227                                 echo "<sgtty.h> found." >&4
14228                         else
14229                                 echo "System is pyramid with BSD universe."
14230                                 echo "<sgtty.h> not found--you could have problems." >&4
14231                         fi;;
14232                 *) if $test `./findhdr termio.h`; then
14233                                 val="$define"
14234                                 echo "<termio.h> found." >&4
14235                         else
14236                                 echo "System is pyramid with USG universe."
14237                                 echo "<termio.h> not found--you could have problems." >&4
14238                         fi;;
14239                 esac
14240         elif ./usg; then
14241                 if $test `./findhdr termio.h`; then
14242                         echo "<termio.h> found." >&4
14243                         val="$define"
14244                 elif $test `./findhdr sgtty.h`; then
14245                         echo "<sgtty.h> found." >&4
14246                         val2="$define"
14247                 else
14248 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14249                 fi
14250         else
14251                 if $test `./findhdr sgtty.h`; then
14252                         echo "<sgtty.h> found." >&4
14253                         val2="$define"
14254                 elif $test `./findhdr termio.h`; then
14255                         echo "<termio.h> found." >&4
14256                         val="$define"
14257                 else
14258 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14259                 fi
14260         fi;;
14261 esac
14262 set i_termio; eval $setvar
14263 val=$val2; set i_sgtty; eval $setvar
14264 val=$val3; set i_termios; eval $setvar
14265
14266 : see if this is a shadow.h system
14267 set shadow.h i_shadow
14268 eval $inhdr
14269
14270 : see if this is a socks.h system
14271 set socks.h i_socks
14272 eval $inhdr
14273
14274 : see if stdarg is available
14275 echo " "
14276 if $test `./findhdr stdarg.h`; then
14277         echo "<stdarg.h> found." >&4
14278         valstd="$define"
14279 else
14280         echo "<stdarg.h> NOT found." >&4
14281         valstd="$undef"
14282 fi
14283
14284 : see if varags is available
14285 echo " "
14286 if $test `./findhdr varargs.h`; then
14287         echo "<varargs.h> found." >&4
14288 else
14289         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14290 fi
14291
14292 : set up the varargs testing programs
14293 $cat > varargs.c <<EOP
14294 #ifdef I_STDARG
14295 #include <stdarg.h>
14296 #endif
14297 #ifdef I_VARARGS
14298 #include <varargs.h>
14299 #endif
14300
14301 #ifdef I_STDARG
14302 int f(char *p, ...)
14303 #else
14304 int f(va_alist)
14305 va_dcl
14306 #endif
14307 {
14308         va_list ap;
14309 #ifndef I_STDARG
14310         char *p;
14311 #endif
14312 #ifdef I_STDARG
14313         va_start(ap,p);
14314 #else
14315         va_start(ap);
14316         p = va_arg(ap, char *);
14317 #endif
14318         va_end(ap);
14319 }
14320 EOP
14321 $cat > varargs <<EOP
14322 $startsh
14323 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14324         echo "true"
14325 else
14326         echo "false"
14327 fi
14328 $rm -f varargs$_o
14329 EOP
14330 chmod +x varargs
14331
14332 : now check which varargs header should be included
14333 echo " "
14334 i_varhdr=''
14335 case "$valstd" in
14336 "$define")
14337         if `./varargs I_STDARG`; then
14338                 val='stdarg.h'
14339         elif `./varargs I_VARARGS`; then
14340                 val='varargs.h'
14341         fi
14342         ;;
14343 *)
14344         if `./varargs I_VARARGS`; then
14345                 val='varargs.h'
14346         fi
14347         ;;
14348 esac
14349 case "$val" in
14350 '')
14351 echo "I could not find the definition for va_dcl... You have problems..." >&4
14352         val="$undef"; set i_stdarg; eval $setvar
14353         val="$undef"; set i_varargs; eval $setvar
14354         ;;
14355 *) 
14356         set i_varhdr
14357         eval $setvar
14358         case "$i_varhdr" in
14359         stdarg.h)
14360                 val="$define"; set i_stdarg; eval $setvar
14361                 val="$undef"; set i_varargs; eval $setvar
14362                 ;;
14363         varargs.h)
14364                 val="$undef"; set i_stdarg; eval $setvar
14365                 val="$define"; set i_varargs; eval $setvar
14366                 ;;
14367         esac
14368         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14369 esac
14370 $rm -f varargs*
14371
14372 : see if stddef is available
14373 set stddef.h i_stddef
14374 eval $inhdr
14375
14376 : see if this is a sunmath.h system
14377 set sunmath.h i_sunmath
14378 eval $inhdr
14379
14380 : see if sys/access.h is available
14381 set sys/access.h i_sysaccess
14382 eval $inhdr
14383
14384 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14385 set sys/filio.h i_sysfilio
14386 eval $inhdr
14387 echo " "
14388 if $test `./findhdr sys/ioctl.h`; then
14389         val="$define"
14390         echo '<sys/ioctl.h> found.' >&4
14391 else
14392         val="$undef"
14393         if $test $i_sysfilio = "$define"; then
14394             echo '<sys/ioctl.h> NOT found.' >&4
14395         else
14396                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14397                 $test $i_termio = "$define" && xxx="termio.h"
14398                 $test $i_termios = "$define" && xxx="termios.h"
14399 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14400         fi
14401 fi
14402 set i_sysioctl
14403 eval $setvar
14404
14405
14406 : see if this is a syslog.h system
14407 set syslog.h i_syslog
14408 eval $inhdr
14409
14410
14411 : see if this is a sys/mode.h system
14412 set sys/mode.h i_sysmode
14413 eval $inhdr
14414
14415 : see if sys/resource.h has to be included
14416 set sys/resource.h i_sysresrc
14417 eval $inhdr
14418
14419 : see if sys/security.h is available
14420 set sys/security.h i_syssecrt
14421 eval $inhdr
14422
14423 : see if this is a sys/statvfs.h system
14424 set sys/statvfs.h i_sysstatvfs
14425 eval $inhdr
14426
14427 : see if this is a sys/uio.h system
14428 set sys/uio.h i_sysuio
14429 eval $inhdr
14430
14431 : see if this is a sys/un.h system
14432 set sys/un.h i_sysun
14433 eval $inhdr
14434
14435
14436 : see if this is a sys/utsname.h system
14437 set sys/utsname.h i_sysutsname
14438 eval $inhdr
14439
14440 : see if this is a syswait system
14441 set sys/wait.h i_syswait
14442 eval $inhdr
14443
14444 : see if this is a ustat.h system
14445 set ustat.h i_ustat
14446 eval $inhdr
14447
14448 : see if this is an utime system
14449 set utime.h i_utime
14450 eval $inhdr
14451
14452 : see if this is a values.h system
14453 set values.h i_values
14454 eval $inhdr
14455
14456 : see if this is a vfork system
14457 case "$d_vfork" in
14458 "$define")
14459         set vfork.h i_vfork
14460         eval $inhdr
14461         ;;
14462 *)
14463         i_vfork="$undef"
14464         ;;
14465 esac
14466
14467 : see if gdbm.h is available
14468 set gdbm.h t_gdbm
14469 eval $inhdr
14470 case "$t_gdbm" in
14471 $define)
14472         : see if gdbm_open exists
14473         set gdbm_open d_gdbm_open
14474         eval $inlibc
14475         case "$d_gdbm_open" in
14476         $undef)
14477                 t_gdbm="$undef"
14478                 echo "We won't be including <gdbm.h>"
14479                 ;;
14480         esac
14481         ;;
14482 esac
14483 val="$t_gdbm"
14484 set i_gdbm
14485 eval $setvar
14486
14487 echo " "
14488 echo "Looking for extensions..." >&4
14489 : If we are using the old config.sh, known_extensions may contain
14490 : old or inaccurate or duplicate values.
14491 known_extensions=''
14492 nonxs_extensions=''
14493 : We do not use find because it might not be available.
14494 : We do not just use MANIFEST because the user may have dropped
14495 : some additional extensions into the source tree and expect them
14496 : to be built.
14497
14498 : Function to recursively find available extensions, ignoring DynaLoader
14499 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14500 find_extensions='
14501     for xxx in *; do
14502        case "$xxx" in
14503            DynaLoader|dynaload) ;;
14504            *)
14505            if $test -f $xxx/$xxx.xs; then
14506                known_extensions="$known_extensions $1$xxx";
14507            elif $test -f $xxx/Makefile.PL; then
14508                nonxs_extensions="$nonxs_extensions $1$xxx";
14509            else
14510                if $test -d $xxx -a $# -lt 10; then
14511                    set $1$xxx/ $*;
14512                    cd $xxx;
14513                    eval $find_extensions;
14514                    cd ..;
14515                    shift;
14516                fi;
14517            fi
14518            ;;
14519        esac;
14520     done'
14521 tdir=`pwd`
14522 cd $rsrc/ext
14523 set X
14524 shift
14525 eval $find_extensions
14526 set X $nonxs_extensions
14527 shift
14528 nonxs_extensions="$*"
14529 set X $known_extensions
14530 shift
14531 known_extensions="$*"
14532 cd $tdir
14533
14534 : Now see which are supported on this system.
14535 avail_ext=''
14536 for xxx in $known_extensions ; do
14537         case "$xxx" in
14538         DB_File|db_file)
14539                 case "$i_db" in
14540                 $define) avail_ext="$avail_ext $xxx" ;;
14541                 esac
14542                 ;;
14543         GDBM_File|gdbm_fil)
14544                 case "$i_gdbm" in 
14545                 $define) avail_ext="$avail_ext $xxx" ;;
14546                 esac
14547                 ;;
14548         NDBM_File|ndbm_fil)
14549                 case "$i_ndbm" in
14550                 $define)
14551                     case "$osname-$use64bitint" in
14552                     hpux-define)
14553                         case "$libs" in
14554                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14555                         esac
14556                         ;;
14557                     *) avail_ext="$avail_ext $xxx" ;;
14558                     esac
14559                     ;;
14560                 esac
14561                 ;;
14562         ODBM_File|odbm_fil) 
14563                 case "${i_dbm}${i_rpcsvcdbm}" in
14564                 *"${define}"*)
14565                     case "$osname-$use64bitint" in
14566                     hpux-define)
14567                         case "$libs" in
14568                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14569                         esac
14570                         ;;
14571                     *) avail_ext="$avail_ext $xxx" ;;
14572                     esac
14573                     ;;
14574                 esac
14575                 ;;
14576         POSIX|posix)
14577                 case "$useposix" in
14578                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14579                 esac
14580                 ;;
14581         Opcode|opcode)
14582                 case "$useopcode" in
14583                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14584                 esac
14585                 ;;
14586         Socket|socket)
14587                 case "$d_socket" in 
14588                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14589                 esac
14590                 ;;
14591         Thread|thread)
14592                 case "$usethreads" in 
14593                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14594                 esac
14595                 ;;
14596         IPC/SysV|ipc/sysv)
14597                 : XXX Do we need a useipcsysv variable here
14598                 case "${d_msg}${d_sem}${d_shm}" in 
14599                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14600                 esac
14601                 ;;
14602         *)      avail_ext="$avail_ext $xxx"
14603                 ;;
14604         esac
14605 done
14606
14607 set X $avail_ext
14608 shift
14609 avail_ext="$*"
14610
14611 : Now see which nonxs extensions are supported on this system.
14612 : For now assume all are.
14613 nonxs_ext=''
14614 for xxx in $nonxs_extensions ; do
14615         case "$xxx" in
14616         *)      nonxs_ext="$nonxs_ext $xxx"
14617                 ;;
14618         esac
14619 done
14620
14621 set X $nonxs_ext
14622 shift
14623 nonxs_ext="$*"
14624
14625 case $usedl in
14626 $define)
14627         $cat <<EOM
14628 A number of extensions are supplied with $package.  You may choose to
14629 compile these extensions for dynamic loading (the default), compile
14630 them into the $package executable (static loading), or not include
14631 them at all.  Answer "none" to include no extensions.
14632 Note that DynaLoader is always built and need not be mentioned here.
14633
14634 EOM
14635         case "$dynamic_ext" in
14636         '') dflt="$avail_ext" ;;
14637         *)      dflt="$dynamic_ext"
14638                 # Perhaps we are reusing an old out-of-date config.sh.
14639                 case "$hint" in
14640                 previous)
14641                         if test X"$dynamic_ext" != X"$avail_ext"; then
14642                                 $cat <<EOM
14643 NOTICE:  Your previous config.sh list may be incorrect. 
14644 The extensions now available to you are 
14645         ${avail_ext}
14646 but the default list from your previous config.sh is
14647         ${dynamic_ext} 
14648
14649 EOM
14650                         fi
14651                         ;;
14652                 esac
14653                 ;;
14654         esac
14655         case "$dflt" in
14656         '')     dflt=none;;
14657         esac
14658         rp="What extensions do you wish to load dynamically?"
14659         . ./myread
14660         case "$ans" in
14661         none) dynamic_ext=' ' ;;
14662         *) dynamic_ext="$ans" ;;
14663         esac
14664
14665         case "$static_ext" in
14666         '')
14667                 : Exclude those already listed in dynamic linking
14668                 dflt=''
14669                 for xxx in $avail_ext; do
14670                         case " $dynamic_ext " in
14671                         *" $xxx "*) ;;
14672                         *) dflt="$dflt $xxx" ;;
14673                         esac
14674                 done
14675                 set X $dflt
14676                 shift
14677                 dflt="$*"
14678                 ;;
14679         *)  dflt="$static_ext" 
14680                 ;;
14681         esac
14682
14683         case "$dflt" in
14684         '')     dflt=none;;
14685         esac
14686         rp="What extensions do you wish to load statically?"
14687         . ./myread
14688         case "$ans" in
14689         none) static_ext=' ' ;;
14690         *) static_ext="$ans" ;;
14691         esac
14692         ;;
14693 *)
14694         $cat <<EOM
14695 A number of extensions are supplied with $package.  Answer "none" 
14696 to include no extensions. 
14697 Note that DynaLoader is always built and need not be mentioned here.
14698
14699 EOM
14700         case "$static_ext" in
14701         '') dflt="$avail_ext" ;;
14702         *)      dflt="$static_ext"
14703                 # Perhaps we are reusing an old out-of-date config.sh.
14704                 case "$hint" in
14705                 previous)
14706                         if test X"$static_ext" != X"$avail_ext"; then
14707                                 $cat <<EOM
14708 NOTICE:  Your previous config.sh list may be incorrect. 
14709 The extensions now available to you are 
14710         ${avail_ext}
14711 but the default list from your previous config.sh is
14712         ${static_ext} 
14713
14714 EOM
14715                         fi
14716                         ;;
14717                 esac
14718                 ;;
14719         esac
14720         : Exclude those that are not xs extensions
14721         case "$dflt" in
14722         '')     dflt=none;;
14723         esac
14724         rp="What extensions do you wish to include?"
14725         . ./myread
14726         case "$ans" in
14727         none) static_ext=' ' ;;
14728         *) static_ext="$ans" ;;
14729         esac
14730         ;;
14731 esac
14732
14733 set X $dynamic_ext $static_ext $nonxs_ext
14734 shift
14735 extensions="$*"
14736
14737 : Remove build directory name from cppstdin so it can be used from
14738 : either the present location or the final installed location.
14739 echo " "
14740 : Get out of the UU directory to get correct path name.
14741 cd ..
14742 case "$cppstdin" in
14743 `pwd`/cppstdin)
14744         echo "Stripping down cppstdin path name"
14745         cppstdin=cppstdin
14746         ;;
14747 esac
14748 cd UU
14749
14750 : end of configuration questions
14751 echo " "
14752 echo "End of configuration questions."
14753 echo " "
14754
14755 : back to where it started
14756 if test -d ../UU; then
14757         cd ..
14758 fi
14759
14760 : configuration may be patched via a 'config.over' file
14761 if $test -f config.over; then
14762         echo " "
14763         dflt=y
14764         rp='I see a config.over file.  Do you wish to load it?'
14765         . UU/myread
14766         case "$ans" in
14767         n*) echo "OK, I'll ignore it.";;
14768         *)      . ./config.over
14769                 echo "Configuration override changes have been loaded."
14770                 ;;
14771         esac
14772 fi
14773
14774 : in case they want portability, strip down executable paths
14775 case "$d_portable" in
14776 "$define")
14777         echo " "
14778         echo "Stripping down executable paths..." >&4
14779         for file in $loclist $trylist; do
14780                 eval temp=\$$file
14781                 eval $file=`basename $temp`
14782         done
14783         ;;
14784 esac
14785
14786 : create config.sh file
14787 echo " "
14788 echo "Creating config.sh..." >&4
14789 $spitshell <<EOT >config.sh
14790 $startsh
14791 #
14792 # This file was produced by running the Configure script. It holds all the
14793 # definitions figured out by Configure. Should you modify one of these values,
14794 # do not forget to propagate your changes by running "Configure -der". You may
14795 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14796 #
14797
14798 # Package name      : $package
14799 # Source directory  : $src
14800 # Configuration time: $cf_time
14801 # Configured by     : $cf_by
14802 # Target system     : $myuname
14803
14804 Author='$Author'
14805 Date='$Date'
14806 Header='$Header'
14807 Id='$Id'
14808 Locker='$Locker'
14809 Log='$Log'
14810 Mcc='$Mcc'
14811 RCSfile='$RCSfile'
14812 Revision='$Revision'
14813 Source='$Source'
14814 State='$State'
14815 _a='$_a'
14816 _exe='$_exe'
14817 _o='$_o'
14818 afs='$afs'
14819 alignbytes='$alignbytes'
14820 ansi2knr='$ansi2knr'
14821 aphostname='$aphostname'
14822 api_revision='$api_revision'
14823 api_subversion='$api_subversion'
14824 api_version='$api_version'
14825 api_versionstring='$api_versionstring'
14826 ar='$ar'
14827 archlib='$archlib'
14828 archlibexp='$archlibexp'
14829 archname64='$archname64'
14830 archname='$archname'
14831 archobjs='$archobjs'
14832 awk='$awk'
14833 baserev='$baserev'
14834 bash='$bash'
14835 bin='$bin'
14836 bincompat5005='$bincompat5005'
14837 binexp='$binexp'
14838 bison='$bison'
14839 byacc='$byacc'
14840 byteorder='$byteorder'
14841 c='$c'
14842 castflags='$castflags'
14843 cat='$cat'
14844 cc='$cc'
14845 cccdlflags='$cccdlflags'
14846 ccdlflags='$ccdlflags'
14847 ccflags='$ccflags'
14848 ccsymbols='$ccsymbols'
14849 cf_by='$cf_by'
14850 cf_email='$cf_email'
14851 cf_time='$cf_time'
14852 charsize='$charsize'
14853 chgrp='$chgrp'
14854 chmod='$chmod'
14855 chown='$chown'
14856 clocktype='$clocktype'
14857 comm='$comm'
14858 compress='$compress'
14859 contains='$contains'
14860 cp='$cp'
14861 cpio='$cpio'
14862 cpp='$cpp'
14863 cpp_stuff='$cpp_stuff'
14864 cppccsymbols='$cppccsymbols'
14865 cppflags='$cppflags'
14866 cpplast='$cpplast'
14867 cppminus='$cppminus'
14868 cpprun='$cpprun'
14869 cppstdin='$cppstdin'
14870 cppsymbols='$cppsymbols'
14871 crosscompile='$crosscompile'
14872 cryptlib='$cryptlib'
14873 csh='$csh'
14874 d_Gconvert='$d_Gconvert'
14875 d_PRIEldbl='$d_PRIEldbl'
14876 d_PRIFldbl='$d_PRIFldbl'
14877 d_PRIGldbl='$d_PRIGldbl'
14878 d_PRIX64='$d_PRIX64'
14879 d_PRId64='$d_PRId64'
14880 d_PRIeldbl='$d_PRIeldbl'
14881 d_PRIfldbl='$d_PRIfldbl'
14882 d_PRIgldbl='$d_PRIgldbl'
14883 d_PRIi64='$d_PRIi64'
14884 d_PRIo64='$d_PRIo64'
14885 d_PRIu64='$d_PRIu64'
14886 d_PRIx64='$d_PRIx64'
14887 d_access='$d_access'
14888 d_accessx='$d_accessx'
14889 d_alarm='$d_alarm'
14890 d_archlib='$d_archlib'
14891 d_atolf='$d_atolf'
14892 d_atoll='$d_atoll'
14893 d_attribut='$d_attribut'
14894 d_bcmp='$d_bcmp'
14895 d_bcopy='$d_bcopy'
14896 d_bincompat5005='$d_bincompat5005'
14897 d_bsd='$d_bsd'
14898 d_bsdgetpgrp='$d_bsdgetpgrp'
14899 d_bsdsetpgrp='$d_bsdsetpgrp'
14900 d_bzero='$d_bzero'
14901 d_casti32='$d_casti32'
14902 d_castneg='$d_castneg'
14903 d_charvspr='$d_charvspr'
14904 d_chown='$d_chown'
14905 d_chroot='$d_chroot'
14906 d_chsize='$d_chsize'
14907 d_closedir='$d_closedir'
14908 d_const='$d_const'
14909 d_crypt='$d_crypt'
14910 d_csh='$d_csh'
14911 d_cuserid='$d_cuserid'
14912 d_dbl_dig='$d_dbl_dig'
14913 d_difftime='$d_difftime'
14914 d_dirnamlen='$d_dirnamlen'
14915 d_dlerror='$d_dlerror'
14916 d_dlopen='$d_dlopen'
14917 d_dlsymun='$d_dlsymun'
14918 d_dosuid='$d_dosuid'
14919 d_drand48proto='$d_drand48proto'
14920 d_dup2='$d_dup2'
14921 d_eaccess='$d_eaccess'
14922 d_endgrent='$d_endgrent'
14923 d_endhent='$d_endhent'
14924 d_endnent='$d_endnent'
14925 d_endpent='$d_endpent'
14926 d_endpwent='$d_endpwent'
14927 d_endsent='$d_endsent'
14928 d_endspent='$d_endspent'
14929 d_eofnblk='$d_eofnblk'
14930 d_eunice='$d_eunice'
14931 d_fchmod='$d_fchmod'
14932 d_fchown='$d_fchown'
14933 d_fcntl='$d_fcntl'
14934 d_fd_macros='$d_fd_macros'
14935 d_fd_set='$d_fd_set'
14936 d_fds_bits='$d_fds_bits'
14937 d_fgetpos='$d_fgetpos'
14938 d_flexfnam='$d_flexfnam'
14939 d_flock='$d_flock'
14940 d_fork='$d_fork'
14941 d_fpathconf='$d_fpathconf'
14942 d_fpos64_t='$d_fpos64_t'
14943 d_fs_data_s='$d_fs_data_s'
14944 d_fseeko='$d_fseeko'
14945 d_fsetpos='$d_fsetpos'
14946 d_fstatfs='$d_fstatfs'
14947 d_fstatvfs='$d_fstatvfs'
14948 d_ftello='$d_ftello'
14949 d_ftime='$d_ftime'
14950 d_getcwd='$d_getcwd'
14951 d_getfsstat='$d_getfsstat'
14952 d_getgrent='$d_getgrent'
14953 d_getgrps='$d_getgrps'
14954 d_gethbyaddr='$d_gethbyaddr'
14955 d_gethbyname='$d_gethbyname'
14956 d_gethent='$d_gethent'
14957 d_gethname='$d_gethname'
14958 d_gethostprotos='$d_gethostprotos'
14959 d_getlogin='$d_getlogin'
14960 d_getmnt='$d_getmnt'
14961 d_getmntent='$d_getmntent'
14962 d_getnbyaddr='$d_getnbyaddr'
14963 d_getnbyname='$d_getnbyname'
14964 d_getnent='$d_getnent'
14965 d_getnetprotos='$d_getnetprotos'
14966 d_getpbyname='$d_getpbyname'
14967 d_getpbynumber='$d_getpbynumber'
14968 d_getpent='$d_getpent'
14969 d_getpgid='$d_getpgid'
14970 d_getpgrp2='$d_getpgrp2'
14971 d_getpgrp='$d_getpgrp'
14972 d_getppid='$d_getppid'
14973 d_getprior='$d_getprior'
14974 d_getprotoprotos='$d_getprotoprotos'
14975 d_getpwent='$d_getpwent'
14976 d_getsbyname='$d_getsbyname'
14977 d_getsbyport='$d_getsbyport'
14978 d_getsent='$d_getsent'
14979 d_getservprotos='$d_getservprotos'
14980 d_getspent='$d_getspent'
14981 d_getspnam='$d_getspnam'
14982 d_gettimeod='$d_gettimeod'
14983 d_gnulibc='$d_gnulibc'
14984 d_grpasswd='$d_grpasswd'
14985 d_hasmntopt='$d_hasmntopt'
14986 d_htonl='$d_htonl'
14987 d_iconv='$d_iconv'
14988 d_index='$d_index'
14989 d_inetaton='$d_inetaton'
14990 d_int64_t='$d_int64_t'
14991 d_isascii='$d_isascii'
14992 d_killpg='$d_killpg'
14993 d_lchown='$d_lchown'
14994 d_ldbl_dig='$d_ldbl_dig'
14995 d_link='$d_link'
14996 d_locconv='$d_locconv'
14997 d_lockf='$d_lockf'
14998 d_longdbl='$d_longdbl'
14999 d_longlong='$d_longlong'
15000 d_lseekproto='$d_lseekproto'
15001 d_lstat='$d_lstat'
15002 d_madvise='$d_madvise'
15003 d_mblen='$d_mblen'
15004 d_mbstowcs='$d_mbstowcs'
15005 d_mbtowc='$d_mbtowc'
15006 d_memchr='$d_memchr'
15007 d_memcmp='$d_memcmp'
15008 d_memcpy='$d_memcpy'
15009 d_memmove='$d_memmove'
15010 d_memset='$d_memset'
15011 d_mkdir='$d_mkdir'
15012 d_mkdtemp='$d_mkdtemp'
15013 d_mkfifo='$d_mkfifo'
15014 d_mkstemp='$d_mkstemp'
15015 d_mkstemps='$d_mkstemps'
15016 d_mktime='$d_mktime'
15017 d_mmap='$d_mmap'
15018 d_mprotect='$d_mprotect'
15019 d_msg='$d_msg'
15020 d_msg_ctrunc='$d_msg_ctrunc'
15021 d_msg_dontroute='$d_msg_dontroute'
15022 d_msg_oob='$d_msg_oob'
15023 d_msg_peek='$d_msg_peek'
15024 d_msg_proxy='$d_msg_proxy'
15025 d_msgctl='$d_msgctl'
15026 d_msgget='$d_msgget'
15027 d_msgrcv='$d_msgrcv'
15028 d_msgsnd='$d_msgsnd'
15029 d_msync='$d_msync'
15030 d_munmap='$d_munmap'
15031 d_mymalloc='$d_mymalloc'
15032 d_nice='$d_nice'
15033 d_nv_preserves_uv='$d_nv_preserves_uv'
15034 d_off64_t='$d_off64_t'
15035 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15036 d_oldpthreads='$d_oldpthreads'
15037 d_oldsock='$d_oldsock'
15038 d_open3='$d_open3'
15039 d_pathconf='$d_pathconf'
15040 d_pause='$d_pause'
15041 d_phostname='$d_phostname'
15042 d_pipe='$d_pipe'
15043 d_poll='$d_poll'
15044 d_portable='$d_portable'
15045 d_pthread_yield='$d_pthread_yield'
15046 d_pwage='$d_pwage'
15047 d_pwchange='$d_pwchange'
15048 d_pwclass='$d_pwclass'
15049 d_pwcomment='$d_pwcomment'
15050 d_pwexpire='$d_pwexpire'
15051 d_pwgecos='$d_pwgecos'
15052 d_pwpasswd='$d_pwpasswd'
15053 d_pwquota='$d_pwquota'
15054 d_qgcvt='$d_qgcvt'
15055 d_quad='$d_quad'
15056 d_readdir='$d_readdir'
15057 d_readlink='$d_readlink'
15058 d_rename='$d_rename'
15059 d_rewinddir='$d_rewinddir'
15060 d_rmdir='$d_rmdir'
15061 d_safebcpy='$d_safebcpy'
15062 d_safemcpy='$d_safemcpy'
15063 d_sanemcmp='$d_sanemcmp'
15064 d_sched_yield='$d_sched_yield'
15065 d_scm_rights='$d_scm_rights'
15066 d_seekdir='$d_seekdir'
15067 d_select='$d_select'
15068 d_sem='$d_sem'
15069 d_semctl='$d_semctl'
15070 d_semctl_semid_ds='$d_semctl_semid_ds'
15071 d_semctl_semun='$d_semctl_semun'
15072 d_semget='$d_semget'
15073 d_semop='$d_semop'
15074 d_setegid='$d_setegid'
15075 d_seteuid='$d_seteuid'
15076 d_setgrent='$d_setgrent'
15077 d_setgrps='$d_setgrps'
15078 d_sethent='$d_sethent'
15079 d_setlinebuf='$d_setlinebuf'
15080 d_setlocale='$d_setlocale'
15081 d_setnent='$d_setnent'
15082 d_setpent='$d_setpent'
15083 d_setpgid='$d_setpgid'
15084 d_setpgrp2='$d_setpgrp2'
15085 d_setpgrp='$d_setpgrp'
15086 d_setprior='$d_setprior'
15087 d_setpwent='$d_setpwent'
15088 d_setregid='$d_setregid'
15089 d_setresgid='$d_setresgid'
15090 d_setresuid='$d_setresuid'
15091 d_setreuid='$d_setreuid'
15092 d_setrgid='$d_setrgid'
15093 d_setruid='$d_setruid'
15094 d_setsent='$d_setsent'
15095 d_setsid='$d_setsid'
15096 d_setspent='$d_setspent'
15097 d_setvbuf='$d_setvbuf'
15098 d_sfio='$d_sfio'
15099 d_shm='$d_shm'
15100 d_shmat='$d_shmat'
15101 d_shmatprototype='$d_shmatprototype'
15102 d_shmctl='$d_shmctl'
15103 d_shmdt='$d_shmdt'
15104 d_shmget='$d_shmget'
15105 d_sigaction='$d_sigaction'
15106 d_sigsetjmp='$d_sigsetjmp'
15107 d_socket='$d_socket'
15108 d_socklen_t='$d_socklen_t'
15109 d_sockpair='$d_sockpair'
15110 d_sqrtl='$d_sqrtl'
15111 d_statblks='$d_statblks'
15112 d_statfs_f_flags='$d_statfs_f_flags'
15113 d_statfs_s='$d_statfs_s'
15114 d_statvfs='$d_statvfs'
15115 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15116 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15117 d_stdio_stream_array='$d_stdio_stream_array'
15118 d_stdiobase='$d_stdiobase'
15119 d_stdstdio='$d_stdstdio'
15120 d_strchr='$d_strchr'
15121 d_strcoll='$d_strcoll'
15122 d_strctcpy='$d_strctcpy'
15123 d_strerrm='$d_strerrm'
15124 d_strerror='$d_strerror'
15125 d_strtod='$d_strtod'
15126 d_strtol='$d_strtol'
15127 d_strtold='$d_strtold'
15128 d_strtoll='$d_strtoll'
15129 d_strtoul='$d_strtoul'
15130 d_strtoull='$d_strtoull'
15131 d_strtouq='$d_strtouq'
15132 d_strxfrm='$d_strxfrm'
15133 d_suidsafe='$d_suidsafe'
15134 d_symlink='$d_symlink'
15135 d_syscall='$d_syscall'
15136 d_sysconf='$d_sysconf'
15137 d_sysernlst='$d_sysernlst'
15138 d_syserrlst='$d_syserrlst'
15139 d_system='$d_system'
15140 d_tcgetpgrp='$d_tcgetpgrp'
15141 d_tcsetpgrp='$d_tcsetpgrp'
15142 d_telldir='$d_telldir'
15143 d_telldirproto='$d_telldirproto'
15144 d_time='$d_time'
15145 d_times='$d_times'
15146 d_truncate='$d_truncate'
15147 d_tzname='$d_tzname'
15148 d_umask='$d_umask'
15149 d_uname='$d_uname'
15150 d_union_semun='$d_union_semun'
15151 d_ustat='$d_ustat'
15152 d_vendorbin='$d_vendorbin'
15153 d_vendorlib='$d_vendorlib'
15154 d_vfork='$d_vfork'
15155 d_void_closedir='$d_void_closedir'
15156 d_voidsig='$d_voidsig'
15157 d_voidtty='$d_voidtty'
15158 d_volatile='$d_volatile'
15159 d_vprintf='$d_vprintf'
15160 d_wait4='$d_wait4'
15161 d_waitpid='$d_waitpid'
15162 d_wcstombs='$d_wcstombs'
15163 d_wctomb='$d_wctomb'
15164 d_xenix='$d_xenix'
15165 date='$date'
15166 db_hashtype='$db_hashtype'
15167 db_prefixtype='$db_prefixtype'
15168 defvoidused='$defvoidused'
15169 direntrytype='$direntrytype'
15170 dlext='$dlext'
15171 dlsrc='$dlsrc'
15172 doublesize='$doublesize'
15173 drand01='$drand01'
15174 dynamic_ext='$dynamic_ext'
15175 eagain='$eagain'
15176 ebcdic='$ebcdic'
15177 echo='$echo'
15178 egrep='$egrep'
15179 emacs='$emacs'
15180 eunicefix='$eunicefix'
15181 exe_ext='$exe_ext'
15182 expr='$expr'
15183 extensions='$extensions'
15184 fflushNULL='$fflushNULL'
15185 fflushall='$fflushall'
15186 find='$find'
15187 firstmakefile='$firstmakefile'
15188 flex='$flex'
15189 fpossize='$fpossize'
15190 fpostype='$fpostype'
15191 freetype='$freetype'
15192 full_ar='$full_ar'
15193 full_csh='$full_csh'
15194 full_sed='$full_sed'
15195 gccversion='$gccversion'
15196 gidformat='$gidformat'
15197 gidsign='$gidsign'
15198 gidsize='$gidsize'
15199 gidtype='$gidtype'
15200 glibpth='$glibpth'
15201 grep='$grep'
15202 groupcat='$groupcat'
15203 groupstype='$groupstype'
15204 gzip='$gzip'
15205 h_fcntl='$h_fcntl'
15206 h_sysfile='$h_sysfile'
15207 hint='$hint'
15208 hostcat='$hostcat'
15209 huge='$huge'
15210 i16size='$i16size'
15211 i16type='$i16type'
15212 i32size='$i32size'
15213 i32type='$i32type'
15214 i64size='$i64size'
15215 i64type='$i64type'
15216 i8size='$i8size'
15217 i8type='$i8type'
15218 i_arpainet='$i_arpainet'
15219 i_bsdioctl='$i_bsdioctl'
15220 i_db='$i_db'
15221 i_dbm='$i_dbm'
15222 i_dirent='$i_dirent'
15223 i_dld='$i_dld'
15224 i_dlfcn='$i_dlfcn'
15225 i_fcntl='$i_fcntl'
15226 i_float='$i_float'
15227 i_gdbm='$i_gdbm'
15228 i_grp='$i_grp'
15229 i_iconv='$i_iconv'
15230 i_inttypes='$i_inttypes'
15231 i_limits='$i_limits'
15232 i_locale='$i_locale'
15233 i_machcthr='$i_machcthr'
15234 i_malloc='$i_malloc'
15235 i_math='$i_math'
15236 i_memory='$i_memory'
15237 i_mntent='$i_mntent'
15238 i_ndbm='$i_ndbm'
15239 i_netdb='$i_netdb'
15240 i_neterrno='$i_neterrno'
15241 i_netinettcp='$i_netinettcp'
15242 i_niin='$i_niin'
15243 i_poll='$i_poll'
15244 i_pthread='$i_pthread'
15245 i_pwd='$i_pwd'
15246 i_rpcsvcdbm='$i_rpcsvcdbm'
15247 i_sfio='$i_sfio'
15248 i_sgtty='$i_sgtty'
15249 i_shadow='$i_shadow'
15250 i_socks='$i_socks'
15251 i_stdarg='$i_stdarg'
15252 i_stddef='$i_stddef'
15253 i_stdlib='$i_stdlib'
15254 i_string='$i_string'
15255 i_sunmath='$i_sunmath'
15256 i_sysaccess='$i_sysaccess'
15257 i_sysdir='$i_sysdir'
15258 i_sysfile='$i_sysfile'
15259 i_sysfilio='$i_sysfilio'
15260 i_sysin='$i_sysin'
15261 i_sysioctl='$i_sysioctl'
15262 i_syslog='$i_syslog'
15263 i_sysmman='$i_sysmman'
15264 i_sysmode='$i_sysmode'
15265 i_sysmount='$i_sysmount'
15266 i_sysndir='$i_sysndir'
15267 i_sysparam='$i_sysparam'
15268 i_sysresrc='$i_sysresrc'
15269 i_syssecrt='$i_syssecrt'
15270 i_sysselct='$i_sysselct'
15271 i_syssockio='$i_syssockio'
15272 i_sysstat='$i_sysstat'
15273 i_sysstatfs='$i_sysstatfs'
15274 i_sysstatvfs='$i_sysstatvfs'
15275 i_systime='$i_systime'
15276 i_systimek='$i_systimek'
15277 i_systimes='$i_systimes'
15278 i_systypes='$i_systypes'
15279 i_sysuio='$i_sysuio'
15280 i_sysun='$i_sysun'
15281 i_sysutsname='$i_sysutsname'
15282 i_sysvfs='$i_sysvfs'
15283 i_syswait='$i_syswait'
15284 i_termio='$i_termio'
15285 i_termios='$i_termios'
15286 i_time='$i_time'
15287 i_unistd='$i_unistd'
15288 i_ustat='$i_ustat'
15289 i_utime='$i_utime'
15290 i_values='$i_values'
15291 i_varargs='$i_varargs'
15292 i_varhdr='$i_varhdr'
15293 i_vfork='$i_vfork'
15294 ignore_versioned_solibs='$ignore_versioned_solibs'
15295 inc_version_list='$inc_version_list'
15296 inc_version_list_init='$inc_version_list_init'
15297 incpath='$incpath'
15298 inews='$inews'
15299 installarchlib='$installarchlib'
15300 installbin='$installbin'
15301 installman1dir='$installman1dir'
15302 installman3dir='$installman3dir'
15303 installprefix='$installprefix'
15304 installprefixexp='$installprefixexp'
15305 installprivlib='$installprivlib'
15306 installscript='$installscript'
15307 installsitearch='$installsitearch'
15308 installsitebin='$installsitebin'
15309 installsitelib='$installsitelib'
15310 installstyle='$installstyle'
15311 installusrbinperl='$installusrbinperl'
15312 installvendorbin='$installvendorbin'
15313 installvendorlib='$installvendorlib'
15314 intsize='$intsize'
15315 ivdformat='$ivdformat'
15316 ivsize='$ivsize'
15317 ivtype='$ivtype'
15318 known_extensions='$known_extensions'
15319 ksh='$ksh'
15320 large='$large'
15321 ld='$ld'
15322 lddlflags='$lddlflags'
15323 ldflags='$ldflags'
15324 ldlibpthname='$ldlibpthname'
15325 less='$less'
15326 lib_ext='$lib_ext'
15327 libc='$libc'
15328 libperl='$libperl'
15329 libpth='$libpth'
15330 libs='$libs'
15331 libsdirs='$libsdirs'
15332 libsfiles='$libsfiles'
15333 libsfound='$libsfound'
15334 libspath='$libspath'
15335 libswanted='$libswanted'
15336 line='$line'
15337 lint='$lint'
15338 lkflags='$lkflags'
15339 ln='$ln'
15340 lns='$lns'
15341 locincpth='$locincpth'
15342 loclibpth='$loclibpth'
15343 longdblsize='$longdblsize'
15344 longlongsize='$longlongsize'
15345 longsize='$longsize'
15346 lp='$lp'
15347 lpr='$lpr'
15348 ls='$ls'
15349 lseeksize='$lseeksize'
15350 lseektype='$lseektype'
15351 mail='$mail'
15352 mailx='$mailx'
15353 make='$make'
15354 make_set_make='$make_set_make'
15355 mallocobj='$mallocobj'
15356 mallocsrc='$mallocsrc'
15357 malloctype='$malloctype'
15358 man1dir='$man1dir'
15359 man1direxp='$man1direxp'
15360 man1ext='$man1ext'
15361 man3dir='$man3dir'
15362 man3direxp='$man3direxp'
15363 man3ext='$man3ext'
15364 medium='$medium'
15365 mips_type='$mips_type'
15366 mkdir='$mkdir'
15367 mmaptype='$mmaptype'
15368 models='$models'
15369 modetype='$modetype'
15370 more='$more'
15371 multiarch='$multiarch'
15372 mv='$mv'
15373 myarchname='$myarchname'
15374 mydomain='$mydomain'
15375 myhostname='$myhostname'
15376 myuname='$myuname'
15377 n='$n'
15378 netdb_hlen_type='$netdb_hlen_type'
15379 netdb_host_type='$netdb_host_type'
15380 netdb_name_type='$netdb_name_type'
15381 netdb_net_type='$netdb_net_type'
15382 nm='$nm'
15383 nm_opt='$nm_opt'
15384 nm_so_opt='$nm_so_opt'
15385 nonxs_ext='$nonxs_ext'
15386 nroff='$nroff'
15387 nvsize='$nvsize'
15388 nvtype='$nvtype'
15389 o_nonblock='$o_nonblock'
15390 obj_ext='$obj_ext'
15391 old_pthread_create_joinable='$old_pthread_create_joinable'
15392 optimize='$optimize'
15393 orderlib='$orderlib'
15394 osname='$osname'
15395 osvers='$osvers'
15396 package='$package'
15397 pager='$pager'
15398 passcat='$passcat'
15399 patchlevel='$patchlevel'
15400 path_sep='$path_sep'
15401 perl5='$perl5'
15402 perl='$perl'
15403 perladmin='$perladmin'
15404 perlpath='$perlpath'
15405 pg='$pg'
15406 phostname='$phostname'
15407 pidtype='$pidtype'
15408 plibpth='$plibpth'
15409 pm_apiversion='$pm_apiversion'
15410 pmake='$pmake'
15411 pr='$pr'
15412 prefix='$prefix'
15413 prefixexp='$prefixexp'
15414 privlib='$privlib'
15415 privlibexp='$privlibexp'
15416 prototype='$prototype'
15417 ptrsize='$ptrsize'
15418 quadkind='$quadkind'
15419 quadtype='$quadtype'
15420 randbits='$randbits'
15421 randfunc='$randfunc'
15422 randseedtype='$randseedtype'
15423 ranlib='$ranlib'
15424 rd_nodata='$rd_nodata'
15425 revision='$revision'
15426 rm='$rm'
15427 rmail='$rmail'
15428 runnm='$runnm'
15429 sPRIEldbl='$sPRIEldbl'
15430 sPRIFldbl='$sPRIFldbl'
15431 sPRIGldbl='$sPRIGldbl'
15432 sPRIX64='$sPRIX64'
15433 sPRId64='$sPRId64'
15434 sPRIeldbl='$sPRIeldbl'
15435 sPRIfldbl='$sPRIfldbl'
15436 sPRIgldbl='$sPRIgldbl'
15437 sPRIi64='$sPRIi64'
15438 sPRIo64='$sPRIo64'
15439 sPRIu64='$sPRIu64'
15440 sPRIx64='$sPRIx64'
15441 sched_yield='$sched_yield'
15442 scriptdir='$scriptdir'
15443 scriptdirexp='$scriptdirexp'
15444 sed='$sed'
15445 seedfunc='$seedfunc'
15446 selectminbits='$selectminbits'
15447 selecttype='$selecttype'
15448 sendmail='$sendmail'
15449 sh='$sh'
15450 shar='$shar'
15451 sharpbang='$sharpbang'
15452 shmattype='$shmattype'
15453 shortsize='$shortsize'
15454 shrpenv='$shrpenv'
15455 shsharp='$shsharp'
15456 sig_count='$sig_count'
15457 sig_name='$sig_name'
15458 sig_name_init='$sig_name_init'
15459 sig_num='$sig_num'
15460 sig_num_init='$sig_num_init'
15461 signal_t='$signal_t'
15462 sitearch='$sitearch'
15463 sitearchexp='$sitearchexp'
15464 sitebin='$sitebin'
15465 sitebinexp='$sitebinexp'
15466 sitelib='$sitelib'
15467 sitelibexp='$sitelibexp'
15468 siteprefix='$siteprefix'
15469 siteprefixexp='$siteprefixexp'
15470 sizetype='$sizetype'
15471 sleep='$sleep'
15472 smail='$smail'
15473 small='$small'
15474 so='$so'
15475 sockethdr='$sockethdr'
15476 socketlib='$socketlib'
15477 socksizetype='$socksizetype'
15478 sort='$sort'
15479 spackage='$spackage'
15480 spitshell='$spitshell'
15481 split='$split'
15482 src='$src'
15483 ssizetype='$ssizetype'
15484 startperl='$startperl'
15485 startsh='$startsh'
15486 static_ext='$static_ext'
15487 stdchar='$stdchar'
15488 stdio_base='$stdio_base'
15489 stdio_bufsiz='$stdio_bufsiz'
15490 stdio_cnt='$stdio_cnt'
15491 stdio_filbuf='$stdio_filbuf'
15492 stdio_ptr='$stdio_ptr'
15493 stdio_stream_array='$stdio_stream_array'
15494 strings='$strings'
15495 submit='$submit'
15496 subversion='$subversion'
15497 sysman='$sysman'
15498 tail='$tail'
15499 tar='$tar'
15500 tbl='$tbl'
15501 tee='$tee'
15502 test='$test'
15503 timeincl='$timeincl'
15504 timetype='$timetype'
15505 touch='$touch'
15506 tr='$tr'
15507 trnl='$trnl'
15508 troff='$troff'
15509 u16size='$u16size'
15510 u16type='$u16type'
15511 u32size='$u32size'
15512 u32type='$u32type'
15513 u64size='$u64size'
15514 u64type='$u64type'
15515 u8size='$u8size'
15516 u8type='$u8type'
15517 uidformat='$uidformat'
15518 uidsign='$uidsign'
15519 uidsize='$uidsize'
15520 uidtype='$uidtype'
15521 uname='$uname'
15522 uniq='$uniq'
15523 uquadtype='$uquadtype'
15524 use5005threads='$use5005threads'
15525 use64bitall='$use64bitall'
15526 use64bitint='$use64bitint'
15527 usedl='$usedl'
15528 useithreads='$useithreads'
15529 uselargefiles='$uselargefiles'
15530 uselongdouble='$uselongdouble'
15531 usemorebits='$usemorebits'
15532 usemultiplicity='$usemultiplicity'
15533 usemymalloc='$usemymalloc'
15534 usenm='$usenm'
15535 useopcode='$useopcode'
15536 useperlio='$useperlio'
15537 useposix='$useposix'
15538 usesfio='$usesfio'
15539 useshrplib='$useshrplib'
15540 usesocks='$usesocks'
15541 usethreads='$usethreads'
15542 usevendorprefix='$usevendorprefix'
15543 usevfork='$usevfork'
15544 usrinc='$usrinc'
15545 uuname='$uuname'
15546 uvoformat='$uvoformat'
15547 uvsize='$uvsize'
15548 uvtype='$uvtype'
15549 uvuformat='$uvuformat'
15550 uvxformat='$uvxformat'
15551 vendorbin='$vendorbin'
15552 vendorbinexp='$vendorbinexp'
15553 vendorlib='$vendorlib'
15554 vendorlibexp='$vendorlibexp'
15555 vendorprefix='$vendorprefix'
15556 vendorprefixexp='$vendorprefixexp'
15557 version='$version'
15558 vi='$vi'
15559 voidflags='$voidflags'
15560 xlibpth='$xlibpth'
15561 xs_apiversion='$xs_apiversion'
15562 zcat='$zcat'
15563 zip='$zip'
15564 EOT
15565
15566 : Add in command line options if available
15567 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15568
15569 : add special variables
15570 $test -f $src/patchlevel.h && \
15571 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15572 echo "CONFIGDOTSH=true" >>config.sh
15573
15574 : propagate old symbols
15575 if $test -f UU/config.sh; then
15576         <UU/config.sh sort | uniq >UU/oldconfig.sh
15577         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15578         sort | uniq -u >UU/oldsyms
15579         set X `cat UU/oldsyms`
15580         shift
15581         case $# in
15582         0) ;;
15583         *)
15584                 cat <<EOM
15585 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15586 EOM
15587                 echo "# Variables propagated from previous config.sh file." >>config.sh
15588                 for sym in `cat UU/oldsyms`; do
15589                         echo "    Propagating $hint variable "'$'"$sym..."
15590                         eval 'tmp="$'"${sym}"'"'
15591                         echo "$tmp" | \
15592                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15593                 done
15594                 ;;
15595         esac
15596 fi
15597
15598 : Finish up by extracting the .SH files
15599 case "$alldone" in
15600 exit)
15601         $rm -rf UU
15602         echo "Done."
15603         exit 0
15604         ;;
15605 cont)
15606         ;;
15607 '')
15608         dflt=''
15609         nostick=true
15610         $cat <<EOM
15611
15612 If you'd like to make any changes to the config.sh file before I begin
15613 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15614
15615 EOM
15616         rp="Press return or use a shell escape to edit config.sh:"
15617         . UU/myread
15618         nostick=''
15619         case "$ans" in
15620         '') ;;
15621         *) : in case they cannot read
15622                 sh 1>&4 -c "$ans";;
15623         esac
15624         ;;
15625 esac
15626
15627 : if this fails, just run all the .SH files by hand
15628 . ./config.sh
15629
15630 echo " "
15631 exec 1>&4
15632 . ./UU/extract
15633
15634 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15635         dflt=y
15636         case "$silent" in
15637         true) ;;
15638         *)
15639                 $cat <<EOM
15640
15641 Now you need to generate make dependencies by running "$make depend".
15642 You might prefer to run it in background: "$make depend > makedepend.out &"
15643 It can take a while, so you might not want to run it right now.
15644
15645 EOM
15646                 ;;
15647         esac
15648         rp="Run $make depend now?"
15649         . UU/myread
15650         case "$ans" in
15651         y*)
15652                 $make depend && echo "Now you must run a $make."
15653                 ;;
15654         *)
15655                 echo "You must run '$make depend' then '$make'."
15656                 ;;
15657         esac
15658 elif test -f [Mm]akefile; then
15659         echo " "
15660         echo "Now you must run a $make."
15661 else
15662         echo "Done."
15663 fi
15664
15665 if $test -f Policy.sh; then
15666     $cat <<EOM
15667
15668 If you compile $package on a different machine or from a different object
15669 directory, copy the Policy.sh file from this object directory to the
15670 new one before you run Configure -- this will help you with most of
15671 the policy defaults.
15672
15673 EOM
15674 fi
15675 if $test -f config.msg; then
15676     echo "Hmm.  I also noted the following information while running:"
15677     echo " "
15678     $cat config.msg >&4
15679     $rm -f config.msg
15680 fi
15681 $rm -f kit*isdone ark*isdone
15682 $rm -rf UU
15683
15684 : End of Configure
15685