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