This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Userfriendliness.
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Feb 29 02:56:00 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_readdir=''
461 d_rewinddir=''
462 d_seekdir=''
463 d_telldir=''
464 d_readlink=''
465 d_rename=''
466 d_rmdir=''
467 d_safebcpy=''
468 d_safemcpy=''
469 d_sanemcmp=''
470 d_select=''
471 d_sem=''
472 d_semctl=''
473 d_semget=''
474 d_semop=''
475 d_setegid=''
476 d_seteuid=''
477 d_setgrent=''
478 d_setgrps=''
479 d_sethent=''
480 d_setlinebuf=''
481 d_setlocale=''
482 d_setnent=''
483 d_setpent=''
484 d_setpgid=''
485 d_setpgrp2=''
486 d_bsdsetpgrp=''
487 d_setpgrp=''
488 d_setprior=''
489 d_setpwent=''
490 d_setregid=''
491 d_setresgid=''
492 d_setresuid=''
493 d_setreuid=''
494 d_setrgid=''
495 d_setruid=''
496 d_setsent=''
497 d_setsid=''
498 d_setspent=''
499 d_setvbuf=''
500 d_sfio=''
501 usesfio=''
502 d_shm=''
503 d_shmat=''
504 d_shmatprototype=''
505 shmattype=''
506 d_shmctl=''
507 d_shmdt=''
508 d_shmget=''
509 d_sigaction=''
510 d_sigsetjmp=''
511 d_msg_ctrunc=''
512 d_msg_dontroute=''
513 d_msg_oob=''
514 d_msg_peek=''
515 d_msg_proxy=''
516 d_oldsock=''
517 d_scm_rights=''
518 d_socket=''
519 d_sockpair=''
520 sockethdr=''
521 socketlib=''
522 d_socklen_t=''
523 d_sqrtl=''
524 d_statblks=''
525 d_statfs_f_flags=''
526 d_statfs_s=''
527 d_fstatvfs=''
528 d_statvfs=''
529 d_stdio_cnt_lval=''
530 d_stdio_ptr_lval=''
531 d_stdiobase=''
532 d_stdstdio=''
533 stdio_base=''
534 stdio_bufsiz=''
535 stdio_cnt=''
536 stdio_filbuf=''
537 stdio_ptr=''
538 d_index=''
539 d_strchr=''
540 d_strcoll=''
541 d_strctcpy=''
542 d_strerrm=''
543 d_strerror=''
544 d_sysernlst=''
545 d_syserrlst=''
546 d_strtod=''
547 d_strtol=''
548 d_strtold=''
549 d_strtoll=''
550 d_strtoul=''
551 d_strtoull=''
552 d_strtouq=''
553 d_strxfrm=''
554 d_symlink=''
555 d_syscall=''
556 d_sysconf=''
557 d_system=''
558 d_tcgetpgrp=''
559 d_tcsetpgrp=''
560 d_telldirproto=''
561 d_time=''
562 timetype=''
563 clocktype=''
564 d_times=''
565 d_truncate=''
566 d_tzname=''
567 d_umask=''
568 d_semctl_semid_ds=''
569 d_semctl_semun=''
570 d_union_semun=''
571 d_ustat=''
572 d_vfork=''
573 usevfork=''
574 d_voidsig=''
575 signal_t=''
576 d_volatile=''
577 d_charvspr=''
578 d_vprintf=''
579 d_wait4=''
580 d_waitpid=''
581 d_wcstombs=''
582 d_wctomb=''
583 dlext=''
584 cccdlflags=''
585 ccdlflags=''
586 dlsrc=''
587 ld=''
588 lddlflags=''
589 usedl=''
590 doublesize=''
591 ebcdic=''
592 fflushNULL=''
593 fflushall=''
594 fpossize=''
595 fpostype=''
596 gidformat=''
597 gidsign=''
598 gidsize=''
599 gidtype=''
600 groupstype=''
601 h_fcntl=''
602 h_sysfile=''
603 i_arpainet=''
604 db_hashtype=''
605 db_prefixtype=''
606 i_db=''
607 i_dbm=''
608 i_rpcsvcdbm=''
609 d_dirnamlen=''
610 direntrytype=''
611 i_dirent=''
612 i_dld=''
613 i_dlfcn=''
614 i_fcntl=''
615 i_float=''
616 i_gdbm=''
617 d_grpasswd=''
618 i_grp=''
619 i_iconv=''
620 i_inttypes=''
621 i_limits=''
622 i_locale=''
623 i_machcthr=''
624 i_malloc=''
625 i_math=''
626 i_memory=''
627 i_mntent=''
628 i_ndbm=''
629 i_netdb=''
630 i_neterrno=''
631 i_netinettcp=''
632 i_niin=''
633 i_sysin=''
634 i_poll=''
635 i_pthread=''
636 d_pwage=''
637 d_pwchange=''
638 d_pwclass=''
639 d_pwcomment=''
640 d_pwexpire=''
641 d_pwgecos=''
642 d_pwpasswd=''
643 d_pwquota=''
644 i_pwd=''
645 i_sfio=''
646 i_shadow=''
647 i_socks=''
648 i_stddef=''
649 i_stdlib=''
650 i_string=''
651 strings=''
652 i_sysaccess=''
653 i_sysdir=''
654 i_sysfile=''
655 d_voidtty=''
656 i_bsdioctl=''
657 i_sysfilio=''
658 i_sysioctl=''
659 i_syssockio=''
660 i_syslog=''
661 i_sysmman=''
662 i_sysmode=''
663 i_sysmount=''
664 i_sysndir=''
665 i_sysparam=''
666 i_sysresrc=''
667 i_syssecrt=''
668 i_sysselct=''
669 i_sysstat=''
670 i_sysstatfs=''
671 i_sysstatvfs=''
672 i_systimes=''
673 i_systypes=''
674 i_sysuio=''
675 i_sysun=''
676 i_sysutsname=''
677 i_sysvfs=''
678 i_syswait=''
679 i_sgtty=''
680 i_termio=''
681 i_termios=''
682 i_systime=''
683 i_systimek=''
684 i_time=''
685 timeincl=''
686 i_unistd=''
687 i_ustat=''
688 i_utime=''
689 i_values=''
690 i_stdarg=''
691 i_varargs=''
692 i_varhdr=''
693 i_vfork=''
694 inc_version_list=''
695 inc_version_list_init=''
696 installprefix=''
697 installprefixexp=''
698 installstyle=''
699 installusrbinperl=''
700 intsize=''
701 longsize=''
702 shortsize=''
703 libc=''
704 ldlibpthname=''
705 libperl=''
706 shrpenv=''
707 useshrplib=''
708 glibpth=''
709 libpth=''
710 loclibpth=''
711 plibpth=''
712 xlibpth=''
713 ignore_versioned_solibs=''
714 libs=''
715 libsdirs=''
716 libsfiles=''
717 libsfound=''
718 libspath=''
719 lns=''
720 d_PRIEldbl=''
721 d_PRIFldbl=''
722 d_PRIGldbl=''
723 d_PRIeldbl=''
724 d_PRIfldbl=''
725 d_PRIgldbl=''
726 sPRIEldbl=''
727 sPRIFldbl=''
728 sPRIGldbl=''
729 sPRIeldbl=''
730 sPRIfldbl=''
731 sPRIgldbl=''
732 lseeksize=''
733 lseektype=''
734 make_set_make=''
735 d_mymalloc=''
736 freetype=''
737 mallocobj=''
738 mallocsrc=''
739 malloctype=''
740 usemymalloc=''
741 installman1dir=''
742 man1dir=''
743 man1direxp=''
744 man1ext=''
745 installman3dir=''
746 man3dir=''
747 man3direxp=''
748 man3ext=''
749 huge=''
750 large=''
751 medium=''
752 models=''
753 small=''
754 split=''
755 modetype=''
756 multiarch=''
757 mydomain=''
758 myhostname=''
759 phostname=''
760 c=''
761 n=''
762 d_eofnblk=''
763 eagain=''
764 o_nonblock=''
765 rd_nodata=''
766 netdb_hlen_type=''
767 netdb_host_type=''
768 netdb_name_type=''
769 netdb_net_type=''
770 groupcat=''
771 hostcat=''
772 passcat=''
773 orderlib=''
774 ranlib=''
775 package=''
776 spackage=''
777 pager=''
778 api_revision=''
779 api_subversion=''
780 api_version=''
781 api_versionstring=''
782 patchlevel=''
783 revision=''
784 subversion=''
785 version=''
786 perl5=''
787 perladmin=''
788 perlpath=''
789 d_nv_preserves_uv=''
790 i16size=''
791 i16type=''
792 i32size=''
793 i32type=''
794 i64size=''
795 i64type=''
796 i8size=''
797 i8type=''
798 ivsize=''
799 ivtype=''
800 nvsize=''
801 nvtype=''
802 u16size=''
803 u16type=''
804 u32size=''
805 u32type=''
806 u64size=''
807 u64type=''
808 u8size=''
809 u8type=''
810 uvsize=''
811 uvtype=''
812 ivdformat=''
813 uvoformat=''
814 uvuformat=''
815 uvxformat=''
816 pidtype=''
817 prefix=''
818 prefixexp=''
819 installprivlib=''
820 privlib=''
821 privlibexp=''
822 prototype=''
823 ptrsize=''
824 d_PRIX64=''
825 d_PRId64=''
826 d_PRIi64=''
827 d_PRIo64=''
828 d_PRIu64=''
829 d_PRIx64=''
830 sPRIX64=''
831 sPRId64=''
832 sPRIi64=''
833 sPRIo64=''
834 sPRIu64=''
835 sPRIx64=''
836 d_quad=''
837 quadkind=''
838 quadtype=''
839 uquadtype=''
840 drand01=''
841 randbits=''
842 randfunc=''
843 randseedtype=''
844 seedfunc=''
845 installscript=''
846 scriptdir=''
847 scriptdirexp=''
848 selectminbits=''
849 selecttype=''
850 sh=''
851 sig_count=''
852 sig_name=''
853 sig_name_init=''
854 sig_num=''
855 sig_num_init=''
856 installsitearch=''
857 sitearch=''
858 sitearchexp=''
859 installsitebin=''
860 sitebin=''
861 sitebinexp=''
862 installsitelib=''
863 sitelib=''
864 sitelibexp=''
865 siteprefix=''
866 siteprefixexp=''
867 sizetype=''
868 so=''
869 socksizetype=''
870 sharpbang=''
871 shsharp=''
872 spitshell=''
873 src=''
874 ssizetype=''
875 startperl=''
876 startsh=''
877 stdchar=''
878 d_stdio_stream_array=''
879 stdio_stream_array=''
880 sysman=''
881 trnl=''
882 uidformat=''
883 uidsign=''
884 uidsize=''
885 uidtype=''
886 archname64=''
887 use64bitall=''
888 use64bitint=''
889 uselargefiles=''
890 uselongdouble=''
891 usemorebits=''
892 usemultiplicity=''
893 nm_opt=''
894 nm_so_opt=''
895 runnm=''
896 usenm=''
897 useperlio=''
898 usesocks=''
899 d_oldpthreads=''
900 use5005threads=''
901 useithreads=''
902 usethreads=''
903 incpath=''
904 mips_type=''
905 usrinc=''
906 d_vendorbin=''
907 installvendorbin=''
908 vendorbin=''
909 vendorbinexp=''
910 d_vendorlib=''
911 installvendorlib=''
912 vendorlib=''
913 vendorlibexp=''
914 usevendorprefix=''
915 vendorprefix=''
916 vendorprefixexp=''
917 defvoidused=''
918 voidflags=''
919 pm_apiversion=''
920 xs_apiversion=''
921 CONFIG=''
922
923 define='define'
924 undef='undef'
925 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
926 rmlist=''
927
928 : We must find out about Eunice early
929 eunicefix=':'
930 if test -f /etc/unixtovms; then
931         eunicefix=/etc/unixtovms
932 fi
933 if test -f /etc/unixtovms.exe; then
934         eunicefix=/etc/unixtovms.exe
935 fi
936
937 i_whoami=''
938 : set useposix=false in your hint file to disable the POSIX extension.
939 useposix=true
940 : set useopcode=false in your hint file to disable the Opcode extension.
941 useopcode=true
942 : Trailing extension.  Override this in a hint file, if needed.
943 _exe=''
944 : Extra object files, if any, needed on this platform.
945 archobjs=''
946 : Possible local include directories to search.
947 : Set locincpth to "" in a hint file to defeat local include searches.
948 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
949 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
950 :
951 : no include file wanted by default
952 inclwanted=''
953
954 groupstype=''
955 : change the next line if compiling for Xenix/286 on Xenix/386
956 xlibpth='/usr/lib/386 /lib/386'
957 : Possible local library directories to search.
958 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
959 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
960
961 : general looking path for locating libraries
962 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
963 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
964 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
965 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
966 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
967
968 : Private path used by Configure to find libraries.  Its value
969 : is prepended to libpth. This variable takes care of special
970 : machines, like the mips.  Usually, it should be empty.
971 plibpth=''
972
973 : default library list
974 libswanted=''
975 : some systems want to use only the non-versioned libso:s
976 ignore_versioned_solibs=''
977 : set usemultiplicity on the Configure command line to enable multiplicity.
978 : set usesocks on the Configure command line to enable socks.
979 : set usethreads on the Configure command line to enable threads.
980 : full support for void wanted by default
981 defvoidused=15
982
983 : List of libraries we want.
984 : If anyone needs -lnet, put it in a hint file.
985 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
986 libswanted="$libswanted dld ld sun m c cposix posix"
987 libswanted="$libswanted ndir dir crypt sec"
988 libswanted="$libswanted ucb bsd BSD PW x"
989 : We probably want to search /usr/shlib before most other libraries.
990 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
991 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
992 glibpth="/usr/shlib $glibpth"
993 : Do not use vfork unless overridden by a hint file.
994 usevfork=false
995
996 : Find the basic shell for Bourne shell scripts
997 case "$sh" in
998 '')
999         case "$SYSTYPE" in
1000         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1001         *) xxx='/bin/sh';;
1002         esac
1003         if test -f "$xxx"; then
1004                 sh="$xxx"
1005         else
1006                 : Build up a list and do a single loop so we can 'break' out.
1007                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1008                 for xxx in sh bash ksh pdksh ash; do
1009                         for p in $pth; do
1010                                 try="$try ${p}/${xxx}"
1011                         done
1012                 done
1013                 for xxx in $try; do
1014                         if test -f "$xxx"; then
1015                                 sh="$xxx";
1016                                 break
1017                         elif test -f "$xxx.exe"; then
1018                                 sh="$xxx";
1019                                 break
1020                         fi
1021                 done
1022         fi
1023         ;;
1024 esac
1025
1026 case "$sh" in
1027 '')     cat <<EOM >&2
1028 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1029
1030 Usually it's in /bin/sh.  How did you even get this far?
1031 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1032 we'll try to straighten this all out.
1033 EOM
1034         exit 1
1035         ;;
1036 esac
1037
1038 : see if sh knows # comments
1039 if `$sh -c '#' >/dev/null 2>&1`; then
1040         shsharp=true
1041         spitshell=cat
1042         xcat=/bin/cat
1043         test -f $xcat || xcat=/usr/bin/cat
1044         echo "#!$xcat" >try
1045         $eunicefix try
1046         chmod +x try
1047         ./try > today
1048         if test -s today; then
1049                 sharpbang='#!'
1050         else
1051                 echo "#! $xcat" > try
1052                 $eunicefix try
1053                 chmod +x try
1054                 ./try > today
1055                 if test -s today; then
1056                         sharpbang='#! '
1057                 else
1058                         sharpbang=': use '
1059                 fi
1060         fi
1061 else
1062         echo " "
1063         echo "Your $sh doesn't grok # comments--I will strip them later on."
1064         shsharp=false
1065         cd ..
1066         echo "exec grep -v '^[  ]*#'" >spitshell
1067         chmod +x spitshell
1068         $eunicefix spitshell
1069         spitshell=`pwd`/spitshell
1070         cd UU
1071         echo "I presume that if # doesn't work, #! won't work either!"
1072         sharpbang=': use '
1073 fi
1074 rm -f try today
1075
1076 : figure out how to guarantee sh startup
1077 case "$startsh" in
1078 '') startsh=${sharpbang}${sh} ;;
1079 *)
1080 esac
1081 cat >try <<EOSS
1082 $startsh
1083 set abc
1084 test "$?abc" != 1
1085 EOSS
1086
1087 chmod +x try
1088 $eunicefix try
1089 if ./try; then
1090         : echo "Yup, it does."
1091 else
1092         echo "Hmm... '$startsh' does not guarantee sh startup..."
1093         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1094 fi
1095 rm -f try
1096
1097
1098 : Save command line options in file UU/cmdline.opt for later use in
1099 : generating config.sh.
1100 cat > cmdline.opt <<EOSH
1101 # Configure command line arguments.
1102 config_arg0='$0'
1103 config_args='$*'
1104 config_argc=$#
1105 EOSH
1106 argn=1
1107 for arg in "$@"; do
1108         cat >>cmdline.opt <<EOSH
1109 config_arg$argn='$arg'
1110 EOSH
1111         argn=`expr $argn + 1`
1112 done
1113
1114 : produce awk script to parse command line options
1115 cat >options.awk <<'EOF'
1116 BEGIN {
1117         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1118
1119         len = length(optstr);
1120         for (i = 1; i <= len; i++) {
1121                 c = substr(optstr, i, 1);
1122                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1123                 if (a == ":") {
1124                         arg[c] = 1;
1125                         i++;
1126                 }
1127                 opt[c] = 1;
1128         }
1129 }
1130 {
1131         expect = 0;
1132         str = $0;
1133         if (substr(str, 1, 1) != "-") {
1134                 printf("'%s'\n", str);
1135                 next;
1136         }
1137         len = length($0);
1138         for (i = 2; i <= len; i++) {
1139                 c = substr(str, i, 1);
1140                 if (!opt[c]) {
1141                         printf("-%s\n", substr(str, i));
1142                         next;
1143                 }
1144                 printf("-%s\n", c);
1145                 if (arg[c]) {
1146                         if (i < len)
1147                                 printf("'%s'\n", substr(str, i + 1));
1148                         else
1149                                 expect = 1;
1150                         next;
1151                 }
1152         }
1153 }
1154 END {
1155         if (expect)
1156                 print "?";
1157 }
1158 EOF
1159
1160 : process the command line options
1161 set X `for arg in "$@"; do echo "X$arg"; done |
1162         sed -e s/X// | awk -f options.awk`
1163 eval "set $*"
1164 shift
1165 rm -f options.awk
1166
1167 : set up default values
1168 fastread=''
1169 reuseval=false
1170 config_sh=''
1171 alldone=''
1172 error=''
1173 silent=''
1174 extractsh=''
1175 override=''
1176 knowitall=''
1177 rm -f optdef.sh posthint.sh
1178 cat >optdef.sh <<EOS
1179 $startsh
1180 EOS
1181
1182
1183 : option parsing
1184 while test $# -gt 0; do
1185         case "$1" in
1186         -d) shift; fastread=yes;;
1187         -e) shift; alldone=cont;;
1188         -f)
1189                 shift
1190                 cd ..
1191                 if test -r "$1"; then
1192                         config_sh="$1"
1193                 else
1194                         echo "$me: cannot read config file $1." >&2
1195                         error=true
1196                 fi
1197                 cd UU
1198                 shift;;
1199         -h) shift; error=true;;
1200         -r) shift; reuseval=true;;
1201         -s) shift; silent=true; realsilent=true;;
1202         -E) shift; alldone=exit;;
1203         -K) shift; knowitall=true;;
1204         -O) shift; override=true;;
1205         -S) shift; silent=true; extractsh=true;;
1206         -D)
1207                 shift
1208                 case "$1" in
1209                 *=)
1210                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1211                         echo "$me: ignoring -D $1" >&2
1212                         ;;
1213                 *=*) echo "$1" | \
1214                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1215                 *) echo "$1='define'" >> optdef.sh;;
1216                 esac
1217                 shift
1218                 ;;
1219         -U)
1220                 shift
1221                 case "$1" in
1222                 *=) echo "$1" >> optdef.sh;;
1223                 *=*)
1224                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1225                         echo "$me: ignoring -U $1" >&2
1226                         ;;
1227                 *) echo "$1='undef'" >> optdef.sh;;
1228                 esac
1229                 shift
1230                 ;;
1231         -A)
1232             shift
1233             xxx=''
1234             yyy="$1"
1235             zzz=''
1236             uuu=undef
1237             case "$yyy" in
1238             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1239                  case "$zzz" in
1240                  *:*) zzz='' ;;
1241                  *)   xxx=append
1242                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1243                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1244                  esac
1245                  ;;
1246             esac
1247             case "$xxx" in
1248             '')  case "$yyy" in
1249                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1250                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1251                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1252                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1253                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1254                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1255                  esac
1256                  ;;       
1257             esac
1258             case "$xxx" in
1259             append)
1260                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1261             clear)
1262                 echo "$yyy=''"                  >> posthint.sh ;;
1263             define)
1264                 case "$zzz" in
1265                 '') zzz=define ;;
1266                 esac
1267                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1268             eval)
1269                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1270             prepend)
1271                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1272             undef)
1273                 case "$zzz" in
1274                 '') zzz="$uuu" ;;
1275                 esac
1276                 echo "$yyy=$zzz"                >> posthint.sh ;;
1277             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1278             esac
1279             shift
1280             ;;
1281         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1282             exit 0;;
1283         --) break;;
1284         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1285         *) break;;
1286         esac
1287 done
1288
1289 case "$error" in
1290 true)
1291         cat >&2 <<EOM
1292 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1293                  [-U symbol] [-U symbol=] [-A command:symbol...]
1294   -d : use defaults for all answers.
1295   -e : go on without questioning past the production of config.sh.
1296   -f : specify an alternate default configuration file.
1297   -h : print this help message and exit (with an error status).
1298   -r : reuse C symbols value if possible (skips costly nm extraction).
1299   -s : silent mode, only echoes questions and essential information.
1300   -D : define symbol to have some value:
1301          -D symbol         symbol gets the value 'define'
1302          -D symbol=value   symbol gets the value 'value'
1303   -E : stop at the end of questions, after having produced config.sh.
1304   -K : do not use unless you know what you are doing.
1305   -O : let -D and -U override definitions from loaded configuration file.
1306   -S : perform variable substitutions on all .SH files (can mix with -f)
1307   -U : undefine symbol:
1308          -U symbol    symbol gets the value 'undef'
1309          -U symbol=   symbol gets completely empty
1310   -A : manipulate symbol after the platform specific hints have been applied:
1311          -A symbol=value                append " "value to symbol
1312          -A append:symbol=value         append value to symbol
1313          -A define:symbol=value         define symbol to have value
1314          -A clear:symbol                define symbol to be ''
1315          -A define:symbol               define symbol to be 'define'
1316          -A eval:symbol=value           define symbol to be eval of value
1317          -A prepend:symbol=value        prepend value to symbol
1318          -A undef:symbol                define symbol to be 'undef'
1319          -A undef:symbol=               define symbol to be ''
1320   -V : print version number and exit (with a zero status).
1321 EOM
1322         exit 1
1323         ;;
1324 esac
1325
1326 : Sanity checks
1327 case "$fastread$alldone" in
1328 yescont|yesexit) ;;
1329 *)
1330         if test ! -t 0; then
1331                 echo "Say 'sh Configure', not 'sh <Configure'"
1332                 exit 1
1333         fi
1334         ;;
1335 esac
1336
1337 exec 4>&1
1338 case "$silent" in
1339 true) exec 1>/dev/null;;
1340 esac
1341
1342 : run the defines and the undefines, if any, but leave the file out there...
1343 touch optdef.sh
1344 . ./optdef.sh
1345 : create the posthint manipulation script and leave the file out there...
1346 touch posthint.sh
1347
1348 : set package name
1349 package=perl5
1350 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1351 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1352 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1353 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1354 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1355 esac
1356
1357 : Some greps do not return status, grrr.
1358 echo "grimblepritz" >grimble
1359 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1360         contains=contains
1361 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1362         contains=grep
1363 else
1364         contains=contains
1365 fi
1366 rm -f grimble
1367 : the following should work in any shell
1368 case "$contains" in
1369 contains*)
1370         echo " "
1371         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1372         cat >contains <<'EOSS'
1373 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1374 EOSS
1375 chmod +x contains
1376 esac
1377
1378 : Find the path to the source tree
1379 case "$src" in
1380 '') case "$0" in
1381     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1382          case "$src" in
1383          /*)    ;;
1384          *)     src=`cd ../$src && pwd` ;;
1385          esac
1386          ;;
1387     *)   src='.';;
1388     esac;;
1389 esac
1390 case "$src" in
1391 '')     src=/
1392         rsrc=/
1393         ;;
1394 /*) rsrc="$src";;
1395 *) rsrc="../$src";;
1396 esac
1397 if test -f $rsrc/Configure && \
1398         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1399 then
1400    : found it, so we are ok.
1401 else
1402         rsrc=''
1403         for src in . .. ../.. ../../.. ../../../..; do
1404                 if test -f ../$src/Configure && \
1405                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1406                 then
1407                         rsrc=../$src
1408                         break
1409                 fi
1410         done
1411 fi
1412 case "$rsrc" in
1413 '')
1414         cat <<EOM >&4
1415
1416 Sorry, I can't seem to locate the source dir for $package.  Please start
1417 Configure with an explicit path -- i.e. /some/path/Configure.
1418
1419 EOM
1420         exit 1
1421         ;;
1422 ../.)   rsrc='..';;
1423 *)
1424         echo " "
1425         echo "Sources for $package found in \"$src\"." >&4
1426         ;;
1427 esac
1428
1429 : script used to extract .SH files with variable substitutions
1430 cat >extract <<'EOS'
1431 CONFIGDOTSH=true
1432 echo "Doing variable substitutions on .SH files..."
1433 if test -f $src/MANIFEST; then
1434         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1435 else
1436         echo "(Looking for .SH files under the source directory.)"
1437         set x `(cd $src; find . -name "*.SH" -print)`
1438 fi
1439 shift
1440 case $# in
1441 0) set x `(cd $src; echo *.SH)`; shift;;
1442 esac
1443 if test ! -f $src/$1; then
1444         shift
1445 fi
1446 mkdir_p='
1447 name=$1;
1448 create="";
1449 while test $name; do
1450         if test ! -d "$name"; then
1451                 create="$name $create";
1452                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1453                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1454         else
1455                 name="";
1456         fi;
1457 done;
1458 for file in $create; do
1459         mkdir $file;
1460 done
1461 '
1462 for file in $*; do
1463         case "$src" in
1464         ".")
1465                 case "$file" in
1466                 */*)
1467                         dir=`expr X$file : 'X\(.*\)/'`
1468                         file=`expr X$file : 'X.*/\(.*\)'`
1469                         (cd $dir && . ./$file)
1470                         ;;
1471                 *)
1472                         . ./$file
1473                         ;;
1474                 esac
1475                 ;;
1476         *)
1477                 case "$file" in
1478                 */*)
1479                         dir=`expr X$file : 'X\(.*\)/'`
1480                         file=`expr X$file : 'X.*/\(.*\)'`
1481                         (set x $dir; shift; eval $mkdir_p)
1482                         sh <$src/$dir/$file
1483                         ;;
1484                 *)
1485                         sh <$src/$file
1486                         ;;
1487                 esac
1488                 ;;
1489         esac
1490 done
1491 if test -f $src/config_h.SH; then
1492         if test ! -f config.h; then
1493         : oops, they left it out of MANIFEST, probably, so do it anyway.
1494         . $src/config_h.SH
1495         fi
1496 fi
1497 EOS
1498
1499 : extract files and exit if asked to do so
1500 case "$extractsh" in
1501 true)
1502         case "$realsilent" in
1503         true) ;;
1504         *) exec 1>&4;;
1505         esac
1506         case "$config_sh" in
1507         '') config_sh='config.sh';;
1508         esac
1509         echo " "
1510         echo "Fetching answers from $config_sh..."
1511         cd ..
1512         . $config_sh
1513         test "$override" && . ./optdef.sh
1514         echo " "
1515         . UU/extract
1516         rm -rf UU
1517         echo "Done."
1518         exit 0
1519         ;;
1520 esac
1521
1522 : Eunice requires " " instead of "", can you believe it
1523 echo " "
1524 : Here we go...
1525 echo "Beginning of configuration questions for $package."
1526
1527 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1528
1529 : first determine how to suppress newline on echo command
1530 echo " "
1531 echo "Checking echo to see how to suppress newlines..."
1532 (echo "hi there\c" ; echo " ") >.echotmp
1533 if $contains c .echotmp >/dev/null 2>&1 ; then
1534         echo "...using -n."
1535         n='-n'
1536         c=''
1537 else
1538         cat <<'EOM'
1539 ...using \c
1540 EOM
1541         n=''
1542         c='\c'
1543 fi
1544 echo $n "The star should be here-->$c"
1545 echo '*'
1546 rm -f .echotmp
1547
1548 : Now test for existence of everything in MANIFEST
1549 echo " "
1550 if test -f $rsrc/MANIFEST; then
1551         echo "First let's make sure your kit is complete.  Checking..." >&4
1552         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1553         rm -f missing
1554         tmppwd=`pwd`
1555         for filelist in x??; do
1556                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1557         done
1558         if test -s missing; then
1559                 cat missing >&4
1560                 cat >&4 <<'EOM'
1561
1562 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1563
1564 You have the option of continuing the configuration process, despite the
1565 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1566 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1567 and contact the author (perlbug@perl.com).
1568
1569 EOM
1570                 echo $n "Continue? [n] $c" >&4
1571                 read ans
1572                 case "$ans" in
1573                 y*)
1574                         echo "Continuing..." >&4
1575                         rm -f missing
1576                         ;;
1577                 *)
1578                         echo "ABORTING..." >&4
1579                         kill $$
1580                         ;;
1581                 esac
1582         else
1583                 echo "Looks good..."
1584         fi
1585 else
1586         echo "There is no MANIFEST file.  I hope your kit is complete !"
1587 fi
1588 rm -f missing x??
1589
1590 echo " "
1591 : Find the appropriate value for a newline for tr
1592 if test -n "$DJGPP"; then
1593        trnl='\012'
1594 fi
1595 if test X"$trnl" = X; then
1596         case "`echo foo|tr '\n' x 2>/dev/null`" in
1597         foox) trnl='\n' ;;
1598         esac
1599 fi
1600 if test X"$trnl" = X; then
1601         case "`echo foo|tr '\012' x 2>/dev/null`" in
1602         foox) trnl='\012' ;;
1603         esac
1604 fi
1605 if test X"$trnl" = X; then
1606         cat <<EOM >&2
1607
1608 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1609
1610 EOM
1611         exit 1
1612 fi
1613
1614 : compute the number of columns on the terminal for proper question formatting
1615 case "$COLUMNS" in
1616 '') COLUMNS='80';;
1617 esac
1618
1619 : set up the echo used in my read
1620 myecho="case \"\$xxxm\" in
1621 '') echo $n \"\$rp $c\" >&4;;
1622 *) case \"\$rp\" in
1623         '') echo $n \"[\$xxxm] $c\";;
1624         *)
1625                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1626                         echo \"\$rp\" >&4
1627                         echo $n \"[\$xxxm] $c\" >&4
1628                 else
1629                         echo $n \"\$rp [\$xxxm] $c\" >&4
1630                 fi
1631                 ;;
1632         esac;;
1633 esac"
1634
1635 : now set up to do reads with possible shell escape and default assignment
1636 cat <<EOSC >myread
1637 $startsh
1638 xxxm=\$dflt
1639 $myecho
1640 ans='!'
1641 case "\$fastread" in
1642 yes) case "\$dflt" in
1643         '') ;;
1644         *) ans='';
1645                 case "\$silent-\$rp" in
1646                 true-) ;;
1647                 *) echo " " >&4;;
1648                 esac;;
1649         esac;;
1650 *) case "\$silent" in
1651         true) case "\$rp" in
1652                 '') ans='';;
1653                 esac;;
1654         esac;;
1655 esac
1656 while expr "X\$ans" : "X!" >/dev/null; do
1657         read answ
1658         set x \$xxxm
1659         shift
1660         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1661         case  "\$answ" in
1662         "!")
1663                 sh 1>&4
1664                 echo " "
1665                 $myecho
1666                 ;;
1667         !*)
1668                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1669                 shift
1670                 sh 1>&4 -c "\$*"
1671                 echo " "
1672                 $myecho
1673                 ;;
1674         "\$ans")
1675                 case "\$ans" in
1676                 \\&*)
1677                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1678                         shift
1679                         case "\$1" in
1680                         -d)
1681                                 fastread=yes
1682                                 echo "(OK, I'll run with -d after this question.)" >&4
1683                                 ;;
1684                         -*)
1685                                 echo "*** Sorry, \$1 not supported yet." >&4
1686                                 ;;
1687                         esac
1688                         $myecho
1689                         ans=!
1690                         ;;
1691                 esac;;
1692         *)
1693                 case "\$aok" in
1694                 y)
1695                         echo "*** Substitution done -- please confirm."
1696                         xxxm="\$ans"
1697                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1698                         xxxm="\$ans"
1699                         ans=!
1700                         ;;
1701                 *)
1702                         echo "*** Error -- try again."
1703                         ans=!
1704                         ;;
1705                 esac
1706                 $myecho
1707                 ;;
1708         esac
1709         case "\$ans\$xxxm\$nostick" in
1710         '')
1711                 ans=!
1712                 $myecho
1713                 ;;
1714         esac
1715 done
1716 case "\$ans" in
1717 '') ans="\$xxxm";;
1718 esac
1719 EOSC
1720
1721 : create .config dir to save info across Configure sessions
1722 test -d ../.config || mkdir ../.config
1723 cat >../.config/README <<EOF
1724 This directory created by Configure to save information that should
1725 persist across sessions for $package.
1726
1727 You may safely delete it if you wish.
1728 EOF
1729
1730 : general instructions
1731 needman=true
1732 firsttime=true
1733 user=`(logname) 2>/dev/null`
1734 case "$user" in
1735 '') user=`whoami 2>&1`;;
1736 esac
1737 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1738         firsttime=false
1739         echo " "
1740         rp='Would you like to see the instructions?'
1741         dflt=n
1742         . ./myread
1743         case "$ans" in
1744         [yY]*) ;;
1745         *) needman=false;;
1746         esac
1747 fi
1748 if $needman; then
1749         cat <<EOH
1750
1751 This installation shell script will examine your system and ask you questions
1752 to determine how the perl5 package should be installed. If you get
1753 stuck on a question, you may use a ! shell escape to start a subshell or
1754 execute a command.  Many of the questions will have default answers in square
1755 brackets; typing carriage return will give you the default.
1756
1757 On some of the questions which ask for file or directory names you are allowed
1758 to use the ~name construct to specify the login directory belonging to "name",
1759 even if you don't have a shell which knows about that.  Questions where this is
1760 allowed will be marked "(~name ok)".
1761
1762 EOH
1763         rp=''
1764         dflt='Type carriage return to continue'
1765         . ./myread
1766         cat <<'EOH'
1767
1768 The prompter used in this script allows you to use shell variables and
1769 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1770 in the default answer, as if the default line was a set of arguments given to a
1771 script shell.  This means you may also use $* to repeat the whole default line,
1772 so you do not have to re-type everything to add something to the default.
1773
1774 Everytime there is a substitution, you will have to confirm.  If there is an
1775 error (e.g. an unmatched backtick), the default answer will remain unchanged
1776 and you will be prompted again.
1777
1778 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1779 the questions and use the computed defaults (or the previous answers if there
1780 was already a config.sh file). Type 'Configure -h' for a list of options.
1781 You may also start interactively and then answer '& -d' at any prompt to turn
1782 on the non-interactive behaviour for the remainder of the execution.
1783
1784 EOH
1785         . ./myread
1786         cat <<EOH
1787
1788 Much effort has been expended to ensure that this shell script will run on any
1789 Unix system.  If despite that it blows up on yours, your best bet is to edit
1790 Configure and run it again.  If you can't run Configure for some reason,
1791 you'll have to generate a config.sh file by hand.  Whatever problems you
1792 have, let me (perlbug@perl.com) know how I blew it.
1793
1794 This installation script affects things in two ways:
1795
1796 1) it may do direct variable substitutions on some of the files included
1797    in this kit.
1798 2) it builds a config.h file for inclusion in C programs.  You may edit
1799    any of these files as the need arises after running this script.
1800
1801 If you make a mistake on a question, there is no easy way to back up to it
1802 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1803 files.  Configure will offer to let you do this before it runs the SH files.
1804
1805 EOH
1806         dflt='Type carriage return to continue'
1807         . ./myread
1808         case "$firsttime" in
1809         true) echo $user >>../.config/instruct;;
1810         esac
1811 fi
1812
1813 : find out where common programs are
1814 echo " "
1815 echo "Locating common programs..." >&4
1816 cat <<EOSC >loc
1817 $startsh
1818 case \$# in
1819 0) exit 1;;
1820 esac
1821 thing=\$1
1822 shift
1823 dflt=\$1
1824 shift
1825 for dir in \$*; do
1826         case "\$thing" in
1827         .)
1828         if test -d \$dir/\$thing; then
1829                 echo \$dir
1830                 exit 0
1831         fi
1832         ;;
1833         *)
1834         for thisthing in \$dir/\$thing; do
1835                 : just loop through to pick last item
1836         done
1837         if test -f \$thisthing; then
1838                 echo \$thisthing
1839                 exit 0
1840         elif test -f \$dir/\$thing.exe; then
1841                 if test -n "$DJGPP"; then
1842                         echo \$dir/\$thing.exe
1843                 else
1844                         : on Eunice apparently
1845                         echo \$dir/\$thing
1846                 fi
1847                 exit 0
1848         fi
1849         ;;
1850         esac
1851 done
1852 echo \$dflt
1853 exit 1
1854 EOSC
1855 chmod +x loc
1856 $eunicefix loc
1857 loclist="
1858 awk
1859 cat
1860 comm
1861 cp
1862 echo
1863 expr
1864 grep
1865 ls
1866 make
1867 mkdir
1868 rm
1869 sed
1870 sort
1871 touch
1872 tr
1873 uniq
1874 "
1875 trylist="
1876 Mcc
1877 ar
1878 byacc
1879 cpp
1880 csh
1881 date
1882 egrep
1883 gzip
1884 less
1885 ln
1886 more
1887 nm
1888 nroff
1889 pg
1890 test
1891 uname
1892 zip
1893 "
1894 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1895 pth="$pth /lib /usr/lib"
1896 for file in $loclist; do
1897         eval xxx=\$$file
1898         case "$xxx" in
1899         /*|?:[\\/]*)
1900                 if test -f "$xxx"; then
1901                         : ok
1902                 else
1903                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1904                         xxx=`./loc $file $file $pth`
1905                 fi
1906                 ;;
1907         '') xxx=`./loc $file $file $pth`;;
1908         *) xxx=`./loc $xxx $xxx $pth`;;
1909         esac
1910         eval $file=$xxx
1911         eval _$file=$xxx
1912         case "$xxx" in
1913         /*)
1914                 echo $file is in $xxx.
1915                 ;;
1916         ?:[\\/]*)
1917                 echo $file is in $xxx.
1918                 ;;
1919         *)
1920                 echo "I don't know where '$file' is, and my life depends on it." >&4
1921                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1922                 exit 1
1923                 ;;
1924         esac
1925 done
1926 echo " "
1927 echo "Don't worry if any of the following aren't found..."
1928 say=offhand
1929 for file in $trylist; do
1930         eval xxx=\$$file
1931         case "$xxx" in
1932         /*|?:[\\/]*)
1933                 if test -f "$xxx"; then
1934                         : ok
1935                 else
1936                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1937                         xxx=`./loc $file $file $pth`
1938                 fi
1939                 ;;
1940         '') xxx=`./loc $file $file $pth`;;
1941         *) xxx=`./loc $xxx $xxx $pth`;;
1942         esac
1943         eval $file=$xxx
1944         eval _$file=$xxx
1945         case "$xxx" in
1946         /*)
1947                 echo $file is in $xxx.
1948                 ;;
1949         ?:[\\/]*)
1950                 echo $file is in $xxx.
1951                 ;;
1952         *)
1953                 echo "I don't see $file out there, $say."
1954                 say=either
1955                 ;;
1956         esac
1957 done
1958 case "$egrep" in
1959 egrep)
1960         echo "Substituting grep for egrep."
1961         egrep=$grep
1962         ;;
1963 esac
1964 case "$ln" in
1965 ln)
1966         echo "Substituting cp for ln."
1967         ln=$cp
1968         ;;
1969 esac
1970 case "$test" in
1971 test)
1972         echo "Hopefully test is built into your sh."
1973         ;;
1974 *)
1975         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1976                 echo "Using the test built into your sh."
1977                 test=test
1978                 _test=test
1979         fi
1980         ;;
1981 esac
1982 case "$echo" in
1983 echo)
1984         echo "Hopefully echo is built into your sh."
1985         ;;
1986 '') ;;
1987 *)
1988         echo " "
1989 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1990         $echo $n "hi there$c" >foo1
1991         echo $n "hi there$c" >foo2
1992         if cmp foo1 foo2 >/dev/null 2>&1; then
1993                 echo "They are compatible.  In fact, they may be identical."
1994         else
1995                 case "$n" in
1996                 '-n') n='' c='\c';;
1997                 *) n='-n' c='';;
1998                 esac
1999                 cat <<FOO
2000 They are not compatible!  You are probably running ksh on a non-USG system.
2001 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2002 have echo built in and we may have to run some Bourne shell scripts.  That
2003 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2004
2005 FOO
2006                 $echo $n "The star should be here-->$c"
2007                 $echo "*"
2008         fi
2009         $rm -f foo1 foo2
2010         ;;
2011 esac
2012
2013 : determine whether symbolic links are supported
2014 echo " "
2015 $touch blurfl
2016 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2017         echo "Symbolic links are supported." >&4
2018         lns="$ln -s"
2019 else
2020         echo "Symbolic links are NOT supported." >&4
2021         lns="$ln"
2022 fi
2023 $rm -f blurfl sym
2024
2025 : see whether [:lower:] and [:upper:] are supported character classes
2026 echo " "
2027 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2028 ABYZ)
2029         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2030         up='[:upper:]'
2031         low='[:lower:]'
2032         ;;
2033 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2034         # (0xc9 and 0xd1), therefore that is a nice testing point.
2035         if test "X$up" = X -o "X$low" = X; then
2036             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2037             ij) up='[A-Z]'
2038                 low='[a-z]'
2039                 ;;
2040             esac
2041         fi
2042         if test "X$up" = X -o "X$low" = X; then
2043             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2044             ij) up='A-Z'
2045                 low='a-z'
2046                 ;;
2047             esac
2048         fi
2049         if test "X$up" = X -o "X$low" = X; then
2050             case "`echo IJ | od -x 2>/dev/null`" in
2051             *C9D1*|*c9d1*)
2052                 echo "Hey, this might be EBCDIC." >&4
2053                 if test "X$up" = X -o "X$low" = X; then
2054                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2055                     ij) up='[A-IJ-RS-Z]'
2056                         low='[a-ij-rs-z]'
2057                         ;;
2058                     esac
2059                 fi
2060                 if test "X$up" = X -o "X$low" = X; then
2061                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2062                     ij) up='A-IJ-RS-Z'
2063                         low='a-ij-rs-z'
2064                         ;;
2065                     esac
2066                 fi
2067                 ;;
2068             esac
2069         fi
2070 esac
2071 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2072 ij)
2073     echo "Using $up and $low to convert case." >&4
2074     ;;
2075 *)
2076     echo "I don't know how to translate letters from upper to lower case." >&4
2077     echo "Your tr is not acting any way I know of." >&4
2078     exit 1
2079     ;;
2080 esac
2081 : set up the translation script tr, must be called with ./tr of course
2082 cat >tr <<EOSC
2083 $startsh
2084 case "\$1\$2" in
2085 '[A-Z][a-z]') exec $tr '$up' '$low';;
2086 '[a-z][A-Z]') exec $tr '$low' '$up';;
2087 esac
2088 exec $tr "\$@"
2089 EOSC
2090 chmod +x tr
2091 $eunicefix tr
2092
2093 : Try to determine whether config.sh was made on this system
2094 case "$config_sh" in
2095 '')
2096 myuname=`$uname -a 2>/dev/null`
2097 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2098 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2099 # because the A-Z/a-z are not consecutive.
2100 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2101         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2102 newmyuname="$myuname"
2103 dflt=n
2104 case "$knowitall" in
2105 '')
2106         if test -f ../config.sh; then
2107                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2108                         eval "`grep myuname= ../config.sh`"
2109                 fi
2110                 if test "X$myuname" = "X$newmyuname"; then
2111                         dflt=y
2112                 fi
2113         fi
2114         ;;
2115 *) dflt=y;;
2116 esac
2117
2118 : Get old answers from old config file if Configure was run on the
2119 : same system, otherwise use the hints.
2120 hint=default
2121 cd ..
2122 if test -f config.sh; then
2123         echo " "
2124         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2125         . UU/myread
2126         case "$ans" in
2127         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2128         *)  echo "Fetching default answers from your old config.sh file..." >&4
2129                 tmp_n="$n"
2130                 tmp_c="$c"
2131                 tmp_sh="$sh"
2132                 . ./config.sh
2133                 cp config.sh UU
2134                 n="$tmp_n"
2135                 c="$tmp_c"
2136                 : Older versions did not always set $sh.  Catch re-use of such
2137                 : an old config.sh.
2138                 case "$sh" in
2139                 '') sh="$tmp_sh" ;;
2140                 esac
2141                 hint=previous
2142                 ;;
2143         esac
2144 fi
2145 if test ! -f config.sh; then
2146         $cat <<EOM
2147
2148 First time through, eh?  I have some defaults handy for some systems
2149 that need some extra help getting the Configure answers right:
2150
2151 EOM
2152         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2153         dflt=''
2154         : Half the following guesses are probably wrong... If you have better
2155         : tests or hints, please send them to perlbug@perl.com
2156         : The metaconfig authors would also appreciate a copy...
2157         $test -f /irix && osname=irix
2158         $test -f /xenix && osname=sco_xenix
2159         $test -f /dynix && osname=dynix
2160         $test -f /dnix && osname=dnix
2161         $test -f /lynx.os && osname=lynxos
2162         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2163         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2164         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2165         $test -f /bin/mips && /bin/mips && osname=mips
2166         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2167                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2168         $test -d /usr/apollo/bin && osname=apollo
2169         $test -f /etc/saf/_sactab && osname=svr4
2170         $test -d /usr/include/minix && osname=minix
2171         if $test -d /MachTen -o -d /MachTen_Folder; then
2172                 osname=machten
2173                 if $test -x /sbin/version; then
2174                         osvers=`/sbin/version | $awk '{print $2}' |
2175                         $sed -e 's/[A-Za-z]$//'`
2176                 elif $test -x /usr/etc/version; then
2177                         osvers=`/usr/etc/version | $awk '{print $2}' |
2178                         $sed -e 's/[A-Za-z]$//'`
2179                 else
2180                         osvers="$2.$3"
2181                 fi
2182         fi
2183
2184         $test -f /sys/posix.dll &&
2185                 $test -f /usr/bin/what &&
2186                 set X `/usr/bin/what /sys/posix.dll` &&
2187                 $test "$3" = UWIN &&
2188                 osname=uwin &&
2189                 osvers="$5"
2190
2191         if $test -f $uname; then
2192                 set X $myuname
2193                 shift
2194
2195                 case "$5" in
2196                 fps*) osname=fps ;;
2197                 mips*)
2198                         case "$4" in
2199                         umips) osname=umips ;;
2200                         *) osname=mips ;;
2201                         esac;;
2202                 [23]100) osname=mips ;;
2203                 next*) osname=next ;;
2204                 i386*)
2205                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2206                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2207                                 osname='sco'
2208                                 osvers=$tmp
2209                         elif $test -f /etc/kconfig; then
2210                                 osname=isc
2211                                 if test "$lns" = "$ln -s"; then
2212                                         osvers=4
2213                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2214                                         osvers=3
2215                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2216                                         osvers=2
2217                                 fi
2218                         fi
2219                         tmp=''
2220                         ;;
2221                 pc*)
2222                         if test -n "$DJGPP"; then
2223                                 osname=dos
2224                                 osvers=djgpp
2225                         fi
2226                         ;;
2227                 esac
2228
2229                 case "$1" in
2230                 aix) osname=aix
2231                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2232                         case "$tmp" in
2233                         'not found') osvers="$4"."$3" ;;
2234                         '<3240'|'<>3240') osvers=3.2.0 ;;
2235                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2236                         '=3250'|'>3250') osvers=3.2.5 ;;
2237                         *) osvers=$tmp;;
2238                         esac
2239                         ;;
2240                 bsd386) osname=bsd386
2241                         osvers=`$uname -r`
2242                         ;;
2243                 cygwin*) osname=cygwin
2244                         osvers="$3"
2245                         ;;
2246                 *dc.osx) osname=dcosx
2247                         osvers="$3"
2248                         ;;
2249                 dnix) osname=dnix
2250                         osvers="$3"
2251                         ;;
2252                 domainos) osname=apollo
2253                         osvers="$3"
2254                         ;;
2255                 dgux) osname=dgux 
2256                         osvers="$3"
2257                         ;;
2258                 dynixptx*) osname=dynixptx
2259                         osvers=`echo "$4"|sed 's/^v//'`
2260                         ;;
2261                 freebsd) osname=freebsd 
2262                         osvers="$3" ;;
2263                 genix) osname=genix ;;
2264                 hp*) osname=hpux 
2265                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2266                         ;;
2267                 irix*) osname=irix
2268                         case "$3" in
2269                         4*) osvers=4 ;;
2270                         5*) osvers=5 ;;
2271                         *)      osvers="$3" ;;
2272                         esac
2273                         ;;
2274                 linux) osname=linux
2275                         case "$3" in
2276                         *)      osvers="$3" ;;
2277                         esac
2278                         ;;
2279                 MiNT) osname=mint
2280                         ;;
2281                 netbsd*) osname=netbsd
2282                         osvers="$3"
2283                         ;;
2284                 news-os) osvers="$3"
2285                         case "$3" in
2286                         4*) osname=newsos4 ;;
2287                         *) osname=newsos ;;
2288                         esac
2289                         ;;
2290                 next*) osname=next ;;
2291                 POSIX-BC | posix-bc ) osname=posix-bc
2292                         osvers="$3"
2293                         ;;
2294                 powerux | power_ux | powermax_os | powermaxos | \
2295                 powerunix | power_unix) osname=powerux
2296                         osvers="$3"
2297                         ;;
2298                 qnx) osname=qnx
2299                         osvers="$4"
2300                         ;;
2301                 solaris) osname=solaris
2302                         case "$3" in
2303                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2304                         *)      osvers="$3" ;;
2305                         esac
2306                         ;;
2307                 sunos) osname=sunos
2308                         case "$3" in
2309                         5*) osname=solaris
2310                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2311                         *)      osvers="$3" ;;
2312                         esac
2313                         ;;
2314                 titanos) osname=titanos
2315                         case "$3" in
2316                         1*) osvers=1 ;;
2317                         2*) osvers=2 ;;
2318                         3*) osvers=3 ;;
2319                         4*) osvers=4 ;;
2320                         *)      osvers="$3" ;;
2321                         esac
2322                         ;;
2323                 ultrix) osname=ultrix
2324                         osvers="$3"
2325                         ;;
2326                 osf1|mls+)      case "$5" in
2327                                 alpha)
2328                                         osname=dec_osf
2329                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2330                                         ;;
2331                         hp*)    osname=hp_osf1  ;;
2332                         mips)   osname=mips_osf1 ;;
2333                         esac
2334                         ;;
2335                 unixware) osname=svr5
2336                         osvers="$4"
2337                         ;;
2338                 uts) osname=uts
2339                         osvers="$3"
2340                         ;;
2341                 $2) case "$osname" in
2342                         *isc*) ;;
2343                         *freebsd*) ;;
2344                         svr*)
2345                                 : svr4.x or possibly later
2346                                 case "svr$3" in 
2347                                 ${osname}*)
2348                                         osname=svr$3
2349                                         osvers=$4
2350                                         ;;
2351                                 esac
2352                                 case "$osname" in
2353                                 svr4.0)
2354                                         : Check for ESIX
2355                                         if test -f /stand/boot ; then
2356                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2357                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2358                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2359                                                         if test -n "$isesix"; then
2360                                                                 osname=esix4
2361                                                         fi
2362                                                 fi
2363                                         fi
2364                                         ;;
2365                                 esac
2366                                 ;;
2367                         *)      if test -f /etc/systemid; then
2368                                         osname=sco
2369                                         set `echo $3 | $sed 's/\./ /g'` $4
2370                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2371                                                 osvers=$1.$2.$3
2372                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2373                                                 osvers=$1.$2
2374                                         elif $test -f $src/hints/sco_$1.sh; then
2375                                                 osvers=$1
2376                                         fi
2377                                 else
2378                                         case "$osname" in
2379                                         '') : Still unknown.  Probably a generic Sys V.
2380                                                 osname="sysv"
2381                                                 osvers="$3"
2382                                                 ;;
2383                                         esac
2384                                 fi
2385                                 ;;
2386                         esac
2387                         ;;
2388                 *)      case "$osname" in
2389                         '') : Still unknown.  Probably a generic BSD.
2390                                 osname="$1"
2391                                 osvers="$3"
2392                                 ;;
2393                         esac
2394                         ;;
2395                 esac
2396         else
2397                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2398                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2399                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2400                                 osname=news_os
2401                         fi
2402                         $rm -f UU/kernel.what
2403                 elif test -d c:/.; then
2404                         set X $myuname
2405                         osname=os2
2406                         osvers="$5"
2407                 fi
2408         fi
2409         
2410         : Now look for a hint file osname_osvers, unless one has been
2411         : specified already.
2412         case "$hintfile" in
2413         ''|' ')
2414                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2415                 : Also try without trailing minor version numbers.
2416                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2417                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2418                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2419                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2420                 case "$file" in
2421                 '') dflt=none ;;
2422                 *)  case "$osvers" in
2423                         '') dflt=$file
2424                                 ;;
2425                         *)  if $test -f $src/hints/$file.sh ; then
2426                                         dflt=$file
2427                                 elif $test -f $src/hints/$xfile.sh ; then
2428                                         dflt=$xfile
2429                                 elif $test -f $src/hints/$xxfile.sh ; then
2430                                         dflt=$xxfile
2431                                 elif $test -f $src/hints/$xxxfile.sh ; then
2432                                         dflt=$xxxfile
2433                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2434                                         dflt=$xxxxfile
2435                                 elif $test -f "$src/hints/${osname}.sh" ; then
2436                                         dflt="${osname}"
2437                                 else
2438                                         dflt=none
2439                                 fi
2440                                 ;;
2441                         esac
2442                         ;;
2443                 esac
2444                 if $test -f Policy.sh ; then
2445                         case "$dflt" in
2446                         *Policy*) ;;
2447                         none) dflt="Policy" ;;
2448                         *) dflt="Policy $dflt" ;;
2449                         esac
2450                 fi
2451                 ;;
2452         *)
2453                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2454                 ;;
2455         esac
2456
2457         if $test -f Policy.sh ; then
2458                 $cat <<EOM
2459
2460 There's also a Policy hint file available, which should make the
2461 site-specific (policy) questions easier to answer.
2462 EOM
2463
2464         fi
2465
2466         $cat <<EOM
2467
2468 You may give one or more space-separated answers, or "none" if appropriate.
2469 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2470 is a good thing.  DO NOT give a wrong version or a wrong OS.
2471
2472 EOM
2473
2474         rp="Which of these apply, if any?"
2475         . UU/myread
2476         tans=$ans
2477         for file in $tans; do
2478                 if $test X$file = XPolicy -a -f Policy.sh; then
2479                         . Policy.sh
2480                         $cat Policy.sh >> UU/config.sh
2481                 elif $test -f $src/hints/$file.sh; then
2482                         . $src/hints/$file.sh
2483                         $cat $src/hints/$file.sh >> UU/config.sh
2484                 elif $test X$tans = X -o X$tans = Xnone ; then
2485                         : nothing
2486                 else
2487                         : Give one chance to correct a possible typo.
2488                         echo "$file.sh does not exist"
2489                         dflt=$file
2490                         rp="hint to use instead?"
2491                         . UU/myread
2492                         for file in $ans; do
2493                                 if $test -f "$src/hints/$file.sh"; then
2494                                         . $src/hints/$file.sh
2495                                         $cat $src/hints/$file.sh >> UU/config.sh
2496                                 elif $test X$ans = X -o X$ans = Xnone ; then
2497                                         : nothing
2498                                 else
2499                                         echo "$file.sh does not exist -- ignored."
2500                                 fi
2501                         done
2502                 fi
2503         done
2504
2505         hint=recommended
2506         : Remember our hint file for later.
2507         if $test -f "$src/hints/$file.sh" ; then
2508                 hintfile="$file"
2509         else
2510                 hintfile=''
2511         fi
2512 fi
2513 cd UU
2514 ;;
2515 *)
2516         echo " "
2517         echo "Fetching default answers from $config_sh..." >&4
2518         tmp_n="$n"
2519         tmp_c="$c"
2520         cd ..
2521         cp $config_sh config.sh 2>/dev/null
2522         chmod +w config.sh
2523         . ./config.sh
2524         cd UU
2525         cp ../config.sh .
2526         n="$tmp_n"
2527         c="$tmp_c"
2528         hint=previous
2529         ;;
2530 esac
2531 test "$override" && . ./optdef.sh
2532 myuname="$newmyuname"
2533
2534 : Restore computed paths
2535 for file in $loclist $trylist; do
2536         eval $file="\$_$file"
2537 done
2538
2539 cat << EOM
2540
2541 Configure uses the operating system name and version to set some defaults.
2542 The default value is probably right if the name rings a bell. Otherwise,
2543 since spelling matters for me, either accept the default or answer "none"
2544 to leave it blank.
2545
2546 EOM
2547 case "$osname" in
2548         ''|' ')
2549                 case "$hintfile" in
2550                 ''|' '|none) dflt=none ;;
2551                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2552                 esac
2553                 ;;
2554         *) dflt="$osname" ;;
2555 esac
2556 rp="Operating system name?"
2557 . ./myread
2558 case "$ans" in
2559 none)  osname='' ;;
2560 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2561 esac
2562 echo " "
2563 case "$osvers" in
2564         ''|' ')
2565                 case "$hintfile" in
2566                 ''|' '|none) dflt=none ;;
2567                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2568                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2569                         case "$dflt" in
2570                         ''|' ') dflt=none ;;
2571                         esac
2572                         ;;
2573                 esac
2574                 ;;
2575         *) dflt="$osvers" ;;
2576 esac
2577 rp="Operating system version?"
2578 . ./myread
2579 case "$ans" in
2580 none)  osvers='' ;;
2581 *) osvers="$ans" ;;
2582 esac
2583
2584
2585 . ./posthint.sh
2586
2587 : who configured the system
2588 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2589 cf_by=`(logname) 2>/dev/null`
2590 case "$cf_by" in
2591 "")
2592         cf_by=`(whoami) 2>/dev/null`
2593         case "$cf_by" in
2594         "") cf_by=unknown ;;
2595         esac ;;
2596 esac
2597
2598 : set up the script used to warn in case of inconsistency
2599 cat <<EOS >whoa
2600 $startsh
2601 EOS
2602 cat <<'EOSC' >>whoa
2603 dflt=y
2604 echo " "
2605 echo "*** WHOA THERE!!! ***" >&4
2606 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2607 rp="    Keep the $hint value?"
2608 . ./myread
2609 case "$ans" in
2610 y) td=$was; tu=$was;;
2611 esac
2612 EOSC
2613
2614 : function used to set $1 to $val
2615 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2616 case "$val$was" in
2617 $define$undef) . ./whoa; eval "$var=\$td";;
2618 $undef$define) . ./whoa; eval "$var=\$tu";;
2619 *) eval "$var=$val";;
2620 esac'
2621
2622 case "$usethreads" in
2623 $define|true|[yY]*)     dflt='y';;
2624 *) dflt='n';;
2625 esac
2626 cat <<EOM
2627
2628 Perl can be built to take advantage of threads on some systems.
2629 To do so, Configure can be run with -Dusethreads.
2630
2631 Note that threading is a highly experimental feature, and
2632 some known race conditions still remain.  If you choose to try
2633 it, be very sure to not actually deploy it for production
2634 purposes.  README.threads has more details, and is required
2635 reading if you enable threads.
2636
2637 If this doesn't make any sense to you, just accept the default '$dflt'.
2638 EOM
2639 rp='Build a threading Perl?'
2640 . ./myread
2641 case "$ans" in
2642 y|Y)    val="$define" ;;
2643 *)      val="$undef" ;;
2644 esac
2645 set usethreads
2646 eval $setvar
2647
2648 case "$usethreads" in
2649 $define)
2650         $cat <<EOM
2651
2652 As of 5.5.640, Perl has two different internal threading implementations,
2653 the 5.005 version (5005threads) and an interpreter-based version
2654 (ithreads) that has one interpreter per thread.  Both are very 
2655 experimental.  This arrangement exists to help developers work out
2656 which one is better.
2657
2658 If you're a casual user, you probably don't want interpreter-threads
2659 at this time.  There doesn't yet exist a way to create threads from
2660 within Perl in this model, i.e., "use Thread;" will NOT work.
2661 EOM
2662         : Default to ithreads unless overridden on command line or with
2663         : old config.sh
2664         dflt='y'
2665         case "$use5005threads" in
2666                 $define|true|[yY]*) dflt='n';;
2667         esac
2668         case "$useithreads" in
2669                 $undef|false|[nN]*) dflt='n';;
2670         esac
2671         rp='Use interpreter-based ithreads?'
2672         . ./myread
2673         case "$ans" in
2674         y|Y)    val="$define" ;;
2675         *)      val="$undef" ;;
2676         esac
2677         set useithreads
2678         eval $setvar
2679         : Now set use5005threads to the opposite value.
2680         case "$useithreads" in
2681         $define) val="$undef" ;;
2682         *) val="$define" ;;
2683         esac
2684         set use5005threads
2685         eval $setvar
2686         ;;
2687 *)
2688         useithreads="$undef"
2689         use5005threads="$undef"
2690         ;;
2691 esac
2692
2693 case "$d_oldpthreads" in
2694 '')     : Configure tests would be welcome here.  For now, assume undef.
2695         val="$undef" ;;
2696 *)      val="$d_oldpthreads" ;;
2697 esac
2698 set d_oldpthreads
2699 eval $setvar
2700
2701
2702 case "$usethreads" in
2703 "$define"|true|[yY]*)
2704 : Look for a hint-file generated 'call-back-unit'.  If the
2705 : user has specified that a threading perl is to be built,
2706 : we may need to set or change some other defaults.
2707         if $test -f usethreads.cbu; then
2708                 echo "Your platform has some specific hints for threaded builds, using them..."
2709                 . ./usethreads.cbu
2710         else
2711                 $cat <<EOM
2712 (Your platform doesn't have any specific hints for threaded builds.
2713  Assuming POSIX threads, then.)
2714 EOM
2715         fi
2716         ;;
2717 esac
2718
2719 cat <<EOM
2720
2721 Perl can be built so that multiple Perl interpreters can coexist
2722 within the same Perl executable.
2723 EOM
2724
2725 case "$useithreads" in
2726 $define)
2727         cat <<EOM
2728 This multiple interpreter support is required for interpreter-based threads.
2729 EOM
2730         val="$define"
2731         ;;
2732 *)      case "$usemultiplicity" in
2733         $define|true|[yY]*)     dflt='y';;
2734         *) dflt='n';;
2735         esac
2736         echo " "
2737         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2738         rp='Build Perl for multiplicity?'
2739         . ./myread
2740         case "$ans" in
2741         y|Y)    val="$define" ;;
2742         *)      val="$undef" ;;
2743         esac
2744         ;;
2745 esac
2746 set usemultiplicity
2747 eval $setvar
2748
2749 : determine where manual pages are on this system
2750 echo " "
2751 case "$sysman" in
2752 '') 
2753         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2754         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2755         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2756         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2757         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2758         sysman=`./loc . /usr/man/man1 $syspath`
2759         ;;
2760 esac
2761 if $test -d "$sysman"; then
2762         echo "System manual is in $sysman." >&4
2763 else
2764         echo "Could not find manual pages in source form." >&4
2765 fi
2766
2767 : see what memory models we can support
2768 case "$models" in
2769 '')
2770         $cat >pdp11.c <<'EOP'
2771 int main() {
2772 #ifdef pdp11
2773         exit(0);
2774 #else
2775         exit(1);
2776 #endif
2777 }
2778 EOP
2779         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2780         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2781                 dflt='unsplit split'
2782         else
2783                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2784                 case "$tans" in
2785                 X) dflt='none';;
2786                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2787                                 dflt='small'
2788                         else
2789                                 dflt=''
2790                         fi
2791                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2792                                 dflt="$dflt medium"
2793                         fi
2794                         if $test -d /lib/large || $test -d /usr/lib/large; then
2795                                 dflt="$dflt large"
2796                         fi
2797                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2798                                 dflt="$dflt huge"
2799                         fi
2800                 esac
2801         fi;;
2802 *) dflt="$models";;
2803 esac
2804 $cat <<EOM
2805  
2806 Some systems have different model sizes.  On most systems they are called
2807 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2808 split.  If your system doesn't support different memory models, say "none".
2809 If you wish to force everything to one memory model, say "none" here and
2810 put the appropriate flags later when it asks you for other cc and ld flags.
2811 Venix systems may wish to put "none" and let the compiler figure things out.
2812 (In the following question multiple model names should be space separated.)
2813
2814 The default for most systems is "none".
2815
2816 EOM
2817 rp="Which memory models are supported?"
2818 . ./myread
2819 models="$ans"
2820
2821 case "$models" in
2822 none)
2823         small=''
2824         medium=''
2825         large=''
2826         huge=''
2827         unsplit=''
2828         split=''
2829         ;;
2830 *split)
2831         case "$split" in
2832         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2833                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2834                         dflt='-i'
2835                 else
2836                         dflt='none'
2837                 fi;;
2838         *) dflt="$split";;
2839         esac
2840         rp="What flag indicates separate I and D space?"
2841         . ./myread
2842         tans="$ans"
2843         case "$tans" in
2844         none) tans='';;
2845         esac
2846         split="$tans"
2847         unsplit='';;
2848 *large*|*small*|*medium*|*huge*)
2849         case "$models" in
2850         *large*)
2851                 case "$large" in
2852                 '') dflt='-Ml';;
2853                 *) dflt="$large";;
2854                 esac
2855         rp="What flag indicates large model?"
2856         . ./myread
2857         tans="$ans"
2858         case "$tans" in
2859         none) tans='';
2860         esac
2861         large="$tans";;
2862         *) large='';;
2863         esac
2864         case "$models" in
2865         *huge*) case "$huge" in
2866                 '') dflt='-Mh';;
2867                 *) dflt="$huge";;
2868                 esac
2869                 rp="What flag indicates huge model?"
2870                 . ./myread
2871                 tans="$ans"
2872                 case "$tans" in
2873                 none) tans='';
2874                 esac
2875                 huge="$tans";;
2876         *) huge="$large";;
2877         esac
2878         case "$models" in
2879         *medium*) case "$medium" in
2880                 '') dflt='-Mm';;
2881                 *) dflt="$medium";;
2882                 esac
2883                 rp="What flag indicates medium model?"
2884                 . ./myread
2885                 tans="$ans"
2886                 case "$tans" in
2887                 none) tans='';
2888                 esac
2889                 medium="$tans";;
2890         *) medium="$large";;
2891         esac
2892         case "$models" in
2893         *small*) case "$small" in
2894                 '') dflt='none';;
2895                 *) dflt="$small";;
2896                 esac
2897                 rp="What flag indicates small model?"
2898                 . ./myread
2899                 tans="$ans"
2900                 case "$tans" in
2901                 none) tans='';
2902                 esac
2903                 small="$tans";;
2904         *) small='';;
2905         esac
2906         ;;
2907 *)
2908         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2909         ;;
2910 esac
2911 $rm -f pdp11.* pdp11
2912
2913 : make some quick guesses about what we are up against
2914 echo " "
2915 $echo $n "Hmm...  $c"
2916 echo exit 1 >bsd
2917 echo exit 1 >usg
2918 echo exit 1 >v7
2919 echo exit 1 >osf1
2920 echo exit 1 >eunice
2921 echo exit 1 >xenix
2922 echo exit 1 >venix
2923 echo exit 1 >os2
2924 d_bsd="$undef"
2925 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2926 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2927 then
2928         echo "Looks kind of like an OSF/1 system, but we'll see..."
2929         echo exit 0 >osf1
2930 elif test `echo abc | tr a-z A-Z` = Abc ; then
2931         xxx=`./loc addbib blurfl $pth`
2932         if $test -f $xxx; then
2933         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2934                 echo exit 0 >bsd
2935                 echo exit 0 >usg
2936         else
2937                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2938                         echo "Looks kind of like an extended USG system, but we'll see..."
2939                 else
2940                         echo "Looks kind of like a USG system, but we'll see..."
2941                 fi
2942                 echo exit 0 >usg
2943         fi
2944 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2945         echo "Looks kind of like a BSD system, but we'll see..."
2946         d_bsd="$define"
2947         echo exit 0 >bsd
2948 else
2949         echo "Looks kind of like a Version 7 system, but we'll see..."
2950         echo exit 0 >v7
2951 fi
2952 case "$eunicefix" in
2953 *unixtovms*)
2954         $cat <<'EOI'
2955 There is, however, a strange, musty smell in the air that reminds me of
2956 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2957 EOI
2958         echo exit 0 >eunice
2959         d_eunice="$define"
2960 : it so happens the Eunice I know will not run shell scripts in Unix format
2961         ;;
2962 *)
2963         echo " "
2964         echo "Congratulations.  You aren't running Eunice."
2965         d_eunice="$undef"
2966         ;;
2967 esac
2968 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2969 case "$p_" in
2970 :) ;;
2971 *)
2972         $cat <<'EOI'
2973 I have the feeling something is not exactly right, however...don't tell me...
2974 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2975 EOI
2976         echo exit 0 >os2
2977         ;;
2978 esac
2979 if test -f /xenix; then
2980         echo "Actually, this looks more like a XENIX system..."
2981         echo exit 0 >xenix
2982         d_xenix="$define"
2983 else
2984         echo " "
2985         echo "It's not Xenix..."
2986         d_xenix="$undef"
2987 fi
2988 chmod +x xenix
2989 $eunicefix xenix
2990 if test -f /venix; then
2991         echo "Actually, this looks more like a VENIX system..."
2992         echo exit 0 >venix
2993 else
2994         echo " "
2995         if ./xenix; then
2996                 : null
2997         else
2998                 echo "Nor is it Venix..."
2999         fi
3000 fi
3001 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3002 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3003 $rm -f foo
3004
3005 : see if we need a special compiler
3006 echo " "
3007 if ./usg; then
3008         case "$cc" in
3009         '') case "$Mcc" in
3010                 /*) dflt='Mcc';;
3011                 *) case "$large" in
3012                         -M*) dflt='cc';;
3013                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3014                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3015                                                 dflt='cc'
3016                                         else
3017                                                 dflt='cc -M'
3018                                         fi
3019                                 else
3020                                         dflt='cc'
3021                                 fi;;
3022                         esac;;
3023                 esac;;
3024         *)  dflt="$cc";;
3025         esac
3026         case "$dflt" in
3027         *M*)    $cat <<'EOM'
3028 On some older systems the default C compiler will not resolve multiple global
3029 references that happen to have the same name.  On some such systems the "Mcc"
3030 command may be used to force these to be resolved.  On other systems a "cc -M"
3031 command is required.  (Note that the -M flag on other systems indicates a
3032 memory model to use!) If you have the Gnu C compiler, you might wish to use
3033 that instead.
3034
3035 EOM
3036         ;;
3037         esac
3038         rp="Use which C compiler?"
3039         . ./myread
3040         cc="$ans"
3041 else
3042         case "$cc" in
3043         '') dflt=cc;;
3044         *) dflt="$cc";;
3045         esac
3046         rp="Use which C compiler?"
3047         . ./myread
3048         cc="$ans"
3049 fi
3050 : Look for a hint-file generated 'call-back-unit'.  Now that the
3051 : user has specified the compiler, we may need to set or change some
3052 : other defaults.
3053 if $test -f cc.cbu; then
3054     . ./cc.cbu
3055 fi
3056 echo " "
3057 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3058 $cat >gccvers.c <<EOM
3059 #include <stdio.h>
3060 int main() {
3061 #ifdef __GNUC__
3062 #ifdef __VERSION__
3063         printf("%s\n", __VERSION__);
3064 #else
3065         printf("%s\n", "1");
3066 #endif
3067 #endif
3068         exit(0);
3069 }
3070 EOM
3071 if $cc $ldflags -o gccvers gccvers.c; then
3072         gccversion=`./gccvers`
3073         case "$gccversion" in
3074         '') echo "You are not using GNU cc." ;;
3075         *)  echo "You are using GNU cc $gccversion."
3076             ;;
3077         esac
3078 else
3079         echo " "
3080         echo "*** WHOA THERE!!! ***" >&4
3081         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3082         case "$knowitall" in
3083         '')
3084         echo "    You'd better start hunting for one and let me know about it." >&4
3085                 exit 1
3086                 ;;
3087         esac
3088 fi
3089 $rm -f gccvers*
3090 case "$gccversion" in
3091 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3092 esac
3093
3094 : decide how portable to be.  Allow command line overrides.
3095 case "$d_portable" in
3096 "$undef") ;;
3097 *)      d_portable="$define" ;;
3098 esac
3099
3100 : set up shell script to do ~ expansion
3101 cat >filexp <<EOSS
3102 $startsh
3103 : expand filename
3104 case "\$1" in
3105  ~/*|~)
3106         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3107         ;;
3108  ~*)
3109         if $test -f /bin/csh; then
3110                 /bin/csh -f -c "glob \$1"
3111                 failed=\$?
3112                 echo ""
3113                 exit \$failed
3114         else
3115                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3116                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3117                 if $test ! -d "\$dir"; then
3118                         me=\`basename \$0\`
3119                         echo "\$me: can't locate home directory for: \$name" >&2
3120                         exit 1
3121                 fi
3122                 case "\$1" in
3123                 */*)
3124                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3125                         ;;
3126                 *)
3127                         echo \$dir
3128                         ;;
3129                 esac
3130         fi
3131         ;;
3132 *)
3133         echo \$1
3134         ;;
3135 esac
3136 EOSS
3137 chmod +x filexp
3138 $eunicefix filexp
3139
3140 : now set up to get a file name
3141 cat <<EOS >getfile
3142 $startsh
3143 EOS
3144 cat <<'EOSC' >>getfile
3145 tilde=''
3146 fullpath=''
3147 already=''
3148 skip=''
3149 none_ok=''
3150 exp_file=''
3151 nopath_ok=''
3152 orig_rp="$rp"
3153 orig_dflt="$dflt"
3154 case "$gfpth" in
3155 '') gfpth='.' ;;
3156 esac
3157
3158 case "$fn" in
3159 *\(*)
3160         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3161         fn=`echo $fn | sed 's/(.*)//'`
3162         ;;
3163 esac
3164
3165 case "$fn" in
3166 *:*)
3167         loc_file=`expr $fn : '.*:\(.*\)'`
3168         fn=`expr $fn : '\(.*\):.*'`
3169         ;;
3170 esac
3171
3172 case "$fn" in
3173 *~*) tilde=true;;
3174 esac
3175 case "$fn" in
3176 */*) fullpath=true;;
3177 esac
3178 case "$fn" in
3179 *+*) skip=true;;
3180 esac
3181 case "$fn" in
3182 *n*) none_ok=true;;
3183 esac
3184 case "$fn" in
3185 *e*) exp_file=true;;
3186 esac
3187 case "$fn" in
3188 *p*) nopath_ok=true;;
3189 esac
3190
3191 case "$fn" in
3192 *f*) type='File';;
3193 *d*) type='Directory';;
3194 *l*) type='Locate';;
3195 esac
3196
3197 what="$type"
3198 case "$what" in
3199 Locate) what='File';;
3200 esac
3201
3202 case "$exp_file" in
3203 '')
3204         case "$d_portable" in
3205         "$define") ;;
3206         *) exp_file=true;;
3207         esac
3208         ;;
3209 esac
3210
3211 cd ..
3212 while test "$type"; do
3213         redo=''
3214         rp="$orig_rp"
3215         dflt="$orig_dflt"
3216         case "$tilde" in
3217         true) rp="$rp (~name ok)";;
3218         esac
3219         . UU/myread
3220         if test -f UU/getfile.ok && \
3221                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3222         then
3223                 value="$ans"
3224                 ansexp="$ans"
3225                 break
3226         fi
3227         case "$ans" in
3228         none)
3229                 value=''
3230                 ansexp=''
3231                 case "$none_ok" in
3232                 true) type='';;
3233                 esac
3234                 ;;
3235         *)
3236                 case "$tilde" in
3237                 '') value="$ans"
3238                         ansexp="$ans";;
3239                 *)
3240                         value=`UU/filexp $ans`
3241                         case $? in
3242                         0)
3243                                 if test "$ans" != "$value"; then
3244                                         echo "(That expands to $value on this system.)"
3245                                 fi
3246                                 ;;
3247                         *) value="$ans";;
3248                         esac
3249                         ansexp="$value"
3250                         case "$exp_file" in
3251                         '') value="$ans";;
3252                         esac
3253                         ;;
3254                 esac
3255                 case "$fullpath" in
3256                 true)
3257                         case "$ansexp" in
3258                         /*) value="$ansexp" ;;
3259                         *)
3260                                 redo=true
3261                                 case "$already" in
3262                                 true)
3263                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3264                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3265                                         ;;
3266                                 *)
3267                                 echo "Please give a full path name, starting with slash." >&4
3268                                         case "$tilde" in
3269                                         true)
3270                                 echo "Note that using ~name is ok provided it expands well." >&4
3271                                                 already=true
3272                                                 ;;
3273                                         esac
3274                                 esac
3275                                 ;;
3276                         esac
3277                         ;;
3278                 esac
3279                 case "$redo" in
3280                 '')
3281                         case "$type" in
3282                         File)
3283                                 for fp in $gfpth; do
3284                                         if test "X$fp" = X.; then
3285                                             pf="$ansexp"
3286                                         else    
3287                                             pf="$fp/$ansexp"
3288                                         fi
3289                                         if test -f "$pf"; then
3290                                                 type=''
3291                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3292                                         then
3293                                                 echo "($value is not a plain file, but that's ok.)"
3294                                                 type=''
3295                                         fi
3296                                         if test X"$type" = X; then
3297                                             value="$pf"
3298                                             break
3299                                         fi
3300                                 done
3301                                 ;;
3302                         Directory)
3303                                 for fp in $gfpth; do
3304                                         if test "X$fp" = X.; then
3305                                             pf="$ansexp"
3306                                         else    
3307                                             pf="$fp/$ansexp"
3308                                         fi
3309                                         if test -d "$pf"; then
3310                                                 type=''
3311                                                 value="$pf"
3312                                                 break
3313                                         fi
3314                                 done
3315                                 ;;
3316                         Locate)
3317                                 if test -d "$ansexp"; then
3318                                         echo "(Looking for $loc_file in directory $value.)"
3319                                         value="$value/$loc_file"
3320                                         ansexp="$ansexp/$loc_file"
3321                                 fi
3322                                 if test -f "$ansexp"; then
3323                                         type=''
3324                                 fi
3325                                 case "$nopath_ok" in
3326                                 true)   case "$value" in
3327                                         */*) ;;
3328                                         *)      echo "Assuming $value will be in people's path."
3329                                                 type=''
3330                                                 ;;
3331                                         esac
3332                                         ;;
3333                                 esac
3334                                 ;;
3335                         esac
3336
3337                         case "$skip" in
3338                         true) type='';
3339                         esac
3340
3341                         case "$type" in
3342                         '') ;;
3343                         *)
3344                                 if test "$fastread" = yes; then
3345                                         dflt=y
3346                                 else
3347                                         dflt=n
3348                                 fi
3349                                 rp="$what $value doesn't exist.  Use that name anyway?"
3350                                 . UU/myread
3351                                 dflt=''
3352                                 case "$ans" in
3353                                 y*) type='';;
3354                                 *) echo " ";;
3355                                 esac
3356                                 ;;
3357                         esac
3358                         ;;
3359                 esac
3360                 ;;
3361         esac
3362 done
3363 cd UU
3364 ans="$value"
3365 rp="$orig_rp"
3366 dflt="$orig_dflt"
3367 rm -f getfile.ok
3368 test "X$gfpthkeep" != Xy && gfpth=""
3369 EOSC
3370
3371 : What should the include directory be ?
3372 echo " "
3373 $echo $n "Hmm...  $c"
3374 dflt='/usr/include'
3375 incpath=''
3376 mips_type=''
3377 if $test -f /bin/mips && /bin/mips; then
3378         echo "Looks like a MIPS system..."
3379         $cat >usr.c <<'EOCP'
3380 #ifdef SYSTYPE_BSD43
3381 /bsd43
3382 #endif
3383 EOCP
3384         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3385                 dflt='/bsd43/usr/include'
3386                 incpath='/bsd43'
3387                 mips_type='BSD 4.3'
3388         else
3389                 mips_type='System V'
3390         fi
3391         $rm -f usr.c usr.out
3392         echo "and you're compiling with the $mips_type compiler and libraries."
3393         xxx_prompt=y
3394         echo "exit 0" >mips
3395 else
3396         echo "Doesn't look like a MIPS system."
3397         xxx_prompt=n
3398         echo "exit 1" >mips
3399 fi
3400 chmod +x mips
3401 $eunicefix mips
3402 case "$usrinc" in
3403 '') ;;
3404 *) dflt="$usrinc";;
3405 esac
3406 case "$xxx_prompt" in
3407 y)      fn=d/
3408         echo " "
3409         rp='Where are the include files you want to use?'
3410         . ./getfile
3411         usrinc="$ans"
3412         ;;
3413 *)      usrinc="$dflt"
3414         ;;
3415 esac
3416
3417 : see how we invoke the C preprocessor
3418 echo " "
3419 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3420 cat <<'EOT' >testcpp.c
3421 #define ABC abc
3422 #define XYZ xyz
3423 ABC.XYZ
3424 EOT
3425 cd ..
3426 if test ! -f cppstdin; then
3427         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3428                 # AIX cc -E doesn't show the absolute headerfile
3429                 # locations but we'll cheat by using the -M flag.
3430                 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
3431         else
3432                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3433         fi
3434 else
3435         echo "Keeping your $hint cppstdin wrapper."
3436 fi
3437 chmod 755 cppstdin
3438 wrapper=`pwd`/cppstdin
3439 ok='false'
3440 cd UU
3441
3442 if $test "X$cppstdin" != "X" && \
3443         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3444         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3445 then
3446         echo "You used to use $cppstdin $cppminus so we'll use that again."
3447         case "$cpprun" in
3448         '') echo "But let's see if we can live without a wrapper..." ;;
3449         *)
3450                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3451                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3452                 then
3453                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3454                         ok='true'
3455                 else
3456                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3457                 fi
3458                 ;;
3459         esac
3460 else
3461         case "$cppstdin" in
3462         '') ;;
3463         *)
3464                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3465                 ;;
3466         esac
3467 fi
3468
3469 if $ok; then
3470         : nothing
3471 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3472         $cc -E <testcpp.c >testcpp.out 2>&1; \
3473         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3474         echo "Yup, it does."
3475         x_cpp="$cc -E"
3476         x_minus='';
3477 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3478         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3479         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3480         echo "Yup, it does."
3481         x_cpp="$cc -E"
3482         x_minus='-';
3483 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3484         $cc -P <testcpp.c >testcpp.out 2>&1; \
3485         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3486         echo "Yipee, that works!"
3487         x_cpp="$cc -P"
3488         x_minus='';
3489 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3490         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3491         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3492         echo "At long last!"
3493         x_cpp="$cc -P"
3494         x_minus='-';
3495 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3496         $cpp <testcpp.c >testcpp.out 2>&1; \
3497         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3498         echo "It works!"
3499         x_cpp="$cpp"
3500         x_minus='';
3501 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3502         $cpp - <testcpp.c >testcpp.out 2>&1; \
3503         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3504         echo "Hooray, it works!  I was beginning to wonder."
3505         x_cpp="$cpp"
3506         x_minus='-';
3507 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3508         $wrapper <testcpp.c >testcpp.out 2>&1; \
3509         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3510         x_cpp="$wrapper"
3511         x_minus=''
3512         echo "Eureka!"
3513 else
3514         dflt=''
3515         rp="No dice.  I can't find a C preprocessor.  Name one:"
3516         . ./myread
3517         x_cpp="$ans"
3518         x_minus=''
3519         $x_cpp <testcpp.c >testcpp.out 2>&1
3520         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3521                 echo "OK, that will do." >&4
3522         else
3523 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3524                 exit 1
3525         fi
3526 fi
3527
3528 case "$ok" in
3529 false)
3530         cppstdin="$x_cpp"
3531         cppminus="$x_minus"
3532         cpprun="$x_cpp"
3533         cpplast="$x_minus"
3534         set X $x_cpp
3535         shift
3536         case "$1" in
3537         "$cpp")
3538                 echo "Perhaps can we force $cc -E using a wrapper..."
3539                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3540                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3541                 then
3542                         echo "Yup, we can."
3543                         cppstdin="$wrapper"
3544                         cppminus='';
3545                 else
3546                         echo "Nope, we'll have to live without it..."
3547                 fi
3548                 ;;
3549         esac
3550         case "$cpprun" in
3551         "$wrapper")
3552                 cpprun=''
3553                 cpplast=''
3554                 ;;
3555         esac
3556         ;;
3557 esac
3558
3559 case "$cppstdin" in
3560 "$wrapper"|'cppstdin') ;;
3561 *) $rm -f $wrapper;;
3562 esac
3563 $rm -f testcpp.c testcpp.out
3564
3565 : Set private lib path
3566 case "$plibpth" in
3567 '') if ./mips; then
3568                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3569         fi;;
3570 esac
3571 case "$libpth" in
3572 ' ') dlist='';;
3573 '') dlist="$loclibpth $plibpth $glibpth";;
3574 *) dlist="$libpth";;
3575 esac
3576
3577 : Now check and see which directories actually exist, avoiding duplicates
3578 libpth=''
3579 for xxx in $dlist
3580 do
3581     if $test -d $xxx; then
3582                 case " $libpth " in
3583                 *" $xxx "*) ;;
3584                 *) libpth="$libpth $xxx";;
3585                 esac
3586     fi
3587 done
3588 $cat <<'EOM'
3589
3590 Some systems have incompatible or broken versions of libraries.  Among
3591 the directories listed in the question below, please remove any you
3592 know not to be holding relevant libraries, and add any that are needed.
3593 Say "none" for none.
3594
3595 EOM
3596 case "$libpth" in
3597 '') dflt='none';;
3598 *)
3599         set X $libpth
3600         shift
3601         dflt=${1+"$@"}
3602         ;;
3603 esac
3604 rp="Directories to use for library searches?"
3605 . ./myread
3606 case "$ans" in
3607 none) libpth=' ';;
3608 *) libpth="$ans";;
3609 esac
3610
3611 : compute shared library extension
3612 case "$so" in
3613 '')
3614         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3615                 dflt='sl'
3616         else
3617                 dflt='so'
3618         fi
3619         ;;
3620 *) dflt="$so";;
3621 esac
3622 $cat <<EOM
3623
3624 On some systems, shared libraries may be available.  Answer 'none' if
3625 you want to suppress searching of shared libraries for the remainder
3626 of this configuration.
3627
3628 EOM
3629 rp='What is the file extension used for shared libraries?'
3630 . ./myread
3631 so="$ans"
3632
3633 : Define several unixisms.
3634 : Hints files or command line option can be used to override them.
3635 : The convoluted testing is in case hints files set either the old
3636 : or the new name.
3637 case "$_exe" in
3638 '')     case "$exe_ext" in
3639     '') ;;
3640         *)      _exe="$exe_ext" ;;
3641         esac
3642         ;;
3643 esac
3644 case "$_a" in
3645 '')     case "$lib_ext" in
3646     '') _a='.a';;
3647         *)      _a="$lib_ext" ;;
3648         esac
3649         ;;
3650 esac
3651 case "$_o" in
3652 '') case "$obj_ext" in
3653         '')     _o='.o';;
3654         *)      _o="$obj_ext";;
3655         esac
3656         ;;
3657 esac
3658 case "$p_" in
3659 '') case "$path_sep" in
3660         '')     p_=':';;
3661         *)      p_="$path_sep";;
3662         esac
3663         ;;
3664 esac
3665 exe_ext=$_exe
3666 lib_ext=$_a
3667 obj_ext=$_o
3668 path_sep=$p_
3669
3670 : Which makefile gets called first.  This is used by make depend.
3671 case "$firstmakefile" in
3672 '') firstmakefile='makefile';;
3673 esac
3674
3675 case "$usesocks" in
3676 $define|true|[yY]*)     dflt='y';;
3677 *) dflt='n';;
3678 esac
3679 cat <<EOM
3680
3681 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3682 Configure must be run with -Dusesocks.
3683
3684 If this doesn't make any sense to you, just accept the default '$dflt'.
3685 EOM
3686 rp='Build Perl for SOCKS?'
3687 . ./myread
3688 case "$ans" in
3689 y|Y)    val="$define" ;;     
3690 *)      val="$undef" ;;
3691 esac
3692 set usesocks
3693 eval $setvar
3694
3695 : Looking for optional libraries
3696 echo " "
3697 echo "Checking for optional libraries..." >&4
3698 case "$libs" in
3699 ' '|'') dflt='';;
3700 *) dflt="$libs";;
3701 esac
3702 case "$libswanted" in
3703 '') libswanted='c_s';;
3704 esac
3705 case "$usesocks" in
3706 $define)
3707         libswanted="$libswanted socks5 socks5_sh"
3708         ;;
3709 esac
3710 libsfound=''
3711 libsfiles=''
3712 libsdirs=''
3713 libspath=''
3714 for thisdir in $libpth $xlibpth; do
3715   test -d $thisdir && libspath="$libspath $thisdir"
3716 done
3717 for thislib in $libswanted; do
3718         for thisdir in $libspath; do
3719             xxx=''
3720             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3721                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3722                 $test -f "$xxx" && eval $libscheck
3723                 $test -f "$xxx" && libstyle=shared
3724             fi
3725             if test ! -f "$xxx"; then
3726                 xxx=$thisdir/lib$thislib.$so
3727                 $test -f "$xxx" && eval $libscheck
3728                 $test -f "$xxx" && libstyle=shared
3729             fi  
3730             if test ! -f "$xxx"; then
3731                 xxx=$thisdir/lib$thislib$_a
3732                 $test -f "$xxx" && eval $libscheck
3733                 $test -f "$xxx" && libstyle=static
3734             fi
3735             if test ! -f "$xxx"; then
3736                 xxx=$thisdir/$thislib$_a
3737                 $test -f "$xxx" && eval $libscheck
3738                 $test -f "$xxx" && libstyle=static
3739             fi
3740             if test ! -f "$xxx"; then
3741                 xxx=$thisdir/lib${thislib}_s$_a
3742                 $test -f "$xxx" && eval $libscheck
3743                 $test -f "$xxx" && libstyle=static
3744                 $test -f "$xxx" && thislib=${thislib}_s
3745             fi
3746             if test ! -f "$xxx"; then
3747                 xxx=$thisdir/Slib$thislib$_a
3748                 $test -f "$xxx" && eval $libscheck
3749                 $test -f "$xxx" && libstyle=static
3750             fi
3751             if $test -f "$xxx"; then
3752                 case "$libstyle" in
3753                 shared) echo "Found -l$thislib (shared)." ;;
3754                 static) echo "Found -l$thislib." ;;
3755                 *)      echo "Found -l$thislib ($libstyle)." ;;
3756                 esac
3757                 case " $dflt " in
3758                 *"-l$thislib "*);;
3759                 *) dflt="$dflt -l$thislib"
3760                    libsfound="$libsfound $xxx"
3761                    yyy=`basename $xxx`
3762                    libsfiles="$libsfiles $yyy"
3763                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3764                    case " $libsdirs " in
3765                    *" $yyy "*) ;;
3766                    *) libsdirs="$libsdirs $yyy" ;;
3767                    esac
3768                    ;;
3769                 esac
3770                 break
3771             fi  
3772         done
3773         if $test ! -f "$xxx"; then
3774             echo "No -l$thislib."
3775         fi
3776 done
3777 set X $dflt
3778 shift
3779 dflt="$*"
3780 case "$libs" in
3781 '') dflt="$dflt";;
3782 *) dflt="$libs";;
3783 esac
3784 case "$dflt" in
3785 ' '|'') dflt='none';;
3786 esac
3787
3788 $cat <<EOM
3789
3790 In order to compile $package on your machine, a number of libraries
3791 are usually needed.  Include any other special libraries here as well.
3792 Say "none" for none.  The default list is almost always right.
3793 EOM
3794
3795 echo " "
3796 rp="What libraries to use?"
3797 . ./myread
3798 case "$ans" in
3799 none) libs=' ';;
3800 *) libs="$ans";;
3801 esac
3802
3803 : determine optimization, if desired, or use for debug flag also
3804 case "$optimize" in
3805 ' '|$undef) dflt='none';;
3806 '') dflt='-O';;
3807 *) dflt="$optimize";;
3808 esac
3809 $cat <<EOH
3810
3811 By default, $package compiles with the -O flag to use the optimizer.
3812 Alternately, you might want to use the symbolic debugger, which uses
3813 the -g flag (on traditional Unix systems).  Either flag can be
3814 specified here.  To use neither flag, specify the word "none".
3815
3816 EOH
3817 rp="What optimizer/debugger flag should be used?"
3818 . ./myread
3819 optimize="$ans"
3820 case "$optimize" in
3821 'none') optimize=" ";;
3822 esac
3823
3824 dflt=''
3825 : We will not override a previous value, but we might want to
3826 : augment a hint file
3827 case "$hint" in
3828 default|recommended)
3829         case "$gccversion" in
3830         1*) dflt='-fpcc-struct-return' ;;
3831         esac
3832         case "$optimize" in
3833         *-g*) dflt="$dflt -DDEBUGGING";;
3834         esac
3835         case "$gccversion" in
3836         2*) if test -d /etc/conf/kconfig.d &&
3837                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3838                 then
3839                         dflt="$dflt -posix"
3840                 fi
3841                 ;;
3842         esac
3843         case "$gccversion" in
3844         1*) ;;
3845         2.[0-8]*) ;;
3846         ?*)     echo " "
3847                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3848                 echo 'int main(void) { return 0; }' > gcctest.c
3849                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3850                         echo "Yes, it does." 2>&1
3851                         case "$ccflags" in
3852                         *strict-aliasing*) 
3853                                 echo "Leaving current flags $ccflags alone." 2>&1
3854                                 ;;
3855                         *) dflt="$dflt -fno-strict-aliasing" ;;
3856                         esac
3857                 else
3858                         echo "Nope, it doesn't, but that's ok." 2>&1
3859                 fi
3860                 ;;
3861         esac
3862         ;;
3863 esac
3864
3865 case "$mips_type" in
3866 *BSD*|'') inclwanted="$locincpth $usrinc";;
3867 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3868 esac
3869 for thisincl in $inclwanted; do
3870         if $test -d $thisincl; then
3871                 if $test x$thisincl != x$usrinc; then
3872                         case "$dflt" in
3873                         *$thisincl*);;
3874                         *) dflt="$dflt -I$thisincl";;
3875                         esac
3876                 fi
3877         fi
3878 done
3879
3880 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3881         xxx=true;
3882 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3883         xxx=true;
3884 else
3885         xxx=false;
3886 fi;
3887 if $xxx; then
3888         case "$dflt" in
3889         *$2*);;
3890         *) dflt="$dflt -D$2";;
3891         esac;
3892 fi'
3893
3894 set signal.h LANGUAGE_C; eval $inctest
3895
3896 case "$usesocks" in
3897 $define)
3898         ccflags="$ccflags -DSOCKS"
3899         ;;
3900 esac
3901
3902 case "$hint" in
3903 default|recommended) dflt="$ccflags $dflt" ;;
3904 *) dflt="$ccflags";;
3905 esac
3906
3907 case "$dflt" in
3908 ''|' ') dflt=none;;
3909 esac
3910 $cat <<EOH
3911
3912 Your C compiler may want other flags.  For this question you should include
3913 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3914 but you should NOT include libraries or ld flags like -lwhatever.  If you
3915 want $package to honor its debug switch, you should include -DDEBUGGING here.
3916 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3917
3918 To use no flags, specify the word "none".
3919
3920 EOH
3921 set X $dflt
3922 shift
3923 dflt=${1+"$@"}
3924 rp="Any additional cc flags?"
3925 . ./myread
3926 case "$ans" in
3927 none) ccflags='';;
3928 *) ccflags="$ans";;
3929 esac
3930
3931 : the following weeds options from ccflags that are of no interest to cpp
3932 cppflags="$ccflags"
3933 case "$gccversion" in
3934 1*) cppflags="$cppflags -D__GNUC__"
3935 esac
3936 case "$mips_type" in
3937 '');;
3938 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3939 esac
3940 case "$cppflags" in
3941 '');;
3942 *)
3943         echo " "
3944         echo "Let me guess what the preprocessor flags are..." >&4
3945         set X $cppflags
3946         shift
3947         cppflags=''
3948         $cat >cpp.c <<'EOM'
3949 #define BLURFL foo
3950
3951 BLURFL xx LFRULB
3952 EOM
3953         previous=''
3954         for flag in $*
3955         do
3956                 case "$flag" in
3957                 -*) ftry="$flag";;
3958                 *) ftry="$previous $flag";;
3959                 esac
3960                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3961                         >cpp1.out 2>/dev/null && \
3962                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3963                         >cpp2.out 2>/dev/null && \
3964                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3965                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3966                 then
3967                         cppflags="$cppflags $ftry"
3968                         previous=''
3969                 else
3970                         previous="$flag"
3971                 fi
3972         done
3973         set X $cppflags
3974         shift
3975         cppflags=${1+"$@"}
3976         case "$cppflags" in
3977         *-*)  echo "They appear to be: $cppflags";;
3978         esac
3979         $rm -f cpp.c cpp?.out
3980         ;;
3981 esac
3982
3983 : flags used in final linking phase
3984 case "$ldflags" in
3985 '') if ./venix; then
3986                 dflt='-i -z'
3987         else
3988                 dflt=''
3989         fi
3990         case "$ccflags" in
3991         *-posix*) dflt="$dflt -posix" ;;
3992         esac
3993         ;;
3994 *) dflt="$ldflags";;
3995 esac
3996
3997 : Try to guess additional flags to pick up local libraries.
3998 for thislibdir in $libpth; do
3999         case " $loclibpth " in
4000         *" $thislibdir "*)
4001                 case "$dflt " in 
4002                 *"-L$thislibdir "*) ;;
4003                 *)  dflt="$dflt -L$thislibdir" ;;
4004                 esac
4005                 ;;
4006         esac
4007 done
4008
4009 case "$dflt" in
4010 '') dflt='none' ;;
4011 esac
4012
4013 $cat <<EOH
4014
4015 Your C linker may need flags.  For this question you should
4016 include -L/whatever and any other flags used by the C linker, but you
4017 should NOT include libraries like -lwhatever.
4018
4019 Make sure you include the appropriate -L/path flags if your C linker
4020 does not normally search all of the directories you specified above,
4021 namely
4022         $libpth
4023 To use no flags, specify the word "none".
4024
4025 EOH
4026
4027 rp="Any additional ld flags (NOT including libraries)?"
4028 . ./myread
4029 case "$ans" in
4030 none) ldflags='';;
4031 *) ldflags="$ans";;
4032 esac
4033 rmlist="$rmlist pdp11"
4034
4035 : coherency check
4036 echo " "
4037 echo "Checking your choice of C compiler and flags for coherency..." >&4
4038 $cat > try.c <<'EOF'
4039 #include <stdio.h>
4040 int main() { printf("Ok\n"); exit(0); }
4041 EOF
4042 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4043 shift
4044 $cat >try.msg <<'EOM'
4045 I've tried to compile and run the following simple program:
4046
4047 EOM
4048 $cat try.c >> try.msg
4049
4050 $cat >> try.msg <<EOM
4051
4052 I used the command:
4053
4054         $*
4055         ./try
4056
4057 and I got the following output:
4058
4059 EOM
4060 dflt=y
4061 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4062         if sh -c './try' >>try.msg 2>&1; then
4063                 xxx=`./try`
4064                 case "$xxx" in
4065                 "Ok") dflt=n ;;
4066                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4067                         case " $libs " in
4068                         *" -lsfio "*)
4069                                 cat >> try.msg <<'EOQS'
4070 If $libs contains -lsfio, and sfio is mis-configured, then it
4071 sometimes (apparently) runs and exits with a 0 status, but with no
4072 output!  It may have to do with sfio's use of _exit vs. exit.
4073
4074 EOQS
4075                                 rp="You have a big problem.  Shall I abort Configure"
4076                                 dflt=y
4077                                 ;;
4078                         esac
4079                         ;;
4080                 esac
4081         else
4082                 echo "The program compiled OK, but exited with status $?." >>try.msg
4083                 rp="You have a problem.  Shall I abort Configure"
4084                 dflt=y
4085         fi
4086 else
4087         echo "I can't compile the test program." >>try.msg
4088         rp="You have a BIG problem.  Shall I abort Configure"
4089         dflt=y
4090 fi
4091 case "$dflt" in
4092 y)
4093         $cat try.msg >&4
4094         case "$knowitall" in
4095         '')
4096                 echo "(The supplied flags or libraries might be incorrect.)"
4097                 ;;
4098         *) dflt=n;;
4099         esac
4100         echo " "
4101         . ./myread
4102         case "$ans" in
4103         n*|N*) ;;
4104         *)      echo "Ok.  Stopping Configure." >&4
4105                 exit 1
4106                 ;;
4107         esac
4108         ;;
4109 n) echo "OK, that should do.";;
4110 esac
4111 $rm -f try try.* core
4112
4113 : define an is-a-typedef? function
4114 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4115 case "$inclist" in
4116 "") inclist="sys/types.h";;
4117 esac;
4118 eval "varval=\$$var";
4119 case "$varval" in
4120 "")
4121         $rm -f temp.c;
4122         for inc in $inclist; do
4123                 echo "#include <$inc>" >>temp.c;
4124         done;
4125         echo "#ifdef $type" >> temp.c;
4126         echo "printf(\"We have $type\");" >> temp.c;
4127         echo "#endif" >> temp.c;
4128         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4129         if $contains $type temp.E >/dev/null 2>&1; then
4130                 eval "$var=\$type";
4131         else
4132                 eval "$var=\$def";
4133         fi;
4134         $rm -f temp.?;;
4135 *) eval "$var=\$varval";;
4136 esac'
4137
4138 : define an is-a-typedef? function that prompts if the type is not available.
4139 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4140 case "$inclist" in
4141 "") inclist="sys/types.h";;
4142 esac;
4143 eval "varval=\$$var";
4144 case "$varval" in
4145 "")
4146         $rm -f temp.c;
4147         for inc in $inclist; do
4148                 echo "#include <$inc>" >>temp.c;
4149         done;
4150         echo "#ifdef $type" >> temp.c;
4151         echo "printf(\"We have $type\");" >> temp.c;
4152         echo "#endif" >> temp.c;
4153         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4154         echo " " ;
4155         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4156         if $contains $type temp.E >/dev/null 2>&1; then
4157                 echo "$type found." >&4;
4158                 eval "$var=\$type";
4159         else
4160                 echo "$type NOT found." >&4;
4161                 dflt="$def";
4162                 . ./myread ;
4163                 eval "$var=\$ans";
4164         fi;
4165         $rm -f temp.?;;
4166 *) eval "$var=\$varval";;
4167 esac'
4168
4169 : define a shorthand compile call
4170 compile='
4171 mc_file=$1;
4172 shift;
4173 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4174 : define a shorthand compile call for compilations that should be ok.
4175 compile_ok='
4176 mc_file=$1;
4177 shift;
4178 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4179
4180 : check for lengths of integral types
4181 echo " "
4182 case "$intsize" in
4183 '')
4184         echo "Checking to see how big your integers are..." >&4
4185         $cat >intsize.c <<'EOCP'
4186 #include <stdio.h>
4187 int main()
4188 {
4189         printf("intsize=%d;\n", (int)sizeof(int));
4190         printf("longsize=%d;\n", (int)sizeof(long));
4191         printf("shortsize=%d;\n", (int)sizeof(short));
4192         exit(0);
4193 }
4194 EOCP
4195         set intsize
4196         if eval $compile_ok && ./intsize > /dev/null; then
4197                 eval `./intsize`
4198                 echo "Your integers are $intsize bytes long."
4199                 echo "Your long integers are $longsize bytes long."
4200                 echo "Your short integers are $shortsize bytes long."
4201         else
4202                 $cat >&4 <<EOM
4203 !
4204 Help! I can't compile and run the intsize test program: please enlighten me!
4205 (This is probably a misconfiguration in your system or libraries, and
4206 you really ought to fix it.  Still, I'll try anyway.)
4207 !
4208 EOM
4209                 dflt=4
4210                 rp="What is the size of an integer (in bytes)?"
4211                 . ./myread
4212                 intsize="$ans"
4213                 dflt=$intsize
4214                 rp="What is the size of a long integer (in bytes)?"
4215                 . ./myread
4216                 longsize="$ans"
4217                 dflt=2
4218                 rp="What is the size of a short integer (in bytes)?"
4219                 . ./myread
4220                 shortsize="$ans"
4221         fi
4222         ;;
4223 esac
4224 $rm -f intsize intsize.*
4225
4226 : see what type lseek is declared as in the kernel
4227 rp="What is the type used for lseek's offset on this system?"
4228 set off_t lseektype long stdio.h sys/types.h
4229 eval $typedef_ask
4230
4231 echo " "
4232 echo "Checking to see how big your file offsets are..." >&4
4233 $cat >try.c <<EOCP
4234 #include <sys/types.h>
4235 #include <stdio.h>
4236 int main()
4237 {
4238     printf("%d\n", (int)sizeof($lseektype));
4239     return(0); 
4240 }
4241 EOCP
4242 set try
4243 if eval $compile_ok; then
4244         lseeksize=`./try`
4245         echo "Your file offsets are $lseeksize bytes long."
4246 else
4247         dflt=$longsize
4248         echo " "
4249         echo "(I can't seem to compile the test program.  Guessing...)"
4250         rp="What is the size of your file offsets (in bytes)?"
4251         . ./myread
4252         lseeksize="$ans"
4253 fi
4254 $rm -f try.c try
4255
4256 : see what type file positions are declared as in the library
4257 rp="What is the type for file position used by fsetpos()?"
4258 set fpos_t fpostype long stdio.h sys/types.h
4259 eval $typedef_ask
4260
4261 echo " "
4262 case "$fpostype" in
4263 *_t) zzz="$fpostype"    ;;
4264 *)   zzz="fpos_t"       ;;
4265 esac
4266 echo "Checking the size of $zzz..." >&4 
4267 cat > try.c <<EOCP
4268 #include <sys/types.h>
4269 #include <stdio.h>
4270 int main() {
4271     printf("%d\n", (int)sizeof($fpostype));
4272     exit(0);
4273 }
4274 EOCP
4275 set try
4276 if eval $compile_ok; then
4277         yyy=`./try`
4278         case "$yyy" in
4279         '')     fpossize=4
4280                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4281                 ;;
4282         *)      fpossize=$yyy
4283                 echo "Your $zzz is $fpossize bytes long."
4284                 ;;
4285         esac
4286 else
4287         dflt="$longsize"
4288         echo " " >&4
4289         echo "(I can't compile the test program.  Guessing...)" >&4
4290         rp="What is the size of your file positions (in bytes)?"
4291         . ./myread
4292         fpossize="$ans"
4293 fi
4294
4295
4296
4297 # Backward compatibility (uselfs is deprecated).
4298 case "$uselfs" in
4299 "$define"|true|[yY]*)
4300         cat <<EOM >&4
4301
4302 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4303 EOM
4304         uselargefiles="$define"
4305         ;;
4306 esac                          
4307
4308 case "$lseeksize:$fpossize" in
4309 8:8) cat <<EOM
4310
4311 You can have files larger than 2 gigabytes.
4312 EOM
4313    val="$define" ;;
4314 *)    case "$uselargefiles" in
4315    "$undef"|false|[nN]*) dflt='n' ;;
4316    *)   dflt='y' ;;
4317    esac
4318    cat <<EOM
4319
4320 Perl can be built to understand large files (files larger than 2 gigabytes)
4321 on some systems.  To do so, Configure can be run with -Duselargefiles.
4322
4323 If this doesn't make any sense to you, just accept the default '$dflt'.
4324 EOM
4325    rp='Try to understand large files, if available?'
4326    . ./myread
4327    case "$ans" in
4328    y|Y)         val="$define" ;;
4329    *)           val="$undef"  ;;
4330    esac
4331    ;;
4332 esac
4333 set uselargefiles
4334 eval $setvar
4335 case "$uselargefiles" in
4336 "$define")
4337 : Look for a hint-file generated 'call-back-unit'.  If the
4338 : user has specified that a large files perl is to be built,
4339 : we may need to set or change some other defaults.
4340         if $test -f uselfs.cbu; then
4341                 echo "Your platform has some specific hints for large file builds, using them..."
4342                 . ./uselfs.cbu
4343                 echo " "
4344                 echo "Rechecking to see how big your file offsets are..." >&4
4345                 $cat >try.c <<EOCP
4346 #include <sys/types.h>
4347 #include <stdio.h>
4348 int main()
4349 {
4350     printf("%d\n", (int)sizeof($lseektype));
4351     return(0); 
4352 }
4353 EOCP
4354                 set try
4355                 if eval $compile_ok; then
4356                         lseeksize=`./try`
4357                         $echo "Your file offsets are now $lseeksize bytes long."
4358                 else
4359                         dflt="$lseeksize"
4360                         echo " "
4361                         echo "(I can't seem to compile the test program.  Guessing...)"
4362                         rp="What is the size of your file offsets (in bytes)?"
4363                         . ./myread
4364                         lseeksize="$ans"
4365                 fi
4366                 case "$fpostype" in
4367                 *_t) zzz="$fpostype"    ;;
4368                 *)   zzz="fpos_t"       ;;
4369                 esac
4370                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4371                 $cat > try.c <<EOCP
4372 #include <sys/types.h>
4373 #include <stdio.h>
4374 int main() {
4375     printf("%d\n", (int)sizeof($fpostype));
4376     exit(0);
4377 }
4378 EOCP
4379                 set try
4380                 if eval $compile_ok; then
4381                         yyy=`./try`
4382                         dflt="$lseeksize"
4383                         case "$yyy" in
4384                         '')     echo " "
4385                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4386                                 ;;
4387                         *)      fpossize=$yyy
4388                                 echo " $fpossize bytes." >&4
4389                                 ;;
4390                         esac
4391                 else
4392                         dflt="$fpossize"
4393                         echo " "
4394                         echo "(I can't compile the test program.  Guessing...)" >&4
4395                         rp="What is the size of your file positions (in bytes)?"
4396                         . ./myread
4397                         fpossize="$ans"
4398                 fi
4399                 $rm -f try.c try
4400         fi
4401         ;;
4402 esac
4403
4404
4405 case "$usemorebits" in
4406 "$define"|true|[yY]*)
4407         use64bitint="$define"
4408         uselongdouble="$define"
4409         usemorebits="$define"
4410         ;;
4411 *)      usemorebits="$undef"
4412         ;;
4413 esac
4414
4415
4416 # Backward compatibility (uselonglong is deprecated).
4417 case "$uselonglong" in
4418 "$define"|true|[yY]*)
4419         cat <<EOM >&4
4420
4421 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4422 EOM
4423         use64bitint="$define"
4424         ;;
4425 esac                          
4426 # Backward compatibility (use64bits is deprecated).
4427 case "$use64bits" in
4428 "$define"|true|[yY]*)
4429         cat <<EOM >&4
4430
4431 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4432 EOM
4433         use64bitint="$define"
4434         ;;
4435 esac                          
4436 # Thinko compatibilities.
4437 case "$use64bitints" in
4438 "$define"|true|[yY]*)
4439         cat <<EOM >&4
4440
4441 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4442 EOM
4443         use64bitint="$define"
4444         ;;
4445 esac                          
4446 case "$use64bitsall" in
4447 "$define"|true|[yY]*)
4448         cat <<EOM >&4
4449
4450 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4451 EOM
4452         use64bitall="$define"
4453         ;;
4454 esac                          
4455
4456 case "$ccflags" in
4457 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4458 esac
4459 case "$use64bitall" in
4460 "$define"|true|[yY]*) use64bitint="$define" ;;
4461 esac
4462
4463 case "$longsize" in
4464 8) cat <<EOM
4465
4466 You have natively 64-bit long integers.
4467 EOM
4468    val="$define"
4469    ;;
4470 *) case "$use64bitint" in
4471    "$define"|true|[yY]*) dflt='y';;
4472    *) dflt='n';;
4473    esac
4474    cat <<EOM
4475
4476 Perl can be built to take advantage of 64-bit integer types
4477 on some systems.  To do so, Configure can be run with -Duse64bitint.
4478 Choosing this option will most probably introduce binary incompatibilities.
4479
4480 If this doesn't make any sense to you, just accept the default '$dflt'.
4481 EOM
4482    rp='Try to use 64-bit integers, if available?'
4483    . ./myread
4484    case "$ans" in
4485    [yY]*) val="$define" ;;
4486    *)     val="$undef"  ;;
4487    esac
4488    ;;
4489 esac
4490 set use64bitint
4491 eval $setvar
4492
4493 case "$use64bitint" in
4494 "$define")      case "$longsize" in
4495                 8) dflt='y' ;;
4496                 *) dflt='n' ;;
4497                 esac
4498                 ;;
4499 *)      case "$use64bitall" in
4500         "$define"|true|[yY]*) dflt='y' ;;
4501         *) dflt='n' ;;
4502         esac
4503         ;;
4504 esac 
4505 cat <<EOM
4506
4507 You may also choose to try maximal 64-bitness.  It means using as much
4508 64-bitness as possible on the platform.  This in turn means even more
4509 binary incompatibilities.  On the other hand, your platform may not
4510 have any more 64-bitness available than what you already have chosen.
4511
4512 If this doesn't make any sense to you, just accept the default '$dflt'.
4513 EOM
4514 rp='Try to use maximal 64-bit support, if available?'
4515 . ./myread
4516 case "$ans" in
4517 [yY]*) val="$define" ;;
4518 *)     val="$undef"  ;;
4519 esac
4520 set use64bitall
4521 eval $setvar
4522 case "$use64bitall" in
4523 "$define")
4524         case "$use64bitint" in
4525         "$undef")
4526                 cat <<EOM
4527
4528 Since you have chosen a maximally 64-bit build, I'm also turning on
4529 the use of 64-bit integers.
4530 EOM
4531                 use64bitint="$define" ;;
4532         esac
4533         ;;
4534 esac
4535
4536 case "$use64bitint" in
4537 "$define"|true|[yY]*)
4538 : Look for a hint-file generated 'call-back-unit'.  If the
4539 : user has specified that a 64-bit perl is to be built,
4540 : we may need to set or change some other defaults.
4541         if $test -f use64bitint.cbu; then
4542                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4543                 . ./use64bitint.cbu
4544         fi
4545         case "$longsize" in
4546         4) case "$ccflags" in
4547            *-DUSE_64_BIT_INT*) ;;
4548            *) ccflags="$ccflags -DUSE_64_BIT_INT";;
4549            esac
4550            case "$archname64" in
4551            '') archname64=64int ;;
4552            esac
4553            ;;
4554         esac
4555         ;;
4556 esac
4557
4558 case "$use64bitall" in
4559 "$define"|true|[yY]*)
4560 : Look for a hint-file generated 'call-back-unit'.  If the
4561 : user has specified that a maximally 64-bit perl is to be built,
4562 : we may need to set or change some other defaults.
4563         if $test -f use64bitall.cbu; then
4564                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4565                 . ./use64bitall.cbu
4566         fi
4567         case "$longsize" in
4568         4) case "$ccflags" in
4569            *-DUSE_64_BIT_ALL*) ;;
4570            *) ccflags="$ccflags -DUSE_64_BIT_ALL";;
4571            esac
4572            case "$archname64" in
4573            ''|64int) archname64=64all ;;
4574            esac
4575            ;;
4576         esac
4577         ;;
4578 esac
4579
4580 : determine the architecture name
4581 echo " "
4582 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4583         tarch=`arch`"-$osname"
4584 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4585         if uname -m > tmparch 2>&1 ; then
4586                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4587                         -e 's/$/'"-$osname/" tmparch`
4588         else
4589                 tarch="$osname"
4590         fi
4591         $rm -f tmparch
4592 else
4593         tarch="$osname"
4594 fi
4595 case "$myarchname" in
4596 ''|"$tarch") ;;
4597 *)
4598         echo "(Your architecture name used to be $myarchname.)"
4599         archname=''
4600         ;;
4601 esac
4602 myarchname="$tarch"
4603 case "$archname" in
4604 '') dflt="$tarch";;
4605 *) dflt="$archname";;
4606 esac
4607 rp='What is your architecture name'
4608 . ./myread
4609 archname="$ans"
4610 case "$usethreads" in
4611 $define)
4612         echo "Threads selected." >&4
4613         case "$archname" in
4614         *-thread*) echo "...and architecture name already has -thread." >&4
4615                 ;;
4616         *)      archname="$archname-thread"
4617                 echo "...setting architecture name to $archname." >&4
4618                 ;;
4619         esac
4620         ;;
4621 esac
4622 case "$usemultiplicity" in
4623 $define)
4624         echo "Multiplicity selected." >&4
4625         case "$archname" in
4626         *-multi*) echo "...and architecture name already has -multi." >&4
4627                 ;;
4628         *)      archname="$archname-multi"
4629                 echo "...setting architecture name to $archname." >&4
4630                 ;;
4631         esac
4632         ;;
4633 esac
4634 case "$use64bitint" in
4635 $define)
4636         case "$archname64" in
4637         '')
4638                 ;;
4639         *)
4640                 case "$archname" in
4641                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4642                         ;;
4643                 *)      archname="$archname-$archname64"
4644                         echo "...setting architecture name to $archname." >&4
4645                         ;;
4646                 esac
4647                 ;;
4648         esac
4649 esac
4650
4651 : determine root of directory hierarchy where package will be installed.
4652 case "$prefix" in
4653 '')
4654         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4655         ;;
4656 *)
4657         dflt="$prefix"
4658         ;;
4659 esac
4660 $cat <<EOM
4661
4662 By default, $package will be installed in $dflt/bin, manual pages
4663 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4664 installation directories. Typically this is something like /usr/local.
4665 If you wish to have binaries under /usr/bin but other parts of the
4666 installation under /usr/local, that's ok: you will be prompted
4667 separately for each of the installation directories, the prefix being
4668 only used to set the defaults.
4669
4670 EOM
4671 fn=d~
4672 rp='Installation prefix to use?'
4673 . ./getfile
4674 oldprefix=''
4675 case "$prefix" in
4676 '') ;;
4677 *)
4678         case "$ans" in
4679         "$prefix") ;;
4680         *) oldprefix="$prefix";;
4681         esac
4682         ;;
4683 esac
4684 prefix="$ans"
4685 prefixexp="$ansexp"
4686
4687 : is AFS running?
4688 echo " "
4689 case "$afs" in
4690 $define|true)   afs=true ;;
4691 $undef|false)   afs=false ;;
4692 *)      if test -d /afs; then
4693                 afs=true
4694         else
4695                 afs=false
4696         fi
4697         ;;
4698 esac
4699 if $afs; then
4700         echo "AFS may be running... I'll be extra cautious then..." >&4
4701 else
4702         echo "AFS does not seem to be running..." >&4
4703 fi
4704
4705 : determine installation prefix for where package is to be installed.
4706 if $afs; then 
4707 $cat <<EOM
4708
4709 Since you are running AFS, I need to distinguish the directory in which
4710 files will reside from the directory in which they are installed (and from
4711 which they are presumably copied to the former directory by occult means).
4712
4713 EOM
4714         case "$installprefix" in
4715         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4716         *) dflt="$installprefix";;
4717         esac
4718 else
4719 $cat <<EOM
4720
4721 In some special cases, particularly when building $package for distribution,
4722 it is convenient to distinguish between the directory in which files should 
4723 be installed from the directory ($prefix) in which they 
4724 will eventually reside.  For most users, these two directories are the same.
4725
4726 EOM
4727         case "$installprefix" in
4728         '') dflt=$prefix ;;
4729         *) dflt=$installprefix;;
4730         esac
4731 fi
4732 fn=d~
4733 rp='What installation prefix should I use for installing files?'
4734 . ./getfile
4735 installprefix="$ans"
4736 installprefixexp="$ansexp"
4737
4738 : set the prefixit variable, to compute a suitable default value
4739 prefixit='case "$3" in
4740 ""|none)
4741         case "$oldprefix" in
4742         "") eval "$1=\"\$$2\"";;
4743         *)
4744                 case "$3" in
4745                 "") eval "$1=";;
4746                 none)
4747                         eval "tp=\"\$$2\"";
4748                         case "$tp" in
4749                         ""|" ") eval "$1=\"\$$2\"";;
4750                         *) eval "$1=";;
4751                         esac;;
4752                 esac;;
4753         esac;;
4754 *)
4755         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4756         case "$tp" in
4757         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4758         /*-$oldprefix/*|\~*-$oldprefix/*)
4759                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4760         *) eval "$1=\"\$$2\"";;
4761         esac;;
4762 esac'
4763
4764
4765 : get the patchlevel
4766 echo " "
4767 echo "Getting the current patchlevel..." >&4
4768 if $test -r $rsrc/patchlevel.h;then
4769         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4770         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4771         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4772         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4773         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4774         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4775 else
4776         revision=0
4777         patchlevel=0
4778         subversion=0
4779         api_revision=0
4780         api_version=0
4781         api_subversion=0
4782 fi
4783 $echo $n "(You have $package revision $revision" $c
4784 $echo $n " patchlevel $patchlevel" $c
4785 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4786 echo ".)"
4787 case "$osname" in
4788 dos|vms)
4789         : XXX Should be a Configure test for double-dots in filenames.
4790         version=`echo $revision $patchlevel $subversion | \
4791                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4792         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4793                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4794         ;;
4795 *)
4796         version=`echo $revision $patchlevel $subversion | \
4797                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4798         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4799                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4800         ;;
4801 esac
4802 : Special case the 5.005_xx maintenance series, which used 5.005
4803 : without any subversion label as a subdirectory in $sitelib
4804 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4805         api_versionstring='5.005'
4806 fi
4807
4808 : determine installation style
4809 : For now, try to deduce it from prefix unless it is already set.
4810 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4811 case "$installstyle" in
4812 '')     case "$prefix" in
4813                 *perl*) dflt='lib';;
4814                 *) dflt='lib/perl5' ;;
4815         esac
4816         ;;
4817 *)      dflt='lib/perl5' ;;
4818 esac
4819 : Probably not worth prompting for this since we prompt for all
4820 : the directories individually, and the prompt would be too long and
4821 : confusing anyway.
4822 installstyle=$dflt
4823
4824 : determine where private library files go
4825 : Usual default is /usr/local/lib/perl5/$version.
4826 : Also allow things like /opt/perl/lib/$version, since 
4827 : /opt/perl/lib/perl5... would be redundant.
4828 : The default "style" setting is made in installstyle.U
4829 case "$installstyle" in
4830 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4831 *)       set dflt privlib lib/$version ;;
4832 esac
4833 eval $prefixit
4834 $cat <<EOM
4835
4836 There are some auxiliary files for $package that need to be put into a
4837 private library directory that is accessible by everyone.
4838
4839 EOM
4840 fn=d~+
4841 rp='Pathname where the private library files will reside?'
4842 . ./getfile
4843 privlib="$ans"
4844 privlibexp="$ansexp"
4845 : Change installation prefix, if necessary.
4846 if $test X"$prefix" != X"$installprefix"; then
4847         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4848 else
4849         installprivlib="$privlibexp"
4850 fi
4851
4852 : set the prefixup variable, to restore leading tilda escape
4853 prefixup='case "$prefixexp" in
4854 "$prefix") ;;
4855 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4856 esac'
4857
4858 : determine where public architecture dependent libraries go
4859 set archlib archlib
4860 eval $prefixit
4861 : privlib default is /usr/local/lib/$package/$version
4862 : archlib default is /usr/local/lib/$package/$version/$archname
4863 : privlib may have an optional trailing /share.
4864 tdflt=`echo $privlib | $sed 's,/share$,,'`
4865 tdflt=$tdflt/$archname
4866 case "$archlib" in
4867 '')     dflt=$tdflt
4868         ;;
4869 *)      dflt="$archlib"
4870     ;;
4871 esac
4872 $cat <<EOM
4873
4874 $spackage contains architecture-dependent library files.  If you are
4875 sharing libraries in a heterogeneous environment, you might store
4876 these files in a separate location.  Otherwise, you can just include
4877 them with the rest of the public library files.
4878
4879 EOM
4880 fn=d+~
4881 rp='Where do you want to put the public architecture-dependent libraries?'
4882 . ./getfile
4883 archlib="$ans"
4884 archlibexp="$ansexp"
4885 if $test X"$archlib" = X"$privlib"; then
4886         d_archlib="$undef"
4887 else
4888         d_archlib="$define"
4889 fi
4890 : Change installation prefix, if necessary.
4891 if $test X"$prefix" != X"$installprefix"; then
4892         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4893 else
4894         installarchlib="$archlibexp"
4895 fi
4896
4897
4898 : Binary compatibility with 5.005 is not possible for builds
4899 : with advanced features
4900 case "$usethreads$usemultiplicity" in
4901 *define*)
4902         bincompat5005="$undef"
4903         d_bincompat5005="$undef"
4904         ;;
4905 *)      $cat <<EOM
4906
4907 Perl 5.006 can be compiled for binary compatibility with 5.005.
4908 If you decide to do so, you will be able to continue using most
4909 of the extensions that were compiled for Perl 5.005.
4910
4911 EOM
4912         case "$bincompat5005$d_bincompat5005" in
4913         *"$undef"*) dflt=n ;;
4914         *) dflt=y ;;
4915         esac
4916         rp='Binary compatibility with Perl 5.005?'
4917         . ./myread
4918         case "$ans" in
4919         y*) val="$define" ;;
4920         *)  val="$undef" ;;
4921         esac
4922         set d_bincompat5005
4923         eval $setvar
4924         case "$d_bincompat5005" in
4925         "$define")
4926                 bincompat5005="$define"
4927                 ;;
4928         *)      bincompat5005="$undef"
4929                 d_bincompat5005="$undef"
4930                 ;;
4931         esac
4932         ;;
4933 esac
4934
4935
4936 : see if setuid scripts can be secure
4937 $cat <<EOM
4938
4939 Some kernels have a bug that prevents setuid #! scripts from being
4940 secure.  Some sites have disabled setuid #! scripts because of this.
4941
4942 First let's decide if your kernel supports secure setuid #! scripts.
4943 (If setuid #! scripts would be secure but have been disabled anyway,
4944 don't say that they are secure if asked.)
4945
4946 EOM
4947
4948 val="$undef"
4949 if $test -d /dev/fd; then
4950         echo "#!$ls" >reflect
4951         chmod +x,u+s reflect
4952         ./reflect >flect 2>&1
4953         if $contains "/dev/fd" flect >/dev/null; then
4954                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4955                 val="$define"
4956         else
4957                 $cat <<EOM
4958 If you are not sure if they are secure, I can check but I'll need a
4959 username and password different from the one you are using right now.
4960 If you don't have such a username or don't want me to test, simply
4961 enter 'none'.
4962
4963 EOM
4964                 rp='Other username to test security of setuid scripts with?'
4965                 dflt='none'
4966                 . ./myread
4967                 case "$ans" in
4968                 n|none)
4969                         case "$d_suidsafe" in
4970                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4971                                 dflt=n;;
4972                         "$undef")
4973                                 echo "Well, the $hint value is *not* secure." >&4
4974                                 dflt=n;;
4975                         *)      echo "Well, the $hint value *is* secure." >&4
4976                                 dflt=y;;
4977                         esac
4978                         ;;
4979                 *)
4980                         $rm -f reflect flect
4981                         echo "#!$ls" >reflect
4982                         chmod +x,u+s reflect
4983                         echo >flect
4984                         chmod a+w flect
4985                         echo '"su" will (probably) prompt you for '"$ans's password."
4986                         su $ans -c './reflect >flect'
4987                         if $contains "/dev/fd" flect >/dev/null; then
4988                                 echo "Okay, it looks like setuid scripts are secure." >&4
4989                                 dflt=y
4990                         else
4991                                 echo "I don't think setuid scripts are secure." >&4
4992                                 dflt=n
4993                         fi
4994                         ;;
4995                 esac
4996                 rp='Does your kernel have *secure* setuid scripts?'
4997                 . ./myread
4998                 case "$ans" in
4999                 [yY]*)  val="$define";;
5000                 *)      val="$undef";;
5001                 esac
5002         fi
5003 else
5004         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5005         echo "(That's for file descriptors, not floppy disks.)"
5006         val="$undef"
5007 fi
5008 set d_suidsafe
5009 eval $setvar
5010
5011 $rm -f reflect flect
5012
5013 : now see if they want to do setuid emulation
5014 echo " "
5015 val="$undef"
5016 case "$d_suidsafe" in
5017 "$define")
5018         val="$undef"
5019         echo "No need to emulate SUID scripts since they are secure here." >& 4
5020         ;;
5021 *)
5022         $cat <<EOM
5023 Some systems have disabled setuid scripts, especially systems where
5024 setuid scripts cannot be secure.  On systems where setuid scripts have
5025 been disabled, the setuid/setgid bits on scripts are currently
5026 useless.  It is possible for $package to detect those bits and emulate
5027 setuid/setgid in a secure fashion.  This emulation will only work if
5028 setuid scripts have been disabled in your kernel.
5029
5030 EOM
5031         case "$d_dosuid" in
5032         "$define") dflt=y ;;
5033         *) dflt=n ;;
5034         esac
5035         rp="Do you want to do setuid/setgid emulation?"
5036         . ./myread
5037         case "$ans" in
5038         [yY]*)  val="$define";;
5039         *)      val="$undef";;
5040         esac
5041         ;;
5042 esac
5043 set d_dosuid
5044 eval $setvar
5045
5046 : determine filename position in cpp output
5047 echo " "
5048 echo "Computing filename position in cpp output for #include directives..." >&4
5049 echo '#include <stdio.h>' > foo.c
5050 $cat >fieldn <<EOF
5051 $startsh
5052 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5053 $grep '^[       ]*#.*stdio\.h' | \
5054 while read cline; do
5055         pos=1
5056         set \$cline
5057         while $test \$# -gt 0; do
5058                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5059                         echo "\$pos"
5060                         exit 0
5061                 fi
5062                 shift
5063                 pos=\`expr \$pos + 1\`
5064         done
5065 done
5066 EOF
5067 chmod +x fieldn
5068 fieldn=`./fieldn`
5069 $rm -f foo.c fieldn
5070 case $fieldn in
5071 '') pos='???';;
5072 1) pos=first;;
5073 2) pos=second;;
5074 3) pos=third;;
5075 *) pos="${fieldn}th";;
5076 esac
5077 echo "Your cpp writes the filename in the $pos field of the line."
5078
5079 : locate header file
5080 $cat >findhdr <<EOF
5081 $startsh
5082 wanted=\$1
5083 name=''
5084 for usrincdir in $usrinc
5085 do
5086         if test -f \$usrincdir/\$wanted; then
5087                 echo "\$usrincdir/\$wanted"
5088                 exit 0
5089         fi
5090 done
5091 awkprg='{ print \$$fieldn }'
5092 echo "#include <\$wanted>" > foo\$\$.c
5093 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5094 $grep "^[       ]*#.*\$wanted" | \
5095 while read cline; do
5096         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5097         case "\$name" in
5098         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5099         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5100         *) exit 2;;
5101         esac;
5102 done;
5103 #
5104 # status = 0: grep returned 0 lines, case statement not executed
5105 # status = 1: headerfile found
5106 # status = 2: while loop executed, no headerfile found
5107 #
5108 status=\$?
5109 $rm -f foo\$\$.c;
5110 if test \$status -eq 1; then
5111         exit 0;
5112 fi
5113 exit 1
5114 EOF
5115 chmod +x findhdr
5116
5117 : define an alternate in-header-list? function
5118 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5119 cont=true; xxf="echo \"<\$1> found.\" >&4";
5120 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5121 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5122 esac;
5123 case $# in 4) instead=instead;; *) instead="at last";; esac;
5124 while $test "$cont"; do
5125         xxx=`./findhdr $1`
5126         var=$2; eval "was=\$$2";
5127         if $test "$xxx" && $test -r "$xxx";
5128         then eval $xxf;
5129         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5130                 cont="";
5131         else eval $xxnf;
5132         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5133         set $yyy; shift; shift; yyy=$@;
5134         case $# in 0) cont="";;
5135         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5136                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5137         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5138                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5139         esac;
5140 done;
5141 while $test "$yyy";
5142 do set $yyy; var=$2; eval "was=\$$2";
5143         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5144         set $yyy; shift; shift; yyy=$@;
5145 done'
5146
5147 : see if this is a malloc.h system
5148 set malloc.h i_malloc
5149 eval $inhdr
5150
5151 : see if stdlib is available
5152 set stdlib.h i_stdlib
5153 eval $inhdr
5154
5155 : determine which malloc to compile in
5156 echo " "
5157 case "$usemymalloc" in
5158 ''|[yY]*|true|$define)  dflt='y' ;;
5159 *)      dflt='n' ;;
5160 esac
5161 rp="Do you wish to attempt to use the malloc that comes with $package?"
5162 . ./myread
5163 usemymalloc="$ans"
5164 case "$ans" in
5165 y*|true)
5166         usemymalloc='y'
5167         mallocsrc='malloc.c'
5168         mallocobj="malloc$_o"
5169         d_mymalloc="$define"
5170         case "$libs" in
5171         *-lmalloc*)
5172                 : Remove malloc from list of libraries to use
5173                 echo "Removing unneeded -lmalloc from library list" >&4
5174                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5175                 shift
5176                 libs="$*"
5177                 echo "libs = $libs" >&4
5178                 ;;
5179         esac
5180         ;;
5181 *)
5182         usemymalloc='n'
5183         mallocsrc=''
5184         mallocobj=''
5185         d_mymalloc="$undef"
5186         ;;
5187 esac
5188
5189 : compute the return types of malloc and free
5190 echo " "
5191 $cat >malloc.c <<END
5192 #$i_malloc I_MALLOC
5193 #$i_stdlib I_STDLIB
5194 #include <stdio.h>
5195 #include <sys/types.h>
5196 #ifdef I_MALLOC
5197 #include <malloc.h>
5198 #endif
5199 #ifdef I_STDLIB
5200 #include <stdlib.h>
5201 #endif
5202 #ifdef TRY_MALLOC
5203 void *malloc();
5204 #endif
5205 #ifdef TRY_FREE
5206 void free();
5207 #endif
5208 END
5209 case "$malloctype" in
5210 '')
5211         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5212                 malloctype='void *'
5213         else
5214                 malloctype='char *'
5215         fi
5216         ;;
5217 esac
5218 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5219
5220 case "$freetype" in
5221 '')
5222         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5223                 freetype='void'
5224         else
5225                 freetype='int'
5226         fi
5227         ;;
5228 esac
5229 echo "Your system uses $freetype free(), it would seem." >&4
5230 $rm -f malloc.[co]
5231 $cat <<EOM
5232
5233 The installation process will also create a directory for
5234 vendor-supplied add-ons.  Vendors who supply perl with their system
5235 may find it convenient to place all vendor-supplied files in this
5236 directory rather than in the main distribution directory.  This will
5237 ease upgrades between binary-compatible maintenance versions of perl.
5238
5239 Of course you may also use these directories in whatever way you see
5240 fit.  For example, you might use them to access modules shared over a
5241 company-wide network.
5242
5243 The default answer should be fine for most people.
5244 This causes further questions about vendor add-ons to be skipped
5245 and no vendor-specific directories will be configured for perl.
5246
5247 EOM
5248 rp='Do you want to configure vendor-specific add-on directories?'
5249 case "$usevendorprefix" in
5250 define|true|[yY]*) dflt=y ;;
5251 *)      : User may have set vendorprefix directly on Configure command line.
5252         case "$vendorprefix" in
5253         ''|' ') dflt=n ;;
5254         *)      dflt=y ;;
5255         esac
5256         ;;
5257 esac
5258 . ./myread
5259 case "$ans" in
5260 [yY]*)  fn=d~+
5261         rp='Installation prefix to use for vendor-supplied add-ons?'
5262         case "$vendorprefix" in
5263         '') dflt='' ;;
5264         *)  dflt=$vendorprefix ;;
5265         esac
5266         . ./getfile
5267         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5268         oldvendorprefix=''
5269         case "$vendorprefix" in
5270         '') ;;
5271         *)      case "$ans" in
5272                 "$prefix") ;;
5273                 *) oldvendorprefix="$prefix";;
5274                 esac
5275                 ;;
5276         esac
5277         usevendorprefix="$define"
5278         vendorprefix="$ans"
5279         vendorprefixexp="$ansexp"
5280         ;;
5281 *)      usevendorprefix="$undef"
5282         vendorprefix=''
5283         vendorprefixexp=''
5284         ;;
5285 esac
5286
5287 case "$vendorprefix" in
5288 '')     d_vendorlib="$undef"
5289         vendorlib=''
5290         vendorlibexp=''
5291         ;;
5292 *)      d_vendorlib="$define"
5293         : determine where vendor-supplied modules go.
5294         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5295         case "$vendorlib" in
5296         '')
5297                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5298                 case "$installstyle" in
5299                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5300                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5301                 esac
5302                 ;;
5303         *)      dflt="$vendorlib"
5304                 ;;
5305         esac
5306         fn=d~+
5307         rp='Pathname for the vendor-supplied library files?'
5308         . ./getfile
5309         vendorlib="$ans"
5310         vendorlibexp="$ansexp"
5311         ;;
5312 esac
5313 : Change installation prefix, if necessary.
5314 if $test X"$prefix" != X"$installprefix"; then
5315         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5316 else
5317         installvendorlib="$vendorlibexp"
5318 fi
5319
5320 : Cruising for prototypes
5321 echo " "
5322 echo "Checking out function prototypes..." >&4
5323 $cat >prototype.c <<'EOCP'
5324 int main(int argc, char *argv[]) {
5325         exit(0);}
5326 EOCP
5327 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5328         echo "Your C compiler appears to support function prototypes."
5329         val="$define"
5330 else
5331         echo "Your C compiler doesn't seem to understand function prototypes."
5332         val="$undef"
5333 fi
5334 set prototype
5335 eval $setvar
5336 $rm -f prototype*
5337
5338 case "$prototype" in
5339 "$define") ;;
5340 *)      ansi2knr='ansi2knr'
5341         echo " "
5342         cat <<EOM >&4
5343
5344 $me:  FATAL ERROR:
5345 This version of $package can only be compiled by a compiler that 
5346 understands function prototypes.  Unfortunately, your C compiler 
5347         $cc $ccflags
5348 doesn't seem to understand them.  Sorry about that.
5349
5350 If GNU cc is available for your system, perhaps you could try that instead.  
5351
5352 Eventually, we hope to support building Perl with pre-ANSI compilers.
5353 If you would like to help in that effort, please contact <perlbug@perl.org>.
5354
5355 Aborting Configure now.
5356 EOM
5357         exit 2
5358         ;;
5359 esac
5360
5361 : determine where public executables go
5362 echo " "
5363 set dflt bin bin
5364 eval $prefixit
5365 fn=d~
5366 rp='Pathname where the public executables will reside?'
5367 . ./getfile
5368 if $test "X$ansexp" != "X$binexp"; then
5369         installbin=''
5370 fi
5371 bin="$ans"
5372 binexp="$ansexp"
5373 : Change installation prefix, if necessary.
5374 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5375 if $test X"$prefix" != X"$installprefix"; then
5376         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5377 else
5378         installbin="$binexp"
5379 fi
5380
5381 : Find perl5.005 or later.
5382 echo "Looking for a previously installed perl5.005 or later... "
5383 case "$perl5" in
5384 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5385                 : Check if this perl is recent and can load a simple module
5386                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5387                         perl5=$tdir/perl
5388                         break;
5389                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5390                         perl5=$tdir/perl
5391                         break;
5392                 fi
5393         done
5394         ;;
5395 *)      perl5="$perl5"
5396         ;;
5397 esac
5398 case "$perl5" in
5399 '')     echo "None found.  That's ok.";;
5400 *)      echo "Using $perl5." ;;
5401 esac
5402
5403 $cat <<EOM
5404
5405 After $package is installed, you may wish to install various
5406 add-on modules and utilities.  Typically, these add-ons will
5407 be installed under $prefix with the rest
5408 of this package.  However, you may wish to install such add-ons
5409 elsewhere under a different prefix.
5410
5411 If you do not wish to put everything under a single prefix, that's
5412 ok.  You will be prompted for the individual locations; this siteprefix
5413 is only used to suggest the defaults.
5414
5415 The default should be fine for most people.
5416
5417 EOM
5418 fn=d~+
5419 rp='Installation prefix to use for add-on modules and utilities?'
5420 : XXX Here might be another good place for an installstyle setting.
5421 case "$siteprefix" in
5422 '') dflt=$prefix ;;
5423 *)  dflt=$siteprefix ;;
5424 esac
5425 . ./getfile
5426 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5427 oldsiteprefix=''
5428 case "$siteprefix" in
5429 '') ;;
5430 *)      case "$ans" in
5431         "$prefix") ;;
5432         *) oldsiteprefix="$prefix";;
5433         esac
5434         ;;
5435 esac
5436 siteprefix="$ans"
5437 siteprefixexp="$ansexp"
5438
5439 : determine where site specific libraries go.
5440 : Usual default is /usr/local/lib/perl5/site_perl/$version
5441 : The default "style" setting is made in installstyle.U
5442 : XXX No longer works with Prefixit stuff.
5443 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5444 case "$sitelib" in
5445 '') case "$installstyle" in
5446         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5447         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5448         esac
5449         ;;
5450 *)      dflt="$sitelib"
5451         ;;
5452 esac
5453 $cat <<EOM
5454
5455 The installation process will create a directory for
5456 site-specific extensions and modules.  Most users find it convenient
5457 to place all site-specific files in this directory rather than in the
5458 main distribution directory.
5459
5460 EOM
5461 fn=d~+
5462 rp='Pathname for the site-specific library files?'
5463 . ./getfile
5464 sitelib="$ans"
5465 sitelibexp="$ansexp"
5466 : Change installation prefix, if necessary.
5467 if $test X"$prefix" != X"$installprefix"; then
5468         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5469 else
5470         installsitelib="$sitelibexp"
5471 fi
5472
5473 : Determine list of previous versions to include in @INC
5474 $cat > getverlist <<EOPL
5475 #!$perl5 -w
5476 use File::Basename;
5477 \$api_versionstring = "$api_versionstring";
5478 \$version = "$version";
5479 \$sitelib = "$sitelib";
5480 \$archname = "$archname";
5481 EOPL
5482         $cat >> getverlist <<'EOPL'
5483 # Can't have leading @ because metaconfig interprets it as a command!
5484 ;@inc_version_list=();
5485 $stem=dirname($sitelib);
5486 # XXX Redo to do opendir/readdir? 
5487 if (-d $stem) {
5488     chdir($stem);
5489     ;@candidates = glob("5.*");
5490 }
5491 else {
5492     ;@candidates = ();
5493 }
5494
5495 # XXX ToDo:  These comparisons must be reworked when two-digit
5496 # subversions come along, so that 5.7.10 compares as greater than
5497 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5498 # widespread that we can use the built-in version vectors rather
5499 # than reinventing them here.  For 5.6.0, however, we must
5500 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5501 foreach $d (@candidates) {
5502     if ($d lt $version) {
5503         if ($d ge $api_versionstring) {
5504             unshift(@inc_version_list, "$d/$archname", $d);
5505         }
5506         elsif ($d ge "5.005") {
5507             unshift(@inc_version_list, $d);
5508         }
5509     }
5510     else {
5511         # Skip newer version.  I.e. don't look in
5512         # 5.7.0 if we're installing 5.6.1.
5513     }
5514 }
5515
5516 if (@inc_version_list) {
5517     print join(' ', @inc_version_list);
5518 }
5519 else {
5520     # Blank space to preserve value for next Configure run.
5521     print " ";
5522 }
5523 EOPL
5524 chmod +x getverlist
5525 case "$inc_version_list" in
5526 '')     if test -x "$perl5"; then
5527                 dflt=`$perl5 getverlist`
5528         else
5529                 dflt='none'
5530         fi
5531         ;;
5532 $undef) dflt='none' ;;
5533 *)  dflt="$inc_version_list" ;;
5534 esac
5535 case "$dflt" in
5536 ''|' ') dflt=none ;;
5537 esac
5538 $cat <<'EOM'
5539
5540 In order to ease the process of upgrading, this version of perl 
5541 can be configured to use modules built and installed with earlier 
5542 versions of perl that were installed under $prefix.  Specify here
5543 the list of earlier versions that this version of perl should check.
5544 If Configure detected no earlier versions of perl installed under
5545 $prefix, then the list will be empty.  Answer 'none' to tell perl
5546 to not search earlier versions.
5547
5548 The default should almost always be sensible, so if you're not sure,
5549 just accept the default.
5550 EOM
5551
5552 rp='List of earlier versions to include in @INC?'
5553 . ./myread
5554 case "$ans" in
5555 [Nn]one|''|' ') inc_version_list=' ' ;;
5556 *) inc_version_list="$ans" ;;
5557 esac
5558 case "$inc_version_list" in
5559 ''|' ') 
5560         inc_version_list_init='0';;
5561 *)      inc_version_list_init=`echo $inc_version_list |
5562                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5563         ;;
5564 esac
5565 $rm -f getverlist
5566
5567 : determine whether to install perl also as /usr/bin/perl
5568
5569 echo " "
5570 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5571         $cat <<EOM
5572 Many scripts expect to perl to be installed as /usr/bin/perl.
5573 I can install the perl you are about to compile also as /usr/bin/perl
5574 (in addition to $installbin/perl).
5575 EOM
5576         case "$installusrbinperl" in
5577         "$undef"|[nN]*) dflt='n';;
5578         *)              dflt='y';;
5579         esac
5580         rp="Do you want to install perl as /usr/bin/perl?"
5581         . ./myread
5582         case "$ans" in
5583         [yY]*)  val="$define";;
5584         *)      val="$undef" ;;
5585         esac
5586 else
5587         val="$undef"
5588 fi
5589 set installusrbinperl
5590 eval $setvar
5591
5592 echo " "
5593 echo "Checking for GNU C Library..." >&4
5594 cat >gnulibc.c <<EOM
5595 #include <stdio.h>
5596 int main()
5597 {
5598 #ifdef __GLIBC__
5599     exit(0);
5600 #else
5601     exit(1);
5602 #endif
5603 }
5604 EOM
5605 set gnulibc
5606 if eval $compile_ok && ./gnulibc; then
5607         val="$define"
5608         echo "You are using the GNU C Library"
5609 else
5610         val="$undef"
5611         echo "You are not using the GNU C Library"
5612 fi
5613 $rm -f gnulibc*
5614 set d_gnulibc
5615 eval $setvar
5616
5617 : see if nm is to be used to determine whether a symbol is defined or not
5618 case "$usenm" in
5619 '')
5620         dflt=''
5621         case "$d_gnulibc" in
5622         "$define")
5623                 echo " "
5624                 echo "nm probably won't work on the GNU C Library." >&4
5625                 dflt=n
5626                 ;;
5627         esac
5628         case "$dflt" in
5629         '') 
5630                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5631                         echo " "
5632                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5633                         echo "'nm' won't be sufficient on this sytem." >&4
5634                         dflt=n
5635                 fi
5636                 ;;
5637         esac
5638         case "$dflt" in
5639         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5640                 if $test $dflt -gt 20; then
5641                         dflt=y
5642                 else
5643                         dflt=n
5644                 fi
5645                 ;;
5646         esac
5647         ;;
5648 *)
5649         case "$usenm" in
5650         true|$define) dflt=y;;
5651         *) dflt=n;;
5652         esac
5653         ;;
5654 esac
5655 $cat <<EOM
5656
5657 I can use $nm to extract the symbols from your C libraries. This
5658 is a time consuming task which may generate huge output on the disk (up
5659 to 3 megabytes) but that should make the symbols extraction faster. The
5660 alternative is to skip the 'nm' extraction part and to compile a small
5661 test program instead to determine whether each symbol is present. If
5662 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5663 this may be the best solution.
5664
5665 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5666
5667 EOM
5668 rp="Shall I use $nm to extract C symbols from the libraries?"
5669 . ./myread
5670 case "$ans" in
5671 [Nn]*) usenm=false;;
5672 *) usenm=true;;
5673 esac
5674
5675 runnm=$usenm
5676 case "$reuseval" in
5677 true) runnm=false;;
5678 esac
5679
5680 : nm options which may be necessary
5681 case "$nm_opt" in
5682 '') if $test -f /mach_boot; then
5683                 nm_opt=''       # Mach
5684         elif $test -d /usr/ccs/lib; then
5685                 nm_opt='-p'     # Solaris (and SunOS?)
5686         elif $test -f /dgux; then
5687                 nm_opt='-p'     # DG-UX
5688         elif $test -f /lib64/rld; then
5689                 nm_opt='-p'     # 64-bit Irix
5690         else
5691                 nm_opt=''
5692         fi;;
5693 esac
5694
5695 : nm options which may be necessary for shared libraries but illegal
5696 : for archive libraries.  Thank you, Linux.
5697 case "$nm_so_opt" in
5698 '')     case "$myuname" in
5699         *linux*)
5700                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5701                         nm_so_opt='--dynamic'
5702                 fi
5703                 ;;
5704         esac
5705         ;;
5706 esac
5707
5708 case "$runnm" in
5709 true)
5710 : get list of predefined functions in a handy place
5711 echo " "
5712 case "$libc" in
5713 '') libc=unknown
5714         case "$libs" in
5715         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5716         esac
5717         ;;
5718 esac
5719 libnames='';
5720 case "$libs" in
5721 '') ;;
5722 *)  for thislib in $libs; do
5723         case "$thislib" in
5724         -lc|-lc_s)
5725                 : Handle C library specially below.
5726                 ;;
5727         -l*)
5728                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5729                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5730                         :
5731                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5732                         :
5733                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5734                         :
5735                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5736                         :
5737                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5738                         :
5739                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5740                         :
5741                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5742                         :
5743                 else
5744                         try=''
5745                 fi
5746                 libnames="$libnames $try"
5747                 ;;
5748         *) libnames="$libnames $thislib" ;;
5749         esac
5750         done
5751         ;;
5752 esac
5753 xxx=normal
5754 case "$libc" in
5755 unknown)
5756         set /lib/libc.$so
5757         for xxx in $libpth; do
5758                 $test -r $1 || set $xxx/libc.$so
5759                 : The messy sed command sorts on library version numbers.
5760                 $test -r $1 || \
5761                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5762                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5763                                 h
5764                                 s/[0-9][0-9]*/0000&/g
5765                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5766                                 G
5767                                 s/\n/ /' | \
5768                          sort | $sed -e 's/^.* //'`
5769                 eval set \$$#
5770         done
5771         $test -r $1 || set /usr/ccs/lib/libc.$so
5772         $test -r $1 || set /lib/libsys_s$_a
5773         ;;
5774 *)
5775         set blurfl
5776         ;;
5777 esac
5778 if $test -r "$1"; then
5779         echo "Your (shared) C library seems to be in $1."
5780         libc="$1"
5781 elif $test -r /lib/libc && $test -r /lib/clib; then
5782         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5783         xxx=apollo
5784         libc='/lib/clib /lib/libc'
5785         if $test -r /lib/syslib; then
5786                 echo "(Your math library is in /lib/syslib.)"
5787                 libc="$libc /lib/syslib"
5788         fi
5789 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5790         echo "Your C library seems to be in $libc, as you said before."
5791 elif $test -r $incpath/usr/lib/libc$_a; then
5792         libc=$incpath/usr/lib/libc$_a;
5793         echo "Your C library seems to be in $libc.  That's fine."
5794 elif $test -r /lib/libc$_a; then
5795         libc=/lib/libc$_a;
5796         echo "Your C library seems to be in $libc.  You're normal."
5797 else
5798         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5799                 :
5800         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5801                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5802         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5803                 :
5804         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5805                 :
5806         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5807                 :
5808         else
5809                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5810         fi
5811         if $test -r "$tans"; then
5812                 echo "Your C library seems to be in $tans, of all places."
5813                 libc=$tans
5814         else
5815                 libc='blurfl'
5816         fi
5817 fi
5818 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5819         dflt="$libc"
5820         cat <<EOM
5821
5822 If the guess above is wrong (which it might be if you're using a strange
5823 compiler, or your machine supports multiple models), you can override it here.
5824
5825 EOM
5826 else
5827         dflt=''
5828         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5829         cat >&4 <<EOM
5830 I can't seem to find your C library.  I've looked in the following places:
5831
5832 EOM
5833         $sed 's/^/      /' libpath
5834         cat <<EOM
5835
5836 None of these seems to contain your C library. I need to get its name...
5837
5838 EOM
5839 fi
5840 fn=f
5841 rp='Where is your C library?'
5842 . ./getfile
5843 libc="$ans"
5844
5845 echo " "
5846 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5847 set X `cat libnames`
5848 shift
5849 xxx=files
5850 case $# in 1) xxx=file; esac
5851 echo "Extracting names from the following $xxx for later perusal:" >&4
5852 echo " "
5853 $sed 's/^/      /' libnames >&4
5854 echo " "
5855 $echo $n "This may take a while...$c" >&4
5856
5857 for file in $*; do
5858         case $file in
5859         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5860         *) $nm $nm_opt $file 2>/dev/null;;
5861         esac
5862 done >libc.tmp
5863
5864 $echo $n ".$c"
5865 $grep fprintf libc.tmp > libc.ptf
5866 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5867 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5868 xxx='[ADTSIW]'
5869 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5870         eval $xscan;\
5871         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5872                 eval $xrun
5873 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5874         eval $xscan;\
5875         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5876                 eval $xrun
5877 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5878         eval $xscan;\
5879         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5880                 eval $xrun
5881 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5882         eval $xscan;\
5883         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5884                 eval $xrun
5885 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5886         eval $xscan;\
5887         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5888                 eval $xrun
5889 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5890         eval $xscan;\
5891         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5892                 eval $xrun
5893 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5894                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5895         eval $xscan;\
5896         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5897                 eval $xrun
5898 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5899         eval $xscan;\
5900         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5901                 eval $xrun
5902 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5903         eval $xscan;\
5904         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5905                 eval $xrun
5906 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5907         eval $xscan;\
5908         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5909                 eval $xrun
5910 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5911         eval $xscan;\
5912         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5913                 eval $xrun
5914 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5915         eval $xscan;\
5916         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5917                 eval $xrun
5918 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5919         eval $xscan;\
5920         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5921                 eval $xrun
5922 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5923         eval $xscan;\
5924         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5925                 eval $xrun
5926 else
5927         $nm -p $* 2>/dev/null >libc.tmp
5928         $grep fprintf libc.tmp > libc.ptf
5929         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5930                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5931         then
5932                 nm_opt='-p'
5933                 eval $xrun
5934         else
5935                 echo " "
5936                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5937                 com=''
5938                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5939                         for thisname in $libnames $libc; do
5940                                 $ar t $thisname >>libc.tmp
5941                         done
5942                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5943                         echo "Ok." >&4
5944                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5945                         # Repeat libc to extract forwarders to DLL entries too
5946                         for thisname in $libnames $libc; do
5947                                 $ar tv $thisname >>libc.tmp
5948                                 # Revision 50 of EMX has bug in $ar.
5949                                 # it will not extract forwarders to DLL entries
5950                                 # Use emximp which will extract exactly them.
5951                                 emximp -o tmp.imp $thisname \
5952                                     2>/dev/null && \
5953                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5954                                     < tmp.imp >>libc.tmp
5955                                 $rm tmp.imp
5956                         done
5957                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5958                         echo "Ok." >&4
5959                 else
5960                         echo "$ar didn't seem to work right." >&4
5961                         echo "Maybe this is a Cray...trying bld instead..." >&4
5962                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5963                         then
5964                                 for thisname in $libnames; do
5965                                         bld t $libnames | \
5966                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5967                                         $ar t $thisname >>libc.tmp
5968                                 done
5969                                 echo "Ok." >&4
5970                         else
5971                                 echo "That didn't work either.  Giving up." >&4
5972                                 exit 1
5973                         fi
5974                 fi
5975         fi
5976 fi
5977 nm_extract="$com"
5978 if $test -f /lib/syscalls.exp; then
5979         echo " "
5980         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5981         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5982 fi
5983 ;;
5984 esac
5985 $rm -f libnames libpath
5986
5987 : see if dld is available
5988 set dld.h i_dld
5989 eval $inhdr
5990
5991 : is a C symbol defined?
5992 csym='tlook=$1;
5993 case "$3" in
5994 -v) tf=libc.tmp; tc=""; tdc="";;
5995 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5996 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5997 esac;
5998 tx=yes;
5999 case "$reuseval-$4" in
6000 true-) ;;
6001 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6002 esac;
6003 case "$tx" in
6004 yes)
6005         case "$runnm" in
6006         true)
6007                 if $contains $tlook $tf >/dev/null 2>&1;
6008                 then tval=true;
6009                 else tval=false;
6010                 fi;;
6011         *)
6012                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6013                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6014                 then tval=true;
6015                 else tval=false;
6016                 fi;
6017                 $rm -f t t.c;;
6018         esac;;
6019 *)
6020         case "$tval" in
6021         $define) tval=true;;
6022         *) tval=false;;
6023         esac;;
6024 esac;
6025 eval "$2=$tval"'
6026
6027 : define an is-in-libc? function
6028 inlibc='echo " "; td=$define; tu=$undef;
6029 sym=$1; var=$2; eval "was=\$$2";
6030 tx=yes;
6031 case "$reuseval$was" in
6032 true) ;;
6033 true*) tx=no;;
6034 esac;
6035 case "$tx" in
6036 yes)
6037         set $sym tres -f;
6038         eval $csym;
6039         case "$tres" in
6040         true)
6041                 echo "$sym() found." >&4;
6042                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6043         *)
6044                 echo "$sym() NOT found." >&4;
6045                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6046         esac;;
6047 *)
6048         case "$was" in
6049         $define) echo "$sym() found." >&4;;
6050         *) echo "$sym() NOT found." >&4;;
6051         esac;;
6052 esac'
6053
6054 : see if dlopen exists
6055 xxx_runnm="$runnm"
6056 runnm=false
6057 set dlopen d_dlopen
6058 eval $inlibc
6059 runnm="$xxx_runnm"
6060
6061 : determine which dynamic loading, if any, to compile in
6062 echo " "
6063 dldir="ext/DynaLoader"
6064 case "$usedl" in
6065 $define|y|true)
6066         dflt='y'
6067         usedl="$define"
6068         ;;
6069 $undef|n|false)
6070         dflt='n'
6071         usedl="$undef"
6072         ;;
6073 *) 
6074         dflt='n'
6075         case "$d_dlopen" in
6076             $define) dflt='y' ;;
6077         esac
6078         case "$i_dld" in
6079             $define) dflt='y' ;;
6080         esac
6081         : Does a dl_xxx.xs file exist for this operating system
6082         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6083         ;;
6084 esac
6085 rp="Do you wish to use dynamic loading?"
6086 . ./myread
6087 usedl="$ans"
6088 case "$ans" in
6089 y*) usedl="$define"
6090         case "$dlsrc" in
6091         '')
6092                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6093                         dflt="$dldir/dl_${osname}.xs"
6094                 elif $test "$d_dlopen" = "$define" ; then
6095                         dflt="$dldir/dl_dlopen.xs"
6096                 elif $test "$i_dld" = "$define" ; then
6097                         dflt="$dldir/dl_dld.xs"
6098                 else
6099                         dflt=''
6100                 fi
6101                 ;;
6102         *)      dflt="$dldir/$dlsrc"
6103                 ;;
6104         esac
6105     echo "The following dynamic loading files are available:"
6106         : Can not go over to $dldir because getfile has path hard-coded in.
6107         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6108         rp="Source file to use for dynamic loading"
6109         fn="fne"
6110         gfpth="$src"
6111         . ./getfile
6112         usedl="$define"
6113         : emulate basename
6114         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6115
6116         $cat << EOM
6117
6118 Some systems may require passing special flags to $cc -c to
6119 compile modules that will be used to create a shared library.
6120 To use no flags, say "none".
6121
6122 EOM
6123     case "$cccdlflags" in
6124     '') case "$gccversion" in
6125                 '') case "$osname" in
6126                         hpux)   dflt='+z' ;;
6127                         next)   dflt='none' ;;
6128                         irix*)  dflt='-KPIC' ;;
6129                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6130                         sunos)  dflt='-pic' ;;
6131                         *)      dflt='none' ;;
6132                     esac
6133                         ;;
6134                 *)  case "$osname" in
6135                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6136                         *)      dflt='-fpic' ;;
6137                     esac ;;
6138             esac ;;
6139         ' ') dflt='none' ;;
6140     *)  dflt="$cccdlflags" ;;
6141     esac
6142     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6143     . ./myread
6144     case "$ans" in
6145     none) cccdlflags=' ' ;;
6146     *) cccdlflags="$ans" ;;
6147     esac
6148
6149     cat << EOM
6150
6151 Some systems use ld to create libraries that can be dynamically loaded,
6152 while other systems (such as those using ELF) use $cc.
6153
6154 EOM
6155         case "$ld" in
6156         '')     $cat >try.c <<'EOM'
6157 /* Test for whether ELF binaries are produced */
6158 #include <fcntl.h>
6159 #include <stdlib.h>
6160 int main() {
6161         char b[4];
6162         int i = open("a.out",O_RDONLY);
6163         if(i == -1) 
6164                 exit(1); /* fail */
6165         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6166                 exit(0); /* succeed (yes, it's ELF) */
6167         else
6168                 exit(1); /* fail */
6169 }
6170 EOM
6171                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6172                         cat <<EOM
6173 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6174 EOM
6175                         dflt="$cc"
6176                 else
6177                         echo "I'll use ld to build dynamic libraries."
6178                         dflt='ld'
6179                 fi
6180                 rm -f try.c a.out
6181                 ;;
6182         *)      dflt="$ld"
6183                 ;;
6184         esac
6185
6186     rp="What command should be used to create dynamic libraries?"
6187     . ./myread
6188         ld="$ans"
6189
6190     cat << EOM
6191
6192 Some systems may require passing special flags to $ld to create a
6193 library that can be dynamically loaded.  If your ld flags include
6194 -L/other/path options to locate libraries outside your loader's normal
6195 search path, you may need to specify those -L options here as well.  To
6196 use no flags, say "none".
6197
6198 EOM
6199     case "$lddlflags" in
6200     '') case "$osname" in
6201                         beos) dflt='-nostart' ;;
6202                         hpux) case "$gccversion" in
6203                               '') dflt='-b +vnocompatwarnings' ;;
6204                               esac
6205                               ;;        
6206                         linux|irix*)    dflt='-shared' ;;
6207                         next)  dflt='none' ;;
6208                         solaris) dflt='-G' ;;
6209                         sunos) dflt='-assert nodefinitions' ;;
6210                         svr4*|esix*) dflt="-G $ldflags" ;;
6211                 *)     dflt='none' ;;
6212                         esac
6213                         ;;
6214     *) dflt="$lddlflags" ;;
6215     esac
6216
6217         : Try to guess additional flags to pick up local libraries.
6218         : Be careful not to append to a plain 'none'
6219         case "$dflt" in
6220         none) dflt='' ;;
6221         esac
6222         for thisflag in $ldflags; do
6223                 case "$thisflag" in
6224                 -L*)
6225                         case " $dflt " in
6226                         *" $thisflag "*) ;;
6227                         *) dflt="$dflt $thisflag" ;;
6228                         esac
6229                         ;;
6230                 esac
6231         done
6232
6233         case "$dflt" in
6234         ''|' ') dflt='none' ;;
6235         esac
6236
6237     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6238     . ./myread
6239     case "$ans" in
6240     none) lddlflags=' ' ;;
6241     *) lddlflags="$ans" ;;
6242     esac
6243
6244         cat <<EOM
6245
6246 Some systems may require passing special flags to $cc to indicate that
6247 the resulting executable will use dynamic linking.  To use no flags,
6248 say "none".
6249
6250 EOM
6251     case "$ccdlflags" in
6252     '') case "$osname" in
6253                 hpux)   dflt='-Wl,-E' ;;
6254                 linux)  dflt='-rdynamic' ;;
6255                 next)   dflt='none' ;;
6256                 sunos)  dflt='none' ;;
6257                 *)      dflt='none' ;;
6258             esac ;;
6259     ' ')  dflt='none' ;;
6260     *)  dflt="$ccdlflags" ;;
6261     esac
6262     rp="Any special flags to pass to $cc to use dynamic linking?"
6263     . ./myread
6264     case "$ans" in
6265     none) ccdlflags=' ' ;;
6266     *) ccdlflags="$ans" ;;
6267     esac
6268     ;;
6269 *)  usedl="$undef"
6270         ld='ld'
6271     dlsrc='dl_none.xs'
6272     lddlflags=''
6273     ccdlflags=''
6274     ;;
6275 esac
6276
6277 also=''
6278 case "$usedl" in
6279 $undef)
6280         # No dynamic loading being used, so don't bother even to prompt.
6281         useshrplib='false'
6282         ;;
6283 *)      case "$useshrplib" in
6284         '')     case "$osname" in
6285                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6286                         dflt=y
6287                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6288                         ;;
6289                 next*)
6290                         case "$osvers" in
6291                         4*)     dflt=y
6292                                 also='Building a shared libperl is needed for MAB support.'
6293                                 ;;
6294                         *)      dflt=n
6295                                 ;;
6296                         esac
6297                         ;;
6298                 *)      dflt=n
6299                         ;;
6300                 esac
6301                 ;;
6302         $define|true|[Yy]*)
6303                 dflt=y
6304                 ;;
6305         *)      dflt=n
6306                 ;;
6307         esac
6308         $cat << EOM
6309
6310 The perl executable is normally obtained by linking perlmain.c with
6311 libperl${_a}, any static extensions (usually just DynaLoader), and
6312 any other libraries needed on this system (such as -lm, etc.).  Since
6313 your system supports dynamic loading, it is probably possible to build
6314 a shared libperl.$so.  If you will have more than one executable linked
6315 to libperl.$so, this will significantly reduce the size of each
6316 executable, but it may have a noticeable affect on performance.  The
6317 default is probably sensible for your system.
6318 $also
6319
6320 EOM
6321         rp="Build a shared libperl.$so (y/n)"
6322         . ./myread
6323         case "$ans" in
6324         true|$define|[Yy]*)
6325                 useshrplib='true'  ;;
6326         *)      useshrplib='false' ;;
6327         esac
6328         ;;
6329 esac
6330
6331 case "$useshrplib" in
6332 true)
6333         case "$libperl" in
6334         '')
6335                 # Figure out a good name for libperl.so.  Since it gets stored in
6336                 # a version-specific architecture-dependent library, the version
6337                 # number isn't really that important, except for making cc/ld happy.
6338                 #
6339                 # A name such as libperl.so.3.1
6340                 majmin="libperl.$so.$patchlevel.$subversion"
6341                 # A name such as libperl.so.301
6342                 majonly=`echo $patchlevel $subversion |
6343                         $awk '{printf "%d%02d", $1, $2}'`
6344                 majonly=libperl.$so.$majonly
6345                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6346                 # rely on figuring it out from the naming of libc.
6347                 case "${osname}${osvers}" in
6348                 next4*)
6349                         dflt=libperl.5.$so
6350                         # XXX How handle the --version stuff for MAB?
6351                         ;;
6352                 linux*)  # ld won't link with a bare -lperl otherwise.
6353                         dflt=libperl.$so
6354                         ;;
6355                 cygwin*) # include version
6356                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6357                         ;;
6358                 *)      # Try to guess based on whether libc has major.minor.
6359                         case "$libc" in
6360                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6361                         *libc.$so.[0-9]*) dflt=$majonly ;;
6362                         *)      dflt=libperl.$so ;;
6363                         esac
6364                         ;;
6365                 esac
6366                 ;;
6367         *)      dflt=$libperl
6368                 ;;
6369         esac
6370         cat << EOM
6371
6372 I need to select a good name for the shared libperl.  If your system uses
6373 library names with major and minor numbers, then you might want something
6374 like $majmin.  Alternatively, if your system uses a single version
6375 number for shared libraries, then you might want to use $majonly.
6376 Or, your system might be quite happy with a simple libperl.$so.
6377
6378 Since the shared libperl will get installed into a version-specific
6379 architecture-dependent directory, the version number of the shared perl
6380 library probably isn't important, so the default should be o.k.
6381
6382 EOM
6383         rp='What name do you want to give to the shared libperl?'
6384         . ./myread
6385         libperl=$ans
6386         echo "Ok, I'll use $libperl"
6387         ;;
6388 *)
6389         libperl="libperl${_a}"
6390         ;;
6391 esac
6392
6393 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6394 case "$shrpdir" in
6395 '') ;;
6396 *)      $cat >&4 <<EOM
6397 WARNING:  Use of the shrpdir variable for the installation location of
6398 the shared $libperl is not supported.  It was never documented and
6399 will not work in this version.  Let me (perlbug@perl.com)
6400 know of any problems this may cause.
6401
6402 EOM
6403         case "$shrpdir" in
6404         "$archlibexp/CORE")
6405                 $cat >&4 <<EOM
6406 But your current setting of $shrpdir is
6407 the default anyway, so it's harmless.
6408 EOM
6409                 ;;
6410         *)
6411                 $cat >&4 <<EOM
6412 Further, your current attempted setting of $shrpdir
6413 conflicts with the value of $archlibexp/CORE
6414 that installperl will use.
6415 EOM
6416                 ;;
6417         esac
6418         ;;
6419 esac
6420
6421 # How will the perl executable find the installed shared $libperl?
6422 # Add $xxx to ccdlflags.
6423 # If we can't figure out a command-line option, use $shrpenv to
6424 # set env LD_RUN_PATH.  The main perl makefile uses this.
6425 shrpdir=$archlibexp/CORE
6426 xxx=''
6427 tmp_shrpenv=''
6428 if "$useshrplib"; then
6429     case "$osname" in 
6430         aix)
6431                 # We'll set it in Makefile.SH...
6432                 ;;
6433         solaris|netbsd)
6434                 xxx="-R $shrpdir"
6435                 ;;
6436         freebsd)
6437                 xxx="-Wl,-R$shrpdir"
6438                 ;;
6439         linux|irix*|dec_osf)
6440                 xxx="-Wl,-rpath,$shrpdir"
6441                 ;;
6442         next)
6443                 # next doesn't like the default...
6444                 ;;
6445         beos)
6446                 # beos doesn't like the default, either.
6447                 ;;
6448         hpux*)
6449                 # hpux doesn't like the default, either.
6450                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6451                 ;;
6452         *)
6453                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6454                 ;;
6455         esac
6456         case "$xxx" in
6457         '') ;;
6458         *)      
6459                 # Only add $xxx if it isn't already in ccdlflags.
6460                 case " $ccdlflags " in
6461                 *" $xxx "*)     ;;
6462                 *)      ccdlflags="$ccdlflags $xxx"
6463                         cat <<EOM >&4
6464
6465 Adding $xxx to the flags
6466 passed to $ld so that the perl executable will find the 
6467 installed shared $libperl.
6468
6469 EOM
6470                         ;;
6471                 esac
6472                 ;;
6473         esac
6474 fi
6475 # Fix ccdlflags in AIX for building external extensions.
6476 # (For building Perl itself bare -bE:perl.exp is needed,
6477 #  Makefile.SH takes care of this.)
6478 case "$osname" in
6479 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6480 esac
6481 # Respect a hint or command-line value.
6482 case "$shrpenv" in
6483 '') shrpenv="$tmp_shrpenv" ;;
6484 esac
6485 case "$ldlibpthname" in
6486 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6487 none)   ldlibpthname='' ;;
6488 esac
6489
6490 : determine where manual pages go
6491 set man1dir man1dir none
6492 eval $prefixit
6493 $cat <<EOM
6494
6495 $spackage has manual pages available in source form.
6496 EOM
6497 case "$nroff" in
6498 nroff)
6499         echo "However, you don't have nroff, so they're probably useless to you."
6500         case "$man1dir" in
6501         '') man1dir="none";;
6502         esac;;
6503 esac
6504 echo "If you don't want the manual sources installed, answer 'none'."
6505 case "$man1dir" in
6506 ' ') dflt=none
6507         ;;
6508 '')
6509         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6510         lookpath="$lookpath $prefixexp/man/p_man/man1"
6511         lookpath="$lookpath $prefixexp/man/u_man/man1"
6512         lookpath="$lookpath $prefixexp/man/man.1"
6513         case "$sysman" in
6514         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6515         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6516         esac
6517         set dflt
6518         eval $prefixup
6519         ;;
6520 *)  dflt="$man1dir"
6521         ;;
6522 esac
6523 echo " "
6524 fn=dn+~
6525 rp="Where do the main $spackage manual pages (source) go?"
6526 . ./getfile
6527 if $test "X$man1direxp" != "X$ansexp"; then
6528         installman1dir=''
6529 fi
6530 man1dir="$ans"
6531 man1direxp="$ansexp"
6532 case "$man1dir" in
6533 '')     man1dir=' '
6534         installman1dir='';;
6535 esac
6536
6537 : Change installation prefix, if necessary.
6538 if $test X"$prefix" != X"$installprefix"; then
6539         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6540 else
6541         installman1dir="$man1direxp"
6542 fi
6543
6544 : What suffix to use on installed man pages
6545
6546 case "$man1dir" in
6547 ' ')
6548         man1ext='0'
6549         ;;
6550 *)
6551         rp="What suffix should be used for the main $spackage man pages?"
6552         case "$man1ext" in
6553         '')     case "$man1dir" in
6554                 *1)  dflt=1 ;;
6555                 *1p) dflt=1p ;;
6556                 *1pm) dflt=1pm ;;
6557                 *l) dflt=l;;
6558                 *n) dflt=n;;
6559                 *o) dflt=o;;
6560                 *p) dflt=p;;
6561                 *C) dflt=C;;
6562                 *L) dflt=L;;
6563                 *L1) dflt=L1;;
6564                 *) dflt=1;;
6565                 esac
6566                 ;;
6567         *)      dflt="$man1ext";;
6568         esac
6569         . ./myread
6570         man1ext="$ans"
6571         ;;
6572 esac
6573
6574 : see if we can have long filenames
6575 echo " "
6576 rmlist="$rmlist /tmp/cf$$"
6577 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6578 first=123456789abcdef
6579 second=/tmp/cf$$/$first
6580 $rm -f $first $second
6581 if (echo hi >$first) 2>/dev/null; then
6582         if $test -f 123456789abcde; then
6583                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6584                 val="$undef"
6585         else
6586                 if (echo hi >$second) 2>/dev/null; then
6587                         if $test -f /tmp/cf$$/123456789abcde; then
6588                                 $cat <<'EOM'
6589 That's peculiar... You can have filenames longer than 14 characters, but only
6590 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6591 I shall consider your system cannot support long filenames at all.
6592 EOM
6593                                 val="$undef"
6594                         else
6595                                 echo 'You can have filenames longer than 14 characters.' >&4
6596                                 val="$define"
6597                         fi
6598                 else
6599                         $cat <<'EOM'
6600 How confusing! Some of your filesystems are sane enough to allow filenames
6601 longer than 14 characters but some others like /tmp can't even think about them.
6602 So, for now on, I shall assume your kernel does not allow them at all.
6603 EOM
6604                         val="$undef"
6605                 fi
6606         fi
6607 else
6608         $cat <<'EOM'
6609 You can't have filenames longer than 14 chars.  You can't even think about them!
6610 EOM
6611         val="$undef"
6612 fi 
6613 set d_flexfnam
6614 eval $setvar
6615 $rm -rf /tmp/cf$$ 123456789abcde*
6616
6617 : determine where library module manual pages go
6618 set man3dir man3dir none
6619 eval $prefixit
6620 $cat <<EOM
6621
6622 $spackage has manual pages for many of the library modules.
6623 EOM
6624
6625 case "$nroff" in
6626 nroff)
6627         $cat <<'EOM'
6628 However, you don't have nroff, so they're probably useless to you.
6629 EOM
6630         case "$man3dir" in
6631         '') man3dir="none";;
6632         esac;;
6633 esac
6634
6635 case "$d_flexfnam" in
6636 undef)
6637         $cat <<'EOM'
6638 However, your system can't handle the long file names like File::Basename.3. 
6639 EOM
6640         case "$man3dir" in
6641         '') man3dir="none";;
6642         esac;;
6643 esac
6644
6645 echo "If you don't want the manual sources installed, answer 'none'."
6646 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6647 case "$man3dir" in
6648 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6649         if $test -d "$privlib/man/man3"; then
6650                 cat <<EOM >&4
6651
6652 WARNING:  Previous versions of perl installed man3 pages into
6653 $privlib/man/man3.  This version will suggest a 
6654 new default of $dflt.  
6655 EOM
6656                 tdflt=$dflt
6657                 dflt='n'
6658                 rp='Do you wish to preserve the old behavior?(y/n)'
6659                 . ./myread
6660                 case "$ans" in
6661                 y*) dflt="$privlib/man/man3" ;;
6662                 *)  dflt=$tdflt ;;
6663                 esac
6664     fi
6665         ;;
6666 ' ') dflt=none;;
6667 *)      dflt="$man3dir" ;;
6668 esac
6669 echo " "
6670 fn=dn+~
6671 rp="Where do the $package library man pages (source) go?"
6672 . ./getfile
6673 man3dir="$ans"
6674 man3direxp="$ansexp"
6675 case "$man1dir" in
6676 '')     man3dir=' '
6677         installman3dir='';;
6678 esac
6679
6680 : Change installation prefix, if necessary.
6681 if $test X"$prefix" != X"$installprefix"; then
6682         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6683 else
6684         installman3dir="$man3direxp"
6685 fi
6686
6687 : What suffix to use on installed man pages
6688 case "$man3dir" in
6689 ' ')
6690         man3ext='0'
6691         ;;
6692 *)
6693         rp="What suffix should be used for the $package library man pages?"
6694         case "$man3ext" in
6695         '')     case "$man3dir" in
6696                 *3)  dflt=3 ;;
6697                 *3p) dflt=3p ;;
6698                 *3pm) dflt=3pm ;;
6699                 *l) dflt=l;;
6700                 *n) dflt=n;;
6701                 *o) dflt=o;;
6702                 *p) dflt=p;;
6703                 *C) dflt=C;;
6704                 *L) dflt=L;;
6705                 *L3) dflt=L3;;
6706                 *) dflt=3;;
6707                 esac
6708                 ;;
6709         *)      dflt="$man3ext";;
6710         esac
6711         . ./myread
6712         man3ext="$ans"
6713         ;;
6714 esac
6715
6716 : see if we have to deal with yellow pages, now NIS.
6717 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6718         if $test -f /usr/etc/nibindd; then
6719                 echo " "
6720                 echo "I'm fairly confident you're on a NeXT."
6721                 echo " "
6722                 rp='Do you get the hosts file via NetInfo?'
6723                 dflt=y
6724                 case "$hostcat" in
6725                 nidump*) ;;
6726                 '') ;;
6727                 *) dflt=n;;
6728                 esac
6729                 . ./myread
6730                 case "$ans" in
6731                 y*) hostcat='nidump hosts .';;
6732                 *)      case "$hostcat" in
6733                         nidump*) hostcat='';;
6734                         esac
6735                         ;;
6736                 esac
6737         fi
6738         case "$hostcat" in
6739         nidump*) ;;
6740         *)
6741                 case "$hostcat" in
6742                 *ypcat*) dflt=y;;
6743                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6744                                 dflt=y
6745                         else
6746                                 dflt=n
6747                         fi;;
6748                 *) dflt=n;;
6749                 esac
6750                 echo " "
6751                 rp='Are you getting the hosts file via yellow pages?'
6752                 . ./myread
6753                 case "$ans" in
6754                 y*) hostcat='ypcat hosts';;
6755                 *) hostcat='cat /etc/hosts';;
6756                 esac
6757                 ;;
6758         esac
6759 fi
6760 case "$hostcat" in
6761 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6762 esac
6763 case "$groupcat" in
6764 '') test -f /etc/group && groupcat='cat /etc/group';;
6765 esac
6766 case "$passcat" in
6767 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6768 esac
6769
6770 : now get the host name
6771 echo " "
6772 echo "Figuring out host name..." >&4
6773 case "$myhostname" in
6774 '') cont=true
6775         echo 'Maybe "hostname" will work...'
6776         if tans=`sh -c hostname 2>&1` ; then
6777                 myhostname=$tans
6778                 phostname=hostname
6779                 cont=''
6780         fi
6781         ;;
6782 *) cont='';;
6783 esac
6784 if $test "$cont"; then
6785         if ./xenix; then
6786                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6787                 if tans=`cat /etc/systemid 2>&1` ; then
6788                         myhostname=$tans
6789                         phostname='cat /etc/systemid'
6790                         echo "Whadyaknow.  Xenix always was a bit strange..."
6791                         cont=''
6792                 fi
6793         elif $test -r /etc/systemid; then
6794                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6795         fi
6796 fi
6797 if $test "$cont"; then
6798         echo 'No, maybe "uuname -l" will work...'
6799         if tans=`sh -c 'uuname -l' 2>&1` ; then
6800                 myhostname=$tans
6801                 phostname='uuname -l'
6802         else
6803                 echo 'Strange.  Maybe "uname -n" will work...'
6804                 if tans=`sh -c 'uname -n' 2>&1` ; then
6805                         myhostname=$tans
6806                         phostname='uname -n'
6807                 else
6808                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6809                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6810                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6811                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6812                         else
6813                                 case "$myhostname" in
6814                                 '') echo "Does this machine have an identity crisis or something?"
6815                                         phostname='';;
6816                                 *)
6817                                         echo "Well, you said $myhostname before..."
6818                                         phostname='echo $myhostname';;
6819                                 esac
6820                         fi
6821                 fi
6822         fi
6823 fi
6824 : you do not want to know about this
6825 set $myhostname
6826 myhostname=$1
6827
6828 : verify guess
6829 if $test "$myhostname" ; then
6830         dflt=y
6831         rp='Your host name appears to be "'$myhostname'".'" Right?"
6832         . ./myread
6833         case "$ans" in
6834         y*) ;;
6835         *) myhostname='';;
6836         esac
6837 fi
6838
6839 : bad guess or no guess
6840 while $test "X$myhostname" = X ; do
6841         dflt=''
6842         rp="Please type the (one word) name of your host:"
6843         . ./myread
6844         myhostname="$ans"
6845 done
6846
6847 : translate upper to lower if necessary
6848 case "$myhostname" in
6849 *[A-Z]*)
6850         echo "(Normalizing case in your host name)"
6851         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6852         ;;
6853 esac
6854
6855 case "$myhostname" in
6856 *.*)
6857         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6858         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6859         echo "(Trimming domain name from host name--host name is now $myhostname)"
6860         ;;
6861 *) case "$mydomain" in
6862         '')
6863                 {
6864                         test "X$hostcat" = "Xypcat hosts" &&
6865                         ypmatch "$myhostname" hosts 2>/dev/null |\
6866                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6867                         $test -s hosts
6868                 } || {
6869                         test "X$hostcat" != "X" &&
6870                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6871                                         /[       ]$myhostname[  . ]/p" > hosts
6872                 }
6873                 tmp_re="[       . ]"
6874                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6875                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6876                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6877                         hosts | $sort | $uniq | \
6878                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6879                 case `$echo X$dflt` in
6880                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6881                         dflt=.
6882                         ;;
6883                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6884                         ;;
6885                 esac
6886                 case "$dflt" in
6887                 .)
6888                         tans=`./loc resolv.conf X /etc /usr/etc`
6889                         if $test -f "$tans"; then
6890                                 echo "(Attempting domain name extraction from $tans)"
6891                                 dflt=.`$sed -n -e 's/   / /g' \
6892                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6893                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6894                                 case "$dflt" in
6895                                 .) dflt=.`$sed -n -e 's/        / /g' \
6896                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6897                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6898                                         ;;
6899                                 esac
6900                         fi
6901                         ;;
6902                 esac
6903                 case "$dflt" in
6904                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6905                         dflt=.`sh -c domainname 2>/dev/null`
6906                         case "$dflt" in
6907                         '') dflt='.';;
6908                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6909                         esac
6910                         ;;
6911                 esac
6912                 case "$dflt" in
6913                 .) echo "(Lost all hope -- silly guess then)"
6914                         dflt='.uucp'
6915                         ;;
6916                 esac
6917                 $rm -f hosts
6918                 ;;
6919         *) dflt="$mydomain";;
6920         esac;;
6921 esac
6922 echo " "
6923 rp="What is your domain name?"
6924 . ./myread
6925 tans="$ans"
6926 case "$ans" in
6927 '') ;;
6928 .*) ;;
6929 *) tans=".$tans";;
6930 esac
6931 mydomain="$tans"
6932
6933 : translate upper to lower if necessary
6934 case "$mydomain" in
6935 *[A-Z]*)
6936         echo "(Normalizing case in your domain name)"
6937         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6938         ;;
6939 esac
6940
6941 : a little sanity check here
6942 case "$phostname" in
6943 '') ;;
6944 *)
6945         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6946         $myhostname$mydomain|$myhostname) ;;
6947         *)
6948                 case "$phostname" in
6949                 sed*)
6950                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6951                         ;;
6952                 *)
6953                         echo "(That doesn't agree with your $phostname command, by the way.)"
6954                         ;;
6955                 esac
6956         ;;
6957         esac
6958         ;;
6959 esac
6960
6961 $cat <<EOM
6962
6963 I need to get your e-mail address in Internet format if possible, i.e.
6964 something like user@host.domain. Please answer accurately since I have
6965 no easy means to double check it. The default value provided below
6966 is most probably close to reality but may not be valid from outside
6967 your organization...
6968
6969 EOM
6970 cont=x
6971 while test "$cont"; do
6972         case "$cf_email" in
6973         '') dflt="$cf_by@$myhostname$mydomain";;
6974         *) dflt="$cf_email";;
6975         esac
6976         rp='What is your e-mail address?'
6977         . ./myread
6978         cf_email="$ans"
6979         case "$cf_email" in
6980         *@*.*) cont='' ;;
6981         *)
6982                 rp='Address does not look like an Internet one.  Use it anyway?'
6983                 case "$fastread" in
6984                 yes) dflt=y ;;
6985                 *) dflt=n ;;
6986                 esac
6987                 . ./myread
6988                 case "$ans" in
6989                 y*) cont='' ;;
6990                 *) echo " " ;;
6991                 esac
6992                 ;;
6993         esac
6994 done
6995
6996 $cat <<EOM
6997
6998 If you or somebody else will be maintaining perl at your site, please
6999 fill in the correct e-mail address here so that they may be contacted
7000 if necessary. Currently, the "perlbug" program included with perl
7001 will send mail to this address in addition to perlbug@perl.com. You may
7002 enter "none" for no administrator.
7003
7004 EOM
7005 case "$perladmin" in
7006 '') dflt="$cf_email";;
7007 *) dflt="$perladmin";;
7008 esac
7009 rp='Perl administrator e-mail address'
7010 . ./myread
7011 perladmin="$ans"
7012
7013 : figure out how to guarantee perl startup
7014 case "$startperl" in
7015 '')
7016         case "$sharpbang" in
7017         *!)
7018                 $cat <<EOH
7019
7020 I can use the #! construct to start perl on your system. This will
7021 make startup of perl scripts faster, but may cause problems if you
7022 want to share those scripts and perl is not in a standard place
7023 ($binexp/perl) on all your platforms. The alternative is to force
7024 a shell by starting the script with a single ':' character.
7025
7026 EOH
7027                 dflt="$binexp/perl"
7028                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7029                 . ./myread
7030                 case "$ans" in
7031                 none)   startperl=": # use perl";;
7032                 *)      startperl="#!$ans"
7033                         if $test 30 -lt `echo "$ans" | wc -c`; then
7034                                 $cat >&4 <<EOM
7035
7036 WARNING:  Some systems limit the #! command to 32 characters.
7037 If you experience difficulty running Perl scripts with #!, try
7038 installing Perl in a directory with a shorter pathname.
7039
7040 EOM
7041                         fi ;;
7042                 esac
7043                 ;;
7044         *) startperl=": # use perl"
7045                 ;;
7046         esac
7047         ;;
7048 esac
7049 echo "I'll use $startperl to start perl scripts."
7050
7051 : figure best path for perl in scripts
7052 case "$perlpath" in
7053 '')
7054         perlpath="$binexp/perl"
7055         case "$startperl" in
7056         *!*) ;;
7057         *)
7058                 $cat <<EOH
7059
7060 I will use the "eval 'exec'" idiom to start Perl on your system.
7061 I can use the full path of your Perl binary for this purpose, but
7062 doing so may cause problems if you want to share those scripts and
7063 Perl is not always in a standard place ($binexp/perl).
7064
7065 EOH
7066                 dflt="$binexp/perl"
7067                 rp="What path shall I use in \"eval 'exec'\"?"
7068                 . ./myread
7069                 perlpath="$ans"
7070                 ;;
7071         esac
7072         ;;
7073 esac
7074 case "$startperl" in
7075 *!*)    ;;
7076 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7077 esac
7078
7079 : determine where public executable scripts go
7080 set scriptdir scriptdir
7081 eval $prefixit
7082 case "$scriptdir" in
7083 '')
7084         dflt="$bin"
7085         : guess some guesses
7086         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7087         $test -d /usr/share/bin     && dflt=/usr/share/bin
7088         $test -d /usr/local/script  && dflt=/usr/local/script
7089         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7090         $test -d $prefixexp/script  && dflt=$prefixexp/script
7091         set dflt
7092         eval $prefixup
7093         ;;
7094 *)  dflt="$scriptdir"
7095         ;;
7096 esac
7097 $cat <<EOM
7098  
7099 Some installations have a separate directory just for executable scripts so
7100 that they can mount it across multiple architectures but keep the scripts in
7101 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7102 Or you might just lump your scripts in with all your other executables.
7103  
7104 EOM
7105 fn=d~
7106 rp='Where do you keep publicly executable scripts?'
7107 . ./getfile
7108 if $test "X$ansexp" != "X$scriptdirexp"; then
7109         installscript=''
7110 fi
7111 scriptdir="$ans"
7112 scriptdirexp="$ansexp"
7113 : Change installation prefix, if necessary.
7114 if $test X"$prefix" != X"$installprefix"; then
7115         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7116 else
7117         installscript="$scriptdirexp"
7118 fi
7119
7120 : determine where site specific architecture-dependent libraries go.
7121 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
7122 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
7123 : sitelib may have an optional trailing /share.
7124 case "$sitearch" in
7125 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
7126         dflt="$dflt/$archname"
7127         ;;
7128 *)      dflt="$sitearch"
7129         ;;
7130 esac
7131 set sitearch sitearch none
7132 eval $prefixit
7133 $cat <<EOM
7134
7135 The installation process will also create a directory for
7136 architecture-dependent site-specific extensions and modules.
7137
7138 EOM
7139 fn=d~+
7140 rp='Pathname for the site-specific architecture-dependent library files?'
7141 . ./getfile
7142 sitearch="$ans"
7143 sitearchexp="$ansexp"
7144 : Change installation prefix, if necessary.
7145 if $test X"$prefix" != X"$installprefix"; then
7146         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
7147 else
7148         installsitearch="$sitearchexp"
7149 fi
7150
7151 : determine where add-on public executables go
7152 case "$sitebin" in
7153 '')     dflt=$siteprefix/bin ;;
7154 *)      dflt=$sitebin ;;
7155 esac
7156 fn=d~
7157 rp='Pathname where the add-on public executables should be installed?'
7158 . ./getfile
7159 sitebin="$ans"
7160 sitebinexp="$ansexp"
7161 : Change installation prefix, if necessary.
7162 if $test X"$prefix" != X"$installprefix"; then
7163         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7164 else
7165         installsitebin="$sitebinexp"
7166 fi
7167
7168 : see if sqrtl exists
7169 set sqrtl d_sqrtl
7170 eval $inlibc
7171
7172 case "$ccflags" in
7173 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7174 esac
7175
7176 case "$uselongdouble" in
7177 $define|true|[yY]*)     dflt='y';;
7178 *) dflt='n';;
7179 esac
7180 cat <<EOM
7181
7182 Perl can be built to take advantage of long doubles which
7183 (if available) may give more accuracy and range for floating point numbers.
7184
7185 If this doesn't make any sense to you, just accept the default '$dflt'.
7186 EOM
7187 rp='Try to use long doubles if available?'
7188 . ./myread
7189 case "$ans" in
7190 y|Y)    val="$define"   ;;
7191 *)      val="$undef"    ;;
7192 esac
7193 set uselongdouble
7194 eval $setvar
7195
7196 case "$uselongdouble" in
7197 true|[yY]*) uselongdouble="$define" ;;
7198 esac
7199
7200 case "$uselongdouble" in
7201 $define)
7202 : Look for a hint-file generated 'call-back-unit'.  If the
7203 : user has specified that long doubles should be used,
7204 : we may need to set or change some other defaults.
7205         if $test -f uselongdouble.cbu; then
7206                 echo "Your platform has some specific hints for long doubles, using them..."
7207                 . ./uselongdouble.cbu
7208         else
7209                 $cat <<EOM
7210 (Your platform doesn't have any specific hints for long doubles.)
7211 EOM
7212         fi
7213         ;;
7214 esac
7215
7216 case "$uselongdouble:$d_sqrtl" in
7217 $define:$undef)
7218                 $cat <<EOM >&4
7219
7220 You requested the use of long doubles but you do not seem to have
7221 the mathematic functions for long doubles.  I'm disabling the use
7222 of long doubles.
7223 EOM
7224         uselongdouble=$undef
7225         ;;
7226 esac
7227
7228 case "$useperlio" in
7229 $define|true|[yY]*)     dflt='y';;
7230 *) dflt='n';;
7231 esac
7232 cat <<EOM
7233
7234 Previous version of $package used the standard IO mechanisms as defined
7235 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7236 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7237 the default.  This abstraction layer can use AT&T's sfio (if you already
7238 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7239 problems with some extension modules.  Using PerlIO with stdio is safe,
7240 but it is slower than plain stdio and therefore is not the default.
7241
7242 If this doesn't make any sense to you, just accept the default '$dflt'.
7243 EOM
7244 rp='Use the experimental PerlIO abstraction layer?'
7245 . ./myread
7246 case "$ans" in
7247 y|Y) 
7248         val="$define"
7249         ;;     
7250 *)      
7251         echo "Ok, doing things the stdio way"
7252         val="$undef"
7253         ;;
7254 esac
7255 set useperlio
7256 eval $setvar 
7257
7258 case "$vendorprefix" in
7259 '')     d_vendorbin="$undef"
7260         vendorbin=''
7261         vendorbinexp=''
7262         ;;
7263 *)      d_vendorbin="$define"
7264         : determine where vendor-supplied executables go.
7265         case "$vendorbin" in
7266         '') dflt=$vendorprefix/bin ;;
7267         *)      dflt="$vendorbin" ;;
7268         esac
7269         fn=d~+
7270         rp='Pathname for the vendor-supplied executables directory?'
7271         . ./getfile
7272         vendorbin="$ans"
7273         vendorbinexp="$ansexp"
7274         ;;
7275 esac
7276 : Change installation prefix, if necessary.
7277 if $test X"$prefix" != X"$installprefix"; then
7278         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7279 else
7280         installvendorbin="$vendorbinexp"
7281 fi
7282
7283 : check for length of double
7284 echo " "
7285 case "$doublesize" in
7286 '')
7287         echo "Checking to see how big your double precision numbers are..." >&4
7288         $cat >try.c <<'EOCP'
7289 #include <stdio.h>
7290 int main()
7291 {
7292     printf("%d\n", (int)sizeof(double));
7293     exit(0);
7294 }
7295 EOCP
7296         set try
7297         if eval $compile_ok; then
7298                 doublesize=`./try`
7299                 echo "Your double is $doublesize bytes long."
7300         else
7301                 dflt='8'
7302                 echo "(I can't seem to compile the test program.  Guessing...)"
7303                 rp="What is the size of a double precision number (in bytes)?"
7304                 . ./myread
7305                 doublesize="$ans"
7306         fi
7307         ;;
7308 esac
7309 $rm -f try.c try
7310
7311 : check for long doubles
7312 echo " "
7313 echo "Checking to see if you have long double..." >&4
7314 echo 'int main() { long double x = 7.0; }' > try.c
7315 set try
7316 if eval $compile; then
7317         val="$define"
7318         echo "You have long double."
7319 else
7320         val="$undef"
7321         echo "You do not have long double."
7322 fi
7323 $rm try.*
7324 set d_longdbl
7325 eval $setvar
7326
7327 : check for length of long double
7328 case "${d_longdbl}${longdblsize}" in
7329 $define)
7330         echo " "
7331         echo "Checking to see how big your long doubles are..." >&4
7332         $cat >try.c <<'EOCP'
7333 #include <stdio.h>
7334 int main()
7335 {
7336         printf("%d\n", sizeof(long double));
7337 }
7338 EOCP
7339         set try
7340         set try
7341         if eval $compile; then
7342                 longdblsize=`./try$exe_ext`
7343                 echo "Your long doubles are $longdblsize bytes long."
7344         else
7345                 dflt='8'
7346                 echo " "
7347                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7348                 rp="What is the size of a long double (in bytes)?"
7349                 . ./myread
7350                 longdblsize="$ans"
7351         fi
7352         if $test "X$doublesize" = "X$longdblsize"; then
7353                 echo "(That isn't any different from an ordinary double.)"
7354         fi      
7355         ;;
7356 esac
7357 $rm -f try.* try
7358
7359 : Check how to convert floats to strings.
7360 if test "X$d_Gconvert" = X; then
7361         echo " "
7362         echo "Checking for an efficient way to convert floats to strings."
7363         $cat >try.c <<EOP
7364 #ifdef TRY_gconvert
7365 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7366 char *myname = "gconvert";
7367 #endif
7368 #ifdef TRY_gcvt
7369 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7370 char *myname = "gcvt";
7371 #endif
7372 #ifdef TRY_qgcvt
7373 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7374 char *myname = "qgcvt";
7375 #define DOUBLETYPE long double
7376 #endif
7377 #ifdef TRY_sprintf
7378 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7379 char *myname = "sprintf";
7380 #endif
7381
7382 #ifndef DOUBLETYPE
7383 #define DOUBLETYPE double
7384 #endif
7385
7386 #include <stdio.h>
7387
7388 #define I_STDLIB $i_stdlib
7389 #ifdef I_STDLIB
7390 #include <stdlib.h>
7391 #endif
7392
7393 int
7394 checkit(expect, got)
7395 char *expect;
7396 char *got;
7397 {
7398     if (strcmp(expect, got)) {
7399                 printf("%s oddity:  Expected %s, got %s\n",
7400                         myname, expect, got);
7401                 exit(1);
7402         }
7403 }
7404
7405 int main()
7406
7407         char buf[64]; 
7408         buf[63] = '\0';
7409
7410         /* This must be 1st test on (which?) platform */
7411         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7412         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7413         checkit("0.1", buf);
7414
7415         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7416         checkit("1", buf);
7417
7418         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7419         checkit("0", buf);
7420
7421         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7422         checkit("-1", buf);
7423
7424         /* Some Linux gcvt's give 1.e+5 here. */
7425         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7426         checkit("100000", buf);
7427         
7428         /* Some Linux gcvt's give -1.e+5 here. */
7429         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7430         checkit("-100000", buf);
7431
7432         exit(0);
7433 }
7434 EOP
7435         case "$d_Gconvert" in
7436         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7437         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7438         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7439         *) xxx_list='gconvert gcvt sprintf' ;;
7440         esac
7441
7442         case "$d_longdbl$uselongdouble" in
7443         definedefine) xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7444         esac
7445
7446         for xxx_convert in $xxx_list; do
7447                 echo "Trying $xxx_convert..."
7448                 $rm -f try try$_o
7449                 set try -DTRY_$xxx_convert
7450                 if eval $compile; then
7451                         echo "$xxx_convert() found." >&4
7452                         if ./try; then
7453                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7454                                 break;
7455                         else
7456                                 echo "...But $xxx_convert didn't work as I expected."
7457                         fi
7458                 else
7459                         echo "$xxx_convert NOT found." >&4
7460                 fi
7461         done
7462                 
7463         case "$xxx_convert" in
7464         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7465         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7466         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7467         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7468         esac
7469 fi
7470
7471 echo " "
7472
7473 if $test X"$d_longdbl" = X"$define"; then
7474
7475 echo "Checking how to print long doubles..." >&4
7476
7477 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7478         $cat >try.c <<'EOCP'
7479 #include <sys/types.h>
7480 #include <stdio.h>
7481 int main() {
7482   double d = 123.456;
7483   printf("%.3f\n", d);
7484 }
7485 EOCP
7486         set try
7487         if eval $compile; then
7488                 yyy=`./try$exe_ext`
7489                 case "$yyy" in
7490                 123.456)
7491                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7492                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7493                         echo "We will use %f."
7494                         ;;
7495                 esac
7496         fi
7497 fi
7498
7499 if $test X"$sPRIfldbl" = X; then
7500         $cat >try.c <<'EOCP'
7501 #include <sys/types.h>
7502 #include <stdio.h>
7503 int main() {
7504   long double d = 123.456;
7505   printf("%.3llf\n", d);
7506 }
7507 EOCP
7508         set try
7509         if eval $compile; then
7510                 yyy=`./try$exe_ext`
7511                 case "$yyy" in
7512                 123.456)
7513                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7514                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7515                         echo "We will use %llf."
7516                         ;;
7517                 esac
7518         fi
7519 fi
7520
7521 if $test X"$sPRIfldbl" = X; then
7522         $cat >try.c <<'EOCP'
7523 #include <sys/types.h>
7524 #include <stdio.h>
7525 int main() {
7526   long double d = 123.456;
7527   printf("%.3Lf\n", d);
7528 }
7529 EOCP
7530         set try
7531         if eval $compile; then
7532                 yyy=`./try$exe_ext`
7533                 case "$yyy" in
7534                 123.456)
7535                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7536                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7537                         echo "We will use %Lf."
7538                         ;;
7539                 esac
7540         fi
7541 fi
7542
7543 if $test X"$sPRIfldbl" = X; then
7544         $cat >try.c <<'EOCP'
7545 #include <sys/types.h>
7546 #include <stdio.h>
7547 int main() {
7548   long double d = 123.456;
7549   printf("%.3lf\n", d);
7550 }
7551 EOCP
7552         set try
7553         if eval $compile; then
7554                 yyy=`./try$exe_ext`
7555                 case "$yyy" in
7556                 123.456)
7557                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7558                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7559                         echo "We will use %lf."
7560                         ;;
7561                 esac
7562         fi
7563 fi
7564
7565 if $test X"$sPRIfldbl" = X; then
7566         echo "Cannot figure out how to print long doubles." >&4
7567 fi
7568
7569 $rm -f try try.*
7570
7571 fi # d_longdbl
7572
7573 case "$sPRIfldbl" in
7574 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7575         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7576         ;;
7577 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7578         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7579         ;;
7580 esac
7581
7582 : Initialize h_fcntl
7583 h_fcntl=false
7584
7585 : Initialize h_sysfile
7586 h_sysfile=false
7587
7588 : access call always available on UNIX
7589 set access d_access
7590 eval $inlibc
7591
7592 : locate the flags for 'access()'
7593 case "$d_access" in
7594 "$define")
7595         echo " "
7596         $cat >access.c <<'EOCP'
7597 #include <sys/types.h>
7598 #ifdef I_FCNTL
7599 #include <fcntl.h>
7600 #endif
7601 #ifdef I_SYS_FILE
7602 #include <sys/file.h>
7603 #endif
7604 #ifdef I_UNISTD
7605 #include <unistd.h>
7606 #endif
7607 int main() {
7608         exit(R_OK);
7609 }
7610 EOCP
7611         : check sys/file.h first, no particular reason here
7612         if $test `./findhdr sys/file.h` && \
7613                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7614                 h_sysfile=true;
7615                 echo "<sys/file.h> defines the *_OK access constants." >&4
7616         elif $test `./findhdr fcntl.h` && \
7617                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7618                 h_fcntl=true;
7619                 echo "<fcntl.h> defines the *_OK access constants." >&4
7620         elif $test `./findhdr unistd.h` && \
7621                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7622                 echo "<unistd.h> defines the *_OK access constants." >&4
7623         else
7624                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7625         fi
7626         ;;
7627 esac
7628 $rm -f access*
7629
7630 : see if accessx exists
7631 set accessx d_accessx
7632 eval $inlibc
7633
7634 : see if alarm exists
7635 set alarm d_alarm
7636 eval $inlibc
7637
7638 : see if atolf exists
7639 set atolf d_atolf
7640 eval $inlibc
7641
7642 : see if atoll exists
7643 set atoll d_atoll
7644 eval $inlibc
7645
7646 : Look for GNU-cc style attribute checking
7647 echo " "
7648 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7649 $cat >attrib.c <<'EOCP'
7650 #include <stdio.h>
7651 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7652 EOCP
7653 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7654         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7655                 echo "Your C compiler doesn't fully support __attribute__."
7656                 val="$undef"
7657         else
7658                 echo "Your C compiler supports __attribute__."
7659                 val="$define"
7660         fi
7661 else
7662         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7663         val="$undef"
7664 fi
7665 set d_attribut
7666 eval $setvar
7667 $rm -f attrib*
7668
7669 : see if bcmp exists
7670 set bcmp d_bcmp
7671 eval $inlibc
7672
7673 : see if bcopy exists
7674 set bcopy d_bcopy
7675 eval $inlibc
7676
7677 : see if this is a unistd.h system
7678 set unistd.h i_unistd
7679 eval $inhdr
7680
7681 : see if getpgrp exists
7682 set getpgrp d_getpgrp
7683 eval $inlibc
7684
7685 case "$d_getpgrp" in
7686 "$define")
7687         echo " "
7688         echo "Checking to see which flavor of getpgrp is in use..."
7689         $cat >set.c <<EOP
7690 #$i_unistd I_UNISTD
7691 #include <sys/types.h>
7692 #ifdef I_UNISTD
7693 #  include <unistd.h>
7694 #endif
7695 int main()
7696 {
7697         if (getuid() == 0) {
7698                 printf("(I see you are running Configure as super-user...)\n");
7699                 setuid(1);
7700         }
7701 #ifdef TRY_BSD_PGRP
7702         if (getpgrp(1) == 0)
7703                 exit(0);
7704 #else
7705         if (getpgrp() > 0)
7706                 exit(0);
7707 #endif
7708         exit(1);
7709 }
7710 EOP
7711         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7712                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7713                 val="$define"
7714         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7715                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7716                 val="$undef"
7717         else
7718                 echo "I can't seem to compile and run the test program."
7719                 if ./usg; then
7720                         xxx="a USG one, i.e. you use getpgrp()."
7721                 else
7722                         # SVR4 systems can appear rather BSD-ish.
7723                         case "$i_unistd" in
7724                         $undef)
7725                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7726                                 val="$define"
7727                                 ;;
7728                         $define)
7729                                 xxx="probably a USG one, i.e. you use getpgrp()."
7730                                 val="$undef"
7731                                 ;;
7732                         esac
7733                 fi
7734                 echo "Assuming your getpgrp is $xxx" >&4
7735         fi
7736         ;;
7737 *) val="$undef";;
7738 esac
7739 set d_bsdgetpgrp
7740 eval $setvar
7741 $rm -f set set.c
7742
7743 : see if setpgrp exists
7744 set setpgrp d_setpgrp
7745 eval $inlibc
7746
7747 case "$d_setpgrp" in
7748 "$define")
7749         echo " "
7750         echo "Checking to see which flavor of setpgrp is in use..."
7751         $cat >set.c <<EOP
7752 #$i_unistd I_UNISTD
7753 #include <sys/types.h>
7754 #ifdef I_UNISTD
7755 #  include <unistd.h>
7756 #endif
7757 int main()
7758 {
7759         if (getuid() == 0) {
7760                 printf("(I see you are running Configure as super-user...)\n");
7761                 setuid(1);
7762         }
7763 #ifdef TRY_BSD_PGRP
7764         if (-1 == setpgrp(1, 1))
7765                 exit(0);
7766 #else
7767         if (setpgrp() != -1)
7768                 exit(0);
7769 #endif
7770         exit(1);
7771 }
7772 EOP
7773         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7774                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7775                 val="$define"
7776         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7777                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7778                 val="$undef"
7779         else
7780                 echo "(I can't seem to compile and run the test program.)"
7781                 if ./usg; then
7782                         xxx="a USG one, i.e. you use setpgrp()."
7783                 else
7784                         # SVR4 systems can appear rather BSD-ish.
7785                         case "$i_unistd" in
7786                         $undef)
7787                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7788                                 val="$define"
7789                                 ;;
7790                         $define)
7791                                 xxx="probably a USG one, i.e. you use setpgrp()."
7792                                 val="$undef"
7793                                 ;;
7794                         esac
7795                 fi
7796                 echo "Assuming your setpgrp is $xxx" >&4
7797         fi
7798         ;;
7799 *) val="$undef";;
7800 esac
7801 set d_bsdsetpgrp
7802 eval $setvar
7803 $rm -f set set.c
7804 : see if bzero exists
7805 set bzero d_bzero
7806 eval $inlibc
7807
7808 : see if signal is declared as pointer to function returning int or void
7809 echo " "
7810 xxx=`./findhdr signal.h`
7811 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7812 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7813         echo "You have int (*signal())() instead of void." >&4
7814         val="$undef"
7815 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7816         echo "You have void (*signal())()." >&4
7817         val="$define"
7818 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7819         echo "You have int (*signal())() instead of void." >&4
7820         val="$undef"
7821 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7822         echo "You have void (*signal())()." >&4
7823         val="$define"
7824 else
7825         case "$d_voidsig" in
7826         '')
7827         echo "I can't determine whether signal handler returns void or int..." >&4
7828                 dflt=void
7829                 rp="What type does your signal handler return?"
7830                 . ./myread
7831                 case "$ans" in
7832                 v*) val="$define";;
7833                 *) val="$undef";;
7834                 esac;;
7835         "$define")
7836                 echo "As you already told me, signal handler returns void." >&4
7837                 val="$define"
7838                 ;;
7839         *)      echo "As you already told me, signal handler returns int." >&4
7840                 val="$undef"
7841                 ;;
7842         esac
7843 fi
7844 set d_voidsig
7845 eval $setvar
7846 case "$d_voidsig" in
7847 "$define") signal_t="void";;
7848 *) signal_t="int";;
7849 esac
7850 $rm -f $$.tmp
7851
7852 : check for ability to cast large floats to 32-bit ints.
7853 echo " "
7854 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7855 if $test "$intsize" -ge 4; then
7856         xxx=int
7857 else
7858         xxx=long
7859 fi
7860 $cat >try.c <<EOCP
7861 #include <stdio.h>
7862 #include <sys/types.h>
7863 #include <signal.h>
7864 $signal_t blech(s) int s; { exit(3); }
7865 int main()
7866 {
7867         $xxx i32;
7868         double f, g;
7869         int result = 0;
7870         char str[16];
7871         signal(SIGFPE, blech);
7872
7873         /* Don't let compiler optimize the test away.  Store the number 
7874            in a writable string for gcc to pass to sscanf under HP/UX.
7875         */
7876         sprintf(str, "2147483647");
7877         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7878         g = 10 * f;
7879         i32  = ($xxx) g;
7880
7881         /* x86 processors will probably give 0x8000 0000, which is a
7882        sign change.  We don't want that.  We want to mimic SPARC
7883            behavior here, which is to preserve the sign and give
7884            back 0x7fff ffff.
7885         */
7886         if (i32 != ($xxx) f)
7887                 result |= 1;
7888         exit(result);
7889 }
7890 EOCP
7891 set try
7892 if eval $compile_ok; then
7893         ./try
7894         yyy=$?
7895 else
7896         echo "(I can't seem to compile the test program--assuming it can't)"
7897         yyy=1
7898 fi
7899 case "$yyy" in
7900 0)      val="$define"
7901         echo "Yup, it can."
7902         ;;
7903 *)      val="$undef"
7904         echo "Nope, it can't."
7905         ;;
7906 esac
7907 set d_casti32
7908 eval $setvar
7909 $rm -f try try.*
7910
7911 : check for ability to cast negative floats to unsigned
7912 echo " "
7913 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7914 $cat >try.c <<EOCP
7915 #include <stdio.h>
7916 #include <sys/types.h>
7917 #include <signal.h>
7918 $signal_t blech(s) int s; { exit(7); }
7919 $signal_t blech_in_list(s) int s; { exit(4); }
7920 unsigned long dummy_long(p) unsigned long p; { return p; }
7921 unsigned int dummy_int(p) unsigned int p; { return p; }
7922 unsigned short dummy_short(p) unsigned short p; { return p; }
7923 int main()
7924 {
7925         double f;
7926         unsigned long along;
7927         unsigned int aint;
7928         unsigned short ashort;
7929         int result = 0;
7930         char str[16];
7931         
7932         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7933            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7934            optimized the whole file away
7935         */
7936         /* Store the number in a writable string for gcc to pass to 
7937            sscanf under HP/UX.
7938         */
7939         sprintf(str, "-123");
7940         sscanf(str, "%lf", &f);  /* f = -123.; */
7941
7942         signal(SIGFPE, blech);
7943         along = (unsigned long)f;
7944         aint = (unsigned int)f;
7945         ashort = (unsigned short)f;
7946         if (along != (unsigned long)-123)
7947                 result |= 1;
7948         if (aint != (unsigned int)-123)
7949                 result |= 1;
7950         if (ashort != (unsigned short)-123)
7951                 result |= 1;
7952         sprintf(str, "1073741824.");
7953         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7954         f = f + f;
7955         along = 0;
7956         along = (unsigned long)f;
7957         if (along != 0x80000000)
7958                 result |= 2;
7959         f -= 1.;
7960         along = 0;
7961         along = (unsigned long)f;
7962         if (along != 0x7fffffff)
7963                 result |= 1;
7964         f += 2.;
7965         along = 0;
7966         along = (unsigned long)f;
7967         if (along != 0x80000001)
7968                 result |= 2;
7969         if (result)
7970                 exit(result);
7971         signal(SIGFPE, blech_in_list);
7972         sprintf(str, "123.");
7973         sscanf(str, "%lf", &f);  /* f = 123.; */
7974         along = dummy_long((unsigned long)f);
7975         aint = dummy_int((unsigned int)f);
7976         ashort = dummy_short((unsigned short)f);
7977         if (along != (unsigned long)123)
7978                 result |= 4;
7979         if (aint != (unsigned int)123)
7980                 result |= 4;
7981         if (ashort != (unsigned short)123)
7982                 result |= 4;
7983         exit(result);
7984
7985 }
7986 EOCP
7987 set try
7988 if eval $compile_ok; then
7989         ./try
7990         castflags=$?
7991 else
7992         echo "(I can't seem to compile the test program--assuming it can't)"
7993         castflags=7
7994 fi
7995 case "$castflags" in
7996 0)      val="$define"
7997         echo "Yup, it can."
7998         ;;
7999 *)      val="$undef"
8000         echo "Nope, it can't."
8001         ;;
8002 esac
8003 set d_castneg
8004 eval $setvar
8005 $rm -f try.*
8006
8007 : see if vprintf exists
8008 echo " "
8009 if set vprintf val -f d_vprintf; eval $csym; $val; then
8010         echo 'vprintf() found.' >&4
8011         val="$define"
8012         $cat >vprintf.c <<'EOF'
8013 #include <varargs.h>
8014
8015 int main() { xxx("foo"); }
8016
8017 xxx(va_alist)
8018 va_dcl
8019 {
8020         va_list args;
8021         char buf[10];
8022
8023         va_start(args);
8024         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8025 }
8026 EOF
8027         set vprintf
8028         if eval $compile && ./vprintf; then
8029                 echo "Your vsprintf() returns (int)." >&4
8030                 val2="$undef"
8031         else
8032                 echo "Your vsprintf() returns (char*)." >&4
8033                 val2="$define"
8034         fi
8035 else
8036         echo 'vprintf() NOT found.' >&4
8037                 val="$undef"
8038                 val2="$undef"
8039 fi
8040 set d_vprintf
8041 eval $setvar
8042 val=$val2
8043 set d_charvspr
8044 eval $setvar
8045
8046 : see if chown exists
8047 set chown d_chown
8048 eval $inlibc
8049
8050 : see if chroot exists
8051 set chroot d_chroot
8052 eval $inlibc
8053
8054 : see if chsize exists
8055 set chsize d_chsize
8056 eval $inlibc
8057
8058 : check for const keyword
8059 echo " "
8060 echo 'Checking to see if your C compiler knows about "const"...' >&4
8061 $cat >const.c <<'EOCP'
8062 typedef struct spug { int drokk; } spug;
8063 int main()
8064 {
8065         const char *foo;
8066         const spug y;
8067 }
8068 EOCP
8069 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8070         val="$define"
8071         echo "Yup, it does."
8072 else
8073         val="$undef"
8074         echo "Nope, it doesn't."
8075 fi
8076 set d_const
8077 eval $setvar
8078
8079 : see if crypt exists
8080 echo " "
8081 if set crypt val -f d_crypt; eval $csym; $val; then
8082         echo 'crypt() found.' >&4
8083         val="$define"
8084         cryptlib=''
8085 else
8086         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8087         if $test -z "$cryptlib"; then
8088                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8089         else
8090                 cryptlib=-lcrypt
8091         fi
8092         if $test -z "$cryptlib"; then
8093                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8094         else
8095                 cryptlib=-lcrypt
8096         fi
8097         if $test -z "$cryptlib"; then
8098                 cryptlib=`./loc libcrypt$_a "" $libpth`
8099         else
8100                 cryptlib=-lcrypt
8101         fi
8102         if $test -z "$cryptlib"; then
8103                 echo 'crypt() NOT found.' >&4
8104                 val="$undef"
8105         else
8106                 val="$define"
8107         fi
8108 fi
8109 set d_crypt
8110 eval $setvar
8111
8112 : get csh whereabouts
8113 case "$csh" in
8114 'csh') val="$undef" ;;
8115 *) val="$define" ;;
8116 esac
8117 set d_csh
8118 eval $setvar
8119 : Respect a hint or command line value for full_csh.
8120 case "$full_csh" in
8121 '') full_csh=$csh ;;
8122 esac
8123
8124 : see if cuserid exists
8125 set cuserid d_cuserid
8126 eval $inlibc
8127
8128 : see if this is a limits.h system
8129 set limits.h i_limits
8130 eval $inhdr
8131
8132 : see if this is a float.h system
8133 set float.h i_float
8134 eval $inhdr
8135
8136 : See if number of significant digits in a double precision number is known
8137 echo " "
8138 $cat >dbl_dig.c <<EOM
8139 #$i_limits I_LIMITS
8140 #$i_float I_FLOAT
8141 #ifdef I_LIMITS
8142 #include <limits.h>
8143 #endif
8144 #ifdef I_FLOAT
8145 #include <float.h>
8146 #endif
8147 #ifdef DBL_DIG
8148 printf("Contains DBL_DIG");
8149 #endif
8150 EOM
8151 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8152 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8153         echo "DBL_DIG found." >&4
8154         val="$define"
8155 else
8156         echo "DBL_DIG NOT found." >&4
8157         val="$undef"
8158 fi
8159 $rm -f dbl_dig.?
8160 set d_dbl_dig
8161 eval $setvar
8162
8163 : see if difftime exists
8164 set difftime d_difftime
8165 eval $inlibc
8166
8167 : see if this is a dirent system
8168 echo " "
8169 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8170         val="$define"
8171         echo "<dirent.h> found." >&4
8172 else
8173         val="$undef"
8174         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8175                 echo "<sys/dir.h> found." >&4
8176                 echo " "
8177         else
8178                 xinc=`./findhdr sys/ndir.h`
8179         fi
8180         echo "<dirent.h> NOT found." >&4
8181 fi
8182 set i_dirent
8183 eval $setvar
8184
8185 : Look for type of directory structure.
8186 echo " "
8187 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8188
8189 case "$direntrytype" in
8190 ''|' ')
8191         case "$i_dirent" in
8192         $define) guess1='struct dirent' ;;
8193         *) guess1='struct direct'  ;;
8194         esac
8195         ;;
8196 *)      guess1="$direntrytype"
8197         ;;
8198 esac
8199
8200 case "$guess1" in
8201 'struct dirent') guess2='struct direct' ;;
8202 *) guess2='struct dirent' ;;
8203 esac
8204                 
8205 if $contains "$guess1" try.c >/dev/null 2>&1; then
8206         direntrytype="$guess1"
8207         echo "Your directory entries are $direntrytype." >&4
8208 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8209         direntrytype="$guess2"
8210         echo "Your directory entries seem to be $direntrytype." >&4
8211 else
8212         echo "I don't recognize your system's directory entries." >&4
8213         rp="What type is used for directory entries on this system?"
8214         dflt="$guess1"
8215         . ./myread
8216         direntrytype="$ans"
8217 fi
8218 $rm -f try.c
8219
8220
8221 : see if the directory entry stores field length
8222 echo " "
8223 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8224 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8225         echo "Good, your directory entry keeps length information in d_namlen." >&4
8226         val="$define"
8227 else
8228         echo "Your directory entry does not know about the d_namlen field." >&4
8229         val="$undef"
8230 fi
8231 set d_dirnamlen
8232 eval $setvar
8233 $rm -f try.c
8234
8235 : see if dlerror exists
8236 xxx_runnm="$runnm"
8237 runnm=false
8238 set dlerror d_dlerror
8239 eval $inlibc
8240 runnm="$xxx_runnm"
8241
8242 : see if dlfcn is available
8243 set dlfcn.h i_dlfcn
8244 eval $inhdr
8245
8246 case "$usedl" in
8247 $define|y|true)
8248         $cat << EOM
8249
8250 On a few systems, the dynamically loaded modules that perl generates and uses
8251 will need a different extension than shared libs. The default will probably
8252 be appropriate.
8253
8254 EOM
8255         case "$dlext" in
8256         '')     dflt="$so" ;;
8257         *)      dflt="$dlext" ;;
8258         esac
8259         rp='What is the extension of dynamically loaded modules'
8260         . ./myread
8261         dlext="$ans"
8262         ;;
8263 *)
8264         dlext="none"
8265         ;;
8266 esac
8267
8268 : Check if dlsym need a leading underscore
8269 echo " "
8270 val="$undef"
8271
8272 case "$dlsrc" in
8273 dl_dlopen.xs)
8274         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8275         $cat >dyna.c <<'EOM'
8276 fred () { }
8277 EOM
8278
8279 $cat >fred.c<<EOM
8280
8281 #include <stdio.h>
8282 #$i_dlfcn I_DLFCN
8283 #ifdef I_DLFCN
8284 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8285 #else
8286 #include <sys/types.h>
8287 #include <nlist.h>
8288 #include <link.h>
8289 #endif
8290
8291 extern int fred() ;
8292
8293 int main()
8294 {
8295     void * handle ;
8296     void * symbol ;
8297 #ifndef RTLD_LAZY
8298     int mode = 1 ;
8299 #else
8300     int mode = RTLD_LAZY ;
8301 #endif
8302     handle = dlopen("./dyna.$dlext", mode) ;
8303     if (handle == NULL) {
8304         printf ("1\n") ;
8305         fflush (stdout) ;
8306         exit(0);
8307     }
8308     symbol = dlsym(handle, "fred") ;
8309     if (symbol == NULL) {
8310         /* try putting a leading underscore */
8311         symbol = dlsym(handle, "_fred") ;
8312         if (symbol == NULL) {
8313             printf ("2\n") ;
8314             fflush (stdout) ;
8315             exit(0);
8316         }
8317         printf ("3\n") ;
8318     }
8319     else
8320         printf ("4\n") ;
8321     fflush (stdout) ;
8322     exit(0);
8323 }
8324 EOM
8325         : Call the object file tmp-dyna.o in case dlext=o.
8326         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8327                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8328                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8329                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8330                 xxx=`./fred`
8331                 case $xxx in
8332                 1)      echo "Test program failed using dlopen." >&4
8333                         echo "Perhaps you should not use dynamic loading." >&4;;
8334                 2)      echo "Test program failed using dlsym." >&4
8335                         echo "Perhaps you should not use dynamic loading." >&4;;
8336                 3)      echo "dlsym needs a leading underscore" >&4
8337                         val="$define" ;;
8338                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8339                 esac
8340         else
8341                 echo "I can't compile and run the test program." >&4
8342                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8343         fi
8344         ;;
8345 esac
8346                 
8347 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8348
8349 set d_dlsymun
8350 eval $setvar
8351
8352 hasproto='varname=$1; func=$2; shift; shift;
8353 while $test $# -ge 2; do
8354         case "$1" in
8355         $define) echo "#include <$2>";;
8356         esac ;
8357     shift 2;
8358 done > try.c;
8359 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8360 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8361         echo "$func() prototype found.";
8362         val="$define";
8363 else
8364         echo "$func() prototype NOT found.";
8365         val="$undef";
8366 fi;
8367 set $varname;
8368 eval $setvar;
8369 $rm -f try.c tryout.c'
8370
8371 : see if prototype for drand48 is available
8372 echo " "
8373 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8374 eval $hasproto
8375
8376 : see if dup2 exists
8377 set dup2 d_dup2
8378 eval $inlibc
8379
8380 : see if eaccess exists
8381 set eaccess d_eaccess
8382 eval $inlibc
8383
8384 : see if endgrent exists
8385 set endgrent d_endgrent
8386 eval $inlibc
8387
8388 : see if endhostent exists
8389 set endhostent d_endhent
8390 eval $inlibc
8391
8392 : see if endnetent exists
8393 set endnetent d_endnent
8394 eval $inlibc
8395
8396 : see if endprotoent exists
8397 set endprotoent d_endpent
8398 eval $inlibc
8399
8400 : see if endpwent exists
8401 set endpwent d_endpwent
8402 eval $inlibc
8403
8404 : see if endservent exists
8405 set endservent d_endsent
8406 eval $inlibc
8407
8408 : see if endspent exists
8409 set endspent d_endspent
8410 eval $inlibc
8411
8412 : Locate the flags for 'open()'
8413 echo " "
8414 $cat >open3.c <<'EOCP'
8415 #include <sys/types.h>
8416 #ifdef I_FCNTL
8417 #include <fcntl.h>
8418 #endif
8419 #ifdef I_SYS_FILE
8420 #include <sys/file.h>
8421 #endif
8422 int main() {
8423         if(O_RDONLY);
8424 #ifdef O_TRUNC
8425         exit(0);
8426 #else
8427         exit(1);
8428 #endif
8429 }
8430 EOCP
8431 : check sys/file.h first to get FREAD on Sun
8432 if $test `./findhdr sys/file.h` && \
8433                 set open3 -DI_SYS_FILE && eval $compile; then
8434         h_sysfile=true;
8435         echo "<sys/file.h> defines the O_* constants..." >&4
8436         if ./open3; then
8437                 echo "and you have the 3 argument form of open()." >&4
8438                 val="$define"
8439         else
8440                 echo "but not the 3 argument form of open().  Oh, well." >&4
8441                 val="$undef"
8442         fi
8443 elif $test `./findhdr fcntl.h` && \
8444                 set open3 -DI_FCNTL && eval $compile; then
8445         h_fcntl=true;
8446         echo "<fcntl.h> defines the O_* constants..." >&4
8447         if ./open3; then
8448                 echo "and you have the 3 argument form of open()." >&4
8449                 val="$define"
8450         else
8451                 echo "but not the 3 argument form of open().  Oh, well." >&4
8452                 val="$undef"
8453         fi
8454 else
8455         val="$undef"
8456         echo "I can't find the O_* constant definitions!  You got problems." >&4
8457 fi
8458 set d_open3
8459 eval $setvar
8460 $rm -f open3*
8461
8462 : see which of string.h or strings.h is needed
8463 echo " "
8464 strings=`./findhdr string.h`
8465 if $test "$strings" && $test -r "$strings"; then
8466         echo "Using <string.h> instead of <strings.h>." >&4
8467         val="$define"
8468 else
8469         val="$undef"
8470         strings=`./findhdr strings.h`
8471         if $test "$strings" && $test -r "$strings"; then
8472                 echo "Using <strings.h> instead of <string.h>." >&4
8473         else
8474                 echo "No string header found -- You'll surely have problems." >&4
8475         fi
8476 fi
8477 set i_string
8478 eval $setvar
8479 case "$i_string" in
8480 "$undef") strings=`./findhdr strings.h`;;
8481 *)        strings=`./findhdr string.h`;;
8482 esac
8483
8484 : check for non-blocking I/O stuff
8485 case "$h_sysfile" in
8486 true) echo "#include <sys/file.h>" > head.c;;
8487 *)
8488         case "$h_fcntl" in
8489         true) echo "#include <fcntl.h>" > head.c;;
8490         *) echo "#include <sys/fcntl.h>" > head.c;;
8491         esac
8492         ;;
8493 esac
8494 echo " "
8495 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8496 case "$o_nonblock" in
8497 '')
8498         $cat head.c > try.c
8499         $cat >>try.c <<'EOCP'
8500 #include <stdio.h>
8501 int main() {
8502 #ifdef O_NONBLOCK
8503         printf("O_NONBLOCK\n");
8504         exit(0);
8505 #endif
8506 #ifdef O_NDELAY
8507         printf("O_NDELAY\n");
8508         exit(0);
8509 #endif
8510 #ifdef FNDELAY
8511         printf("FNDELAY\n");
8512         exit(0);
8513 #endif
8514         exit(0);
8515 }
8516 EOCP
8517         set try
8518         if eval $compile_ok; then
8519                 o_nonblock=`./try`
8520                 case "$o_nonblock" in
8521                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8522                 *) echo "Seems like we can use $o_nonblock.";;
8523                 esac
8524         else
8525                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8526         fi
8527         ;;
8528 *) echo "Using $hint value $o_nonblock.";;
8529 esac
8530 $rm -f try try.* .out core
8531
8532 echo " "
8533 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8534 case "$eagain" in
8535 '')
8536         $cat head.c > try.c
8537         $cat >>try.c <<EOCP
8538 #include <errno.h>
8539 #include <sys/types.h>
8540 #include <signal.h>
8541 #include <stdio.h> 
8542 #define MY_O_NONBLOCK $o_nonblock
8543 #ifndef errno  /* XXX need better Configure test */
8544 extern int errno;
8545 #endif
8546 #$i_unistd I_UNISTD
8547 #ifdef I_UNISTD
8548 #include <unistd.h>
8549 #endif
8550 #ifdef $i_string
8551 #include <string.h>
8552 #else
8553 #include <strings.h>
8554 #endif
8555 $signal_t blech(x) int x; { exit(3); }
8556 EOCP
8557         $cat >> try.c <<'EOCP'
8558 int main()
8559 {
8560         int pd[2];
8561         int pu[2];
8562         char buf[1];
8563         char string[100];
8564
8565         pipe(pd);       /* Down: child -> parent */
8566         pipe(pu);       /* Up: parent -> child */
8567         if (0 != fork()) {
8568                 int ret;
8569                 close(pd[1]);   /* Parent reads from pd[0] */
8570                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8571                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8572                         exit(1);
8573                 signal(SIGALRM, blech);
8574                 alarm(5);
8575                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8576                         exit(2);
8577                 sprintf(string, "%d\n", ret);
8578                 write(2, string, strlen(string));
8579                 alarm(0);
8580 #ifdef EAGAIN
8581                 if (errno == EAGAIN) {
8582                         printf("EAGAIN\n");
8583                         goto ok;
8584                 }
8585 #endif
8586 #ifdef EWOULDBLOCK
8587                 if (errno == EWOULDBLOCK)
8588                         printf("EWOULDBLOCK\n");
8589 #endif
8590         ok:
8591                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8592                 sleep(2);                               /* Give it time to close our pipe */
8593                 alarm(5);
8594                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8595                 alarm(0);
8596                 sprintf(string, "%d\n", ret);
8597                 write(3, string, strlen(string));
8598                 exit(0);
8599         }
8600
8601         close(pd[0]);                   /* We write to pd[1] */
8602         close(pu[1]);                   /* We read from pu[0] */
8603         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8604         close(pd[1]);                   /* Pipe pd is now fully closed! */
8605         exit(0);                                /* Bye bye, thank you for playing! */
8606 }
8607 EOCP
8608         set try
8609         if eval $compile_ok; then
8610                 echo "$startsh" >mtry
8611                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8612                 chmod +x mtry
8613                 ./mtry >/dev/null 2>&1
8614                 case $? in
8615                 0) eagain=`$cat try.out`;;
8616                 1) echo "Could not perform non-blocking setting!";;
8617                 2) echo "I did a successful read() for something that was not there!";;
8618                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8619                 *) echo "Something terribly wrong happened during testing.";;
8620                 esac
8621                 rd_nodata=`$cat try.ret`
8622                 echo "A read() system call with no data present returns $rd_nodata."
8623                 case "$rd_nodata" in
8624                 0|-1) ;;
8625                 *)
8626                         echo "(That's peculiar, fixing that to be -1.)"
8627                         rd_nodata=-1
8628                         ;;
8629                 esac
8630                 case "$eagain" in
8631                 '')
8632                         echo "Forcing errno EAGAIN on read() with no data available."
8633                         eagain=EAGAIN
8634                         ;;
8635                 *)
8636                         echo "Your read() sets errno to $eagain when no data is available."
8637                         ;;
8638                 esac
8639                 status=`$cat try.err`
8640                 case "$status" in
8641                 0) echo "And it correctly returns 0 to signal EOF.";;
8642                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8643                 *) echo "However, your read() returns '$status' on EOF??";;
8644                 esac
8645                 val="$define"
8646                 if test "$status" = "$rd_nodata"; then
8647                         echo "WARNING: you can't distinguish between EOF and no data!"
8648                         val="$undef"
8649                 fi
8650         else
8651                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8652                 eagain=EAGAIN
8653         fi
8654         set d_eofnblk
8655         eval $setvar
8656         ;;
8657 *)
8658         echo "Using $hint value $eagain."
8659         echo "Your read() returns $rd_nodata when no data is present."
8660         case "$d_eofnblk" in
8661         "$define") echo "And you can see EOF because read() returns 0.";;
8662         "$undef") echo "But you can't see EOF status from read() returned value.";;
8663         *)
8664                 echo "(Assuming you can't see EOF status from read anyway.)"
8665                 d_eofnblk=$undef
8666                 ;;
8667         esac
8668         ;;
8669 esac
8670 $rm -f try try.* .out core head.c mtry
8671
8672 : see if fchmod exists
8673 set fchmod d_fchmod
8674 eval $inlibc
8675
8676 : see if fchown exists
8677 set fchown d_fchown
8678 eval $inlibc
8679
8680 : see if this is an fcntl system
8681 set fcntl d_fcntl
8682 eval $inlibc
8683
8684 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8685 while $test $# -ge 2; do
8686         case "$1" in
8687         $define) echo "#include <$2>";;
8688         esac ;
8689     shift 2;
8690 done > try.c;
8691 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8692 set try;
8693 if eval $compile; then
8694         val="$define";
8695 else
8696         val="$undef";
8697 fi;
8698 set $varname;
8699 eval $setvar;
8700 $rm -f try.c try.o'
8701
8702 socketlib=''
8703 sockethdr=''
8704 : see whether socket exists
8705 echo " "
8706 $echo $n "Hmm... $c" >&4
8707 if set socket val -f d_socket; eval $csym; $val; then
8708         echo "Looks like you have Berkeley networking support." >&4
8709         d_socket="$define"
8710         if set setsockopt val -f; eval $csym; $val; then
8711                 d_oldsock="$undef"
8712         else
8713                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8714                 d_oldsock="$define"
8715         fi
8716 else
8717         if $contains socklib libc.list >/dev/null 2>&1; then
8718                 echo "Looks like you have Berkeley networking support." >&4
8719                 d_socket="$define"
8720                 : we will have to assume that it supports the 4.2 BSD interface
8721                 d_oldsock="$undef"
8722         else
8723                 echo "You don't have Berkeley networking in libc$_a..." >&4
8724                 if test "X$d_socket" = "X$define"; then
8725                    echo "...but you seem to believe that you have sockets." >&4
8726                 else
8727                         for net in net socket
8728                         do
8729                                 if test -f /usr/lib/lib$net$_a; then
8730                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8731                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8732                                         if $contains socket libc.list >/dev/null 2>&1; then
8733                                                 d_socket="$define"
8734                                                 socketlib="-l$net"
8735                                                 case "$net" in
8736                                                 net)
8737                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8738                                                         sockethdr="-I/usr/netinclude"
8739                                                         ;;
8740                                                 esac
8741                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8742                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8743                                                         d_oldsock="$undef"
8744                                                 else
8745                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8746                                                         d_oldsock="$define"
8747                                                 fi
8748                                                 break
8749                                         fi
8750                                 fi
8751                         done
8752                         if test "X$d_socket" != "X$define"; then
8753                            echo "or anywhere else I see." >&4
8754                            d_socket="$undef"
8755                            d_oldsock="$undef"
8756                         fi
8757                 fi
8758         fi
8759 fi
8760
8761 : see if socketpair exists
8762 set socketpair d_sockpair
8763 eval $inlibc
8764
8765
8766 echo " "
8767 echo "Checking the availability of certain socket constants..." >& 4
8768 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8769         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8770         $cat >try.c <<EOF
8771 #include <sys/types.h>
8772 #include <sys/socket.h>
8773 int main() {
8774     int i = $ENUM;
8775 }
8776 EOF
8777         val="$undef"
8778         set try; if eval $compile; then
8779                 val="$define"
8780         fi
8781         set d_${enum}; eval $setvar
8782         $rm -f try.c try
8783 done
8784
8785 : see if sys/select.h has to be included
8786 set sys/select.h i_sysselct
8787 eval $inhdr
8788
8789 : see if we should include time.h, sys/time.h, or both
8790 echo " "
8791 if test "X$timeincl" = X; then
8792         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8793         $echo $n "I'm now running the test program...$c"
8794         $cat >try.c <<'EOCP'
8795 #include <sys/types.h>
8796 #ifdef I_TIME
8797 #include <time.h>
8798 #endif
8799 #ifdef I_SYSTIME
8800 #ifdef SYSTIMEKERNEL
8801 #define KERNEL
8802 #endif
8803 #include <sys/time.h>
8804 #endif
8805 #ifdef I_SYSSELECT
8806 #include <sys/select.h>
8807 #endif
8808 int main()
8809 {
8810         struct tm foo;
8811 #ifdef S_TIMEVAL
8812         struct timeval bar;
8813 #endif
8814 #ifdef S_TIMEZONE
8815         struct timezone tzp;
8816 #endif
8817         if (foo.tm_sec == foo.tm_sec)
8818                 exit(0);
8819 #ifdef S_TIMEVAL
8820         if (bar.tv_sec == bar.tv_sec)
8821                 exit(0);
8822 #endif
8823         exit(1);
8824 }
8825 EOCP
8826         flags=''
8827         for s_timezone in '-DS_TIMEZONE' ''; do
8828         sysselect=''
8829         for s_timeval in '-DS_TIMEVAL' ''; do
8830         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8831         for i_time in '' '-DI_TIME'; do
8832         for i_systime in '-DI_SYSTIME' ''; do
8833                 case "$flags" in
8834                 '') $echo $n ".$c"
8835                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8836                         if eval $compile; then
8837                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8838                                 shift
8839                                 flags="$*"
8840                                 echo " "
8841                                 $echo $n "Succeeded with $flags$c"
8842                         fi
8843                         ;;
8844                 esac
8845         done
8846         done
8847         done
8848         done
8849         done
8850         timeincl=''
8851         echo " "
8852         case "$flags" in
8853         *SYSTIMEKERNEL*) i_systimek="$define"
8854                 timeincl=`./findhdr sys/time.h`
8855                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8856         *) i_systimek="$undef";;
8857         esac
8858         case "$flags" in
8859         *I_TIME*) i_time="$define"
8860                 timeincl=`./findhdr time.h`" $timeincl"
8861                 echo "We'll include <time.h>." >&4;;
8862         *) i_time="$undef";;
8863         esac
8864         case "$flags" in
8865         *I_SYSTIME*) i_systime="$define"
8866                 timeincl=`./findhdr sys/time.h`" $timeincl"
8867                 echo "We'll include <sys/time.h>." >&4;;
8868         *) i_systime="$undef";;
8869         esac
8870         $rm -f try.c try
8871 fi
8872
8873 : check for fd_set items
8874 $cat <<EOM
8875
8876 Checking to see how well your C compiler handles fd_set and friends ...
8877 EOM
8878 $cat >fd_set.c <<EOCP
8879 #$i_systime I_SYS_TIME
8880 #$i_sysselct I_SYS_SELECT
8881 #$d_socket HAS_SOCKET
8882 #include <sys/types.h>
8883 #ifdef HAS_SOCKET
8884 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8885 #endif
8886 #ifdef I_SYS_TIME
8887 #include <sys/time.h>
8888 #endif
8889 #ifdef I_SYS_SELECT
8890 #include <sys/select.h>
8891 #endif
8892 int main() {
8893         fd_set fds;
8894
8895 #ifdef TRYBITS
8896         if(fds.fds_bits);
8897 #endif
8898
8899 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8900         exit(0);
8901 #else
8902         exit(1);
8903 #endif
8904 }
8905 EOCP
8906 set fd_set -DTRYBITS
8907 if eval $compile; then
8908         d_fds_bits="$define"
8909         d_fd_set="$define"
8910         echo "Well, your system knows about the normal fd_set typedef..." >&4
8911         if ./fd_set; then
8912                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8913                 d_fd_macros="$define"
8914         else
8915                 $cat >&4 <<'EOM'
8916 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8917 EOM
8918                 d_fd_macros="$undef"
8919         fi
8920 else
8921         $cat <<'EOM'
8922 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8923 EOM
8924         set fd_set
8925         if eval $compile; then
8926                 d_fds_bits="$undef"
8927                 d_fd_set="$define"
8928                 echo "Well, your system has some sort of fd_set available..." >&4
8929                 if ./fd_set; then
8930                         echo "and you have the normal fd_set macros." >&4
8931                         d_fd_macros="$define"
8932                 else
8933                         $cat <<'EOM'
8934 but not the normal fd_set macros!  Gross!  More work for me...
8935 EOM
8936                         d_fd_macros="$undef"
8937                 fi
8938         else
8939         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8940                 d_fd_set="$undef"
8941                 d_fds_bits="$undef"
8942                 d_fd_macros="$undef"
8943         fi
8944 fi
8945 $rm -f fd_set*
8946
8947 : see if fgetpos exists
8948 set fgetpos d_fgetpos
8949 eval $inlibc
8950
8951 : see if flock exists
8952 set flock d_flock
8953 eval $inlibc
8954
8955 : see if fork exists
8956 set fork d_fork
8957 eval $inlibc
8958
8959 : see if pathconf exists
8960 set pathconf d_pathconf
8961 eval $inlibc
8962
8963 : see if fpathconf exists
8964 set fpathconf d_fpathconf
8965 eval $inlibc
8966
8967
8968 : check for fpos64_t
8969 echo " "
8970 echo "Checking to see if you have fpos64_t..." >&4
8971 $cat >try.c <<EOCP
8972 #include <stdio.h>
8973 int main() { fpos64_t x = 7; }
8974 EOCP
8975 set try
8976 if eval $compile; then
8977         val="$define"
8978         echo "You have fpos64_t."
8979 else
8980         val="$undef"
8981         echo "You do not have fpos64_t."
8982         case "$fpossize" in
8983         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
8984         esac
8985 fi
8986 $rm -f try.* try
8987 set d_fpos64_t
8988 eval $setvar
8989
8990 hasstruct='varname=$1; struct=$2; shift; shift;
8991 while $test $# -ge 2; do
8992         case "$1" in
8993         $define) echo "#include <$2>";;
8994         esac ;
8995     shift 2;
8996 done > try.c;
8997 echo "int main () { struct $struct foo; }" >> try.c;
8998 set try;
8999 if eval $compile; then
9000         val="$define";
9001 else
9002         val="$undef";
9003 fi;
9004 set $varname;
9005 eval $setvar;
9006 $rm -f try.c try.o'
9007
9008 : see if this is a sys/param system
9009 set sys/param.h i_sysparam
9010 eval $inhdr
9011
9012 : see if this is a sys/mount.h system
9013 set sys/mount.h i_sysmount
9014 eval $inhdr
9015
9016 : see if sys/types.h has to be included
9017 set sys/types.h i_systypes
9018 eval $inhdr
9019
9020
9021 echo " "
9022 echo "Checking to see if your system supports struct fs_data..." >&4
9023 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9024 eval $hasstruct
9025 case "$d_fs_data_s" in
9026 "$define")      echo "Yes, it does."   ;;
9027 *)              echo "No, it doesn't." ;;
9028 esac
9029
9030 : see if fseeko exists
9031 set fseeko d_fseeko
9032 eval $inlibc
9033 case "$longsize" in
9034 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9035 esac
9036
9037 : see if fsetpos exists
9038 set fsetpos d_fsetpos
9039 eval $inlibc
9040
9041
9042 : see if fstatfs exists
9043 set fstatfs d_fstatfs
9044 eval $inlibc
9045
9046
9047 : see if statvfs exists
9048 set statvfs d_statvfs
9049 eval $inlibc
9050
9051 : see if fstatvfs exists
9052 set fstatvfs d_fstatvfs
9053 eval $inlibc
9054
9055
9056 : see if ftello exists
9057 set ftello d_ftello
9058 eval $inlibc
9059 case "$longsize" in
9060 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9061 esac
9062
9063 : see if getcwd exists
9064 set getcwd d_getcwd
9065 eval $inlibc
9066
9067
9068 : see if getfsstat exists
9069 set getfsstat d_getfsstat
9070 eval $inlibc
9071
9072 : see if getgrent exists
9073 set getgrent d_getgrent
9074 eval $inlibc
9075
9076 : see if gethostbyaddr exists
9077 set gethostbyaddr d_gethbyaddr
9078 eval $inlibc
9079
9080 : see if gethostbyname exists
9081 set gethostbyname d_gethbyname
9082 eval $inlibc
9083
9084 : see if gethostent exists
9085 set gethostent d_gethent
9086 eval $inlibc
9087
9088 : see how we will look up host name
9089 echo " "
9090 call=''
9091 if set gethostname val -f d_gethname; eval $csym; $val; then
9092         echo 'gethostname() found.' >&4
9093         d_gethname="$define"
9094         call=gethostname
9095 fi
9096 if set uname val -f d_uname; eval $csym; $val; then
9097         if ./xenix; then
9098                 $cat <<'EOM'
9099 uname() was found, but you're running xenix, and older versions of xenix
9100 have a broken uname(). If you don't really know whether your xenix is old
9101 enough to have a broken system call, use the default answer.
9102
9103 EOM
9104                 dflt=y
9105                 case "$d_uname" in
9106                 "$define") dflt=n;;
9107                 esac
9108                 rp='Is your uname() broken?'
9109                 . ./myread
9110                 case "$ans" in
9111                 n*) d_uname="$define"; call=uname;;
9112                 esac
9113         else
9114                 echo 'uname() found.' >&4
9115                 d_uname="$define"
9116                 case "$call" in
9117                 '') call=uname ;;
9118                 esac
9119         fi
9120 fi
9121 case "$d_gethname" in
9122 '') d_gethname="$undef";;
9123 esac
9124 case "$d_uname" in
9125 '') d_uname="$undef";;
9126 esac
9127 case "$d_uname$d_gethname" in
9128 *define*)
9129         dflt=n
9130         cat <<EOM
9131  
9132 Every now and then someone has a $call() that lies about the hostname
9133 but can't be fixed for political or economic reasons.  If you wish, I can
9134 pretend $call() isn't there and maybe compute hostname at run-time
9135 thanks to the '$phostname' command.
9136
9137 EOM
9138         rp="Shall I ignore $call() from now on?"
9139         . ./myread
9140         case "$ans" in
9141         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9142         esac;;
9143 esac
9144 case "$phostname" in
9145 '') aphostname='';;
9146 *) case "$aphostname" in
9147         /*) ;;
9148         *) set X $phostname
9149                 shift
9150                 file=$1
9151                 shift
9152                 file=`./loc $file $file $pth`
9153                 aphostname=`echo $file $*`
9154                 ;;
9155         esac
9156         ;;
9157 esac
9158 case "$d_uname$d_gethname" in
9159 *define*) ;;
9160 *)
9161         case "$phostname" in
9162         '')
9163                 echo "There will be no way for $package to get your hostname." >&4;;
9164         *)
9165         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9166                 ;;
9167         esac;;
9168 esac
9169 case "$d_phostname" in
9170 '') d_phostname="$undef";;
9171 esac
9172
9173 : see if this is a netdb.h system
9174 set netdb.h i_netdb
9175 eval $inhdr
9176
9177 : see if prototypes for various gethostxxx netdb.h functions are available
9178 echo " "
9179 set d_gethostprotos gethostent $i_netdb netdb.h
9180 eval $hasproto
9181
9182 : see if getlogin exists
9183 set getlogin d_getlogin
9184 eval $inlibc
9185
9186 : see if getmnt exists
9187 set getmnt d_getmnt
9188 eval $inlibc
9189
9190 : see if getmntent exists
9191 set getmntent d_getmntent
9192 eval $inlibc
9193
9194 : see if getnetbyaddr exists
9195 set getnetbyaddr d_getnbyaddr
9196 eval $inlibc
9197
9198 : see if getnetbyname exists
9199 set getnetbyname d_getnbyname
9200 eval $inlibc
9201
9202 : see if getnetent exists
9203 set getnetent d_getnent
9204 eval $inlibc
9205
9206 : see if prototypes for various getnetxxx netdb.h functions are available
9207 echo " "
9208 set d_getnetprotos getnetent $i_netdb netdb.h
9209 eval $hasproto
9210
9211
9212 : see if getprotobyname exists
9213 set getprotobyname d_getpbyname
9214 eval $inlibc
9215
9216 : see if getprotobynumber exists
9217 set getprotobynumber d_getpbynumber
9218 eval $inlibc
9219
9220 : see if getprotoent exists
9221 set getprotoent d_getpent
9222 eval $inlibc
9223
9224 : see if getpgid exists
9225 set getpgid d_getpgid
9226 eval $inlibc
9227
9228 : see if getpgrp2 exists
9229 set getpgrp2 d_getpgrp2
9230 eval $inlibc
9231
9232 : see if getppid exists
9233 set getppid d_getppid
9234 eval $inlibc
9235
9236 : see if getpriority exists
9237 set getpriority d_getprior
9238 eval $inlibc
9239
9240 : see if prototypes for various getprotoxxx netdb.h functions are available
9241 echo " "
9242 set d_getprotoprotos getprotoent $i_netdb netdb.h
9243 eval $hasproto
9244
9245 : see if getpwent exists
9246 set getpwent d_getpwent
9247 eval $inlibc
9248
9249
9250 : see if getservbyname exists
9251 set getservbyname d_getsbyname
9252 eval $inlibc
9253
9254 : see if getservbyport exists
9255 set getservbyport d_getsbyport
9256 eval $inlibc
9257
9258 : see if getservent exists
9259 set getservent d_getsent
9260 eval $inlibc
9261
9262 : see if prototypes for various getservxxx netdb.h functions are available
9263 echo " "
9264 set d_getservprotos getservent $i_netdb netdb.h
9265 eval $hasproto
9266
9267 : see if getspent exists
9268 set getspent d_getspent
9269 eval $inlibc
9270
9271 : see if getspnam exists
9272 set getspnam d_getspnam
9273 eval $inlibc
9274
9275 : see if gettimeofday or ftime exists
9276 set gettimeofday d_gettimeod
9277 eval $inlibc
9278 case "$d_gettimeod" in
9279 "$undef")
9280         set ftime d_ftime 
9281         eval $inlibc
9282         ;;
9283 *)
9284         val="$undef"; set d_ftime; eval $setvar
9285         ;;
9286 esac
9287 case "$d_gettimeod$d_ftime" in
9288 "$undef$undef")
9289         echo " "
9290         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9291         ;;
9292 esac
9293
9294 : see if this is an grp system
9295 set grp.h i_grp
9296 eval $inhdr
9297
9298 case "$i_grp" in
9299 $define)
9300         xxx=`./findhdr grp.h`
9301         $cppstdin $cppflags $cppminus < $xxx >$$.h
9302
9303         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9304                 val="$define"
9305         else
9306                 val="$undef"
9307         fi
9308         set d_grpasswd
9309         eval $setvar
9310
9311         $rm -f $$.h
9312         ;;
9313 *)
9314         val="$undef";
9315         set d_grpasswd; eval $setvar
9316         ;;
9317 esac
9318
9319 : see if hasmntopt exists
9320 set hasmntopt d_hasmntopt
9321 eval $inlibc
9322
9323 : see if this is a netinet/in.h or sys/in.h system
9324 set netinet/in.h i_niin sys/in.h i_sysin
9325 eval $inhdr
9326
9327 : see if arpa/inet.h has to be included
9328 set arpa/inet.h i_arpainet
9329 eval $inhdr
9330
9331 : see if htonl --and friends-- exists
9332 val=''
9333 set htonl val
9334 eval $inlibc
9335
9336 : Maybe they are macros.
9337 case "$val" in
9338 $undef)
9339         $cat >htonl.c <<EOM
9340 #include <stdio.h>
9341 #include <sys/types.h>
9342 #$i_niin I_NETINET_IN
9343 #$i_sysin I_SYS_IN
9344 #$i_arpainet I_ARPA_INET
9345 #ifdef I_NETINET_IN
9346 #include <netinet/in.h>
9347 #endif
9348 #ifdef I_SYS_IN
9349 #include <sys/in.h>
9350 #endif
9351 #ifdef I_ARPA_INET
9352 #include <arpa/inet.h>
9353 #endif
9354 #ifdef htonl
9355 printf("Defined as a macro.");
9356 #endif
9357 EOM
9358         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9359         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9360                 val="$define"
9361                 echo "But it seems to be defined as a macro." >&4
9362         fi
9363         $rm -f htonl.?
9364         ;;
9365 esac
9366 set d_htonl
9367 eval $setvar
9368
9369 : see if iconv exists
9370 set iconv d_iconv
9371 eval $inlibc
9372
9373 : index or strchr
9374 echo " "
9375 if set index val -f; eval $csym; $val; then
9376         if set strchr val -f d_strchr; eval $csym; $val; then
9377                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9378                         val="$define"
9379                         vali="$undef"
9380                         echo "strchr() found." >&4
9381                 else
9382                         val="$undef"
9383                         vali="$define"
9384                         echo "index() found." >&4
9385                 fi
9386         else
9387                 val="$undef"
9388                 vali="$define"
9389                 echo "index() found." >&4
9390         fi
9391 else
9392         if set strchr val -f d_strchr; eval $csym; $val; then
9393                 val="$define"
9394                 vali="$undef"
9395                 echo "strchr() found." >&4
9396         else
9397                 echo "No index() or strchr() found!" >&4
9398                 val="$undef"
9399                 vali="$undef"
9400         fi
9401 fi
9402 set d_strchr; eval $setvar
9403 val="$vali"
9404 set d_index; eval $setvar
9405
9406 : check whether inet_aton exists
9407 set inet_aton d_inetaton
9408 eval $inlibc
9409
9410 : see if inttypes.h is available
9411 : we want a real compile instead of Inhdr because some systems
9412 : have an inttypes.h which includes non-existent headers
9413 echo " "
9414 $cat >try.c <<EOCP
9415 #include <inttypes.h>
9416 int main() {
9417         static int32_t foo32 = 0x12345678;
9418 }
9419 EOCP
9420 set try
9421 if eval $compile; then
9422         echo "<inttypes.h> found." >&4
9423         val="$define"
9424 else
9425         echo "<inttypes.h> NOT found." >&4
9426         val="$undef"
9427 fi
9428 $rm -f try.c try
9429 set i_inttypes
9430 eval $setvar
9431
9432 : check for int64_t
9433 echo " "
9434 echo "Checking to see if you have int64_t..." >&4
9435 $cat >try.c <<EOCP
9436 #include <sys/types.h>
9437 #$i_inttypes I_INTTYPES
9438 #ifdef I_INTTYPES
9439 #include <inttypes.h>
9440 #endif
9441 int main() { int64_t x = 7; }
9442 EOCP
9443 set try
9444 if eval $compile; then
9445         val="$define"
9446         echo "You have int64_t."
9447 else
9448         val="$undef"
9449         echo "You do not have int64_t."
9450 fi
9451 $rm -f try try.*
9452 set d_int64_t
9453 eval $setvar
9454
9455 : Look for isascii
9456 echo " "
9457 $cat >isascii.c <<'EOCP'
9458 #include <stdio.h>
9459 #include <ctype.h>
9460 int main() {
9461         int c = 'A';
9462         if (isascii(c))
9463                 exit(0);
9464         else
9465                 exit(1);
9466 }
9467 EOCP
9468 set isascii
9469 if eval $compile; then
9470         echo "isascii() found." >&4
9471         val="$define"
9472 else
9473         echo "isascii() NOT found." >&4
9474         val="$undef"
9475 fi
9476 set d_isascii
9477 eval $setvar
9478 $rm -f isascii*
9479
9480 : see if killpg exists
9481 set killpg d_killpg
9482 eval $inlibc
9483
9484 : see if lchown exists
9485 echo " "
9486 $cat > try.c <<'EOCP'
9487 /* System header to define __stub macros and hopefully few prototypes,
9488     which can conflict with char lchown(); below.  */
9489 #include <assert.h>
9490 /* Override any gcc2 internal prototype to avoid an error.  */
9491 /* We use char because int might match the return type of a gcc2
9492    builtin and then its argument prototype would still apply.  */
9493 char lchown();
9494 int main() {
9495     /*  The GNU C library defines this for functions which it implements
9496         to always fail with ENOSYS.  Some functions are actually named
9497         something starting with __ and the normal name is an alias.  */
9498 #if defined (__stub_lchown) || defined (__stub___lchown)
9499 choke me
9500 #else
9501 lchown();
9502 #endif
9503 ; return 0; }
9504 EOCP
9505 set try
9506 if eval $compile; then
9507     $echo "lchown() found." >&4
9508     val="$define"
9509 else
9510     $echo "lchown() NOT found." >&4
9511     val="$undef"
9512 fi
9513 set d_lchown
9514 eval $setvar
9515
9516 : See if number of significant digits in a double precision number is known
9517 echo " "
9518 $cat >ldbl_dig.c <<EOM
9519 #$i_limits I_LIMITS
9520 #$i_float I_FLOAT
9521 #ifdef I_LIMITS
9522 #include <limits.h>
9523 #endif
9524 #ifdef I_FLOAT
9525 #include <float.h>
9526 #endif
9527 #ifdef LDBL_DIG
9528 printf("Contains LDBL_DIG");
9529 #endif
9530 EOM
9531 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9532 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9533         echo "LDBL_DIG found." >&4
9534         val="$define"
9535 else
9536         echo "LDBL_DIG NOT found." >&4
9537         val="$undef"
9538 fi
9539 $rm -f ldbl_dig.?
9540 set d_ldbl_dig
9541 eval $setvar
9542
9543 : see if link exists
9544 set link d_link
9545 eval $inlibc
9546
9547 : see if localeconv exists
9548 set localeconv d_locconv
9549 eval $inlibc
9550
9551 : see if lockf exists
9552 set lockf d_lockf
9553 eval $inlibc
9554
9555 : check for long long
9556 echo " "
9557 echo "Checking to see if you have long long..." >&4
9558 echo 'int main() { long long x = 7; return 0; }' > try.c
9559 set try
9560 if eval $compile; then
9561         val="$define"
9562         echo "You have have long long."
9563 else
9564         val="$undef"
9565         echo "You do not have long long."
9566 fi
9567 $rm try.*
9568 set d_longlong
9569 eval $setvar
9570
9571 : check for length of long long
9572 case "${d_longlong}${longlongsize}" in
9573 $define)
9574         echo " "
9575         echo "Checking to see how big your long longs are..." >&4
9576         $cat >try.c <<'EOCP'
9577 #include <stdio.h>
9578 int main()
9579 {
9580     printf("%d\n", (int)sizeof(long long));
9581     return(0);
9582 }
9583 EOCP
9584         set try
9585         if eval $compile_ok; then
9586                 longlongsize=`./try$exe_ext`
9587                 echo "Your long longs are $longlongsize bytes long."
9588         else
9589                 dflt='8'
9590                 echo " "
9591                 echo "(I can't seem to compile the test program.  Guessing...)"
9592                 rp="What is the size of a long long (in bytes)?"
9593                 . ./myread
9594                 longlongsize="$ans"
9595         fi
9596         if $test "X$longsize" = "X$longlongsize"; then
9597                 echo "(That isn't any different from an ordinary long.)"
9598         fi      
9599         ;;
9600 esac
9601 $rm -f try.* try
9602
9603 : see if prototype for lseek is available
9604 echo " "
9605 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9606 eval $hasproto
9607
9608 : see if lstat exists
9609 set lstat d_lstat
9610 eval $inlibc
9611
9612 : see if madvise exists
9613 set madvise d_madvise
9614 eval $inlibc
9615
9616 : see if mblen exists
9617 set mblen d_mblen
9618 eval $inlibc
9619
9620 : see if mbstowcs exists
9621 set mbstowcs d_mbstowcs
9622 eval $inlibc
9623
9624 : see if mbtowc exists
9625 set mbtowc d_mbtowc
9626 eval $inlibc
9627
9628 : see if memchr exists
9629 set memchr d_memchr
9630 eval $inlibc
9631
9632 : see if memcmp exists
9633 set memcmp d_memcmp
9634 eval $inlibc
9635
9636 : see if memcpy exists
9637 set memcpy d_memcpy
9638 eval $inlibc
9639
9640 : see if memmove exists
9641 set memmove d_memmove
9642 eval $inlibc
9643
9644 : see if memset exists
9645 set memset d_memset
9646 eval $inlibc
9647
9648 : see if mkdir exists
9649 set mkdir d_mkdir
9650 eval $inlibc
9651
9652 : see if mkdtemp exists
9653 set mkdtemp d_mkdtemp
9654 eval $inlibc
9655
9656 : see if mkfifo exists
9657 set mkfifo d_mkfifo
9658 eval $inlibc
9659
9660 : see if mkstemp exists
9661 set mkstemp d_mkstemp
9662 eval $inlibc
9663
9664 : see if mkstemps exists
9665 set mkstemps d_mkstemps
9666 eval $inlibc
9667
9668 : see if mktime exists
9669 set mktime d_mktime
9670 eval $inlibc
9671
9672 : see if this is a sys/mman.h system
9673 set sys/mman.h i_sysmman
9674 eval $inhdr
9675
9676 : see if mmap exists
9677 set mmap d_mmap
9678 eval $inlibc
9679 : see what shmat returns
9680 : default to something harmless
9681 mmaptype='void *'
9682 case "$i_sysmman$d_mmap" in
9683 "$define$define")
9684         $cat >mmap.c <<'END'
9685 #include <sys/mman.h>
9686 void *mmap();
9687 END
9688         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9689                 mmaptype='void *'
9690         else
9691                 mmaptype='caddr_t'
9692         fi
9693         echo "and it returns ($mmaptype)." >&4
9694         ;;
9695 esac
9696
9697
9698
9699 : see if mprotect exists
9700 set mprotect d_mprotect
9701 eval $inlibc
9702
9703 : see if msgctl exists
9704 set msgctl d_msgctl
9705 eval $inlibc
9706
9707 : see if msgget exists
9708 set msgget d_msgget
9709 eval $inlibc
9710
9711 : see if msgsnd exists
9712 set msgsnd d_msgsnd
9713 eval $inlibc
9714
9715 : see if msgrcv exists
9716 set msgrcv d_msgrcv
9717 eval $inlibc
9718
9719 : see how much of the 'msg*(2)' library is present.
9720 h_msg=true
9721 echo " "
9722 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9723 *"$undef"*) h_msg=false;;
9724 esac
9725 case "$osname" in
9726 freebsd)
9727     case "`ipcs 2>&1`" in
9728     "SVID messages"*"not configured"*)
9729         echo "Your $osname does not have the msg*(2) configured." >&4
9730         h_msg=false
9731         val="$undef"
9732         set msgctl d_msgctl
9733         eval $setvar
9734         set msgget d_msgget
9735         eval $setvar
9736         set msgsnd d_msgsnd
9737         eval $setvar
9738         set msgrcv d_msgrcv
9739         eval $setvar
9740         ;;
9741     esac
9742     ;;
9743 esac
9744 : we could also check for sys/ipc.h ...
9745 if $h_msg && $test `./findhdr sys/msg.h`; then
9746         echo "You have the full msg*(2) library." >&4
9747         val="$define"
9748 else
9749         echo "You don't have the full msg*(2) library." >&4
9750         val="$undef"
9751 fi
9752 set d_msg
9753 eval $setvar
9754
9755 : see if msync exists
9756 set msync d_msync
9757 eval $inlibc
9758
9759 : see if munmap exists
9760 set munmap d_munmap
9761 eval $inlibc
9762
9763 : see if nice exists
9764 set nice d_nice
9765 eval $inlibc
9766
9767
9768 echo " "
9769 echo "Checking which 64-bit integer type we could use..." >&4
9770
9771 case "$intsize" in
9772 8) val=int
9773    set quadtype
9774    eval $setvar
9775    val='"unsigned int"'
9776    set uquadtype
9777    eval $setvar
9778    quadkind=1
9779    ;;
9780 *) case "$longsize" in
9781    8) val=long
9782       set quadtype
9783       eval $setvar
9784       val='"unsigned long"'
9785       set uquadtype
9786       eval $setvar
9787       quadkind=2
9788       ;;
9789    *) case "$d_longlong:$longlongsize" in
9790       define:8)
9791         val='"long long"'
9792         set quadtype
9793         eval $setvar
9794         val='"unsigned long long"'
9795         set uquadtype
9796         eval $setvar
9797         quadkind=3
9798         ;;
9799       *) case "$d_int64_t" in
9800          define)
9801            val=int64_t
9802            set quadtype
9803            eval $setvar
9804            val=uint64_t
9805            set uquadtype
9806            eval $setvar
9807            quadkind=4
9808            ;;
9809          esac
9810          ;;
9811       esac
9812       ;;
9813    esac
9814    ;;
9815 esac
9816
9817 case "$quadtype" in
9818 '')     echo "Alas, no 64-bit integer types in sight." >&4
9819         d_quad="$undef"
9820         ;;
9821 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
9822             verb="will"
9823         else
9824             verb="could"
9825         fi
9826         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9827         d_quad="$define"
9828         ;;
9829 esac
9830
9831 : check for length of character
9832 echo " "
9833 case "$charsize" in
9834 '')
9835         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9836         $cat >try.c <<'EOCP'
9837 #include <stdio.h>
9838 int main()
9839 {
9840     printf("%d\n", (int)sizeof(char));
9841     exit(0);
9842 }
9843 EOCP
9844         set try
9845         if eval $compile_ok; then
9846                 dflt=`./try`
9847         else
9848                 dflt='1'
9849                 echo "(I can't seem to compile the test program.  Guessing...)"
9850         fi
9851         ;;
9852 *)
9853         dflt="$charsize"
9854         ;;
9855 esac
9856 rp="What is the size of a character (in bytes)?"
9857 . ./myread
9858 charsize="$ans"
9859 $rm -f try.c try
9860
9861
9862 echo " "
9863 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9864
9865 case "$use64bitint:$d_quad:$quadtype" in
9866 define:define:?*)
9867         ivtype="$quadtype"
9868         uvtype="$uquadtype"
9869         ivsize=8
9870         uvsize=8
9871         ;;
9872 *)      ivtype="long"
9873         uvtype="unsigned long"
9874         ivsize=$longsize
9875         uvsize=$longsize
9876         ;;
9877 esac
9878
9879 case "$uselongdouble:$d_longdbl" in
9880 define:define)
9881         nvtype="long double"
9882         nvsize=$longdblsize
9883         ;;
9884 *)      nvtype=double
9885         nvsize=$doublesize
9886         ;;
9887 esac
9888
9889 $echo "(IV will be "$ivtype", $ivsize bytes)"
9890 $echo "(UV will be "$uvtype", $uvsize bytes)"
9891 $echo "(NV will be "$nvtype", $nvsize bytes)"
9892
9893 $cat >try.c <<EOCP
9894 #$i_inttypes I_INTTYPES
9895 #ifdef I_INTTYPES
9896 #include <inttypes.h>
9897 #endif
9898 #include <stdio.h>
9899 int main() {
9900 #ifdef INT8
9901    int8_t i =  INT8_MAX;
9902   uint8_t u = UINT8_MAX;
9903   printf("int8_t\n");
9904 #endif
9905 #ifdef INT16
9906    int16_t i =  INT16_MAX;
9907   uint16_t i = UINT16_MAX;
9908   printf("int16_t\n");
9909 #endif
9910 #ifdef INT32
9911    int32_t i =  INT32_MAX;
9912   uint32_t u = UINT32_MAX;
9913   printf("int32_t\n");
9914 #endif
9915 }
9916 EOCP
9917
9918 case "$i8type" in
9919 '')     case "$charsize" in
9920         1)      i8type=char
9921                 u8type="unsigned char"
9922                 i8size=$charsize
9923                 u8size=$charsize
9924                 ;;
9925         esac
9926         ;;
9927 esac
9928 case "$i8type" in
9929 '')     set try -DINT8
9930         if eval $compile; then
9931                 case "`./try$exe_ext`" in
9932                 int8_t) i8type=int8_t
9933                         u8type=uint8_t
9934                         i8size=1
9935                         u8size=1
9936                         ;;
9937                 esac
9938         fi
9939         ;;
9940 esac
9941 case "$i8type" in
9942 '')     if $test $charsize -ge 1; then
9943                 i8type=char
9944                 u8type="unsigned char"
9945                 i8size=$charsize
9946                 u8size=$charsize
9947         fi
9948         ;;
9949 esac
9950
9951 case "$i16type" in
9952 '')     case "$shortsize" in
9953         2)      i16type=short
9954                 u16type="unsigned short"
9955                 i16size=$shortsize
9956                 u16size=$shortsize
9957                 ;;
9958         esac
9959         ;;
9960 esac
9961 case "$i16type" in
9962 '')     set try -DINT16
9963         if eval $compile; then
9964                 case "`./try$exe_ext`" in
9965                 int16_t)
9966                         i16type=int16_t
9967                         u16type=uint16_t
9968                         i16size=2
9969                         u16size=2
9970                         ;;
9971                 esac
9972         fi
9973         ;;
9974 esac
9975 case "$i16type" in
9976 '')     if $test $shortsize -ge 2; then
9977                 i16type=short
9978                 u16type="unsigned short"
9979                 i16size=$shortsize
9980                 u16size=$shortsize
9981         fi
9982         ;;
9983 esac
9984
9985 case "$i32type" in
9986 '')     case "$longsize" in
9987         4)      i32type=long
9988                 u32type="unsigned long"
9989                 i32size=$longsize
9990                 u32size=$longsize
9991                 ;;
9992         *)      case "$intsize" in
9993                 4)      i32type=int
9994                         u32type="unsigned int"
9995                         i32size=$intsize
9996                         u32size=$intsize
9997                         ;;
9998                 esac
9999                 ;;
10000         esac
10001         ;;
10002 esac
10003 case "$i32type" in
10004 '')     set try -DINT32
10005         if eval $compile; then
10006                 case "`./try$exe_ext`" in
10007                 int32_t)
10008                         i32type=int32_t
10009                         u32type=uint32_t
10010                         i32size=4
10011                         u32size=4
10012                         ;;
10013                 esac
10014         fi
10015         ;;
10016 esac
10017 case "$i32type" in
10018 '')     if $test $intsize -ge 4; then
10019                 i32type=int
10020                 u32type="unsigned int"
10021                 i32size=$intsize
10022                 u32size=$intsize
10023         fi
10024         ;;
10025 esac
10026
10027 case "$i64type" in
10028 '')     case "$d_quad:$quadtype" in
10029         define:?*)
10030                 i64type="$quadtype"
10031                 u64type="$uquadtype"
10032                 i64size=8
10033                 u64size=8
10034                 ;;
10035         esac
10036         ;;
10037 esac
10038
10039 $echo "Checking whether your NVs can preserve your UVs..." >&4
10040 $cat <<EOP >try.c
10041 #include <stdio.h>
10042 int main() {
10043     $uvtype k = ($uvtype)~0, l;
10044     $nvtype d;
10045     l = k;
10046     d = ($nvtype)l;
10047     l = ($uvtype)d;
10048     if (l == k)
10049        printf("preserve\n");
10050     exit(0);
10051 }
10052 EOP
10053 set try
10054 if eval $compile; then
10055         case "`./try$exe_ext`" in
10056         preserve) d_nv_preserves_uv="$define" ;;
10057         esac
10058 fi      
10059 case "$d_nv_preserves_uv" in
10060 $define) $echo "Yes, they can."  2>&1 ;;
10061 *)       $echo "No, they can't." 2>&1
10062          d_nv_preserves_uv="$undef"
10063          ;;
10064 esac
10065
10066 $rm -f try.* try
10067
10068
10069 : check for off64_t
10070 echo " "
10071 echo "Checking to see if you have off64_t..." >&4
10072 $cat >try.c <<EOCP
10073 #include <sys/types.h>
10074 #include <unistd.h>
10075 int main() { off64_t x = 7; }
10076 EOCP
10077 set try
10078 if eval $compile; then
10079         val="$define"
10080         echo "You have off64_t."
10081 else
10082         val="$undef"
10083         echo "You do not have off64_t."
10084         case "$lseeksize" in
10085         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10086         esac
10087 fi
10088 $rm -f try.* try
10089 set d_off64_t
10090 eval $setvar
10091
10092 : see if POSIX threads are available
10093 set pthread.h i_pthread
10094 eval $inhdr
10095
10096
10097
10098
10099 : how to create joinable pthreads
10100 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10101         echo " "
10102         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10103         $cat >try.c <<'EOCP'
10104 #include <pthread.h>
10105 int main() {
10106     int detachstate = JOINABLE;
10107 }
10108 EOCP
10109         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10110         if eval $compile; then
10111                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10112                 val="$undef" # Yes, undef.
10113                 set d_old_pthread_create_joinable
10114                 eval $setvar
10115                 val=""
10116                 set old_pthread_create_joinable
10117                 eval $setvar
10118         else
10119                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10120                 if eval $compile; then
10121                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10122                         val="$define"
10123                         set d_old_pthread_create_joinable
10124                         eval $setvar
10125                         val=PTHREAD_CREATE_UNDETACHED
10126                         set old_pthread_create_joinable
10127                         eval $setvar
10128                 else            
10129                         set try -DJOINABLE=__UNDETACHED
10130                         if eval $compile; then
10131                                 echo "You seem to use __UNDETACHED." >&4
10132                                 val="$define"
10133                                 set d_old_pthread_create_joinable
10134                                 eval $setvar
10135                                 val=__UNDETACHED
10136                                 set old_pthread_create_joinable
10137                                 eval $setvar
10138                         else
10139                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10140                                 val="$define"
10141                                 set d_old_pthread_create_joinable
10142                                 eval $setvar
10143                                 val=0
10144                                 set old_pthread_create_joinable
10145                                 eval $setvar
10146                         fi
10147                 fi
10148         fi
10149         $rm -f try try.*
10150 else
10151     d_old_pthread_create_joinable="$undef"
10152     old_pthread_create_joinable=""
10153 fi
10154
10155 : see if pause exists
10156 set pause d_pause
10157 eval $inlibc
10158
10159 : see if pipe exists
10160 set pipe d_pipe
10161 eval $inlibc
10162
10163 : see if poll exists
10164 set poll d_poll
10165 eval $inlibc
10166
10167
10168 : see whether the various POSIXish _yields exist
10169 $cat >try.c <<EOP
10170 #include <pthread.h>
10171 #include <stdio.h>
10172 int main() {
10173 #ifdef SCHED_YIELD
10174         sched_yield();
10175 #else
10176 #ifdef PTHREAD_YIELD
10177         pthread_yield();
10178 #else
10179 #ifdef PTHREAD_YIELD_NULL
10180         pthread_yield(NULL);
10181 #endif
10182 #endif
10183 #endif
10184 }
10185 EOP
10186 : see if sched_yield exists
10187 set try -DSCHED_YIELD
10188 if eval $compile; then
10189     val="$define"
10190     sched_yield='sched_yield()'
10191 else
10192     val="$undef"
10193 fi
10194 case "$usethreads" in
10195 $define)
10196         case "$val" in
10197         $define) echo 'sched_yield() found.' >&4        ;;
10198         *)       echo 'sched_yield() NOT found.' >&4    ;;
10199         esac
10200 esac
10201 set d_sched_yield
10202 eval $setvar
10203
10204 : see if pthread_yield exists
10205 set try -DPTHREAD_YIELD
10206 if eval $compile; then
10207     val="$define"
10208     case "$sched_yield" in
10209     '') sched_yield='pthread_yield()' ;;
10210     esac
10211 else
10212     set try -DPTHREAD_YIELD_NULL
10213     if eval $compile; then
10214         val="$define"
10215         case "$sched_yield" in
10216         '') sched_yield='pthread_yield(NULL)' ;;
10217         esac
10218     else
10219         val="$undef"
10220     fi
10221 fi
10222 case "$usethreads" in
10223 $define)
10224         case "$val" in
10225         $define) echo 'pthread_yield() found.' >&4      ;;
10226         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10227         esac
10228         ;;
10229 esac
10230 set d_pthread_yield
10231 eval $setvar
10232
10233 case "$sched_yield" in
10234 '') sched_yield=undef ;;
10235 esac
10236
10237 $rm -f try try.*
10238
10239 : see if this is a pwd.h system
10240 set pwd.h i_pwd
10241 eval $inhdr
10242
10243 case "$i_pwd" in
10244 $define)
10245         xxx=`./findhdr pwd.h`
10246         $cppstdin $cppflags $cppminus < $xxx >$$.h
10247
10248         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10249                 val="$define"
10250         else
10251                 val="$undef"
10252         fi
10253         set d_pwquota
10254         eval $setvar
10255
10256         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10257                 val="$define"
10258         else
10259                 val="$undef"
10260         fi
10261         set d_pwage
10262         eval $setvar
10263
10264         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10265                 val="$define"
10266         else
10267                 val="$undef"
10268         fi
10269         set d_pwchange
10270         eval $setvar
10271
10272         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10273                 val="$define"
10274         else
10275                 val="$undef"
10276         fi
10277         set d_pwclass
10278         eval $setvar
10279
10280         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10281                 val="$define"
10282         else
10283                 val="$undef"
10284         fi
10285         set d_pwexpire
10286         eval $setvar
10287
10288         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10289                 val="$define"
10290         else
10291                 val="$undef"
10292         fi
10293         set d_pwcomment
10294         eval $setvar
10295
10296         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10297                 val="$define"
10298         else
10299                 val="$undef"
10300         fi
10301         set d_pwgecos
10302         eval $setvar
10303
10304         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10305                 val="$define"
10306         else
10307                 val="$undef"
10308         fi
10309         set d_pwpasswd
10310         eval $setvar
10311
10312         $rm -f $$.h
10313         ;;
10314 *)
10315         val="$undef"; 
10316         set d_pwquota; eval $setvar
10317         set d_pwage; eval $setvar
10318         set d_pwchange; eval $setvar
10319         set d_pwclass; eval $setvar
10320         set d_pwexpire; eval $setvar
10321         set d_pwcomment; eval $setvar
10322         set d_pwgecos; eval $setvar
10323         set d_pwpasswd; eval $setvar
10324         ;;
10325 esac
10326
10327 : see if readdir and friends exist
10328 set readdir d_readdir
10329 eval $inlibc
10330 set seekdir d_seekdir
10331 eval $inlibc
10332 set telldir d_telldir
10333 eval $inlibc
10334 set rewinddir d_rewinddir
10335 eval $inlibc
10336
10337 : see if readlink exists
10338 set readlink d_readlink
10339 eval $inlibc
10340
10341 : see if rename exists
10342 set rename d_rename
10343 eval $inlibc
10344
10345 : see if rmdir exists
10346 set rmdir d_rmdir
10347 eval $inlibc
10348
10349 : see if memory.h is available.
10350 val=''
10351 set memory.h val
10352 eval $inhdr
10353
10354 : See if it conflicts with string.h
10355 case "$val" in
10356 $define)
10357         case "$strings" in
10358         '') ;;
10359         *)
10360                 $cppstdin $cppflags $cppminus < $strings > mem.h
10361                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10362                         echo " "
10363                         echo "We won't be including <memory.h>."
10364                         val="$undef"
10365                 fi
10366                 $rm -f mem.h
10367                 ;;
10368         esac
10369 esac
10370 set i_memory
10371 eval $setvar
10372
10373 : can bcopy handle overlapping blocks?
10374 val="$undef"
10375 case "$d_bcopy" in
10376 "$define")
10377         echo " "
10378         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10379         $cat >try.c <<EOCP
10380 #$i_memory I_MEMORY
10381 #$i_stdlib I_STDLIB
10382 #$i_string I_STRING
10383 #$i_unistd I_UNISTD
10384 EOCP
10385         $cat >>try.c <<'EOCP'
10386 #include <stdio.h>
10387 #ifdef I_MEMORY
10388 #  include <memory.h>
10389 #endif
10390 #ifdef I_STDLIB
10391 #  include <stdlib.h>
10392 #endif
10393 #ifdef I_STRING
10394 #  include <string.h>
10395 #else
10396 #  include <strings.h>
10397 #endif
10398 #ifdef I_UNISTD
10399 #  include <unistd.h>  /* Needed for NetBSD */
10400 #endif
10401 int main()
10402 {
10403 char buf[128], abc[128];
10404 char *b;
10405 int len;
10406 int off;
10407 int align;
10408
10409 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10410
10411 for (align = 7; align >= 0; align--) {
10412         for (len = 36; len; len--) {
10413                 b = buf+align;
10414                 bcopy(abc, b, len);
10415                 for (off = 1; off <= len; off++) {
10416                         bcopy(b, b+off, len);
10417                         bcopy(b+off, b, len);
10418                         if (bcmp(b, abc, len))
10419                                 exit(1);
10420                 }
10421         }
10422 }
10423 exit(0);
10424 }
10425 EOCP
10426         set try
10427         if eval $compile_ok; then
10428                 if ./try 2>/dev/null; then
10429                         echo "Yes, it can."
10430                         val="$define"
10431                 else
10432                         echo "It can't, sorry."
10433                         case "$d_memmove" in
10434                         "$define") echo "But that's Ok since you have memmove()." ;;
10435                         esac
10436                 fi
10437         else
10438                 echo "(I can't compile the test program, so we'll assume not...)"
10439                 case "$d_memmove" in
10440                 "$define") echo "But that's Ok since you have memmove()." ;;
10441                 esac
10442         fi
10443         ;;
10444 esac
10445 $rm -f try.* try core
10446 set d_safebcpy
10447 eval $setvar
10448
10449 : can memcpy handle overlapping blocks?
10450 val="$undef"
10451 case "$d_memcpy" in
10452 "$define")
10453         echo " "
10454         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10455         $cat >try.c <<EOCP
10456 #$i_memory I_MEMORY
10457 #$i_stdlib I_STDLIB
10458 #$i_string I_STRING
10459 #$i_unistd I_UNISTD
10460 EOCP
10461         $cat >>try.c <<'EOCP'
10462 #include <stdio.h>
10463 #ifdef I_MEMORY
10464 #  include <memory.h>
10465 #endif
10466 #ifdef I_STDLIB
10467 #  include <stdlib.h>
10468 #endif
10469 #ifdef I_STRING
10470 #  include <string.h>
10471 #else
10472 #  include <strings.h>
10473 #endif
10474 #ifdef I_UNISTD
10475 #  include <unistd.h>  /* Needed for NetBSD */
10476 #endif
10477 int main()
10478 {
10479 char buf[128], abc[128];
10480 char *b;
10481 int len;
10482 int off;
10483 int align;
10484
10485 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10486    try to store the string in read-only memory. */
10487 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10488
10489 for (align = 7; align >= 0; align--) {
10490         for (len = 36; len; len--) {
10491                 b = buf+align;
10492                 memcpy(b, abc, len);
10493                 for (off = 1; off <= len; off++) {
10494                         memcpy(b+off, b, len);
10495                         memcpy(b, b+off, len);
10496                         if (memcmp(b, abc, len))
10497                                 exit(1);
10498                 }
10499         }
10500 }
10501 exit(0);
10502 }
10503 EOCP
10504         set try
10505         if eval $compile_ok; then
10506                 if ./try 2>/dev/null; then
10507                         echo "Yes, it can."
10508                         val="$define"
10509                 else
10510                         echo "It can't, sorry."
10511                         case "$d_memmove" in
10512                         "$define") echo "But that's Ok since you have memmove()." ;;
10513                         esac
10514                 fi
10515         else
10516                 echo "(I can't compile the test program, so we'll assume not...)"
10517                 case "$d_memmove" in
10518                 "$define") echo "But that's Ok since you have memmove()." ;;
10519                 esac
10520         fi
10521         ;;
10522 esac
10523 $rm -f try.* try core
10524 set d_safemcpy
10525 eval $setvar
10526
10527 : can memcmp be trusted to compare relative magnitude?
10528 val="$undef"
10529 case "$d_memcmp" in
10530 "$define")
10531         echo " "
10532         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10533         $cat >try.c <<EOCP
10534 #$i_memory I_MEMORY
10535 #$i_stdlib I_STDLIB
10536 #$i_string I_STRING
10537 #$i_unistd I_UNISTD
10538 EOCP
10539         $cat >>try.c <<'EOCP'
10540 #include <stdio.h>
10541 #ifdef I_MEMORY
10542 #  include <memory.h>
10543 #endif
10544 #ifdef I_STDLIB
10545 #  include <stdlib.h>
10546 #endif
10547 #ifdef I_STRING
10548 #  include <string.h>
10549 #else
10550 #  include <strings.h>
10551 #endif
10552 #ifdef I_UNISTD
10553 #  include <unistd.h>  /* Needed for NetBSD */
10554 #endif
10555 int main()
10556 {
10557 char a = -1;
10558 char b = 0;
10559 if ((a < b) && memcmp(&a, &b, 1) < 0)
10560         exit(1);
10561 exit(0);
10562 }
10563 EOCP
10564         set try
10565         if eval $compile_ok; then
10566                 if ./try 2>/dev/null; then
10567                         echo "Yes, it can."
10568                         val="$define"
10569                 else
10570                         echo "No, it can't (it uses signed chars)."
10571                 fi
10572         else
10573                 echo "(I can't compile the test program, so we'll assume not...)"
10574         fi
10575         ;;
10576 esac
10577 $rm -f try.* try core
10578 set d_sanemcmp
10579 eval $setvar
10580
10581 : see if select exists
10582 set select d_select
10583 eval $inlibc
10584
10585 : see if semctl exists
10586 set semctl d_semctl
10587 eval $inlibc
10588
10589 : see if semget exists
10590 set semget d_semget
10591 eval $inlibc
10592
10593 : see if semop exists
10594 set semop d_semop
10595 eval $inlibc
10596
10597 : see how much of the 'sem*(2)' library is present.
10598 h_sem=true
10599 echo " "
10600 case "$d_semctl$d_semget$d_semop" in
10601 *"$undef"*) h_sem=false;;
10602 esac
10603 case "$osname" in
10604 freebsd)
10605     case "`ipcs 2>&1`" in
10606     "SVID messages"*"not configured"*)
10607         echo "Your $osname does not have the sem*(2) configured." >&4
10608         h_sem=false
10609         val="$undef"
10610         set semctl d_semctl
10611         eval $setvar
10612         set semget d_semget
10613         eval $setvar
10614         set semop d_semop
10615         eval $setvar
10616         ;;
10617     esac
10618     ;;
10619 esac
10620 : we could also check for sys/ipc.h ...
10621 if $h_sem && $test `./findhdr sys/sem.h`; then
10622         echo "You have the full sem*(2) library." >&4
10623         val="$define"
10624 else
10625         echo "You don't have the full sem*(2) library." >&4
10626         val="$undef"
10627 fi
10628 set d_sem
10629 eval $setvar
10630
10631 : see whether sys/sem.h defines union semun
10632 echo " "
10633 $cat > try.c <<'END'
10634 #include <sys/types.h>
10635 #include <sys/ipc.h>
10636 #include <sys/sem.h>
10637 int main () { union semun semun; semun.buf = 0; }
10638 END
10639 set try
10640 if eval $compile; then
10641     echo "You have union semun in <sys/sem.h>." >&4
10642     val="$define"
10643 else
10644     echo "You do not have union semun in <sys/sem.h>." >&4
10645     val="$undef"
10646 fi
10647 $rm -f try try.c try.h
10648 set d_union_semun
10649 eval $setvar
10650
10651 : see how to do semctl IPC_STAT
10652 case "$d_sem" in
10653 $define)
10654     : see whether semctl IPC_STAT can use union semun
10655     echo " "
10656     $cat > try.h <<END
10657 #ifndef S_IRUSR
10658 #   ifdef S_IREAD
10659 #       define S_IRUSR S_IREAD
10660 #       define S_IWUSR S_IWRITE
10661 #       define S_IXUSR S_IEXEC
10662 #   else
10663 #       define S_IRUSR 0400
10664 #       define S_IWUSR 0200
10665 #       define S_IXUSR 0100
10666 #   endif
10667 #   define S_IRGRP (S_IRUSR>>3)
10668 #   define S_IWGRP (S_IWUSR>>3)
10669 #   define S_IXGRP (S_IXUSR>>3)
10670 #   define S_IROTH (S_IRUSR>>6)
10671 #   define S_IWOTH (S_IWUSR>>6)
10672 #   define S_IXOTH (S_IXUSR>>6)
10673 #endif
10674 #ifndef S_IRWXU
10675 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10676 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10677 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10678 #endif
10679 END
10680
10681     $cat > try.c <<END
10682 #include <sys/types.h>
10683 #include <sys/ipc.h>
10684 #include <sys/sem.h>
10685 #include <sys/stat.h>
10686 #include <stdio.h>
10687 #include <errno.h>
10688 #include "try.h"
10689 #ifndef errno
10690 extern int errno;
10691 #endif
10692 #$d_union_semun HAS_UNION_SEMUN
10693 int main() {
10694     union semun
10695 #ifndef HAS_UNION_SEMUN
10696     {
10697         int val;
10698         struct semid_ds *buf;
10699         unsigned short *array;
10700     }
10701 #endif
10702     arg;
10703     int sem, st;
10704
10705 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10706     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10707     if (sem > -1) {
10708         struct semid_ds argbuf;
10709         arg.buf = &argbuf;
10710 #       ifdef IPC_STAT
10711         st = semctl(sem, 0, IPC_STAT, arg);
10712         if (st == 0)
10713             printf("semun\n");
10714         else
10715 #       endif /* IPC_STAT */
10716             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10717 #       ifdef IPC_RMID
10718         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10719 #       endif /* IPC_RMID */
10720             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10721     } else
10722 #endif /* IPC_PRIVATE && ... */
10723         printf("semget failed: errno = %d\n", errno);
10724   return 0;
10725 }
10726 END
10727     val="$undef"
10728     set try
10729     if eval $compile; then
10730         xxx=`./try`
10731         case "$xxx" in
10732         semun) val="$define" ;;
10733         esac
10734     fi
10735     $rm -f try try.c
10736     set d_semctl_semun
10737     eval $setvar
10738     case "$d_semctl_semun" in
10739     $define)
10740         echo "You can use union semun for semctl IPC_STAT." >&4
10741         also='also'
10742         ;;
10743     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10744         also=''
10745         ;;
10746     esac
10747
10748     : see whether semctl IPC_STAT can use struct semid_ds pointer
10749     $cat > try.c <<'END'
10750 #include <sys/types.h>
10751 #include <sys/ipc.h>
10752 #include <sys/sem.h>
10753 #include <sys/stat.h>
10754 #include "try.h"
10755 #include <stdio.h>
10756 #include <errno.h>
10757 #ifndef errno
10758 extern int errno;
10759 #endif
10760 int main() {
10761     struct semid_ds arg;
10762     int sem, st;
10763
10764 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10765     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10766     if (sem > -1) {
10767 #       ifdef IPC_STAT
10768         st = semctl(sem, 0, IPC_STAT, &arg);
10769         if (st == 0)
10770             printf("semid_ds\n");
10771         else
10772 #       endif /* IPC_STAT */
10773             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10774 #       ifdef IPC_RMID
10775         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10776 #       endif /* IPC_RMID */
10777             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10778     } else
10779 #endif /* IPC_PRIVATE && ... */
10780         printf("semget failed: errno = %d\n", errno);
10781
10782     return 0;
10783 }
10784 END
10785     val="$undef"
10786     set try
10787     if eval $compile; then
10788         xxx=`./try`
10789         case "$xxx" in
10790         semid_ds) val="$define" ;;
10791         esac
10792     fi
10793     $rm -f try try.c
10794     set d_semctl_semid_ds
10795     eval $setvar
10796     case "$d_semctl_semid_ds" in
10797     $define)
10798         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10799         ;;
10800     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10801         ;;
10802     esac
10803     $rm -f try.h
10804     ;;
10805 *)  val="$undef"
10806
10807     # We do not have the full sem*(2) library, so assume we can not
10808     # use either.
10809
10810     set d_semctl_semun
10811     eval $setvar
10812
10813     set d_semctl_semid_ds
10814     eval $setvar
10815     ;;
10816 esac
10817
10818 : see if setegid exists
10819 set setegid d_setegid
10820 eval $inlibc
10821
10822 : see if seteuid exists
10823 set seteuid d_seteuid
10824 eval $inlibc
10825
10826 : see if setgrent exists
10827 set setgrent d_setgrent
10828 eval $inlibc
10829
10830 : see if sethostent exists
10831 set sethostent d_sethent
10832 eval $inlibc
10833
10834 : see if setlinebuf exists
10835 set setlinebuf d_setlinebuf
10836 eval $inlibc
10837
10838 : see if setlocale exists
10839 set setlocale d_setlocale
10840 eval $inlibc
10841
10842 : see if setnetent exists
10843 set setnetent d_setnent
10844 eval $inlibc
10845
10846 : see if setprotoent exists
10847 set setprotoent d_setpent
10848 eval $inlibc
10849
10850 : see if setpgid exists
10851 set setpgid d_setpgid
10852 eval $inlibc
10853
10854 : see if setpgrp2 exists
10855 set setpgrp2 d_setpgrp2
10856 eval $inlibc
10857
10858 : see if setpriority exists
10859 set setpriority d_setprior
10860 eval $inlibc
10861
10862 : see if setpwent exists
10863 set setpwent d_setpwent
10864 eval $inlibc
10865
10866 : see if setregid exists
10867 set setregid d_setregid
10868 eval $inlibc
10869 set setresgid d_setresgid
10870 eval $inlibc
10871
10872 : see if setreuid exists
10873 set setreuid d_setreuid
10874 eval $inlibc
10875 set setresuid d_setresuid
10876 eval $inlibc
10877
10878 : see if setrgid exists
10879 set setrgid d_setrgid
10880 eval $inlibc
10881
10882 : see if setruid exists
10883 set setruid d_setruid
10884 eval $inlibc
10885
10886 : see if setservent exists
10887 set setservent d_setsent
10888 eval $inlibc
10889
10890 : see if setsid exists
10891 set setsid d_setsid
10892 eval $inlibc
10893
10894 : see if setspent exists
10895 set setspent d_setspent
10896 eval $inlibc
10897
10898 : see if setvbuf exists
10899 set setvbuf d_setvbuf
10900 eval $inlibc
10901
10902 : see if sfio.h is available
10903 set sfio.h i_sfio
10904 eval $inhdr
10905
10906
10907 : see if sfio library is available
10908 case "$i_sfio" in
10909 $define)
10910         val=''
10911         set sfreserve val
10912         eval $inlibc
10913         ;;
10914 *)
10915         val="$undef"
10916         ;;
10917 esac
10918 : Ok, but do we want to use it.
10919 case "$val" in
10920 $define)
10921         case "$usesfio" in
10922         true|$define|[yY]*) dflt='y';;
10923         *) dflt='n';;
10924         esac
10925         echo "$package can use the sfio library, but it is experimental."
10926         rp="You seem to have sfio available, do you want to try using it?"
10927         . ./myread
10928         case "$ans" in
10929         y|Y) ;;
10930         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10931                 val="$undef"
10932                 : Remove sfio from list of libraries to use
10933                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10934                 shift
10935                 libs="$*"
10936                 echo "libs = $libs" >&4
10937                 ;;
10938         esac
10939         ;;
10940 *)      case "$usesfio" in
10941         true|$define|[yY]*)
10942                 echo "Sorry, cannot find sfio on this machine" >&4
10943                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10944                 ;;
10945         esac
10946         ;;
10947 esac
10948 set d_sfio
10949 eval $setvar
10950 case "$d_sfio" in
10951 $define) usesfio='true';;
10952 *) usesfio='false';;
10953 esac
10954
10955 : see if shmctl exists
10956 set shmctl d_shmctl
10957 eval $inlibc
10958
10959 : see if shmget exists
10960 set shmget d_shmget
10961 eval $inlibc
10962
10963 : see if shmat exists
10964 set shmat d_shmat
10965 eval $inlibc
10966 : see what shmat returns
10967 case "$d_shmat" in
10968 "$define")
10969         $cat >shmat.c <<'END'
10970 #include <sys/shm.h>
10971 void *shmat();
10972 END
10973         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10974                 shmattype='void *'
10975         else
10976                 shmattype='char *'
10977         fi
10978         echo "and it returns ($shmattype)." >&4
10979         : see if a prototype for shmat is available
10980         xxx=`./findhdr sys/shm.h`
10981         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10982         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10983                 val="$define"
10984         else
10985                 val="$undef"
10986         fi
10987         $rm -f shmat.[co]
10988         ;;
10989 *)
10990         val="$undef"
10991         ;;
10992 esac
10993 set d_shmatprototype
10994 eval $setvar
10995
10996 : see if shmdt exists
10997 set shmdt d_shmdt
10998 eval $inlibc
10999
11000 : see how much of the 'shm*(2)' library is present.
11001 h_shm=true
11002 echo " "
11003 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11004 *"$undef"*) h_shm=false;;
11005 esac
11006 case "$osname" in
11007 freebsd)
11008     case "`ipcs 2>&1`" in
11009     "SVID shared memory"*"not configured"*)
11010         echo "Your $osname does not have the shm*(2) configured." >&4
11011         h_shm=false
11012         val="$undef"
11013         set shmctl d_shmctl
11014         evat $setvar
11015         set shmget d_shmget
11016         evat $setvar
11017         set shmat d_shmat
11018         evat $setvar
11019         set shmdt d_shmdt
11020         evat $setvar
11021         ;;
11022     esac
11023     ;;
11024 esac
11025 : we could also check for sys/ipc.h ...
11026 if $h_shm && $test `./findhdr sys/shm.h`; then
11027         echo "You have the full shm*(2) library." >&4
11028         val="$define"
11029 else
11030         echo "You don't have the full shm*(2) library." >&4
11031         val="$undef"
11032 fi
11033 set d_shm
11034 eval $setvar
11035
11036 echo " "
11037 : see if we have sigaction
11038 if set sigaction val -f d_sigaction; eval $csym; $val; then
11039         echo 'sigaction() found.' >&4
11040         $cat > try.c <<'EOP'
11041 #include <stdio.h>
11042 #include <sys/types.h>
11043 #include <signal.h>
11044 int main()
11045 {
11046     struct sigaction act, oact;
11047     act.sa_flags = 0;
11048     oact.sa_handler = 0;
11049     /* so that act and oact are used */
11050     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11051 }
11052 EOP
11053         set try
11054         if eval $compile_ok; then
11055                 val="$define"
11056         else
11057                 echo "But you don't seem to have a useable struct sigaction." >&4
11058                 val="$undef"
11059         fi
11060 else
11061         echo 'sigaction NOT found.' >&4
11062         val="$undef"
11063 fi
11064 set d_sigaction; eval $setvar
11065 $rm -f try try$_o try.c
11066
11067 : see if sigsetjmp exists
11068 echo " "
11069 case "$d_sigsetjmp" in
11070 '')
11071         $cat >try.c <<'EOP'
11072 #include <setjmp.h>
11073 sigjmp_buf env;
11074 int set = 1;
11075 int main()
11076 {
11077         if (sigsetjmp(env,1))
11078                 exit(set);
11079         set = 0;
11080         siglongjmp(env, 1);
11081         exit(1);
11082 }
11083 EOP
11084         set try
11085         if eval $compile; then
11086                 if ./try >/dev/null 2>&1; then
11087                         echo "POSIX sigsetjmp found." >&4
11088                         val="$define"
11089                 else
11090                         $cat >&4 <<EOM
11091 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11092 I'll ignore them.
11093 EOM
11094                         val="$undef"
11095                 fi
11096         else
11097                 echo "sigsetjmp not found." >&4
11098                 val="$undef"
11099         fi
11100         ;;
11101 *) val="$d_sigsetjmp"
11102         case "$d_sigsetjmp" in
11103         $define) echo "POSIX sigsetjmp found." >&4;;
11104         $undef) echo "sigsetjmp not found." >&4;;
11105         esac
11106         ;;
11107 esac
11108 set d_sigsetjmp
11109 eval $setvar
11110 $rm -f try.c try
11111
11112 : see if sys/stat.h is available
11113 set sys/stat.h i_sysstat
11114 eval $inhdr
11115
11116
11117 : see if stat knows about block sizes
11118 echo " "
11119 echo "Checking to see if your struct stat has st_blocks field..." >&4
11120 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11121 eval $hasfield
11122
11123
11124 : see if this is a sys/vfs.h system
11125 set sys/vfs.h i_sysvfs
11126 eval $inhdr
11127
11128
11129 : see if this is a sys/statfs.h system
11130 set sys/statfs.h i_sysstatfs
11131 eval $inhdr
11132
11133
11134 echo " "
11135 echo "Checking to see if your system supports struct statfs..." >&4
11136 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
11137 eval $hasstruct
11138 case "$d_statfs_s" in
11139 "$define")      echo "Yes, it does."   ;;
11140 *)              echo "No, it doesn't." ;;
11141 esac
11142
11143
11144
11145 : see if struct statfs knows about f_flags
11146 case "$d_statfs_s" in
11147 define) 
11148         echo " "
11149         echo "Checking to see if your struct statfs has f_flags field..." >&4
11150         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
11151         eval $hasfield
11152         ;;
11153 *)      val="$undef"
11154         set d_statfs_f_flags
11155         eval $setvar
11156         ;;
11157 esac
11158 case "$d_statfs_f_flags" in
11159 "$define")      echo "Yes, it does."   ;;
11160 *)              echo "No, it doesn't." ;;
11161 esac
11162
11163 : see if _ptr and _cnt from stdio act std
11164 echo " "
11165 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11166         echo "(Looks like you have stdio.h from Linux.)"
11167         case "$stdio_ptr" in
11168         '') stdio_ptr='((fp)->_IO_read_ptr)'
11169                 ptr_lval=$define
11170                 ;;
11171         *)      ptr_lval=$d_stdio_ptr_lval;;
11172         esac
11173         case "$stdio_cnt" in
11174         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11175                 cnt_lval=$undef
11176                 ;;
11177         *)      cnt_lval=$d_stdio_cnt_lval;;
11178         esac
11179         case "$stdio_base" in
11180         '') stdio_base='((fp)->_IO_read_base)';;
11181         esac
11182         case "$stdio_bufsiz" in
11183         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11184         esac
11185 else
11186         case "$stdio_ptr" in
11187         '') stdio_ptr='((fp)->_ptr)'
11188                 ptr_lval=$define
11189                 ;;
11190         *)      ptr_lval=$d_stdio_ptr_lval;;
11191         esac
11192         case "$stdio_cnt" in
11193         '') stdio_cnt='((fp)->_cnt)'
11194                 cnt_lval=$define
11195                 ;;
11196         *)      cnt_lval=$d_stdio_cnt_lval;;
11197         esac
11198         case "$stdio_base" in
11199         '') stdio_base='((fp)->_base)';;
11200         esac
11201         case "$stdio_bufsiz" in
11202         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11203         esac
11204 fi
11205 : test whether _ptr and _cnt really work
11206 echo "Checking how std your stdio is..." >&4
11207 $cat >try.c <<EOP
11208 #include <stdio.h>
11209 #define FILE_ptr(fp)    $stdio_ptr
11210 #define FILE_cnt(fp)    $stdio_cnt
11211 int main() {
11212         FILE *fp = fopen("try.c", "r");
11213         char c = getc(fp);
11214         if (
11215                 18 <= FILE_cnt(fp) &&
11216                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11217         )
11218                 exit(0);
11219         exit(1);
11220 }
11221 EOP
11222 val="$undef"
11223 set try
11224 if eval $compile; then
11225         if ./try; then
11226                 echo "Your stdio acts pretty std."
11227                 val="$define"
11228         else
11229                 echo "Your stdio isn't very std."
11230         fi
11231 else
11232         echo "Your stdio doesn't appear very std."
11233 fi
11234 $rm -f try.c try
11235 set d_stdstdio
11236 eval $setvar
11237
11238 : Can _ptr be used as an lvalue?
11239 case "$d_stdstdio$ptr_lval" in
11240 $define$define) val=$define ;;
11241 *) val=$undef ;;
11242 esac
11243 set d_stdio_ptr_lval
11244 eval $setvar
11245
11246 : Can _cnt be used as an lvalue?
11247 case "$d_stdstdio$cnt_lval" in
11248 $define$define) val=$define ;;
11249 *) val=$undef ;;
11250 esac
11251 set d_stdio_cnt_lval
11252 eval $setvar
11253
11254 : see if _base is also standard
11255 val="$undef"
11256 case "$d_stdstdio" in
11257 $define)
11258         $cat >try.c <<EOP
11259 #include <stdio.h>
11260 #define FILE_base(fp)   $stdio_base
11261 #define FILE_bufsiz(fp) $stdio_bufsiz
11262 int main() {
11263         FILE *fp = fopen("try.c", "r");
11264         char c = getc(fp);
11265         if (
11266                 19 <= FILE_bufsiz(fp) &&
11267                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11268         )
11269                 exit(0);
11270         exit(1);
11271 }
11272 EOP
11273         set try
11274         if eval $compile; then
11275                 if ./try; then
11276                         echo "And its _base field acts std."
11277                         val="$define"
11278                 else
11279                         echo "But its _base field isn't std."
11280                 fi
11281         else
11282                 echo "However, it seems to be lacking the _base field."
11283         fi
11284         $rm -f try.c try
11285         ;;
11286 esac
11287 set d_stdiobase
11288 eval $setvar
11289
11290 $cat >&4 <<EOM
11291 Checking how to access stdio streams by file descriptor number...
11292 EOM
11293 case "$stdio_stream_array" in
11294 '')     $cat >try.c <<EOCP
11295 #include <stdio.h>
11296 int main() {
11297   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11298     printf("yes\n");
11299 }
11300 EOCP
11301         for s in _iob __iob __sF
11302         do
11303                 set try -DSTDIO_STREAM_ARRAY=$s
11304                 if eval $compile; then
11305                         case "`./try$exe_ext`" in
11306                         yes)    stdio_stream_array=$s; break ;;
11307                         esac
11308                 fi
11309         done
11310         $rm -f try.* try$exe_ext
11311 esac
11312 case "$stdio_stream_array" in
11313 '')     $cat >&4 <<EOM
11314 I can't figure out how to access stdio streams by file descriptor number.
11315 EOM
11316         d_stdio_stream_array="$undef"
11317         ;;
11318 *)      $cat >&4 <<EOM
11319 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11320 EOM
11321         d_stdio_stream_array="$define"
11322         ;;
11323 esac
11324
11325 : see if strcoll exists
11326 set strcoll d_strcoll
11327 eval $inlibc
11328
11329 : check for structure copying
11330 echo " "
11331 echo "Checking to see if your C compiler can copy structs..." >&4
11332 $cat >try.c <<'EOCP'
11333 int main()
11334 {
11335         struct blurfl {
11336                 int dyick;
11337         } foo, bar;
11338
11339         foo = bar;
11340 }
11341 EOCP
11342 if $cc -c try.c >/dev/null 2>&1 ; then
11343         val="$define"
11344         echo "Yup, it can."
11345 else
11346         val="$undef"
11347         echo "Nope, it can't."
11348 fi
11349 set d_strctcpy
11350 eval $setvar
11351 $rm -f try.*
11352
11353 : see if strerror and/or sys_errlist[] exist
11354 echo " "
11355 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11356     if set strerror val -f d_strerror; eval $csym; $val; then
11357                 echo 'strerror() found.' >&4
11358                 d_strerror="$define"
11359                 d_strerrm='strerror(e)'
11360                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11361                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11362                         d_syserrlst="$define"
11363                 else
11364                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11365                         d_syserrlst="$undef"
11366                 fi
11367     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11368                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11369                 echo 'strerror() found in string header.' >&4
11370                 d_strerror="$define"
11371                 d_strerrm='strerror(e)'
11372                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11373                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11374                                 d_syserrlst="$define"
11375                 else
11376                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11377                         d_syserrlst="$undef"
11378                 fi
11379     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11380                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11381                 d_strerror="$undef"
11382                 d_syserrlst="$define"
11383                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11384     else
11385                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11386                 d_strerror="$undef"
11387                 d_syserrlst="$undef"
11388                 d_strerrm='"unknown"'
11389     fi
11390 fi
11391
11392 : see if strtod exists
11393 set strtod d_strtod
11394 eval $inlibc
11395
11396 : see if strtol exists
11397 set strtol d_strtol
11398 eval $inlibc
11399
11400 : see if strtold exists
11401 set strtold d_strtold
11402 eval $inlibc
11403
11404 : see if strtoll exists
11405 set strtoll d_strtoll
11406 eval $inlibc
11407
11408 : see if strtoul exists
11409 set strtoul d_strtoul
11410 eval $inlibc
11411
11412 : see if strtoull exists
11413 set strtoull d_strtoull
11414 eval $inlibc
11415
11416 : see if strtouq exists
11417 set strtouq d_strtouq
11418 eval $inlibc
11419
11420 : see if strxfrm exists
11421 set strxfrm d_strxfrm
11422 eval $inlibc
11423
11424 : see if symlink exists
11425 set symlink d_symlink
11426 eval $inlibc
11427
11428 : see if syscall exists
11429 set syscall d_syscall
11430 eval $inlibc
11431
11432 : see if sysconf exists
11433 set sysconf d_sysconf
11434 eval $inlibc
11435
11436 : see if system exists
11437 set system d_system
11438 eval $inlibc
11439
11440 : see if tcgetpgrp exists
11441 set tcgetpgrp d_tcgetpgrp
11442 eval $inlibc
11443
11444 : see if tcsetpgrp exists
11445 set tcsetpgrp d_tcsetpgrp
11446 eval $inlibc
11447
11448 : see if prototype for telldir is available
11449 echo " "
11450 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11451 eval $hasproto
11452
11453 : see if this is a sys/times.h system
11454 set sys/times.h i_systimes
11455 eval $inhdr
11456
11457 : see if times exists
11458 echo " "
11459 if set times val -f d_times; eval $csym; $val; then
11460         echo 'times() found.' >&4
11461         d_times="$define"
11462         inc=''
11463         case "$i_systimes" in
11464         "$define") inc='sys/times.h';;
11465         esac
11466         rp="What is the type returned by times() on this system?"
11467         set clock_t clocktype long stdio.h sys/types.h $inc
11468         eval $typedef_ask
11469 else
11470         echo 'times() NOT found, hope that will do.' >&4
11471         d_times="$undef"
11472         clocktype='int'
11473 fi
11474
11475 : see if truncate exists
11476 set truncate d_truncate
11477 eval $inlibc
11478
11479 : see if tzname[] exists
11480 echo " "
11481 if set tzname val -a d_tzname; eval $csym; $val; then
11482         val="$define"
11483         echo 'tzname[] found.' >&4
11484 else
11485         val="$undef"
11486         echo 'tzname[] NOT found.' >&4
11487 fi
11488 set d_tzname
11489 eval $setvar
11490
11491 : see if umask exists
11492 set umask d_umask
11493 eval $inlibc
11494
11495 : see if ustat exists
11496 set ustat d_ustat
11497 eval $inlibc
11498
11499 : backward compatibility for d_hvfork
11500 if test X$d_hvfork != X; then
11501         d_vfork="$d_hvfork"
11502         d_hvfork=''
11503 fi
11504 : see if there is a vfork
11505 val=''
11506 set vfork val
11507 eval $inlibc
11508
11509 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11510 : perl on Solaris 2.x, and probably elsewhere.
11511 case "$val" in
11512 $define)
11513         echo " "
11514         case "$usevfork" in
11515         false) dflt='n';;
11516         *) dflt='y';;
11517         esac
11518         cat <<'EOM'
11519  
11520 Perl can only use a vfork() that doesn't suffer from strict
11521 restrictions on calling functions or modifying global data in
11522 the child.  For example, glibc-2.1 contains such a vfork()
11523 that is unsuitable.  If your system provides a proper fork()
11524 call, chances are that you do NOT want perl to use vfork().
11525
11526 EOM
11527         rp="Do you still want to use vfork()?"
11528         . ./myread
11529         case "$ans" in
11530         y|Y) ;;
11531         *)
11532                 echo "Ok, we won't use vfork()."
11533                 val="$undef"
11534                 ;;
11535         esac
11536         ;;
11537 esac
11538 set d_vfork
11539 eval $setvar
11540 case "$d_vfork" in
11541 $define) usevfork='true';;
11542 *) usevfork='false';;
11543 esac
11544
11545 : see if this is an sysdir system
11546 set sys/dir.h i_sysdir
11547 eval $inhdr
11548
11549 : see if this is an sysndir system
11550 set sys/ndir.h i_sysndir
11551 eval $inhdr
11552
11553 : see if closedir exists
11554 set closedir d_closedir
11555 eval $inlibc
11556
11557 case "$d_closedir" in
11558 "$define")
11559         echo " "
11560         echo "Checking whether closedir() returns a status..." >&4
11561         cat > closedir.c <<EOM
11562 #$i_dirent I_DIRENT             /**/
11563 #$i_sysdir I_SYS_DIR            /**/
11564 #$i_sysndir I_SYS_NDIR          /**/
11565 #$i_systypes I_SYS_TYPES        /**/
11566
11567 #if defined(I_SYS_TYPES)
11568 #include <sys/types.h>
11569 #endif
11570 #if defined(I_DIRENT)
11571 #include <dirent.h>
11572 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11573 #include <sys/dir.h>
11574 #endif
11575 #else
11576 #ifdef I_SYS_NDIR
11577 #include <sys/ndir.h>
11578 #else
11579 #ifdef I_SYS_DIR
11580 #ifdef hp9000s500
11581 #include <ndir.h>       /* may be wrong in the future */
11582 #else
11583 #include <sys/dir.h>
11584 #endif
11585 #endif
11586 #endif
11587 #endif 
11588 int main() { return closedir(opendir(".")); }
11589 EOM
11590         set closedir
11591         if eval $compile_ok; then
11592                 if ./closedir > /dev/null 2>&1 ; then
11593                         echo "Yes, it does."
11594                         val="$undef"
11595                 else
11596                         echo "No, it doesn't."
11597                         val="$define"
11598                 fi
11599         else
11600                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11601                 val="$define"
11602         fi
11603         ;;
11604 *)
11605         val="$undef";
11606         ;;
11607 esac
11608 set d_void_closedir
11609 eval $setvar
11610 $rm -f closedir*
11611 : check for volatile keyword
11612 echo " "
11613 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11614 $cat >try.c <<'EOCP'
11615 int main()
11616 {
11617         typedef struct _goo_struct goo_struct;
11618         goo_struct * volatile goo = ((goo_struct *)0);
11619         struct _goo_struct {
11620                 long long_int;
11621                 int reg_int;
11622                 char char_var;
11623         };
11624         typedef unsigned short foo_t;
11625         char *volatile foo;
11626         volatile int bar;
11627         volatile foo_t blech;
11628         foo = foo;
11629 }
11630 EOCP
11631 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11632         val="$define"
11633         echo "Yup, it does."
11634 else
11635         val="$undef"
11636         echo "Nope, it doesn't."
11637 fi
11638 set d_volatile
11639 eval $setvar
11640 $rm -f try.*
11641
11642 : see if there is a wait4
11643 set wait4 d_wait4
11644 eval $inlibc
11645
11646 : see if waitpid exists
11647 set waitpid d_waitpid
11648 eval $inlibc
11649
11650 : see if wcstombs exists
11651 set wcstombs d_wcstombs
11652 eval $inlibc
11653
11654 : see if wctomb exists
11655 set wctomb d_wctomb
11656 eval $inlibc
11657
11658 : preserve RCS keywords in files with variable substitution, grrr
11659 Date='$Date'
11660 Id='$Id'
11661 Log='$Log'
11662 RCSfile='$RCSfile'
11663 Revision='$Revision'
11664
11665 case "$crosscompile" in
11666 ''|[nN]*) crosscompile="$undef" ;;
11667 esac
11668
11669 case "$osname" in
11670 next|rhapsody|darwin) multiarch="$define" ;;
11671 esac
11672 case "$multiarch" in
11673 ''|[nN]*) multiarch="$undef" ;;
11674 esac
11675
11676 : check for alignment requirements
11677 echo " "
11678 case "$crosscompile$multiarch" in
11679 *$define*)
11680         $cat <<EOM
11681 You seem to be either cross-compiling or doing a multiarchitecture build,
11682 skipping the memory alignment check.
11683
11684 EOM
11685         case "$alignbytes" in
11686         '') alignbytes=8 ;;
11687         esac
11688         ;;
11689 *)
11690         case "$alignbytes" in
11691         '') echo "Checking alignment constraints..." >&4
11692                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
11693                         $cat >try.c <<'EOCP'
11694 typedef long double NV;
11695 EOCP
11696                 else
11697                         $cat >try.c <<'EOCP'
11698 typedef double NV;
11699 EOCP
11700                 fi
11701                 $cat >>try.c <<'EOCP'
11702 #include <stdio.h>
11703 struct foobar {
11704         char foo;
11705         NV bar;
11706 } try_algn;
11707 int main()
11708 {
11709     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11710     return(0);
11711 }
11712 EOCP
11713                 set try
11714                 if eval $compile_ok; then
11715                         dflt=`./try`
11716                 else
11717                         dflt='8'
11718                         echo "(I can't seem to compile the test program...)"
11719                 fi
11720                 ;;
11721         *) dflt="$alignbytes"
11722                 ;;
11723         esac
11724         rp="Doubles must be aligned on a how-many-byte boundary?"
11725         . ./myread
11726         alignbytes="$ans"
11727         $rm -f try.c try
11728         ;;
11729 esac
11730
11731
11732 : set the base revision
11733 baserev=5.0
11734
11735 : check for ordering of bytes in a long
11736 echo " "
11737 case "$crosscompile$multiarch" in
11738 *$define*)
11739         $cat <<EOM
11740 You seem to be either cross-compiling or doing a multiarchitecture build,
11741 skipping the byteorder check.
11742
11743 EOM
11744         byteorder='0xffff'
11745         ;;
11746 *)
11747         case "$byteorder" in
11748         '')
11749                 $cat <<'EOM'
11750 In the following, larger digits indicate more significance.  A big-endian
11751 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11752 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11753 machines may have weird orders like 3412.  A Cray will report 87654321,
11754 an Alpha will report 12345678. If the test program works the default is
11755 probably right.
11756 I'm now running the test program...
11757 EOM
11758                 $cat >try.c <<'EOCP'
11759 #include <stdio.h>
11760 int main()
11761 {
11762         int i;
11763         union {
11764                 unsigned long l;
11765                 char c[sizeof(long)];
11766         } u;
11767
11768         if (sizeof(long) > 4)
11769                 u.l = (0x08070605L << 32) | 0x04030201L;
11770         else
11771                 u.l = 0x04030201L;
11772         for (i = 0; i < sizeof(long); i++)
11773                 printf("%c", u.c[i]+'0');
11774         printf("\n");
11775         exit(0);
11776 }
11777 EOCP
11778                 xxx_prompt=y
11779                 set try
11780                 if eval $compile && ./try > /dev/null; then
11781                         dflt=`./try`
11782                         case "$dflt" in
11783                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11784                                 echo "(The test program ran ok.)"
11785                                 echo "byteorder=$dflt"
11786                                 xxx_prompt=n
11787                         ;;
11788                         ????|????????) echo "(The test program ran ok.)" ;;
11789                         *) echo "(The test program didn't run right for some reason.)" ;;
11790                         esac
11791                 else
11792                         dflt='4321'
11793                         cat <<'EOM'
11794 (I can't seem to compile the test program.  Guessing big-endian...)
11795 EOM
11796                 fi
11797                 case "$xxx_prompt" in
11798                 y)
11799                         rp="What is the order of bytes in a long?"
11800                         . ./myread
11801                         byteorder="$ans"
11802                         ;;
11803                 *)      byteorder=$dflt
11804                         ;;
11805                 esac
11806                 ;;
11807         esac
11808         $rm -f try.c try
11809         ;;
11810 esac
11811
11812
11813 : how do we catenate cpp tokens here?
11814 echo " "
11815 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11816 $cat >cpp_stuff.c <<'EOCP'
11817 #define RCAT(a,b)a/**/b
11818 #define ACAT(a,b)a ## b
11819 RCAT(Rei,ser)
11820 ACAT(Cir,cus)
11821 EOCP
11822 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11823 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11824         echo "Oh!  Smells like ANSI's been here." >&4
11825         echo "We can catify or stringify, separately or together!"
11826         cpp_stuff=42
11827 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11828         echo "Ah, yes!  The good old days!" >&4
11829         echo "However, in the good old days we don't know how to stringify and"
11830         echo "catify at the same time."
11831         cpp_stuff=1
11832 else
11833         $cat >&4 <<EOM
11834 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11835 to have to edit the values of CAT[2-5] in config.h...
11836 EOM
11837         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11838 fi
11839 $rm -f cpp_stuff.*
11840
11841 : see if this is a db.h system
11842 set db.h i_db
11843 eval $inhdr
11844
11845 case "$i_db" in
11846 $define)
11847         : Check db version.
11848         echo " "
11849         echo "Checking Berkeley DB version ..." >&4
11850         $cat >try.c <<EOCP
11851 #$d_const HASCONST
11852 #ifndef HASCONST
11853 #define const
11854 #endif
11855 #include <sys/types.h>
11856 #include <stdio.h>
11857 #include <db.h>
11858 int main()
11859 {
11860 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11861     int Major, Minor, Patch ;
11862     unsigned long Version ;
11863     (void)db_version(&Major, &Minor, &Patch) ;
11864     printf("You have Berkeley DB Version 2 or greater\n");
11865
11866     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11867                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11868     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11869                 Major, Minor, Patch) ;
11870
11871     /* check that db.h & libdb are compatible */
11872     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11873         printf("db.h and libdb are incompatible\n") ;
11874         exit(3);        
11875     }
11876
11877     printf("db.h and libdb are compatible\n") ;
11878
11879     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11880                 + DB_VERSION_PATCH ;
11881
11882     /* needs to be >= 2.3.4 */
11883     if (Version < 2003004) {
11884     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11885         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11886         exit(2);        
11887     }
11888
11889     exit(0);
11890 #else
11891 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11892     printf("You have Berkeley DB Version 1\n");
11893     exit(0);    /* DB version < 2: the coast is clear. */
11894 #else
11895     exit(1);    /* <db.h> not Berkeley DB? */
11896 #endif
11897 #endif
11898 }
11899 EOCP
11900         set try
11901         if eval $compile_ok && ./try; then
11902                 echo 'Looks OK.' >&4
11903         else
11904                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11905                 i_db=$undef
11906                 case " $libs " in
11907                 *"-ldb "*)
11908                         : Remove db from list of libraries to use
11909                         echo "Removing unusable -ldb from library list" >&4
11910                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11911                         shift
11912                         libs="$*"
11913                         echo "libs = $libs" >&4
11914                         ;;
11915                 esac
11916         fi
11917         $rm -f try.*
11918         ;;
11919 esac
11920
11921 case "$i_db" in
11922 define)
11923         : Check the return type needed for hash 
11924         echo " "
11925         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11926         $cat >try.c <<EOCP
11927 #$d_const HASCONST
11928 #ifndef HASCONST
11929 #define const
11930 #endif
11931 #include <sys/types.h>
11932 #include <db.h>
11933
11934 #ifndef DB_VERSION_MAJOR
11935 u_int32_t hash_cb (ptr, size)
11936 const void *ptr;
11937 size_t size;
11938 {
11939 }
11940 HASHINFO info;
11941 int main()
11942 {
11943         info.hash = hash_cb;
11944 }
11945 #endif
11946 EOCP
11947         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11948                 if $contains warning try.out >>/dev/null 2>&1 ; then
11949                         db_hashtype='int'
11950                 else
11951                         db_hashtype='u_int32_t'
11952                 fi
11953         else
11954                 : XXX Maybe we should just give up here.
11955                 db_hashtype=u_int32_t
11956                 $cat try.out >&4
11957                 echo "Help:  I can't seem to compile the db test program." >&4
11958                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11959         fi
11960         $rm -f try.*
11961         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11962         ;;
11963 *)      db_hashtype=u_int32_t
11964         ;;
11965 esac
11966 case "$i_db" in
11967 define)
11968         : Check the return type needed for prefix 
11969         echo " "
11970         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11971         cat >try.c <<EOCP
11972 #$d_const HASCONST
11973 #ifndef HASCONST
11974 #define const
11975 #endif
11976 #include <sys/types.h>
11977 #include <db.h>
11978
11979 #ifndef DB_VERSION_MAJOR
11980 size_t prefix_cb (key1, key2)
11981 const DBT *key1;
11982 const DBT *key2;
11983 {
11984 }
11985 BTREEINFO info;
11986 int main()
11987 {
11988         info.prefix = prefix_cb;
11989 }
11990 #endif
11991 EOCP
11992         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11993                 if $contains warning try.out >>/dev/null 2>&1 ; then
11994                         db_prefixtype='int'
11995                 else
11996                         db_prefixtype='size_t'
11997                 fi
11998         else
11999                 db_prefixtype='size_t'
12000                 : XXX Maybe we should just give up here.
12001                 $cat try.out >&4
12002                 echo "Help:  I can't seem to compile the db test program." >&4
12003                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12004         fi
12005         $rm -f try.*
12006         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12007         ;;
12008 *)      db_prefixtype='size_t'
12009         ;;
12010 esac
12011
12012 : check for void type
12013 echo " "
12014 echo "Checking to see how well your C compiler groks the void type..." >&4
12015 case "$voidflags" in
12016 '')
12017         $cat >try.c <<'EOCP'
12018 #if TRY & 1
12019 void sub() {
12020 #else
12021 sub() {
12022 #endif
12023         extern void moo();      /* function returning void */
12024         void (*goo)();          /* ptr to func returning void */
12025 #if TRY & 8
12026         void *hue;              /* generic ptr */
12027 #endif
12028 #if TRY & 2
12029         void (*foo[10])();
12030 #endif
12031
12032 #if TRY & 4
12033         if(goo == moo) {
12034                 exit(0);
12035         }
12036 #endif
12037         exit(0);
12038 }
12039 int main() { sub(); }
12040 EOCP
12041         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12042                 voidflags=$defvoidused
12043         echo "Good.  It appears to support void to the level $package wants.">&4
12044                 if $contains warning .out >/dev/null 2>&1; then
12045                         echo "However, you might get some warnings that look like this:"
12046                         $cat .out
12047                 fi
12048         else
12049 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12050                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12051                         echo "It supports 1..."
12052                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12053                                 echo "It also supports 2..."
12054                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12055                                         voidflags=7
12056                                         echo "And it supports 4 but not 8 definitely."
12057                                 else
12058                                         echo "It doesn't support 4..."
12059                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12060                                                 voidflags=11
12061                                                 echo "But it supports 8."
12062                                         else
12063                                                 voidflags=3
12064                                                 echo "Neither does it support 8."
12065                                         fi
12066                                 fi
12067                         else
12068                                 echo "It does not support 2..."
12069                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12070                                         voidflags=13
12071                                         echo "But it supports 4 and 8."
12072                                 else
12073                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12074                                                 voidflags=5
12075                                                 echo "And it supports 4 but has not heard about 8."
12076                                         else
12077                                                 echo "However it supports 8 but not 4."
12078                                         fi
12079                                 fi
12080                         fi
12081                 else
12082                         echo "There is no support at all for void."
12083                         voidflags=0
12084                 fi
12085         fi
12086 esac
12087 case "$voidflags" in
12088 "$defvoidused") ;;
12089 *)      $cat >&4 <<'EOM'
12090   Support flag bits are:
12091     1: basic void declarations.
12092     2: arrays of pointers to functions returning void.
12093     4: operations between pointers to and addresses of void functions.
12094     8: generic void pointers.
12095 EOM
12096         dflt="$voidflags";
12097         rp="Your void support flags add up to what?"
12098         . ./myread
12099         voidflags="$ans"
12100         ;;
12101 esac
12102 $rm -f try.* .out
12103
12104
12105 : How can we generate normalized random numbers ?
12106 echo " "
12107 echo "Looking for a random number function..." >&4
12108 case "$randfunc" in
12109 '')
12110         if set drand48 val -f; eval $csym; $val; then
12111                 dflt="drand48"
12112                 echo "Good, found drand48()." >&4
12113         elif set random val -f; eval $csym; $val; then
12114                 dflt="random"
12115                 echo "OK, found random()." >&4
12116         else
12117                 dflt="rand"
12118                 echo "Yick, looks like I have to use rand()." >&4
12119         fi
12120         echo " "
12121         ;;
12122 *)
12123         dflt="$randfunc"
12124         ;;
12125 esac
12126 cont=true
12127
12128 case "$ccflags" in
12129 *-Dmy_rand=*|*-Dmy_srand=*)
12130         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12131         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12132         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12133         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12134         ;;
12135 esac
12136
12137 while $test "$cont"; do
12138         rp="Use which function to generate random numbers?"
12139         . ./myread
12140         if $test "$ans" = "$dflt"; then
12141                 : null
12142         else
12143                 randbits=''
12144         fi
12145         randfunc="$ans"
12146         if set $ans val -f; eval $csym; $val; then
12147                 cont=''
12148         else
12149                 dflt=y
12150                 rp="I cannot find function $ans. Use that name anyway?"
12151                 . ./myread
12152                 dflt=rand
12153                 case "$ans" in
12154                         [yY]*) cont='';;
12155                 esac
12156         fi
12157         case "$cont" in
12158         '')
12159                 case "$randfunc" in
12160                 drand48)
12161                         drand01="drand48()"
12162                         seedfunc="srand48"
12163                         randbits=48
12164                         randseedtype=long
12165                         ;;
12166                 rand|random)
12167                         case "$randbits" in
12168                         '')
12169 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12170                                 $cat >try.c <<EOCP
12171 #$i_unistd I_UNISTD
12172 #$i_stdlib I_STDLIB
12173 #include <stdio.h>
12174 #ifdef I_UNISTD
12175 #  include <unistd.h>
12176 #endif
12177 #ifdef I_STDLIB
12178 #  include <stdlib.h>
12179 #endif
12180 int main()
12181 {
12182         register int i;
12183         register unsigned long tmp;
12184         register unsigned long max = 0L;
12185
12186         for (i = 1000; i; i--) {
12187                 tmp = (unsigned long) $randfunc();
12188                 if (tmp > max) max = tmp;
12189         }
12190         for (i = 0; max; i++)
12191                 max /= 2;
12192         printf("%d\n",i);
12193 }
12194 EOCP
12195                                 set try
12196                                 if eval $compile_ok; then
12197                                         dflt=`try`
12198                                 else
12199                                         dflt='?'
12200                                         echo "(I can't seem to compile the test program...)"
12201                                 fi
12202                                 ;;
12203                         *)
12204                                 dflt="$randbits"
12205                                 ;;
12206                         esac
12207                         rp="How many bits does your $randfunc() function produce?"
12208                         . ./myread
12209                         randbits="$ans"
12210                         $rm -f try.c try
12211                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12212                         seedfunc="s$randfunc"
12213                         randseedtype=unsigned
12214                         ;;
12215                 *)
12216                         dflt="31"
12217                         rp="How many bits does your $randfunc() function produce?"
12218                         . ./myread
12219                         randbits="$ans"
12220                         seedfunc="s$randfunc"
12221                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12222                         if set $seedfunc val -f; eval $csym; $val; then
12223                                 echo "(Using $seedfunc() to seed random generator)"
12224                         else
12225                                 echo "(Warning: no $seedfunc() to seed random generator)"
12226                                 seedfunc=rand
12227                         fi
12228                         randseedtype=unsigned
12229                         ;;
12230                 esac
12231                 ;;
12232         esac
12233 done
12234
12235 echo " "
12236 echo "Determining whether or not we are on an EBCDIC system..." >&4
12237 $cat >tebcdic.c <<'EOM'
12238 int main()
12239 {
12240   if ('M'==0xd4) return 0;
12241   return 1;
12242 }
12243 EOM
12244
12245 val=$undef
12246 set tebcdic
12247 if eval $compile_ok; then
12248         if ./tebcdic; then
12249                 echo "You have EBCDIC." >&4
12250                 val="$define"
12251         else
12252                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12253         fi
12254 else
12255         echo "I'm unable to compile the test program." >&4
12256         echo "I'll assume ASCII or some ISO Latin." >&4
12257 fi
12258 $rm -f tebcdic.c tebcdic
12259 set ebcdic
12260 eval $setvar
12261
12262 echo " "
12263 $cat >&4 <<EOM
12264 Checking how to flush all pending stdio output...
12265 EOM
12266 # I only know how to find the first 32 possibly open files on SunOS.
12267 # See also hints/sunos_4_1.sh and util.c  --AD
12268 case "$osname" in
12269 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12270 esac
12271 $cat >>try.c <<EOCP
12272 #include <stdio.h>
12273 #$i_unistd I_UNISTD
12274 #ifdef I_UNISTD
12275 # include <unistd.h>
12276 #endif
12277 #$d_sysconf HAS_SYSCONF
12278 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12279 #ifdef HAS_STDIO_STREAM_ARRAY
12280 # define STDIO_STREAM_ARRAY $stdio_stream_array
12281 #endif
12282 int main() {
12283   FILE* p = fopen("try.out", "w");
12284 #ifdef TRY_FPUTC
12285   fputc('x', p);
12286 #else
12287 # ifdef TRY_FPRINTF
12288   fprintf(p, "x");
12289 # endif
12290 #endif
12291 #ifdef TRY_FFLUSH_NULL
12292   fflush(NULL);
12293 #endif
12294 #ifdef TRY_FFLUSH_ALL
12295   {
12296     long open_max = -1;
12297 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12298     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12299 # else
12300 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12301     open_max = sysconf(_SC_OPEN_MAX);
12302 #  else
12303 #   ifdef FOPEN_MAX
12304     open_max = FOPEN_MAX;
12305 #   else
12306 #    ifdef OPEN_MAX
12307     open_max = OPEN_MAX;
12308 #    else
12309 #     ifdef _NFILE
12310     open_max = _NFILE;
12311 #     endif
12312 #    endif
12313 #   endif
12314 #  endif
12315 # endif 
12316 # ifdef HAS_STDIO_STREAM_ARRAY
12317     if (open_max > 0) {
12318       long i;
12319       for (i = 0; i < open_max; i++)
12320             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12321                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12322                 STDIO_STREAM_ARRAY[i]._flag)
12323                 fflush(&STDIO_STREAM_ARRAY[i]);
12324     }   
12325   }
12326 # endif
12327 #endif
12328   _exit(42);
12329 }
12330 EOCP
12331 : first we have to find out how _not_ to flush
12332 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12333     output=''
12334     set try -DTRY_FPUTC
12335     if eval $compile; then
12336             $rm -f try.out
12337             ./try$exe_ext 2>/dev/null
12338             if $test ! -s try.out -a "X$?" = X42; then
12339                 output=-DTRY_FPUTC
12340             fi
12341     fi
12342     case "$output" in
12343     '')
12344             set try -DTRY_FPRINTF
12345             $rm -f try.out
12346             if eval $compile; then
12347                     $rm -f try.out
12348                     ./try$exe_ext 2>/dev/null
12349                     if $test ! -s try.out -a "X$?" = X42; then
12350                         output=-DTRY_FPRINTF
12351                     fi
12352             fi
12353         ;;
12354     esac
12355 fi
12356 : check for fflush NULL behaviour
12357 case "$fflushNULL" in
12358 '')     set try -DTRY_FFLUSH_NULL $output
12359         if eval $compile; then
12360                 $rm -f try.out
12361                 ./try$exe_ext 2>/dev/null
12362                 code="$?"
12363                 if $test -s try.out -a "X$code" = X42; then
12364                         fflushNULL="`$cat try.out`"
12365                 else
12366                         if $test "X$code" != X42; then
12367                                 $cat >&4 <<EOM
12368 (If this test failed, don't worry, we'll try another method shortly.)
12369 EOM
12370                         fi
12371                 fi
12372         fi
12373         $rm -f core try.core core.try.*
12374         case "$fflushNULL" in
12375         x)      $cat >&4 <<EOM
12376 Your fflush(NULL) works okay.
12377 EOM
12378                 fflushNULL="$define"
12379                 ;;
12380         '')     $cat >&4 <<EOM
12381 Your fflush(NULL) isn't working (contrary to ANSI C).
12382 EOM
12383                 fflushNULL="$undef"
12384                 ;;
12385         *)      $cat >&4 <<EOM
12386 Cannot figure out whether your fflush(NULL) works or not.
12387 I'm assuming it doesn't (contrary to ANSI C).
12388 EOM
12389                 fflushNULL="$undef"
12390                 ;;
12391         esac
12392         ;;
12393 $define|true|[yY]*)
12394         fflushNULL="$define"
12395         ;;
12396 *)
12397         fflushNULL="$undef"
12398         ;;
12399 esac
12400 : check explicit looping only if NULL did not work
12401 case "$fflushNULL" in
12402 "$undef")
12403         : check for fflush all behaviour
12404         case "$fflushall" in
12405         '')     set try -DTRY_FFLUSH_ALL $output
12406                 if eval $compile; then
12407                         $cat >&4 <<EOM
12408 (Now testing the other method--but note that also this may fail.)
12409 EOM
12410                         $rm -f try.out
12411                         ./try$exe_ext 2>/dev/null
12412                         if $test -s try.out -a "X$?" = X42; then
12413                                 fflushall="`$cat try.out`"
12414                         fi
12415                 fi
12416                 $rm -f core try.core core.try.*
12417                 case "$fflushall" in
12418                 x)      $cat >&4 <<EOM
12419 Whew. Flushing explicitly all the stdio streams works.
12420 EOM
12421                         fflushall="$define"
12422                         ;;
12423                 '')     $cat >&4 <<EOM
12424 Sigh. Flushing explicitly all the stdio streams doesn't work.
12425 EOM
12426                         fflushall="$undef"
12427                         ;;
12428                 *)      $cat >&4 <<EOM
12429 Cannot figure out whether flushing stdio streams explicitly works or not.
12430 I'm assuming it doesn't.
12431 EOM
12432                         fflushall="$undef"
12433                         ;;
12434                 esac
12435                 ;;
12436         "$define"|true|[yY]*)
12437                 fflushall="$define"
12438                 ;;
12439         *)
12440                 fflushall="$undef"
12441                 ;;
12442         esac
12443         ;;
12444 *)      fflushall="$undef"      
12445         ;;
12446 esac
12447 case "$fflushNULL$fflushall" in
12448 undefundef)
12449         $cat <<EOM
12450 I cannot figure out how to flush pending stdio output.
12451 EOM
12452         ;;
12453 esac
12454 $rm -f try.* try$exe_ext
12455
12456 : Store the full pathname to the ar program for use in the C program
12457 : Respect a hint or command line value for full_ar.
12458 case "$full_ar" in
12459 '') full_ar=$ar ;;
12460 esac
12461
12462 : Store the full pathname to the sed program for use in the C program
12463 full_sed=$sed
12464
12465 : see what type gids are declared as in the kernel
12466 echo " "
12467 echo "Looking for the type for group ids returned by getgid()."
12468 set gid_t gidtype xxx stdio.h sys/types.h
12469 eval $typedef
12470 case "$gidtype" in
12471 xxx)
12472         xxx=`./findhdr sys/user.h`
12473         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12474         case $1 in
12475         unsigned) dflt="$1 $2" ;;
12476         *) dflt="$1" ;;
12477         esac
12478         ;;
12479 *) dflt="$gidtype";;
12480 esac
12481 case "$gidtype" in
12482 gid_t) echo "gid_t found." ;;
12483 *)      rp="What is the type for group ids returned by getgid()?"
12484         . ./myread
12485         gidtype="$ans"
12486         ;;
12487 esac
12488
12489 echo " "
12490 case "$gidtype" in
12491 *_t) zzz="$gidtype"     ;;
12492 *)   zzz="gid"          ;;
12493 esac
12494 echo "Checking the size of $zzz..." >&4 
12495 cat > try.c <<EOCP
12496 #include <sys/types.h>
12497 #include <stdio.h>
12498 int main() {
12499     printf("%d\n", (int)sizeof($gidtype));
12500     exit(0);
12501 }
12502 EOCP
12503 set try
12504 if eval $compile_ok; then
12505         yyy=`./try`
12506         case "$yyy" in
12507         '')     gidsize=4
12508                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12509                 ;;
12510         *)      gidsize=$yyy
12511                 echo "Your $zzz is $gidsize bytes long."
12512                 ;;
12513         esac
12514 else
12515         gidsize=4
12516         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12517 fi
12518
12519
12520 echo " "
12521 case "$gidtype" in
12522 *_t) zzz="$gidtype"     ;;
12523 *)   zzz="gid"          ;;
12524 esac
12525 echo "Checking the sign of $zzz..." >&4 
12526 cat > try.c <<EOCP
12527 #include <sys/types.h>
12528 #include <stdio.h>
12529 int main() {
12530         $gidtype foo = -1;
12531         if (foo < 0)
12532                 printf("-1\n");
12533         else
12534                 printf("1\n");
12535 }
12536 EOCP
12537 set try
12538 if eval $compile; then
12539         yyy=`./try`
12540         case "$yyy" in
12541         '')     gidsign=1
12542                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12543                 ;;
12544         *)      gidsign=$yyy
12545                 case "$gidsign" in
12546                  1) echo "Your $zzz is unsigned." ;;
12547                 -1) echo "Your $zzz is signed."   ;;
12548                 esac
12549                 ;;
12550         esac
12551 else
12552         gidsign=1
12553         echo "(I can't compile the test program--guessing unsigned.)" >&4
12554 fi
12555
12556
12557 echo " "
12558
12559 if $test X"$quadtype" != X; then
12560
12561 echo "Checking how to print 64-bit integers..." >&4
12562
12563 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12564         $cat >try.c <<'EOCP'
12565 #include <sys/types.h>
12566 #include <stdio.h>
12567 int main() {
12568   int q = 12345678901;
12569   printf("%ld\n", q);
12570 }
12571 EOCP
12572         set try
12573         if eval $compile; then
12574                 yyy=`./try$exe_ext`
12575                 case "$yyy" in
12576                 12345678901)
12577                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12578                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12579                         echo "We will use %d."
12580                         ;;
12581                 esac
12582         fi
12583 fi
12584
12585 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12586         $cat >try.c <<'EOCP'
12587 #include <sys/types.h>
12588 #include <stdio.h>
12589 int main() {
12590   long q = 12345678901;
12591   printf("%ld\n", q);
12592 }
12593 EOCP
12594         set try
12595         if eval $compile; then
12596                 yyy=`./try$exe_ext`
12597                 case "$yyy" in
12598                 12345678901)
12599                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12600                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12601                         echo "We will use %ld."
12602                         ;;
12603                 esac
12604         fi
12605 fi
12606
12607 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12608         $cat >try.c <<'EOCP'
12609 #include <sys/types.h>
12610 #include <inttypes.h>
12611 #include <stdio.h>
12612 int main() {
12613   int64_t q = 12345678901;
12614   printf("%" PRId64 "\n", q);
12615 }
12616 EOCP
12617         set try
12618         if eval $compile; then
12619                 yyy=`./try$exe_ext`
12620                 case "$yyy" in
12621                 12345678901)
12622                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12623                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12624                         echo "We will use the C9X style."
12625                         ;;
12626                 esac
12627         fi
12628 fi
12629
12630 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12631         $cat >try.c <<'EOCP'
12632 #include <sys/types.h>
12633 #include <stdio.h>
12634 int main() {
12635   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12636   printf("%lld\n", q);
12637 }
12638 EOCP
12639         set try
12640         if eval $compile; then
12641                 yyy=`./try$exe_ext`
12642                 case "$yyy" in
12643                 12345678901)
12644                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12645                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12646                         echo "We will use the %lld style."
12647                         ;;
12648                 esac
12649         fi
12650 fi
12651
12652 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12653         $cat >try.c <<EOCP
12654 #include <sys/types.h>
12655 #include <stdio.h>
12656 int main() {
12657   $quadtype q = 12345678901;
12658   printf("%Ld\n", q);
12659 }
12660 EOCP
12661         set try
12662         if eval $compile; then
12663                 yyy=`./try$exe_ext`
12664                 case "$yyy" in
12665                 12345678901)
12666                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12667                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12668                         echo "We will use %Ld."
12669                         ;;
12670                 esac
12671         fi
12672 fi
12673
12674 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12675         $cat >try.c <<EOCP
12676 #include <sys/types.h>
12677 #include <stdio.h>
12678 int main() {
12679   $quadtype q = 12345678901;
12680   printf("%qd\n", q);
12681 }
12682 EOCP
12683         set try
12684         if eval $compile; then
12685                 yyy=`./try$exe_ext`
12686                 case "$yyy" in
12687                 12345678901)
12688                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12689                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12690                         echo "We will use %qd."
12691                         ;;
12692                 esac
12693         fi
12694 fi
12695
12696 if $test X"$sPRId64" = X; then
12697         echo "Cannot figure out how to print 64-bit integers." >&4
12698 fi
12699
12700 $rm -f try try.*
12701
12702 fi
12703
12704 case "$sPRId64" in
12705 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12706         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12707         ;;
12708 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12709         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12710         ;;
12711 esac
12712
12713
12714 echo " "
12715 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12716
12717 if $test X"$ivsize" = X8; then
12718         ivdformat="$sPRId64"
12719         uvuformat="$sPRIu64"
12720         uvoformat="$sPRIo64"
12721         uvxformat="$sPRIx64"
12722 else
12723         if $test X"$ivsize" = X"$longsize"; then
12724                 ivdformat='"ld"'
12725                 uvuformat='"lu"'
12726                 uvoformat='"lo"'
12727                 uvxformat='"lx"'
12728         else
12729                 if $test X"$ivsize" = X"$intsize"; then
12730                         ivdformat='"d"'
12731                         uvuformat='"u"'
12732                         uvoformat='"o"'
12733                         uvxformat='"x"'
12734                 else
12735                         : far out
12736                         if $test X"$ivsize" = X"$shortsize"; then
12737                                 ivdformat='"hd"'
12738                                 uvuformat='"hu"'
12739                                 uvoformat='"ho"'
12740                                 uvxformat='"hx"'
12741                         fi
12742                 fi
12743         fi
12744 fi
12745
12746 case "$ivdformat" in
12747 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12748     exit 1
12749     ;;
12750 esac
12751
12752
12753 echo " "
12754 $echo "Checking the format string to be used for gids..." >&4
12755
12756 case "$gidsign" in
12757 -1)     if $test X"$gidsize" = X"$ivsize"; then
12758                 gidformat="$ivdformat"
12759         else
12760                 if $test X"$gidsize" = X"$longsize"; then
12761                         gidformat='"ld"'
12762                 else
12763                         if $test X"$gidsize" = X"$intsize"; then
12764                                 gidformat='"d"'
12765                         else
12766                                 if $test X"$gidsize" = X"$shortsize"; then
12767                                         gidformat='"hd"'
12768                                 fi
12769                         fi
12770                 fi
12771         fi
12772         ;;
12773 *)      if $test X"$gidsize" = X"$uvsize"; then
12774                 gidformat="$uvuformat"
12775         else
12776                 if $test X"$gidsize" = X"$longsize"; then
12777                         gidformat='"lu"'
12778                 else
12779                         if $test X"$gidsize" = X"$intsize"; then
12780                                 gidformat='"u"'
12781                         else
12782                                 if $test X"$gidsize" = X"$shortsize"; then
12783                                         gidformat='"hu"'
12784                                 fi
12785                         fi
12786                 fi
12787         fi
12788         ;;
12789 esac
12790
12791 : see if getgroups exists
12792 set getgroups d_getgrps
12793 eval $inlibc
12794
12795 : see if setgroups exists
12796 set setgroups d_setgrps
12797 eval $inlibc
12798
12799
12800 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12801 echo " "
12802 case "$d_getgrps$d_setgrps" in
12803 *define*)
12804         case "$groupstype" in
12805         '') dflt="$gidtype" ;;
12806         *)  dflt="$groupstype" ;;
12807         esac
12808         $cat <<EOM
12809 What type of pointer is the second argument to getgroups() and setgroups()?
12810 Usually this is the same as group ids, $gidtype, but not always.
12811
12812 EOM
12813         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12814         . ./myread
12815         groupstype="$ans"
12816         ;;
12817 *)  groupstype="$gidtype";;
12818 esac
12819
12820 echo " "
12821 echo "Checking if your $make program sets \$(MAKE)..." >&4
12822 case "$make_set_make" in
12823 '')
12824         $sed 's/^X //' > testmake.mak << 'EOF'
12825 Xall:
12826 X       @echo 'maketemp="$(MAKE)"'
12827 EOF
12828         case "`$make -f testmake.mak 2>/dev/null`" in
12829         *maketemp=*) make_set_make='#' ;;
12830         *)      make_set_make="MAKE=$make" ;;
12831         esac
12832         $rm -f testmake.mak
12833         ;;
12834 esac
12835 case "$make_set_make" in
12836 '#') echo "Yup, it does.";;
12837 *) echo "Nope, it doesn't.";;
12838 esac
12839
12840 : see what type is used for mode_t
12841 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12842 set mode_t modetype int stdio.h sys/types.h
12843 eval $typedef_ask
12844
12845 : define a fucntion to check prototypes
12846 $cat > protochk <<EOSH
12847 $startsh
12848 cc="$cc"
12849 optimize="$optimize"
12850 ccflags="$ccflags"
12851 prototype="$prototype"
12852 define="$define"
12853 rm=$rm
12854 EOSH
12855
12856 $cat >> protochk <<'EOSH'
12857
12858 $rm -f try.c
12859 foo="$1"
12860 shift
12861 while test $# -ge 2; do
12862         case "$1" in
12863                 $define) echo "#include <$2>" >> try.c ;;
12864                 literal) echo "$2" >> try.c ;;
12865         esac
12866     shift 2
12867 done
12868 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12869 cat >> try.c <<'EOCP'
12870 #ifdef CAN_PROTOTYPE
12871 #define _(args) args
12872 #else
12873 #define _(args) ()
12874 #endif
12875 EOCP
12876 echo "$foo" >> try.c
12877 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12878 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12879 status=$?
12880 $rm -f try.[co]
12881 exit $status
12882 EOSH
12883 chmod +x protochk
12884 $eunicefix protochk
12885
12886 : see what type is used for size_t
12887 rp="What is the type used for the length parameter for string functions?"
12888 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12889 eval $typedef_ask
12890
12891 : check for type of arguments to gethostbyaddr. 
12892 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12893         case "$d_gethbyaddr" in
12894         $define)
12895                 $cat <<EOM
12896
12897 Checking to see what type of arguments are accepted by gethostbyaddr().
12898 EOM
12899                 hdrs="$define sys/types.h
12900                         $d_socket sys/socket.h 
12901                         $i_niin netinet/in.h 
12902                         $i_netdb netdb.h
12903                         $i_unistd unistd.h"
12904                 : The first arg can 'char *' or 'void *'
12905                 : The second arg is some of integral type
12906                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12907                         for yyy in size_t long int; do
12908                                 case "$netdb_host_type" in
12909                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12910                                         if ./protochk "$try" $hdrs; then
12911                                                 echo "Your system accepts $xxx for the first arg."
12912                                                 echo "...and $yyy for the second arg."
12913                                                 netdb_host_type="$xxx"
12914                                                 netdb_hlen_type="$yyy"
12915                                         fi
12916                                         ;;
12917                                 esac
12918                         done
12919                 done
12920                 : In case none of those worked, prompt the user.
12921                 case "$netdb_host_type" in
12922                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12923                         dflt='char *'
12924                         . ./myread
12925                         netdb_host_type=$ans
12926                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12927                         dflt="$sizetype"
12928                         . ./myread
12929                         netdb_hlen_type=$ans
12930                         ;;
12931                 esac
12932                 ;;
12933         *)      : no gethostbyaddr, so pick harmless defaults
12934                 netdb_host_type='char *'
12935                 netdb_hlen_type="$sizetype"
12936                 ;;
12937         esac
12938         # Remove the "const" if needed. -- but then we'll have a 
12939         # prototype clash!
12940         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12941 fi
12942
12943 : check for type of argument to gethostbyname. 
12944 if test "X$netdb_name_type" = X ; then
12945         case "$d_gethbyname" in
12946         $define)
12947                 $cat <<EOM
12948
12949 Checking to see what type of argument is accepted by gethostbyname().
12950 EOM
12951                 hdrs="$define sys/types.h
12952                         $d_socket sys/socket.h 
12953                         $i_niin netinet/in.h 
12954                         $i_netdb netdb.h
12955                         $i_unistd unistd.h"
12956                 for xxx in "const char *" "char *"; do
12957                         case "$netdb_name_type" in
12958                         '')     try="extern struct hostent *gethostbyname($xxx);"
12959                                 if ./protochk "$try" $hdrs; then
12960                                         echo "Your system accepts $xxx."
12961                                         netdb_name_type="$xxx"
12962                                 fi
12963                                 ;;
12964                         esac
12965                 done
12966                 : In case none of those worked, prompt the user.
12967                 case "$netdb_name_type" in
12968                 '')     rp='What is the type for the 1st argument to gethostbyname?'
12969                         dflt='char *'
12970                         . ./myread
12971                         netdb_name_type=$ans
12972                         ;;
12973                 esac
12974                 ;;
12975         *)      : no gethostbyname, so pick harmless default
12976                 netdb_name_type='char *'
12977                 ;;
12978         esac
12979 fi
12980
12981 : check for type of 1st argument to getnetbyaddr. 
12982 if test "X$netdb_net_type" = X ; then
12983         case "$d_getnbyaddr" in
12984         $define)
12985                 $cat <<EOM
12986
12987 Checking to see what type of 1st argument is accepted by getnetbyaddr().
12988 EOM
12989                 hdrs="$define sys/types.h
12990                         $d_socket sys/socket.h 
12991                         $i_niin netinet/in.h 
12992                         $i_netdb netdb.h
12993                         $i_unistd unistd.h"
12994                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12995                         case "$netdb_net_type" in
12996                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
12997                                 if ./protochk "$try" $hdrs; then
12998                                         echo "Your system accepts $xxx."
12999                                         netdb_net_type="$xxx"
13000                                 fi
13001                                 ;;
13002                         esac
13003                 done
13004                 : In case none of those worked, prompt the user.
13005                 case "$netdb_net_type" in
13006                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13007                         dflt='long'
13008                         . ./myread
13009                         netdb_net_type=$ans
13010                         ;;
13011                 esac
13012                 ;;
13013         *)      : no getnetbyaddr, so pick harmless default
13014                 netdb_net_type='long'
13015                 ;;
13016         esac
13017 fi
13018 : locate the preferred pager for this system
13019 case "$pager" in
13020 '')
13021         dflt=''
13022         case "$pg" in
13023         /*) dflt=$pg;;
13024         esac
13025         case "$more" in
13026         /*) dflt=$more;;
13027         esac
13028         case "$less" in
13029         /*) dflt=$less;;
13030         esac
13031         case "$dflt" in
13032         '') dflt=/usr/ucb/more;;
13033         esac
13034         ;;
13035 *) dflt="$pager";;
13036 esac
13037 echo " "
13038 fn=f/
13039 rp='What pager is used on your system?'
13040 . ./getfile
13041 pager="$ans"
13042
13043 : see what type pids are declared as in the kernel
13044 rp="What is the type of process ids on this system?"
13045 set pid_t pidtype int stdio.h sys/types.h
13046 eval $typedef_ask
13047
13048 : Find earliest binary compatible site_perl subdirectory perl can use.
13049 case "$bincompat5005" in
13050 "$define") xs_apiversion='5.005' ;;
13051 *) xs_apiversion=$version ;;   # The current site_perl version.
13052 esac
13053 : Find earliest pure perl site_perl subdirectory perl can use.
13054 : The versioned directories started at 5.005.
13055 pm_apiversion='5.005'
13056
13057 : check for length of pointer
13058 echo " "
13059 case "$ptrsize" in
13060 '')
13061         echo "Checking to see how big your pointers are..." >&4
13062         if test "$voidflags" -gt 7; then
13063                 echo '#define VOID_PTR char *' > try.c
13064         else
13065                 echo '#define VOID_PTR void *' > try.c
13066         fi
13067         $cat >>try.c <<'EOCP'
13068 #include <stdio.h>
13069 int main()
13070 {
13071     printf("%d\n", (int)sizeof(VOID_PTR));
13072     exit(0);
13073 }
13074 EOCP
13075         set try
13076         if eval $compile_ok; then
13077                 ptrsize=`./try`
13078                 echo "Your pointers are $ptrsize bytes long."
13079         else
13080                 dflt='4'
13081                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13082                 rp="What is the size of a pointer (in bytes)?"
13083                 . ./myread
13084                 ptrsize="$ans"
13085         fi
13086         ;;
13087 esac
13088 $rm -f try.c try
13089
13090 : see if ar generates random libraries by itself
13091 echo " "
13092 echo "Checking how to generate random libraries on your machine..." >&4
13093 echo 'int bar1() { return bar2(); }' > bar1.c
13094 echo 'int bar2() { return 2; }' > bar2.c
13095 $cat > foo.c <<'EOP'
13096 int main() { printf("%d\n", bar1()); exit(0); }
13097 EOP
13098 $cc $ccflags -c bar1.c >/dev/null 2>&1
13099 $cc $ccflags -c bar2.c >/dev/null 2>&1
13100 $cc $ccflags -c foo.c >/dev/null 2>&1
13101 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13102 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13103         ./foobar >/dev/null 2>&1; then
13104         echo "$ar appears to generate random libraries itself."
13105         orderlib=false
13106         ranlib=":"
13107 elif $ar ts bar$_a >/dev/null 2>&1 &&
13108         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13109         ./foobar >/dev/null 2>&1; then
13110                 echo "a table of contents needs to be added with '$ar ts'."
13111                 orderlib=false
13112                 ranlib="$ar ts"
13113 else
13114         case "$ranlib" in
13115         :) ranlib='';;
13116         '')
13117                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13118                 $test -f $ranlib || ranlib=''
13119                 ;;
13120         esac
13121         if $test -n "$ranlib"; then
13122                 echo "your system has '$ranlib'; we'll use that."
13123                 orderlib=false
13124         else
13125                 echo "your system doesn't seem to support random libraries"
13126                 echo "so we'll use lorder and tsort to order the libraries."
13127                 orderlib=true
13128                 ranlib=":"
13129         fi
13130 fi
13131 $rm -f foo* bar* 
13132
13133 : check for type of arguments to select. 
13134 case "$selecttype" in
13135 '') case "$d_select" in
13136         $define)
13137                 echo " "
13138                 $cat <<EOM
13139 Checking to see what type of arguments are accepted by select().
13140 EOM
13141                 hdrs="$define sys/types.h
13142                         $i_systime sys/time.h 
13143                         $i_sysselct sys/select.h
13144                         $d_socket sys/socket.h"
13145                 : The first arg can be int, unsigned, or size_t
13146                 : The last arg may or may not be 'const'
13147                 val=''
13148                 : void pointer has been seen but using that
13149                 : breaks the selectminbits test
13150                 for xxx in 'fd_set *' 'int *'; do
13151                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13152                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13153                                         case "$val" in
13154                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13155                                                 if ./protochk "$try" $hdrs; then
13156                                                         echo "Your system accepts $xxx."
13157                                                         val="$xxx"
13158                                                 fi
13159                                                 ;;
13160                                         esac
13161                                 done
13162                         done
13163                 done
13164                 case "$val" in
13165                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13166                         case "$d_fd_set" in
13167                                 $define) dflt="fd_set *" ;;
13168                                 *)              dflt="int *" ;;
13169                         esac
13170                         . ./myread
13171                         val=$ans
13172                         ;;
13173                 esac
13174                 selecttype="$val"
13175                 ;;
13176         *)      : no select, so pick a harmless default
13177                 selecttype='int *'
13178                 ;;
13179         esac
13180         ;;
13181 esac
13182
13183 : check for the select 'width'
13184 case "$selectminbits" in
13185 '') case "$d_select" in
13186         $define)
13187                 $cat <<EOM
13188
13189 Checking to see on how many bits at a time your select() operates...
13190 EOM
13191                 $cat >try.c <<EOCP
13192 #include <sys/types.h>
13193 #$i_time I_TIME
13194 #$i_systime I_SYS_TIME
13195 #$i_systimek I_SYS_TIME_KERNEL
13196 #ifdef I_TIME
13197 #   include <time.h>
13198 #endif
13199 #ifdef I_SYS_TIME
13200 #   ifdef I_SYS_TIME_KERNEL
13201 #       define KERNEL
13202 #   endif
13203 #   include <sys/time.h>
13204 #   ifdef I_SYS_TIME_KERNEL
13205 #       undef KERNEL
13206 #   endif
13207 #endif
13208 #$i_sysselct I_SYS_SELECT
13209 #ifdef I_SYS_SELECT
13210 #include <sys/select.h>
13211 #endif
13212 #$d_socket HAS_SOCKET
13213 #ifdef HAS_SOCKET
13214 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13215 #endif
13216 #include <stdio.h>
13217 $selecttype b;
13218 #define S sizeof(*(b))
13219 #define MINBITS 64
13220 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13221 #define NBITS  (NBYTES * 8)
13222 int main() {
13223     char s[NBYTES];
13224     struct timeval t;
13225     int i;
13226     FILE* fp;
13227     int fd;
13228
13229     fclose(stdin);
13230     fp = fopen("try.c", "r");
13231     if (fp == 0)
13232       exit(1);
13233     fd = fileno(fp);
13234     if (fd < 0)
13235       exit(2);
13236     b = ($selecttype)s;
13237     for (i = 0; i < NBITS; i++)
13238         FD_SET(i, b);
13239     t.tv_sec  = 0;
13240     t.tv_usec = 0;
13241     select(fd + 1, b, 0, 0, &t);
13242     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13243     printf("%d\n", i + 1);
13244     return 0;
13245 }
13246 EOCP
13247                 set try
13248                 if eval $compile_ok; then
13249                         selectminbits=`./try`
13250                         case "$selectminbits" in
13251                         '')     cat >&4 <<EOM
13252 Cannot figure out on how many bits at a time your select() operates.
13253 I'll play safe and guess it is 32 bits.
13254 EOM
13255                                 selectminbits=32
13256                                 bits="32 bits"
13257                                 ;;
13258                         1)      bits="1 bit" ;;
13259                         *)      bits="$selectminbits bits" ;;
13260                         esac
13261                         echo "Your select() operates on $bits at a time." >&4
13262                 else
13263                         rp='What is the minimum number of bits your select() operates on?'
13264                         case "$byteorder" in
13265                         1234|12345678)  dflt=32 ;;
13266                         *)              dflt=1  ;;
13267                         esac
13268                         . ./myread
13269                         val=$ans
13270                         selectminbits="$val"
13271                 fi
13272                 $rm -f try.* try
13273                 ;;
13274         *)      : no select, so pick a harmless default
13275                 selectminbits='32'
13276                 ;;
13277         esac
13278         ;;
13279 esac
13280
13281 : Trace out the files included by signal.h, then look for SIGxxx names.
13282 : Remove SIGARRAYSIZE used by HPUX.
13283 : Remove SIGSTKSIZE used by Linux.
13284 : Remove SIGSTKSZ used by Posix.
13285 : Remove SIGTYP void lines used by OS2.
13286 : Some cpps, like os390, dont give the file name anywhere
13287 if [ "X$fieldn" = X ]; then
13288         : Just make some guesses.  We check them later.
13289         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13290 else
13291         xxx=`echo '#include <signal.h>' |
13292         $cppstdin $cppminus $cppflags 2>/dev/null |
13293         $grep '^[       ]*#.*include' | 
13294         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13295 fi
13296 : Check this list of files to be sure we have parsed the cpp output ok.
13297 : This will also avoid potentially non-existent files, such 
13298 : as ../foo/bar.h
13299 xxxfiles=''
13300 for xx in $xxx /dev/null ; do
13301         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13302 done
13303 : If we have found no files, at least try signal.h
13304 case "$xxxfiles" in
13305 '')     xxxfiles=`./findhdr signal.h` ;;
13306 esac
13307 xxx=`awk '
13308 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13309         print substr($2, 4, 20)
13310 }
13311 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13312         print substr($3, 4, 20)
13313 }' $xxxfiles`
13314 : Append some common names just in case the awk scan failed.
13315 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13316 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13317 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13318 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13319 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13320
13321 : generate a few handy files for later
13322 $cat > signal.c <<'EOCP'
13323 #include <sys/types.h>
13324 #include <signal.h>
13325 #include <stdio.h>
13326 int main() {
13327
13328 /* Strange style to avoid deeply-nested #if/#else/#endif */
13329 #ifndef NSIG
13330 #  ifdef _NSIG
13331 #    define NSIG (_NSIG)
13332 #  endif
13333 #endif
13334
13335 #ifndef NSIG
13336 #  ifdef SIGMAX
13337 #    define NSIG (SIGMAX+1)
13338 #  endif
13339 #endif
13340
13341 #ifndef NSIG
13342 #  ifdef SIG_MAX
13343 #    define NSIG (SIG_MAX+1)
13344 #  endif
13345 #endif
13346
13347 #ifndef NSIG
13348 #  ifdef MAXSIG
13349 #    define NSIG (MAXSIG+1)
13350 #  endif
13351 #endif
13352
13353 #ifndef NSIG
13354 #  ifdef MAX_SIG
13355 #    define NSIG (MAX_SIG+1)
13356 #  endif
13357 #endif
13358
13359 #ifndef NSIG
13360 #  ifdef SIGARRAYSIZE
13361 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13362 #  endif
13363 #endif
13364
13365 #ifndef NSIG
13366 #  ifdef _sys_nsig
13367 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13368 #  endif
13369 #endif
13370
13371 /* Default to some arbitrary number that's big enough to get most
13372    of the common signals.
13373 */
13374 #ifndef NSIG
13375 #    define NSIG 50
13376 #endif
13377
13378 printf("NSIG %d\n", NSIG);
13379
13380 #ifndef JUST_NSIG
13381
13382 EOCP
13383
13384 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13385 {
13386         printf "#ifdef SIG"; printf $1; printf "\n"
13387         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13388         printf $1; printf ");\n"
13389         printf "#endif\n"
13390 }
13391 END {
13392         printf "#endif /* JUST_NSIG */\n";
13393         printf "exit(0);\n}\n";
13394 }
13395 ' >>signal.c
13396 $cat >signal.awk <<'EOP'
13397 BEGIN { ndups = 0 }
13398 $1 ~ /^NSIG$/ { nsig = $2 }
13399 ($1 !~ /^NSIG$/) && (NF == 2) {
13400     if ($2 > maxsig) { maxsig = $2 }
13401     if (sig_name[$2]) {
13402         dup_name[ndups] = $1
13403         dup_num[ndups] = $2
13404         ndups++ 
13405     }
13406     else {
13407         sig_name[$2] = $1
13408         sig_num[$2] = $2
13409     }
13410 }
13411 END { 
13412     if (nsig == 0) {
13413         nsig = maxsig + 1
13414     }
13415     printf("NSIG %d\n", nsig);
13416     for (n = 1; n < nsig; n++) {
13417         if (sig_name[n]) {
13418             printf("%s %d\n", sig_name[n], sig_num[n])
13419         }
13420         else {
13421             printf("NUM%d %d\n", n, n) 
13422         }
13423     }
13424     for (n = 0; n < ndups; n++) {
13425         printf("%s %d\n", dup_name[n], dup_num[n])
13426     }
13427 }
13428 EOP
13429 $cat >signal_cmd <<EOS
13430 $startsh
13431 if $test -s signal.lst; then
13432     echo "Using your existing signal.lst file"
13433         exit 0
13434 fi
13435 xxx="$xxx"
13436 EOS
13437 $cat >>signal_cmd <<'EOS'
13438
13439 set signal
13440 if eval $compile_ok; then
13441         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13442 else
13443         echo "(I can't seem be able to compile the whole test program)" >&4
13444         echo "(I'll try it in little pieces.)" >&4
13445         set signal -DJUST_NSIG
13446         if eval $compile_ok; then
13447                 ./signal$_exe > signal.nsg
13448                 $cat signal.nsg
13449         else
13450                 echo "I can't seem to figure out how many signals you have." >&4
13451                 echo "Guessing 50." >&4
13452                 echo 'NSIG 50' > signal.nsg
13453         fi
13454         : Now look at all the signal names, one at a time.
13455         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13456                 $cat > signal.c <<EOCP
13457 #include <sys/types.h>
13458 #include <signal.h>
13459 #include <stdio.h>
13460 int main() {
13461 printf("$xx %d\n", SIG${xx});
13462 return 0;
13463 }
13464 EOCP
13465                 set signal
13466                 if eval $compile; then
13467                         echo "SIG${xx} found."
13468                         ./signal$_exe  >> signal.ls1
13469                 else
13470                         echo "SIG${xx} NOT found."
13471                 fi
13472         done
13473         if $test -s signal.ls1; then
13474                 $cat signal.nsg signal.ls1 |
13475                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13476         fi
13477
13478 fi
13479 if $test -s signal.lst; then
13480         :
13481 else
13482         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13483         echo 'kill -l' >signal
13484         set X `csh -f <signal`
13485         $rm -f signal
13486         shift
13487         case $# in
13488         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13489         esac
13490         echo $@ | $tr ' ' $trnl | \
13491             $awk '{ printf "%s %d\n", $1, ++s; }
13492                   END { printf "NSIG %d\n", ++s }' >signal.lst
13493 fi
13494 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13495 EOS
13496 chmod a+x signal_cmd
13497 $eunicefix signal_cmd
13498
13499 : generate list of signal names
13500 echo " "
13501 case "$sig_name_init" in
13502 '') doinit=yes ;;
13503 *)  case "$sig_num_init" in
13504     ''|*,*) doinit=yes ;;
13505     esac ;;
13506 esac
13507 case "$doinit" in
13508 yes)
13509         echo "Generating a list of signal names and numbers..." >&4
13510         . ./signal_cmd
13511         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13512         sig_name=`$awk 'BEGIN { printf "ZERO " }
13513                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13514         sig_num=`$awk  'BEGIN { printf "0 " }
13515                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13516         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13517                              !/^NSIG/   { printf "\"%s\", ", $1 }
13518                              END        { printf "0\n" }' signal.lst`
13519         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13520                              !/^NSIG/   { printf "%d, ", $2}
13521                              END        { printf "0\n"}' signal.lst`
13522         ;;
13523 esac
13524 echo "The following $sig_count signals are available:"
13525 echo " "
13526 echo $sig_name | $awk \
13527 'BEGIN { linelen = 0 }
13528 {
13529         for (i = 1; i <= NF; i++) {
13530                 name = "SIG" $i " "
13531                 linelen = linelen + length(name)
13532                 if (linelen > 70) {
13533                         printf "\n"
13534                         linelen = length(name)
13535                 }
13536                 printf "%s", name
13537         }
13538         printf "\n"
13539 }'
13540 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13541
13542 : check for socklen_t
13543 echo " "
13544 echo "Checking to see if you have socklen_t..." >&4
13545 $cat >try.c <<EOCP
13546 #include <sys/types.h>
13547 #$d_socket HAS_SOCKET
13548 #ifdef HAS_SOCKET
13549 #include <sys/socket.h>
13550 #endif
13551 int main() { socklen_t x = 16; }
13552 EOCP
13553 set try
13554 if eval $compile; then
13555         val="$define"
13556         echo "You have socklen_t."
13557 else
13558         val="$undef"
13559         echo "You do not have socklen_t."
13560         case "$sizetype" in
13561         size_t) echo "(You do have size_t, that might work.)" ;;
13562         esac
13563 fi
13564 $rm -f try try.*
13565 set d_socklen_t
13566 eval $setvar
13567
13568 : check for type of the size argument to socket calls
13569 case "$d_socket" in
13570 "$define")
13571         $cat <<EOM
13572
13573 Checking to see what type is the last argument of accept().
13574 EOM
13575         hdrs="$define sys/types.h $d_socket sys/socket.h" 
13576         yyy=''
13577         case "$d_socklen_t" in
13578         "$define") yyy="$yyy socklen_t"
13579         esac
13580         yyy="$yyy $sizetype int long"
13581         for xxx in $yyy; do
13582                 case "$socksizetype" in
13583                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
13584                         if ./protochk "$try" $hdrs; then
13585                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
13586                                 socksizetype="$xxx"
13587                         fi
13588                         ;;
13589                 esac
13590         done
13591 : In case none of those worked, prompt the user.
13592         case "$socksizetype" in
13593         '')     rp='What is the type for the last argument to accept()?'
13594                 dflt='int'
13595                 . ./myread
13596                 socksizetype=$ans
13597                 ;;
13598         esac
13599         ;;
13600 *)      : no sockets, so pick relatively harmless defaults
13601         socksizetype='char *'
13602         ;;
13603 esac
13604
13605 : see what type is used for signed size_t
13606 set ssize_t ssizetype int stdio.h sys/types.h
13607 eval $typedef
13608 dflt="$ssizetype"
13609 $cat > ssize.c <<EOM
13610 #include <stdio.h>
13611 #include <sys/types.h>
13612 #define Size_t $sizetype
13613 #define SSize_t $dflt
13614 int main()
13615 {
13616         if (sizeof(Size_t) == sizeof(SSize_t))
13617                 printf("$dflt\n");
13618         else if (sizeof(Size_t) == sizeof(int))
13619                 printf("int\n");
13620         else 
13621                 printf("long\n");
13622         exit(0);
13623 }
13624 EOM
13625 echo " "
13626 set ssize
13627 if eval $compile_ok && ./ssize > /dev/null; then
13628         ssizetype=`./ssize`
13629         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13630 else
13631         $cat >&4 <<EOM
13632 Help! I can't compile and run the ssize_t test program: please enlighten me!
13633 (This is probably a misconfiguration in your system or libraries, and
13634 you really ought to fix it.  Still, I'll try anyway.)
13635
13636 I need a type that is the same size as $sizetype, but is guaranteed to
13637 be signed.  Common values are ssize_t, int and long.
13638
13639 EOM
13640         rp="What signed type is the same size as $sizetype?"
13641         . ./myread
13642         ssizetype="$ans"
13643 fi
13644 $rm -f ssize ssize.*
13645
13646 : see what type of char stdio uses.
13647 echo " "
13648 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13649         echo "Your stdio uses unsigned chars." >&4
13650         stdchar="unsigned char"
13651 else
13652         echo "Your stdio uses signed chars." >&4
13653         stdchar="char"
13654 fi
13655
13656 : see if time exists
13657 echo " "
13658 if test "X$d_time" = X -o X"$timetype" = X; then
13659     if set time val -f d_time; eval $csym; $val; then
13660                 echo 'time() found.' >&4
13661                 val="$define"
13662                 rp="What is the type returned by time() on this system?"
13663                 set time_t timetype long stdio.h sys/types.h
13664                 eval $typedef_ask
13665     else
13666                 echo 'time() not found, hope that will do.' >&4
13667                 val="$undef"
13668                 timetype='int';
13669     fi
13670     set d_time
13671     eval $setvar
13672 fi
13673
13674 : see what type uids are declared as in the kernel
13675 echo " "
13676 echo "Looking for the type for user ids returned by getuid()."
13677 set uid_t uidtype xxx stdio.h sys/types.h
13678 eval $typedef
13679 case "$uidtype" in
13680 xxx)
13681         xxx=`./findhdr sys/user.h`
13682         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13683         case $1 in
13684         unsigned) dflt="$1 $2" ;;
13685         *) dflt="$1" ;;
13686         esac
13687         ;;
13688 *) dflt="$uidtype";;
13689 esac
13690 case "$uidtype" in
13691 uid_t)  echo "uid_t found." ;;
13692 *)      rp="What is the type for user ids returned by getuid()?"
13693         . ./myread
13694         uidtype="$ans"
13695         ;;
13696 esac
13697
13698 echo " "
13699 case "$uidtype" in
13700 *_t) zzz="$uidtype"     ;;
13701 *)   zzz="uid"          ;;
13702 esac
13703 echo "Checking the size of $zzz..." >&4 
13704 cat > try.c <<EOCP
13705 #include <sys/types.h>
13706 #include <stdio.h>
13707 int main() {
13708     printf("%d\n", (int)sizeof($uidtype));
13709     exit(0);
13710 }
13711 EOCP
13712 set try
13713 if eval $compile_ok; then
13714         yyy=`./try`
13715         case "$yyy" in
13716         '')     uidsize=4
13717                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13718                 ;;
13719         *)      uidsize=$yyy
13720                 echo "Your $zzz is $uidsize bytes long."
13721                 ;;
13722         esac
13723 else
13724         uidsize=4
13725         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13726 fi
13727
13728 echo " "
13729 case "$uidtype" in
13730 *_t) zzz="$uidtype"     ;;
13731 *)   zzz="uid"          ;;
13732 esac
13733 echo "Checking the sign of $zzz..." >&4
13734 cat > try.c <<EOCP
13735 #include <sys/types.h>
13736 #include <stdio.h>
13737 int main() {
13738         $uidtype foo = -1;
13739         if (foo < 0)
13740                 printf("-1\n");
13741         else
13742                 printf("1\n");
13743 }
13744 EOCP
13745 set try
13746 if eval $compile; then
13747         yyy=`./try`
13748         case "$yyy" in
13749         '')     uidsign=1
13750                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13751                 ;;
13752         *)      uidsign=$yyy
13753                 case "$uidsign" in
13754                  1) echo "Your $zzz is unsigned." ;;
13755                 -1) echo "Your $zzz is signed."   ;;
13756                 esac
13757                 ;;
13758         esac
13759 else
13760         uidsign=1
13761         echo "(I can't compile the test program--guessing unsigned.)" >&4
13762 fi
13763
13764
13765
13766 echo " "
13767 $echo "Checking the format string to be used for uids..." >&4
13768
13769 case "$uidsign" in
13770 -1)     if $test X"$uidsize" = X"$ivsize"; then
13771                 uidformat="$ivdformat"
13772         else
13773                 if $test X"$uidsize" = X"$longsize"; then
13774                         uidformat='"ld"'
13775                 else
13776                         if $test X"$uidsize" = X"$intsize"; then
13777                                 uidformat='"d"'
13778                         else
13779                                 if $test X"$uidsize" = X"$shortsize"; then
13780                                         uidformat='"hd"'
13781                                 fi
13782                         fi
13783                 fi
13784         fi
13785         ;;
13786 *)      if $test X"$uidsize" = X"$uvsize"; then
13787                 uidformat="$uvuformat"
13788         else
13789                 if $test X"$uidsize" = X"$longsize"; then
13790                         uidformat='"lu"'
13791                 else
13792                         if $test X"$uidsize" = X"$intsize"; then
13793                                 uidformat='"u"'
13794                         else
13795                                 if $test X"$uidsize" = X"$shortsize"; then
13796                                         uidformat='"hu"'
13797                                 fi
13798                         fi
13799                 fi
13800         fi
13801         ;;
13802 esac
13803
13804 : see if dbm.h is available
13805 : see if dbmclose exists
13806 set dbmclose d_dbmclose
13807 eval $inlibc
13808
13809 case "$d_dbmclose" in
13810 $define)
13811         set dbm.h i_dbm
13812         eval $inhdr
13813         case "$i_dbm" in
13814         $define)
13815                 val="$undef"
13816                 set i_rpcsvcdbm
13817                 eval $setvar
13818                 ;;
13819         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13820                 eval $inhdr
13821                 ;;
13822         esac
13823         ;;
13824 *)      echo "We won't be including <dbm.h>"
13825         val="$undef"
13826         set i_dbm
13827         eval $setvar
13828         val="$undef"
13829         set i_rpcsvcdbm
13830         eval $setvar
13831         ;;
13832 esac
13833
13834 : see if this is a sys/file.h system
13835 val=''
13836 set sys/file.h val
13837 eval $inhdr
13838
13839 : do we need to include sys/file.h ?
13840 case "$val" in
13841 "$define")
13842         echo " "
13843         if $h_sysfile; then
13844                 val="$define"
13845                 echo "We'll be including <sys/file.h>." >&4
13846         else
13847                 val="$undef"
13848                 echo "We won't be including <sys/file.h>." >&4
13849         fi
13850         ;;
13851 *)
13852         h_sysfile=false
13853         ;;
13854 esac
13855 set i_sysfile
13856 eval $setvar
13857
13858 : see if fcntl.h is there
13859 val=''
13860 set fcntl.h val
13861 eval $inhdr
13862
13863 : see if we can include fcntl.h
13864 case "$val" in
13865 "$define")
13866         echo " "
13867         if $h_fcntl; then
13868                 val="$define"
13869                 echo "We'll be including <fcntl.h>." >&4
13870         else
13871                 val="$undef"
13872                 if $h_sysfile; then
13873         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13874                 else
13875                         echo "We won't be including <fcntl.h>." >&4
13876                 fi
13877         fi
13878         ;;
13879 *)
13880         h_fcntl=false
13881         val="$undef"
13882         ;;
13883 esac
13884 set i_fcntl
13885 eval $setvar
13886
13887 : see if this is a iconv.h system
13888 set iconv.h i_iconv
13889 eval $inhdr
13890
13891 : see if locale.h is available
13892 set locale.h i_locale
13893 eval $inhdr
13894
13895 : see if mach cthreads are available
13896 if test "X$usethreads" = "X$define"; then
13897         set mach/cthreads.h i_machcthr
13898         eval $inhdr
13899 else
13900         i_machcthr="$undef"
13901 fi
13902
13903
13904
13905 : see if this is a math.h system
13906 set math.h i_math
13907 eval $inhdr
13908
13909 : see if this is a mntent.h system
13910 set mntent.h i_mntent
13911 eval $inhdr
13912
13913 : see if ndbm.h is available
13914 set ndbm.h t_ndbm
13915 eval $inhdr
13916 case "$t_ndbm" in
13917 $define)
13918         : see if dbm_open exists
13919         set dbm_open d_dbm_open
13920         eval $inlibc
13921         case "$d_dbm_open" in
13922         $undef)
13923                 t_ndbm="$undef"
13924                 echo "We won't be including <ndbm.h>"
13925                 ;;
13926         esac
13927         ;;
13928 esac
13929 val="$t_ndbm"
13930 set i_ndbm
13931 eval $setvar
13932
13933 : see if net/errno.h is available
13934 val=''
13935 set net/errno.h val
13936 eval $inhdr
13937
13938 : Unfortunately, it causes problems on some systems.  Arrgh.
13939 case "$val" in
13940 $define)
13941         cat > try.c <<'EOM'
13942 #include <stdio.h>
13943 #include <errno.h>
13944 #include <net/errno.h>
13945 int func()
13946 {
13947         return ENOTSOCK;
13948 }
13949 EOM
13950         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13951                 echo "We'll be including <net/errno.h>." >&4
13952         else
13953                 echo "We won't be including <net/errno.h>." >&4
13954                 val="$undef"
13955         fi
13956         $rm -f try.* try
13957         ;;
13958 esac
13959 set i_neterrno
13960 eval $setvar
13961
13962 : see if netinet/tcp.h is available
13963 set netinet/tcp.h i_netinettcp
13964 eval $inhdr
13965
13966 : see if this is a poll.h system
13967 set poll.h i_poll
13968 eval $inhdr
13969
13970 echo " "
13971 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
13972 $cat <<'EOSH' > Cppsym.know
13973 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
13974 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
13975 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
13976 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
13977 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
13978 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
13979 bull c cadmus clipper CMU COFF COMPILER_VERSION
13980 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
13981 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
13982 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
13983 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
13984 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
13985 H3050R H3050RX hbullx20 hcx host_mips
13986 hp200 hp300 hp700 HP700 hp800 hp9000
13987 hp9000s200 hp9000s300 hp9000s400 hp9000s500
13988 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
13989 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
13990 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
13991 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
13992 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
13993 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
13994 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
13995 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
13996 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
13997 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
13998 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
13999 MATH_HAS_NO_SIDE_EFFECTS
14000 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14001 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14002 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14003 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14004 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14005 NetBSD news1500 news1700 news1800 news1900 news3700
14006 news700 news800 news900 NeXT NLS ns16000 ns32000
14007 ns32016 ns32332 ns32k nsc32000
14008 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14009 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14010 pc532 pdp11 PGC PIC plexus PORTAR posix
14011 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14012 POSIX_C_SOURCE POSIX_SOURCE POWER
14013 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14014 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14015 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14016 sony sony_news sonyrisc sparc sparclite spectrum
14017 stardent stdc STDC_EXT stratos sun sun3 sun386
14018 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14019 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14020 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14021 sysV68 sysV88 Tek4132 Tek4300 titan
14022 tower tower32 tower32_200 tower32_600 tower32_700
14023 tower32_800 tower32_850 tss
14024 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14025 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14026 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14027 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14028 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14029 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14030 z8000
14031 EOSH
14032 # Maybe put other stuff here too.
14033 cat <<EOSH >>Cppsym.know
14034 $osname
14035 EOSH
14036 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14037 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14038 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
14039 $rm -f Cppsym.a Cppsym.b
14040 cat <<EOSH > Cppsym
14041 $startsh
14042 if $test \$# -gt 0; then
14043     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14044     if $test -s Cppsym.got; then
14045         $rm -f Cppsym.got
14046         exit 0
14047     fi
14048     $rm -f Cppsym.got
14049     exit 1
14050 else
14051     $tr " " "$trnl" | ./Cppsym.try
14052     exit 0
14053 fi
14054 EOSH
14055 chmod +x Cppsym
14056 $eunicefix Cppsym
14057 cat <<EOSH > Cppsym.try
14058 $startsh
14059 cat <<'EOCP' > try.c
14060 #include <stdio.h>
14061 int main() {
14062 EOCP
14063 $awk \\
14064 EOSH
14065 cat <<'EOSH' >> Cppsym.try
14066 'length($1) > 0 {
14067     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
14068     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
14069     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
14070     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
14071 }'       >> try.c
14072 echo '}' >> try.c
14073 EOSH
14074 cat <<EOSH >> Cppsym.try
14075 cc="$cc"
14076 optimize="$optimize"
14077 ccflags="$ccflags"
14078 ldflags="$ldflags"
14079 libs="$libs"
14080 exe_ext="$exe_ext"
14081 $cc $optimize $ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14082 EOSH
14083 chmod +x Cppsym.try
14084 $eunicefix Cppsym.try
14085 ./Cppsym < Cppsym.know > Cppsym.true
14086 : now check the C compiler for additional symbols
14087 postprocess_cc_v=''
14088 case "$osname" in
14089 aix) postprocess_cc_v="|$tr , ' '" ;;
14090 esac
14091 $cat >ccsym <<EOS
14092 $startsh
14093 $cat >tmp.c <<EOF
14094 extern int foo;
14095 EOF
14096 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14097 do
14098         case "\$i" in
14099         -D*) echo "\$i" | $sed 's/^-D//';;
14100         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14101         esac
14102 done
14103 $rm -f try.c
14104 EOS
14105 postprocess_cc_v=''
14106 chmod +x ccsym
14107 $eunicefix ccsym
14108 ./ccsym > ccsym1.raw
14109 if $test -s ccsym1.raw; then
14110        $sort ccsym1.raw | $uniq >ccsym.raw
14111 else
14112        mv ccsym1.raw ccsym.raw
14113 fi
14114
14115 $awk '/\=/ { print $0; next }
14116         { print $0"=1" }' ccsym.raw >ccsym.list
14117 $awk '/\=/ { print $0; next }
14118         { print $0"=1" }' Cppsym.true >ccsym.true
14119 $comm -13 ccsym.true ccsym.list >ccsym.own
14120 $comm -12 ccsym.true ccsym.list >ccsym.com
14121 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14122 also=''
14123 if $test -z ccsym.raw; then
14124         echo "Your C compiler doesn't seem to define any symbols!" >&4
14125         echo " "
14126         echo "However, your C preprocessor defines the following symbols:"
14127         $cat Cppsym.true
14128         ccsymbols=''
14129         cppsymbols=`$cat Cppsym.true`
14130         cppsymbols=`echo $cppsymbols`
14131         cppccsymbols="$cppsymbols"
14132 else
14133         if $test -s ccsym.com; then
14134                 echo "Your C compiler and pre-processor define these symbols:"
14135                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
14136                 also='also '
14137                 symbols='ones'
14138                 cppccsymbols=`$cat ccsym.com`
14139                 cppccsymbols=`echo $cppccsymbols`
14140                 $test "$silent" || sleep 1
14141         fi
14142         if $test -s ccsym.cpp; then
14143                 $test "$also" && echo " "
14144                 echo "Your C pre-processor ${also}defines the following symbols:"
14145                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
14146                 also='further '
14147                 cppsymbols=`$cat ccsym.cpp`
14148                 cppsymbols=`echo $cppsymbols`
14149                 $test "$silent" || sleep 1
14150         fi
14151         if $test -s ccsym.own; then
14152                 $test "$also" && echo " "
14153                 echo "Your C compiler ${also}defines the following cpp symbols:"
14154                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
14155                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14156                 ccsymbols=`$cat ccsym.own`
14157                 ccsymbols=`echo $ccsymbols`
14158                 $test "$silent" || sleep 1
14159         fi
14160 fi
14161 $rm -f ccsym*
14162
14163 : see if this is a termio system
14164 val="$undef"
14165 val2="$undef"
14166 val3="$undef"
14167 if $test `./findhdr termios.h`; then
14168         set tcsetattr i_termios
14169         eval $inlibc
14170         val3="$i_termios"
14171 fi
14172 echo " "
14173 case "$val3" in
14174 "$define") echo "You have POSIX termios.h... good!" >&4;;
14175 *) if ./Cppsym pyr; then
14176                 case "`/bin/universe`" in
14177                 ucb) if $test `./findhdr sgtty.h`; then
14178                                 val2="$define"
14179                                 echo "<sgtty.h> found." >&4
14180                         else
14181                                 echo "System is pyramid with BSD universe."
14182                                 echo "<sgtty.h> not found--you could have problems." >&4
14183                         fi;;
14184                 *) if $test `./findhdr termio.h`; then
14185                                 val="$define"
14186                                 echo "<termio.h> found." >&4
14187                         else
14188                                 echo "System is pyramid with USG universe."
14189                                 echo "<termio.h> not found--you could have problems." >&4
14190                         fi;;
14191                 esac
14192         elif ./usg; then
14193                 if $test `./findhdr termio.h`; then
14194                         echo "<termio.h> found." >&4
14195                         val="$define"
14196                 elif $test `./findhdr sgtty.h`; then
14197                         echo "<sgtty.h> found." >&4
14198                         val2="$define"
14199                 else
14200 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14201                 fi
14202         else
14203                 if $test `./findhdr sgtty.h`; then
14204                         echo "<sgtty.h> found." >&4
14205                         val2="$define"
14206                 elif $test `./findhdr termio.h`; then
14207                         echo "<termio.h> found." >&4
14208                         val="$define"
14209                 else
14210 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14211                 fi
14212         fi;;
14213 esac
14214 set i_termio; eval $setvar
14215 val=$val2; set i_sgtty; eval $setvar
14216 val=$val3; set i_termios; eval $setvar
14217
14218 : see if this is a shadow.h system
14219 set shadow.h i_shadow
14220 eval $inhdr
14221
14222 : see if this is a socks.h system
14223 set socks.h i_socks
14224 eval $inhdr
14225
14226 : see if stdarg is available
14227 echo " "
14228 if $test `./findhdr stdarg.h`; then
14229         echo "<stdarg.h> found." >&4
14230         valstd="$define"
14231 else
14232         echo "<stdarg.h> NOT found." >&4
14233         valstd="$undef"
14234 fi
14235
14236 : see if varags is available
14237 echo " "
14238 if $test `./findhdr varargs.h`; then
14239         echo "<varargs.h> found." >&4
14240 else
14241         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14242 fi
14243
14244 : set up the varargs testing programs
14245 $cat > varargs.c <<EOP
14246 #ifdef I_STDARG
14247 #include <stdarg.h>
14248 #endif
14249 #ifdef I_VARARGS
14250 #include <varargs.h>
14251 #endif
14252
14253 #ifdef I_STDARG
14254 int f(char *p, ...)
14255 #else
14256 int f(va_alist)
14257 va_dcl
14258 #endif
14259 {
14260         va_list ap;
14261 #ifndef I_STDARG
14262         char *p;
14263 #endif
14264 #ifdef I_STDARG
14265         va_start(ap,p);
14266 #else
14267         va_start(ap);
14268         p = va_arg(ap, char *);
14269 #endif
14270         va_end(ap);
14271 }
14272 EOP
14273 $cat > varargs <<EOP
14274 $startsh
14275 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14276         echo "true"
14277 else
14278         echo "false"
14279 fi
14280 $rm -f varargs$_o
14281 EOP
14282 chmod +x varargs
14283
14284 : now check which varargs header should be included
14285 echo " "
14286 i_varhdr=''
14287 case "$valstd" in
14288 "$define")
14289         if `./varargs I_STDARG`; then
14290                 val='stdarg.h'
14291         elif `./varargs I_VARARGS`; then
14292                 val='varargs.h'
14293         fi
14294         ;;
14295 *)
14296         if `./varargs I_VARARGS`; then
14297                 val='varargs.h'
14298         fi
14299         ;;
14300 esac
14301 case "$val" in
14302 '')
14303 echo "I could not find the definition for va_dcl... You have problems..." >&4
14304         val="$undef"; set i_stdarg; eval $setvar
14305         val="$undef"; set i_varargs; eval $setvar
14306         ;;
14307 *) 
14308         set i_varhdr
14309         eval $setvar
14310         case "$i_varhdr" in
14311         stdarg.h)
14312                 val="$define"; set i_stdarg; eval $setvar
14313                 val="$undef"; set i_varargs; eval $setvar
14314                 ;;
14315         varargs.h)
14316                 val="$undef"; set i_stdarg; eval $setvar
14317                 val="$define"; set i_varargs; eval $setvar
14318                 ;;
14319         esac
14320         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14321 esac
14322 $rm -f varargs*
14323
14324 : see if stddef is available
14325 set stddef.h i_stddef
14326 eval $inhdr
14327
14328 : see if sys/access.h is available
14329 set sys/access.h i_sysaccess
14330 eval $inhdr
14331
14332 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14333 set sys/filio.h i_sysfilio
14334 eval $inhdr
14335 echo " "
14336 if $test `./findhdr sys/ioctl.h`; then
14337         val="$define"
14338         echo '<sys/ioctl.h> found.' >&4
14339 else
14340         val="$undef"
14341         if $test $i_sysfilio = "$define"; then
14342             echo '<sys/ioctl.h> NOT found.' >&4
14343         else
14344                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14345                 $test $i_termio = "$define" && xxx="termio.h"
14346                 $test $i_termios = "$define" && xxx="termios.h"
14347 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14348         fi
14349 fi
14350 set i_sysioctl
14351 eval $setvar
14352
14353
14354 : see if this is a syslog.h system
14355 set syslog.h i_syslog
14356 eval $inhdr
14357
14358
14359 : see if this is a sys/mode.h system
14360 set sys/mode.h i_sysmode
14361 eval $inhdr
14362
14363 : see if sys/resource.h has to be included
14364 set sys/resource.h i_sysresrc
14365 eval $inhdr
14366
14367 : see if sys/security.h is available
14368 set sys/security.h i_syssecrt
14369 eval $inhdr
14370
14371 : see if this is a sys/statvfs.h system
14372 set sys/statvfs.h i_sysstatvfs
14373 eval $inhdr
14374
14375 : see if this is a sys/uio.h system
14376 set sys/uio.h i_sysuio
14377 eval $inhdr
14378
14379 : see if this is a sys/un.h system
14380 set sys/un.h i_sysun
14381 eval $inhdr
14382
14383
14384 : see if this is a sys/utsname.h system
14385 set sys/utsname.h i_sysutsname
14386 eval $inhdr
14387
14388 : see if this is a syswait system
14389 set sys/wait.h i_syswait
14390 eval $inhdr
14391
14392 : see if this is a ustat.h system
14393 set ustat.h i_ustat
14394 eval $inhdr
14395
14396 : see if this is an utime system
14397 set utime.h i_utime
14398 eval $inhdr
14399
14400 : see if this is a values.h system
14401 set values.h i_values
14402 eval $inhdr
14403
14404 : see if this is a vfork system
14405 case "$d_vfork" in
14406 "$define")
14407         set vfork.h i_vfork
14408         eval $inhdr
14409         ;;
14410 *)
14411         i_vfork="$undef"
14412         ;;
14413 esac
14414
14415 : see if gdbm.h is available
14416 set gdbm.h t_gdbm
14417 eval $inhdr
14418 case "$t_gdbm" in
14419 $define)
14420         : see if gdbm_open exists
14421         set gdbm_open d_gdbm_open
14422         eval $inlibc
14423         case "$d_gdbm_open" in
14424         $undef)
14425                 t_gdbm="$undef"
14426                 echo "We won't be including <gdbm.h>"
14427                 ;;
14428         esac
14429         ;;
14430 esac
14431 val="$t_gdbm"
14432 set i_gdbm
14433 eval $setvar
14434
14435 echo " "
14436 echo "Looking for extensions..." >&4
14437 : If we are using the old config.sh, known_extensions may contain
14438 : old or inaccurate or duplicate values.
14439 known_extensions=''
14440 nonxs_extensions=''
14441 : We do not use find because it might not be available.
14442 : We do not just use MANIFEST because the user may have dropped
14443 : some additional extensions into the source tree and expect them
14444 : to be built.
14445
14446 : Function to recursively find available extensions, ignoring DynaLoader
14447 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14448 find_extensions='
14449     for xxx in *; do
14450        case "$xxx" in
14451            DynaLoader|dynaload) ;;
14452            *)
14453            if $test -f $xxx/$xxx.xs; then
14454                known_extensions="$known_extensions $1$xxx";
14455            elif $test -f $xxx/Makefile.PL; then
14456                nonxs_extensions="$nonxs_extensions $1$xxx";
14457            else
14458                if $test -d $xxx -a $# -lt 10; then
14459                    set $1$xxx/ $*;
14460                    cd $xxx;
14461                    eval $find_extensions;
14462                    cd ..;
14463                    shift;
14464                fi;
14465            fi
14466            ;;
14467        esac;
14468     done'
14469 tdir=`pwd`
14470 cd $rsrc/ext
14471 set X
14472 shift
14473 eval $find_extensions
14474 set X $nonxs_extensions
14475 shift
14476 nonxs_extensions="$*"
14477 set X $known_extensions
14478 shift
14479 known_extensions="$*"
14480 cd $tdir
14481
14482 : Now see which are supported on this system.
14483 avail_ext=''
14484 for xxx in $known_extensions ; do
14485         case "$xxx" in
14486         DB_File|db_file)
14487                 case "$i_db" in
14488                 $define) avail_ext="$avail_ext $xxx" ;;
14489                 esac
14490                 ;;
14491         GDBM_File|gdbm_fil)
14492                 case "$i_gdbm" in 
14493                 $define) avail_ext="$avail_ext $xxx" ;;
14494                 esac
14495                 ;;
14496         NDBM_File|ndbm_fil)
14497                 case "$i_ndbm" in
14498                 $define)
14499                     case "$osname-$use64bitint" in
14500                     hpux-define)
14501                         case "$libs" in
14502                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
14503                         esac
14504                         ;;
14505                     *) avail_ext="$avail_ext $xxx" ;;
14506                     esac
14507                     ;;
14508                 esac
14509                 ;;
14510         ODBM_File|odbm_fil) 
14511                 case "${i_dbm}${i_rpcsvcdbm}" in
14512                 *"${define}"*)
14513                     case "$osname-$use64bitint" in
14514                     hpux-define)
14515                         case "$libs" in
14516                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
14517                         esac
14518                         ;;
14519                     *) avail_ext="$avail_ext $xxx" ;;
14520                     esac
14521                     ;;
14522                 esac
14523                 ;;
14524         POSIX|posix)
14525                 case "$useposix" in
14526                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14527                 esac
14528                 ;;
14529         Opcode|opcode)
14530                 case "$useopcode" in
14531                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14532                 esac
14533                 ;;
14534         Socket|socket)
14535                 case "$d_socket" in 
14536                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14537                 esac
14538                 ;;
14539         Thread|thread)
14540                 case "$usethreads" in 
14541                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14542                 esac
14543                 ;;
14544         IPC/SysV|ipc/sysv)
14545                 : XXX Do we need a useipcsysv variable here
14546                 case "${d_msg}${d_sem}${d_shm}" in 
14547                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14548                 esac
14549                 ;;
14550         *)      avail_ext="$avail_ext $xxx"
14551                 ;;
14552         esac
14553 done
14554
14555 set X $avail_ext
14556 shift
14557 avail_ext="$*"
14558
14559 : Now see which nonxs extensions are supported on this system.
14560 : For now assume all are.
14561 nonxs_ext=''
14562 for xxx in $nonxs_extensions ; do
14563         case "$xxx" in
14564         *)      nonxs_ext="$nonxs_ext $xxx"
14565                 ;;
14566         esac
14567 done
14568
14569 set X $nonxs_ext
14570 shift
14571 nonxs_ext="$*"
14572
14573 case $usedl in
14574 $define)
14575         $cat <<EOM
14576 A number of extensions are supplied with $package.  You may choose to
14577 compile these extensions for dynamic loading (the default), compile
14578 them into the $package executable (static loading), or not include
14579 them at all.  Answer "none" to include no extensions.
14580 Note that DynaLoader is always built and need not be mentioned here.
14581
14582 EOM
14583         case "$dynamic_ext" in
14584         '') dflt="$avail_ext" ;;
14585         *)      dflt="$dynamic_ext"
14586                 # Perhaps we are reusing an old out-of-date config.sh.
14587                 case "$hint" in
14588                 previous)
14589                         if test X"$dynamic_ext" != X"$avail_ext"; then
14590                                 $cat <<EOM
14591 NOTICE:  Your previous config.sh list may be incorrect. 
14592 The extensions now available to you are 
14593         ${avail_ext}
14594 but the default list from your previous config.sh is
14595         ${dynamic_ext} 
14596
14597 EOM
14598                         fi
14599                         ;;
14600                 esac
14601                 ;;
14602         esac
14603         case "$dflt" in
14604         '')     dflt=none;;
14605         esac
14606         rp="What extensions do you wish to load dynamically?"
14607         . ./myread
14608         case "$ans" in
14609         none) dynamic_ext=' ' ;;
14610         *) dynamic_ext="$ans" ;;
14611         esac
14612
14613         case "$static_ext" in
14614         '')
14615                 : Exclude those already listed in dynamic linking
14616                 dflt=''
14617                 for xxx in $avail_ext; do
14618                         case " $dynamic_ext " in
14619                         *" $xxx "*) ;;
14620                         *) dflt="$dflt $xxx" ;;
14621                         esac
14622                 done
14623                 set X $dflt
14624                 shift
14625                 dflt="$*"
14626                 ;;
14627         *)  dflt="$static_ext" 
14628                 ;;
14629         esac
14630
14631         case "$dflt" in
14632         '')     dflt=none;;
14633         esac
14634         rp="What extensions do you wish to load statically?"
14635         . ./myread
14636         case "$ans" in
14637         none) static_ext=' ' ;;
14638         *) static_ext="$ans" ;;
14639         esac
14640         ;;
14641 *)
14642         $cat <<EOM
14643 A number of extensions are supplied with $package.  Answer "none" 
14644 to include no extensions. 
14645 Note that DynaLoader is always built and need not be mentioned here.
14646
14647 EOM
14648         case "$static_ext" in
14649         '') dflt="$avail_ext" ;;
14650         *)      dflt="$static_ext"
14651                 # Perhaps we are reusing an old out-of-date config.sh.
14652                 case "$hint" in
14653                 previous)
14654                         if test X"$static_ext" != X"$avail_ext"; then
14655                                 $cat <<EOM
14656 NOTICE:  Your previous config.sh list may be incorrect. 
14657 The extensions now available to you are 
14658         ${avail_ext}
14659 but the default list from your previous config.sh is
14660         ${static_ext} 
14661
14662 EOM
14663                         fi
14664                         ;;
14665                 esac
14666                 ;;
14667         esac
14668         : Exclude those that are not xs extensions
14669         case "$dflt" in
14670         '')     dflt=none;;
14671         esac
14672         rp="What extensions do you wish to include?"
14673         . ./myread
14674         case "$ans" in
14675         none) static_ext=' ' ;;
14676         *) static_ext="$ans" ;;
14677         esac
14678         ;;
14679 esac
14680
14681 set X $dynamic_ext $static_ext $nonxs_ext
14682 shift
14683 extensions="$*"
14684
14685 : Remove build directory name from cppstdin so it can be used from
14686 : either the present location or the final installed location.
14687 echo " "
14688 : Get out of the UU directory to get correct path name.
14689 cd ..
14690 case "$cppstdin" in
14691 `pwd`/cppstdin)
14692         echo "Stripping down cppstdin path name"
14693         cppstdin=cppstdin
14694         ;;
14695 esac
14696 cd UU
14697
14698 : end of configuration questions
14699 echo " "
14700 echo "End of configuration questions."
14701 echo " "
14702
14703 : back to where it started
14704 if test -d ../UU; then
14705         cd ..
14706 fi
14707
14708 : configuration may be patched via a 'config.over' file
14709 if $test -f config.over; then
14710         echo " "
14711         dflt=y
14712         rp='I see a config.over file.  Do you wish to load it?'
14713         . UU/myread
14714         case "$ans" in
14715         n*) echo "OK, I'll ignore it.";;
14716         *)      . ./config.over
14717                 echo "Configuration override changes have been loaded."
14718                 ;;
14719         esac
14720 fi
14721
14722 : in case they want portability, strip down executable paths
14723 case "$d_portable" in
14724 "$define")
14725         echo " "
14726         echo "Stripping down executable paths..." >&4
14727         for file in $loclist $trylist; do
14728                 eval temp=\$$file
14729                 eval $file=`basename $temp`
14730         done
14731         ;;
14732 esac
14733
14734 : create config.sh file
14735 echo " "
14736 echo "Creating config.sh..." >&4
14737 $spitshell <<EOT >config.sh
14738 $startsh
14739 #
14740 # This file was produced by running the Configure script. It holds all the
14741 # definitions figured out by Configure. Should you modify one of these values,
14742 # do not forget to propagate your changes by running "Configure -der". You may
14743 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14744 #
14745
14746 # Package name      : $package
14747 # Source directory  : $src
14748 # Configuration time: $cf_time
14749 # Configured by     : $cf_by
14750 # Target system     : $myuname
14751
14752 Author='$Author'
14753 Date='$Date'
14754 Header='$Header'
14755 Id='$Id'
14756 Locker='$Locker'
14757 Log='$Log'
14758 Mcc='$Mcc'
14759 RCSfile='$RCSfile'
14760 Revision='$Revision'
14761 Source='$Source'
14762 State='$State'
14763 _a='$_a'
14764 _exe='$_exe'
14765 _o='$_o'
14766 afs='$afs'
14767 alignbytes='$alignbytes'
14768 ansi2knr='$ansi2knr'
14769 aphostname='$aphostname'
14770 api_revision='$api_revision'
14771 api_subversion='$api_subversion'
14772 api_version='$api_version'
14773 api_versionstring='$api_versionstring'
14774 ar='$ar'
14775 archlib='$archlib'
14776 archlibexp='$archlibexp'
14777 archname64='$archname64'
14778 archname='$archname'
14779 archobjs='$archobjs'
14780 awk='$awk'
14781 baserev='$baserev'
14782 bash='$bash'
14783 bin='$bin'
14784 bincompat5005='$bincompat5005'
14785 binexp='$binexp'
14786 bison='$bison'
14787 byacc='$byacc'
14788 byteorder='$byteorder'
14789 c='$c'
14790 castflags='$castflags'
14791 cat='$cat'
14792 cc='$cc'
14793 cccdlflags='$cccdlflags'
14794 ccdlflags='$ccdlflags'
14795 ccflags='$ccflags'
14796 ccsymbols='$ccsymbols'
14797 cf_by='$cf_by'
14798 cf_email='$cf_email'
14799 cf_time='$cf_time'
14800 charsize='$charsize'
14801 chgrp='$chgrp'
14802 chmod='$chmod'
14803 chown='$chown'
14804 clocktype='$clocktype'
14805 comm='$comm'
14806 compress='$compress'
14807 contains='$contains'
14808 cp='$cp'
14809 cpio='$cpio'
14810 cpp='$cpp'
14811 cpp_stuff='$cpp_stuff'
14812 cppccsymbols='$cppccsymbols'
14813 cppflags='$cppflags'
14814 cpplast='$cpplast'
14815 cppminus='$cppminus'
14816 cpprun='$cpprun'
14817 cppstdin='$cppstdin'
14818 cppsymbols='$cppsymbols'
14819 crosscompile='$crosscompile'
14820 cryptlib='$cryptlib'
14821 csh='$csh'
14822 d_Gconvert='$d_Gconvert'
14823 d_PRIEldbl='$d_PRIEldbl'
14824 d_PRIFldbl='$d_PRIFldbl'
14825 d_PRIGldbl='$d_PRIGldbl'
14826 d_PRIX64='$d_PRIX64'
14827 d_PRId64='$d_PRId64'
14828 d_PRIeldbl='$d_PRIeldbl'
14829 d_PRIfldbl='$d_PRIfldbl'
14830 d_PRIgldbl='$d_PRIgldbl'
14831 d_PRIi64='$d_PRIi64'
14832 d_PRIo64='$d_PRIo64'
14833 d_PRIu64='$d_PRIu64'
14834 d_PRIx64='$d_PRIx64'
14835 d_access='$d_access'
14836 d_accessx='$d_accessx'
14837 d_alarm='$d_alarm'
14838 d_archlib='$d_archlib'
14839 d_atolf='$d_atolf'
14840 d_atoll='$d_atoll'
14841 d_attribut='$d_attribut'
14842 d_bcmp='$d_bcmp'
14843 d_bcopy='$d_bcopy'
14844 d_bincompat5005='$d_bincompat5005'
14845 d_bsd='$d_bsd'
14846 d_bsdgetpgrp='$d_bsdgetpgrp'
14847 d_bsdsetpgrp='$d_bsdsetpgrp'
14848 d_bzero='$d_bzero'
14849 d_casti32='$d_casti32'
14850 d_castneg='$d_castneg'
14851 d_charvspr='$d_charvspr'
14852 d_chown='$d_chown'
14853 d_chroot='$d_chroot'
14854 d_chsize='$d_chsize'
14855 d_closedir='$d_closedir'
14856 d_const='$d_const'
14857 d_crypt='$d_crypt'
14858 d_csh='$d_csh'
14859 d_cuserid='$d_cuserid'
14860 d_dbl_dig='$d_dbl_dig'
14861 d_difftime='$d_difftime'
14862 d_dirnamlen='$d_dirnamlen'
14863 d_dlerror='$d_dlerror'
14864 d_dlopen='$d_dlopen'
14865 d_dlsymun='$d_dlsymun'
14866 d_dosuid='$d_dosuid'
14867 d_drand48proto='$d_drand48proto'
14868 d_dup2='$d_dup2'
14869 d_eaccess='$d_eaccess'
14870 d_endgrent='$d_endgrent'
14871 d_endhent='$d_endhent'
14872 d_endnent='$d_endnent'
14873 d_endpent='$d_endpent'
14874 d_endpwent='$d_endpwent'
14875 d_endsent='$d_endsent'
14876 d_endspent='$d_endspent'
14877 d_eofnblk='$d_eofnblk'
14878 d_eunice='$d_eunice'
14879 d_fchmod='$d_fchmod'
14880 d_fchown='$d_fchown'
14881 d_fcntl='$d_fcntl'
14882 d_fd_macros='$d_fd_macros'
14883 d_fd_set='$d_fd_set'
14884 d_fds_bits='$d_fds_bits'
14885 d_fgetpos='$d_fgetpos'
14886 d_flexfnam='$d_flexfnam'
14887 d_flock='$d_flock'
14888 d_fork='$d_fork'
14889 d_fpathconf='$d_fpathconf'
14890 d_fpos64_t='$d_fpos64_t'
14891 d_fs_data_s='$d_fs_data_s'
14892 d_fseeko='$d_fseeko'
14893 d_fsetpos='$d_fsetpos'
14894 d_fstatfs='$d_fstatfs'
14895 d_fstatvfs='$d_fstatvfs'
14896 d_ftello='$d_ftello'
14897 d_ftime='$d_ftime'
14898 d_getcwd='$d_getcwd'
14899 d_getfsstat='$d_getfsstat'
14900 d_getgrent='$d_getgrent'
14901 d_getgrps='$d_getgrps'
14902 d_gethbyaddr='$d_gethbyaddr'
14903 d_gethbyname='$d_gethbyname'
14904 d_gethent='$d_gethent'
14905 d_gethname='$d_gethname'
14906 d_gethostprotos='$d_gethostprotos'
14907 d_getlogin='$d_getlogin'
14908 d_getmnt='$d_getmnt'
14909 d_getmntent='$d_getmntent'
14910 d_getnbyaddr='$d_getnbyaddr'
14911 d_getnbyname='$d_getnbyname'
14912 d_getnent='$d_getnent'
14913 d_getnetprotos='$d_getnetprotos'
14914 d_getpbyname='$d_getpbyname'
14915 d_getpbynumber='$d_getpbynumber'
14916 d_getpent='$d_getpent'
14917 d_getpgid='$d_getpgid'
14918 d_getpgrp2='$d_getpgrp2'
14919 d_getpgrp='$d_getpgrp'
14920 d_getppid='$d_getppid'
14921 d_getprior='$d_getprior'
14922 d_getprotoprotos='$d_getprotoprotos'
14923 d_getpwent='$d_getpwent'
14924 d_getsbyname='$d_getsbyname'
14925 d_getsbyport='$d_getsbyport'
14926 d_getsent='$d_getsent'
14927 d_getservprotos='$d_getservprotos'
14928 d_getspent='$d_getspent'
14929 d_getspnam='$d_getspnam'
14930 d_gettimeod='$d_gettimeod'
14931 d_gnulibc='$d_gnulibc'
14932 d_grpasswd='$d_grpasswd'
14933 d_hasmntopt='$d_hasmntopt'
14934 d_htonl='$d_htonl'
14935 d_iconv='$d_iconv'
14936 d_index='$d_index'
14937 d_inetaton='$d_inetaton'
14938 d_int64_t='$d_int64_t'
14939 d_isascii='$d_isascii'
14940 d_killpg='$d_killpg'
14941 d_lchown='$d_lchown'
14942 d_ldbl_dig='$d_ldbl_dig'
14943 d_link='$d_link'
14944 d_locconv='$d_locconv'
14945 d_lockf='$d_lockf'
14946 d_longdbl='$d_longdbl'
14947 d_longlong='$d_longlong'
14948 d_lseekproto='$d_lseekproto'
14949 d_lstat='$d_lstat'
14950 d_madvise='$d_madvise'
14951 d_mblen='$d_mblen'
14952 d_mbstowcs='$d_mbstowcs'
14953 d_mbtowc='$d_mbtowc'
14954 d_memchr='$d_memchr'
14955 d_memcmp='$d_memcmp'
14956 d_memcpy='$d_memcpy'
14957 d_memmove='$d_memmove'
14958 d_memset='$d_memset'
14959 d_mkdir='$d_mkdir'
14960 d_mkdtemp='$d_mkdtemp'
14961 d_mkfifo='$d_mkfifo'
14962 d_mkstemp='$d_mkstemp'
14963 d_mkstemps='$d_mkstemps'
14964 d_mktime='$d_mktime'
14965 d_mmap='$d_mmap'
14966 d_mprotect='$d_mprotect'
14967 d_msg='$d_msg'
14968 d_msg_ctrunc='$d_msg_ctrunc'
14969 d_msg_dontroute='$d_msg_dontroute'
14970 d_msg_oob='$d_msg_oob'
14971 d_msg_peek='$d_msg_peek'
14972 d_msg_proxy='$d_msg_proxy'
14973 d_msgctl='$d_msgctl'
14974 d_msgget='$d_msgget'
14975 d_msgrcv='$d_msgrcv'
14976 d_msgsnd='$d_msgsnd'
14977 d_msync='$d_msync'
14978 d_munmap='$d_munmap'
14979 d_mymalloc='$d_mymalloc'
14980 d_nice='$d_nice'
14981 d_nv_preserves_uv='$d_nv_preserves_uv'
14982 d_off64_t='$d_off64_t'
14983 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14984 d_oldpthreads='$d_oldpthreads'
14985 d_oldsock='$d_oldsock'
14986 d_open3='$d_open3'
14987 d_pathconf='$d_pathconf'
14988 d_pause='$d_pause'
14989 d_phostname='$d_phostname'
14990 d_pipe='$d_pipe'
14991 d_poll='$d_poll'
14992 d_portable='$d_portable'
14993 d_pthread_yield='$d_pthread_yield'
14994 d_pwage='$d_pwage'
14995 d_pwchange='$d_pwchange'
14996 d_pwclass='$d_pwclass'
14997 d_pwcomment='$d_pwcomment'
14998 d_pwexpire='$d_pwexpire'
14999 d_pwgecos='$d_pwgecos'
15000 d_pwpasswd='$d_pwpasswd'
15001 d_pwquota='$d_pwquota'
15002 d_quad='$d_quad'
15003 d_readdir='$d_readdir'
15004 d_readlink='$d_readlink'
15005 d_rename='$d_rename'
15006 d_rewinddir='$d_rewinddir'
15007 d_rmdir='$d_rmdir'
15008 d_safebcpy='$d_safebcpy'
15009 d_safemcpy='$d_safemcpy'
15010 d_sanemcmp='$d_sanemcmp'
15011 d_sched_yield='$d_sched_yield'
15012 d_scm_rights='$d_scm_rights'
15013 d_seekdir='$d_seekdir'
15014 d_select='$d_select'
15015 d_sem='$d_sem'
15016 d_semctl='$d_semctl'
15017 d_semctl_semid_ds='$d_semctl_semid_ds'
15018 d_semctl_semun='$d_semctl_semun'
15019 d_semget='$d_semget'
15020 d_semop='$d_semop'
15021 d_setegid='$d_setegid'
15022 d_seteuid='$d_seteuid'
15023 d_setgrent='$d_setgrent'
15024 d_setgrps='$d_setgrps'
15025 d_sethent='$d_sethent'
15026 d_setlinebuf='$d_setlinebuf'
15027 d_setlocale='$d_setlocale'
15028 d_setnent='$d_setnent'
15029 d_setpent='$d_setpent'
15030 d_setpgid='$d_setpgid'
15031 d_setpgrp2='$d_setpgrp2'
15032 d_setpgrp='$d_setpgrp'
15033 d_setprior='$d_setprior'
15034 d_setpwent='$d_setpwent'
15035 d_setregid='$d_setregid'
15036 d_setresgid='$d_setresgid'
15037 d_setresuid='$d_setresuid'
15038 d_setreuid='$d_setreuid'
15039 d_setrgid='$d_setrgid'
15040 d_setruid='$d_setruid'
15041 d_setsent='$d_setsent'
15042 d_setsid='$d_setsid'
15043 d_setspent='$d_setspent'
15044 d_setvbuf='$d_setvbuf'
15045 d_sfio='$d_sfio'
15046 d_shm='$d_shm'
15047 d_shmat='$d_shmat'
15048 d_shmatprototype='$d_shmatprototype'
15049 d_shmctl='$d_shmctl'
15050 d_shmdt='$d_shmdt'
15051 d_shmget='$d_shmget'
15052 d_sigaction='$d_sigaction'
15053 d_sigsetjmp='$d_sigsetjmp'
15054 d_socket='$d_socket'
15055 d_socklen_t='$d_socklen_t'
15056 d_sockpair='$d_sockpair'
15057 d_sqrtl='$d_sqrtl'
15058 d_statblks='$d_statblks'
15059 d_statfs_f_flags='$d_statfs_f_flags'
15060 d_statfs_s='$d_statfs_s'
15061 d_statvfs='$d_statvfs'
15062 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15063 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15064 d_stdio_stream_array='$d_stdio_stream_array'
15065 d_stdiobase='$d_stdiobase'
15066 d_stdstdio='$d_stdstdio'
15067 d_strchr='$d_strchr'
15068 d_strcoll='$d_strcoll'
15069 d_strctcpy='$d_strctcpy'
15070 d_strerrm='$d_strerrm'
15071 d_strerror='$d_strerror'
15072 d_strtod='$d_strtod'
15073 d_strtol='$d_strtol'
15074 d_strtold='$d_strtold'
15075 d_strtoll='$d_strtoll'
15076 d_strtoul='$d_strtoul'
15077 d_strtoull='$d_strtoull'
15078 d_strtouq='$d_strtouq'
15079 d_strxfrm='$d_strxfrm'
15080 d_suidsafe='$d_suidsafe'
15081 d_symlink='$d_symlink'
15082 d_syscall='$d_syscall'
15083 d_sysconf='$d_sysconf'
15084 d_sysernlst='$d_sysernlst'
15085 d_syserrlst='$d_syserrlst'
15086 d_system='$d_system'
15087 d_tcgetpgrp='$d_tcgetpgrp'
15088 d_tcsetpgrp='$d_tcsetpgrp'
15089 d_telldir='$d_telldir'
15090 d_telldirproto='$d_telldirproto'
15091 d_time='$d_time'
15092 d_times='$d_times'
15093 d_truncate='$d_truncate'
15094 d_tzname='$d_tzname'
15095 d_umask='$d_umask'
15096 d_uname='$d_uname'
15097 d_union_semun='$d_union_semun'
15098 d_ustat='$d_ustat'
15099 d_vendorbin='$d_vendorbin'
15100 d_vendorlib='$d_vendorlib'
15101 d_vfork='$d_vfork'
15102 d_void_closedir='$d_void_closedir'
15103 d_voidsig='$d_voidsig'
15104 d_voidtty='$d_voidtty'
15105 d_volatile='$d_volatile'
15106 d_vprintf='$d_vprintf'
15107 d_wait4='$d_wait4'
15108 d_waitpid='$d_waitpid'
15109 d_wcstombs='$d_wcstombs'
15110 d_wctomb='$d_wctomb'
15111 d_xenix='$d_xenix'
15112 date='$date'
15113 db_hashtype='$db_hashtype'
15114 db_prefixtype='$db_prefixtype'
15115 defvoidused='$defvoidused'
15116 direntrytype='$direntrytype'
15117 dlext='$dlext'
15118 dlsrc='$dlsrc'
15119 doublesize='$doublesize'
15120 drand01='$drand01'
15121 dynamic_ext='$dynamic_ext'
15122 eagain='$eagain'
15123 ebcdic='$ebcdic'
15124 echo='$echo'
15125 egrep='$egrep'
15126 emacs='$emacs'
15127 eunicefix='$eunicefix'
15128 exe_ext='$exe_ext'
15129 expr='$expr'
15130 extensions='$extensions'
15131 fflushNULL='$fflushNULL'
15132 fflushall='$fflushall'
15133 find='$find'
15134 firstmakefile='$firstmakefile'
15135 flex='$flex'
15136 fpossize='$fpossize'
15137 fpostype='$fpostype'
15138 freetype='$freetype'
15139 full_ar='$full_ar'
15140 full_csh='$full_csh'
15141 full_sed='$full_sed'
15142 gccversion='$gccversion'
15143 gidformat='$gidformat'
15144 gidsign='$gidsign'
15145 gidsize='$gidsize'
15146 gidtype='$gidtype'
15147 glibpth='$glibpth'
15148 grep='$grep'
15149 groupcat='$groupcat'
15150 groupstype='$groupstype'
15151 gzip='$gzip'
15152 h_fcntl='$h_fcntl'
15153 h_sysfile='$h_sysfile'
15154 hint='$hint'
15155 hostcat='$hostcat'
15156 huge='$huge'
15157 i16size='$i16size'
15158 i16type='$i16type'
15159 i32size='$i32size'
15160 i32type='$i32type'
15161 i64size='$i64size'
15162 i64type='$i64type'
15163 i8size='$i8size'
15164 i8type='$i8type'
15165 i_arpainet='$i_arpainet'
15166 i_bsdioctl='$i_bsdioctl'
15167 i_db='$i_db'
15168 i_dbm='$i_dbm'
15169 i_dirent='$i_dirent'
15170 i_dld='$i_dld'
15171 i_dlfcn='$i_dlfcn'
15172 i_fcntl='$i_fcntl'
15173 i_float='$i_float'
15174 i_gdbm='$i_gdbm'
15175 i_grp='$i_grp'
15176 i_iconv='$i_iconv'
15177 i_inttypes='$i_inttypes'
15178 i_limits='$i_limits'
15179 i_locale='$i_locale'
15180 i_machcthr='$i_machcthr'
15181 i_malloc='$i_malloc'
15182 i_math='$i_math'
15183 i_memory='$i_memory'
15184 i_mntent='$i_mntent'
15185 i_ndbm='$i_ndbm'
15186 i_netdb='$i_netdb'
15187 i_neterrno='$i_neterrno'
15188 i_netinettcp='$i_netinettcp'
15189 i_niin='$i_niin'
15190 i_poll='$i_poll'
15191 i_pthread='$i_pthread'
15192 i_pwd='$i_pwd'
15193 i_rpcsvcdbm='$i_rpcsvcdbm'
15194 i_sfio='$i_sfio'
15195 i_sgtty='$i_sgtty'
15196 i_shadow='$i_shadow'
15197 i_socks='$i_socks'
15198 i_stdarg='$i_stdarg'
15199 i_stddef='$i_stddef'
15200 i_stdlib='$i_stdlib'
15201 i_string='$i_string'
15202 i_sysaccess='$i_sysaccess'
15203 i_sysdir='$i_sysdir'
15204 i_sysfile='$i_sysfile'
15205 i_sysfilio='$i_sysfilio'
15206 i_sysin='$i_sysin'
15207 i_sysioctl='$i_sysioctl'
15208 i_syslog='$i_syslog'
15209 i_sysmman='$i_sysmman'
15210 i_sysmode='$i_sysmode'
15211 i_sysmount='$i_sysmount'
15212 i_sysndir='$i_sysndir'
15213 i_sysparam='$i_sysparam'
15214 i_sysresrc='$i_sysresrc'
15215 i_syssecrt='$i_syssecrt'
15216 i_sysselct='$i_sysselct'
15217 i_syssockio='$i_syssockio'
15218 i_sysstat='$i_sysstat'
15219 i_sysstatfs='$i_sysstatfs'
15220 i_sysstatvfs='$i_sysstatvfs'
15221 i_systime='$i_systime'
15222 i_systimek='$i_systimek'
15223 i_systimes='$i_systimes'
15224 i_systypes='$i_systypes'
15225 i_sysuio='$i_sysuio'
15226 i_sysun='$i_sysun'
15227 i_sysutsname='$i_sysutsname'
15228 i_sysvfs='$i_sysvfs'
15229 i_syswait='$i_syswait'
15230 i_termio='$i_termio'
15231 i_termios='$i_termios'
15232 i_time='$i_time'
15233 i_unistd='$i_unistd'
15234 i_ustat='$i_ustat'
15235 i_utime='$i_utime'
15236 i_values='$i_values'
15237 i_varargs='$i_varargs'
15238 i_varhdr='$i_varhdr'
15239 i_vfork='$i_vfork'
15240 ignore_versioned_solibs='$ignore_versioned_solibs'
15241 inc_version_list='$inc_version_list'
15242 inc_version_list_init='$inc_version_list_init'
15243 incpath='$incpath'
15244 inews='$inews'
15245 installarchlib='$installarchlib'
15246 installbin='$installbin'
15247 installman1dir='$installman1dir'
15248 installman3dir='$installman3dir'
15249 installprefix='$installprefix'
15250 installprefixexp='$installprefixexp'
15251 installprivlib='$installprivlib'
15252 installscript='$installscript'
15253 installsitearch='$installsitearch'
15254 installsitebin='$installsitebin'
15255 installsitelib='$installsitelib'
15256 installstyle='$installstyle'
15257 installusrbinperl='$installusrbinperl'
15258 installvendorbin='$installvendorbin'
15259 installvendorlib='$installvendorlib'
15260 intsize='$intsize'
15261 ivdformat='$ivdformat'
15262 ivsize='$ivsize'
15263 ivtype='$ivtype'
15264 known_extensions='$known_extensions'
15265 ksh='$ksh'
15266 large='$large'
15267 ld='$ld'
15268 lddlflags='$lddlflags'
15269 ldflags='$ldflags'
15270 ldlibpthname='$ldlibpthname'
15271 less='$less'
15272 lib_ext='$lib_ext'
15273 libc='$libc'
15274 libperl='$libperl'
15275 libpth='$libpth'
15276 libs='$libs'
15277 libsdirs='$libsdirs'
15278 libsfiles='$libsfiles'
15279 libsfound='$libsfound'
15280 libspath='$libspath'
15281 libswanted='$libswanted'
15282 line='$line'
15283 lint='$lint'
15284 lkflags='$lkflags'
15285 ln='$ln'
15286 lns='$lns'
15287 locincpth='$locincpth'
15288 loclibpth='$loclibpth'
15289 longdblsize='$longdblsize'
15290 longlongsize='$longlongsize'
15291 longsize='$longsize'
15292 lp='$lp'
15293 lpr='$lpr'
15294 ls='$ls'
15295 lseeksize='$lseeksize'
15296 lseektype='$lseektype'
15297 mail='$mail'
15298 mailx='$mailx'
15299 make='$make'
15300 make_set_make='$make_set_make'
15301 mallocobj='$mallocobj'
15302 mallocsrc='$mallocsrc'
15303 malloctype='$malloctype'
15304 man1dir='$man1dir'
15305 man1direxp='$man1direxp'
15306 man1ext='$man1ext'
15307 man3dir='$man3dir'
15308 man3direxp='$man3direxp'
15309 man3ext='$man3ext'
15310 medium='$medium'
15311 mips_type='$mips_type'
15312 mkdir='$mkdir'
15313 mmaptype='$mmaptype'
15314 models='$models'
15315 modetype='$modetype'
15316 more='$more'
15317 multiarch='$multiarch'
15318 mv='$mv'
15319 myarchname='$myarchname'
15320 mydomain='$mydomain'
15321 myhostname='$myhostname'
15322 myuname='$myuname'
15323 n='$n'
15324 netdb_hlen_type='$netdb_hlen_type'
15325 netdb_host_type='$netdb_host_type'
15326 netdb_name_type='$netdb_name_type'
15327 netdb_net_type='$netdb_net_type'
15328 nm='$nm'
15329 nm_opt='$nm_opt'
15330 nm_so_opt='$nm_so_opt'
15331 nonxs_ext='$nonxs_ext'
15332 nroff='$nroff'
15333 nvsize='$nvsize'
15334 nvtype='$nvtype'
15335 o_nonblock='$o_nonblock'
15336 obj_ext='$obj_ext'
15337 old_pthread_create_joinable='$old_pthread_create_joinable'
15338 optimize='$optimize'
15339 orderlib='$orderlib'
15340 osname='$osname'
15341 osvers='$osvers'
15342 package='$package'
15343 pager='$pager'
15344 passcat='$passcat'
15345 patchlevel='$patchlevel'
15346 path_sep='$path_sep'
15347 perl5='$perl5'
15348 perl='$perl'
15349 perladmin='$perladmin'
15350 perlpath='$perlpath'
15351 pg='$pg'
15352 phostname='$phostname'
15353 pidtype='$pidtype'
15354 plibpth='$plibpth'
15355 pm_apiversion='$pm_apiversion'
15356 pmake='$pmake'
15357 pr='$pr'
15358 prefix='$prefix'
15359 prefixexp='$prefixexp'
15360 privlib='$privlib'
15361 privlibexp='$privlibexp'
15362 prototype='$prototype'
15363 ptrsize='$ptrsize'
15364 quadkind='$quadkind'
15365 quadtype='$quadtype'
15366 randbits='$randbits'
15367 randfunc='$randfunc'
15368 randseedtype='$randseedtype'
15369 ranlib='$ranlib'
15370 rd_nodata='$rd_nodata'
15371 revision='$revision'
15372 rm='$rm'
15373 rmail='$rmail'
15374 runnm='$runnm'
15375 sPRIEldbl='$sPRIEldbl'
15376 sPRIFldbl='$sPRIFldbl'
15377 sPRIGldbl='$sPRIGldbl'
15378 sPRIX64='$sPRIX64'
15379 sPRId64='$sPRId64'
15380 sPRIeldbl='$sPRIeldbl'
15381 sPRIfldbl='$sPRIfldbl'
15382 sPRIgldbl='$sPRIgldbl'
15383 sPRIi64='$sPRIi64'
15384 sPRIo64='$sPRIo64'
15385 sPRIu64='$sPRIu64'
15386 sPRIx64='$sPRIx64'
15387 sched_yield='$sched_yield'
15388 scriptdir='$scriptdir'
15389 scriptdirexp='$scriptdirexp'
15390 sed='$sed'
15391 seedfunc='$seedfunc'
15392 selectminbits='$selectminbits'
15393 selecttype='$selecttype'
15394 sendmail='$sendmail'
15395 sh='$sh'
15396 shar='$shar'
15397 sharpbang='$sharpbang'
15398 shmattype='$shmattype'
15399 shortsize='$shortsize'
15400 shrpenv='$shrpenv'
15401 shsharp='$shsharp'
15402 sig_count='$sig_count'
15403 sig_name='$sig_name'
15404 sig_name_init='$sig_name_init'
15405 sig_num='$sig_num'
15406 sig_num_init='$sig_num_init'
15407 signal_t='$signal_t'
15408 sitearch='$sitearch'
15409 sitearchexp='$sitearchexp'
15410 sitebin='$sitebin'
15411 sitebinexp='$sitebinexp'
15412 sitelib='$sitelib'
15413 sitelibexp='$sitelibexp'
15414 siteprefix='$siteprefix'
15415 siteprefixexp='$siteprefixexp'
15416 sizetype='$sizetype'
15417 sleep='$sleep'
15418 smail='$smail'
15419 small='$small'
15420 so='$so'
15421 sockethdr='$sockethdr'
15422 socketlib='$socketlib'
15423 socksizetype='$socksizetype'
15424 sort='$sort'
15425 spackage='$spackage'
15426 spitshell='$spitshell'
15427 split='$split'
15428 src='$src'
15429 ssizetype='$ssizetype'
15430 startperl='$startperl'
15431 startsh='$startsh'
15432 static_ext='$static_ext'
15433 stdchar='$stdchar'
15434 stdio_base='$stdio_base'
15435 stdio_bufsiz='$stdio_bufsiz'
15436 stdio_cnt='$stdio_cnt'
15437 stdio_filbuf='$stdio_filbuf'
15438 stdio_ptr='$stdio_ptr'
15439 stdio_stream_array='$stdio_stream_array'
15440 strings='$strings'
15441 submit='$submit'
15442 subversion='$subversion'
15443 sysman='$sysman'
15444 tail='$tail'
15445 tar='$tar'
15446 tbl='$tbl'
15447 tee='$tee'
15448 test='$test'
15449 timeincl='$timeincl'
15450 timetype='$timetype'
15451 touch='$touch'
15452 tr='$tr'
15453 trnl='$trnl'
15454 troff='$troff'
15455 u16size='$u16size'
15456 u16type='$u16type'
15457 u32size='$u32size'
15458 u32type='$u32type'
15459 u64size='$u64size'
15460 u64type='$u64type'
15461 u8size='$u8size'
15462 u8type='$u8type'
15463 uidformat='$uidformat'
15464 uidsign='$uidsign'
15465 uidsize='$uidsize'
15466 uidtype='$uidtype'
15467 uname='$uname'
15468 uniq='$uniq'
15469 uquadtype='$uquadtype'
15470 use5005threads='$use5005threads'
15471 use64bitall='$use64bitall'
15472 use64bitint='$use64bitint'
15473 usedl='$usedl'
15474 useithreads='$useithreads'
15475 uselargefiles='$uselargefiles'
15476 uselongdouble='$uselongdouble'
15477 usemorebits='$usemorebits'
15478 usemultiplicity='$usemultiplicity'
15479 usemymalloc='$usemymalloc'
15480 usenm='$usenm'
15481 useopcode='$useopcode'
15482 useperlio='$useperlio'
15483 useposix='$useposix'
15484 usesfio='$usesfio'
15485 useshrplib='$useshrplib'
15486 usesocks='$usesocks'
15487 usethreads='$usethreads'
15488 usevendorprefix='$usevendorprefix'
15489 usevfork='$usevfork'
15490 usrinc='$usrinc'
15491 uuname='$uuname'
15492 uvoformat='$uvoformat'
15493 uvsize='$uvsize'
15494 uvtype='$uvtype'
15495 uvuformat='$uvuformat'
15496 uvxformat='$uvxformat'
15497 vendorbin='$vendorbin'
15498 vendorbinexp='$vendorbinexp'
15499 vendorlib='$vendorlib'
15500 vendorlibexp='$vendorlibexp'
15501 vendorprefix='$vendorprefix'
15502 vendorprefixexp='$vendorprefixexp'
15503 version='$version'
15504 vi='$vi'
15505 voidflags='$voidflags'
15506 xlibpth='$xlibpth'
15507 xs_apiversion='$xs_apiversion'
15508 zcat='$zcat'
15509 zip='$zip'
15510 EOT
15511
15512 : Add in command line options if available
15513 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15514
15515 : add special variables
15516 $test -f $src/patchlevel.h && \
15517 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15518 echo "CONFIGDOTSH=true" >>config.sh
15519
15520 : propagate old symbols
15521 if $test -f UU/config.sh; then
15522         <UU/config.sh sort | uniq >UU/oldconfig.sh
15523         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15524         sort | uniq -u >UU/oldsyms
15525         set X `cat UU/oldsyms`
15526         shift
15527         case $# in
15528         0) ;;
15529         *)
15530                 cat <<EOM
15531 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15532 EOM
15533                 echo "# Variables propagated from previous config.sh file." >>config.sh
15534                 for sym in `cat UU/oldsyms`; do
15535                         echo "    Propagating $hint variable "'$'"$sym..."
15536                         eval 'tmp="$'"${sym}"'"'
15537                         echo "$tmp" | \
15538                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15539                 done
15540                 ;;
15541         esac
15542 fi
15543
15544 : Finish up by extracting the .SH files
15545 case "$alldone" in
15546 exit)
15547         $rm -rf UU
15548         echo "Done."
15549         exit 0
15550         ;;
15551 cont)
15552         ;;
15553 '')
15554         dflt=''
15555         nostick=true
15556         $cat <<EOM
15557
15558 If you'd like to make any changes to the config.sh file before I begin
15559 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15560
15561 EOM
15562         rp="Press return or use a shell escape to edit config.sh:"
15563         . UU/myread
15564         nostick=''
15565         case "$ans" in
15566         '') ;;
15567         *) : in case they cannot read
15568                 sh 1>&4 -c "$ans";;
15569         esac
15570         ;;
15571 esac
15572
15573 : if this fails, just run all the .SH files by hand
15574 . ./config.sh
15575
15576 echo " "
15577 exec 1>&4
15578 . ./UU/extract
15579
15580 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15581         dflt=y
15582         case "$silent" in
15583         true) ;;
15584         *)
15585                 $cat <<EOM
15586
15587 Now you need to generate make dependencies by running "$make depend".
15588 You might prefer to run it in background: "$make depend > makedepend.out &"
15589 It can take a while, so you might not want to run it right now.
15590
15591 EOM
15592                 ;;
15593         esac
15594         rp="Run $make depend now?"
15595         . UU/myread
15596         case "$ans" in
15597         y*)
15598                 $make depend && echo "Now you must run a $make."
15599                 ;;
15600         *)
15601                 echo "You must run '$make depend' then '$make'."
15602                 ;;
15603         esac
15604 elif test -f [Mm]akefile; then
15605         echo " "
15606         echo "Now you must run a $make."
15607 else
15608         echo "Done."
15609 fi
15610
15611 if $test -f Policy.sh; then
15612     $cat <<EOM
15613
15614 If you compile $package on a different machine or from a different object
15615 directory, copy the Policy.sh file from this object directory to the
15616 new one before you run Configure -- this will help you with most of
15617 the policy defaults.
15618
15619 EOM
15620 fi
15621 if $test -f config.msg; then
15622     echo "Hmm.  I also noted the following information while running:"
15623     echo " "
15624     $cat config.msg >&4
15625     $rm -f config.msg
15626 fi
15627 $rm -f kit*isdone ark*isdone
15628 $rm -rf UU
15629
15630 : End of Configure
15631