This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
The _POSIX_OPEN_MAX values are allowed *minimums*,
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Mar  1 20:03:36 EET 2002 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >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 >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 c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ 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                 case "X${MACHTYPE:-nonesuchmach}" in
69                 *cygwin) ;;
70                 *) p_=\; ;;
71                 esac
72         fi
73 fi
74
75 : Proper PATH setting
76 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
77 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
78 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
79 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
80 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
81 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
82 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
83 paths="$paths /sbin /usr/sbin /usr/libexec"
84 paths="$paths /system/gnu_library/bin"
85
86 for p in $paths
87 do
88         case "$p_$PATH$p_" in
89         *$p_$p$p_*) ;;
90         *) test -d $p && PATH=$PATH$p_$p ;;
91         esac
92 done
93
94 PATH=.$p_$PATH
95 export PATH
96
97 : shall we be using ksh?
98 inksh=''
99 needksh=''
100 avoidksh=''
101 newsh=/bin/ksh
102 changesh=''
103 if (PATH=.; alias -x) >/dev/null 2>&1; then
104                 inksh=true
105 fi
106 if test -f /hp-ux -a -f /bin/ksh; then
107         needksh='to avoid sh bug in "here document" expansion'
108 fi
109 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
110         if test X`/usr/bin/uname -v` = X4; then
111                 avoidksh="to avoid AIX 4's /bin/sh"
112                 newsh=/usr/bin/bsh
113         fi
114 fi
115 if test -f /osf_boot -a -f /usr/sbin/setld; then
116         if test X`/usr/bin/uname -s` = XOSF1; then
117                 avoidksh="to avoid Digital UNIX' ksh"
118                 newsh=/bin/sh
119                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
120         fi
121 fi
122 case "$inksh/$needksh" in
123 /[a-z]*)
124                 ENV=''
125                 changesh=true
126                 reason="$needksh"
127         ;;
128 esac
129 case "$inksh/$avoidksh" in
130 true/[a-z]*)
131         changesh=true
132         reason="$avoidksh"
133         ;;
134 esac
135 case "$inksh/$needksh-$avoidksh-" in
136 true/--)
137                 cat <<EOM
138 (I see you are using the Korn shell.  Some ksh's blow up on $me,
139 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
140 EOM
141         ;;
142 esac
143 case "$changesh" in
144 true)
145         export newsh
146         echo "(Feeding myself to $newsh $reason.)"
147         case "$0" in
148         Configure|*/Configure) exec $newsh $0 "$@";;
149         *) exec $newsh Configure "$@";;
150         esac
151         ;;
152 esac
153
154 : if needed set CDPATH to a harmless value that is not chatty
155 : avoid bash 2.02 problems with empty CDPATH.
156 case "$CDPATH" in
157 '')     ;;
158 *)      case "$SHELL" in
159         *bash*) CDPATH='.' ;;
160         *)              CDPATH='' ;;
161         esac
162         ;;
163 esac
164 : Configure runs within the UU subdirectory
165 test -d UU || mkdir UU
166 cd UU && rm -f ./*
167
168
169 ccname=''
170 ccversion=''
171 ccsymbols=''
172 cppccsymbols=''
173 cppsymbols=''
174 from=''
175 run=''
176 targetarch=''
177 to=''
178 usecrosscompile=''
179 perllibs=''
180 dynamic_ext=''
181 extensions=''
182 known_extensions=''
183 nonxs_ext=''
184 static_ext=''
185 useopcode=''
186 useposix=''
187 extras=''
188 d_bsd=''
189 d_eunice=''
190 d_xenix=''
191 eunicefix=''
192 Mcc=''
193 ar=''
194 awk=''
195 bash=''
196 bison=''
197 byacc=''
198 cat=''
199 chgrp=''
200 chmod=''
201 chown=''
202 comm=''
203 compress=''
204 cp=''
205 cpio=''
206 cpp=''
207 csh=''
208 date=''
209 echo=''
210 egrep=''
211 emacs=''
212 expr=''
213 find=''
214 flex=''
215 gmake=''
216 grep=''
217 gzip=''
218 inews=''
219 ksh=''
220 less=''
221 line=''
222 lint=''
223 ln=''
224 lp=''
225 lpr=''
226 ls=''
227 mail=''
228 mailx=''
229 make=''
230 mkdir=''
231 more=''
232 mv=''
233 nm=''
234 nroff=''
235 perl=''
236 pg=''
237 pmake=''
238 pr=''
239 rm=''
240 rmail=''
241 sed=''
242 sendmail=''
243 shar=''
244 sleep=''
245 smail=''
246 sort=''
247 submit=''
248 tail=''
249 tar=''
250 tbl=''
251 tee=''
252 test=''
253 touch=''
254 tr=''
255 troff=''
256 uname=''
257 uniq=''
258 uuname=''
259 vi=''
260 zcat=''
261 zip=''
262 full_ar=''
263 full_sed=''
264 libswanted=''
265 hint=''
266 myuname=''
267 osname=''
268 osvers=''
269 Author=''
270 Date=''
271 Header=''
272 Id=''
273 Locker=''
274 Log=''
275 RCSfile=''
276 Revision=''
277 Source=''
278 State=''
279 _a=''
280 _exe=''
281 _o=''
282 archobjs=''
283 exe_ext=''
284 firstmakefile=''
285 lib_ext=''
286 obj_ext=''
287 path_sep=''
288 afs=''
289 afsroot=''
290 alignbytes=''
291 ansi2knr=''
292 archlib=''
293 archlibexp=''
294 d_archlib=''
295 installarchlib=''
296 archname=''
297 myarchname=''
298 d_atolf=''
299 d_atoll=''
300 baserev=''
301 bin=''
302 binexp=''
303 installbin=''
304 bincompat5005=''
305 d_bincompat5005=''
306 byteorder=''
307 cc=''
308 ccflags=''
309 cppflags=''
310 ldflags=''
311 lkflags=''
312 locincpth=''
313 optimize=''
314 cf_email=''
315 cf_by=''
316 cf_time=''
317 charsize=''
318 contains=''
319 cpp_stuff=''
320 cpplast=''
321 cppminus=''
322 cpprun=''
323 cppstdin=''
324 d__fwalk=''
325 d_access=''
326 d_accessx=''
327 d_alarm=''
328 d_attribut=''
329 d_bcmp=''
330 d_bcopy=''
331 d_bzero=''
332 d_casti32=''
333 castflags=''
334 d_castneg=''
335 d_chown=''
336 d_chroot=''
337 d_chsize=''
338 d_class=''
339 d_closedir=''
340 d_void_closedir=''
341 d_cmsghdr_s=''
342 d_const=''
343 cryptlib=''
344 d_crypt=''
345 d_csh=''
346 full_csh=''
347 d_cuserid=''
348 d_dbl_dig=''
349 d_dbminitproto=''
350 d_difftime=''
351 d_dirfd=''
352 d_dlerror=''
353 d_dlopen=''
354 d_dlsymun=''
355 d_dosuid=''
356 d_suidsafe=''
357 d_drand48proto=''
358 d_dup2=''
359 d_eaccess=''
360 d_endgrent=''
361 d_endhent=''
362 d_endnent=''
363 d_endpent=''
364 d_endpwent=''
365 d_endsent=''
366 d_fchdir=''
367 d_fchmod=''
368 d_fchown=''
369 d_fcntl=''
370 d_fcntl_can_lock=''
371 d_fd_macros=''
372 d_fd_set=''
373 d_fds_bits=''
374 d_fgetpos=''
375 d_finite=''
376 d_finitel=''
377 d_flexfnam=''
378 d_flock=''
379 d_flockproto=''
380 d_fork=''
381 d_fp_class=''
382 d_fpclass=''
383 d_fpclassify=''
384 d_fpclassl=''
385 d_fpos64_t=''
386 d_frexpl=''
387 d_fs_data_s=''
388 d_fseeko=''
389 d_fsetpos=''
390 d_fstatfs=''
391 d_fsync=''
392 d_ftello=''
393 d_ftime=''
394 d_gettimeod=''
395 d_Gconvert=''
396 d_getcwd=''
397 d_getespwnam=''
398 d_getfsstat=''
399 d_getgrent=''
400 d_getgrps=''
401 d_gethbyaddr=''
402 d_gethbyname=''
403 d_gethent=''
404 aphostname=''
405 d_gethname=''
406 d_phostname=''
407 d_uname=''
408 d_gethostprotos=''
409 d_getitimer=''
410 d_getlogin=''
411 d_getmnt=''
412 d_getmntent=''
413 d_getnbyaddr=''
414 d_getnbyname=''
415 d_getnent=''
416 d_getnetprotos=''
417 d_getpagsz=''
418 d_getpent=''
419 d_getpgid=''
420 d_getpgrp2=''
421 d_bsdgetpgrp=''
422 d_getpgrp=''
423 d_getppid=''
424 d_getprior=''
425 d_getpbyname=''
426 d_getpbynumber=''
427 d_getprotoprotos=''
428 d_getprpwnam=''
429 d_getpwent=''
430 d_getsent=''
431 d_getservprotos=''
432 d_getspnam=''
433 d_getsbyname=''
434 d_getsbyport=''
435 d_gnulibc=''
436 d_hasmntopt=''
437 d_htonl=''
438 d_inetaton=''
439 d_int64_t=''
440 d_isascii=''
441 d_isfinite=''
442 d_isinf=''
443 d_isnan=''
444 d_isnanl=''
445 d_killpg=''
446 d_lchown=''
447 d_ldbl_dig=''
448 d_link=''
449 d_locconv=''
450 d_lockf=''
451 d_longdbl=''
452 longdblsize=''
453 d_longlong=''
454 longlongsize=''
455 d_lseekproto=''
456 d_lstat=''
457 d_madvise=''
458 d_mblen=''
459 d_mbstowcs=''
460 d_mbtowc=''
461 d_memchr=''
462 d_memcmp=''
463 d_memcpy=''
464 d_memmove=''
465 d_memset=''
466 d_mkdir=''
467 d_mkdtemp=''
468 d_mkfifo=''
469 d_mkstemp=''
470 d_mkstemps=''
471 d_mktime=''
472 d_mmap=''
473 mmaptype=''
474 d_modfl=''
475 d_modfl_pow32_bug=''
476 d_mprotect=''
477 d_msg=''
478 d_msgctl=''
479 d_msgget=''
480 d_msghdr_s=''
481 d_msgrcv=''
482 d_msgsnd=''
483 d_msync=''
484 d_munmap=''
485 d_nice=''
486 d_nl_langinfo=''
487 d_off64_t=''
488 d_open3=''
489 d_fpathconf=''
490 d_pathconf=''
491 d_pause=''
492 d_pipe=''
493 d_poll=''
494 d_portable=''
495 d_procselfexe=''
496 procselfexe=''
497 d_old_pthread_create_joinable=''
498 old_pthread_create_joinable=''
499 d_pthread_atfork=''
500 d_pthread_yield=''
501 d_sched_yield=''
502 sched_yield=''
503 d_qgcvt=''
504 d_readdir=''
505 d_rewinddir=''
506 d_seekdir=''
507 d_telldir=''
508 d_readlink=''
509 d_readv=''
510 d_recvmsg=''
511 d_rename=''
512 d_rmdir=''
513 d_safebcpy=''
514 d_safemcpy=''
515 d_sanemcmp=''
516 d_sbrkproto=''
517 d_select=''
518 d_sem=''
519 d_semctl=''
520 d_semget=''
521 d_semop=''
522 d_sendmsg=''
523 d_setegid=''
524 d_seteuid=''
525 d_setgrent=''
526 d_setgrps=''
527 d_sethent=''
528 d_setitimer=''
529 d_setlinebuf=''
530 d_setlocale=''
531 d_setnent=''
532 d_setpent=''
533 d_setpgid=''
534 d_setpgrp2=''
535 d_bsdsetpgrp=''
536 d_setpgrp=''
537 d_setprior=''
538 d_setproctitle=''
539 d_setpwent=''
540 d_setregid=''
541 d_setresgid=''
542 d_setresuid=''
543 d_setreuid=''
544 d_setrgid=''
545 d_setruid=''
546 d_setsent=''
547 d_setsid=''
548 d_setvbuf=''
549 d_sfio=''
550 usesfio=''
551 d_shm=''
552 d_shmat=''
553 d_shmatprototype=''
554 shmattype=''
555 d_shmctl=''
556 d_shmdt=''
557 d_shmget=''
558 d_sigaction=''
559 d_sigprocmask=''
560 d_sigsetjmp=''
561 d_sockatmark=''
562 d_sockatmarkproto=''
563 d_msg_ctrunc=''
564 d_msg_dontroute=''
565 d_msg_oob=''
566 d_msg_peek=''
567 d_msg_proxy=''
568 d_oldsock=''
569 d_scm_rights=''
570 d_socket=''
571 d_sockpair=''
572 sockethdr=''
573 socketlib=''
574 d_socklen_t=''
575 d_socks5_init=''
576 d_sqrtl=''
577 d_sresgproto=''
578 d_sresuproto=''
579 d_statblks=''
580 d_statfs_f_flags=''
581 d_statfs_s=''
582 d_fstatvfs=''
583 d_statvfs=''
584 d_stdio_cnt_lval=''
585 d_stdio_ptr_lval=''
586 d_stdio_ptr_lval_nochange_cnt=''
587 d_stdio_ptr_lval_sets_cnt=''
588 d_stdiobase=''
589 d_stdstdio=''
590 stdio_base=''
591 stdio_bufsiz=''
592 stdio_cnt=''
593 stdio_filbuf=''
594 stdio_ptr=''
595 d_index=''
596 d_strchr=''
597 d_strcoll=''
598 d_strctcpy=''
599 d_strerrm=''
600 d_strerror=''
601 d_sysernlst=''
602 d_syserrlst=''
603 d_strftime=''
604 d_strtod=''
605 d_strtol=''
606 d_strtold=''
607 d_strtoll=''
608 d_strtoq=''
609 d_strtoul=''
610 d_strtoull=''
611 d_strtouq=''
612 d_strxfrm=''
613 d_symlink=''
614 d_syscall=''
615 d_syscallproto=''
616 d_sysconf=''
617 d_system=''
618 d_tcgetpgrp=''
619 d_tcsetpgrp=''
620 d_telldirproto=''
621 d_time=''
622 timetype=''
623 clocktype=''
624 d_times=''
625 d_truncate=''
626 d_tzname=''
627 d_u32align=''
628 d_ualarm=''
629 d_umask=''
630 d_semctl_semid_ds=''
631 d_semctl_semun=''
632 d_union_semun=''
633 d_unordered=''
634 d_usleep=''
635 d_usleepproto=''
636 d_ustat=''
637 d_vfork=''
638 usevfork=''
639 d_voidsig=''
640 signal_t=''
641 d_volatile=''
642 d_charvspr=''
643 d_vprintf=''
644 d_wait4=''
645 d_waitpid=''
646 d_wcstombs=''
647 d_wctomb=''
648 d_writev=''
649 dlext=''
650 cccdlflags=''
651 ccdlflags=''
652 dlsrc=''
653 ld=''
654 lddlflags=''
655 usedl=''
656 doublesize=''
657 ebcdic=''
658 fflushNULL=''
659 fflushall=''
660 fpossize=''
661 fpostype=''
662 gccosandvers=''
663 gccversion=''
664 gidformat=''
665 gidsign=''
666 gidsize=''
667 gidtype=''
668 groupstype=''
669 h_fcntl=''
670 h_sysfile=''
671 i_arpainet=''
672 db_hashtype=''
673 db_prefixtype=''
674 db_version_major=''
675 db_version_minor=''
676 db_version_patch=''
677 i_db=''
678 i_dbm=''
679 i_rpcsvcdbm=''
680 d_dirnamlen=''
681 direntrytype=''
682 i_dirent=''
683 i_dld=''
684 i_dlfcn=''
685 i_fcntl=''
686 i_float=''
687 i_fp=''
688 i_fp_class=''
689 i_gdbm=''
690 d_grpasswd=''
691 i_grp=''
692 i_ieeefp=''
693 i_inttypes=''
694 i_langinfo=''
695 i_libutil=''
696 i_limits=''
697 i_locale=''
698 i_machcthr=''
699 i_malloc=''
700 i_math=''
701 i_memory=''
702 i_mntent=''
703 i_ndbm=''
704 i_netdb=''
705 i_neterrno=''
706 i_netinettcp=''
707 i_niin=''
708 i_sysin=''
709 i_poll=''
710 i_prot=''
711 i_pthread=''
712 d_pwage=''
713 d_pwchange=''
714 d_pwclass=''
715 d_pwcomment=''
716 d_pwexpire=''
717 d_pwgecos=''
718 d_pwpasswd=''
719 d_pwquota=''
720 i_pwd=''
721 i_sfio=''
722 i_shadow=''
723 i_socks=''
724 i_stddef=''
725 i_stdlib=''
726 i_string=''
727 strings=''
728 i_sunmath=''
729 i_sysaccess=''
730 i_sysdir=''
731 i_sysfile=''
732 d_voidtty=''
733 i_bsdioctl=''
734 i_sysfilio=''
735 i_sysioctl=''
736 i_syssockio=''
737 i_syslog=''
738 i_sysmman=''
739 i_sysmode=''
740 i_sysmount=''
741 i_sysndir=''
742 i_sysparam=''
743 i_sysresrc=''
744 i_syssecrt=''
745 i_sysselct=''
746 i_sysstat=''
747 i_sysstatfs=''
748 i_sysstatvfs=''
749 i_systimes=''
750 i_systypes=''
751 i_sysuio=''
752 i_sysun=''
753 i_sysutsname=''
754 i_sysvfs=''
755 i_syswait=''
756 i_sgtty=''
757 i_termio=''
758 i_termios=''
759 i_systime=''
760 i_systimek=''
761 i_time=''
762 timeincl=''
763 i_unistd=''
764 i_ustat=''
765 i_utime=''
766 i_values=''
767 i_stdarg=''
768 i_varargs=''
769 i_varhdr=''
770 i_vfork=''
771 inc_version_list=''
772 inc_version_list_init=''
773 installprefix=''
774 installprefixexp=''
775 installstyle=''
776 installusrbinperl=''
777 intsize=''
778 longsize=''
779 shortsize=''
780 issymlink=''
781 libc=''
782 ldlibpthname=''
783 libperl=''
784 shrpenv=''
785 useshrplib=''
786 glibpth=''
787 libpth=''
788 loclibpth=''
789 plibpth=''
790 xlibpth=''
791 ignore_versioned_solibs=''
792 libs=''
793 libsdirs=''
794 libsfiles=''
795 libsfound=''
796 libspath=''
797 lns=''
798 d_PRIEUldbl=''
799 d_PRIFUldbl=''
800 d_PRIGUldbl=''
801 d_PRIeldbl=''
802 d_PRIfldbl=''
803 d_PRIgldbl=''
804 d_SCNfldbl=''
805 sPRIEUldbl=''
806 sPRIFUldbl=''
807 sPRIGUldbl=''
808 sPRIeldbl=''
809 sPRIfldbl=''
810 sPRIgldbl=''
811 sSCNfldbl=''
812 lseeksize=''
813 lseektype=''
814 make_set_make=''
815 d_mymalloc=''
816 freetype=''
817 mallocobj=''
818 mallocsrc=''
819 malloctype=''
820 usemymalloc=''
821 installman1dir=''
822 man1dir=''
823 man1direxp=''
824 man1ext=''
825 installman3dir=''
826 man3dir=''
827 man3direxp=''
828 man3ext=''
829 modetype=''
830 multiarch=''
831 mydomain=''
832 myhostname=''
833 phostname=''
834 c=''
835 n=''
836 d_eofnblk=''
837 eagain=''
838 o_nonblock=''
839 rd_nodata=''
840 need_va_copy=''
841 netdb_hlen_type=''
842 netdb_host_type=''
843 netdb_name_type=''
844 netdb_net_type=''
845 groupcat=''
846 hostcat=''
847 passcat=''
848 orderlib=''
849 ranlib=''
850 d_perl_otherlibdirs=''
851 otherlibdirs=''
852 package=''
853 spackage=''
854 pager=''
855 api_revision=''
856 api_subversion=''
857 api_version=''
858 api_versionstring=''
859 patchlevel=''
860 perl_patchlevel=''
861 revision=''
862 subversion=''
863 version=''
864 version_patchlevel_string=''
865 perl5=''
866 perladmin=''
867 perlpath=''
868 d_nv_preserves_uv=''
869 d_nv_preserves_uv_bits=''
870 i16size=''
871 i16type=''
872 i32size=''
873 i32type=''
874 i64size=''
875 i64type=''
876 i8size=''
877 i8type=''
878 ivsize=''
879 ivtype=''
880 nvsize=''
881 nvtype=''
882 u16size=''
883 u16type=''
884 u32size=''
885 u32type=''
886 u64size=''
887 u64type=''
888 u8size=''
889 u8type=''
890 uvsize=''
891 uvtype=''
892 ivdformat=''
893 nvEUformat=''
894 nvFUformat=''
895 nvGUformat=''
896 nveformat=''
897 nvfformat=''
898 nvgformat=''
899 uvXUformat=''
900 uvoformat=''
901 uvuformat=''
902 uvxformat=''
903 pidtype=''
904 prefix=''
905 prefixexp=''
906 installprivlib=''
907 privlib=''
908 privlibexp=''
909 prototype=''
910 ptrsize=''
911 d_PRIXU64=''
912 d_PRId64=''
913 d_PRIi64=''
914 d_PRIo64=''
915 d_PRIu64=''
916 d_PRIx64=''
917 sPRIXU64=''
918 sPRId64=''
919 sPRIi64=''
920 sPRIo64=''
921 sPRIu64=''
922 sPRIx64=''
923 d_quad=''
924 quadkind=''
925 quadtype=''
926 uquadtype=''
927 drand01=''
928 randbits=''
929 randfunc=''
930 randseedtype=''
931 seedfunc=''
932 installscript=''
933 scriptdir=''
934 scriptdirexp=''
935 selectminbits=''
936 selecttype=''
937 sh=''
938 sig_count=''
939 sig_name=''
940 sig_name_init=''
941 sig_num=''
942 sig_num_init=''
943 sig_size=''
944 installsitearch=''
945 sitearch=''
946 sitearchexp=''
947 installsitebin=''
948 sitebin=''
949 sitebinexp=''
950 installsitelib=''
951 sitelib=''
952 sitelib_stem=''
953 sitelibexp=''
954 siteprefix=''
955 siteprefixexp=''
956 sizesize=''
957 sizetype=''
958 so=''
959 socksizetype=''
960 sharpbang=''
961 shsharp=''
962 spitshell=''
963 src=''
964 ssizetype=''
965 startperl=''
966 startsh=''
967 stdchar=''
968 d_stdio_stream_array=''
969 stdio_stream_array=''
970 sysman=''
971 trnl=''
972 uidformat=''
973 uidsign=''
974 uidsize=''
975 uidtype=''
976 archname64=''
977 use64bitall=''
978 use64bitint=''
979 ccflags_uselargefiles=''
980 ldflags_uselargefiles=''
981 libswanted_uselargefiles=''
982 uselargefiles=''
983 uselongdouble=''
984 usemorebits=''
985 usemultiplicity=''
986 nm_opt=''
987 nm_so_opt=''
988 runnm=''
989 usenm=''
990 useperlio=''
991 usesocks=''
992 d_oldpthreads=''
993 use5005threads=''
994 useithreads=''
995 usereentrant=''
996 usethreads=''
997 incpath=''
998 mips_type=''
999 usrinc=''
1000 d_vendorarch=''
1001 installvendorarch=''
1002 vendorarch=''
1003 vendorarchexp=''
1004 d_vendorbin=''
1005 installvendorbin=''
1006 vendorbin=''
1007 vendorbinexp=''
1008 d_vendorlib=''
1009 installvendorlib=''
1010 vendorlib=''
1011 vendorlib_stem=''
1012 vendorlibexp=''
1013 usevendorprefix=''
1014 vendorprefix=''
1015 vendorprefixexp=''
1016 versiononly=''
1017 defvoidused=''
1018 voidflags=''
1019 pm_apiversion=''
1020 xs_apiversion=''
1021 yacc=''
1022 yaccflags=''
1023 CONFIG=''
1024
1025 define='define'
1026 undef='undef'
1027 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1028 rmlist=''
1029
1030 : We must find out about Eunice early
1031 eunicefix=':'
1032 if test -f /etc/unixtovms; then
1033         eunicefix=/etc/unixtovms
1034 fi
1035 if test -f /etc/unixtovms.exe; then
1036         eunicefix=/etc/unixtovms.exe
1037 fi
1038
1039 : Set executable suffix now -- needed before hints available
1040 if test -f "/libs/version.library"; then
1041 : Amiga OS
1042     _exe=""
1043 elif test -f "/system/gnu_library/bin/ar.pm"; then
1044 : Stratus VOS
1045     _exe=".pm"
1046 elif test -n "$DJGPP"; then
1047 : DOS DJGPP
1048     _exe=".exe"
1049 elif test -d c:/. ; then
1050 : OS/2 or cygwin
1051     _exe=".exe"
1052 fi
1053
1054 i_whoami=''
1055 ccname=''
1056 ccversion=''
1057 perllibs=''
1058 : set useposix=false in your hint file to disable the POSIX extension.
1059 useposix=true
1060 : set useopcode=false in your hint file to disable the Opcode extension.
1061 useopcode=true
1062 : Trailing extension.  Override this in a hint file, if needed.
1063 : Extra object files, if any, needed on this platform.
1064 archobjs=''
1065 archname=''
1066 : Possible local include directories to search.
1067 : Set locincpth to "" in a hint file to defeat local include searches.
1068 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1069 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1070 :
1071 : no include file wanted by default
1072 inclwanted=''
1073
1074 groupstype=''
1075 libnames=''
1076 : change the next line if compiling for Xenix/286 on Xenix/386
1077 xlibpth='/usr/lib/386 /lib/386'
1078 : Possible local library directories to search.
1079 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1080 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1081
1082 : general looking path for locating libraries
1083 glibpth="/lib /usr/lib $xlibpth"
1084 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1085 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1086 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1087
1088 : Private path used by Configure to find libraries.  Its value
1089 : is prepended to libpth. This variable takes care of special
1090 : machines, like the mips.  Usually, it should be empty.
1091 plibpth=''
1092
1093 : default library list
1094 libswanted=''
1095 : some systems want to use only the non-versioned libso:s
1096 ignore_versioned_solibs=''
1097 archname64=''
1098 ccflags_uselargefiles=''
1099 ldflags_uselargefiles=''
1100 libswanted_uselargefiles=''
1101 : set usemultiplicity on the Configure command line to enable multiplicity.
1102 : set usesocks on the Configure command line to enable socks.
1103 : set usethreads on the Configure command line to enable threads.
1104 usereentrant='undef'
1105 : full support for void wanted by default
1106 defvoidused=15
1107
1108 : List of libraries we want.
1109 : If anyone needs -lnet, put it in a hint file.
1110 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1111 libswanted="$libswanted dld ld sun m c cposix posix"
1112 libswanted="$libswanted ndir dir crypt sec"
1113 libswanted="$libswanted ucb bsd BSD PW x util"
1114 : We probably want to search /usr/shlib before most other libraries.
1115 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1116 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1117 glibpth="/usr/shlib $glibpth"
1118 : Do not use vfork unless overridden by a hint file.
1119 usevfork=false
1120
1121 : Find the basic shell for Bourne shell scripts
1122 case "$sh" in
1123 '')
1124         case "$SYSTYPE" in
1125         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1126         *) xxx='/bin/sh';;
1127         esac
1128         if test -f "$xxx"; then
1129                 sh="$xxx"
1130         else
1131                 : Build up a list and do a single loop so we can 'break' out.
1132                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1133                 for xxx in sh bash ksh pdksh ash; do
1134                         for p in $pth; do
1135                                 try="$try ${p}/${xxx}"
1136                         done
1137                 done
1138                 for xxx in $try; do
1139                         if test -f "$xxx"; then
1140                                 sh="$xxx";
1141                                 break
1142                         elif test "X$_exe" != X -a -f "$xxx$_exe"; then
1143                                 sh="$xxx";
1144                                 break
1145                         elif test -f "$xxx.exe"; then
1146                                 sh="$xxx";
1147                                 break
1148                         fi
1149                 done
1150         fi
1151         ;;
1152 esac
1153
1154 case "$sh" in
1155 '')     cat >&2 <<EOM
1156 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1157
1158 Usually it's in /bin/sh.  How did you even get this far?
1159 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1160 we'll try to straighten this all out.
1161 EOM
1162         exit 1
1163         ;;
1164 esac
1165
1166 : see if sh knows # comments
1167 if `$sh -c '#' >/dev/null 2>&1`; then
1168         shsharp=true
1169         spitshell=cat
1170         xcat=/bin/cat
1171         test -f $xcat$_exe || xcat=/usr/bin/cat
1172         if test ! -f $xcat$_exe; then
1173                 for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
1174                         if test -f $p/cat$_exe; then
1175                                 xcat=$p/cat
1176                                 break
1177                         fi
1178                 done
1179                 if test ! -f $xcat$_exe; then
1180                         echo "Can't find cat anywhere!"
1181                         exit 1
1182                 fi
1183         fi
1184         echo "#!$xcat" >sharp
1185         $eunicefix sharp
1186         chmod +x sharp
1187         ./sharp > today
1188         if test -s today; then
1189                 sharpbang='#!'
1190         else
1191                 echo "#! $xcat" > sharp
1192                 $eunicefix sharp
1193                 chmod +x sharp
1194                 ./sharp > today
1195                 if test -s today; then
1196                         sharpbang='#! '
1197                 else
1198                         sharpbang=': use '
1199                 fi
1200         fi
1201 else
1202         echo " "
1203         echo "Your $sh doesn't grok # comments--I will strip them later on."
1204         shsharp=false
1205         cd ..
1206         echo "exec grep -v '^[  ]*#'" >spitshell
1207         chmod +x spitshell
1208         $eunicefix spitshell
1209         spitshell=`pwd`/spitshell
1210         cd UU
1211         echo "I presume that if # doesn't work, #! won't work either!"
1212         sharpbang=': use '
1213 fi
1214 rm -f sharp today
1215
1216 : figure out how to guarantee sh startup
1217 case "$startsh" in
1218 '') startsh=${sharpbang}${sh} ;;
1219 *)
1220 esac
1221 cat >sharp <<EOSS
1222 $startsh
1223 set abc
1224 test "$?abc" != 1
1225 EOSS
1226
1227 chmod +x sharp
1228 $eunicefix sharp
1229 if ./sharp; then
1230         : echo "Yup, it does."
1231 else
1232         echo "Hmm... '$startsh' does not guarantee sh startup..."
1233         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1234 fi
1235 rm -f sharp
1236
1237
1238 : Save command line options in file UU/cmdline.opt for later use in
1239 : generating config.sh.
1240 cat > cmdline.opt <<EOSH
1241 # Configure command line arguments.
1242 config_arg0='$0'
1243 config_args='$*'
1244 config_argc=$#
1245 EOSH
1246 argn=1
1247 args_exp=''
1248 args_sep=''
1249 for arg in "$@"; do
1250         cat >>cmdline.opt <<EOSH
1251 config_arg$argn='$arg'
1252 EOSH
1253         # Extreme backslashitis: replace each ' by '"'"'
1254         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1255 $arg
1256 EOC
1257         arg_exp=`cat cmdl.opt`
1258         args_exp="$args_exp$args_sep'$arg_exp'"
1259         argn=`expr $argn + 1`
1260         args_sep=' '
1261 done
1262 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1263 # used by ./hints/os2.sh
1264 rm -f cmdl.opt
1265
1266 : produce awk script to parse command line options
1267 cat >options.awk <<'EOF'
1268 BEGIN {
1269         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1270
1271         len = length(optstr);
1272         for (i = 1; i <= len; i++) {
1273                 c = substr(optstr, i, 1);
1274                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1275                 if (a == ":") {
1276                         arg[c] = 1;
1277                         i++;
1278                 }
1279                 opt[c] = 1;
1280         }
1281 }
1282 {
1283         expect = 0;
1284         str = $0;
1285         if (substr(str, 1, 1) != "-") {
1286                 printf("'%s'\n", str);
1287                 next;
1288         }
1289         len = length($0);
1290         for (i = 2; i <= len; i++) {
1291                 c = substr(str, i, 1);
1292                 if (!opt[c]) {
1293                         printf("-%s\n", substr(str, i));
1294                         next;
1295                 }
1296                 printf("-%s\n", c);
1297                 if (arg[c]) {
1298                         if (i < len)
1299                                 printf("'%s'\n", substr(str, i + 1));
1300                         else
1301                                 expect = 1;
1302                         next;
1303                 }
1304         }
1305 }
1306 END {
1307         if (expect)
1308                 print "?";
1309 }
1310 EOF
1311
1312 : process the command line options
1313 set X `for arg in "$@"; do echo "X$arg"; done |
1314         sed -e s/X// | awk -f options.awk`
1315 eval "set $*"
1316 shift
1317 rm -f options.awk
1318
1319 : set up default values
1320 fastread=''
1321 reuseval=false
1322 config_sh=''
1323 alldone=''
1324 error=''
1325 silent=''
1326 extractsh=''
1327 override=''
1328 knowitall=''
1329 rm -f optdef.sh posthint.sh
1330 cat >optdef.sh <<EOS
1331 $startsh
1332 EOS
1333
1334
1335 : option parsing
1336 while test $# -gt 0; do
1337         case "$1" in
1338         -d) shift; fastread=yes;;
1339         -e) shift; alldone=cont;;
1340         -f)
1341                 shift
1342                 cd ..
1343                 if test -r "$1"; then
1344                         config_sh="$1"
1345                 else
1346                         echo "$me: cannot read config file $1." >&2
1347                         error=true
1348                 fi
1349                 cd UU
1350                 shift;;
1351         -h) shift; error=true;;
1352         -r) shift; reuseval=true;;
1353         -s) shift; silent=true; realsilent=true;;
1354         -E) shift; alldone=exit;;
1355         -K) shift; knowitall=true;;
1356         -O) shift; override=true;;
1357         -S) shift; silent=true; extractsh=true;;
1358         -D)
1359                 shift
1360                 case "$1" in
1361                 *=)
1362                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1363                         echo "$me: ignoring -D $1" >&2
1364                         ;;
1365                 *=*) echo "$1" | \
1366                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1367                 *) echo "$1='define'" >> optdef.sh;;
1368                 esac
1369                 shift
1370                 ;;
1371         -U)
1372                 shift
1373                 case "$1" in
1374                 *=) echo "$1" >> optdef.sh;;
1375                 *=*)
1376                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1377                         echo "$me: ignoring -U $1" >&2
1378                         ;;
1379                 *) echo "$1='undef'" >> optdef.sh;;
1380                 esac
1381                 shift
1382                 ;;
1383         -A)
1384             shift
1385             xxx=''
1386             yyy="$1"
1387             zzz=''
1388             uuu=undef
1389             case "$yyy" in
1390             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1391                  case "$zzz" in
1392                  *:*) zzz='' ;;
1393                  *)   xxx=append
1394                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1395                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1396                  esac
1397                  ;;
1398             esac
1399             case "$xxx" in
1400             '')  case "$yyy" in
1401                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1402                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1403                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1404                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1405                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1406                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1407                  esac
1408                  ;;       
1409             esac
1410             case "$xxx" in
1411             append)
1412                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1413             clear)
1414                 echo "$yyy=''"                  >> posthint.sh ;;
1415             define)
1416                 case "$zzz" in
1417                 '') zzz=define ;;
1418                 esac
1419                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1420             eval)
1421                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1422             prepend)
1423                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1424             undef)
1425                 case "$zzz" in
1426                 '') zzz="$uuu" ;;
1427                 esac
1428                 echo "$yyy=$zzz"                >> posthint.sh ;;
1429             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1430             esac
1431             shift
1432             ;;
1433         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1434             exit 0;;
1435         --) break;;
1436         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1437         *) break;;
1438         esac
1439 done
1440
1441 case "$error" in
1442 true)
1443         cat >&2 <<EOM
1444 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1445                  [-U symbol] [-U symbol=] [-A command:symbol...]
1446   -d : use defaults for all answers.
1447   -e : go on without questioning past the production of config.sh.
1448   -f : specify an alternate default configuration file.
1449   -h : print this help message and exit (with an error status).
1450   -r : reuse C symbols value if possible (skips costly nm extraction).
1451   -s : silent mode, only echoes questions and essential information.
1452   -D : define symbol to have some value:
1453          -D symbol         symbol gets the value 'define'
1454          -D symbol=value   symbol gets the value 'value'
1455   -E : stop at the end of questions, after having produced config.sh.
1456   -K : do not use unless you know what you are doing.
1457   -O : let -D and -U override definitions from loaded configuration file.
1458   -S : perform variable substitutions on all .SH files (can mix with -f)
1459   -U : undefine symbol:
1460          -U symbol    symbol gets the value 'undef'
1461          -U symbol=   symbol gets completely empty
1462   -A : manipulate symbol after the platform specific hints have been applied:
1463          -A symbol=value                append " "value to symbol
1464          -A append:symbol=value         append value to symbol
1465          -A define:symbol=value         define symbol to have value
1466          -A clear:symbol                define symbol to be ''
1467          -A define:symbol               define symbol to be 'define'
1468          -A eval:symbol=value           define symbol to be eval of value
1469          -A prepend:symbol=value        prepend value to symbol
1470          -A undef:symbol                define symbol to be 'undef'
1471          -A undef:symbol=               define symbol to be ''
1472   -V : print version number and exit (with a zero status).
1473 EOM
1474         exit 1
1475         ;;
1476 esac
1477
1478 : Sanity checks
1479 case "$fastread$alldone" in
1480 yescont|yesexit) ;;
1481 *)
1482         case "$extractsh" in
1483         true) ;;
1484         *)
1485                 if test ! -t 0; then
1486                         echo "Say 'sh Configure', not 'sh <Configure'"
1487                         exit 1
1488                 fi
1489                 ;;
1490         esac
1491         ;;
1492 esac
1493
1494 exec 4>&1
1495 case "$silent" in
1496 true) exec 1>/dev/null;;
1497 esac
1498
1499 : run the defines and the undefines, if any, but leave the file out there...
1500 touch optdef.sh
1501 . ./optdef.sh
1502 : create the posthint manipulation script and leave the file out there...
1503 touch posthint.sh
1504
1505 : set package name
1506 package=perl5
1507 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1508 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1509 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1510 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1511 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1512 esac
1513
1514 : Some greps do not return status, grrr.
1515 echo "grimblepritz" >grimble
1516 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1517         contains=contains
1518 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1519         contains=grep
1520 else
1521         contains=contains
1522 fi
1523 rm -f grimble
1524 : the following should work in any shell
1525 case "$contains" in
1526 contains*)
1527         echo " "
1528         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1529         cat >contains <<'EOSS'
1530 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1531 EOSS
1532 chmod +x contains
1533 esac
1534
1535 : Find the path to the source tree
1536 case "$src" in
1537 '') case "$0" in
1538     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1539          case "$src" in
1540          /*)    ;;
1541          .)     ;;
1542          *)     src=`cd ../$src && pwd` ;;
1543          esac
1544          ;;
1545     *)   src='.';;
1546     esac;;
1547 esac
1548 case "$src" in
1549 '')     src=/
1550         rsrc=/
1551         ;;
1552 /*) rsrc="$src";;
1553 *) rsrc="../$src";;
1554 esac
1555 if test -f $rsrc/Configure && \
1556         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1557 then
1558    : found it, so we are ok.
1559 else
1560         rsrc=''
1561         for src in . .. ../.. ../../.. ../../../..; do
1562                 if test -f ../$src/Configure && \
1563                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1564                 then
1565                         rsrc=../$src
1566                         break
1567                 fi
1568         done
1569 fi
1570 case "$rsrc" in
1571 '')
1572         cat <<EOM >&4
1573
1574 Sorry, I can't seem to locate the source dir for $package.  Please start
1575 Configure with an explicit path -- i.e. /some/path/Configure.
1576
1577 EOM
1578         exit 1
1579         ;;
1580 ../.)   rsrc='..';;
1581 *)
1582         echo " "
1583         echo "Sources for $package found in \"$src\"." >&4
1584         ;;
1585 esac
1586
1587 : script used to extract .SH files with variable substitutions
1588 cat >extract <<'EOS'
1589 PERL_CONFIG_SH=true
1590 echo "Doing variable substitutions on .SH files..."
1591 if test -f MANIFEST; then
1592         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1593 else
1594         echo "(Looking for .SH files under the source directory.)"
1595         set x `(cd "$src"; find . -name "*.SH" -print)`
1596 fi
1597 shift
1598 case $# in
1599 0) set x `(cd "$src"; echo *.SH)`; shift;;
1600 esac
1601 if test ! -f "$src/$1"; then
1602         shift
1603 fi
1604 mkdir_p='
1605 name=$1;
1606 create="";
1607 while test $name; do
1608         if test ! -d "$name"; then
1609                 create="$name $create";
1610                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1611                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1612         else
1613                 name="";
1614         fi;
1615 done;
1616 for file in $create; do
1617         mkdir $file;
1618 done
1619 '
1620 for file in $*; do
1621         case "$src" in
1622         ".")
1623                 case "$file" in
1624                 */*)
1625                         dir=`expr X$file : 'X\(.*\)/'`
1626                         file=`expr X$file : 'X.*/\(.*\)'`
1627                         (cd "$dir" && . ./$file)
1628                         ;;
1629                 *)
1630                         . ./$file
1631                         ;;
1632                 esac
1633                 ;;
1634         *)
1635                 case "$file" in
1636                 */*)
1637                         dir=`expr X$file : 'X\(.*\)/'`
1638                         file=`expr X$file : 'X.*/\(.*\)'`
1639                         (set x $dir; shift; eval $mkdir_p)
1640                         sh <"$src/$dir/$file"
1641                         ;;
1642                 *)
1643                         sh <"$src/$file"
1644                         ;;
1645                 esac
1646                 ;;
1647         esac
1648 done
1649 if test -f "$src/config_h.SH"; then
1650         if test ! -f config.h; then
1651         : oops, they left it out of MANIFEST, probably, so do it anyway.
1652         . "$src/config_h.SH"
1653         fi
1654 fi
1655 EOS
1656
1657 : extract files and exit if asked to do so
1658 case "$extractsh" in
1659 true)
1660         case "$realsilent" in
1661         true) ;;
1662         *) exec 1>&4;;
1663         esac
1664         case "$config_sh" in
1665         '') config_sh='config.sh';;
1666         esac
1667         echo " "
1668         echo "Fetching answers from $config_sh..."
1669         cd ..
1670         . $config_sh
1671         test "$override" && . ./optdef.sh
1672         echo " "
1673         . UU/extract
1674         rm -rf UU
1675         echo "Extraction done."
1676         exit 0
1677         ;;
1678 esac
1679
1680 : Eunice requires " " instead of "", can you believe it
1681 echo " "
1682 : Here we go...
1683 echo "Beginning of configuration questions for $package."
1684
1685 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1686
1687 : first determine how to suppress newline on echo command
1688 echo " "
1689 echo "Checking echo to see how to suppress newlines..."
1690 (echo "hi there\c" ; echo " ") >.echotmp
1691 if $contains c .echotmp >/dev/null 2>&1 ; then
1692         echo "...using -n."
1693         n='-n'
1694         c=''
1695 else
1696         cat <<'EOM'
1697 ...using \c
1698 EOM
1699         n=''
1700         c='\c'
1701 fi
1702 echo $n "The star should be here-->$c"
1703 echo '*'
1704 rm -f .echotmp
1705
1706 : Now test for existence of everything in MANIFEST
1707 echo " "
1708 if test -f "$rsrc/MANIFEST"; then
1709         echo "First let's make sure your kit is complete.  Checking..." >&4
1710         awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | (split -l 50 2>/dev/null || split -50)
1711         rm -f missing
1712         tmppwd=`pwd`
1713         for filelist in x??; do
1714                 (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing")
1715         done
1716         if test -s missing; then
1717                 cat missing >&4
1718                 cat >&4 <<'EOM'
1719
1720 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1721
1722 You have the option of continuing the configuration process, despite the
1723 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1724 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1725 and contact the author (perlbug@perl.org).
1726
1727 EOM
1728                 echo $n "Continue? [n] $c" >&4
1729                 read ans
1730                 case "$ans" in
1731                 y*)
1732                         echo "Continuing..." >&4
1733                         rm -f missing
1734                         ;;
1735                 *)
1736                         echo "ABORTING..." >&4
1737                         kill $$
1738                         ;;
1739                 esac
1740         else
1741                 echo "Looks good..."
1742         fi
1743 else
1744         echo "There is no MANIFEST file.  I hope your kit is complete !"
1745 fi
1746 rm -f missing x??
1747
1748 echo " "
1749 : Find the appropriate value for a newline for tr
1750 if test -n "$DJGPP"; then
1751        trnl='\012'
1752 fi
1753 if test X"$trnl" = X; then
1754         case "`echo foo|tr '\n' x 2>/dev/null`" in
1755         foox) trnl='\n' ;;
1756         esac
1757 fi
1758 if test X"$trnl" = X; then
1759         case "`echo foo|tr '\012' x 2>/dev/null`" in
1760         foox) trnl='\012' ;;
1761         esac
1762 fi
1763 if test X"$trnl" = X; then
1764         cat <<EOM >&2
1765
1766 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1767
1768 EOM
1769         exit 1
1770 fi
1771
1772 : compute the number of columns on the terminal for proper question formatting
1773 case "$COLUMNS" in
1774 '') COLUMNS='80';;
1775 esac
1776
1777 : set up the echo used in my read
1778 myecho="case \"\$xxxm\" in
1779 '') echo $n \"\$rp $c\" >&4;;
1780 *) case \"\$rp\" in
1781         '') echo $n \"[\$xxxm] $c\";;
1782         *)
1783                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1784                         echo \"\$rp\" >&4
1785                         echo $n \"[\$xxxm] $c\" >&4
1786                 else
1787                         echo $n \"\$rp [\$xxxm] $c\" >&4
1788                 fi
1789                 ;;
1790         esac;;
1791 esac"
1792
1793 : now set up to do reads with possible shell escape and default assignment
1794 cat <<EOSC >myread
1795 $startsh
1796 xxxm=\$dflt
1797 $myecho
1798 ans='!'
1799 case "\$fastread" in
1800 yes) case "\$dflt" in
1801         '') ;;
1802         *) ans='';
1803                 case "\$silent-\$rp" in
1804                 true-) ;;
1805                 *) echo " " >&4;;
1806                 esac;;
1807         esac;;
1808 *) case "\$silent" in
1809         true) case "\$rp" in
1810                 '') ans='';;
1811                 esac;;
1812         esac;;
1813 esac
1814 while expr "X\$ans" : "X!" >/dev/null; do
1815         read answ
1816         set x \$xxxm
1817         shift
1818         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1819         case  "\$answ" in
1820         "!")
1821                 sh 1>&4
1822                 echo " "
1823                 $myecho
1824                 ;;
1825         !*)
1826                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1827                 shift
1828                 sh 1>&4 -c "\$*"
1829                 echo " "
1830                 $myecho
1831                 ;;
1832         "\$ans")
1833                 case "\$ans" in
1834                 \\&*)
1835                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1836                         shift
1837                         case "\$1" in
1838                         -d)
1839                                 fastread=yes
1840                                 echo "(OK, I'll run with -d after this question.)" >&4
1841                                 ;;
1842                         -*)
1843                                 echo "*** Sorry, \$1 not supported yet." >&4
1844                                 ;;
1845                         esac
1846                         $myecho
1847                         ans=!
1848                         ;;
1849                 esac;;
1850         *)
1851                 case "\$aok" in
1852                 y)
1853                         echo "*** Substitution done -- please confirm."
1854                         xxxm="\$ans"
1855                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1856                         xxxm="\$ans"
1857                         ans=!
1858                         ;;
1859                 *)
1860                         echo "*** Error -- try again."
1861                         ans=!
1862                         ;;
1863                 esac
1864                 $myecho
1865                 ;;
1866         esac
1867         case "\$ans\$xxxm\$nostick" in
1868         '')
1869                 ans=!
1870                 $myecho
1871                 ;;
1872         esac
1873 done
1874 case "\$ans" in
1875 '') ans="\$xxxm";;
1876 esac
1877 EOSC
1878
1879 : create .config dir to save info across Configure sessions
1880 test -d ../.config || mkdir ../.config
1881 cat >../.config/README <<EOF
1882 This directory created by Configure to save information that should
1883 persist across sessions for $package.
1884
1885 You may safely delete it if you wish.
1886 EOF
1887
1888 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1889 case "$usedevel" in
1890 $define|true|[yY]*) ;;
1891 *) case "$xversion" in
1892    *[13579])
1893         cat >&4 <<EOH
1894 *** WHOA THERE!!! ***
1895
1896     This is an UNSTABLE DEVELOPMENT release.
1897     The version of this $package distribution is $xversion, that is, odd,
1898     (as opposed to even) and that signifies a development release.
1899     If you want a maintenance release, you want an even-numbered version.
1900
1901     Do ***NOT*** install this into production use.
1902     Data corruption and crashes are possible.
1903
1904     It is most seriously suggested that you do not continue any further
1905     unless you want to help in developing and debugging Perl.
1906
1907     If you *still* want to build perl, you can answer 'y' now,
1908     or pass -Dusedevel to Configure.
1909
1910 EOH
1911         rp='Do you really want to continue?'
1912         dflt='n'
1913         . ./myread
1914         case "$ans" in
1915         [yY]) echo >&4 "Okay, continuing."
1916               usedevel="$define" ;;
1917         *) echo >&4 "Okay, bye."
1918            exit 1
1919            ;;
1920         esac
1921         ;;
1922     esac
1923     ;;
1924 esac
1925 case "$usedevel" in
1926 $define|true|[yY]*)
1927         case "$versiononly" in
1928         '') versiononly="$define" ;;
1929         esac
1930         case "$installusrbinperl" in
1931         '') installusrbinperl="$undef" ;;
1932         esac
1933         ;;
1934 esac
1935
1936 : general instructions
1937 needman=true
1938 firsttime=true
1939 user=`(logname) 2>/dev/null`
1940 case "$user" in
1941 '') user=`whoami 2>&1`;;
1942 esac
1943 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1944         firsttime=false
1945         echo " "
1946         rp='Would you like to see the instructions?'
1947         dflt=n
1948         . ./myread
1949         case "$ans" in
1950         [yY]*) ;;
1951         *) needman=false;;
1952         esac
1953 fi
1954 if $needman; then
1955         cat <<EOH
1956
1957 This installation shell script will examine your system and ask you questions
1958 to determine how the perl5 package should be installed. If you get
1959 stuck on a question, you may use a ! shell escape to start a subshell or
1960 execute a command.  Many of the questions will have default answers in square
1961 brackets; typing carriage return will give you the default.
1962
1963 On some of the questions which ask for file or directory names you are allowed
1964 to use the ~name construct to specify the login directory belonging to "name",
1965 even if you don't have a shell which knows about that.  Questions where this is
1966 allowed will be marked "(~name ok)".
1967
1968 EOH
1969         rp=''
1970         dflt='Type carriage return to continue'
1971         . ./myread
1972         cat <<'EOH'
1973
1974 The prompter used in this script allows you to use shell variables and
1975 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1976 in the default answer, as if the default line was a set of arguments given to a
1977 script shell.  This means you may also use $* to repeat the whole default line,
1978 so you do not have to re-type everything to add something to the default.
1979
1980 Everytime there is a substitution, you will have to confirm.  If there is an
1981 error (e.g. an unmatched backtick), the default answer will remain unchanged
1982 and you will be prompted again.
1983
1984 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1985 the questions and use the computed defaults (or the previous answers if there
1986 was already a config.sh file). Type 'Configure -h' for a list of options.
1987 You may also start interactively and then answer '& -d' at any prompt to turn
1988 on the non-interactive behaviour for the remainder of the execution.
1989
1990 EOH
1991         . ./myread
1992         cat <<EOH
1993
1994 Much effort has been expended to ensure that this shell script will run on any
1995 Unix system.  If despite that it blows up on yours, your best bet is to edit
1996 Configure and run it again.  If you can't run Configure for some reason,
1997 you'll have to generate a config.sh file by hand.  Whatever problems you
1998 have, let me (perlbug@perl.org) know how I blew it.
1999
2000 This installation script affects things in two ways:
2001
2002 1) it may do direct variable substitutions on some of the files included
2003    in this kit.
2004 2) it builds a config.h file for inclusion in C programs.  You may edit
2005    any of these files as the need arises after running this script.
2006
2007 If you make a mistake on a question, there is no easy way to back up to it
2008 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
2009 files.  Configure will offer to let you do this before it runs the SH files.
2010
2011 EOH
2012         dflt='Type carriage return to continue'
2013         . ./myread
2014         case "$firsttime" in
2015         true) echo $user >>../.config/instruct;;
2016         esac
2017 fi
2018
2019 : find out where common programs are
2020 echo " "
2021 echo "Locating common programs..." >&4
2022 cat <<EOSC >loc
2023 $startsh
2024 case \$# in
2025 0) exit 1;;
2026 esac
2027 thing=\$1
2028 shift
2029 dflt=\$1
2030 shift
2031 for dir in \$*; do
2032         case "\$thing" in
2033         .)
2034         if test -d \$dir/\$thing; then
2035                 echo \$dir
2036                 exit 0
2037         fi
2038         ;;
2039         *)
2040         for thisthing in \$dir/\$thing; do
2041                 : just loop through to pick last item
2042         done
2043         if test -f \$thisthing; then
2044                 echo \$thisthing
2045                 exit 0
2046         elif test "X$_exe" != X -a -f \$thisthing$_exe; then
2047                 echo \$thisthing
2048                 exit 0
2049         elif test -f \$dir/\$thing.exe; then
2050                 if test -n "$DJGPP"; then
2051                         echo \$dir/\$thing.exe
2052                 else
2053                         : on Eunice apparently
2054                         echo \$dir/\$thing
2055                 fi
2056                 exit 0
2057         fi
2058         ;;
2059         esac
2060 done
2061 echo \$dflt
2062 exit 1
2063 EOSC
2064 chmod +x loc
2065 $eunicefix loc
2066 loclist="
2067 awk
2068 cat
2069 chmod
2070 comm
2071 cp
2072 echo
2073 expr
2074 grep
2075 ls
2076 mkdir
2077 rm
2078 sed
2079 sort
2080 touch
2081 tr
2082 uniq
2083 "
2084 trylist="
2085 Mcc
2086 ar
2087 bison
2088 byacc
2089 cpp
2090 csh
2091 date
2092 egrep
2093 gmake
2094 gzip
2095 less
2096 ln
2097 make
2098 more
2099 nm
2100 nroff
2101 pg
2102 test
2103 uname
2104 zip
2105 "
2106 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2107 pth="$pth /lib /usr/lib"
2108 for file in $loclist; do
2109         eval xxx=\$$file
2110         case "$xxx" in
2111         /*|?:[\\/]*)
2112                 if test -f "$xxx"; then
2113                         : ok
2114                 else
2115                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2116                         xxx=`./loc $file $file $pth`
2117                 fi
2118                 ;;
2119         '') xxx=`./loc $file $file $pth`;;
2120         *) xxx=`./loc $xxx $xxx $pth`;;
2121         esac
2122         eval $file=$xxx$_exe
2123         eval _$file=$xxx
2124         case "$xxx" in
2125         /*)
2126                 echo $file is in $xxx.
2127                 ;;
2128         ?:[\\/]*)
2129                 echo $file is in $xxx.
2130                 ;;
2131         *)
2132                 echo "I don't know where '$file' is, and my life depends on it." >&4
2133                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2134                 exit 1
2135                 ;;
2136         esac
2137 done
2138 echo " "
2139 echo "Don't worry if any of the following aren't found..."
2140 say=offhand
2141 for file in $trylist; do
2142         eval xxx=\$$file
2143         case "$xxx" in
2144         /*|?:[\\/]*)
2145                 if test -f "$xxx"; then
2146                         : ok
2147                 else
2148                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2149                         xxx=`./loc $file $file $pth`
2150                 fi
2151                 ;;
2152         '') xxx=`./loc $file $file $pth`;;
2153         *) xxx=`./loc $xxx $xxx $pth`;;
2154         esac
2155         eval $file=$xxx$_exe
2156         eval _$file=$xxx
2157         case "$xxx" in
2158         /*)
2159                 echo $file is in $xxx.
2160                 ;;
2161         ?:[\\/]*)
2162                 echo $file is in $xxx.
2163                 ;;
2164         *)
2165                 echo "I don't see $file out there, $say."
2166                 say=either
2167                 ;;
2168         esac
2169 done
2170 case "$egrep" in
2171 egrep)
2172         echo "Substituting grep for egrep."
2173         egrep=$grep
2174         _egrep=$grep
2175         ;;
2176 esac
2177 case "$ln" in
2178 ln)
2179         echo "Substituting cp for ln."
2180         ln=$cp
2181         _ln=$cp
2182         ;;
2183 esac
2184 case "$make" in
2185 make)   
2186         case "$gmake" in
2187         gmake)
2188         echo "I can't find make or gmake, and my life depends on it." >&4
2189         echo "Go find a public domain implementation or fix your PATH setting!" >&4
2190         exit 1
2191         ;;
2192         esac
2193         ;;
2194 esac    
2195 case "$gmake" in
2196 gmake)  ;;
2197 *)      # We can't have osname yet.
2198         if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
2199                 # Assume that gmake, if found, is definitely GNU make
2200                 # and prefer it over the system make.
2201                 echo "Substituting gmake for make."
2202                 make=$gmake
2203                 _make=$gmake
2204         fi
2205         ;;
2206 esac
2207 case "$test" in
2208 test)
2209         echo "Hopefully test is built into your sh."
2210         ;;
2211 *)
2212         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2213                 echo "Using the test built into your sh."
2214                 test=test
2215                 _test=test
2216         fi
2217         ;;
2218 esac
2219 case "$echo" in
2220 echo)
2221         echo "Hopefully echo is built into your sh."
2222         ;;
2223 '') ;;
2224 *)
2225         echo " "
2226 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2227         $echo $n "hi there$c" >foo1
2228         echo $n "hi there$c" >foo2
2229         if cmp foo1 foo2 >/dev/null 2>&1; then
2230                 echo "They are compatible.  In fact, they may be identical."
2231         else
2232                 case "$n" in
2233                 '-n') n='' c='\c';;
2234                 *) n='-n' c='';;
2235                 esac
2236                 cat <<FOO
2237 They are not compatible!  You are probably running ksh on a non-USG system.
2238 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2239 have echo built in and we may have to run some Bourne shell scripts.  That
2240 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2241
2242 FOO
2243                 $echo $n "The star should be here-->$c"
2244                 $echo "*"
2245         fi
2246         $rm -f foo1 foo2
2247         ;;
2248 esac
2249
2250 cat <<EOS >trygcc
2251 $startsh
2252 EOS
2253 cat <<'EOSC' >>trygcc
2254 case "$cc" in
2255 '') ;;
2256 *)  $rm -f try try.*
2257     $cat >try.c <<EOM
2258 int main(int argc, char *argv[]) {
2259   return 0;
2260 }
2261 EOM
2262     if $cc -o try $ccflags $ldflags try.c; then
2263        :
2264     else
2265         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2266         despair=yes
2267         trygcc=yes
2268         case "$cc" in
2269         *gcc*) trygcc=no ;;
2270         esac
2271         case "`$cc -v -c try.c 2>&1`" in
2272         *gcc*) trygcc=no ;;
2273         esac
2274         if $test X"$trygcc" = Xyes; then
2275             if gcc -o try -c try.c; then
2276                 echo " "
2277                 echo "You seem to have a working gcc, though." >&4
2278                 rp="Would you like to use it?"
2279                 dflt=y
2280                 if $test -f myread; then
2281                     . ./myread
2282                 else
2283                     if $test -f UU/myread; then
2284                         . ./UU/myread
2285                     else
2286                         echo "Cannot find myread, sorry.  Aborting." >&2
2287                         exit 1
2288                     fi
2289                 fi  
2290                 case "$ans" in
2291                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2292                 esac
2293             fi
2294         fi
2295     fi
2296     $rm -f try try.*
2297     ;;
2298 esac
2299 EOSC
2300
2301 cat <<EOS >checkcc
2302 $startsh
2303 EOS
2304 cat <<'EOSC' >>checkcc
2305 case "$cc" in        
2306 '') ;;
2307 *)  $rm -f try try.*              
2308     $cat >try.c <<EOM
2309 int main(int argc, char *argv[]) {
2310   return 0;
2311 }
2312 EOM
2313     if $cc -o try $ccflags $ldflags try.c; then
2314        :
2315     else
2316         if $test X"$despair" = Xyes; then
2317            echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2318         fi
2319         $cat >&4 <<EOM         
2320 You need to find a working C compiler.
2321 Either (purchase and) install the C compiler supplied by your OS vendor,
2322 or for a free C compiler try http://gcc.gnu.org/
2323 I cannot continue any further, aborting.
2324 EOM
2325         exit 1
2326     fi
2327     $rm -f try try.*
2328     ;;
2329 esac
2330 EOSC
2331
2332 : determine whether symbolic links are supported
2333 echo " "
2334 $touch blurfl
2335 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2336         echo "Symbolic links are supported." >&4
2337         lns="$ln -s"
2338 else
2339         echo "Symbolic links are NOT supported." >&4
2340         lns="$ln"
2341 fi
2342 $rm -f blurfl sym
2343
2344 : determine whether symbolic links are supported
2345 echo " "
2346 case "$lns" in
2347 *"ln"*" -s")
2348         echo "Checking how to test for symbolic links..." >&4
2349         $lns blurfl sym
2350         if $test "X$issymlink" = X; then
2351                 case "$newsh" in
2352                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2353                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2354                 esac
2355                 if test $? = 0; then
2356                         issymlink="test -h"
2357                 else
2358                         echo "Your builtin 'test -h' may be broken." >&4
2359                         case "$test" in
2360                         /*)     ;;
2361                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2362                                 for p in $pth
2363                                 do
2364                                         if test -f "$p/$test"; then
2365                                                 test="$p/$test"
2366                                                 break
2367                                         fi
2368                                 done
2369                                 ;;
2370                         esac
2371                         case "$test" in
2372                         /*)
2373                                 echo "Trying external '$test -h'." >&4
2374                                 issymlink="$test -h"
2375                                 if $test ! -h sym >/dev/null 2>&1; then
2376                                         echo "External '$test -h' is broken, too." >&4
2377                                         issymlink=''
2378                                 fi
2379                                 ;;
2380                         *)      issymlink='' ;;
2381                         esac
2382                 fi              
2383         fi
2384         if $test "X$issymlink" = X; then
2385                 if $test -L sym 2>/dev/null; then
2386                         issymlink="$test -L"
2387                         echo "The builtin '$test -L' worked." >&4
2388                 fi
2389         fi
2390         if $test "X$issymlink" != X; then
2391                 echo "You can test for symbolic links with '$issymlink'." >&4
2392         else
2393                 echo "I do not know how you can test for symbolic links." >&4
2394         fi
2395         $rm -f blurfl sym
2396         ;;
2397 *)      echo "No symbolic links, so not testing for their testing..." >&4
2398         ;;
2399 esac
2400 echo " "
2401
2402
2403 case "$mksymlinks" in
2404 $define|true|[yY]*)
2405         case "$src" in
2406         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2407                 exit 1
2408                 ;;
2409         *)      case "$lns:$issymlink" in
2410                 *"ln"*" -s:"*"test -"?)
2411                         echo "Creating the symbolic links..." >&4
2412                         echo "(First creating the subdirectories...)" >&4
2413                         cd ..
2414                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2415                                 read directory
2416                                 test -z "$directory" && break
2417                                 mkdir -p $directory
2418                         done
2419                         # Sanity check 1.
2420                         if test ! -d t/base; then
2421                                 echo "Failed to create the subdirectories.  Aborting." >&4
2422                                 exit 1
2423                         fi
2424                         echo "(Then creating the symlinks...)" >&4
2425                         awk '{print $1}' $src/MANIFEST | while true; do
2426                                 read filename
2427                                 test -z "$filename" && break
2428                                 if test -f $filename; then
2429                                         if $issymlink $filename; then
2430                                                 rm -f $filename
2431                                         fi
2432                                 fi
2433                                 if test -f $filename; then
2434                                         echo "$filename already exists, not symlinking."
2435                                 else
2436                                         ln -s $src/$filename $filename
2437                                 fi
2438                         done
2439                         # Sanity check 2.
2440                         if test ! -f t/base/lex.t; then
2441                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2442                                 exit 1
2443                         fi
2444                         cd UU
2445                         ;;
2446                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2447                         ;;
2448                 esac
2449                 ;;
2450         esac
2451         ;;
2452 esac
2453
2454
2455 case "$usecrosscompile" in
2456 $define|true|[yY]*)
2457         $echo "Cross-compiling..."
2458         croak=''
2459         case "$cc" in
2460         *-*-gcc) # A cross-compiling gcc, probably.
2461             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2462             ar=$targetarch-ar
2463             # leave out ld, choosing it is more complex
2464             nm=$targetarch-nm
2465             ranlib=$targetarch-ranlib
2466             $echo 'extern int foo;' > try.c
2467             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2468             shift
2469             if $test $# -gt 0; then
2470                 incpth="$incpth $*"
2471                 incpth="`$echo $incpth|$sed 's/^ //'`"
2472                 echo "Guessing incpth '$incpth'." >&4
2473                 for i in $*; do
2474                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2475                     if $test -d $j; then
2476                         libpth="$libpth $j"
2477                     fi
2478                 done   
2479                 libpth="`$echo $libpth|$sed 's/^ //'`"
2480                 echo "Guessing libpth '$libpth'." >&4
2481             fi
2482             $rm -f try.c
2483             ;;
2484         esac
2485         case "$targetarch" in
2486         '') echo "Targetarch not defined." >&4; croak=y ;;
2487         *)  echo "Using targetarch $targetarch." >&4 ;;
2488         esac
2489         case "$incpth" in
2490         '') echo "Incpth not defined." >&4; croak=y ;;
2491         *)  echo "Using incpth '$incpth'." >&4 ;;
2492         esac
2493         case "$libpth" in
2494         '') echo "Libpth not defined." >&4; croak=y ;;
2495         *)  echo "Using libpth '$libpth'." >&4 ;;
2496         esac
2497         case "$usrinc" in
2498         '') for i in $incpth; do
2499                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2500                     usrinc=$i
2501                     echo "Guessing usrinc $usrinc." >&4
2502                     break
2503                 fi
2504             done
2505             case "$usrinc" in
2506             '') echo "Usrinc not defined." >&4; croak=y ;;
2507             esac
2508             ;;
2509         *)  echo "Using usrinc $usrinc." >&4 ;;
2510         esac
2511         case "$targethost" in
2512         '') echo "Targethost not defined." >&4; croak=y ;;
2513         *)  echo "Using targethost $targethost." >&4
2514         esac
2515         locincpth=' '
2516         loclibpth=' '
2517         case "$croak" in
2518         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2519         esac
2520         case "$src" in
2521         /*) run=$src/Cross/run
2522             targetmkdir=$src/Cross/mkdir
2523             to=$src/Cross/to
2524             from=$src/Cross/from
2525             ;;
2526         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2527             run=$pwd/Cross/run
2528             targetmkdir=$pwd/Cross/mkdir
2529             to=$pwd/Cross/to
2530             from=$pwd/Cross/from
2531             ;;
2532         esac
2533         case "$targetrun" in
2534         '') targetrun=ssh ;;
2535         esac
2536         case "$targetto" in
2537         '') targetto=scp ;;
2538         esac
2539         case "$targetfrom" in
2540         '') targetfrom=scp ;;
2541         esac
2542         run=$run-$targetrun
2543         to=$to-$targetto
2544         from=$from-$targetfrom
2545         case "$targetdir" in
2546         '')  targetdir=/tmp
2547              echo "Guessing targetdir $targetdir." >&4
2548              ;;
2549         esac
2550         case "$targetuser" in
2551         '')  targetuser=root
2552              echo "Guessing targetuser $targetuser." >&4
2553              ;;
2554         esac
2555         case "$targetfrom" in
2556         scp)    q=-q ;;
2557         *)      q='' ;;
2558         esac
2559         case "$targetrun" in
2560         ssh|rsh)
2561             cat >$run <<EOF
2562 #!/bin/sh
2563 case "\$1" in
2564 -cwd)
2565   shift
2566   cwd=\$1
2567   shift
2568   ;;
2569 esac
2570 case "\$cwd" in
2571 '') cwd=$targetdir ;;
2572 esac
2573 exe=\$1
2574 shift
2575 if $test ! -f \$exe.xok; then
2576   $to \$exe
2577   $touch \$exe.xok
2578 fi
2579 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2580 EOF
2581             ;;
2582         *)  echo "Unknown targetrun '$targetrun'" >&4
2583             exit 1
2584             ;;
2585         esac
2586         case "$targetmkdir" in
2587         */Cross/mkdir)
2588             cat >$targetmkdir <<EOF
2589 #!/bin/sh
2590 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2591 EOF
2592             $chmod a+rx $targetmkdir
2593             ;;
2594         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2595             exit 1
2596             ;;
2597         esac
2598         case "$targetto" in
2599         scp|rcp)
2600             cat >$to <<EOF
2601 #!/bin/sh
2602 for f in \$@
2603 do
2604   case "\$f" in
2605   /*)
2606     $targetmkdir \`dirname \$f\`
2607     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2608     ;;
2609   *)
2610     $targetmkdir $targetdir/\`dirname \$f\`
2611     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2612     ;;
2613   esac
2614 done
2615 exit 0
2616 EOF
2617             ;;
2618         cp) cat >$to <<EOF
2619 #!/bin/sh
2620 for f in \$@
2621 do
2622   case "\$f" in
2623   /*)
2624     $mkdir -p $targetdir/\`dirname \$f\`
2625     $cp \$f $targetdir/\$f || exit 1
2626     ;;
2627   *)
2628     $targetmkdir $targetdir/\`dirname \$f\`
2629     $cp \$f $targetdir/\$f || exit 1
2630     ;;
2631   esac
2632 done
2633 exit 0
2634 EOF
2635             ;;
2636         *)  echo "Unknown targetto '$targetto'" >&4
2637             exit 1
2638             ;;
2639         esac
2640         case "$targetfrom" in
2641         scp|rcp)
2642           cat >$from <<EOF
2643 #!/bin/sh
2644 for f in \$@
2645 do
2646   $rm -f \$f
2647   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2648 done
2649 exit 0
2650 EOF
2651             ;;
2652         cp) cat >$from <<EOF
2653 #!/bin/sh
2654 for f in \$@
2655 do
2656   $rm -f \$f
2657   cp $targetdir/\$f . || exit 1
2658 done
2659 exit 0
2660 EOF
2661             ;;
2662         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2663             exit 1
2664             ;;
2665         esac
2666         if $test ! -f $run; then
2667             echo "Target 'run' script '$run' not found." >&4
2668         else
2669             $chmod a+rx $run
2670         fi
2671         if $test ! -f $to; then
2672             echo "Target 'to' script '$to' not found." >&4
2673         else
2674             $chmod a+rx $to
2675         fi
2676         if $test ! -f $from; then
2677             echo "Target 'from' script '$from' not found." >&4
2678         else
2679             $chmod a+rx $from
2680         fi
2681         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2682             exit 1
2683         fi
2684         cat >&4 <<EOF
2685 Using '$run' for remote execution,
2686 and '$from' and '$to'
2687 for remote file transfer.
2688 EOF
2689         ;;
2690 *)      run=''
2691         to=:
2692         from=:
2693         usecrosscompile='undef'
2694         targetarch=''
2695         ;;
2696 esac
2697
2698 : see whether [:lower:] and [:upper:] are supported character classes
2699 echo " "
2700 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2701 ABYZ)
2702         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2703         up='[:upper:]'
2704         low='[:lower:]'
2705         ;;
2706 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2707         # (0xc9 and 0xd1), therefore that is a nice testing point.
2708         if test "X$up" = X -o "X$low" = X; then
2709             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2710             ij) up='[A-Z]'
2711                 low='[a-z]'
2712                 ;;
2713             esac
2714         fi
2715         if test "X$up" = X -o "X$low" = X; then
2716             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2717             ij) up='A-Z'
2718                 low='a-z'
2719                 ;;
2720             esac
2721         fi
2722         if test "X$up" = X -o "X$low" = X; then
2723             case "`echo IJ | od -x 2>/dev/null`" in
2724             *C9D1*|*c9d1*)
2725                 echo "Hey, this might be EBCDIC." >&4
2726                 if test "X$up" = X -o "X$low" = X; then
2727                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2728                     ij) up='[A-IJ-RS-Z]'
2729                         low='[a-ij-rs-z]'
2730                         ;;
2731                     esac
2732                 fi
2733                 if test "X$up" = X -o "X$low" = X; then
2734                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2735                     ij) up='A-IJ-RS-Z'
2736                         low='a-ij-rs-z'
2737                         ;;
2738                     esac
2739                 fi
2740                 ;;
2741             esac
2742         fi
2743 esac
2744 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2745 ij)
2746     echo "Using $up and $low to convert case." >&4
2747     ;;
2748 *)
2749     echo "I don't know how to translate letters from upper to lower case." >&4
2750     echo "Your tr is not acting any way I know of." >&4
2751     exit 1
2752     ;;
2753 esac
2754 : set up the translation script tr, must be called with ./tr of course
2755 cat >tr <<EOSC
2756 $startsh
2757 case "\$1\$2" in
2758 '[A-Z][a-z]') exec $tr '$up' '$low';;
2759 '[a-z][A-Z]') exec $tr '$low' '$up';;
2760 esac
2761 exec $tr "\$@"
2762 EOSC
2763 chmod +x tr
2764 $eunicefix tr
2765
2766 : Try to determine whether config.sh was made on this system
2767 case "$config_sh" in
2768 '')
2769 myuname=`$uname -a 2>/dev/null`
2770 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2771 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2772 # because the A-Z/a-z are not consecutive.
2773 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2774         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2775 newmyuname="$myuname"
2776 dflt=n
2777 case "$knowitall" in
2778 '')
2779         if test -f ../config.sh; then
2780                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2781                         eval "`grep myuname= ../config.sh`"
2782                 fi
2783                 if test "X$myuname" = "X$newmyuname"; then
2784                         dflt=y
2785                 fi
2786         fi
2787         ;;
2788 *) dflt=y;;
2789 esac
2790
2791 : Get old answers from old config file if Configure was run on the
2792 : same system, otherwise use the hints.
2793 hint=default
2794 cd ..
2795 if test -f config.sh; then
2796         echo " "
2797         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2798         . UU/myread
2799         case "$ans" in
2800         n*|N*) echo "OK, I'll ignore it."
2801                 mv config.sh config.sh.old
2802                 myuname="$newmyuname"
2803                 ;;
2804         *)  echo "Fetching default answers from your old config.sh file..." >&4
2805                 tmp_n="$n"
2806                 tmp_c="$c"
2807                 tmp_sh="$sh"
2808                 . ./config.sh
2809                 cp config.sh UU
2810                 n="$tmp_n"
2811                 c="$tmp_c"
2812                 : Older versions did not always set $sh.  Catch re-use of such
2813                 : an old config.sh.
2814                 case "$sh" in
2815                 '') sh="$tmp_sh" ;;
2816                 esac
2817                 hint=previous
2818                 ;;
2819         esac
2820 fi
2821 . ./UU/checkcc
2822 if test ! -f config.sh; then
2823         $cat <<EOM
2824
2825 First time through, eh?  I have some defaults handy for some systems
2826 that need some extra help getting the Configure answers right:
2827
2828 EOM
2829         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2830         dflt=''
2831         : Half the following guesses are probably wrong... If you have better
2832         : tests or hints, please send them to perlbug@perl.org
2833         : The metaconfig authors would also appreciate a copy...
2834         $test -f /irix && osname=irix
2835         $test -f /xenix && osname=sco_xenix
2836         $test -f /dynix && osname=dynix
2837         $test -f /dnix && osname=dnix
2838         $test -f /lynx.os && osname=lynxos
2839         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2840         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2841         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2842         $test -f /bin/mips && /bin/mips && osname=mips
2843         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2844                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2845         $test -d /usr/apollo/bin && osname=apollo
2846         $test -f /etc/saf/_sactab && osname=svr4
2847         $test -d /usr/include/minix && osname=minix
2848         $test -f /system/gnu_library/bin/ar.pm && osname=vos
2849         if $test -d /MachTen -o -d /MachTen_Folder; then
2850                 osname=machten
2851                 if $test -x /sbin/version; then
2852                         osvers=`/sbin/version | $awk '{print $2}' |
2853                         $sed -e 's/[A-Za-z]$//'`
2854                 elif $test -x /usr/etc/version; then
2855                         osvers=`/usr/etc/version | $awk '{print $2}' |
2856                         $sed -e 's/[A-Za-z]$//'`
2857                 else
2858                         osvers="$2.$3"
2859                 fi
2860         fi
2861
2862         $test -f /sys/posix.dll &&
2863                 $test -f /usr/bin/what &&
2864                 set X `/usr/bin/what /sys/posix.dll` &&
2865                 $test "$3" = UWIN &&
2866                 osname=uwin &&
2867                 osvers="$5"
2868
2869         if $test -f $uname; then
2870                 set X $myuname
2871                 shift
2872
2873                 case "$5" in
2874                 fps*) osname=fps ;;
2875                 mips*)
2876                         case "$4" in
2877                         umips) osname=umips ;;
2878                         *) osname=mips ;;
2879                         esac;;
2880                 [23]100) osname=mips ;;
2881                 next*) osname=next ;;
2882                 i386*)
2883                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2884                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2885                                 osname='sco'
2886                                 osvers=$tmp
2887                         elif $test -f /etc/kconfig; then
2888                                 osname=isc
2889                                 if test "$lns" = "$ln -s"; then
2890                                         osvers=4
2891                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2892                                         osvers=3
2893                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2894                                         osvers=2
2895                                 fi
2896                         fi
2897                         tmp=''
2898                         ;;
2899                 pc*)
2900                         if test -n "$DJGPP"; then
2901                                 osname=dos
2902                                 osvers=djgpp
2903                         fi
2904                         ;;
2905                 esac
2906
2907                 case "$1" in
2908                 aix) osname=aix
2909                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2910                         case "$tmp" in
2911                         'not found') osvers="$4"."$3" ;;
2912                         '<3240'|'<>3240') osvers=3.2.0 ;;
2913                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2914                         '=3250'|'>3250') osvers=3.2.5 ;;
2915                         *) osvers=$tmp;;
2916                         esac
2917                         ;;
2918                 bsd386) osname=bsd386
2919                         osvers=`$uname -r`
2920                         ;;
2921                 cygwin*) osname=cygwin
2922                         osvers="$3"
2923                         ;;
2924                 *dc.osx) osname=dcosx
2925                         osvers="$3"
2926                         ;;
2927                 dnix) osname=dnix
2928                         osvers="$3"
2929                         ;;
2930                 domainos) osname=apollo
2931                         osvers="$3"
2932                         ;;
2933                 dgux) osname=dgux 
2934                         osvers="$3"
2935                         ;;
2936                 dynixptx*) osname=dynixptx
2937                         osvers=`echo "$4"|sed 's/^v//'`
2938                         ;;
2939                 freebsd) osname=freebsd 
2940                         osvers="$3" ;;
2941                 genix) osname=genix ;;
2942                 hp*) osname=hpux 
2943                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2944                         ;;
2945                 irix*) osname=irix
2946                         case "$3" in
2947                         4*) osvers=4 ;;
2948                         5*) osvers=5 ;;
2949                         *)      osvers="$3" ;;
2950                         esac
2951                         ;;
2952                 linux) osname=linux
2953                         case "$3" in
2954                         *)      osvers="$3" ;;
2955                         esac
2956                         ;;
2957                 MiNT) osname=mint
2958                         ;;
2959                 netbsd*) osname=netbsd
2960                         osvers="$3"
2961                         ;;
2962                 news-os) osvers="$3"
2963                         case "$3" in
2964                         4*) osname=newsos4 ;;
2965                         *) osname=newsos ;;
2966                         esac
2967                         ;;
2968                 next*) osname=next ;;
2969                 nonstop-ux) osname=nonstopux ;;
2970                 POSIX-BC | posix-bc ) osname=posix-bc
2971                         osvers="$3"
2972                         ;;
2973                 powerux | power_ux | powermax_os | powermaxos | \
2974                 powerunix | power_unix) osname=powerux
2975                         osvers="$3"
2976                         ;;
2977                 qnx) osname=qnx
2978                         osvers="$4"
2979                         ;;
2980                 solaris) osname=solaris
2981                         case "$3" in
2982                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2983                         *)      osvers="$3" ;;
2984                         esac
2985                         ;;
2986                 sunos) osname=sunos
2987                         case "$3" in
2988                         5*) osname=solaris
2989                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2990                         *)      osvers="$3" ;;
2991                         esac
2992                         ;;
2993                 titanos) osname=titanos
2994                         case "$3" in
2995                         1*) osvers=1 ;;
2996                         2*) osvers=2 ;;
2997                         3*) osvers=3 ;;
2998                         4*) osvers=4 ;;
2999                         *)      osvers="$3" ;;
3000                         esac
3001                         ;;
3002                 ultrix) osname=ultrix
3003                         osvers="$3"
3004                         ;;
3005                 osf1|mls+)      case "$5" in
3006                                 alpha)
3007                                         osname=dec_osf
3008                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
3009                                         case "$osvers" in
3010                                         [1-9].[0-9]*) ;;
3011                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
3012                                         esac
3013                                         ;;
3014                         hp*)    osname=hp_osf1  ;;
3015                         mips)   osname=mips_osf1 ;;
3016                         esac
3017                         ;;
3018                 unixware) osname=svr5
3019                         osvers="$4"
3020                         ;;
3021                 uts)    osname=uts
3022                         osvers="$3"
3023                         ;;
3024                 vos) osvers="$3"
3025                         ;;
3026                 $2) case "$osname" in
3027                         *isc*) ;;
3028                         *freebsd*) ;;
3029                         svr*)
3030                                 : svr4.x or possibly later
3031                                 case "svr$3" in 
3032                                 ${osname}*)
3033                                         osname=svr$3
3034                                         osvers=$4
3035                                         ;;
3036                                 esac
3037                                 case "$osname" in
3038                                 svr4.0)
3039                                         : Check for ESIX
3040                                         if test -f /stand/boot ; then
3041                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
3042                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
3043                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
3044                                                         if test -n "$isesix"; then
3045                                                                 osname=esix4
3046                                                         fi
3047                                                 fi
3048                                         fi
3049                                         ;;
3050                                 esac
3051                                 ;;
3052                         *)      if test -f /etc/systemid; then
3053                                         osname=sco
3054                                         set `echo $3 | $sed 's/\./ /g'` $4
3055                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
3056                                                 osvers=$1.$2.$3
3057                                         elif $test -f $src/hints/sco_$1_$2.sh; then
3058                                                 osvers=$1.$2
3059                                         elif $test -f $src/hints/sco_$1.sh; then
3060                                                 osvers=$1
3061                                         fi
3062                                 else
3063                                         case "$osname" in
3064                                         '') : Still unknown.  Probably a generic Sys V.
3065                                                 osname="sysv"
3066                                                 osvers="$3"
3067                                                 ;;
3068                                         esac
3069                                 fi
3070                                 ;;
3071                         esac
3072                         ;;
3073                 *)      case "$osname" in
3074                         '') : Still unknown.  Probably a generic BSD.
3075                                 osname="$1"
3076                                 osvers="$3"
3077                                 ;;
3078                         esac
3079                         ;;
3080                 esac
3081         else
3082                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
3083                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
3084                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
3085                                 osname=news_os
3086                         fi
3087                         $rm -f UU/kernel.what
3088                 elif test -d c:/.; then
3089                         set X $myuname
3090                         osname=os2
3091                         osvers="$5"
3092                 fi
3093         fi
3094         
3095         case "$targetarch" in
3096         '') ;;
3097         *)  hostarch=$osname
3098             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3099             osvers=''
3100             ;;
3101         esac
3102
3103         : Now look for a hint file osname_osvers, unless one has been
3104         : specified already.
3105         case "$hintfile" in
3106         ''|' ')
3107                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3108                 : Also try without trailing minor version numbers.
3109                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3110                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3111                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3112                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3113                 case "$file" in
3114                 '') dflt=none ;;
3115                 *)  case "$osvers" in
3116                         '') dflt=$file
3117                                 ;;
3118                         *)  if $test -f $src/hints/$file.sh ; then
3119                                         dflt=$file
3120                                 elif $test -f $src/hints/$xfile.sh ; then
3121                                         dflt=$xfile
3122                                 elif $test -f $src/hints/$xxfile.sh ; then
3123                                         dflt=$xxfile
3124                                 elif $test -f $src/hints/$xxxfile.sh ; then
3125                                         dflt=$xxxfile
3126                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3127                                         dflt=$xxxxfile
3128                                 elif $test -f "$src/hints/${osname}.sh" ; then
3129                                         dflt="${osname}"
3130                                 else
3131                                         dflt=none
3132                                 fi
3133                                 ;;
3134                         esac
3135                         ;;
3136                 esac
3137                 if $test -f Policy.sh ; then
3138                         case "$dflt" in
3139                         *Policy*) ;;
3140                         none) dflt="Policy" ;;
3141                         *) dflt="Policy $dflt" ;;
3142                         esac
3143                 fi
3144                 ;;
3145         *)
3146                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3147                 ;;
3148         esac
3149
3150         if $test -f Policy.sh ; then
3151                 $cat <<EOM
3152
3153 There's also a Policy hint file available, which should make the
3154 site-specific (policy) questions easier to answer.
3155 EOM
3156
3157         fi
3158
3159         $cat <<EOM
3160
3161 You may give one or more space-separated answers, or "none" if appropriate.
3162 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3163 is a good thing.  DO NOT give a wrong version or a wrong OS.
3164
3165 EOM
3166
3167         rp="Which of these apply, if any?"
3168         . UU/myread
3169         tans=$ans
3170         for file in $tans; do
3171                 if $test X$file = XPolicy -a -f Policy.sh; then
3172                         . Policy.sh
3173                         $cat Policy.sh >> UU/config.sh
3174                 elif $test -f $src/hints/$file.sh; then
3175                         . $src/hints/$file.sh
3176                         $cat $src/hints/$file.sh >> UU/config.sh
3177                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3178                         : nothing
3179                 else
3180                         : Give one chance to correct a possible typo.
3181                         echo "$file.sh does not exist"
3182                         dflt=$file
3183                         rp="hint to use instead?"
3184                         . UU/myread
3185                         for file in $ans; do
3186                                 if $test -f "$src/hints/$file.sh"; then
3187                                         . $src/hints/$file.sh
3188                                         $cat $src/hints/$file.sh >> UU/config.sh
3189                                 elif $test X$ans = X -o X$ans = Xnone ; then
3190                                         : nothing
3191                                 else
3192                                         echo "$file.sh does not exist -- ignored."
3193                                 fi
3194                         done
3195                 fi
3196         done
3197
3198         hint=recommended
3199         : Remember our hint file for later.
3200         if $test -f "$src/hints/$file.sh" ; then
3201                 hintfile="$file"
3202         else
3203                 hintfile=''
3204         fi
3205 fi
3206 cd UU
3207 ;;
3208 *)
3209         echo " "
3210         echo "Fetching default answers from $config_sh..." >&4
3211         tmp_n="$n"
3212         tmp_c="$c"
3213         cd ..
3214         cp $config_sh config.sh 2>/dev/null
3215         chmod +w config.sh
3216         . ./config.sh
3217         cd UU
3218         cp ../config.sh .
3219         n="$tmp_n"
3220         c="$tmp_c"
3221         hint=previous
3222         ;;
3223 esac
3224 test "$override" && . ./optdef.sh
3225
3226 : Restore computed paths
3227 for file in $loclist $trylist; do
3228         eval $file="\$_$file"
3229 done
3230
3231 cat << EOM
3232
3233 Configure uses the operating system name and version to set some defaults.
3234 The default value is probably right if the name rings a bell. Otherwise,
3235 since spelling matters for me, either accept the default or answer "none"
3236 to leave it blank.
3237
3238 EOM
3239 case "$osname" in
3240         ''|' ')
3241                 case "$hintfile" in
3242                 ''|' '|none) dflt=none ;;
3243                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3244                 esac
3245                 ;;
3246         *) dflt="$osname" ;;
3247 esac
3248 rp="Operating system name?"
3249 . ./myread
3250 case "$ans" in
3251 none)  osname='' ;;
3252 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3253 esac
3254 echo " "
3255 case "$osvers" in
3256         ''|' ')
3257                 case "$hintfile" in
3258                 ''|' '|none) dflt=none ;;
3259                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3260                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3261                         case "$dflt" in
3262                         ''|' ') dflt=none ;;
3263                         esac
3264                         ;;
3265                 esac
3266                 ;;
3267         *) dflt="$osvers" ;;
3268 esac
3269 rp="Operating system version?"
3270 . ./myread
3271 case "$ans" in
3272 none)  osvers='' ;;
3273 *) osvers="$ans" ;;
3274 esac
3275
3276
3277 . ./posthint.sh
3278
3279 : who configured the system
3280 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3281 cf_by=`(logname) 2>/dev/null`
3282 case "$cf_by" in
3283 "")
3284         cf_by=`(whoami) 2>/dev/null`
3285         case "$cf_by" in
3286         "") cf_by=unknown ;;
3287         esac ;;
3288 esac
3289
3290 : set up the script used to warn in case of inconsistency
3291 cat <<EOS >whoa
3292 $startsh
3293 EOS
3294 cat <<'EOSC' >>whoa
3295 dflt=y
3296 echo " "
3297 echo "*** WHOA THERE!!! ***" >&4
3298 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3299 rp="    Keep the $hint value?"
3300 . ./myread
3301 case "$ans" in
3302 y) td=$was; tu=$was;;
3303 esac
3304 EOSC
3305
3306 : function used to set $1 to $val
3307 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3308 case "$val$was" in
3309 $define$undef) . ./whoa; eval "$var=\$td";;
3310 $undef$define) . ./whoa; eval "$var=\$tu";;
3311 *) eval "$var=$val";;
3312 esac'
3313
3314 case "$usethreads" in
3315 $define|true|[yY]*)     dflt='y';;
3316 *) dflt='n';;
3317 esac
3318 cat <<EOM
3319
3320 Perl can be built to take advantage of threads on some systems.
3321 To do so, Configure can be run with -Dusethreads.
3322
3323 Note that threading is a highly experimental feature, and
3324 some known race conditions still remain.  If you choose to try
3325 it, be very sure to not actually deploy it for production
3326 purposes.  README.threads has more details, and is required
3327 reading if you enable threads.
3328
3329 If this doesn't make any sense to you, just accept the default '$dflt'.
3330 EOM
3331 rp='Build a threading Perl?'
3332 . ./myread
3333 case "$ans" in
3334 y|Y)    val="$define" ;;
3335 *)      val="$undef" ;;
3336 esac
3337 set usethreads
3338 eval $setvar
3339
3340 case "$usethreads" in
3341 $define)
3342         $cat <<EOM
3343
3344 As of 5.5.640, Perl has two different internal threading implementations,
3345 the 5.005 version (5005threads) and an interpreter-based version
3346 (ithreads) that has one interpreter per thread.  Both are very 
3347 experimental.  This arrangement exists to help developers work out
3348 which one is better.
3349
3350 If you're a casual user, you probably don't want interpreter-threads
3351 at this time.  But if you do, the 'threads' module allows their use,
3352 and the 'Thread' module offers an interface to both 5005threads and
3353 ithreads (whichever has been configured).
3354 EOM
3355         : Default to ithreads unless overridden on command line or with
3356         : old config.sh
3357         dflt='y'
3358         case "$use5005threads" in
3359                 $define|true|[yY]*) dflt='n';;
3360         esac
3361         case "$useithreads" in
3362                 $undef|false|[nN]*) dflt='n';;
3363         esac
3364         rp='Use interpreter-based ithreads?'
3365         . ./myread
3366         case "$ans" in
3367         y|Y)    val="$define" ;;
3368         *)      val="$undef" ;;
3369         esac
3370         set useithreads
3371         eval $setvar
3372         : Now set use5005threads to the opposite value.
3373         case "$useithreads" in
3374         $define) val="$undef" ;;
3375         *) val="$define" ;;
3376         esac
3377         set use5005threads
3378         eval $setvar
3379         ;;
3380 *)
3381         useithreads="$undef"
3382         use5005threads="$undef"
3383         ;;
3384 esac
3385
3386 case "$useithreads$use5005threads" in
3387 "$define$define")
3388         $cat >&4 <<EOM
3389
3390 You cannot have both the ithreads and the 5.005 threads enabled
3391 at the same time.  Disabling the 5.005 threads since they are
3392 much less stable than the ithreads.
3393
3394 EOM
3395         use5005threads="$undef"
3396         ;;
3397 esac
3398
3399 case "$d_oldpthreads" in
3400 '')     : Configure tests would be welcome here.  For now, assume undef.
3401         val="$undef" ;;
3402 *)      val="$d_oldpthreads" ;;
3403 esac
3404 set d_oldpthreads
3405 eval $setvar
3406
3407
3408 case "$usethreads" in
3409 "$define"|true|[yY]*)
3410 : Look for a hint-file generated 'call-back-unit'.  If the
3411 : user has specified that a threading perl is to be built,
3412 : we may need to set or change some other defaults.
3413         if $test -f usethreads.cbu; then
3414                 echo "Your platform has some specific hints for threaded builds, using them..."
3415                 . ./usethreads.cbu
3416         else
3417                 $cat <<EOM
3418 (Your platform doesn't have any specific hints for threaded builds.
3419  Assuming POSIX threads, then.)
3420 EOM
3421         fi
3422         ;;
3423 esac
3424
3425 cat <<EOM
3426
3427 Perl can be built so that multiple Perl interpreters can coexist
3428 within the same Perl executable.
3429 EOM
3430
3431 case "$useithreads" in
3432 $define)
3433         cat <<EOM
3434 This multiple interpreter support is required for interpreter-based threads.
3435 EOM
3436         val="$define"
3437         ;;
3438 *)      case "$usemultiplicity" in
3439         $define|true|[yY]*)     dflt='y';;
3440         *) dflt='n';;
3441         esac
3442         echo " "
3443         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3444         rp='Build Perl for multiplicity?'
3445         . ./myread
3446         case "$ans" in
3447         y|Y)    val="$define" ;;
3448         *)      val="$undef" ;;
3449         esac
3450         ;;
3451 esac
3452 set usemultiplicity
3453 eval $setvar
3454
3455
3456 case "$usemorebits" in
3457 "$define"|true|[yY]*)
3458         use64bitint="$define"
3459         uselongdouble="$define"
3460         usemorebits="$define"
3461         ;;
3462 *)      usemorebits="$undef"
3463         ;;
3464 esac
3465
3466 : make some quick guesses about what we are up against
3467 echo " "
3468 $echo $n "Hmm...  $c"
3469 echo exit 1 >bsd
3470 echo exit 1 >usg
3471 echo exit 1 >v7
3472 echo exit 1 >osf1
3473 echo exit 1 >eunice
3474 echo exit 1 >xenix
3475 echo exit 1 >venix
3476 echo exit 1 >os2
3477 d_bsd="$undef"
3478 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3479 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3480 then
3481         echo "Looks kind of like an OSF/1 system, but we'll see..."
3482         echo exit 0 >osf1
3483 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3484         xxx=`./loc addbib blurfl $pth`
3485         if $test -f $xxx; then
3486         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3487                 echo exit 0 >bsd
3488                 echo exit 0 >usg
3489         else
3490                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3491                         echo "Looks kind of like an extended USG system, but we'll see..."
3492                 else
3493                         echo "Looks kind of like a USG system, but we'll see..."
3494                 fi
3495                 echo exit 0 >usg
3496         fi
3497 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3498         echo "Looks kind of like a BSD system, but we'll see..."
3499         d_bsd="$define"
3500         echo exit 0 >bsd
3501 else
3502         echo "Looks kind of like a Version 7 system, but we'll see..."
3503         echo exit 0 >v7
3504 fi
3505 case "$eunicefix" in
3506 *unixtovms*)
3507         $cat <<'EOI'
3508 There is, however, a strange, musty smell in the air that reminds me of
3509 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3510 EOI
3511         echo exit 0 >eunice
3512         d_eunice="$define"
3513 : it so happens the Eunice I know will not run shell scripts in Unix format
3514         ;;
3515 *)
3516         echo " "
3517         echo "Congratulations.  You aren't running Eunice."
3518         d_eunice="$undef"
3519         ;;
3520 esac
3521 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3522 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3523 : semicolon as a patch separator
3524 case "$p_" in
3525 :) ;;
3526 *)
3527         $cat <<'EOI'
3528 I have the feeling something is not exactly right, however...don't tell me...
3529 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3530 (Or you may be running DOS with DJGPP.)
3531 EOI
3532         echo exit 0 >os2
3533         ;;
3534 esac
3535 if test -f /xenix; then
3536         echo "Actually, this looks more like a XENIX system..."
3537         echo exit 0 >xenix
3538         d_xenix="$define"
3539 else
3540         echo " "
3541         echo "It's not Xenix..."
3542         d_xenix="$undef"
3543 fi
3544 chmod +x xenix
3545 $eunicefix xenix
3546 if test -f /venix; then
3547         echo "Actually, this looks more like a VENIX system..."
3548         echo exit 0 >venix
3549 else
3550         echo " "
3551         if ./xenix; then
3552                 : null
3553         else
3554                 echo "Nor is it Venix..."
3555         fi
3556 fi
3557 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3558 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3559 $rm -f foo
3560
3561 case "$cc" in
3562 '') dflt=cc;;
3563 *) dflt="$cc";;
3564 esac
3565 rp="Use which C compiler?"
3566 . ./myread
3567 cc="$ans"
3568
3569 : See if they have not cc but they do have gcc
3570 . ./trygcc
3571 : Look for a hint-file generated 'call-back-unit'.  Now that the
3572 : user has specified the compiler, we may need to set or change some
3573 : other defaults.
3574 if $test -f cc.cbu; then
3575     . ./cc.cbu
3576 fi
3577 . ./checkcc
3578
3579 echo " "
3580 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3581 $cat >try.c <<EOM
3582 #include <stdio.h>
3583 int main() {
3584 #ifdef __GNUC__
3585 #ifdef __VERSION__
3586         printf("%s\n", __VERSION__);
3587 #else
3588         printf("%s\n", "1");
3589 #endif
3590 #endif
3591         exit(0);
3592 }
3593 EOM
3594 if $cc -o try $ccflags $ldflags try.c; then
3595         gccversion=`$run ./try`
3596         case "$gccversion" in
3597         '') echo "You are not using GNU cc." ;;
3598         *)  echo "You are using GNU cc $gccversion."
3599             ccname=gcc  
3600             ;;
3601         esac
3602 else
3603         echo " "
3604         echo "*** WHOA THERE!!! ***" >&4
3605         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3606         case "$knowitall" in
3607         '')
3608         echo "    You'd better start hunting for one and let me know about it." >&4
3609                 exit 1
3610                 ;;
3611         esac
3612 fi
3613 $rm -f try try.*
3614 case "$gccversion" in
3615 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3616 esac
3617 case "$gccversion" in
3618 '') gccosandvers='' ;;
3619 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3620    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3621    gccshortvers=''
3622    case "$gccosandvers" in
3623    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3624    $osname$osvers) ;; # looking good
3625    $osname*) cat <<EOM >&4
3626
3627 *** WHOA THERE!!! ***
3628
3629     Your gcc has not been compiled for the exact release of
3630     your operating system ($gccosandvers versus $osname$osvers).
3631
3632     In general it is a good idea to keep gcc synchronized with
3633     the operating system because otherwise serious problems
3634     may ensue when trying to compile software, like Perl.
3635
3636     I'm trying to be optimistic here, though, and will continue.
3637     If later during the configuration and build icky compilation
3638     problems appear (headerfile conflicts being the most common
3639     manifestation), I suggest reinstalling the gcc to match
3640     your operating system release.
3641
3642 EOM
3643       ;;
3644    *) gccosandvers='' ;; # failed to parse, better be silent
3645    esac
3646    ;;
3647 esac
3648 case "$ccname" in
3649 '') ccname="$cc" ;;
3650 esac
3651
3652
3653 : decide how portable to be.  Allow command line overrides.
3654 case "$d_portable" in
3655 "$undef") ;;
3656 *)      d_portable="$define" ;;
3657 esac
3658
3659 : set up shell script to do ~ expansion
3660 cat >filexp <<EOSS
3661 $startsh
3662 : expand filename
3663 case "\$1" in
3664  ~/*|~)
3665         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3666         ;;
3667  ~*)
3668         if $test -f /bin/csh; then
3669                 /bin/csh -f -c "glob \$1"
3670                 failed=\$?
3671                 echo ""
3672                 exit \$failed
3673         else
3674                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3675                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3676                 if $test ! -d "\$dir"; then
3677                         me=\`basename \$0\`
3678                         echo "\$me: can't locate home directory for: \$name" >&2
3679                         exit 1
3680                 fi
3681                 case "\$1" in
3682                 */*)
3683                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3684                         ;;
3685                 *)
3686                         echo \$dir
3687                         ;;
3688                 esac
3689         fi
3690         ;;
3691 *)
3692         echo \$1
3693         ;;
3694 esac
3695 EOSS
3696 chmod +x filexp
3697 $eunicefix filexp
3698
3699 : now set up to get a file name
3700 cat <<EOS >getfile
3701 $startsh
3702 EOS
3703 cat <<'EOSC' >>getfile
3704 tilde=''
3705 fullpath=''
3706 already=''
3707 skip=''
3708 none_ok=''
3709 exp_file=''
3710 nopath_ok=''
3711 orig_rp="$rp"
3712 orig_dflt="$dflt"
3713 case "$gfpth" in
3714 '') gfpth='.' ;;
3715 esac
3716
3717 case "$fn" in
3718 *\(*)
3719         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3720         fn=`echo $fn | sed 's/(.*)//'`
3721         ;;
3722 esac
3723
3724 case "$fn" in
3725 *:*)
3726         loc_file=`expr $fn : '.*:\(.*\)'`
3727         fn=`expr $fn : '\(.*\):.*'`
3728         ;;
3729 esac
3730
3731 case "$fn" in
3732 *~*) tilde=true;;
3733 esac
3734 case "$fn" in
3735 */*) fullpath=true;;
3736 esac
3737 case "$fn" in
3738 *+*) skip=true;;
3739 esac
3740 case "$fn" in
3741 *n*) none_ok=true;;
3742 esac
3743 case "$fn" in
3744 *e*) exp_file=true;;
3745 esac
3746 case "$fn" in
3747 *p*) nopath_ok=true;;
3748 esac
3749
3750 case "$fn" in
3751 *f*) type='File';;
3752 *d*) type='Directory';;
3753 *l*) type='Locate';;
3754 esac
3755
3756 what="$type"
3757 case "$what" in
3758 Locate) what='File';;
3759 esac
3760
3761 case "$exp_file" in
3762 '')
3763         case "$d_portable" in
3764         "$define") ;;
3765         *) exp_file=true;;
3766         esac
3767         ;;
3768 esac
3769
3770 cd ..
3771 while test "$type"; do
3772         redo=''
3773         rp="$orig_rp"
3774         dflt="$orig_dflt"
3775         case "$tilde" in
3776         true) rp="$rp (~name ok)";;
3777         esac
3778         . UU/myread
3779         if test -f UU/getfile.ok && \
3780                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3781         then
3782                 value="$ans"
3783                 ansexp="$ans"
3784                 break
3785         fi
3786         case "$ans" in
3787         none)
3788                 value=''
3789                 ansexp=''
3790                 case "$none_ok" in
3791                 true) type='';;
3792                 esac
3793                 ;;
3794         *)
3795                 case "$tilde" in
3796                 '') value="$ans"
3797                         ansexp="$ans";;
3798                 *)
3799                         value=`UU/filexp $ans`
3800                         case $? in
3801                         0)
3802                                 if test "$ans" != "$value"; then
3803                                         echo "(That expands to $value on this system.)"
3804                                 fi
3805                                 ;;
3806                         *) value="$ans";;
3807                         esac
3808                         ansexp="$value"
3809                         case "$exp_file" in
3810                         '') value="$ans";;
3811                         esac
3812                         ;;
3813                 esac
3814                 case "$fullpath" in
3815                 true)
3816                         case "$ansexp" in
3817                         /*) value="$ansexp" ;;
3818                         [a-zA-Z]:/*) value="$ansexp" ;;
3819                         *)
3820                                 redo=true
3821                                 case "$already" in
3822                                 true)
3823                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3824                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3825                                         ;;
3826                                 *)
3827                                 echo "Please give a full path name, starting with slash." >&4
3828                                         case "$tilde" in
3829                                         true)
3830                                 echo "Note that using ~name is ok provided it expands well." >&4
3831                                                 already=true
3832                                                 ;;
3833                                         esac
3834                                 esac
3835                                 ;;
3836                         esac
3837                         ;;
3838                 esac
3839                 case "$redo" in
3840                 '')
3841                         case "$type" in
3842                         File)
3843                                 for fp in $gfpth; do
3844                                         if test "X$fp" = X.; then
3845                                             pf="$ansexp"
3846                                         else    
3847                                             pf="$fp/$ansexp"
3848                                         fi
3849                                         if test -f "$pf"; then
3850                                                 type=''
3851                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3852                                         then
3853                                                 echo "($value is not a plain file, but that's ok.)"
3854                                                 type=''
3855                                         fi
3856                                         if test X"$type" = X; then
3857                                             value="$pf"
3858                                             break
3859                                         fi
3860                                 done
3861                                 ;;
3862                         Directory)
3863                                 for fp in $gfpth; do
3864                                         if test "X$fp" = X.; then
3865                                             dir="$ans"
3866                                             direxp="$ansexp"
3867                                         else    
3868                                             dir="$fp/$ansexp"
3869                                             direxp="$fp/$ansexp"
3870                                         fi
3871                                         if test -d "$direxp"; then
3872                                                 type=''
3873                                                 value="$dir"
3874                                                 break
3875                                         fi
3876                                 done
3877                                 ;;
3878                         Locate)
3879                                 if test -d "$ansexp"; then
3880                                         echo "(Looking for $loc_file in directory $value.)"
3881                                         value="$value/$loc_file"
3882                                         ansexp="$ansexp/$loc_file"
3883                                 fi
3884                                 if test -f "$ansexp"; then
3885                                         type=''
3886                                 fi
3887                                 case "$nopath_ok" in
3888                                 true)   case "$value" in
3889                                         */*) ;;
3890                                         *)      echo "Assuming $value will be in people's path."
3891                                                 type=''
3892                                                 ;;
3893                                         esac
3894                                         ;;
3895                                 esac
3896                                 ;;
3897                         esac
3898
3899                         case "$skip" in
3900                         true) type='';
3901                         esac
3902
3903                         case "$type" in
3904                         '') ;;
3905                         *)
3906                                 if test "$fastread" = yes; then
3907                                         dflt=y
3908                                 else
3909                                         dflt=n
3910                                 fi
3911                                 rp="$what $value doesn't exist.  Use that name anyway?"
3912                                 . UU/myread
3913                                 dflt=''
3914                                 case "$ans" in
3915                                 y*) type='';;
3916                                 *) echo " ";;
3917                                 esac
3918                                 ;;
3919                         esac
3920                         ;;
3921                 esac
3922                 ;;
3923         esac
3924 done
3925 cd UU
3926 ans="$value"
3927 rp="$orig_rp"
3928 dflt="$orig_dflt"
3929 rm -f getfile.ok
3930 test "X$gfpthkeep" != Xy && gfpth=""
3931 EOSC
3932
3933 : What should the include directory be ?
3934 echo " "
3935 $echo $n "Hmm...  $c"
3936 dflt='/usr/include'
3937 incpath=''
3938 mips_type=''
3939 if $test -f /bin/mips && /bin/mips; then
3940         echo "Looks like a MIPS system..."
3941         $cat >usr.c <<'EOCP'
3942 #ifdef SYSTYPE_BSD43
3943 /bsd43
3944 #endif
3945 EOCP
3946         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3947                 dflt='/bsd43/usr/include'
3948                 incpath='/bsd43'
3949                 mips_type='BSD 4.3'
3950         else
3951                 mips_type='System V'
3952         fi
3953         $rm -f usr.c usr.out
3954         echo "and you're compiling with the $mips_type compiler and libraries."
3955         xxx_prompt=y
3956         echo "exit 0" >mips
3957 else
3958         echo "Doesn't look like a MIPS system."
3959         xxx_prompt=n
3960         echo "exit 1" >mips
3961 fi
3962 chmod +x mips
3963 $eunicefix mips
3964 case "$usrinc" in
3965 '') ;;
3966 *) dflt="$usrinc";;
3967 esac
3968 case "$xxx_prompt" in
3969 y)      fn=d/
3970         echo " "
3971         rp='Where are the include files you want to use?'
3972         . ./getfile
3973         usrinc="$ans"
3974         ;;
3975 *)      usrinc="$dflt"
3976         ;;
3977 esac
3978
3979 : see how we invoke the C preprocessor
3980 echo " "
3981 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3982 cat <<'EOT' >testcpp.c
3983 #define ABC abc
3984 #define XYZ xyz
3985 ABC.XYZ
3986 EOT
3987 cd ..
3988 if test ! -f cppstdin; then
3989         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3990                 # AIX cc -E doesn't show the absolute headerfile
3991                 # locations but we'll cheat by using the -M flag.
3992                 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
3993         else
3994                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3995         fi
3996 else
3997         echo "Keeping your $hint cppstdin wrapper."
3998 fi
3999 chmod 755 cppstdin
4000 wrapper=`pwd`/cppstdin
4001 ok='false'
4002 cd UU
4003
4004 if $test "X$cppstdin" != "X" && \
4005         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
4006         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4007 then
4008         echo "You used to use $cppstdin $cppminus so we'll use that again."
4009         case "$cpprun" in
4010         '') echo "But let's see if we can live without a wrapper..." ;;
4011         *)
4012                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
4013                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4014                 then
4015                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
4016                         ok='true'
4017                 else
4018                         echo "(However, $cpprun $cpplast does not work, let's see...)"
4019                 fi
4020                 ;;
4021         esac
4022 else
4023         case "$cppstdin" in
4024         '') ;;
4025         *)
4026                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
4027                 ;;
4028         esac
4029 fi
4030
4031 if $ok; then
4032         : nothing
4033 elif echo 'Maybe "'"$cc"' -E" will work...'; \
4034         $cc -E <testcpp.c >testcpp.out 2>&1; \
4035         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4036         echo "Yup, it does."
4037         x_cpp="$cc -E"
4038         x_minus='';
4039 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
4040         $cc -E - <testcpp.c >testcpp.out 2>&1; \
4041         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4042         echo "Yup, it does."
4043         x_cpp="$cc -E"
4044         x_minus='-';
4045 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
4046         $cc -P <testcpp.c >testcpp.out 2>&1; \
4047         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4048         echo "Yipee, that works!"
4049         x_cpp="$cc -P"
4050         x_minus='';
4051 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4052         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4053         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4054         echo "At long last!"
4055         x_cpp="$cc -P"
4056         x_minus='-';
4057 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4058         $cpp <testcpp.c >testcpp.out 2>&1; \
4059         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4060         echo "It works!"
4061         x_cpp="$cpp"
4062         x_minus='';
4063 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4064         $cpp - <testcpp.c >testcpp.out 2>&1; \
4065         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4066         echo "Hooray, it works!  I was beginning to wonder."
4067         x_cpp="$cpp"
4068         x_minus='-';
4069 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4070         $wrapper <testcpp.c >testcpp.out 2>&1; \
4071         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4072         x_cpp="$wrapper"
4073         x_minus=''
4074         echo "Eureka!"
4075 else
4076         dflt=''
4077         rp="No dice.  I can't find a C preprocessor.  Name one:"
4078         . ./myread
4079         x_cpp="$ans"
4080         x_minus=''
4081         $x_cpp <testcpp.c >testcpp.out 2>&1
4082         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4083                 echo "OK, that will do." >&4
4084         else
4085 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4086                 exit 1
4087         fi
4088 fi
4089
4090 case "$ok" in
4091 false)
4092         cppstdin="$x_cpp"
4093         cppminus="$x_minus"
4094         cpprun="$x_cpp"
4095         cpplast="$x_minus"
4096         set X $x_cpp
4097         shift
4098         case "$1" in
4099         "$cpp")
4100                 echo "Perhaps can we force $cc -E using a wrapper..."
4101                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4102                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4103                 then
4104                         echo "Yup, we can."
4105                         cppstdin="$wrapper"
4106                         cppminus='';
4107                 else
4108                         echo "Nope, we'll have to live without it..."
4109                 fi
4110                 ;;
4111         esac
4112         case "$cpprun" in
4113         "$wrapper")
4114                 cpprun=''
4115                 cpplast=''
4116                 ;;
4117         esac
4118         ;;
4119 esac
4120
4121 case "$cppstdin" in
4122 "$wrapper"|'cppstdin') ;;
4123 *) $rm -f $wrapper;;
4124 esac
4125 $rm -f testcpp.c testcpp.out
4126
4127 : Set private lib path
4128 case "$plibpth" in
4129 '') if ./mips; then
4130                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4131         fi;;
4132 esac
4133 case "$libpth" in
4134 ' ') dlist='';;
4135 '') dlist="$loclibpth $plibpth $glibpth";;
4136 *) dlist="$libpth";;
4137 esac
4138
4139 : Now check and see which directories actually exist, avoiding duplicates
4140 libpth=''
4141 for xxx in $dlist
4142 do
4143     if $test -d $xxx; then
4144                 case " $libpth " in
4145                 *" $xxx "*) ;;
4146                 *) libpth="$libpth $xxx";;
4147                 esac
4148     fi
4149 done
4150 $cat <<'EOM'
4151
4152 Some systems have incompatible or broken versions of libraries.  Among
4153 the directories listed in the question below, please remove any you
4154 know not to be holding relevant libraries, and add any that are needed.
4155 Say "none" for none.
4156
4157 EOM
4158 case "$libpth" in
4159 '') dflt='none';;
4160 *)
4161         set X $libpth
4162         shift
4163         dflt=${1+"$@"}
4164         ;;
4165 esac
4166 rp="Directories to use for library searches?"
4167 . ./myread
4168 case "$ans" in
4169 none) libpth=' ';;
4170 *) libpth="$ans";;
4171 esac
4172
4173 : compute shared library extension
4174 case "$so" in
4175 '')
4176         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4177                 dflt='sl'
4178         else
4179                 dflt='so'
4180         fi
4181         ;;
4182 *) dflt="$so";;
4183 esac
4184 $cat <<EOM
4185
4186 On some systems, shared libraries may be available.  Answer 'none' if
4187 you want to suppress searching of shared libraries for the remainder
4188 of this configuration.
4189
4190 EOM
4191 rp='What is the file extension used for shared libraries?'
4192 . ./myread
4193 so="$ans"
4194
4195 : Define several unixisms.
4196 : Hints files or command line option can be used to override them.
4197 : The convoluted testing is in case hints files set either the old
4198 : or the new name.
4199 case "$_exe" in
4200 '')     case "$exe_ext" in
4201         '')     ;;
4202         *)      _exe="$exe_ext" ;;
4203         esac
4204         ;;
4205 esac
4206 case "$_a" in
4207 '')     case "$lib_ext" in
4208     '') _a='.a';;
4209         *)      _a="$lib_ext" ;;
4210         esac
4211         ;;
4212 esac
4213 case "$_o" in
4214 '') case "$obj_ext" in
4215         '')     _o='.o';;
4216         *)      _o="$obj_ext";;
4217         esac
4218         ;;
4219 esac
4220 case "$p_" in
4221 '') case "$path_sep" in
4222         '')     p_=':';;
4223         *)      p_="$path_sep";;
4224         esac
4225         ;;
4226 esac
4227 exe_ext=$_exe
4228 lib_ext=$_a
4229 obj_ext=$_o
4230 path_sep=$p_
4231
4232 : Which makefile gets called first.  This is used by make depend.
4233 case "$firstmakefile" in
4234 '') firstmakefile='makefile';;
4235 esac
4236
4237 case "$usesocks" in
4238 $define|true|[yY]*)     dflt='y';;
4239 *) dflt='n';;
4240 esac
4241 cat <<EOM
4242
4243 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4244 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4245 to use the PerlIO abstraction layer, this will be implicitly selected.
4246
4247 If this doesn't make any sense to you, just accept the default '$dflt'.
4248 EOM
4249 rp='Build Perl for SOCKS?'
4250 . ./myread
4251 case "$ans" in
4252 y|Y)    val="$define" ;;     
4253 *)      val="$undef" ;;
4254 esac
4255 set usesocks
4256 eval $setvar
4257
4258 case "$usesocks" in
4259 $define|true|[yY]*) useperlio="$define";;
4260 esac
4261
4262 : Looking for optional libraries
4263 echo " "
4264 echo "Checking for optional libraries..." >&4
4265 case "$libs" in
4266 ' '|'') dflt='';;
4267 *) dflt="$libs";;
4268 esac
4269 case "$libswanted" in
4270 '') libswanted='c_s';;
4271 esac
4272 case "$usesocks" in
4273 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4274 esac
4275 libsfound=''
4276 libsfiles=''
4277 libsdirs=''
4278 libspath=''
4279 for thisdir in $libpth $xlibpth; do
4280   test -d $thisdir && libspath="$libspath $thisdir"
4281 done
4282 for thislib in $libswanted; do
4283         for thisdir in $libspath; do
4284             xxx=''
4285             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4286                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'`
4287                 $test -f "$xxx" && eval $libscheck
4288                 $test -f "$xxx" && libstyle=shared
4289             fi
4290             if test ! -f "$xxx"; then
4291                 xxx=$thisdir/lib$thislib.$so
4292                 $test -f "$xxx" && eval $libscheck
4293                 $test -f "$xxx" && libstyle=shared
4294             fi  
4295             if test ! -f "$xxx"; then
4296                 xxx=$thisdir/lib$thislib$_a
4297                 $test -f "$xxx" && eval $libscheck
4298                 $test -f "$xxx" && libstyle=static
4299             fi
4300             if test ! -f "$xxx"; then
4301                 xxx=$thisdir/$thislib$_a
4302                 $test -f "$xxx" && eval $libscheck
4303                 $test -f "$xxx" && libstyle=static
4304             fi
4305             if test ! -f "$xxx"; then
4306                 xxx=$thisdir/lib${thislib}_s$_a
4307                 $test -f "$xxx" && eval $libscheck
4308                 $test -f "$xxx" && libstyle=static
4309                 $test -f "$xxx" && thislib=${thislib}_s
4310             fi
4311             if test ! -f "$xxx"; then
4312                 xxx=$thisdir/Slib$thislib$_a
4313                 $test -f "$xxx" && eval $libscheck
4314                 $test -f "$xxx" && libstyle=static
4315             fi
4316             if $test -f "$xxx"; then
4317                 case "$libstyle" in
4318                 shared) echo "Found -l$thislib (shared)." ;;
4319                 static) echo "Found -l$thislib." ;;
4320                 *)      echo "Found -l$thislib ($libstyle)." ;;
4321                 esac
4322                 case " $dflt " in
4323                 *"-l$thislib "*);;
4324                 *) dflt="$dflt -l$thislib"
4325                    libsfound="$libsfound $xxx"
4326                    yyy=`basename $xxx`
4327                    libsfiles="$libsfiles $yyy"
4328                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4329                    case " $libsdirs " in
4330                    *" $yyy "*) ;;
4331                    *) libsdirs="$libsdirs $yyy" ;;
4332                    esac
4333                    ;;
4334                 esac
4335                 break
4336             fi  
4337         done
4338         if $test ! -f "$xxx"; then
4339             echo "No -l$thislib."
4340         fi
4341 done
4342 set X $dflt
4343 shift
4344 dflt="$*"
4345 case "$libs" in
4346 '') dflt="$dflt";;
4347 *) dflt="$libs";;
4348 esac
4349 case "$dflt" in
4350 ' '|'') dflt='none';;
4351 esac
4352
4353 $cat <<EOM
4354
4355 In order to compile $package on your machine, a number of libraries
4356 are usually needed.  Include any other special libraries here as well.
4357 Say "none" for none.  The default list is almost always right.
4358 EOM
4359
4360 echo " "
4361 rp="What libraries to use?"
4362 . ./myread
4363 case "$ans" in
4364 none) libs=' ';;
4365 *) libs="$ans";;
4366 esac
4367
4368 : determine optimization, if desired, or use for debug flag also
4369 case "$optimize" in
4370 ' '|$undef) dflt='none';;
4371 '') dflt='-O';;
4372 *) dflt="$optimize";;
4373 esac
4374 $cat <<EOH
4375
4376 By default, $package compiles with the -O flag to use the optimizer.
4377 Alternately, you might want to use the symbolic debugger, which uses
4378 the -g flag (on traditional Unix systems).  Either flag can be
4379 specified here.  To use neither flag, specify the word "none".
4380
4381 EOH
4382 rp="What optimizer/debugger flag should be used?"
4383 . ./myread
4384 optimize="$ans"
4385 case "$optimize" in
4386 'none') optimize=" ";;
4387 esac
4388
4389 dflt=''
4390 : We will not override a previous value, but we might want to
4391 : augment a hint file
4392 case "$hint" in
4393 default|recommended)
4394         case "$gccversion" in
4395         1*) dflt='-fpcc-struct-return' ;;
4396         esac
4397         case "$optimize" in
4398         *-g*) dflt="$dflt -DDEBUGGING";;
4399         esac
4400         case "$gccversion" in
4401         2*) if test -d /etc/conf/kconfig.d &&
4402                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4403                 then
4404                         dflt="$dflt -posix"
4405                 fi
4406                 ;;
4407         esac
4408         case "$gccversion" in
4409         1*) ;;
4410         2.[0-8]*) ;;
4411         ?*)     echo " "
4412                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4413                 echo 'int main(void) { return 0; }' > gcctest.c
4414                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4415                         echo "Yes, it does." 2>&1
4416                         case "$ccflags" in
4417                         *strict-aliasing*) 
4418                                 echo "Leaving current flags $ccflags alone." 2>&1
4419                                 ;;
4420                         *) dflt="$dflt -fno-strict-aliasing" ;;
4421                         esac
4422                 else
4423                         echo "Nope, it doesn't, but that's ok." 2>&1
4424                 fi
4425                 ;;
4426         esac
4427         ;;
4428 esac
4429
4430 case "$mips_type" in
4431 *BSD*|'') inclwanted="$locincpth $usrinc";;
4432 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4433 esac
4434 for thisincl in $inclwanted; do
4435         if $test -d $thisincl; then
4436                 if $test x$thisincl != x$usrinc; then
4437                         case "$dflt" in
4438                         *" -I$thisincl "*);;
4439                         *) dflt="$dflt -I$thisincl ";;
4440                         esac
4441                 fi
4442         fi
4443 done
4444
4445 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4446         xxx=true;
4447 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4448         xxx=true;
4449 else
4450         xxx=false;
4451 fi;
4452 if $xxx; then
4453         case "$dflt" in
4454         *$2*);;
4455         *) dflt="$dflt -D$2";;
4456         esac;
4457 fi'
4458
4459 set signal.h LANGUAGE_C; eval $inctest
4460
4461 case "$usesocks" in
4462 $define)
4463         ccflags="$ccflags -DSOCKS"
4464         ;;
4465 esac
4466
4467 case "$hint" in
4468 default|recommended) dflt="$ccflags $dflt" ;;
4469 *) dflt="$ccflags";;
4470 esac
4471
4472 case "$dflt" in
4473 ''|' ') dflt=none;;
4474 esac
4475
4476 $cat <<EOH
4477
4478 Your C compiler may want other flags.  For this question you should include
4479 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4480 but you should NOT include libraries or ld flags like -lwhatever.  If you
4481 want $package to honor its debug switch, you should include -DDEBUGGING here.
4482 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4483
4484 To use no flags, specify the word "none".
4485
4486 EOH
4487 set X $dflt
4488 shift
4489 dflt=${1+"$@"}
4490 rp="Any additional cc flags?"
4491 . ./myread
4492 case "$ans" in
4493 none) ccflags='';;
4494 *) ccflags="$ans";;
4495 esac
4496
4497 : the following weeds options from ccflags that are of no interest to cpp
4498 case "$cppflags" in
4499 '') cppflags="$ccflags" ;;
4500 *)  cppflags="$cppflags $ccflags" ;;
4501 esac
4502 case "$gccversion" in
4503 1*) cppflags="$cppflags -D__GNUC__"
4504 esac
4505 case "$mips_type" in
4506 '');;
4507 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4508 esac
4509 case "$cppflags" in
4510 '');;
4511 *)
4512         echo " "
4513         echo "Let me guess what the preprocessor flags are..." >&4
4514         set X $cppflags
4515         shift
4516         cppflags=''
4517         $cat >cpp.c <<'EOM'
4518 #define BLURFL foo
4519
4520 BLURFL xx LFRULB
4521 EOM
4522         previous=''
4523         for flag in $*
4524         do
4525                 case "$flag" in
4526                 -*) ftry="$flag";;
4527                 *) ftry="$previous $flag";;
4528                 esac
4529                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4530                         >cpp1.out 2>/dev/null && \
4531                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4532                         >cpp2.out 2>/dev/null && \
4533                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4534                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4535                 then
4536                         cppflags="$cppflags $ftry"
4537                         previous=''
4538                 else
4539                         previous="$flag"
4540                 fi
4541         done
4542         set X $cppflags
4543         shift
4544         cppflags=${1+"$@"}
4545         case "$cppflags" in
4546         *-*)  echo "They appear to be: $cppflags";;
4547         esac
4548         $rm -f cpp.c cpp?.out
4549         ;;
4550 esac
4551
4552 : flags used in final linking phase
4553 case "$ldflags" in
4554 '') if ./venix; then
4555                 dflt='-i -z'
4556         else
4557                 dflt=''
4558         fi
4559         case "$ccflags" in
4560         *-posix*) dflt="$dflt -posix" ;;
4561         esac
4562         ;;
4563 *) dflt="$ldflags";;
4564 esac
4565
4566 : Try to guess additional flags to pick up local libraries.
4567 for thislibdir in $libpth; do
4568         case " $loclibpth " in
4569         *" $thislibdir "*)
4570                 case "$dflt " in 
4571                 *"-L$thislibdir "*) ;;
4572                 *)  dflt="$dflt -L$thislibdir" ;;
4573                 esac
4574                 ;;
4575         esac
4576 done
4577
4578 case "$dflt" in
4579 '') dflt='none' ;;
4580 esac
4581
4582 $cat <<EOH
4583
4584 Your C linker may need flags.  For this question you should
4585 include -L/whatever and any other flags used by the C linker, but you
4586 should NOT include libraries like -lwhatever.
4587
4588 Make sure you include the appropriate -L/path flags if your C linker
4589 does not normally search all of the directories you specified above,
4590 namely
4591         $libpth
4592 To use no flags, specify the word "none".
4593
4594 EOH
4595
4596 rp="Any additional ld flags (NOT including libraries)?"
4597 . ./myread
4598 case "$ans" in
4599 none) ldflags='';;
4600 *) ldflags="$ans";;
4601 esac
4602 rmlist="$rmlist pdp11"
4603
4604 : coherency check
4605 echo " "
4606 echo "Checking your choice of C compiler and flags for coherency..." >&4
4607 $cat > try.c <<'EOF'
4608 #include <stdio.h>
4609 int main() { printf("Ok\n"); exit(0); }
4610 EOF
4611 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4612 shift
4613 $cat >try.msg <<'EOM'
4614 I've tried to compile and run the following simple program:
4615
4616 EOM
4617 $cat try.c >> try.msg
4618
4619 $cat >> try.msg <<EOM
4620
4621 I used the command:
4622
4623         $*
4624         $run ./try
4625
4626 and I got the following output:
4627
4628 EOM
4629 dflt=y
4630 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4631         if $sh -c "$run ./try" >>try.msg 2>&1; then
4632                 xxx=`$run ./try`
4633                 case "$xxx" in
4634                 "Ok") dflt=n ;;
4635                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4636                         case " $libs " in
4637                         *" -lsfio "*)
4638                                 cat >> try.msg <<'EOQS'
4639 If $libs contains -lsfio, and sfio is mis-configured, then it
4640 sometimes (apparently) runs and exits with a 0 status, but with no
4641 output!  It may have to do with sfio's use of _exit vs. exit.
4642
4643 EOQS
4644                                 rp="You have a big problem.  Shall I abort Configure"
4645                                 dflt=y
4646                                 ;;
4647                         esac
4648                         ;;
4649                 esac
4650         else
4651                 echo "The program compiled OK, but exited with status $?." >>try.msg
4652                 rp="You have a problem.  Shall I abort Configure"
4653                 dflt=y
4654         fi
4655 else
4656         echo "I can't compile the test program." >>try.msg
4657         rp="You have a BIG problem.  Shall I abort Configure"
4658         dflt=y
4659 fi
4660 case "$dflt" in
4661 y)
4662         $cat try.msg >&4
4663         case "$knowitall" in
4664         '')
4665                 echo "(The supplied flags or libraries might be incorrect.)"
4666                 ;;
4667         *) dflt=n;;
4668         esac
4669         echo " "
4670         . ./myread
4671         case "$ans" in
4672         n*|N*) ;;
4673         *)      echo "Ok.  Stopping Configure." >&4
4674                 exit 1
4675                 ;;
4676         esac
4677         ;;
4678 n) echo "OK, that should do.";;
4679 esac
4680 $rm -f try try.* core
4681
4682 : define a shorthand compile call
4683 compile='
4684 mc_file=$1;
4685 shift;
4686 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4687 : define a shorthand compile call for compilations that should be ok.
4688 compile_ok='
4689 mc_file=$1;
4690 shift;
4691 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4692
4693 : check for lengths of integral types
4694 echo " "
4695 case "$intsize" in
4696 '')
4697         echo "Checking to see how big your integers are..." >&4
4698         $cat >try.c <<'EOCP'
4699 #include <stdio.h>
4700 int main()
4701 {
4702         printf("intsize=%d;\n", (int)sizeof(int));
4703         printf("longsize=%d;\n", (int)sizeof(long));
4704         printf("shortsize=%d;\n", (int)sizeof(short));
4705         exit(0);
4706 }
4707 EOCP
4708         set try
4709         if eval $compile_ok && $run ./try > /dev/null; then
4710                 eval `$run ./try`
4711                 echo "Your integers are $intsize bytes long."
4712                 echo "Your long integers are $longsize bytes long."
4713                 echo "Your short integers are $shortsize bytes long."
4714         else
4715                 $cat >&4 <<EOM
4716 !
4717 Help! I can't compile and run the intsize test program: please enlighten me!
4718 (This is probably a misconfiguration in your system or libraries, and
4719 you really ought to fix it.  Still, I'll try anyway.)
4720 !
4721 EOM
4722                 dflt=4
4723                 rp="What is the size of an integer (in bytes)?"
4724                 . ./myread
4725                 intsize="$ans"
4726                 dflt=$intsize
4727                 rp="What is the size of a long integer (in bytes)?"
4728                 . ./myread
4729                 longsize="$ans"
4730                 dflt=2
4731                 rp="What is the size of a short integer (in bytes)?"
4732                 . ./myread
4733                 shortsize="$ans"
4734         fi
4735         ;;
4736 esac
4737 $rm -f try try.*
4738
4739 : check for void type
4740 echo " "
4741 echo "Checking to see how well your C compiler groks the void type..." >&4
4742 case "$voidflags" in
4743 '')
4744         $cat >try.c <<'EOCP'
4745 #if TRY & 1
4746 void sub() {
4747 #else
4748 sub() {
4749 #endif
4750         extern void moo();      /* function returning void */
4751         void (*goo)();          /* ptr to func returning void */
4752 #if TRY & 8
4753         void *hue;              /* generic ptr */
4754 #endif
4755 #if TRY & 2
4756         void (*foo[10])();
4757 #endif
4758
4759 #if TRY & 4
4760         if(goo == moo) {
4761                 exit(0);
4762         }
4763 #endif
4764         exit(0);
4765 }
4766 int main() { sub(); }
4767 EOCP
4768         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4769                 voidflags=$defvoidused
4770         echo "Good.  It appears to support void to the level $package wants.">&4
4771                 if $contains warning .out >/dev/null 2>&1; then
4772                         echo "However, you might get some warnings that look like this:"
4773                         $cat .out
4774                 fi
4775         else
4776 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4777                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4778                         echo "It supports 1..."
4779                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4780                                 echo "It also supports 2..."
4781                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4782                                         voidflags=7
4783                                         echo "And it supports 4 but not 8 definitely."
4784                                 else
4785                                         echo "It doesn't support 4..."
4786                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4787                                                 voidflags=11
4788                                                 echo "But it supports 8."
4789                                         else
4790                                                 voidflags=3
4791                                                 echo "Neither does it support 8."
4792                                         fi
4793                                 fi
4794                         else
4795                                 echo "It does not support 2..."
4796                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4797                                         voidflags=13
4798                                         echo "But it supports 4 and 8."
4799                                 else
4800                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4801                                                 voidflags=5
4802                                                 echo "And it supports 4 but has not heard about 8."
4803                                         else
4804                                                 echo "However it supports 8 but not 4."
4805                                         fi
4806                                 fi
4807                         fi
4808                 else
4809                         echo "There is no support at all for void."
4810                         voidflags=0
4811                 fi
4812         fi
4813 esac
4814 case "$voidflags" in
4815 "$defvoidused") ;;
4816 *)      $cat >&4 <<'EOM'
4817   Support flag bits are:
4818     1: basic void declarations.
4819     2: arrays of pointers to functions returning void.
4820     4: operations between pointers to and addresses of void functions.
4821     8: generic void pointers.
4822 EOM
4823         dflt="$voidflags";
4824         rp="Your void support flags add up to what?"
4825         . ./myread
4826         voidflags="$ans"
4827         ;;
4828 esac
4829 $rm -f try.* .out
4830
4831 : check for length of pointer
4832 echo " "
4833 case "$ptrsize" in
4834 '')
4835         echo "Checking to see how big your pointers are..." >&4
4836         if test "$voidflags" -gt 7; then
4837                 echo '#define VOID_PTR char *' > try.c
4838         else
4839                 echo '#define VOID_PTR void *' > try.c
4840         fi
4841         $cat >>try.c <<'EOCP'
4842 #include <stdio.h>
4843 int main()
4844 {
4845     printf("%d\n", (int)sizeof(VOID_PTR));
4846     exit(0);
4847 }
4848 EOCP
4849         set try
4850         if eval $compile_ok; then
4851                 ptrsize=`$run ./try`
4852                 echo "Your pointers are $ptrsize bytes long."
4853         else
4854                 dflt='4'
4855                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4856                 rp="What is the size of a pointer (in bytes)?"
4857                 . ./myread
4858                 ptrsize="$ans"
4859         fi
4860         ;;
4861 esac
4862 $rm -f try.c try
4863
4864 : check for long long
4865 echo " "
4866 echo "Checking to see if you have long long..." >&4
4867 echo 'int main() { long long x = 7; return 0; }' > try.c
4868 set try
4869 if eval $compile; then
4870         val="$define"
4871         echo "You have long long."
4872 else
4873         val="$undef"
4874         echo "You do not have long long."
4875 fi
4876 $rm try.*
4877 set d_longlong
4878 eval $setvar
4879
4880 : check for length of long long
4881 case "${d_longlong}${longlongsize}" in
4882 $define)
4883         echo " "
4884         echo "Checking to see how big your long longs are..." >&4
4885         $cat >try.c <<'EOCP'
4886 #include <stdio.h>
4887 int main()
4888 {
4889     printf("%d\n", (int)sizeof(long long));
4890     return(0);
4891 }
4892 EOCP
4893         set try
4894         if eval $compile_ok; then
4895                 longlongsize=`$run ./try`
4896                 echo "Your long longs are $longlongsize bytes long."
4897         else
4898                 dflt='8'
4899                 echo " "
4900                 echo "(I can't seem to compile the test program.  Guessing...)"
4901                 rp="What is the size of a long long (in bytes)?"
4902                 . ./myread
4903                 longlongsize="$ans"
4904         fi
4905         if $test "X$longsize" = "X$longlongsize"; then
4906                 echo "(That isn't any different from an ordinary long.)"
4907         fi      
4908         ;;
4909 esac
4910 $rm -f try.* try
4911
4912 : determine filename position in cpp output
4913 echo " "
4914 echo "Computing filename position in cpp output for #include directives..." >&4
4915 case "$osname" in
4916 vos) testaccess=-e ;;
4917 *)   testaccess=-r ;;
4918 esac
4919 echo '#include <stdio.h>' > foo.c
4920 $cat >fieldn <<EOF
4921 $startsh
4922 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4923 $grep '^[       ]*#.*stdio\.h' | \
4924 while read cline; do
4925         pos=1
4926         set \$cline
4927         while $test \$# -gt 0; do
4928                 if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
4929                         echo "\$pos"
4930                         exit 0
4931                 fi
4932                 shift
4933                 pos=\`expr \$pos + 1\`
4934         done
4935 done
4936 EOF
4937 chmod +x fieldn
4938 fieldn=`./fieldn`
4939 $rm -f foo.c fieldn
4940 case $fieldn in
4941 '') pos='???';;
4942 1) pos=first;;
4943 2) pos=second;;
4944 3) pos=third;;
4945 *) pos="${fieldn}th";;
4946 esac
4947 echo "Your cpp writes the filename in the $pos field of the line."
4948
4949 case "$osname" in
4950 vos) cppfilter="tr '\\\\>' '/' |" ;; # path component separator is >
4951 *)   cppfilter='' ;;
4952 esac
4953 : locate header file
4954 $cat >findhdr <<EOF
4955 $startsh
4956 wanted=\$1
4957 name=''
4958 for usrincdir in $usrinc
4959 do
4960         if test -f \$usrincdir/\$wanted; then
4961                 echo "\$usrincdir/\$wanted"
4962                 exit 0
4963         fi
4964 done
4965 awkprg='{ print \$$fieldn }'
4966 echo "#include <\$wanted>" > foo\$\$.c
4967 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4968 $cppfilter $grep "^[    ]*#.*\$wanted" | \
4969 while read cline; do
4970         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4971         case "\$name" in
4972         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4973         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4974         *) exit 2;;
4975         esac;
4976 done;
4977 #
4978 # status = 0: grep returned 0 lines, case statement not executed
4979 # status = 1: headerfile found
4980 # status = 2: while loop executed, no headerfile found
4981 #
4982 status=\$?
4983 $rm -f foo\$\$.c;
4984 if test \$status -eq 1; then
4985         exit 0;
4986 fi
4987 exit 1
4988 EOF
4989 chmod +x findhdr
4990
4991 : define an alternate in-header-list? function
4992 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4993 cont=true; xxf="echo \"<\$1> found.\" >&4";
4994 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4995 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4996 esac;
4997 case $# in 4) instead=instead;; *) instead="at last";; esac;
4998 while $test "$cont"; do
4999         xxx=`./findhdr $1`
5000         var=$2; eval "was=\$$2";
5001         if $test "$xxx" && $test -r "$xxx";
5002         then eval $xxf;
5003         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5004                 cont="";
5005         else eval $xxnf;
5006         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5007         set $yyy; shift; shift; yyy=$@;
5008         case $# in 0) cont="";;
5009         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5010                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5011         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5012                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5013         esac;
5014 done;
5015 while $test "$yyy";
5016 do set $yyy; var=$2; eval "was=\$$2";
5017         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5018         set $yyy; shift; shift; yyy=$@;
5019 done'
5020
5021 : see if inttypes.h is available
5022 : we want a real compile instead of Inhdr because some systems
5023 : have an inttypes.h which includes non-existent headers
5024 echo " "
5025 $cat >try.c <<EOCP
5026 #include <inttypes.h>
5027 int main() {
5028         static int32_t foo32 = 0x12345678;
5029 }
5030 EOCP
5031 set try
5032 if eval $compile; then
5033         echo "<inttypes.h> found." >&4
5034         val="$define"
5035 else
5036         echo "<inttypes.h> NOT found." >&4
5037         val="$undef"
5038 fi
5039 $rm -f try.c try
5040 set i_inttypes
5041 eval $setvar
5042
5043 : check for int64_t
5044 echo " "
5045 echo "Checking to see if you have int64_t..." >&4
5046 $cat >try.c <<EOCP
5047 #include <sys/types.h>
5048 #$i_inttypes I_INTTYPES
5049 #ifdef I_INTTYPES
5050 #include <inttypes.h>
5051 #endif
5052 int main() { int64_t x = 7; }
5053 EOCP
5054 set try
5055 if eval $compile; then
5056         val="$define"
5057         echo "You have int64_t."
5058 else
5059         val="$undef"
5060         echo "You do not have int64_t."
5061 fi
5062 $rm -f try try.*
5063 set d_int64_t
5064 eval $setvar
5065
5066
5067 echo " "
5068 echo "Checking which 64-bit integer type we could use..." >&4
5069
5070 case "$intsize" in
5071 8) val=int
5072    set quadtype
5073    eval $setvar
5074    val='"unsigned int"'
5075    set uquadtype
5076    eval $setvar
5077    quadkind=1
5078    ;;
5079 *) case "$longsize" in
5080    8) val=long
5081       set quadtype
5082       eval $setvar
5083       val='"unsigned long"'
5084       set uquadtype
5085       eval $setvar
5086       quadkind=2
5087       ;;
5088    *) case "$d_longlong:$longlongsize" in
5089       define:8)
5090         val='"long long"'
5091         set quadtype
5092         eval $setvar
5093         val='"unsigned long long"'
5094         set uquadtype
5095         eval $setvar
5096         quadkind=3
5097         ;;
5098       *) case "$d_int64_t" in
5099          define)
5100            val=int64_t
5101            set quadtype
5102            eval $setvar
5103            val=uint64_t
5104            set uquadtype
5105            eval $setvar
5106            quadkind=4
5107            ;;
5108          esac
5109          ;;
5110       esac
5111       ;;
5112    esac
5113    ;;
5114 esac
5115
5116 case "$quadtype" in
5117 '')     echo "Alas, no 64-bit integer types in sight." >&4
5118         d_quad="$undef"
5119         ;;
5120 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5121         d_quad="$define"
5122         ;;
5123 esac
5124
5125
5126 case "$uselonglong" in
5127 "$define"|true|[yY]*)
5128         cat <<EOM >&4
5129
5130 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5131 EOM
5132         use64bitint="$define"
5133         ;;
5134 esac                          
5135 case "$use64bits" in
5136 "$define"|true|[yY]*)
5137         cat <<EOM >&4
5138
5139 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5140 EOM
5141         use64bitint="$define"
5142         ;;
5143 esac                          
5144 case "$use64bitints" in
5145 "$define"|true|[yY]*)
5146         cat <<EOM >&4
5147
5148 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5149 EOM
5150         use64bitint="$define"
5151         ;;
5152 esac                          
5153 case "$use64bitsint" in
5154 "$define"|true|[yY]*)
5155         cat <<EOM >&4
5156
5157 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5158 EOM
5159         use64bitint="$define"
5160         ;;
5161 esac                          
5162 case "$uselonglongs" in
5163 "$define"|true|[yY]*)
5164         cat <<EOM >&4
5165
5166 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5167 EOM
5168         use64bitint="$define"
5169         ;;
5170 esac                          
5171 case "$use64bitsall" in
5172 "$define"|true|[yY]*)
5173         cat <<EOM >&4
5174
5175 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5176 EOM
5177         use64bitall="$define"
5178         ;;
5179 esac                          
5180
5181 case "$ccflags" in
5182 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5183 esac
5184 case "$use64bitall" in
5185 "$define"|true|[yY]*) use64bitint="$define" ;;
5186 esac
5187
5188 case "$longsize" in
5189 8) cat <<EOM
5190
5191 You have natively 64-bit long integers.
5192 EOM
5193    val="$define"
5194    ;;
5195 *) case "$use64bitint" in
5196    "$define"|true|[yY]*) dflt='y';;
5197    *) dflt='n';;
5198    esac
5199    case "$d_quad" in
5200    "$define") ;;
5201    *) dflt='n' ;;
5202    esac
5203    cat <<EOM
5204
5205 Perl can be built to take advantage of 64-bit integer types
5206 on some systems.  To do so, Configure can be run with -Duse64bitint.
5207 Choosing this option will most probably introduce binary incompatibilities.
5208
5209 If this doesn't make any sense to you, just accept the default '$dflt'.
5210 (The default has been chosen based on your configuration.)
5211 EOM
5212    rp='Try to use 64-bit integers, if available?'
5213    . ./myread
5214    case "$ans" in
5215    [yY]*) val="$define" ;;
5216    *)     val="$undef"  ;;
5217    esac
5218    ;;
5219 esac
5220 set use64bitint
5221 eval $setvar
5222
5223 case "$use64bitall" in
5224 "$define"|true|[yY]*) dflt='y' ;;
5225 *) case "$longsize" in
5226    8) dflt='y' ;;
5227    *) dflt='n' ;;
5228    esac
5229    ;;
5230 esac    
5231 cat <<EOM
5232
5233 You may also choose to try maximal 64-bitness.  It means using as much
5234 64-bitness as possible on the platform.  This in turn means even more
5235 binary incompatibilities.  On the other hand, your platform may not
5236 have any more 64-bitness available than what you already have chosen.
5237
5238 If this doesn't make any sense to you, just accept the default '$dflt'.
5239 (The default has been chosen based on your configuration.)
5240 EOM
5241 rp='Try to use maximal 64-bit support, if available?'
5242 . ./myread
5243 case "$ans" in
5244 [yY]*) val="$define" ;;
5245 *)     val="$undef"  ;;
5246 esac
5247 set use64bitall
5248 eval $setvar
5249 case "$use64bitall" in
5250 "$define")
5251         case "$use64bitint" in
5252         "$undef")
5253                 cat <<EOM
5254
5255 Since you have chosen a maximally 64-bit build, I'm also turning on
5256 the use of 64-bit integers.
5257 EOM
5258                 use64bitint="$define" ;;
5259         esac
5260         ;;
5261 esac
5262
5263 case "$use64bitall" in
5264 "$define"|true|[yY]*)
5265         case "$ptrsize" in
5266         4)      cat <<EOM >&4
5267
5268 *** You have chosen a maximally 64-bit build, but your pointers
5269 *** are only 4 bytes wide, disabling maximal 64-bitness.
5270
5271 EOM
5272                 use64bitall="$undef"
5273                 case "$use64bitint" in
5274                 "$define"|true|[yY]*) ;;
5275                 *)      cat <<EOM >&4
5276
5277 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5278
5279 EOM
5280                         use64bitint="$define"
5281                         ;;
5282                 esac
5283                 ;;
5284         esac
5285         ;;
5286 esac
5287
5288 case "$use64bitint" in
5289 "$define"|true|[yY]*)
5290 : Look for a hint-file generated 'call-back-unit'.  If the
5291 : user has specified that a 64-bit perl is to be built,
5292 : we may need to set or change some other defaults.
5293         if $test -f use64bitint.cbu; then
5294                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5295                 . ./use64bitint.cbu
5296         fi
5297         case "$longsize" in
5298         4) case "$archname64" in
5299            '') archname64=64int ;;
5300            esac
5301            ;;
5302         esac
5303         ;;
5304 esac
5305
5306 case "$use64bitall" in
5307 "$define"|true|[yY]*)
5308 : Look for a hint-file generated 'call-back-unit'.  If the
5309 : user has specified that a maximally 64-bit perl is to be built,
5310 : we may need to set or change some other defaults.
5311         if $test -f use64bitall.cbu; then
5312                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5313                 . ./use64bitall.cbu
5314         fi
5315         case "$longsize" in
5316         4) case "$archname64" in
5317            ''|64int) archname64=64all ;;
5318            esac
5319            ;;
5320         esac
5321         ;;
5322 esac
5323
5324 echo " "
5325 echo "Checking for GNU C Library..." >&4
5326 cat >try.c <<EOM
5327 #include <stdio.h>
5328 int main()
5329 {
5330 #ifdef __GLIBC__
5331     exit(0);
5332 #else
5333     exit(1);
5334 #endif
5335 }
5336 EOM
5337 set try
5338 if eval $compile_ok && $run ./try; then
5339         val="$define"
5340         echo "You are using the GNU C Library"
5341 else
5342         val="$undef"
5343         echo "You are not using the GNU C Library"
5344 fi
5345 $rm -f try try.*
5346 set d_gnulibc
5347 eval $setvar
5348
5349 : see if nm is to be used to determine whether a symbol is defined or not
5350 case "$usenm" in
5351 '')
5352         dflt=''
5353         case "$d_gnulibc" in
5354         "$define")
5355                 echo " "
5356                 echo "nm probably won't work on the GNU C Library." >&4
5357                 dflt=n
5358                 ;;
5359         esac
5360         case "$dflt" in
5361         '') 
5362                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5363                         echo " "
5364                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5365                         echo "'nm' won't be sufficient on this sytem." >&4
5366                         dflt=n
5367                 fi
5368                 ;;
5369         esac
5370         case "$dflt" in
5371         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5372                 if $test $dflt -gt 20; then
5373                         dflt=y
5374                 else
5375                         dflt=n
5376                 fi
5377                 ;;
5378         esac
5379         ;;
5380 *)
5381         case "$usenm" in
5382         true|$define) dflt=y;;
5383         *) dflt=n;;
5384         esac
5385         ;;
5386 esac
5387 $cat <<EOM
5388
5389 I can use $nm to extract the symbols from your C libraries. This
5390 is a time consuming task which may generate huge output on the disk (up
5391 to 3 megabytes) but that should make the symbols extraction faster. The
5392 alternative is to skip the 'nm' extraction part and to compile a small
5393 test program instead to determine whether each symbol is present. If
5394 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5395 this may be the best solution.
5396
5397 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5398
5399 EOM
5400 rp="Shall I use $nm to extract C symbols from the libraries?"
5401 . ./myread
5402 case "$ans" in
5403 [Nn]*) usenm=false;;
5404 *) usenm=true;;
5405 esac
5406
5407 runnm=$usenm
5408 case "$reuseval" in
5409 true) runnm=false;;
5410 esac
5411
5412 : nm options which may be necessary
5413 case "$nm_opt" in
5414 '') if $test -f /mach_boot; then
5415                 nm_opt=''       # Mach
5416         elif $test -d /usr/ccs/lib; then
5417                 nm_opt='-p'     # Solaris (and SunOS?)
5418         elif $test -f /dgux; then
5419                 nm_opt='-p'     # DG-UX
5420         elif $test -f /lib64/rld; then
5421                 nm_opt='-p'     # 64-bit Irix
5422         else
5423                 nm_opt=''
5424         fi;;
5425 esac
5426
5427 : nm options which may be necessary for shared libraries but illegal
5428 : for archive libraries.  Thank you, Linux.
5429 case "$nm_so_opt" in
5430 '')     case "$myuname" in
5431         *linux*)
5432                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5433                         nm_so_opt='--dynamic'
5434                 fi
5435                 ;;
5436         esac
5437         ;;
5438 esac
5439
5440 case "$runnm" in
5441 true)
5442 : get list of predefined functions in a handy place
5443 echo " "
5444 case "$libc" in
5445 '') libc=unknown
5446         case "$libs" in
5447         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5448         esac
5449         ;;
5450 esac
5451 case "$libs" in
5452 '') ;;
5453 *)  for thislib in $libs; do
5454         case "$thislib" in
5455         -lc|-lc_s)
5456                 : Handle C library specially below.
5457                 ;;
5458         -l*)
5459                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5460                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5461                         :
5462                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5463                         :
5464                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5465                         :
5466                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5467                         :
5468                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5469                         :
5470                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5471                         :
5472                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5473                         :
5474                 else
5475                         try=''
5476                 fi
5477                 libnames="$libnames $try"
5478                 ;;
5479         *) libnames="$libnames $thislib" ;;
5480         esac
5481         done
5482         ;;
5483 esac
5484 xxx=normal
5485 case "$libc" in
5486 unknown)
5487         set /lib/libc.$so
5488         for xxx in $libpth; do
5489                 $test -r $1 || set $xxx/libc.$so
5490                 : The messy sed command sorts on library version numbers.
5491                 $test -r $1 || \
5492                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5493                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5494                                 h
5495                                 s/[0-9][0-9]*/0000&/g
5496                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5497                                 G
5498                                 s/\n/ /' | \
5499                          $sort | $sed -e 's/^.* //'`
5500                 eval set \$$#
5501         done
5502         $test -r $1 || set /usr/ccs/lib/libc.$so
5503         $test -r $1 || set /lib/libsys_s$_a
5504         ;;
5505 *)
5506         set blurfl
5507         ;;
5508 esac
5509 if $test -r "$1"; then
5510         echo "Your (shared) C library seems to be in $1."
5511         libc="$1"
5512 elif $test -r /lib/libc && $test -r /lib/clib; then
5513         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5514         xxx=apollo
5515         libc='/lib/clib /lib/libc'
5516         if $test -r /lib/syslib; then
5517                 echo "(Your math library is in /lib/syslib.)"
5518                 libc="$libc /lib/syslib"
5519         fi
5520 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5521         echo "Your C library seems to be in $libc, as you said before."
5522 elif $test -r $incpath/usr/lib/libc$_a; then
5523         libc=$incpath/usr/lib/libc$_a;
5524         echo "Your C library seems to be in $libc.  That's fine."
5525 elif $test -r /lib/libc$_a; then
5526         libc=/lib/libc$_a;
5527         echo "Your C library seems to be in $libc.  You're normal."
5528 else
5529         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5530                 :
5531         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5532                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5533         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5534                 :
5535         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5536                 :
5537         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5538                 :
5539         else
5540                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5541         fi
5542         if $test -r "$tans"; then
5543                 echo "Your C library seems to be in $tans, of all places."
5544                 libc=$tans
5545         else
5546                 libc='blurfl'
5547         fi
5548 fi
5549 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5550         dflt="$libc"
5551         cat <<EOM
5552
5553 If the guess above is wrong (which it might be if you're using a strange
5554 compiler, or your machine supports multiple models), you can override it here.
5555
5556 EOM
5557 else
5558         dflt=''
5559         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5560         cat >&4 <<EOM
5561 I can't seem to find your C library.  I've looked in the following places:
5562
5563 EOM
5564         $sed 's/^/      /' libpath
5565         cat <<EOM
5566
5567 None of these seems to contain your C library. I need to get its name...
5568
5569 EOM
5570 fi
5571 fn=f
5572 rp='Where is your C library?'
5573 . ./getfile
5574 libc="$ans"
5575
5576 echo " "
5577 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5578 set X `cat libnames`
5579 shift
5580 xxx=files
5581 case $# in 1) xxx=file; esac
5582 echo "Extracting names from the following $xxx for later perusal:" >&4
5583 echo " "
5584 $sed 's/^/      /' libnames >&4
5585 echo " "
5586 $echo $n "This may take a while...$c" >&4
5587
5588 for file in $*; do
5589         case $file in
5590         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5591         *) $nm $nm_opt $file 2>/dev/null;;
5592         esac
5593 done >libc.tmp
5594
5595 $echo $n ".$c"
5596 $grep fprintf libc.tmp > libc.ptf
5597 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5598 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5599 xxx='[ADTSIW]'
5600 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5601         eval $xscan;\
5602         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5603                 eval $xrun
5604 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5605         eval $xscan;\
5606         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5607                 eval $xrun
5608 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5609         eval $xscan;\
5610         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5611                 eval $xrun
5612 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5613         eval $xscan;\
5614         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5615                 eval $xrun
5616 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5617         eval $xscan;\
5618         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5619                 eval $xrun
5620 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5621         eval $xscan;\
5622         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5623                 eval $xrun
5624 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5625                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5626         eval $xscan;\
5627         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5628                 eval $xrun
5629 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5630         eval $xscan;\
5631         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5632                 eval $xrun
5633 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5634         eval $xscan;\
5635         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5636                 eval $xrun
5637 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5638         eval $xscan;\
5639         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5640                 eval $xrun
5641 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5642         eval $xscan;\
5643         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5644                 eval $xrun
5645 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5646         eval $xscan;\
5647         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5648                 eval $xrun
5649 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5650         eval $xscan;\
5651         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5652                 eval $xrun
5653 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5654         eval $xscan;\
5655         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5656                 eval $xrun
5657 else
5658         $nm -p $* 2>/dev/null >libc.tmp
5659         $grep fprintf libc.tmp > libc.ptf
5660         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5661                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5662         then
5663                 nm_opt='-p'
5664                 eval $xrun
5665         else
5666                 echo " "
5667                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5668                 com=''
5669                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5670                         for thisname in $libnames $libc; do
5671                                 $ar t $thisname >>libc.tmp
5672                         done
5673                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5674                         echo "Ok." >&4
5675                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5676                         # Repeat libc to extract forwarders to DLL entries too
5677                         for thisname in $libnames $libc; do
5678                                 $ar tv $thisname >>libc.tmp
5679                                 # Revision 50 of EMX has bug in $ar.
5680                                 # it will not extract forwarders to DLL entries
5681                                 # Use emximp which will extract exactly them.
5682                                 emximp -o tmp.imp $thisname \
5683                                     2>/dev/null && \
5684                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5685                                     < tmp.imp >>libc.tmp
5686                                 $rm tmp.imp
5687                         done
5688                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5689                         echo "Ok." >&4
5690                 else
5691                         echo "$ar didn't seem to work right." >&4
5692                         echo "Maybe this is a Cray...trying bld instead..." >&4
5693                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5694                         then
5695                                 for thisname in $libnames; do
5696                                         bld t $libnames | \
5697                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5698                                         $ar t $thisname >>libc.tmp
5699                                 done
5700                                 echo "Ok." >&4
5701                         else
5702                                 echo "That didn't work either.  Giving up." >&4
5703                                 exit 1
5704                         fi
5705                 fi
5706         fi
5707 fi
5708 nm_extract="$com"
5709 if $test -f /lib/syscalls.exp; then
5710         echo " "
5711         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5712         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5713 fi
5714 ;;
5715 esac
5716 $rm -f libnames libpath
5717
5718 : is a C symbol defined?
5719 csym='tlook=$1;
5720 case "$3" in
5721 -v) tf=libc.tmp; tc=""; tdc="";;
5722 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5723 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5724 esac;
5725 tx=yes;
5726 case "$reuseval-$4" in
5727 true-) ;;
5728 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5729 esac;
5730 case "$tx" in
5731 yes)
5732         case "$runnm" in
5733         true)
5734                 if $contains $tlook $tf >/dev/null 2>&1;
5735                 then tval=true;
5736                 else tval=false;
5737                 fi;;
5738         *)
5739                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5740                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5741                 then tval=true;
5742                 else tval=false;
5743                 fi;
5744                 $rm -f t t.c;;
5745         esac;;
5746 *)
5747         case "$tval" in
5748         $define) tval=true;;
5749         *) tval=false;;
5750         esac;;
5751 esac;
5752 eval "$2=$tval"'
5753
5754 : define an is-in-libc? function
5755 inlibc='echo " "; td=$define; tu=$undef;
5756 sym=$1; var=$2; eval "was=\$$2";
5757 tx=yes;
5758 case "$reuseval$was" in
5759 true) ;;
5760 true*) tx=no;;
5761 esac;
5762 case "$tx" in
5763 yes)
5764         set $sym tres -f;
5765         eval $csym;
5766         case "$tres" in
5767         true)
5768                 echo "$sym() found." >&4;
5769                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5770         *)
5771                 echo "$sym() NOT found." >&4;
5772                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5773         esac;;
5774 *)
5775         case "$was" in
5776         $define) echo "$sym() found." >&4;;
5777         *) echo "$sym() NOT found." >&4;;
5778         esac;;
5779 esac'
5780
5781 : see if sqrtl exists
5782 set sqrtl d_sqrtl
5783 eval $inlibc
5784
5785 : check for length of double
5786 echo " "
5787 case "$doublesize" in
5788 '')
5789         echo "Checking to see how big your double precision numbers are..." >&4
5790         $cat >try.c <<'EOCP'
5791 #include <stdio.h>
5792 int main()
5793 {
5794     printf("%d\n", (int)sizeof(double));
5795     exit(0);
5796 }
5797 EOCP
5798         set try
5799         if eval $compile_ok; then
5800                 doublesize=`$run ./try`
5801                 echo "Your double is $doublesize bytes long."
5802         else
5803                 dflt='8'
5804                 echo "(I can't seem to compile the test program.  Guessing...)"
5805                 rp="What is the size of a double precision number (in bytes)?"
5806                 . ./myread
5807                 doublesize="$ans"
5808         fi
5809         ;;
5810 esac
5811 $rm -f try.c try
5812
5813 : check for long doubles
5814 echo " "
5815 echo "Checking to see if you have long double..." >&4
5816 echo 'int main() { long double x = 7.0; }' > try.c
5817 set try
5818 if eval $compile; then
5819         val="$define"
5820         echo "You have long double."
5821 else
5822         val="$undef"
5823         echo "You do not have long double."
5824 fi
5825 $rm try.*
5826 set d_longdbl
5827 eval $setvar
5828
5829 : check for length of long double
5830 case "${d_longdbl}${longdblsize}" in
5831 $define)
5832         echo " "
5833         echo "Checking to see how big your long doubles are..." >&4
5834         $cat >try.c <<'EOCP'
5835 #include <stdio.h>
5836 int main()
5837 {
5838         printf("%d\n", sizeof(long double));
5839 }
5840 EOCP
5841         set try
5842         set try
5843         if eval $compile; then
5844                 longdblsize=`$run ./try`
5845                 echo "Your long doubles are $longdblsize bytes long."
5846         else
5847                 dflt='8'
5848                 echo " "
5849                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5850                 rp="What is the size of a long double (in bytes)?"
5851                 . ./myread
5852                 longdblsize="$ans"
5853         fi
5854         if $test "X$doublesize" = "X$longdblsize"; then
5855                 echo "(That isn't any different from an ordinary double.)"
5856         fi      
5857         ;;
5858 esac
5859 $rm -f try.* try
5860
5861 echo " "
5862
5863 if $test X"$d_longdbl" = X"$define"; then
5864
5865 echo "Checking how to print long doubles..." >&4
5866
5867 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
5868         $cat >try.c <<'EOCP'
5869 #include <sys/types.h>
5870 #include <stdio.h>
5871 int main() {
5872   double d = 123.456;
5873   printf("%.3f\n", d);
5874 }
5875 EOCP
5876         set try
5877         if eval $compile; then
5878                 yyy=`$run ./try`
5879                 case "$yyy" in
5880                 123.456)
5881                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
5882                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
5883                         echo "We will use %f."
5884                         ;;
5885                 esac
5886         fi
5887 fi
5888
5889 if $test X"$sPRIfldbl" = X; then
5890         $cat >try.c <<'EOCP'
5891 #include <sys/types.h>
5892 #include <stdio.h>
5893 int main() {
5894   long double d = 123.456;
5895   printf("%.3Lf\n", d);
5896 }
5897 EOCP
5898         set try
5899         if eval $compile; then
5900                 yyy=`$run ./try`
5901                 case "$yyy" in
5902                 123.456)
5903                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
5904                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
5905                         echo "We will use %Lf."
5906                         ;;
5907                 esac
5908         fi
5909 fi
5910
5911 if $test X"$sPRIfldbl" = X; then
5912         $cat >try.c <<'EOCP'
5913 #include <sys/types.h>
5914 #include <stdio.h>
5915 int main() {
5916   long double d = 123.456;
5917   printf("%.3llf\n", d);
5918 }
5919 EOCP
5920         set try
5921         if eval $compile; then
5922                 yyy=`$run ./try`
5923                 case "$yyy" in
5924                 123.456)
5925                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
5926                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
5927                         echo "We will use %llf."
5928                         ;;
5929                 esac
5930         fi
5931 fi
5932
5933 if $test X"$sPRIfldbl" = X; then
5934         $cat >try.c <<'EOCP'
5935 #include <sys/types.h>
5936 #include <stdio.h>
5937 int main() {
5938   long double d = 123.456;
5939   printf("%.3lf\n", d);
5940 }
5941 EOCP
5942         set try
5943         if eval $compile; then
5944                 yyy=`$run ./try`
5945                 case "$yyy" in
5946                 123.456)
5947                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
5948                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
5949                         echo "We will use %lf."
5950                         ;;
5951                 esac
5952         fi
5953 fi
5954
5955 if $test X"$sPRIfldbl" = X; then
5956         echo "Cannot figure out how to print long doubles." >&4
5957 else
5958         sSCNfldbl=$sPRIfldbl    # expect consistency
5959 fi
5960
5961 $rm -f try try.*
5962
5963 fi # d_longdbl
5964
5965 case "$sPRIfldbl" in
5966 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
5967         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
5968         d_SCNfldbl="$undef";
5969         ;;
5970 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
5971         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
5972         d_SCNfldbl="$define";
5973         ;;
5974 esac
5975
5976 : see if modfl exists
5977 set modfl d_modfl
5978 eval $inlibc
5979
5980 d_modfl_pow32_bug="$undef"
5981
5982 case "$d_longdbl$d_modfl" in
5983 $define$define)
5984         $cat <<EOM
5985 Checking to see whether your modfl() is okay for large values...
5986 EOM
5987 $cat >try.c <<EOCP
5988 #include <math.h> 
5989 #include <stdio.h>
5990 int main() {
5991     long double nv = 4294967303.15;
5992     long double v, w;
5993     v = modfl(nv, &w);         
5994 #ifdef __GLIBC__
5995     printf("glibc");
5996 #endif
5997     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
5998     return 0;
5999 }
6000 EOCP
6001         case "$osname:$gccversion" in
6002         aix:)   saveccflags="$ccflags"
6003                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
6004         esac
6005         set try
6006         if eval $compile; then
6007                 foo=`$run ./try`
6008                 case "$foo" in
6009                 *" 4294967303.150000 1.150000 4294967302.000000")
6010                         echo >&4 "Your modfl() is broken for large values."
6011                         d_modfl_pow32_bug="$define"
6012                         case "$foo" in
6013                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
6014                         ;;
6015                         esac
6016                         ;;
6017                 *" 4294967303.150000 0.150000 4294967303.000000")
6018                         echo >&4 "Your modfl() seems okay for large values."
6019                         ;;
6020                 *)      echo >&4 "I don't understand your modfl() at all."
6021                         d_modfl="$undef"
6022                         ;;
6023                 esac
6024                 $rm -f try.* try core core.try.*
6025         else
6026                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
6027                 d_modfl="$undef"
6028         fi
6029         case "$osname:$gccversion" in
6030         aix:)   ccflags="$saveccflags" ;; # restore
6031         esac
6032         ;;
6033 esac
6034
6035 case "$ccflags" in
6036 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6037 esac
6038
6039 case "$uselongdouble" in
6040 $define|true|[yY]*)     dflt='y';;
6041 *) dflt='n';;
6042 esac
6043 cat <<EOM
6044
6045 Perl can be built to take advantage of long doubles which
6046 (if available) may give more accuracy and range for floating point numbers.
6047
6048 If this doesn't make any sense to you, just accept the default '$dflt'.
6049 EOM
6050 rp='Try to use long doubles if available?'
6051 . ./myread
6052 case "$ans" in
6053 y|Y)    val="$define"   ;;
6054 *)      val="$undef"    ;;
6055 esac
6056 set uselongdouble
6057 eval $setvar
6058
6059 case "$uselongdouble" in
6060 true|[yY]*) uselongdouble="$define" ;;
6061 esac
6062
6063 case "$uselongdouble" in
6064 $define)
6065 : Look for a hint-file generated 'call-back-unit'.  If the
6066 : user has specified that long doubles should be used,
6067 : we may need to set or change some other defaults.
6068         if $test -f uselongdouble.cbu; then
6069                 echo "Your platform has some specific hints for long doubles, using them..."
6070                 . ./uselongdouble.cbu
6071         else
6072                 $cat <<EOM
6073 (Your platform doesn't have any specific hints for long doubles.)
6074 EOM
6075         fi
6076         ;;
6077 esac
6078
6079 message=X
6080 case "$uselongdouble:$d_sqrtl:$d_modfl" in
6081 $define:$define:$define)
6082         : You have both
6083         ;;
6084 $define:$define:$undef)
6085         message="I could not find modfl"
6086         ;;
6087 $define:$undef:$define)
6088         message="I could not find sqrtl"
6089         ;;
6090 $define:$undef:$undef)
6091         message="I found neither sqrtl nor modfl"
6092         ;;
6093 esac
6094
6095 if $test "$message" != X; then
6096         $cat <<EOM >&4
6097
6098 *** You requested the use of long doubles but you do not seem to have
6099 *** the mathematic functions for long doubles.
6100 *** ($message)
6101 *** I'm disabling the use of long doubles.
6102
6103 EOM
6104
6105         uselongdouble=$undef
6106 fi
6107
6108 case "$useperlio" in
6109 $define|true|[yY]*|'')  dflt='y';;
6110 *) dflt='n';;
6111 esac
6112 cat <<EOM
6113
6114 Previous version of $package used the standard IO mechanisms as
6115 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
6116 alternate IO mechanisms via the PerlIO abstraction layer, but the
6117 stdio mechanism is still available if needed.  The abstraction layer
6118 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
6119 Using PerlIO with sfio may cause problems with some extension modules.
6120
6121 If this doesn't make any sense to you, just accept the default '$dflt'.
6122 EOM
6123 rp='Use the PerlIO abstraction layer?'
6124 . ./myread
6125 case "$ans" in
6126 y|Y) 
6127         val="$define"
6128         ;;
6129 *)      
6130         echo "Ok, doing things the stdio way."
6131         val="$undef"
6132         ;;
6133 esac
6134 set useperlio
6135 eval $setvar 
6136
6137 case "$usesocks" in
6138 $define|true|[yY]*)
6139         case "$useperlio" in
6140         $define|true|[yY]*) ;;
6141         *)      cat >&4 <<EOM
6142
6143 You are using the SOCKS proxy protocol library which means that you
6144 should also use the PerlIO layer.  You may be headed for trouble.
6145
6146 EOM
6147                 ;;
6148         esac
6149         ;;
6150 esac
6151
6152         
6153 : determine the architecture name
6154 echo " "
6155 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
6156         tarch=`arch`"-$osname"
6157 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
6158         if uname -m > tmparch 2>&1 ; then
6159                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
6160                         -e 's/$/'"-$osname/" tmparch`
6161         else
6162                 tarch="$osname"
6163         fi
6164         $rm -f tmparch
6165 else
6166         tarch="$osname"
6167 fi
6168 case "$myarchname" in
6169 ''|"$tarch") ;;
6170 *)
6171         echo "(Your architecture name used to be $myarchname.)"
6172         archname=''
6173         ;;
6174 esac
6175 case "$targetarch" in
6176 '') ;;
6177 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
6178 esac
6179 myarchname="$tarch"
6180 case "$archname" in
6181 '') dflt="$tarch";;
6182 *) dflt="$archname";;
6183 esac
6184 rp='What is your architecture name'
6185 . ./myread
6186 archname="$ans"
6187 case "$usethreads" in
6188 $define)
6189         echo "Threads selected." >&4
6190         case "$archname" in
6191         *-thread*) echo "...and architecture name already has -thread." >&4
6192                 ;;
6193         *)      archname="$archname-thread"
6194                 echo "...setting architecture name to $archname." >&4
6195                 ;;
6196         esac
6197         ;;
6198 esac
6199 case "$usemultiplicity" in
6200 $define)
6201         echo "Multiplicity selected." >&4
6202         case "$archname" in
6203         *-multi*) echo "...and architecture name already has -multi." >&4
6204                 ;;
6205         *)      archname="$archname-multi"
6206                 echo "...setting architecture name to $archname." >&4
6207                 ;;
6208         esac
6209         ;;
6210 esac
6211 case "$use64bitint$use64bitall" in
6212 *"$define"*)
6213         case "$archname64" in
6214         '')
6215                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6216                 ;;
6217         *)
6218                 case "$use64bitint" in
6219                 "$define") echo "64 bit integers selected." >&4 ;;
6220                 esac
6221                 case "$use64bitall" in
6222                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6223                 esac
6224                 case "$archname" in
6225                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6226                         ;;
6227                 *)      archname="$archname-$archname64"
6228                         echo "...setting architecture name to $archname." >&4
6229                         ;;
6230                 esac
6231                 ;;
6232         esac
6233 esac
6234 case "$uselongdouble" in
6235 $define)
6236         echo "Long doubles selected." >&4
6237         case "$longdblsize" in
6238         $doublesize)
6239                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
6240                 ;;
6241         *)
6242                 case "$archname" in
6243                 *-ld*) echo "...and architecture name already has -ld." >&4
6244                         ;;
6245                 *)      archname="$archname-ld"
6246                         echo "...setting architecture name to $archname." >&4
6247                         ;;
6248                 esac
6249                 ;;
6250         esac
6251         ;;
6252 esac
6253 case "$useperlio" in
6254 $define)
6255         echo "Perlio selected." >&4
6256         ;;
6257 *)
6258         echo "Perlio not selected, using stdio." >&4
6259         case "$archname" in
6260         *-stdio*) echo "...and architecture name already has -stdio." >&4
6261                 ;;
6262         *)      archname="$archname-stdio"
6263                 echo "...setting architecture name to $archname." >&4
6264                 ;;
6265         esac
6266         ;;
6267 esac
6268
6269 : determine root of directory hierarchy where package will be installed.
6270 case "$prefix" in
6271 '')
6272         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6273         ;;
6274 *)
6275         dflt="$prefix"
6276         ;;
6277 esac
6278 $cat <<EOM
6279
6280 By default, $package will be installed in $dflt/bin, manual pages
6281 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6282 installation directories. Typically this is something like /usr/local.
6283 If you wish to have binaries under /usr/bin but other parts of the
6284 installation under /usr/local, that's ok: you will be prompted
6285 separately for each of the installation directories, the prefix being
6286 only used to set the defaults.
6287
6288 EOM
6289 fn=d~
6290 rp='Installation prefix to use?'
6291 . ./getfile
6292 oldprefix=''
6293 case "$prefix" in
6294 '') ;;
6295 *)
6296         case "$ans" in
6297         "$prefix") ;;
6298         *) oldprefix="$prefix";;
6299         esac
6300         ;;
6301 esac
6302 prefix="$ans"
6303 prefixexp="$ansexp"
6304
6305 case "$afsroot" in
6306 '')     afsroot=/afs ;;
6307 *)      afsroot=$afsroot ;;
6308 esac
6309
6310 : is AFS running?
6311 echo " "
6312 case "$afs" in
6313 $define|true)   afs=true ;;
6314 $undef|false)   afs=false ;;
6315 *)      if test -d $afsroot; then
6316                 afs=true
6317         else
6318                 afs=false
6319         fi
6320         ;;
6321 esac
6322 if $afs; then
6323         echo "AFS may be running... I'll be extra cautious then..." >&4
6324 else
6325         echo "AFS does not seem to be running..." >&4
6326 fi
6327
6328 : determine installation prefix for where package is to be installed.
6329 if $afs; then 
6330 $cat <<EOM
6331
6332 Since you are running AFS, I need to distinguish the directory in which
6333 files will reside from the directory in which they are installed (and from
6334 which they are presumably copied to the former directory by occult means).
6335
6336 EOM
6337         case "$installprefix" in
6338         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6339         *) dflt="$installprefix";;
6340         esac
6341 else
6342 $cat <<EOM
6343
6344 In some special cases, particularly when building $package for distribution,
6345 it is convenient to distinguish between the directory in which files should 
6346 be installed from the directory ($prefix) in which they 
6347 will eventually reside.  For most users, these two directories are the same.
6348
6349 EOM
6350         case "$installprefix" in
6351         '') dflt=$prefix ;;
6352         *) dflt=$installprefix;;
6353         esac
6354 fi
6355 fn=d~
6356 rp='What installation prefix should I use for installing files?'
6357 . ./getfile
6358 installprefix="$ans"
6359 installprefixexp="$ansexp"
6360
6361 : set the prefixit variable, to compute a suitable default value
6362 prefixit='case "$3" in
6363 ""|none)
6364         case "$oldprefix" in
6365         "") eval "$1=\"\$$2\"";;
6366         *)
6367                 case "$3" in
6368                 "") eval "$1=";;
6369                 none)
6370                         eval "tp=\"\$$2\"";
6371                         case "$tp" in
6372                         ""|" ") eval "$1=\"\$$2\"";;
6373                         *) eval "$1=";;
6374                         esac;;
6375                 esac;;
6376         esac;;
6377 *)
6378         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6379         case "$tp" in
6380         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6381         /*-$oldprefix/*|\~*-$oldprefix/*)
6382                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6383         *) eval "$1=\"\$$2\"";;
6384         esac;;
6385 esac'
6386
6387 : get the patchlevel
6388 echo " "
6389 echo "Getting the current patchlevel..." >&4
6390 if $test -r $rsrc/patchlevel.h;then
6391         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6392         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6393         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6394         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6395         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6396         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6397        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6398 else
6399         revision=0
6400         patchlevel=0
6401         subversion=0
6402         api_revision=0
6403         api_version=0
6404         api_subversion=0
6405         perl_patchlevel=0
6406         $echo "(You do not have patchlevel.h.  Eek.)"
6407 fi
6408 if $test -r $rsrc/.patch ; then  
6409         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6410                 perl_patchlevel=`cat $rsrc/.patch`
6411         fi
6412 fi
6413 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6414 version_patchlevel_string="version $patchlevel subversion $subversion"
6415 case "$perl_patchlevel" in
6416 0|'') ;;
6417 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6418 esac
6419
6420 $echo "(You have $package $version_patchlevel_string.)"
6421
6422 case "$osname" in
6423 dos|vms)
6424         : XXX Should be a Configure test for double-dots in filenames.
6425         version=`echo $revision $patchlevel $subversion | \
6426                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6427         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6428                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6429         ;;
6430 *)
6431         version=`echo $revision $patchlevel $subversion | \
6432                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6433         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6434                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6435         ;;
6436 esac
6437 : Special case the 5.005_xx maintenance series, which used 5.005
6438 : without any subversion label as a subdirectory in $sitelib
6439 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6440         api_versionstring='5.005'
6441 fi
6442
6443 : determine installation style
6444 : For now, try to deduce it from prefix unless it is already set.
6445 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6446 case "$installstyle" in
6447 '')     case "$prefix" in
6448                 *perl*) dflt='lib';;
6449                 *) dflt='lib/perl5' ;;
6450         esac
6451         ;;
6452 *)      dflt="$installstyle" ;;
6453 esac
6454 : Probably not worth prompting for this since we prompt for all
6455 : the directories individually, and the prompt would be too long and
6456 : confusing anyway.
6457 installstyle=$dflt
6458
6459 : determine where private library files go
6460 : Usual default is /usr/local/lib/perl5/$version.
6461 : Also allow things like /opt/perl/lib/$version, since 
6462 : /opt/perl/lib/perl5... would be redundant.
6463 : The default "style" setting is made in installstyle.U
6464 case "$installstyle" in
6465 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6466 *)       set dflt privlib lib/$version ;;
6467 esac
6468 eval $prefixit
6469 $cat <<EOM
6470
6471 There are some auxiliary files for $package that need to be put into a
6472 private library directory that is accessible by everyone.
6473
6474 EOM
6475 fn=d~+
6476 rp='Pathname where the private library files will reside?'
6477 . ./getfile
6478 privlib="$ans"
6479 privlibexp="$ansexp"
6480 : Change installation prefix, if necessary.
6481 if $test X"$prefix" != X"$installprefix"; then
6482         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6483 else
6484         installprivlib="$privlibexp"
6485 fi
6486
6487 : set the prefixup variable, to restore leading tilda escape
6488 prefixup='case "$prefixexp" in
6489 "$prefix") ;;
6490 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6491 esac'
6492
6493 : determine where public architecture dependent libraries go
6494 set archlib archlib
6495 eval $prefixit
6496 : privlib default is /usr/local/lib/$package/$version
6497 : archlib default is /usr/local/lib/$package/$version/$archname
6498 : privlib may have an optional trailing /share.
6499 tdflt=`echo $privlib | $sed 's,/share$,,'`
6500 tdflt=$tdflt/$archname
6501 case "$archlib" in
6502 '')     dflt=$tdflt
6503         ;;
6504 *)      dflt="$archlib"
6505     ;;
6506 esac
6507 $cat <<EOM
6508
6509 $spackage contains architecture-dependent library files.  If you are
6510 sharing libraries in a heterogeneous environment, you might store
6511 these files in a separate location.  Otherwise, you can just include
6512 them with the rest of the public library files.
6513
6514 EOM
6515 fn=d+~
6516 rp='Where do you want to put the public architecture-dependent libraries?'
6517 . ./getfile
6518 archlib="$ans"
6519 archlibexp="$ansexp"
6520 if $test X"$archlib" = X"$privlib"; then
6521         d_archlib="$undef"
6522 else
6523         d_archlib="$define"
6524 fi
6525 : Change installation prefix, if necessary.
6526 if $test X"$prefix" != X"$installprefix"; then
6527         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6528 else
6529         installarchlib="$archlibexp"
6530 fi
6531
6532
6533 : Binary compatibility with 5.005 is not possible for builds
6534 : with advanced features
6535 case "$usethreads$usemultiplicity" in
6536 *define*)
6537         bincompat5005="$undef"
6538         d_bincompat5005="$undef"
6539         ;;
6540 *)      $cat <<EOM
6541
6542 This version of Perl can be compiled for binary compatibility with 5.005.
6543 If you decide to do so, you will be able to continue using most of the
6544 extensions that were compiled for Perl 5.005.
6545
6546 EOM
6547         case "$bincompat5005$d_bincompat5005" in
6548         *"$undef"*) dflt=n ;;
6549         *) dflt=y ;;
6550         esac
6551         rp='Binary compatibility with Perl 5.005?'
6552         . ./myread
6553         case "$ans" in
6554         y*) val="$define" ;;
6555         *)  val="$undef" ;;
6556         esac
6557         set d_bincompat5005
6558         eval $setvar
6559         case "$d_bincompat5005" in
6560         "$define")
6561                 bincompat5005="$define"
6562                 ;;
6563         *)      bincompat5005="$undef"
6564                 d_bincompat5005="$undef"
6565                 ;;
6566         esac
6567         ;;
6568 esac
6569
6570
6571 : see if setuid scripts can be secure
6572 $cat <<EOM
6573
6574 Some kernels have a bug that prevents setuid #! scripts from being
6575 secure.  Some sites have disabled setuid #! scripts because of this.
6576
6577 First let's decide if your kernel supports secure setuid #! scripts.
6578 (If setuid #! scripts would be secure but have been disabled anyway,
6579 don't say that they are secure if asked.)
6580
6581 EOM
6582
6583 val="$undef"
6584 if $test -d /dev/fd; then
6585         echo "#!$ls" >reflect
6586         chmod +x,u+s reflect
6587         ./reflect >flect 2>&1
6588         if $contains "/dev/fd" flect >/dev/null; then
6589                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6590                 val="$define"
6591         else
6592                 $cat <<EOM
6593 If you are not sure if they are secure, I can check but I'll need a
6594 username and password different from the one you are using right now.
6595 If you don't have such a username or don't want me to test, simply
6596 enter 'none'.
6597
6598 EOM
6599                 rp='Other username to test security of setuid scripts with?'
6600                 dflt='none'
6601                 . ./myread
6602                 case "$ans" in
6603                 n|none)
6604                         case "$d_suidsafe" in
6605                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6606                                 dflt=n;;
6607                         "$undef")
6608                                 echo "Well, the $hint value is *not* secure." >&4
6609                                 dflt=n;;
6610                         *)      echo "Well, the $hint value *is* secure." >&4
6611                                 dflt=y;;
6612                         esac
6613                         ;;
6614                 *)
6615                         $rm -f reflect flect
6616                         echo "#!$ls" >reflect
6617                         chmod +x,u+s reflect
6618                         echo >flect
6619                         chmod a+w flect
6620                         echo '"su" will (probably) prompt you for '"$ans's password."
6621                         su $ans -c './reflect >flect'
6622                         if $contains "/dev/fd" flect >/dev/null; then
6623                                 echo "Okay, it looks like setuid scripts are secure." >&4
6624                                 dflt=y
6625                         else
6626                                 echo "I don't think setuid scripts are secure." >&4
6627                                 dflt=n
6628                         fi
6629                         ;;
6630                 esac
6631                 rp='Does your kernel have *secure* setuid scripts?'
6632                 . ./myread
6633                 case "$ans" in
6634                 [yY]*)  val="$define";;
6635                 *)      val="$undef";;
6636                 esac
6637         fi
6638 else
6639         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6640         echo "(That's for file descriptors, not floppy disks.)"
6641         val="$undef"
6642 fi
6643 set d_suidsafe
6644 eval $setvar
6645
6646 $rm -f reflect flect
6647
6648 : now see if they want to do setuid emulation
6649 echo " "
6650 val="$undef"
6651 case "$d_suidsafe" in
6652 "$define")
6653         val="$undef"
6654         echo "No need to emulate SUID scripts since they are secure here." >&4
6655         ;;
6656 *)
6657         $cat <<EOM
6658 Some systems have disabled setuid scripts, especially systems where
6659 setuid scripts cannot be secure.  On systems where setuid scripts have
6660 been disabled, the setuid/setgid bits on scripts are currently
6661 useless.  It is possible for $package to detect those bits and emulate
6662 setuid/setgid in a secure fashion.  This emulation will only work if
6663 setuid scripts have been disabled in your kernel.
6664
6665 EOM
6666         case "$d_dosuid" in
6667         "$define") dflt=y ;;
6668         *) dflt=n ;;
6669         esac
6670         rp="Do you want to do setuid/setgid emulation?"
6671         . ./myread
6672         case "$ans" in
6673         [yY]*)  val="$define";;
6674         *)      val="$undef";;
6675         esac
6676         ;;
6677 esac
6678 set d_dosuid
6679 eval $setvar
6680
6681 : see if this is a malloc.h system
6682 set malloc.h i_malloc
6683 eval $inhdr
6684
6685 : see if stdlib is available
6686 set stdlib.h i_stdlib
6687 eval $inhdr
6688
6689 : determine which malloc to compile in
6690 echo " "
6691 case "$usemymalloc" in
6692 [yY]*|true|$define)     dflt='y' ;;
6693 [nN]*|false|$undef)     dflt='n' ;;
6694 *)      case "$ptrsize" in
6695         4) dflt='y' ;;
6696         *) dflt='n' ;;
6697         esac
6698         ;;
6699 esac
6700 rp="Do you wish to attempt to use the malloc that comes with $package?"
6701 . ./myread
6702 usemymalloc="$ans"
6703 case "$ans" in
6704 y*|true)
6705         usemymalloc='y'
6706         mallocsrc='malloc.c'
6707         mallocobj="malloc$_o"
6708         d_mymalloc="$define"
6709         case "$libs" in
6710         *-lmalloc*)
6711                 : Remove malloc from list of libraries to use
6712                 echo "Removing unneeded -lmalloc from library list" >&4
6713                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6714                 shift
6715                 libs="$*"
6716                 echo "libs = $libs" >&4
6717                 ;;
6718         esac
6719         ;;
6720 *)
6721         usemymalloc='n'
6722         mallocsrc=''
6723         mallocobj=''
6724         d_mymalloc="$undef"
6725         ;;
6726 esac
6727
6728 : compute the return types of malloc and free
6729 echo " "
6730 $cat >malloc.c <<END
6731 #$i_malloc I_MALLOC
6732 #$i_stdlib I_STDLIB
6733 #include <stdio.h>
6734 #include <sys/types.h>
6735 #ifdef I_MALLOC
6736 #include <malloc.h>
6737 #endif
6738 #ifdef I_STDLIB
6739 #include <stdlib.h>
6740 #endif
6741 #ifdef TRY_MALLOC
6742 void *malloc();
6743 #endif
6744 #ifdef TRY_FREE
6745 void free();
6746 #endif
6747 END
6748 case "$malloctype" in
6749 '')
6750         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6751                 malloctype='void *'
6752         else
6753                 malloctype='char *'
6754         fi
6755         ;;
6756 esac
6757 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6758
6759 case "$freetype" in
6760 '')
6761         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6762                 freetype='void'
6763         else
6764                 freetype='int'
6765         fi
6766         ;;
6767 esac
6768 echo "Your system uses $freetype free(), it would seem." >&4
6769 $rm -f malloc.[co]
6770 $cat <<EOM
6771
6772 After $package is installed, you may wish to install various
6773 add-on modules and utilities.  Typically, these add-ons will
6774 be installed under $prefix with the rest
6775 of this package.  However, you may wish to install such add-ons
6776 elsewhere under a different prefix.
6777
6778 If you do not wish to put everything under a single prefix, that's
6779 ok.  You will be prompted for the individual locations; this siteprefix
6780 is only used to suggest the defaults.
6781
6782 The default should be fine for most people.
6783
6784 EOM
6785 fn=d~+
6786 rp='Installation prefix to use for add-on modules and utilities?'
6787 : XXX Here might be another good place for an installstyle setting.
6788 case "$siteprefix" in
6789 '') dflt=$prefix ;;
6790 *)  dflt=$siteprefix ;;
6791 esac
6792 . ./getfile
6793 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6794 oldsiteprefix=''
6795 case "$siteprefix" in
6796 '') ;;
6797 *)      case "$ans" in
6798         "$prefix") ;;
6799         *) oldsiteprefix="$prefix";;
6800         esac
6801         ;;
6802 esac
6803 siteprefix="$ans"
6804 siteprefixexp="$ansexp"
6805
6806 : determine where site specific libraries go.
6807 : Usual default is /usr/local/lib/perl5/site_perl/$version
6808 : The default "style" setting is made in installstyle.U
6809 : XXX No longer works with Prefixit stuff.
6810 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6811 case "$sitelib" in
6812 '') case "$installstyle" in
6813         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6814         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6815         esac
6816         ;;
6817 *)      dflt="$sitelib"
6818         ;;
6819 esac
6820 $cat <<EOM
6821
6822 The installation process will create a directory for
6823 site-specific extensions and modules.  Most users find it convenient
6824 to place all site-specific files in this directory rather than in the
6825 main distribution directory.
6826
6827 EOM
6828 fn=d~+
6829 rp='Pathname for the site-specific library files?'
6830 . ./getfile
6831 sitelib="$ans"
6832 sitelibexp="$ansexp"
6833 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6834 : Change installation prefix, if necessary.
6835 if $test X"$prefix" != X"$installprefix"; then
6836         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6837 else
6838         installsitelib="$sitelibexp"
6839 fi
6840
6841 : determine where site specific architecture-dependent libraries go.
6842 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6843 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6844 : sitelib may have an optional trailing /share.
6845 case "$sitearch" in
6846 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6847         dflt="$dflt/$archname"
6848         ;;
6849 *)      dflt="$sitearch"
6850         ;;
6851 esac
6852 set sitearch sitearch none
6853 eval $prefixit
6854 $cat <<EOM
6855
6856 The installation process will also create a directory for
6857 architecture-dependent site-specific extensions and modules.
6858
6859 EOM
6860 fn=d~+
6861 rp='Pathname for the site-specific architecture-dependent library files?'
6862 . ./getfile
6863 sitearch="$ans"
6864 sitearchexp="$ansexp"
6865 : Change installation prefix, if necessary.
6866 if $test X"$prefix" != X"$installprefix"; then
6867         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6868 else
6869         installsitearch="$sitearchexp"
6870 fi
6871
6872 $cat <<EOM
6873
6874 The installation process will also create a directory for
6875 vendor-supplied add-ons.  Vendors who supply perl with their system
6876 may find it convenient to place all vendor-supplied files in this
6877 directory rather than in the main distribution directory.  This will
6878 ease upgrades between binary-compatible maintenance versions of perl.
6879
6880 Of course you may also use these directories in whatever way you see
6881 fit.  For example, you might use them to access modules shared over a
6882 company-wide network.
6883
6884 The default answer should be fine for most people.
6885 This causes further questions about vendor add-ons to be skipped
6886 and no vendor-specific directories will be configured for perl.
6887
6888 EOM
6889 rp='Do you want to configure vendor-specific add-on directories?'
6890 case "$usevendorprefix" in
6891 define|true|[yY]*) dflt=y ;;
6892 *)      : User may have set vendorprefix directly on Configure command line.
6893         case "$vendorprefix" in
6894         ''|' ') dflt=n ;;
6895         *)      dflt=y ;;
6896         esac
6897         ;;
6898 esac
6899 . ./myread
6900 case "$ans" in
6901 [yY]*)  fn=d~+
6902         rp='Installation prefix to use for vendor-supplied add-ons?'
6903         case "$vendorprefix" in
6904         '') dflt='' ;;
6905         *)  dflt=$vendorprefix ;;
6906         esac
6907         . ./getfile
6908         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6909         oldvendorprefix=''
6910         case "$vendorprefix" in
6911         '') ;;
6912         *)      case "$ans" in
6913                 "$prefix") ;;
6914                 *) oldvendorprefix="$prefix";;
6915                 esac
6916                 ;;
6917         esac
6918         usevendorprefix="$define"
6919         vendorprefix="$ans"
6920         vendorprefixexp="$ansexp"
6921         ;;
6922 *)      usevendorprefix="$undef"
6923         vendorprefix=''
6924         vendorprefixexp=''
6925         ;;
6926 esac
6927
6928 case "$vendorprefix" in
6929 '')     d_vendorlib="$undef"
6930         vendorlib=''
6931         vendorlibexp=''
6932         ;;
6933 *)      d_vendorlib="$define"
6934         : determine where vendor-supplied modules go.
6935         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6936         case "$vendorlib" in
6937         '')
6938                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6939                 case "$installstyle" in
6940                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6941                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6942                 esac
6943                 ;;
6944         *)      dflt="$vendorlib"
6945                 ;;
6946         esac
6947         fn=d~+
6948         rp='Pathname for the vendor-supplied library files?'
6949         . ./getfile
6950         vendorlib="$ans"
6951         vendorlibexp="$ansexp"
6952         ;;
6953 esac
6954 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6955 : Change installation prefix, if necessary.
6956 if $test X"$prefix" != X"$installprefix"; then
6957         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6958 else
6959         installvendorlib="$vendorlibexp"
6960 fi
6961
6962 case "$vendorprefix" in
6963 '')     d_vendorarch="$undef"
6964         vendorarch=''
6965         vendorarchexp=''
6966         ;;
6967 *)      d_vendorarch="$define"
6968         : determine where vendor-supplied architecture-dependent libraries go.
6969         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6970         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6971         : vendorlib may have an optional trailing /share.
6972         case "$vendorarch" in
6973         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6974                 dflt="$dflt/$archname"
6975                 ;;
6976         *)      dflt="$vendorarch" ;;
6977         esac
6978         fn=d~+
6979         rp='Pathname for vendor-supplied architecture-dependent files?'
6980         . ./getfile
6981         vendorarch="$ans"
6982         vendorarchexp="$ansexp"
6983         ;;
6984 esac
6985 : Change installation prefix, if necessary.
6986 if $test X"$prefix" != X"$installprefix"; then
6987         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6988 else
6989         installvendorarch="$vendorarchexp"
6990 fi
6991
6992 : Final catch-all directories to search
6993 $cat <<EOM
6994
6995 Lastly, you can have perl look in other directories for extensions and
6996 modules in addition to those already specified.
6997 These directories will be searched after 
6998         $sitearch 
6999         $sitelib 
7000 EOM
7001 test X"$vendorlib" != "X" && echo '     ' $vendorlib
7002 test X"$vendorarch" != "X" && echo '    ' $vendorarch
7003 echo ' '
7004 case "$otherlibdirs" in
7005 ''|' ') dflt='none' ;;
7006 *)      dflt="$otherlibdirs" ;;
7007 esac
7008 $cat <<EOM
7009 Enter a colon-separated set of extra paths to include in perl's @INC
7010 search path, or enter 'none' for no extra paths.
7011
7012 EOM
7013
7014 rp='Colon-separated list of additional directories for perl to search?'
7015 . ./myread
7016 case "$ans" in
7017 ' '|''|none)    otherlibdirs=' ' ;;     
7018 *)      otherlibdirs="$ans" ;;
7019 esac
7020 case "$otherlibdirs" in
7021 ' ') val=$undef ;;
7022 *)      val=$define ;;
7023 esac
7024 set d_perl_otherlibdirs
7025 eval $setvar
7026
7027 : Cruising for prototypes
7028 echo " "
7029 echo "Checking out function prototypes..." >&4
7030 $cat >prototype.c <<'EOCP'
7031 int main(int argc, char *argv[]) {
7032         exit(0);}
7033 EOCP
7034 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
7035         echo "Your C compiler appears to support function prototypes."
7036         val="$define"
7037 else
7038         echo "Your C compiler doesn't seem to understand function prototypes."
7039         val="$undef"
7040 fi
7041 set prototype
7042 eval $setvar
7043 $rm -f prototype*
7044
7045 case "$prototype" in
7046 "$define") ;;
7047 *)      ansi2knr='ansi2knr'
7048         echo " "
7049         cat <<EOM >&4
7050
7051 $me:  FATAL ERROR:
7052 This version of $package can only be compiled by a compiler that 
7053 understands function prototypes.  Unfortunately, your C compiler 
7054         $cc $ccflags
7055 doesn't seem to understand them.  Sorry about that.
7056
7057 If GNU cc is available for your system, perhaps you could try that instead.  
7058
7059 Eventually, we hope to support building Perl with pre-ANSI compilers.
7060 If you would like to help in that effort, please contact <perlbug@perl.org>.
7061
7062 Aborting Configure now.
7063 EOM
7064         exit 2
7065         ;;
7066 esac
7067
7068 : determine where public executables go
7069 echo " "
7070 set dflt bin bin
7071 eval $prefixit
7072 fn=d~
7073 rp='Pathname where the public executables will reside?'
7074 . ./getfile
7075 if $test "X$ansexp" != "X$binexp"; then
7076         installbin=''
7077 fi
7078 bin="$ans"
7079 binexp="$ansexp"
7080 : Change installation prefix, if necessary.
7081 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
7082 if $test X"$prefix" != X"$installprefix"; then
7083         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
7084 else
7085         installbin="$binexp"
7086 fi
7087
7088 echo " "
7089 case "$extras" in
7090 '') dflt='n';;
7091 *) dflt='y';;
7092 esac
7093 cat <<EOM
7094 Perl can be built with extra modules or bundles of modules which
7095 will be fetched from the CPAN and installed alongside Perl.
7096
7097 Notice that you will need access to the CPAN; either via the Internet,
7098 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
7099 be asked later to configure the CPAN.pm module which will in turn do
7100 the installation of the rest of the extra modules or bundles.)
7101
7102 Notice also that if the modules require any external software such as
7103 libraries and headers (the libz library and the zlib.h header for the
7104 Compress::Zlib module, for example) you MUST have any such software
7105 already installed, this configuration process will NOT install such
7106 things for you.
7107
7108 If this doesn't make any sense to you, just accept the default '$dflt'.
7109 EOM
7110 rp='Install any extra modules (y or n)?'
7111 . ./myread
7112 case "$ans" in
7113 y|Y)
7114         cat <<EOM
7115
7116 Please list any extra modules or bundles to be installed from CPAN,
7117 with spaces between the names.  The names can be in any format the
7118 'install' command of CPAN.pm will understand.  (Answer 'none',
7119 without the quotes, to install no extra modules or bundles.)
7120 EOM
7121         rp='Extras?'
7122         dflt="$extras"
7123         . ./myread
7124         extras="$ans"
7125 esac
7126 case "$extras" in
7127 ''|'none')
7128         val=''
7129         $rm -f ../extras.lst
7130         ;;
7131 *)      echo "(Saving the list of extras for later...)"
7132         echo "$extras" > ../extras.lst
7133         val="'$extras'"
7134         ;;
7135 esac
7136 set extras
7137 eval $setvar
7138 echo " "
7139
7140 : Find perl5.005 or later.
7141 echo "Looking for a previously installed perl5.005 or later... "
7142 case "$perl5" in
7143 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
7144                 : Check if this perl is recent and can load a simple module
7145                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7146                         perl5=$tdir/perl
7147                         break;
7148                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
7149                         perl5=$tdir/perl5
7150                         break;
7151                 fi
7152         done
7153         ;;
7154 *)      perl5="$perl5"
7155         ;;
7156 esac
7157 case "$perl5" in
7158 '')     echo "None found.  That's ok.";;
7159 *)      echo "Using $perl5." ;;
7160 esac
7161
7162 : Determine list of previous versions to include in @INC
7163 $cat > getverlist <<EOPL
7164 #!$perl5 -w
7165 use File::Basename;
7166 \$api_versionstring = "$api_versionstring";
7167 \$version = "$version";
7168 \$stem = "$sitelib_stem";
7169 \$archname = "$archname";
7170 EOPL
7171         $cat >> getverlist <<'EOPL'
7172 # Can't have leading @ because metaconfig interprets it as a command!
7173 ;@inc_version_list=();
7174 # XXX Redo to do opendir/readdir? 
7175 if (-d $stem) {
7176     chdir($stem);
7177     ;@candidates = glob("5.*");
7178 }
7179 else {
7180     ;@candidates = ();
7181 }
7182
7183 # XXX ToDo:  These comparisons must be reworked when two-digit
7184 # subversions come along, so that 5.7.10 compares as greater than
7185 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
7186 # widespread that we can use the built-in version vectors rather
7187 # than reinventing them here.  For 5.6.0, however, we must
7188 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
7189 foreach $d (@candidates) {
7190     if ($d lt $version) {
7191         if ($d ge $api_versionstring) {
7192             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
7193         }
7194         elsif ($d ge "5.005") {
7195             unshift(@inc_version_list, grep { -d } $d);
7196         }
7197     }
7198     else {
7199         # Skip newer version.  I.e. don't look in
7200         # 5.7.0 if we're installing 5.6.1.
7201     }
7202 }
7203
7204 if (@inc_version_list) {
7205     print join(' ', @inc_version_list);
7206 }
7207 else {
7208     # Blank space to preserve value for next Configure run.
7209     print " ";
7210 }
7211 EOPL
7212 chmod +x getverlist
7213 case "$inc_version_list" in
7214 '')     if test -x "$perl5$exe_ext"; then
7215                 dflt=`$perl5 getverlist`
7216         else
7217                 dflt='none'
7218         fi
7219         ;;
7220 $undef) dflt='none' ;;
7221 *)  eval dflt=\"$inc_version_list\" ;;
7222 esac
7223 case "$dflt" in
7224 ''|' ') dflt=none ;;
7225 esac
7226 case "$dflt" in
7227 5.005) case "$bincompat5005" in
7228        $define|true|[yY]*) ;;
7229        *) dflt=none ;;
7230        esac
7231        ;;
7232 esac
7233 $cat <<'EOM'
7234
7235 In order to ease the process of upgrading, this version of perl 
7236 can be configured to use modules built and installed with earlier 
7237 versions of perl that were installed under $prefix.  Specify here
7238 the list of earlier versions that this version of perl should check.
7239 If Configure detected no earlier versions of perl installed under
7240 $prefix, then the list will be empty.  Answer 'none' to tell perl
7241 to not search earlier versions.
7242
7243 The default should almost always be sensible, so if you're not sure,
7244 just accept the default.
7245 EOM
7246
7247 rp='List of earlier versions to include in @INC?'
7248 . ./myread
7249 case "$ans" in
7250 [Nn]one|''|' ') inc_version_list=' ' ;;
7251 *) inc_version_list="$ans" ;;
7252 esac
7253 case "$inc_version_list" in
7254 ''|' ') 
7255         inc_version_list_init='0';;
7256 *)      inc_version_list_init=`echo $inc_version_list |
7257                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7258         ;;
7259 esac
7260 $rm -f getverlist
7261
7262 : determine whether to install perl also as /usr/bin/perl
7263
7264 echo " "
7265 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7266         $cat <<EOM
7267 Many scripts expect perl to be installed as /usr/bin/perl.
7268 I can install the perl you are about to compile also as /usr/bin/perl
7269 (in addition to $installbin/perl).
7270 EOM
7271         case "$installusrbinperl" in
7272         "$undef"|[nN]*) dflt='n';;
7273         *)              dflt='y';;
7274         esac
7275         rp="Do you want to install perl as /usr/bin/perl?"
7276         . ./myread
7277         case "$ans" in
7278         [yY]*)  val="$define";;
7279         *)      val="$undef" ;;
7280         esac
7281 else
7282         val="$undef"
7283 fi
7284 set installusrbinperl
7285 eval $setvar
7286
7287 : see if dld is available
7288 set dld.h i_dld
7289 eval $inhdr
7290
7291 : see if dlopen exists
7292 xxx_runnm="$runnm"
7293 runnm=false
7294 set dlopen d_dlopen
7295 eval $inlibc
7296 runnm="$xxx_runnm"
7297
7298 : determine which dynamic loading, if any, to compile in
7299 echo " "
7300 dldir="ext/DynaLoader"
7301 case "$usedl" in
7302 $define|y|true)
7303         dflt='y'
7304         usedl="$define"
7305         ;;
7306 $undef|n|false)
7307         dflt='n'
7308         usedl="$undef"
7309         ;;
7310 *) 
7311         dflt='n'
7312         case "$d_dlopen" in
7313             $define) dflt='y' ;;
7314         esac
7315         case "$i_dld" in
7316             $define) dflt='y' ;;
7317         esac
7318         : Does a dl_xxx.xs file exist for this operating system
7319         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7320         ;;
7321 esac
7322 rp="Do you wish to use dynamic loading?"
7323 . ./myread
7324 usedl="$ans"
7325 case "$ans" in
7326 y*) usedl="$define"
7327         case "$dlsrc" in
7328         '')
7329                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7330                         dflt="$dldir/dl_${osname}.xs"
7331                 elif $test "$d_dlopen" = "$define" ; then
7332                         dflt="$dldir/dl_dlopen.xs"
7333                 elif $test "$i_dld" = "$define" ; then
7334                         dflt="$dldir/dl_dld.xs"
7335                 else
7336                         dflt=''
7337                 fi
7338                 ;;
7339         *)      dflt="$dldir/$dlsrc"
7340                 ;;
7341         esac
7342     echo "The following dynamic loading files are available:"
7343         : Can not go over to $dldir because getfile has path hard-coded in.
7344         tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
7345         rp="Source file to use for dynamic loading"
7346         fn="fne"
7347         gfpth="$src"
7348         . ./getfile
7349         usedl="$define"
7350         : emulate basename
7351         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7352
7353         $cat << EOM
7354
7355 Some systems may require passing special flags to $cc -c to
7356 compile modules that will be used to create a shared library.
7357 To use no flags, say "none".
7358
7359 EOM
7360     case "$cccdlflags" in
7361     '') case "$gccversion" in
7362                 '') case "$osname" in
7363                         hpux)   dflt='+z' ;;
7364                         next)   dflt='none' ;;
7365                         irix*)  dflt='-KPIC' ;;
7366                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7367                         sunos)  dflt='-pic' ;;
7368                         *)      dflt='none' ;;
7369                     esac
7370                         ;;
7371                 *)  case "$osname" in
7372                         darwin) dflt='none' ;;
7373                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7374                         *)      dflt='-fpic' ;;
7375                     esac ;;
7376             esac ;;
7377         ' ') dflt='none' ;;
7378     *)  dflt="$cccdlflags" ;;
7379     esac
7380     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7381     . ./myread
7382     case "$ans" in
7383     none) cccdlflags=' ' ;;
7384     *) cccdlflags="$ans" ;;
7385     esac
7386
7387     cat << EOM
7388
7389 Some systems use ld to create libraries that can be dynamically loaded,
7390 while other systems (such as those using ELF) use $cc.
7391
7392 EOM
7393         case "$ld" in
7394         '')     $cat >try.c <<'EOM'
7395 /* Test for whether ELF binaries are produced */
7396 #include <fcntl.h>
7397 #include <stdlib.h>
7398 int main() {
7399         char b[4];
7400         int i = open("a.out",O_RDONLY);
7401         if(i == -1) 
7402                 exit(1); /* fail */
7403         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7404                 exit(0); /* succeed (yes, it's ELF) */
7405         else
7406                 exit(1); /* fail */
7407 }
7408 EOM
7409                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7410                         cat <<EOM
7411 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7412 EOM
7413                         dflt="$cc"
7414                 else
7415                         echo "I'll use ld to build dynamic libraries."
7416                         dflt='ld'
7417                 fi
7418                 rm -f try.c a.out
7419                 ;;
7420         *)      dflt="$ld"
7421                 ;;
7422         esac
7423
7424     rp="What command should be used to create dynamic libraries?"
7425     . ./myread
7426         ld="$ans"
7427
7428     cat << EOM
7429
7430 Some systems may require passing special flags to $ld to create a
7431 library that can be dynamically loaded.  If your ld flags include
7432 -L/other/path options to locate libraries outside your loader's normal
7433 search path, you may need to specify those -L options here as well.  To
7434 use no flags, say "none".
7435
7436 EOM
7437     case "$lddlflags" in
7438     '') case "$osname" in
7439                         beos) dflt='-nostart' ;;
7440                         hpux) dflt='-b';
7441                               case "$gccversion" in
7442                               '') dflt="$dflt +vnocompatwarnings" ;;
7443                               esac
7444                               ;;        
7445                         linux|irix*)    dflt='-shared' ;;
7446                         next)  dflt='none' ;;
7447                         solaris) dflt='-G' ;;
7448                         sunos) dflt='-assert nodefinitions' ;;
7449                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7450                 *)     dflt='none' ;;
7451                         esac
7452                         ;;
7453     *) dflt="$lddlflags" ;;
7454     esac
7455
7456         : Try to guess additional flags to pick up local libraries.
7457         : Be careful not to append to a plain 'none'
7458         case "$dflt" in
7459         none) dflt='' ;;
7460         esac
7461         for thisflag in $ldflags; do
7462                 case "$thisflag" in
7463                 -L*|-R*|-Wl,-R*)
7464                         case " $dflt " in
7465                         *" $thisflag "*) ;;
7466                         *) dflt="$dflt $thisflag" ;;
7467                         esac
7468                         ;;
7469                 esac
7470         done
7471
7472         case "$dflt" in
7473         ''|' ') dflt='none' ;;
7474         esac
7475
7476     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7477     . ./myread
7478     case "$ans" in
7479     none) lddlflags=' ' ;;
7480     *) lddlflags="$ans" ;;
7481     esac
7482
7483         cat <<EOM
7484
7485 Some systems may require passing special flags to $cc to indicate that
7486 the resulting executable will use dynamic linking.  To use no flags,
7487 say "none".
7488
7489 EOM
7490     case "$ccdlflags" in
7491     '') case "$osname" in
7492                 hpux)   dflt='-Wl,-E' ;;
7493                 linux)  dflt='-rdynamic' ;;
7494                 next)   dflt='none' ;;
7495                 sunos)  dflt='none' ;;
7496                 *)      dflt='none' ;;
7497             esac ;;
7498     ' ')  dflt='none' ;;
7499     *)  dflt="$ccdlflags" ;;
7500     esac
7501     rp="Any special flags to pass to $cc to use dynamic linking?"
7502     . ./myread
7503     case "$ans" in
7504     none) ccdlflags=' ' ;;
7505     *) ccdlflags="$ans" ;;
7506     esac
7507     ;;
7508 *)  usedl="$undef"
7509         ld='ld'
7510     dlsrc='dl_none.xs'
7511     lddlflags=''
7512     ccdlflags=''
7513     ;;
7514 esac
7515
7516 also=''
7517 case "$usedl" in
7518 $undef)
7519         # No dynamic loading being used, so don't bother even to prompt.
7520         useshrplib='false'
7521         ;;
7522 *)      case "$useshrplib" in
7523         '')     case "$osname" in
7524                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7525                         dflt=y
7526                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7527                         ;;
7528                 next*)
7529                         case "$osvers" in
7530                         4*)     dflt=y
7531                                 also='Building a shared libperl is needed for MAB support.'
7532                                 ;;
7533                         *)      dflt=n
7534                                 ;;
7535                         esac
7536                         ;;
7537                 *)      dflt=n
7538                         ;;
7539                 esac
7540                 ;;
7541         $define|true|[Yy]*)
7542                 dflt=y
7543                 ;;
7544         *)      dflt=n
7545                 ;;
7546         esac
7547         $cat << EOM
7548
7549 The perl executable is normally obtained by linking perlmain.c with
7550 libperl${_a}, any static extensions (usually just DynaLoader), and
7551 any other libraries needed on this system (such as -lm, etc.).  Since
7552 your system supports dynamic loading, it is probably possible to build
7553 a shared libperl.$so.  If you will have more than one executable linked
7554 to libperl.$so, this will significantly reduce the size of each
7555 executable, but it may have a noticeable affect on performance.  The
7556 default is probably sensible for your system.
7557 $also
7558
7559 EOM
7560         rp="Build a shared libperl.$so (y/n)"
7561         . ./myread
7562         case "$ans" in
7563         true|$define|[Yy]*)
7564                 useshrplib='true'  ;;
7565         *)      useshrplib='false' ;;
7566         esac
7567         ;;
7568 esac
7569
7570 case "$useshrplib" in
7571 true)
7572         case "$libperl" in
7573         '')
7574                 # Figure out a good name for libperl.so.  Since it gets stored in
7575                 # a version-specific architecture-dependent library, the version
7576                 # number isn't really that important, except for making cc/ld happy.
7577                 #
7578                 # A name such as libperl.so.3.1
7579                 majmin="libperl.$so.$patchlevel.$subversion"
7580                 # A name such as libperl.so.301
7581                 majonly=`echo $patchlevel $subversion |
7582                         $awk '{printf "%d%02d", $1, $2}'`
7583                 majonly=libperl.$so.$majonly
7584                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7585                 # rely on figuring it out from the naming of libc.
7586                 case "${osname}${osvers}" in
7587                 next4*)
7588                         dflt=libperl.5.$so
7589                         # XXX How handle the --version stuff for MAB?
7590                         ;;
7591                 linux*)  # ld won't link with a bare -lperl otherwise.
7592                         dflt=libperl.$so
7593                         ;;
7594                 cygwin*) # ld links against an importlib
7595                         dflt=libperl$lib_ext
7596                         ;;
7597                 *)      # Try to guess based on whether libc has major.minor.
7598                         case "$libc" in
7599                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7600                         *libc.$so.[0-9]*) dflt=$majonly ;;
7601                         *)      dflt=libperl.$so ;;
7602                         esac
7603                         ;;
7604                 esac
7605                 ;;
7606         *)      dflt=$libperl
7607                 ;;
7608         esac
7609         cat << EOM
7610
7611 I need to select a good name for the shared libperl.  If your system uses
7612 library names with major and minor numbers, then you might want something
7613 like $majmin.  Alternatively, if your system uses a single version
7614 number for shared libraries, then you might want to use $majonly.
7615 Or, your system might be quite happy with a simple libperl.$so.
7616
7617 Since the shared libperl will get installed into a version-specific
7618 architecture-dependent directory, the version number of the shared perl
7619 library probably isn't important, so the default should be o.k.
7620
7621 EOM
7622         rp='What name do you want to give to the shared libperl?'
7623         . ./myread
7624         libperl=$ans
7625         echo "Ok, I'll use $libperl"
7626         ;;
7627 *)
7628         libperl="libperl${_a}"
7629         ;;
7630 esac
7631
7632 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7633 case "$shrpdir" in
7634 '') ;;
7635 *)      $cat >&4 <<EOM
7636 WARNING:  Use of the shrpdir variable for the installation location of
7637 the shared $libperl is not supported.  It was never documented and
7638 will not work in this version.  Let me (perlbug@perl.org)
7639 know of any problems this may cause.
7640
7641 EOM
7642         case "$shrpdir" in
7643         "$archlibexp/CORE")
7644                 $cat >&4 <<EOM
7645 But your current setting of $shrpdir is
7646 the default anyway, so it's harmless.
7647 EOM
7648                 ;;
7649         *)
7650                 $cat >&4 <<EOM
7651 Further, your current attempted setting of $shrpdir
7652 conflicts with the value of $archlibexp/CORE
7653 that installperl will use.
7654 EOM
7655                 ;;
7656         esac
7657         ;;
7658 esac
7659
7660 # How will the perl executable find the installed shared $libperl?
7661 # Add $xxx to ccdlflags.
7662 # If we can't figure out a command-line option, use $shrpenv to
7663 # set env LD_RUN_PATH.  The main perl makefile uses this.
7664 shrpdir=$archlibexp/CORE
7665 xxx=''
7666 tmp_shrpenv=''
7667 if "$useshrplib"; then
7668     case "$osname" in 
7669         aix)
7670                 # We'll set it in Makefile.SH...
7671                 ;;
7672         solaris)
7673                 xxx="-R $shrpdir"
7674                 ;;
7675         freebsd|netbsd)
7676                 xxx="-Wl,-R$shrpdir"
7677                 ;;
7678         bsdos|linux|irix*|dec_osf)
7679                 xxx="-Wl,-rpath,$shrpdir"
7680                 ;;
7681         next)
7682                 # next doesn't like the default...
7683                 ;;
7684         beos)
7685                 # beos doesn't like the default, either.
7686                 ;;
7687         hpux*)
7688                 # hpux doesn't like the default, either.
7689                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7690                 ;;
7691         *)
7692                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7693                 ;;
7694         esac
7695         case "$xxx" in
7696         '') ;;
7697         *)      
7698                 # Only add $xxx if it isn't already in ccdlflags.
7699                 case " $ccdlflags " in
7700                 *" $xxx "*)     ;;
7701                 *)      ccdlflags="$ccdlflags $xxx"
7702                         cat <<EOM >&4
7703
7704 Adding $xxx to the flags
7705 passed to $ld so that the perl executable will find the 
7706 installed shared $libperl.
7707
7708 EOM
7709                         ;;
7710                 esac
7711                 ;;
7712         esac
7713 fi
7714 # Fix ccdlflags in AIX for building external extensions.
7715 # (For building Perl itself bare -bE:perl.exp is needed,
7716 #  Makefile.SH takes care of this.)
7717 case "$osname" in
7718 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7719 esac
7720 # Respect a hint or command-line value.
7721 case "$shrpenv" in
7722 '') shrpenv="$tmp_shrpenv" ;;
7723 esac
7724 case "$ldlibpthname" in
7725 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7726 none)   ldlibpthname='' ;;
7727 esac
7728
7729 : determine where manual pages are on this system
7730 echo " "
7731 case "$sysman" in
7732 '') 
7733         syspath='/usr/share/man/man1 /usr/man/man1'
7734         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7735         syspath="$syspath /usr/man/u_man/man1"
7736         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7737         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7738         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7739         sysman=`./loc . /usr/man/man1 $syspath`
7740         ;;
7741 esac
7742 if $test -d "$sysman"; then
7743         echo "System manual is in $sysman." >&4
7744 else
7745         echo "Could not find manual pages in source form." >&4
7746 fi
7747
7748 : determine where manual pages go
7749 set man1dir man1dir none
7750 eval $prefixit
7751 $cat <<EOM
7752
7753 $spackage has manual pages available in source form.
7754 EOM
7755 case "$nroff" in
7756 nroff)
7757         echo "However, you don't have nroff, so they're probably useless to you."
7758         case "$man1dir" in
7759         '') man1dir="none";;
7760         esac;;
7761 esac
7762 echo "If you don't want the manual sources installed, answer 'none'."
7763 case "$man1dir" in
7764 ' ') dflt=none
7765         ;;
7766 '')
7767         lookpath="$prefixexp/share/man/man1"
7768         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7769         lookpath="$lookpath $prefixexp/man/p_man/man1"
7770         lookpath="$lookpath $prefixexp/man/u_man/man1"
7771         lookpath="$lookpath $prefixexp/man/man.1"
7772         case "$sysman" in
7773         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7774         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7775         esac
7776         set dflt
7777         eval $prefixup
7778         ;;
7779 *)  dflt="$man1dir"
7780         ;;
7781 esac
7782 echo " "
7783 fn=dn+~
7784 rp="Where do the main $spackage manual pages (source) go?"
7785 . ./getfile
7786 if $test "X$man1direxp" != "X$ansexp"; then
7787         installman1dir=''
7788 fi
7789 man1dir="$ans"
7790 man1direxp="$ansexp"
7791 case "$man1dir" in
7792 '')     man1dir=' '
7793         installman1dir='';;
7794 esac
7795
7796 : Change installation prefix, if necessary.
7797 if $test X"$prefix" != X"$installprefix"; then
7798         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7799 else
7800         installman1dir="$man1direxp"
7801 fi
7802
7803 : What suffix to use on installed man pages
7804
7805 case "$man1dir" in
7806 ' ')
7807         man1ext='0'
7808         ;;
7809 *)
7810         rp="What suffix should be used for the main $spackage man pages?"
7811         case "$man1ext" in
7812         '')     case "$man1dir" in
7813                 *1)  dflt=1 ;;
7814                 *1p) dflt=1p ;;
7815                 *1pm) dflt=1pm ;;
7816                 *l) dflt=l;;
7817                 *n) dflt=n;;
7818                 *o) dflt=o;;
7819                 *p) dflt=p;;
7820                 *C) dflt=C;;
7821                 *L) dflt=L;;
7822                 *L1) dflt=L1;;
7823                 *) dflt=1;;
7824                 esac
7825                 ;;
7826         *)      dflt="$man1ext";;
7827         esac
7828         . ./myread
7829         man1ext="$ans"
7830         ;;
7831 esac
7832
7833 : see if we can have long filenames
7834 echo " "
7835 first=123456789abcdef
7836 $rm -f $first
7837 if (echo hi >$first) 2>/dev/null; then
7838         if $test -f 123456789abcde; then
7839                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7840                 val="$undef"
7841         else
7842                 echo 'You can have filenames longer than 14 characters.'>&4
7843                 val="$define"
7844         fi
7845 else
7846         $cat <<'EOM'
7847 You can't have filenames longer than 14 chars.
7848 You can't even think about them!
7849 EOM
7850         val="$undef"
7851 fi 
7852 set d_flexfnam
7853 eval $setvar
7854 $rm -rf 123456789abcde*
7855
7856 : determine where library module manual pages go
7857 set man3dir man3dir none
7858 eval $prefixit
7859 $cat <<EOM
7860
7861 $spackage has manual pages for many of the library modules.
7862 EOM
7863
7864 case "$nroff" in
7865 nroff)
7866         $cat <<'EOM'
7867 However, you don't have nroff, so they're probably useless to you.
7868 EOM
7869         case "$man3dir" in
7870         '') man3dir="none";;
7871         esac;;
7872 esac
7873
7874 case "$d_flexfnam" in
7875 undef)
7876         $cat <<'EOM'
7877 However, your system can't handle the long file names like File::Basename.3. 
7878 EOM
7879         case "$man3dir" in
7880         '') man3dir="none";;
7881         esac;;
7882 esac
7883
7884 echo "If you don't want the manual sources installed, answer 'none'."
7885 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7886 case "$man3dir" in
7887 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7888         if $test -d "$privlib/man/man3"; then
7889                 cat <<EOM >&4
7890
7891 WARNING:  Previous versions of perl installed man3 pages into
7892 $privlib/man/man3.  This version will suggest a 
7893 new default of $dflt.  
7894 EOM
7895                 tdflt=$dflt
7896                 dflt='n'
7897                 rp='Do you wish to preserve the old behavior?(y/n)'
7898                 . ./myread
7899                 case "$ans" in
7900                 y*) dflt="$privlib/man/man3" ;;
7901                 *)  dflt=$tdflt ;;
7902                 esac
7903     fi
7904         ;;
7905 *)      dflt="$man3dir" ;;
7906 esac
7907 case "$dflt" in
7908 ' ') dflt=none ;;
7909 esac
7910 echo " "
7911 fn=dn+~
7912 rp="Where do the $package library man pages (source) go?"
7913 . ./getfile
7914 man3dir="$ans"
7915 man3direxp="$ansexp"
7916 case "$man3dir" in
7917 '')     man3dir=' '
7918         installman3dir='';;
7919 esac
7920
7921 : Change installation prefix, if necessary.
7922 if $test X"$prefix" != X"$installprefix"; then
7923         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7924 else
7925         installman3dir="$man3direxp"
7926 fi
7927
7928 : What suffix to use on installed man pages
7929 case "$man3dir" in
7930 ' ')
7931         man3ext='0'
7932         ;;
7933 *)
7934         rp="What suffix should be used for the $package library man pages?"
7935         case "$man3ext" in
7936         '')     case "$man3dir" in
7937                 *3)  dflt=3 ;;
7938                 *3p) dflt=3p ;;
7939                 *3pm) dflt=3pm ;;
7940                 *l) dflt=l;;
7941                 *n) dflt=n;;
7942                 *o) dflt=o;;
7943                 *p) dflt=p;;
7944                 *C) dflt=C;;
7945                 *L) dflt=L;;
7946                 *L3) dflt=L3;;
7947                 *) dflt=3;;
7948                 esac
7949                 ;;
7950         *)      dflt="$man3ext";;
7951         esac
7952         . ./myread
7953         man3ext="$ans"
7954         ;;
7955 esac
7956
7957 : see if we have to deal with yellow pages, now NIS.
7958 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7959         if $test -f /usr/etc/nibindd; then
7960                 echo " "
7961                 echo "I'm fairly confident you're on a NeXT."
7962                 echo " "
7963                 rp='Do you get the hosts file via NetInfo?'
7964                 dflt=y
7965                 case "$hostcat" in
7966                 nidump*) ;;
7967                 '') ;;
7968                 *) dflt=n;;
7969                 esac
7970                 . ./myread
7971                 case "$ans" in
7972                 y*) hostcat='nidump hosts .';;
7973                 *)      case "$hostcat" in
7974                         nidump*) hostcat='';;
7975                         esac
7976                         ;;
7977                 esac
7978         fi
7979         case "$hostcat" in
7980         nidump*) ;;
7981         *)
7982                 case "$hostcat" in
7983                 *ypcat*) dflt=y;;
7984                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7985                                 dflt=y
7986                         else
7987                                 dflt=n
7988                         fi;;
7989                 *) dflt=n;;
7990                 esac
7991                 echo " "
7992                 rp='Are you getting the hosts file via yellow pages?'
7993                 . ./myread
7994                 case "$ans" in
7995                 y*) hostcat='ypcat hosts';;
7996                 *) hostcat='cat /etc/hosts';;
7997                 esac
7998                 ;;
7999         esac
8000 fi
8001 case "$hostcat" in
8002 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
8003 esac
8004 case "$groupcat" in
8005 '') test -f /etc/group && groupcat='cat /etc/group';;
8006 esac
8007 case "$passcat" in
8008 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
8009 esac
8010
8011 : now get the host name
8012 echo " "
8013 echo "Figuring out host name..." >&4
8014 case "$myhostname" in
8015 '') cont=true
8016         echo 'Maybe "hostname" will work...'
8017         if tans=`sh -c hostname 2>&1` ; then
8018                 myhostname=$tans
8019                 phostname=hostname
8020                 cont=''
8021         fi
8022         ;;
8023 *) cont='';;
8024 esac
8025 if $test "$cont"; then
8026         if ./xenix; then
8027                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
8028                 if tans=`cat /etc/systemid 2>&1` ; then
8029                         myhostname=$tans
8030                         phostname='cat /etc/systemid'
8031                         echo "Whadyaknow.  Xenix always was a bit strange..."
8032                         cont=''
8033                 fi
8034         elif $test -r /etc/systemid; then
8035                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
8036         fi
8037 fi
8038 if $test "$cont"; then
8039         echo 'No, maybe "uuname -l" will work...'
8040         if tans=`sh -c 'uuname -l' 2>&1` ; then
8041                 myhostname=$tans
8042                 phostname='uuname -l'
8043         else
8044                 echo 'Strange.  Maybe "uname -n" will work...'
8045                 if tans=`sh -c 'uname -n' 2>&1` ; then
8046                         myhostname=$tans
8047                         phostname='uname -n'
8048                 else
8049                         echo 'Oh well, maybe I can mine it out of whoami.h...'
8050                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
8051                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
8052                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
8053                         else
8054                                 case "$myhostname" in
8055                                 '') echo "Does this machine have an identity crisis or something?"
8056                                         phostname='';;
8057                                 *)
8058                                         echo "Well, you said $myhostname before..."
8059                                         phostname='echo $myhostname';;
8060                                 esac
8061                         fi
8062                 fi
8063         fi
8064 fi
8065 case "$myhostname" in
8066 '') myhostname=noname ;;
8067 esac
8068 : you do not want to know about this
8069 set $myhostname
8070 myhostname=$1
8071
8072 : verify guess
8073 if $test "$myhostname" ; then
8074         dflt=y
8075         rp='Your host name appears to be "'$myhostname'".'" Right?"
8076         . ./myread
8077         case "$ans" in
8078         y*) ;;
8079         *) myhostname='';;
8080         esac
8081 fi
8082
8083 : bad guess or no guess
8084 while $test "X$myhostname" = X ; do
8085         dflt=''
8086         rp="Please type the (one word) name of your host:"
8087         . ./myread
8088         myhostname="$ans"
8089 done
8090
8091 : translate upper to lower if necessary
8092 case "$myhostname" in
8093 *[A-Z]*)
8094         echo "(Normalizing case in your host name)"
8095         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
8096         ;;
8097 esac
8098
8099 case "$myhostname" in
8100 *.*)
8101         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
8102         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
8103         echo "(Trimming domain name from host name--host name is now $myhostname)"
8104         ;;
8105 *) case "$mydomain" in
8106         '')
8107                 {
8108                         test "X$hostcat" = "Xypcat hosts" &&
8109                         ypmatch "$myhostname" hosts 2>/dev/null |\
8110                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
8111                         $test -s hosts
8112                 } || {
8113                         test "X$hostcat" != "X" &&
8114                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
8115                                         /[       ]$myhostname[  . ]/p" > hosts
8116                 }
8117                 tmp_re="[       . ]"
8118                 if $test -f hosts; then
8119                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
8120                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
8121                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
8122                                 hosts | $sort | $uniq | \
8123                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
8124                         case `$echo X$dflt` in
8125                         X*\ *)  echo "(Several hosts in the database matched hostname)"
8126                                 dflt=.
8127                                 ;;
8128                         X.) echo "(You do not have fully-qualified names in the hosts database)"
8129                                 ;;
8130                         esac
8131                 else
8132                         echo "(I cannot locate a hosts database anywhere)"
8133                         dflt=.
8134                 fi
8135                 case "$dflt" in
8136                 .)
8137                         tans=`./loc resolv.conf X /etc /usr/etc`
8138                         if $test -f "$tans"; then
8139                                 echo "(Attempting domain name extraction from $tans)"
8140                                 dflt=.`$sed -n -e 's/   / /g' \
8141                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
8142                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8143                                 case "$dflt" in
8144                                 .) dflt=.`$sed -n -e 's/        / /g' \
8145                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
8146                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
8147                                         ;;
8148                                 esac
8149                         fi
8150                         ;;
8151                 esac
8152                 case "$dflt" in
8153                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
8154                         dflt=.`sh -c domainname 2>/dev/null`
8155                         case "$dflt" in
8156                         '') dflt='.';;
8157                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
8158                         esac
8159                         ;;
8160                 esac
8161                 case "$dflt$osname" in
8162                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
8163                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
8164                         ;;
8165                 esac
8166                 case "$dflt" in
8167                 .) echo "(Lost all hope -- silly guess then)"
8168                         dflt='.nonet'
8169                         ;;
8170                 esac
8171                 $rm -f hosts
8172                 ;;
8173         *) dflt="$mydomain";;
8174         esac;;
8175 esac
8176 echo " "
8177 rp="What is your domain name?"
8178 . ./myread
8179 tans="$ans"
8180 case "$ans" in
8181 '') ;;
8182 .*) ;;
8183 *) tans=".$tans";;
8184 esac
8185 mydomain="$tans"
8186
8187 : translate upper to lower if necessary
8188 case "$mydomain" in
8189 *[A-Z]*)
8190         echo "(Normalizing case in your domain name)"
8191         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
8192         ;;
8193 esac
8194
8195 : a little sanity check here
8196 case "$phostname" in
8197 '') ;;
8198 *)
8199         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
8200         $myhostname$mydomain|$myhostname) ;;
8201         *)
8202                 case "$phostname" in
8203                 sed*)
8204                         echo "(That doesn't agree with your whoami.h file, by the way.)"
8205                         ;;
8206                 *)
8207                         echo "(That doesn't agree with your $phostname command, by the way.)"
8208                         ;;
8209                 esac
8210         ;;
8211         esac
8212         ;;
8213 esac
8214
8215 $cat <<EOM
8216
8217 I need to get your e-mail address in Internet format if possible, i.e.
8218 something like user@host.domain. Please answer accurately since I have
8219 no easy means to double check it. The default value provided below
8220 is most probably close to reality but may not be valid from outside
8221 your organization...
8222
8223 EOM
8224 cont=x
8225 while test "$cont"; do
8226         case "$cf_email" in
8227         '') dflt="$cf_by@$myhostname$mydomain";;
8228         *) dflt="$cf_email";;
8229         esac
8230         rp='What is your e-mail address?'
8231         . ./myread
8232         cf_email="$ans"
8233         case "$cf_email" in
8234         *@*.*) cont='' ;;
8235         *)
8236                 rp='Address does not look like an Internet one.  Use it anyway?'
8237                 case "$fastread" in
8238                 yes) dflt=y ;;
8239                 *) dflt=n ;;
8240                 esac
8241                 . ./myread
8242                 case "$ans" in
8243                 y*) cont='' ;;
8244                 *) echo " " ;;
8245                 esac
8246                 ;;
8247         esac
8248 done
8249
8250 $cat <<EOM
8251
8252 If you or somebody else will be maintaining perl at your site, please
8253 fill in the correct e-mail address here so that they may be contacted
8254 if necessary. Currently, the "perlbug" program included with perl
8255 will send mail to this address in addition to perlbug@perl.org. You may
8256 enter "none" for no administrator.
8257
8258 EOM
8259 case "$perladmin" in
8260 '') dflt="$cf_email";;
8261 *) dflt="$perladmin";;
8262 esac
8263 rp='Perl administrator e-mail address'
8264 . ./myread
8265 perladmin="$ans"
8266
8267 : determine whether to only install version-specific parts.
8268 echo " "
8269 $cat <<EOM
8270 Do you want to install only the version-specific parts of the perl
8271 distribution?  Usually you do *not* want to do this.
8272 EOM
8273 case "$versiononly" in
8274 "$define"|[Yy]*|true) dflt='y' ;;
8275 *) dflt='n';
8276 esac
8277 rp="Do you want to install only the version-specific parts of perl?"
8278 . ./myread
8279 case "$ans" in
8280 [yY]*)  val="$define";;
8281 *)      val="$undef" ;;
8282 esac
8283 set versiononly
8284 eval $setvar
8285
8286 : figure out how to guarantee perl startup
8287 case "$startperl" in
8288 '')
8289         case "$sharpbang" in
8290         *!)
8291                 $cat <<EOH
8292
8293 I can use the #! construct to start perl on your system. This will
8294 make startup of perl scripts faster, but may cause problems if you
8295 want to share those scripts and perl is not in a standard place
8296 ($binexp/perl) on all your platforms. The alternative is to force
8297 a shell by starting the script with a single ':' character.
8298
8299 EOH
8300                 case "$versiononly" in
8301                 "$define")      dflt="$binexp/perl$version";;  
8302                 *)              dflt="$binexp/perl";;
8303                 esac
8304                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8305                 . ./myread
8306                 case "$ans" in
8307                 none)   startperl=": # use perl";;
8308                 *)      startperl="#!$ans"
8309                         if $test 30 -lt `echo "$ans" | wc -c`; then
8310                                 $cat >&4 <<EOM
8311
8312 WARNING:  Some systems limit the #! command to 32 characters.
8313 If you experience difficulty running Perl scripts with #!, try
8314 installing Perl in a directory with a shorter pathname.
8315
8316 EOM
8317                         fi ;;
8318                 esac
8319                 ;;
8320         *) startperl=": # use perl"
8321                 ;;
8322         esac
8323         ;;
8324 esac
8325 echo "I'll use $startperl to start perl scripts."
8326
8327 : figure best path for perl in scripts
8328 case "$perlpath" in
8329 '')
8330         case "$versiononly" in
8331         "$define")      perlpath="$binexp/perl$version";;
8332         *)              perlpath="$binexp/perl";;
8333         esac
8334         case "$startperl" in
8335         *!*) ;;
8336         *)
8337                 $cat <<EOH
8338
8339 I will use the "eval 'exec'" idiom to start Perl on your system.
8340 I can use the full path of your Perl binary for this purpose, but
8341 doing so may cause problems if you want to share those scripts and
8342 Perl is not always in a standard place ($binexp/perl).
8343
8344 EOH
8345                 dflt="$binexp/perl"
8346                 rp="What path shall I use in \"eval 'exec'\"?"
8347                 . ./myread
8348                 perlpath="$ans"
8349                 ;;
8350         esac
8351         ;;
8352 esac
8353 case "$startperl" in
8354 *!*)    ;;
8355 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8356 esac
8357
8358 : determine where public executable scripts go
8359 set scriptdir scriptdir
8360 eval $prefixit
8361 case "$scriptdir" in
8362 '')
8363         dflt="$bin"
8364         : guess some guesses
8365         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8366         $test -d /usr/share/bin     && dflt=/usr/share/bin
8367         $test -d /usr/local/script  && dflt=/usr/local/script
8368         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8369         $test -d $prefixexp/script  && dflt=$prefixexp/script
8370         set dflt
8371         eval $prefixup
8372         ;;
8373 *)  dflt="$scriptdir"
8374         ;;
8375 esac
8376 $cat <<EOM
8377  
8378 Some installations have a separate directory just for executable scripts so
8379 that they can mount it across multiple architectures but keep the scripts in
8380 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8381 Or you might just lump your scripts in with all your other executables.
8382  
8383 EOM
8384 fn=d~
8385 rp='Where do you keep publicly executable scripts?'
8386 . ./getfile
8387 if $test "X$ansexp" != "X$scriptdirexp"; then
8388         installscript=''
8389 fi
8390 scriptdir="$ans"
8391 scriptdirexp="$ansexp"
8392 : Change installation prefix, if necessary.
8393 if $test X"$prefix" != X"$installprefix"; then
8394         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8395 else
8396         installscript="$scriptdirexp"
8397 fi
8398
8399 : determine where add-on public executables go
8400 case "$sitebin" in
8401 '')     dflt=$siteprefix/bin ;;
8402 *)      dflt=$sitebin ;;
8403 esac
8404 fn=d~
8405 rp='Pathname where the add-on public executables should be installed?'
8406 . ./getfile
8407 sitebin="$ans"
8408 sitebinexp="$ansexp"
8409 : Change installation prefix, if necessary.
8410 if $test X"$prefix" != X"$installprefix"; then
8411         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8412 else
8413         installsitebin="$sitebinexp"
8414 fi
8415
8416 : define an is-a-typedef? function
8417 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8418 case "$inclist" in
8419 "") inclist="sys/types.h";;
8420 esac;
8421 eval "varval=\$$var";
8422 case "$varval" in
8423 "")
8424         $rm -f temp.c;
8425         for inc in $inclist; do
8426                 echo "#include <$inc>" >>temp.c;
8427         done;
8428         echo "#ifdef $type" >> temp.c;
8429         echo "printf(\"We have $type\");" >> temp.c;
8430         echo "#endif" >> temp.c;
8431         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8432         if $contains $type temp.E >/dev/null 2>&1; then
8433                 eval "$var=\$type";
8434         else
8435                 eval "$var=\$def";
8436         fi;
8437         $rm -f temp.?;;
8438 *) eval "$var=\$varval";;
8439 esac'
8440
8441 : define an is-a-typedef? function that prompts if the type is not available.
8442 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8443 case "$inclist" in
8444 "") inclist="sys/types.h";;
8445 esac;
8446 eval "varval=\$$var";
8447 case "$varval" in
8448 "")
8449         $rm -f temp.c;
8450         for inc in $inclist; do
8451                 echo "#include <$inc>" >>temp.c;
8452         done;
8453         echo "#ifdef $type" >> temp.c;
8454         echo "printf(\"We have $type\");" >> temp.c;
8455         echo "#endif" >> temp.c;
8456         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8457         echo " " ;
8458         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8459         if $contains $type temp.E >/dev/null 2>&1; then
8460                 echo "$type found." >&4;
8461                 eval "$var=\$type";
8462         else
8463                 echo "$type NOT found." >&4;
8464                 dflt="$def";
8465                 . ./myread ;
8466                 eval "$var=\$ans";
8467         fi;
8468         $rm -f temp.?;;
8469 *) eval "$var=\$varval";;
8470 esac'
8471
8472 : see what type lseek is declared as in the kernel
8473 rp="What is the type used for lseek's offset on this system?"
8474 set off_t lseektype long stdio.h sys/types.h
8475 eval $typedef_ask
8476
8477 echo " "
8478 echo "Checking to see how big your file offsets are..." >&4
8479 $cat >try.c <<EOCP
8480 #include <sys/types.h>
8481 #include <stdio.h>
8482 int main()
8483 {
8484     printf("%d\n", (int)sizeof($lseektype));
8485     return(0); 
8486 }
8487 EOCP
8488 set try
8489 if eval $compile_ok; then
8490         lseeksize=`$run ./try`
8491         echo "Your file offsets are $lseeksize bytes long."
8492 else
8493         dflt=$longsize
8494         echo " "
8495         echo "(I can't seem to compile the test program.  Guessing...)"
8496         rp="What is the size of your file offsets (in bytes)?"
8497         . ./myread
8498         lseeksize="$ans"
8499 fi
8500 $rm -f try.c try
8501
8502 : see what type file positions are declared as in the library
8503 rp="What is the type for file position used by fsetpos()?"
8504 set fpos_t fpostype long stdio.h sys/types.h
8505 eval $typedef_ask
8506
8507 echo " "
8508 case "$fpostype" in
8509 *_t) zzz="$fpostype"    ;;
8510 *)   zzz="fpos_t"       ;;
8511 esac
8512 echo "Checking the size of $zzz..." >&4 
8513 cat > try.c <<EOCP
8514 #include <sys/types.h>
8515 #include <stdio.h>
8516 int main() {
8517     printf("%d\n", (int)sizeof($fpostype));
8518     exit(0);
8519 }
8520 EOCP
8521 set try
8522 if eval $compile_ok; then
8523         yyy=`$run ./try`
8524         case "$yyy" in
8525         '')     fpossize=4
8526                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8527                 ;;
8528         *)      fpossize=$yyy
8529                 echo "Your $zzz is $fpossize bytes long."
8530                 ;;
8531         esac
8532 else
8533         dflt="$longsize"
8534         echo " " >&4
8535         echo "(I can't compile the test program.  Guessing...)" >&4
8536         rp="What is the size of your file positions (in bytes)?"
8537         . ./myread
8538         fpossize="$ans"
8539 fi
8540
8541
8542
8543 # Backward compatibility (uselfs is deprecated).
8544 case "$uselfs" in
8545 "$define"|true|[yY]*)
8546         cat <<EOM >&4
8547
8548 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8549 EOM
8550         uselargefiles="$define"
8551         ;;
8552 esac                          
8553
8554 case "$lseeksize:$fpossize" in
8555 8:8) cat <<EOM
8556
8557 You can have files larger than 2 gigabytes.
8558 EOM
8559    val="$define" ;;
8560 *)    case "$uselargefiles" in
8561    "$undef"|false|[nN]*) dflt='n' ;;
8562    *)   dflt='y' ;;
8563    esac
8564    cat <<EOM
8565
8566 Perl can be built to understand large files (files larger than 2 gigabytes)
8567 on some systems.  To do so, Configure can be run with -Duselargefiles.
8568
8569 If this doesn't make any sense to you, just accept the default '$dflt'.
8570 EOM
8571    rp='Try to understand large files, if available?'
8572    . ./myread
8573    case "$ans" in
8574    y|Y)         val="$define" ;;
8575    *)           val="$undef"  ;;
8576    esac
8577    ;;
8578 esac
8579 set uselargefiles
8580 eval $setvar
8581 case "$uselargefiles" in
8582 "$define")
8583 : Look for a hint-file generated 'call-back-unit'.  If the
8584 : user has specified that a large files perl is to be built,
8585 : we may need to set or change some other defaults.
8586         if $test -f uselargefiles.cbu; then
8587                 echo "Your platform has some specific hints for large file builds, using them..."
8588                 . ./uselargefiles.cbu
8589                 echo " "
8590                 echo "Rechecking to see how big your file offsets are..." >&4
8591                 $cat >try.c <<EOCP
8592 #include <sys/types.h>
8593 #include <stdio.h>
8594 int main()
8595 {
8596     printf("%d\n", (int)sizeof($lseektype));
8597     return(0); 
8598 }
8599 EOCP
8600                 set try
8601                 if eval $compile_ok; then
8602                         lseeksize=`$run ./try`
8603                         $echo "Your file offsets are now $lseeksize bytes long."
8604                 else
8605                         dflt="$lseeksize"
8606                         echo " "
8607                         echo "(I can't seem to compile the test program.  Guessing...)"
8608                         rp="What is the size of your file offsets (in bytes)?"
8609                         . ./myread
8610                         lseeksize="$ans"
8611                 fi
8612                 case "$fpostype" in
8613                 *_t) zzz="$fpostype"    ;;
8614                 *)   zzz="fpos_t"       ;;
8615                 esac
8616                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8617                 $cat > try.c <<EOCP
8618 #include <sys/types.h>
8619 #include <stdio.h>
8620 int main() {
8621     printf("%d\n", (int)sizeof($fpostype));
8622     exit(0);
8623 }
8624 EOCP
8625                 set try
8626                 if eval $compile_ok; then
8627                         yyy=`$run ./try`
8628                         dflt="$lseeksize"
8629                         case "$yyy" in
8630                         '')     echo " "
8631                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8632                                 ;;
8633                         *)      fpossize=$yyy
8634                                 echo " $fpossize bytes." >&4
8635                                 ;;
8636                         esac
8637                 else
8638                         dflt="$fpossize"
8639                         echo " "
8640                         echo "(I can't compile the test program.  Guessing...)" >&4
8641                         rp="What is the size of your file positions (in bytes)?"
8642                         . ./myread
8643                         fpossize="$ans"
8644                 fi
8645                 $rm -f try.c try
8646         fi
8647         ;;
8648 esac
8649
8650 case "$vendorprefix" in
8651 '')     d_vendorbin="$undef"
8652         vendorbin=''
8653         vendorbinexp=''
8654         ;;
8655 *)      d_vendorbin="$define"
8656         : determine where vendor-supplied executables go.
8657         case "$vendorbin" in
8658         '') dflt=$vendorprefix/bin ;;
8659         *)      dflt="$vendorbin" ;;
8660         esac
8661         fn=d~+
8662         rp='Pathname for the vendor-supplied executables directory?'
8663         . ./getfile
8664         vendorbin="$ans"
8665         vendorbinexp="$ansexp"
8666         ;;
8667 esac
8668 : Change installation prefix, if necessary.
8669 if $test X"$prefix" != X"$installprefix"; then
8670         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8671 else
8672         installvendorbin="$vendorbinexp"
8673 fi
8674
8675 : see if qgcvt exists
8676 set qgcvt d_qgcvt
8677 eval $inlibc
8678
8679 : Check how to convert floats to strings.
8680
8681 if test "X$d_Gconvert" = X; then
8682
8683 echo " "
8684 echo "Checking for an efficient way to convert floats to strings."
8685 echo " " > try.c
8686 case "$uselongdouble" in
8687 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8688 esac
8689 case "$d_longdbl" in
8690 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8691 esac
8692 case "$d_PRIgldbl" in
8693 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8694 esac
8695 $cat >>try.c <<EOP
8696 #ifdef TRY_gconvert
8697 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8698 char *myname = "gconvert";
8699 #endif
8700 #ifdef TRY_gcvt
8701 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8702 char *myname = "gcvt";
8703 #endif
8704 #ifdef TRY_qgcvt
8705 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8706 char *myname = "qgcvt";
8707 #define DOUBLETYPE long double
8708 #endif
8709 #ifdef TRY_sprintf
8710 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8711 #ifdef HAS_PRIgldbl
8712 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8713 #else
8714 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(double)(x))
8715 #endif
8716 #else
8717 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8718 #endif
8719 char *myname = "sprintf";
8720 #endif
8721
8722 #ifndef DOUBLETYPE
8723 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8724 #define DOUBLETYPE long double
8725 #else
8726 #define DOUBLETYPE double
8727 #endif
8728 #endif
8729
8730 #include <stdio.h>
8731
8732 #define I_STDLIB $i_stdlib
8733 #ifdef I_STDLIB
8734 #include <stdlib.h>
8735 #endif
8736
8737 int
8738 checkit(expect, got)
8739 char *expect;
8740 char *got;
8741 {
8742     if (strcmp(expect, got)) {
8743                 printf("%s oddity:  Expected %s, got %s\n",
8744                         myname, expect, got);
8745                 exit(1);
8746         }
8747 }
8748
8749 int main()
8750
8751         char buf[64]; 
8752         buf[63] = '\0';
8753
8754         /* This must be 1st test on (which?) platform */
8755         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8756         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8757         checkit("0.1", buf);
8758
8759         Gconvert((DOUBLETYPE)0.01, 8, 0, buf); 
8760         checkit("0.01", buf);
8761
8762         Gconvert((DOUBLETYPE)0.001, 8, 0, buf); 
8763         checkit("0.001", buf);
8764
8765         Gconvert((DOUBLETYPE)0.0001, 8, 0, buf); 
8766         checkit("0.0001", buf);
8767
8768         Gconvert((DOUBLETYPE)0.00009, 8, 0, buf);
8769         if (strlen(buf) > 5)
8770             checkit("9e-005", buf); /* for Microsoft ?? */
8771         else
8772             checkit("9e-05", buf);
8773
8774         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8775         checkit("1", buf);
8776
8777         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8778         checkit("1.1", buf);
8779
8780         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8781         checkit("1.01", buf);
8782
8783         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8784         checkit("1.001", buf);
8785
8786         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8787         checkit("1.0001", buf);
8788
8789         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8790         checkit("1.00001", buf);
8791
8792         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8793         checkit("1.000001", buf);
8794
8795         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8796         checkit("0", buf);
8797
8798         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8799         checkit("-1", buf);
8800
8801         /* Some Linux gcvt's give 1.e+5 here. */
8802         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8803         checkit("100000", buf);
8804         
8805         /* Some Linux gcvt's give -1.e+5 here. */
8806         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8807         checkit("-100000", buf);
8808
8809         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8810         checkit("123.456", buf);
8811
8812         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8813         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8814         if (strlen(buf) > 5)
8815             checkit("1e+030", buf); /* for Microsoft */
8816         else
8817             checkit("1e+30", buf);
8818
8819         exit(0);
8820 }
8821 EOP
8822 : first add preferred functions to our list
8823 xxx_list=""
8824 for xxx_convert in $gconvert_preference; do
8825     case $xxx_convert in
8826     gcvt|gconvert|sprintf) xxx_list="$xxx_list $xxx_convert" ;;
8827     *) echo "Discarding unrecognized gconvert_preference $xxx_convert" >&4 ;;
8828     esac 
8829 done
8830 : then add any others
8831 for xxx_convert in gconvert gcvt sprintf; do
8832     case "$xxx_list" in
8833     *$xxx_convert*) ;;
8834     *) xxx_list="$xxx_list $xxx_convert" ;;
8835     esac 
8836 done
8837
8838 case "$d_longdbl$uselongdouble" in
8839 "$define$define")
8840     : again, add prefered functions to our list first
8841     xxx_ld_list=""
8842     for xxx_convert in $gconvert_ld_preference; do
8843         case $xxx_convert in
8844         qgcvt|gcvt|gconvert|sprintf) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8845         *) echo "Discarding unrecognized gconvert_ld_preference $xxx_convert" ;;
8846         esac
8847     done
8848     : then add qgcvt, sprintf--then, in xxx_list order, gconvert and gcvt
8849     for xxx_convert in qgcvt sprintf $xxx_list; do
8850         case "$xxx_ld_list" in
8851         $xxx_convert*|*" $xxx_convert"*) ;;
8852         *) xxx_ld_list="$xxx_ld_list $xxx_convert" ;;
8853         esac
8854     done
8855     : if sprintf cannot do long doubles, move it to the end
8856     if test "$d_PRIgldbl" != "$define"; then
8857         xxx_ld_list="`echo $xxx_ld_list|sed s/sprintf//` sprintf"
8858     fi
8859     : if no qgcvt, remove it
8860     if test "$d_qgcvt" != "$define"; then
8861         xxx_ld_list="`echo $xxx_ld_list|sed s/qgcvt//`"
8862     fi
8863     : use the ld_list
8864     xxx_list="$xxx_ld_list"
8865     ;;
8866 esac
8867
8868 for xxx_convert in $xxx_list; do
8869         echo "Trying $xxx_convert..."
8870         $rm -f try try$_o
8871         set try -DTRY_$xxx_convert
8872         if eval $compile; then
8873                 echo "$xxx_convert() found." >&4
8874                 if $run ./try; then
8875                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8876                         break;
8877                 else
8878                         echo "...But $xxx_convert didn't work as I expected."
8879                         xxx_convert=''
8880                 fi
8881         else
8882                 echo "$xxx_convert NOT found." >&4
8883         fi
8884 done
8885
8886 if test X$xxx_convert = X; then
8887     echo "*** WHOA THERE!!! ***" >&4
8888     echo "None of ($xxx_list)  seemed to work properly.  I'll use sprintf." >&4
8889     xxx_convert=sprintf
8890 fi
8891
8892 case "$xxx_convert" in
8893 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8894 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8895 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8896 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8897    "$define$define$define")
8898       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8899    "$define$define$undef")
8900       d_Gconvert='sprintf((b),"%.*g",(n),(double)(x))' ;;
8901    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8902    esac
8903    ;;  
8904 esac
8905
8906 fi
8907
8908 : see if _fwalk exists
8909 set fwalk d__fwalk
8910 eval $inlibc
8911
8912 : Initialize h_fcntl
8913 h_fcntl=false
8914
8915 : Initialize h_sysfile
8916 h_sysfile=false
8917
8918 : access call always available on UNIX
8919 set access d_access
8920 eval $inlibc
8921
8922 : locate the flags for 'access()'
8923 case "$d_access" in
8924 "$define")
8925         echo " "
8926         $cat >access.c <<'EOCP'
8927 #include <sys/types.h>
8928 #ifdef I_FCNTL
8929 #include <fcntl.h>
8930 #endif
8931 #ifdef I_SYS_FILE
8932 #include <sys/file.h>
8933 #endif
8934 #ifdef I_UNISTD
8935 #include <unistd.h>
8936 #endif
8937 int main() {
8938         exit(R_OK);
8939 }
8940 EOCP
8941         : check sys/file.h first, no particular reason here
8942         if $test `./findhdr sys/file.h` && \
8943                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8944                 h_sysfile=true;
8945                 echo "<sys/file.h> defines the *_OK access constants." >&4
8946         elif $test `./findhdr fcntl.h` && \
8947                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8948                 h_fcntl=true;
8949                 echo "<fcntl.h> defines the *_OK access constants." >&4
8950         elif $test `./findhdr unistd.h` && \
8951                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8952                 echo "<unistd.h> defines the *_OK access constants." >&4
8953         else
8954                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8955         fi
8956         ;;
8957 esac
8958 $rm -f access*
8959
8960 : see if accessx exists
8961 set accessx d_accessx
8962 eval $inlibc
8963
8964 : see if alarm exists
8965 set alarm d_alarm
8966 eval $inlibc
8967
8968 : see if atolf exists
8969 set atolf d_atolf
8970 eval $inlibc
8971
8972 : see if atoll exists
8973 set atoll d_atoll
8974 eval $inlibc
8975
8976 : Look for GNU-cc style attribute checking
8977 echo " "
8978 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8979 $cat >attrib.c <<'EOCP'
8980 #include <stdio.h>
8981 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8982 EOCP
8983 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8984         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8985                 echo "Your C compiler doesn't fully support __attribute__."
8986                 val="$undef"
8987         else
8988                 echo "Your C compiler supports __attribute__."
8989                 val="$define"
8990         fi
8991 else
8992         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8993         val="$undef"
8994 fi
8995 set d_attribut
8996 eval $setvar
8997 $rm -f attrib*
8998
8999 : see if bcmp exists
9000 set bcmp d_bcmp
9001 eval $inlibc
9002
9003 : see if bcopy exists
9004 set bcopy d_bcopy
9005 eval $inlibc
9006
9007 : see if this is a unistd.h system
9008 set unistd.h i_unistd
9009 eval $inhdr
9010
9011 : see if getpgrp exists
9012 set getpgrp d_getpgrp
9013 eval $inlibc
9014
9015 case "$d_getpgrp" in
9016 "$define")
9017         echo " "
9018         echo "Checking to see which flavor of getpgrp is in use..."
9019         $cat >try.c <<EOP
9020 #$i_unistd I_UNISTD
9021 #include <sys/types.h>
9022 #ifdef I_UNISTD
9023 #  include <unistd.h>
9024 #endif
9025 int main()
9026 {
9027         if (getuid() == 0) {
9028                 printf("(I see you are running Configure as super-user...)\n");
9029                 setuid(1);
9030         }
9031 #ifdef TRY_BSD_PGRP
9032         if (getpgrp(1) == 0)
9033                 exit(0);
9034 #else
9035         if (getpgrp() > 0)
9036                 exit(0);
9037 #endif
9038         exit(1);
9039 }
9040 EOP
9041         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9042                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
9043                 val="$define"
9044         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9045                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
9046                 val="$undef"
9047         else
9048                 echo "I can't seem to compile and run the test program."
9049                 if ./usg; then
9050                         xxx="a USG one, i.e. you use getpgrp()."
9051                 else
9052                         # SVR4 systems can appear rather BSD-ish.
9053                         case "$i_unistd" in
9054                         $undef)
9055                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
9056                                 val="$define"
9057                                 ;;
9058                         $define)
9059                                 xxx="probably a USG one, i.e. you use getpgrp()."
9060                                 val="$undef"
9061                                 ;;
9062                         esac
9063                 fi
9064                 echo "Assuming your getpgrp is $xxx" >&4
9065         fi
9066         ;;
9067 *) val="$undef";;
9068 esac
9069 set d_bsdgetpgrp
9070 eval $setvar
9071 $rm -f try try.*
9072
9073 : see if setpgrp exists
9074 set setpgrp d_setpgrp
9075 eval $inlibc
9076
9077 case "$d_setpgrp" in
9078 "$define")
9079         echo " "
9080         echo "Checking to see which flavor of setpgrp is in use..."
9081         $cat >try.c <<EOP
9082 #$i_unistd I_UNISTD
9083 #include <sys/types.h>
9084 #ifdef I_UNISTD
9085 #  include <unistd.h>
9086 #endif
9087 int main()
9088 {
9089         if (getuid() == 0) {
9090                 printf("(I see you are running Configure as super-user...)\n");
9091                 setuid(1);
9092         }
9093 #ifdef TRY_BSD_PGRP
9094         if (-1 == setpgrp(1, 1))
9095                 exit(0);
9096 #else
9097         if (setpgrp() != -1)
9098                 exit(0);
9099 #endif
9100         exit(1);
9101 }
9102 EOP
9103         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9104                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
9105                 val="$define"
9106         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
9107                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
9108                 val="$undef"
9109         else
9110                 echo "(I can't seem to compile and run the test program.)"
9111                 if ./usg; then
9112                         xxx="a USG one, i.e. you use setpgrp()."
9113                 else
9114                         # SVR4 systems can appear rather BSD-ish.
9115                         case "$i_unistd" in
9116                         $undef)
9117                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
9118                                 val="$define"
9119                                 ;;
9120                         $define)
9121                                 xxx="probably a USG one, i.e. you use setpgrp()."
9122                                 val="$undef"
9123                                 ;;
9124                         esac
9125                 fi
9126                 echo "Assuming your setpgrp is $xxx" >&4
9127         fi
9128         ;;
9129 *) val="$undef";;
9130 esac
9131 set d_bsdsetpgrp
9132 eval $setvar
9133 $rm -f try try.*
9134 : see if bzero exists
9135 set bzero d_bzero
9136 eval $inlibc
9137
9138 : see if signal is declared as pointer to function returning int or void
9139 echo " "
9140 xxx=`./findhdr signal.h`
9141 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
9142 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
9143         echo "You have int (*signal())() instead of void." >&4
9144         val="$undef"
9145 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
9146         echo "You have void (*signal())()." >&4
9147         val="$define"
9148 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
9149         echo "You have int (*signal())() instead of void." >&4
9150         val="$undef"
9151 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
9152         echo "You have void (*signal())()." >&4
9153         val="$define"
9154 else
9155         case "$d_voidsig" in
9156         '')
9157         echo "I can't determine whether signal handler returns void or int..." >&4
9158                 dflt=void
9159                 rp="What type does your signal handler return?"
9160                 . ./myread
9161                 case "$ans" in
9162                 v*) val="$define";;
9163                 *) val="$undef";;
9164                 esac;;
9165         "$define")
9166                 echo "As you already told me, signal handler returns void." >&4
9167                 val="$define"
9168                 ;;
9169         *)      echo "As you already told me, signal handler returns int." >&4
9170                 val="$undef"
9171                 ;;
9172         esac
9173 fi
9174 set d_voidsig
9175 eval $setvar
9176 case "$d_voidsig" in
9177 "$define") signal_t="void";;
9178 *) signal_t="int";;
9179 esac
9180 $rm -f $$.tmp
9181
9182 : check for ability to cast large floats to 32-bit ints.
9183 echo " "
9184 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
9185 if $test "$intsize" -ge 4; then
9186         xxx=int
9187 else
9188         xxx=long
9189 fi
9190 $cat >try.c <<EOCP
9191 #include <stdio.h>
9192 #include <sys/types.h>
9193 #include <signal.h>
9194 $signal_t blech(s) int s; { exit(3); }
9195 int main()
9196 {
9197         $xxx i32;
9198         double f, g;
9199         int result = 0;
9200         char str[16];
9201         signal(SIGFPE, blech);
9202
9203         /* Don't let compiler optimize the test away.  Store the number 
9204            in a writable string for gcc to pass to sscanf under HP/UX.
9205         */
9206         sprintf(str, "2147483647");
9207         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
9208         g = 10 * f;
9209         i32  = ($xxx) g;
9210
9211         /* x86 processors will probably give 0x8000 0000, which is a
9212        sign change.  We don't want that.  We want to mimic SPARC
9213            behavior here, which is to preserve the sign and give
9214            back 0x7fff ffff.
9215         */
9216         if (i32 != ($xxx) f)
9217                 result |= 1;
9218         exit(result);
9219 }
9220 EOCP
9221 set try
9222 if eval $compile_ok; then
9223         $run ./try
9224         yyy=$?
9225 else
9226         echo "(I can't seem to compile the test program--assuming it can't)"
9227         yyy=1
9228 fi
9229 case "$yyy" in
9230 0)      val="$define"
9231         echo "Yup, it can."
9232         ;;
9233 *)      val="$undef"
9234         echo "Nope, it can't."
9235         ;;
9236 esac
9237 set d_casti32
9238 eval $setvar
9239 $rm -f try try.*
9240
9241 : check for ability to cast negative floats to unsigned
9242 echo " "
9243 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9244 $cat >try.c <<EOCP
9245 #include <stdio.h>
9246 #include <sys/types.h>
9247 #include <signal.h>
9248 $signal_t blech(s) int s; { exit(7); }
9249 $signal_t blech_in_list(s) int s; { exit(4); }
9250 unsigned long dummy_long(p) unsigned long p; { return p; }
9251 unsigned int dummy_int(p) unsigned int p; { return p; }
9252 unsigned short dummy_short(p) unsigned short p; { return p; }
9253 int main()
9254 {
9255         double f;
9256         unsigned long along;
9257         unsigned int aint;
9258         unsigned short ashort;
9259         int result = 0;
9260         char str[16];
9261         
9262         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9263            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9264            optimized the whole file away
9265         */
9266         /* Store the number in a writable string for gcc to pass to 
9267            sscanf under HP/UX.
9268         */
9269         sprintf(str, "-123");
9270         sscanf(str, "%lf", &f);  /* f = -123.; */
9271
9272         signal(SIGFPE, blech);
9273         along = (unsigned long)f;
9274         aint = (unsigned int)f;
9275         ashort = (unsigned short)f;
9276         if (along != (unsigned long)-123)
9277                 result |= 1;
9278         if (aint != (unsigned int)-123)
9279                 result |= 1;
9280         if (ashort != (unsigned short)-123)
9281                 result |= 1;
9282         sprintf(str, "1073741824.");
9283         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9284         f = f + f;
9285         along = 0;
9286         along = (unsigned long)f;
9287         if (along != 0x80000000)
9288                 result |= 2;
9289         f -= 1.;
9290         along = 0;
9291         along = (unsigned long)f;
9292         if (along != 0x7fffffff)
9293                 result |= 1;
9294         f += 2.;
9295         along = 0;
9296         along = (unsigned long)f;
9297         if (along != 0x80000001)
9298                 result |= 2;
9299         if (result)
9300                 exit(result);
9301         signal(SIGFPE, blech_in_list);
9302         sprintf(str, "123.");
9303         sscanf(str, "%lf", &f);  /* f = 123.; */
9304         along = dummy_long((unsigned long)f);
9305         aint = dummy_int((unsigned int)f);
9306         ashort = dummy_short((unsigned short)f);
9307         if (along != (unsigned long)123)
9308                 result |= 4;
9309         if (aint != (unsigned int)123)
9310                 result |= 4;
9311         if (ashort != (unsigned short)123)
9312                 result |= 4;
9313         exit(result);
9314
9315 }
9316 EOCP
9317 set try
9318 if eval $compile_ok; then
9319         $run ./try
9320         castflags=$?
9321 else
9322         echo "(I can't seem to compile the test program--assuming it can't)"
9323         castflags=7
9324 fi
9325 case "$castflags" in
9326 0)      val="$define"
9327         echo "Yup, it can."
9328         ;;
9329 *)      val="$undef"
9330         echo "Nope, it can't."
9331         ;;
9332 esac
9333 set d_castneg
9334 eval $setvar
9335 $rm -f try.*
9336
9337 : see if vprintf exists
9338 echo " "
9339 if set vprintf val -f d_vprintf; eval $csym; $val; then
9340         echo 'vprintf() found.' >&4
9341         val="$define"
9342         $cat >try.c <<'EOF'
9343 #include <varargs.h>
9344
9345 int main() { xxx("foo"); }
9346
9347 xxx(va_alist)
9348 va_dcl
9349 {
9350         va_list args;
9351         char buf[10];
9352
9353         va_start(args);
9354         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9355 }
9356 EOF
9357         set try
9358         if eval $compile && $run ./try; then
9359                 echo "Your vsprintf() returns (int)." >&4
9360                 val2="$undef"
9361         else
9362                 echo "Your vsprintf() returns (char*)." >&4
9363                 val2="$define"
9364         fi
9365 else
9366         echo 'vprintf() NOT found.' >&4
9367                 val="$undef"
9368                 val2="$undef"
9369 fi
9370 $rm -f try try.*
9371 set d_vprintf
9372 eval $setvar
9373 val=$val2
9374 set d_charvspr
9375 eval $setvar
9376
9377 : see if chown exists
9378 set chown d_chown
9379 eval $inlibc
9380
9381 : see if chroot exists
9382 set chroot d_chroot
9383 eval $inlibc
9384
9385 : see if chsize exists
9386 set chsize d_chsize
9387 eval $inlibc
9388
9389 : see if class exists
9390 set class d_class
9391 eval $inlibc
9392
9393 hasstruct='varname=$1; struct=$2; shift; shift;
9394 while $test $# -ge 2; do
9395         case "$1" in
9396         $define) echo "#include <$2>";;
9397         esac ;
9398     shift 2;
9399 done > try.c;
9400 echo "int main () { struct $struct foo; }" >> try.c;
9401 set try;
9402 if eval $compile; then
9403         val="$define";
9404 else
9405         val="$undef";
9406 fi;
9407 set $varname;
9408 eval $setvar;
9409 $rm -f try.c try.o'
9410
9411 : see if sys/types.h has to be included
9412 set sys/types.h i_systypes
9413 eval $inhdr
9414
9415 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9416 while $test $# -ge 2; do
9417         case "$1" in
9418         $define) echo "#include <$2>";;
9419         esac ;
9420     shift 2;
9421 done > try.c;
9422 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9423 set try;
9424 if eval $compile; then
9425         val="$define";
9426 else
9427         val="$undef";
9428 fi;
9429 set $varname;
9430 eval $setvar;
9431 $rm -f try.c try.o'
9432
9433 socketlib=''
9434 sockethdr=''
9435 : see whether socket exists
9436 echo " "
9437 $echo $n "Hmm... $c" >&4
9438 if set socket val -f d_socket; eval $csym; $val; then
9439         echo "Looks like you have Berkeley networking support." >&4
9440         d_socket="$define"
9441         if set setsockopt val -f; eval $csym; $val; then
9442                 d_oldsock="$undef"
9443         else
9444                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9445                 d_oldsock="$define"
9446         fi
9447 else
9448         if $contains socklib libc.list >/dev/null 2>&1; then
9449                 echo "Looks like you have Berkeley networking support." >&4
9450                 d_socket="$define"
9451                 : we will have to assume that it supports the 4.2 BSD interface
9452                 d_oldsock="$undef"
9453         else
9454                 echo "You don't have Berkeley networking in libc$_a..." >&4
9455                 if test "X$d_socket" = "X$define"; then
9456                    echo "...but you seem to believe that you have sockets." >&4
9457                 else
9458                         for net in net socket
9459                         do
9460                                 if test -f /usr/lib/lib$net$_a; then
9461                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9462                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9463                                         if $contains socket libc.list >/dev/null 2>&1; then
9464                                                 d_socket="$define"
9465                                                 socketlib="-l$net"
9466                                                 case "$net" in
9467                                                 net)
9468                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9469                                                         sockethdr="-I/usr/netinclude"
9470                                                         ;;
9471                                                 esac
9472                                                 echo "Found Berkeley sockets interface in lib$net." >&4 
9473                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9474                                                         d_oldsock="$undef"
9475                                                 else
9476                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9477                                                         d_oldsock="$define"
9478                                                 fi
9479                                                 break
9480                                         fi
9481                                 fi
9482                         done
9483                         if test "X$d_socket" != "X$define"; then
9484                            echo "or anywhere else I see." >&4
9485                            d_socket="$undef"
9486                            d_oldsock="$undef"
9487                         fi
9488                 fi
9489         fi
9490 fi
9491
9492 : see if socketpair exists
9493 set socketpair d_sockpair
9494 eval $inlibc
9495
9496
9497 echo " "
9498 echo "Checking the availability of certain socket constants..." >&4
9499 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9500         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9501         $cat >try.c <<EOF
9502 #include <sys/types.h>
9503 #include <sys/socket.h>
9504 int main() {
9505     int i = $ENUM;
9506 }
9507 EOF
9508         val="$undef"
9509         set try; if eval $compile; then
9510                 val="$define"
9511         fi
9512         set d_${enum}; eval $setvar
9513         $rm -f try.c try
9514 done
9515
9516 : see if this is a sys/uio.h system
9517 set sys/uio.h i_sysuio
9518 eval $inhdr
9519
9520
9521 echo " "
9522 echo "Checking to see if your system supports struct cmsghdr..." >&4
9523 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9524 eval $hasstruct
9525 case "$d_cmsghdr_s" in
9526 "$define")      echo "Yes, it does."   ;;
9527 *)              echo "No, it doesn't." ;;
9528 esac
9529
9530
9531 : check for const keyword
9532 echo " "
9533 echo 'Checking to see if your C compiler knows about "const"...' >&4
9534 $cat >const.c <<'EOCP'
9535 typedef struct spug { int drokk; } spug;
9536 int main()
9537 {
9538         const char *foo;
9539         const spug y;
9540 }
9541 EOCP
9542 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9543         val="$define"
9544         echo "Yup, it does."
9545 else
9546         val="$undef"
9547         echo "Nope, it doesn't."
9548 fi
9549 set d_const
9550 eval $setvar
9551
9552 : see if crypt exists
9553 echo " "
9554 set crypt d_crypt
9555 eval $inlibc
9556 case "$d_crypt" in
9557 $define) cryptlib='' ;;
9558 *)      if set crypt val -f d_crypt; eval $csym; $val; then
9559                 echo 'crypt() found.' >&4
9560                 val="$define"
9561                 cryptlib=''
9562         else
9563                 cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9564                 if $test -z "$cryptlib"; then
9565                         cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9566                 else
9567                         cryptlib=-lcrypt
9568                 fi
9569                 if $test -z "$cryptlib"; then
9570                         cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9571                 else
9572                         cryptlib=-lcrypt
9573                 fi
9574                 if $test -z "$cryptlib"; then
9575                         cryptlib=`./loc libcrypt$_a "" $libpth`
9576                 else
9577                         cryptlib=-lcrypt
9578                 fi
9579                 if $test -z "$cryptlib"; then
9580                         echo 'crypt() NOT found.' >&4
9581                         val="$undef"
9582                 else
9583                         val="$define"
9584                 fi
9585         fi
9586         set d_crypt
9587         eval $setvar
9588         ;;
9589 esac
9590
9591 : get csh whereabouts
9592 case "$csh" in
9593 'csh') val="$undef" ;;
9594 *) val="$define" ;;
9595 esac
9596 set d_csh
9597 eval $setvar
9598 : Respect a hint or command line value for full_csh.
9599 case "$full_csh" in
9600 '') full_csh=$csh ;;
9601 esac
9602
9603 : see if cuserid exists
9604 set cuserid d_cuserid
9605 eval $inlibc
9606
9607 : see if this is a limits.h system
9608 set limits.h i_limits
9609 eval $inhdr
9610
9611 : see if this is a float.h system
9612 set float.h i_float
9613 eval $inhdr
9614
9615 : See if number of significant digits in a double precision number is known
9616 echo " "
9617 $cat >dbl_dig.c <<EOM
9618 #$i_limits I_LIMITS
9619 #$i_float I_FLOAT
9620 #ifdef I_LIMITS
9621 #include <limits.h>
9622 #endif
9623 #ifdef I_FLOAT
9624 #include <float.h>
9625 #endif
9626 #ifdef DBL_DIG
9627 printf("Contains DBL_DIG");
9628 #endif
9629 EOM
9630 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9631 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9632         echo "DBL_DIG found." >&4
9633         val="$define"
9634 else
9635         echo "DBL_DIG NOT found." >&4
9636         val="$undef"
9637 fi
9638 $rm -f dbl_dig.?
9639 set d_dbl_dig
9640 eval $setvar
9641
9642 hasproto='varname=$1; func=$2; shift; shift;
9643 while $test $# -ge 2; do
9644         case "$1" in
9645         $define) echo "#include <$2>";;
9646         esac ;
9647     shift 2;
9648 done > try.c;
9649 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9650 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9651         echo "$func() prototype found.";
9652         val="$define";
9653 else
9654         echo "$func() prototype NOT found.";
9655         val="$undef";
9656 fi;
9657 set $varname;
9658 eval $setvar;
9659 $rm -f try.c tryout.c'
9660
9661 : see if dbm.h is available
9662 : see if dbmclose exists
9663 set dbmclose d_dbmclose
9664 eval $inlibc
9665
9666 case "$d_dbmclose" in
9667 $define)
9668         set dbm.h i_dbm
9669         eval $inhdr
9670         case "$i_dbm" in
9671         $define)
9672                 val="$undef"
9673                 set i_rpcsvcdbm
9674                 eval $setvar
9675                 ;;
9676         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9677                 eval $inhdr
9678                 ;;
9679         esac
9680         ;;
9681 *)      echo "We won't be including <dbm.h>"
9682         val="$undef"
9683         set i_dbm
9684         eval $setvar
9685         val="$undef"
9686         set i_rpcsvcdbm
9687         eval $setvar
9688         ;;
9689 esac
9690
9691 : see if prototype for dbminit is available
9692 echo " "
9693 set d_dbminitproto dbminit $i_dbm dbm.h
9694 eval $hasproto
9695
9696 : see if difftime exists
9697 set difftime d_difftime
9698 eval $inlibc
9699
9700 : see if this is a dirent system
9701 echo " "
9702 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9703         val="$define"
9704         echo "<dirent.h> found." >&4
9705 else
9706         val="$undef"
9707         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9708                 echo "<sys/dir.h> found." >&4
9709                 echo " "
9710         else
9711                 xinc=`./findhdr sys/ndir.h`
9712         fi
9713         echo "<dirent.h> NOT found." >&4
9714 fi
9715 set i_dirent
9716 eval $setvar
9717
9718 : Look for type of directory structure.
9719 echo " "
9720 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9721
9722 case "$direntrytype" in
9723 ''|' ')
9724         case "$i_dirent" in
9725         $define) guess1='struct dirent' ;;
9726         *) guess1='struct direct'  ;;
9727         esac
9728         ;;
9729 *)      guess1="$direntrytype"
9730         ;;
9731 esac
9732
9733 case "$guess1" in
9734 'struct dirent') guess2='struct direct' ;;
9735 *) guess2='struct dirent' ;;
9736 esac
9737                 
9738 if $contains "$guess1" try.c >/dev/null 2>&1; then
9739         direntrytype="$guess1"
9740         echo "Your directory entries are $direntrytype." >&4
9741 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9742         direntrytype="$guess2"
9743         echo "Your directory entries seem to be $direntrytype." >&4
9744 else
9745         echo "I don't recognize your system's directory entries." >&4
9746         rp="What type is used for directory entries on this system?"
9747         dflt="$guess1"
9748         . ./myread
9749         direntrytype="$ans"
9750 fi
9751 $rm -f try.c
9752
9753
9754 : see if the directory entry stores field length
9755 echo " "
9756 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9757 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9758         echo "Good, your directory entry keeps length information in d_namlen." >&4
9759         val="$define"
9760 else
9761         echo "Your directory entry does not know about the d_namlen field." >&4
9762         val="$undef"
9763 fi
9764 set d_dirnamlen
9765 eval $setvar
9766 $rm -f try.c
9767
9768 : see if this is an sysdir system
9769 set sys/dir.h i_sysdir
9770 eval $inhdr
9771
9772 : see if this is an sysndir system
9773 set sys/ndir.h i_sysndir
9774 eval $inhdr
9775
9776 : Look for dirfd
9777 echo " "
9778 $cat >dirfd.c <<EOM
9779 #include <stdio.h>
9780 #$i_dirent I_DIRENT             /**/
9781 #$i_sysdir I_SYS_DIR            /**/
9782 #$i_sysndir I_SYS_NDIR          /**/
9783 #$i_systypes I_SYS_TYPES        /**/
9784 #if defined(I_SYS_TYPES)
9785 #include <sys/types.h>
9786 #endif
9787 #if defined(I_DIRENT)
9788 #include <dirent.h>
9789 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9790 #include <sys/dir.h>
9791 #endif
9792 #else
9793 #ifdef I_SYS_NDIR
9794 #include <sys/ndir.h>
9795 #else
9796 #ifdef I_SYS_DIR
9797 #ifdef hp9000s500
9798 #include <ndir.h>       /* may be wrong in the future */
9799 #else
9800 #include <sys/dir.h>
9801 #endif
9802 #endif
9803 #endif
9804 #endif 
9805 int main() {
9806         DIR *dirp = opendir(".");
9807         if (dirfd(dirp) >= 0)
9808                 exit(0);
9809         else
9810                 exit(1);
9811 }
9812 EOM
9813 set dirfd
9814 if eval $compile; then
9815         val="$define"
9816 fi
9817 case "$val" in
9818 $define)        echo "dirfd() found." >&4       ;;
9819 *)              echo "dirfd() NOT found." >&4   ;;
9820 esac
9821 set d_dirfd
9822 eval $setvar
9823 $rm -f dirfd*
9824
9825 : see if dlerror exists
9826 xxx_runnm="$runnm"
9827 runnm=false
9828 set dlerror d_dlerror
9829 eval $inlibc
9830 runnm="$xxx_runnm"
9831
9832 : see if dlfcn is available
9833 set dlfcn.h i_dlfcn
9834 eval $inhdr
9835
9836 case "$usedl" in
9837 $define|y|true)
9838         $cat << EOM
9839
9840 On a few systems, the dynamically loaded modules that perl generates and uses
9841 will need a different extension than shared libs. The default will probably
9842 be appropriate.
9843
9844 EOM
9845         case "$dlext" in
9846         '')     dflt="$so" ;;
9847         *)      dflt="$dlext" ;;
9848         esac
9849         rp='What is the extension of dynamically loaded modules'
9850         . ./myread
9851         dlext="$ans"
9852         ;;
9853 *)
9854         dlext="none"
9855         ;;
9856 esac
9857
9858 : Check if dlsym need a leading underscore
9859 echo " "
9860 val="$undef"
9861
9862 case "$dlsrc" in
9863 dl_dlopen.xs)
9864         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9865         $cat >dyna.c <<'EOM'
9866 fred () { }
9867 EOM
9868
9869 $cat >fred.c<<EOM
9870
9871 #include <stdio.h>
9872 #$i_dlfcn I_DLFCN
9873 #ifdef I_DLFCN
9874 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9875 #else
9876 #include <sys/types.h>
9877 #include <nlist.h>
9878 #include <link.h>
9879 #endif
9880
9881 extern int fred() ;
9882
9883 int main()
9884 {
9885     void * handle ;
9886     void * symbol ;
9887 #ifndef RTLD_LAZY
9888     int mode = 1 ;
9889 #else
9890     int mode = RTLD_LAZY ;
9891 #endif
9892     handle = dlopen("./dyna.$dlext", mode) ;
9893     if (handle == NULL) {
9894         printf ("1\n") ;
9895         fflush (stdout) ;
9896         exit(0);
9897     }
9898     symbol = dlsym(handle, "fred") ;
9899     if (symbol == NULL) {
9900         /* try putting a leading underscore */
9901         symbol = dlsym(handle, "_fred") ;
9902         if (symbol == NULL) {
9903             printf ("2\n") ;
9904             fflush (stdout) ;
9905             exit(0);
9906         }
9907         printf ("3\n") ;
9908     }
9909     else
9910         printf ("4\n") ;
9911     fflush (stdout) ;
9912     exit(0);
9913 }
9914 EOM
9915         : Call the object file tmp-dyna.o in case dlext=o.
9916         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9917                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9918                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9919                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9920                 xxx=`$run ./fred`
9921                 case $xxx in
9922                 1)      echo "Test program failed using dlopen." >&4
9923                         echo "Perhaps you should not use dynamic loading." >&4;;
9924                 2)      echo "Test program failed using dlsym." >&4
9925                         echo "Perhaps you should not use dynamic loading." >&4;;
9926                 3)      echo "dlsym needs a leading underscore" >&4
9927                         val="$define" ;;
9928                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9929                 esac
9930         else
9931                 echo "I can't compile and run the test program." >&4
9932                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9933         fi
9934         ;;
9935 esac
9936                 
9937 $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.*
9938
9939 set d_dlsymun
9940 eval $setvar
9941
9942 : see if prototype for drand48 is available
9943 echo " "
9944 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9945 eval $hasproto
9946
9947 : see if dup2 exists
9948 set dup2 d_dup2
9949 eval $inlibc
9950
9951 : see if eaccess exists
9952 set eaccess d_eaccess
9953 eval $inlibc
9954
9955 : see if endgrent exists
9956 set endgrent d_endgrent
9957 eval $inlibc
9958
9959 : see if endhostent exists
9960 set endhostent d_endhent
9961 eval $inlibc
9962
9963 : see if endnetent exists
9964 set endnetent d_endnent
9965 eval $inlibc
9966
9967 : see if endprotoent exists
9968 set endprotoent d_endpent
9969 eval $inlibc
9970
9971 : see if endpwent exists
9972 set endpwent d_endpwent
9973 eval $inlibc
9974
9975 : see if endservent exists
9976 set endservent d_endsent
9977 eval $inlibc
9978
9979 : Locate the flags for 'open()'
9980 echo " "
9981 $cat >try.c <<'EOCP'
9982 #include <sys/types.h>
9983 #ifdef I_FCNTL
9984 #include <fcntl.h>
9985 #endif
9986 #ifdef I_SYS_FILE
9987 #include <sys/file.h>
9988 #endif
9989 int main() {
9990         if(O_RDONLY);
9991 #ifdef O_TRUNC
9992         exit(0);
9993 #else
9994         exit(1);
9995 #endif
9996 }
9997 EOCP
9998 : check sys/file.h first to get FREAD on Sun
9999 if $test `./findhdr sys/file.h` && \
10000                 set try -DI_SYS_FILE && eval $compile; then
10001         h_sysfile=true;
10002         echo "<sys/file.h> defines the O_* constants..." >&4
10003         if $run ./try; then
10004                 echo "and you have the 3 argument form of open()." >&4
10005                 val="$define"
10006         else
10007                 echo "but not the 3 argument form of open().  Oh, well." >&4
10008                 val="$undef"
10009         fi
10010 elif $test `./findhdr fcntl.h` && \
10011                 set try -DI_FCNTL && eval $compile; then
10012         h_fcntl=true;
10013         echo "<fcntl.h> defines the O_* constants..." >&4
10014         if $run ./try; then
10015                 echo "and you have the 3 argument form of open()." >&4
10016                 val="$define"
10017         else
10018                 echo "but not the 3 argument form of open().  Oh, well." >&4
10019                 val="$undef"
10020         fi
10021 else
10022         val="$undef"
10023         echo "I can't find the O_* constant definitions!  You got problems." >&4
10024 fi
10025 set d_open3
10026 eval $setvar
10027 $rm -f try try.*
10028
10029 : see which of string.h or strings.h is needed
10030 echo " "
10031 strings=`./findhdr string.h`
10032 if $test "$strings" && $test -r "$strings"; then
10033         echo "Using <string.h> instead of <strings.h>." >&4
10034         val="$define"
10035 else
10036         val="$undef"
10037         strings=`./findhdr strings.h`
10038         if $test "$strings" && $test -r "$strings"; then
10039                 echo "Using <strings.h> instead of <string.h>." >&4
10040         else
10041                 echo "No string header found -- You'll surely have problems." >&4
10042         fi
10043 fi
10044 set i_string
10045 eval $setvar
10046 case "$i_string" in
10047 "$undef") strings=`./findhdr strings.h`;;
10048 *)        strings=`./findhdr string.h`;;
10049 esac
10050
10051 : see if this is a sys/file.h system
10052 val=''
10053 set sys/file.h val
10054 eval $inhdr
10055
10056 : do we need to include sys/file.h ?
10057 case "$val" in
10058 "$define")
10059         echo " "
10060         if $h_sysfile; then
10061                 val="$define"
10062                 echo "We'll be including <sys/file.h>." >&4
10063         else
10064                 val="$undef"
10065                 echo "We won't be including <sys/file.h>." >&4
10066         fi
10067         ;;
10068 *)
10069         h_sysfile=false
10070         ;;
10071 esac
10072 set i_sysfile
10073 eval $setvar
10074
10075 : see if fcntl.h is there
10076 val=''
10077 set fcntl.h val
10078 eval $inhdr
10079
10080 : see if we can include fcntl.h
10081 case "$val" in
10082 "$define")
10083         echo " "
10084         if $h_fcntl; then
10085                 val="$define"
10086                 echo "We'll be including <fcntl.h>." >&4
10087         else
10088                 val="$undef"
10089                 if $h_sysfile; then
10090         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
10091                 else
10092                         echo "We won't be including <fcntl.h>." >&4
10093                 fi
10094         fi
10095         ;;
10096 *)
10097         h_fcntl=false
10098         val="$undef"
10099         ;;
10100 esac
10101 set i_fcntl
10102 eval $setvar
10103
10104 : check for non-blocking I/O stuff
10105 case "$h_sysfile" in
10106 true) echo "#include <sys/file.h>" > head.c;;
10107 *)
10108        case "$h_fcntl" in
10109        true) echo "#include <fcntl.h>" > head.c;;
10110        *) echo "#include <sys/fcntl.h>" > head.c;;
10111        esac
10112        ;;
10113 esac
10114 echo " "
10115 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
10116 case "$o_nonblock" in
10117 '')
10118         $cat head.c > try.c
10119         $cat >>try.c <<EOCP
10120 #include <stdio.h>
10121 #include <stdlib.h>
10122 #$i_fcntl I_FCNTL
10123 #ifdef I_FCNTL
10124 #include <fcntl.h>
10125 #endif
10126 int main() {
10127 #ifdef O_NONBLOCK
10128         printf("O_NONBLOCK\n");
10129         exit(0);
10130 #endif
10131 #ifdef O_NDELAY
10132         printf("O_NDELAY\n");
10133         exit(0);
10134 #endif
10135 #ifdef FNDELAY
10136         printf("FNDELAY\n");
10137         exit(0);
10138 #endif
10139         exit(0);
10140 }
10141 EOCP
10142         set try
10143         if eval $compile_ok; then
10144                 o_nonblock=`$run ./try`
10145                 case "$o_nonblock" in
10146                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
10147                 *) echo "Seems like we can use $o_nonblock.";;
10148                 esac
10149         else
10150                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
10151         fi
10152         ;;
10153 *) echo "Using $hint value $o_nonblock.";;
10154 esac
10155 $rm -f try try.* .out core
10156
10157 echo " "
10158 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
10159 case "$eagain" in
10160 '')
10161         $cat head.c > try.c
10162         $cat >>try.c <<EOCP
10163 #include <errno.h>
10164 #include <sys/types.h>
10165 #include <signal.h>
10166 #include <stdio.h> 
10167 #include <stdlib.h> 
10168 #$i_fcntl I_FCNTL
10169 #ifdef I_FCNTL
10170 #include <fcntl.h>
10171 #endif
10172 #define MY_O_NONBLOCK $o_nonblock
10173 #ifndef errno  /* XXX need better Configure test */
10174 extern int errno;
10175 #endif
10176 #$i_unistd I_UNISTD
10177 #ifdef I_UNISTD
10178 #include <unistd.h>
10179 #endif
10180 #$i_string I_STRING
10181 #ifdef I_STRING
10182 #include <string.h>
10183 #else
10184 #include <strings.h>
10185 #endif
10186 $signal_t blech(x) int x; { exit(3); }
10187 EOCP
10188         $cat >> try.c <<'EOCP'
10189 int main()
10190 {
10191         int pd[2];
10192         int pu[2];
10193         char buf[1];
10194         char string[100];
10195
10196         pipe(pd);       /* Down: child -> parent */
10197         pipe(pu);       /* Up: parent -> child */
10198         if (0 != fork()) {
10199                 int ret;
10200                 close(pd[1]);   /* Parent reads from pd[0] */
10201                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
10202 #ifdef F_SETFL
10203                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
10204                         exit(1);
10205 #else
10206                 exit(4);
10207 #endif
10208                 signal(SIGALRM, blech);
10209                 alarm(5);
10210                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
10211                         exit(2);
10212                 sprintf(string, "%d\n", ret);
10213                 write(2, string, strlen(string));
10214                 alarm(0);
10215 #ifdef EAGAIN
10216                 if (errno == EAGAIN) {
10217                         printf("EAGAIN\n");
10218                         goto ok;
10219                 }
10220 #endif
10221 #ifdef EWOULDBLOCK
10222                 if (errno == EWOULDBLOCK)
10223                         printf("EWOULDBLOCK\n");
10224 #endif
10225         ok:
10226                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
10227                 sleep(2);                               /* Give it time to close our pipe */
10228                 alarm(5);
10229                 ret = read(pd[0], buf, 1);      /* Should read EOF */
10230                 alarm(0);
10231                 sprintf(string, "%d\n", ret);
10232                 write(4, string, strlen(string));
10233                 exit(0);
10234         }
10235
10236         close(pd[0]);                   /* We write to pd[1] */
10237         close(pu[1]);                   /* We read from pu[0] */
10238         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
10239         close(pd[1]);                   /* Pipe pd is now fully closed! */
10240         exit(0);                                /* Bye bye, thank you for playing! */
10241 }
10242 EOCP
10243         set try
10244         if eval $compile_ok; then
10245                 echo "$startsh" >mtry
10246                 echo "$run ./try >try.out 2>try.ret 4>try.err || exit 4" >>mtry
10247                 chmod +x mtry
10248                 ./mtry >/dev/null 2>&1
10249                 case $? in
10250                 0) eagain=`$cat try.out`;;
10251                 1) echo "Could not perform non-blocking setting!";;
10252                 2) echo "I did a successful read() for something that was not there!";;
10253                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
10254                 4) echo "Could not find F_SETFL!";;
10255                 *) echo "Something terribly wrong happened during testing.";;
10256                 esac
10257                 rd_nodata=`$cat try.ret`
10258                 echo "A read() system call with no data present returns $rd_nodata."
10259                 case "$rd_nodata" in
10260                 0|-1) ;;
10261                 *)
10262                         echo "(That's peculiar, fixing that to be -1.)"
10263                         rd_nodata=-1
10264                         ;;
10265                 esac
10266                 case "$eagain" in
10267                 '')
10268                         echo "Forcing errno EAGAIN on read() with no data available."
10269                         eagain=EAGAIN
10270                         ;;
10271                 *)
10272                         echo "Your read() sets errno to $eagain when no data is available."
10273                         ;;
10274                 esac
10275                 status=`$cat try.err`
10276                 case "$status" in
10277                 0) echo "And it correctly returns 0 to signal EOF.";;
10278                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
10279                 *) echo "However, your read() returns '$status' on EOF??";;
10280                 esac
10281                 val="$define"
10282                 if test "$status" = "$rd_nodata"; then
10283                         echo "WARNING: you can't distinguish between EOF and no data!"
10284                         val="$undef"
10285                 fi
10286         else
10287                 echo "I can't compile the test program--assuming errno EAGAIN will do."
10288                 eagain=EAGAIN
10289         fi
10290         set d_eofnblk
10291         eval $setvar
10292         ;;
10293 *)
10294         echo "Using $hint value $eagain."
10295         echo "Your read() returns $rd_nodata when no data is present."
10296         case "$d_eofnblk" in
10297         "$define") echo "And you can see EOF because read() returns 0.";;
10298         "$undef") echo "But you can't see EOF status from read() returned value.";;
10299         *)
10300                 echo "(Assuming you can't see EOF status from read anyway.)"
10301                 d_eofnblk=$undef
10302                 ;;
10303         esac
10304         ;;
10305 esac
10306 $rm -f try try.* .out core head.c mtry
10307
10308 : see if fchdir exists
10309 set fchdir d_fchdir
10310 eval $inlibc
10311
10312 : see if fchmod exists
10313 set fchmod d_fchmod
10314 eval $inlibc
10315
10316 : see if fchown exists
10317 set fchown d_fchown
10318 eval $inlibc
10319
10320 : see if this is an fcntl system
10321 set fcntl d_fcntl
10322 eval $inlibc
10323
10324 echo " "
10325 : See if fcntl-based locking works.
10326 $cat >try.c <<EOCP
10327 #include <stdlib.h>
10328 #include <unistd.h>
10329 #include <fcntl.h>
10330 #include <signal.h>
10331 $signal_t blech(x) int x; { exit(3); }
10332 int main() {
10333 #if defined(F_SETLK) && defined(F_SETLKW)
10334      struct flock flock;
10335      int retval, fd;
10336      fd = open("try.c", O_RDONLY);
10337      flock.l_type = F_RDLCK;
10338      flock.l_whence = SEEK_SET;
10339      flock.l_start = flock.l_len = 0;
10340      signal(SIGALRM, blech);
10341      alarm(10);
10342      retval = fcntl(fd, F_SETLK, &flock);
10343      close(fd);
10344      (retval < 0 ? exit(2) : exit(0));
10345 #else
10346      exit(2);
10347 #endif
10348 }
10349 EOCP
10350 echo "Checking if fcntl-based file locking works... "
10351 case "$d_fcntl" in
10352 "$define")
10353         set try
10354         if eval $compile_ok; then
10355                 if $run ./try; then
10356                         echo "Yes, it seems to work."
10357                         val="$define"
10358                 else
10359                         echo "Nope, it didn't work."
10360                         val="$undef"
10361                         case "$?" in
10362                         3) $cat >&4 <<EOM
10363 ***
10364 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10365 *** This is (almost) impossible.
10366 *** If your NFS lock daemons are not feeling well, something like
10367 *** this may happen, please investigate.  Cannot continue, aborting.
10368 ***
10369 EOM
10370                                 exit 1
10371                                 ;;
10372                         esac
10373                 fi
10374         else
10375                 echo "I'm unable to compile the test program, so I'll assume not."
10376                 val="$undef"
10377         fi
10378         ;;
10379 *) val="$undef";
10380         echo "Nope, since you don't even have fcntl()."
10381         ;;
10382 esac
10383 set d_fcntl_can_lock
10384 eval $setvar
10385 $rm -f try*
10386
10387
10388 : see if sys/select.h has to be included
10389 set sys/select.h i_sysselct
10390 eval $inhdr
10391
10392 : see if we should include time.h, sys/time.h, or both
10393 echo " "
10394 if test "X$timeincl" = X; then
10395         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10396         $echo $n "I'm now running the test program...$c"
10397         $cat >try.c <<'EOCP'
10398 #include <sys/types.h>
10399 #ifdef I_TIME
10400 #include <time.h>
10401 #endif
10402 #ifdef I_SYSTIME
10403 #ifdef SYSTIMEKERNEL
10404 #define KERNEL
10405 #endif
10406 #include <sys/time.h>
10407 #endif
10408 #ifdef I_SYSSELECT
10409 #include <sys/select.h>
10410 #endif
10411 int main()
10412 {
10413         struct tm foo;
10414 #ifdef S_TIMEVAL
10415         struct timeval bar;
10416 #endif
10417 #ifdef S_TIMEZONE
10418         struct timezone tzp;
10419 #endif
10420         if (foo.tm_sec == foo.tm_sec)
10421                 exit(0);
10422 #ifdef S_TIMEVAL
10423         if (bar.tv_sec == bar.tv_sec)
10424                 exit(0);
10425 #endif
10426         exit(1);
10427 }
10428 EOCP
10429         flags=''
10430         for s_timezone in '-DS_TIMEZONE' ''; do
10431         sysselect=''
10432         for s_timeval in '-DS_TIMEVAL' ''; do
10433         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10434         for i_time in '' '-DI_TIME'; do
10435         for i_systime in '-DI_SYSTIME' ''; do
10436                 case "$flags" in
10437                 '') $echo $n ".$c"
10438                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10439                         if eval $compile; then
10440                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10441                                 shift
10442                                 flags="$*"
10443                                 echo " "
10444                                 $echo $n "Succeeded with $flags$c"
10445                         fi
10446                         ;;
10447                 esac
10448         done
10449         done
10450         done
10451         done
10452         done
10453         timeincl=''
10454         echo " "
10455         case "$flags" in
10456         *SYSTIMEKERNEL*) i_systimek="$define"
10457                 timeincl=`./findhdr sys/time.h`
10458                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10459         *) i_systimek="$undef";;
10460         esac
10461         case "$flags" in
10462         *I_TIME*) i_time="$define"
10463                 timeincl=`./findhdr time.h`" $timeincl"
10464                 echo "We'll include <time.h>." >&4;;
10465         *) i_time="$undef";;
10466         esac
10467         case "$flags" in
10468         *I_SYSTIME*) i_systime="$define"
10469                 timeincl=`./findhdr sys/time.h`" $timeincl"
10470                 echo "We'll include <sys/time.h>." >&4;;
10471         *) i_systime="$undef";;
10472         esac
10473         $rm -f try.c try
10474 fi
10475
10476 : check for fd_set items
10477 $cat <<EOM
10478
10479 Checking to see how well your C compiler handles fd_set and friends ...
10480 EOM
10481 $cat >try.c <<EOCP
10482 #$i_systime I_SYS_TIME
10483 #$i_sysselct I_SYS_SELECT
10484 #$d_socket HAS_SOCKET
10485 #include <sys/types.h>
10486 #ifdef HAS_SOCKET
10487 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10488 #endif
10489 #ifdef I_SYS_TIME
10490 #include <sys/time.h>
10491 #endif
10492 #ifdef I_SYS_SELECT
10493 #include <sys/select.h>
10494 #endif
10495 int main() {
10496         fd_set fds;
10497
10498 #ifdef TRYBITS
10499         if(fds.fds_bits);
10500 #endif
10501
10502 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10503         exit(0);
10504 #else
10505         exit(1);
10506 #endif
10507 }
10508 EOCP
10509 set try -DTRYBITS
10510 if eval $compile; then
10511         d_fds_bits="$define"
10512         d_fd_set="$define"
10513         echo "Well, your system knows about the normal fd_set typedef..." >&4
10514         if $run ./try; then
10515                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10516                 d_fd_macros="$define"
10517         else
10518                 $cat >&4 <<'EOM'
10519 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10520 EOM
10521                 d_fd_macros="$undef"
10522         fi
10523 else
10524         $cat <<'EOM'
10525 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10526 EOM
10527         set try
10528         if eval $compile; then
10529                 d_fds_bits="$undef"
10530                 d_fd_set="$define"
10531                 echo "Well, your system has some sort of fd_set available..." >&4
10532                 if $run ./try; then
10533                         echo "and you have the normal fd_set macros." >&4
10534                         d_fd_macros="$define"
10535                 else
10536                         $cat <<'EOM'
10537 but not the normal fd_set macros!  Gross!  More work for me...
10538 EOM
10539                         d_fd_macros="$undef"
10540                 fi
10541         else
10542         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10543                 d_fd_set="$undef"
10544                 d_fds_bits="$undef"
10545                 d_fd_macros="$undef"
10546         fi
10547 fi
10548 $rm -f try try.*
10549
10550 : see if fgetpos exists
10551 set fgetpos d_fgetpos
10552 eval $inlibc
10553
10554 : see if finite exists
10555 set finite d_finite
10556 eval $inlibc
10557
10558 : see if finitel exists
10559 set finitel d_finitel
10560 eval $inlibc
10561
10562 : see if flock exists
10563 set flock d_flock
10564 eval $inlibc
10565
10566 : see if prototype for flock is available
10567 echo " "
10568 set d_flockproto flock $i_sysfile sys/file.h
10569 eval $hasproto
10570
10571 : see if fork exists
10572 set fork d_fork
10573 eval $inlibc
10574
10575 : see if fp_class exists
10576 set fp_class d_fp_class
10577 eval $inlibc
10578
10579 : see if pathconf exists
10580 set pathconf d_pathconf
10581 eval $inlibc
10582
10583 : see if fpathconf exists
10584 set fpathconf d_fpathconf
10585 eval $inlibc
10586
10587 : see if fpclass exists
10588 set fpclass d_fpclass
10589 eval $inlibc
10590
10591 : see if fpclassify exists
10592 set fpclassify d_fpclassify
10593 eval $inlibc
10594
10595 : see if fpclassl exists
10596 set fpclassl d_fpclassl
10597 eval $inlibc
10598
10599
10600 : check for fpos64_t
10601 echo " "
10602 echo "Checking to see if you have fpos64_t..." >&4
10603 $cat >try.c <<EOCP
10604 #include <stdio.h>
10605 int main() { fpos64_t x = 7; }
10606 EOCP
10607 set try
10608 if eval $compile; then
10609         val="$define"
10610         echo "You have fpos64_t."
10611 else
10612         val="$undef"
10613         echo "You do not have fpos64_t."
10614         case "$fpossize" in
10615         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10616         esac
10617 fi
10618 $rm -f try.* try
10619 set d_fpos64_t
10620 eval $setvar
10621
10622 : see if frexpl exists
10623 set frexpl d_frexpl
10624 eval $inlibc
10625
10626 : see if this is a sys/param system
10627 set sys/param.h i_sysparam
10628 eval $inhdr
10629
10630 : see if this is a sys/mount.h system
10631 set sys/mount.h i_sysmount
10632 eval $inhdr
10633
10634
10635 echo " "
10636 echo "Checking to see if your system supports struct fs_data..." >&4
10637 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10638 eval $hasstruct
10639 case "$d_fs_data_s" in
10640 "$define")      echo "Yes, it does."   ;;
10641 *)              echo "No, it doesn't." ;;
10642 esac
10643
10644 : see if fseeko exists
10645 set fseeko d_fseeko
10646 eval $inlibc
10647 case "$longsize" in
10648 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10649 esac
10650
10651 : see if fsetpos exists
10652 set fsetpos d_fsetpos
10653 eval $inlibc
10654
10655
10656 : see if fstatfs exists
10657 set fstatfs d_fstatfs
10658 eval $inlibc
10659
10660
10661 : see if statvfs exists
10662 set statvfs d_statvfs
10663 eval $inlibc
10664
10665 : see if fstatvfs exists
10666 set fstatvfs d_fstatvfs
10667 eval $inlibc
10668
10669
10670 : see if fsync exists
10671 set fsync d_fsync
10672 eval $inlibc
10673
10674 : see if ftello exists
10675 set ftello d_ftello
10676 eval $inlibc
10677 case "$longsize" in
10678 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10679 esac
10680
10681 : see if getcwd exists
10682 set getcwd d_getcwd
10683 eval $inlibc
10684
10685 : see if getespwnam exists
10686 set getespwnam d_getespwnam
10687 eval $inlibc
10688
10689
10690 : see if getfsstat exists
10691 set getfsstat d_getfsstat
10692 eval $inlibc
10693
10694 : see if getgrent exists
10695 set getgrent d_getgrent
10696 eval $inlibc
10697
10698 : see if gethostbyaddr exists
10699 set gethostbyaddr d_gethbyaddr
10700 eval $inlibc
10701
10702 : see if gethostbyname exists
10703 set gethostbyname d_gethbyname
10704 eval $inlibc
10705
10706 : see if gethostent exists
10707 set gethostent d_gethent
10708 eval $inlibc
10709
10710 : see how we will look up host name
10711 echo " "
10712 call=''
10713 if set gethostname val -f d_gethname; eval $csym; $val; then
10714         echo 'gethostname() found.' >&4
10715         d_gethname="$define"
10716         call=gethostname
10717 fi
10718 if set uname val -f d_uname; eval $csym; $val; then
10719         if ./xenix; then
10720                 $cat <<'EOM'
10721 uname() was found, but you're running xenix, and older versions of xenix
10722 have a broken uname(). If you don't really know whether your xenix is old
10723 enough to have a broken system call, use the default answer.
10724
10725 EOM
10726                 dflt=y
10727                 case "$d_uname" in
10728                 "$define") dflt=n;;
10729                 esac
10730                 rp='Is your uname() broken?'
10731                 . ./myread
10732                 case "$ans" in
10733                 n*) d_uname="$define"; call=uname;;
10734                 esac
10735         else
10736                 echo 'uname() found.' >&4
10737                 d_uname="$define"
10738                 case "$call" in
10739                 '') call=uname ;;
10740                 esac
10741         fi
10742 fi
10743 case "$d_gethname" in
10744 '') d_gethname="$undef";;
10745 esac
10746 case "$d_uname" in
10747 '') d_uname="$undef";;
10748 esac
10749 case "$d_uname$d_gethname" in
10750 *define*)
10751         dflt=n
10752         cat <<EOM
10753  
10754 Every now and then someone has a $call() that lies about the hostname
10755 but can't be fixed for political or economic reasons.  If you wish, I can
10756 pretend $call() isn't there and maybe compute hostname at run-time
10757 thanks to the '$phostname' command.
10758
10759 EOM
10760         rp="Shall I ignore $call() from now on?"
10761         . ./myread
10762         case "$ans" in
10763         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10764         esac;;
10765 esac
10766 case "$phostname" in
10767 '') aphostname='';;
10768 *) case "$aphostname" in
10769         /*) ;;
10770         *) set X $phostname
10771                 shift
10772                 file=$1
10773                 shift
10774                 file=`./loc $file $file $pth`
10775                 aphostname=`echo $file $*`
10776                 ;;
10777         esac
10778         ;;
10779 esac
10780 case "$d_uname$d_gethname" in
10781 *define*) ;;
10782 *)
10783         case "$phostname" in
10784         '')
10785                 echo "There will be no way for $package to get your hostname." >&4;;
10786         *)
10787         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10788                 ;;
10789         esac;;
10790 esac
10791 case "$d_phostname" in
10792 '') d_phostname="$undef";;
10793 esac
10794
10795 : see if this is a netdb.h system
10796 set netdb.h i_netdb
10797 eval $inhdr
10798
10799 : see if prototypes for various gethostxxx netdb.h functions are available
10800 echo " "
10801 set d_gethostprotos gethostent $i_netdb netdb.h
10802 eval $hasproto
10803
10804 : see if getitimer exists
10805 set getitimer d_getitimer
10806 eval $inlibc
10807
10808 : see if getlogin exists
10809 set getlogin d_getlogin
10810 eval $inlibc
10811
10812 : see if getmnt exists
10813 set getmnt d_getmnt
10814 eval $inlibc
10815
10816 : see if getmntent exists
10817 set getmntent d_getmntent
10818 eval $inlibc
10819
10820 : see if getnetbyaddr exists
10821 set getnetbyaddr d_getnbyaddr
10822 eval $inlibc
10823
10824 : see if getnetbyname exists
10825 set getnetbyname d_getnbyname
10826 eval $inlibc
10827
10828 : see if getnetent exists
10829 set getnetent d_getnent
10830 eval $inlibc
10831
10832 : see if prototypes for various getnetxxx netdb.h functions are available
10833 echo " "
10834 set d_getnetprotos getnetent $i_netdb netdb.h
10835 eval $hasproto
10836
10837 : see if getpagesize exists
10838 set getpagesize d_getpagsz
10839 eval $inlibc
10840
10841
10842 : see if getprotobyname exists
10843 set getprotobyname d_getpbyname
10844 eval $inlibc
10845
10846 : see if getprotobynumber exists
10847 set getprotobynumber d_getpbynumber
10848 eval $inlibc
10849
10850 : see if getprotoent exists
10851 set getprotoent d_getpent
10852 eval $inlibc
10853
10854 : see if getpgid exists
10855 set getpgid d_getpgid
10856 eval $inlibc
10857
10858 : see if getpgrp2 exists
10859 set getpgrp2 d_getpgrp2
10860 eval $inlibc
10861
10862 : see if getppid exists
10863 set getppid d_getppid
10864 eval $inlibc
10865
10866 : see if getpriority exists
10867 set getpriority d_getprior
10868 eval $inlibc
10869
10870 : see if prototypes for various getprotoxxx netdb.h functions are available
10871 echo " "
10872 set d_getprotoprotos getprotoent $i_netdb netdb.h
10873 eval $hasproto
10874
10875 : see if getprpwnam exists
10876 set getprpwnam d_getprpwnam
10877 eval $inlibc
10878
10879 : see if getpwent exists
10880 set getpwent d_getpwent
10881 eval $inlibc
10882
10883
10884 : see if getservbyname exists
10885 set getservbyname d_getsbyname
10886 eval $inlibc
10887
10888 : see if getservbyport exists
10889 set getservbyport d_getsbyport
10890 eval $inlibc
10891
10892 : see if getservent exists
10893 set getservent d_getsent
10894 eval $inlibc
10895
10896 : see if prototypes for various getservxxx netdb.h functions are available
10897 echo " "
10898 set d_getservprotos getservent $i_netdb netdb.h
10899 eval $hasproto
10900
10901 : see if getspnam exists
10902 set getspnam d_getspnam
10903 eval $inlibc
10904
10905 : see if gettimeofday or ftime exists
10906 set gettimeofday d_gettimeod
10907 eval $inlibc
10908 case "$d_gettimeod" in
10909 "$undef")
10910         set ftime d_ftime 
10911         eval $inlibc
10912         ;;
10913 *)
10914         val="$undef"; set d_ftime; eval $setvar
10915         ;;
10916 esac
10917 case "$d_gettimeod$d_ftime" in
10918 "$undef$undef")
10919         echo " "
10920         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10921         ;;
10922 esac
10923
10924 : see if this is an grp system
10925 set grp.h i_grp
10926 eval $inhdr
10927
10928 case "$i_grp" in
10929 $define)
10930         xxx=`./findhdr grp.h`
10931         $cppstdin $cppflags $cppminus < $xxx >$$.h
10932
10933         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10934                 val="$define"
10935         else
10936                 val="$undef"
10937         fi
10938         set d_grpasswd
10939         eval $setvar
10940
10941         $rm -f $$.h
10942         ;;
10943 *)
10944         val="$undef";
10945         set d_grpasswd; eval $setvar
10946         ;;
10947 esac
10948
10949 : see if hasmntopt exists
10950 set hasmntopt d_hasmntopt
10951 eval $inlibc
10952
10953 : see if this is a netinet/in.h or sys/in.h system
10954 set netinet/in.h i_niin sys/in.h i_sysin
10955 eval $inhdr
10956
10957 : see if arpa/inet.h has to be included
10958 set arpa/inet.h i_arpainet
10959 eval $inhdr
10960
10961 : see if htonl --and friends-- exists
10962 val=''
10963 set htonl val
10964 eval $inlibc
10965
10966 : Maybe they are macros.
10967 case "$val" in
10968 $undef)
10969         $cat >htonl.c <<EOM
10970 #include <stdio.h>
10971 #include <sys/types.h>
10972 #$i_niin I_NETINET_IN
10973 #$i_sysin I_SYS_IN
10974 #$i_arpainet I_ARPA_INET
10975 #ifdef I_NETINET_IN
10976 #include <netinet/in.h>
10977 #endif
10978 #ifdef I_SYS_IN
10979 #include <sys/in.h>
10980 #endif
10981 #ifdef I_ARPA_INET
10982 #include <arpa/inet.h>
10983 #endif
10984 #ifdef htonl
10985 printf("Defined as a macro.");
10986 #endif
10987 EOM
10988         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10989         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10990                 val="$define"
10991                 echo "But it seems to be defined as a macro." >&4
10992         fi
10993         $rm -f htonl.?
10994         ;;
10995 esac
10996 set d_htonl
10997 eval $setvar
10998
10999 : index or strchr
11000 echo " "
11001 if set index val -f; eval $csym; $val; then
11002         if set strchr val -f d_strchr; eval $csym; $val; then
11003                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
11004                         val="$define"
11005                         vali="$undef"
11006                         echo "strchr() found." >&4
11007                 else
11008                         val="$undef"
11009                         vali="$define"
11010                         echo "index() found." >&4
11011                 fi
11012         else
11013                 val="$undef"
11014                 vali="$define"
11015                 echo "index() found." >&4
11016         fi
11017 else
11018         if set strchr val -f d_strchr; eval $csym; $val; then
11019                 val="$define"
11020                 vali="$undef"
11021                 echo "strchr() found." >&4
11022         else
11023                 echo "No index() or strchr() found!" >&4
11024                 val="$undef"
11025                 vali="$undef"
11026         fi
11027 fi
11028 set d_strchr; eval $setvar
11029 val="$vali"
11030 set d_index; eval $setvar
11031
11032 : check whether inet_aton exists
11033 set inet_aton d_inetaton
11034 eval $inlibc
11035
11036 : Look for isascii
11037 echo " "
11038 $cat >isascii.c <<'EOCP'
11039 #include <stdio.h>
11040 #include <ctype.h>
11041 int main() {
11042         int c = 'A';
11043         if (isascii(c))
11044                 exit(0);
11045         else
11046                 exit(1);
11047 }
11048 EOCP
11049 set isascii
11050 if eval $compile; then
11051         echo "isascii() found." >&4
11052         val="$define"
11053 else
11054         echo "isascii() NOT found." >&4
11055         val="$undef"
11056 fi
11057 set d_isascii
11058 eval $setvar
11059 $rm -f isascii*
11060
11061 : see if isfinite exists
11062 set isfinite d_isfinite
11063 eval $inlibc
11064
11065 : see if isinf exists
11066 set isinf d_isinf
11067 eval $inlibc
11068
11069 : see if isnan exists
11070 set isnan d_isnan
11071 eval $inlibc
11072
11073 : see if isnanl exists
11074 set isnanl d_isnanl
11075 eval $inlibc
11076
11077 : see if killpg exists
11078 set killpg d_killpg
11079 eval $inlibc
11080
11081 : see if lchown exists
11082 echo " "
11083 $cat > try.c <<'EOCP'
11084 /* System header to define __stub macros and hopefully few prototypes,
11085     which can conflict with char lchown(); below.  */
11086 #include <assert.h>
11087 /* Override any gcc2 internal prototype to avoid an error.  */
11088 /* We use char because int might match the return type of a gcc2
11089    builtin and then its argument prototype would still apply.  */
11090 char lchown();
11091 int main() {
11092     /*  The GNU C library defines this for functions which it implements
11093         to always fail with ENOSYS.  Some functions are actually named
11094         something starting with __ and the normal name is an alias.  */
11095 #if defined (__stub_lchown) || defined (__stub___lchown)
11096 choke me
11097 #else
11098 lchown();
11099 #endif
11100 ; return 0; }
11101 EOCP
11102 set try
11103 if eval $compile; then
11104     $echo "lchown() found." >&4
11105     val="$define"
11106 else
11107     $echo "lchown() NOT found." >&4
11108     val="$undef"
11109 fi
11110 set d_lchown
11111 eval $setvar
11112
11113 : See if number of significant digits in a double precision number is known
11114 echo " "
11115 $cat >ldbl_dig.c <<EOM
11116 #$i_limits I_LIMITS
11117 #$i_float I_FLOAT
11118 #ifdef I_LIMITS
11119 #include <limits.h>
11120 #endif
11121 #ifdef I_FLOAT
11122 #include <float.h>
11123 #endif
11124 #ifdef LDBL_DIG
11125 printf("Contains LDBL_DIG");
11126 #endif
11127 EOM
11128 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
11129 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
11130         echo "LDBL_DIG found." >&4
11131         val="$define"
11132 else
11133         echo "LDBL_DIG NOT found." >&4
11134         val="$undef"
11135 fi
11136 $rm -f ldbl_dig.?
11137 set d_ldbl_dig
11138 eval $setvar
11139
11140 : see if link exists
11141 set link d_link
11142 eval $inlibc
11143
11144 : see if localeconv exists
11145 set localeconv d_locconv
11146 eval $inlibc
11147
11148 : see if lockf exists
11149 set lockf d_lockf
11150 eval $inlibc
11151
11152 : see if prototype for lseek is available
11153 echo " "
11154 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
11155 eval $hasproto
11156
11157 : see if lstat exists
11158 set lstat d_lstat
11159 eval $inlibc
11160
11161 : see if madvise exists
11162 set madvise d_madvise
11163 eval $inlibc
11164
11165 : see if mblen exists
11166 set mblen d_mblen
11167 eval $inlibc
11168
11169 : see if mbstowcs exists
11170 set mbstowcs d_mbstowcs
11171 eval $inlibc
11172
11173 : see if mbtowc exists
11174 set mbtowc d_mbtowc
11175 eval $inlibc
11176
11177 : see if memchr exists
11178 set memchr d_memchr
11179 eval $inlibc
11180
11181 : see if memcmp exists
11182 set memcmp d_memcmp
11183 eval $inlibc
11184
11185 : see if memcpy exists
11186 set memcpy d_memcpy
11187 eval $inlibc
11188
11189 : see if memmove exists
11190 set memmove d_memmove
11191 eval $inlibc
11192
11193 : see if memset exists
11194 set memset d_memset
11195 eval $inlibc
11196
11197 : see if mkdir exists
11198 set mkdir d_mkdir
11199 eval $inlibc
11200
11201 : see if mkdtemp exists
11202 set mkdtemp d_mkdtemp
11203 eval $inlibc
11204
11205 : see if mkfifo exists
11206 set mkfifo d_mkfifo
11207 eval $inlibc
11208
11209 : see if mkstemp exists
11210 set mkstemp d_mkstemp
11211 eval $inlibc
11212
11213 : see if mkstemps exists
11214 set mkstemps d_mkstemps
11215 eval $inlibc
11216
11217 : see if mktime exists
11218 set mktime d_mktime
11219 eval $inlibc
11220
11221 : see if this is a sys/mman.h system
11222 set sys/mman.h i_sysmman
11223 eval $inhdr
11224
11225 : see if mmap exists
11226 set mmap d_mmap
11227 eval $inlibc
11228 : see what shmat returns
11229 : default to something harmless
11230 mmaptype='void *'
11231 case "$i_sysmman$d_mmap" in
11232 "$define$define")
11233         $cat >mmap.c <<'END'
11234 #include <sys/mman.h>
11235 void *mmap();
11236 END
11237         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
11238                 mmaptype='void *'
11239         else
11240                 mmaptype='caddr_t'
11241         fi
11242         echo "and it returns ($mmaptype)." >&4
11243         ;;
11244 esac
11245
11246
11247
11248 : see if mprotect exists
11249 set mprotect d_mprotect
11250 eval $inlibc
11251
11252 : see if msgctl exists
11253 set msgctl d_msgctl
11254 eval $inlibc
11255
11256 : see if msgget exists
11257 set msgget d_msgget
11258 eval $inlibc
11259
11260 : see if msgsnd exists
11261 set msgsnd d_msgsnd
11262 eval $inlibc
11263
11264 : see if msgrcv exists
11265 set msgrcv d_msgrcv
11266 eval $inlibc
11267
11268 : see how much of the 'msg*(2)' library is present.
11269 h_msg=true
11270 echo " "
11271 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11272 *"$undef"*) h_msg=false;;
11273 esac
11274 case "$osname" in
11275 freebsd)
11276     case "`ipcs 2>&1`" in
11277     "SVID messages"*"not configured"*)
11278         echo "Your $osname does not have the msg*(2) configured." >&4
11279         h_msg=false
11280         val="$undef"
11281         set msgctl d_msgctl
11282         eval $setvar
11283         set msgget d_msgget
11284         eval $setvar
11285         set msgsnd d_msgsnd
11286         eval $setvar
11287         set msgrcv d_msgrcv
11288         eval $setvar
11289         ;;
11290     esac
11291     ;;
11292 esac
11293 : we could also check for sys/ipc.h ...
11294 if $h_msg && $test `./findhdr sys/msg.h`; then
11295         echo "You have the full msg*(2) library." >&4
11296         val="$define"
11297 else
11298         echo "You don't have the full msg*(2) library." >&4
11299         val="$undef"
11300 fi
11301 set d_msg
11302 eval $setvar
11303
11304
11305 echo " "
11306 echo "Checking to see if your system supports struct msghdr..." >&4
11307 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11308 eval $hasstruct
11309 case "$d_msghdr_s" in
11310 "$define")      echo "Yes, it does."   ;;
11311 *)              echo "No, it doesn't." ;;
11312 esac
11313
11314
11315 : see if msync exists
11316 set msync d_msync
11317 eval $inlibc
11318
11319 : see if munmap exists
11320 set munmap d_munmap
11321 eval $inlibc
11322
11323 : see if nice exists
11324 set nice d_nice
11325 eval $inlibc
11326
11327 : see if this is a langinfo.h system
11328 set langinfo.h i_langinfo
11329 eval $inhdr
11330
11331 : see if nl_langinfo exists
11332 set nl_langinfo d_nl_langinfo
11333 eval $inlibc
11334
11335 : check for length of character
11336 echo " "
11337 case "$charsize" in
11338 '')
11339         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11340         $cat >try.c <<'EOCP'
11341 #include <stdio.h>
11342 int main()
11343 {
11344     printf("%d\n", (int)sizeof(char));
11345     exit(0);
11346 }
11347 EOCP
11348         set try
11349         if eval $compile_ok; then
11350                 dflt=`$run ./try`
11351         else
11352                 dflt='1'
11353                 echo "(I can't seem to compile the test program.  Guessing...)"
11354         fi
11355         ;;
11356 *)
11357         dflt="$charsize"
11358         ;;
11359 esac
11360 rp="What is the size of a character (in bytes)?"
11361 . ./myread
11362 charsize="$ans"
11363 $rm -f try.c try
11364
11365 : check for volatile keyword
11366 echo " "
11367 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11368 $cat >try.c <<'EOCP'
11369 int main()
11370 {
11371         typedef struct _goo_struct goo_struct;
11372         goo_struct * volatile goo = ((goo_struct *)0);
11373         struct _goo_struct {
11374                 long long_int;
11375                 int reg_int;
11376                 char char_var;
11377         };
11378         typedef unsigned short foo_t;
11379         char *volatile foo;
11380         volatile int bar;
11381         volatile foo_t blech;
11382         foo = foo;
11383 }
11384 EOCP
11385 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11386         val="$define"
11387         echo "Yup, it does."
11388 else
11389         val="$undef"
11390         echo "Nope, it doesn't."
11391 fi
11392 set d_volatile
11393 eval $setvar
11394 $rm -f try.*
11395
11396
11397 echo " "
11398 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11399
11400 case "$use64bitint:$d_quad:$quadtype" in
11401 define:define:?*)
11402         ivtype="$quadtype"
11403         uvtype="$uquadtype"
11404         ivsize=8
11405         uvsize=8
11406         ;;
11407 *)      ivtype="long"
11408         uvtype="unsigned long"
11409         ivsize=$longsize
11410         uvsize=$longsize
11411         ;;
11412 esac
11413
11414 case "$uselongdouble:$d_longdbl" in
11415 define:define)
11416         nvtype="long double"
11417         nvsize=$longdblsize
11418         ;;
11419 *)      nvtype=double
11420         nvsize=$doublesize
11421         ;;
11422 esac
11423
11424 $echo "(IV will be "$ivtype", $ivsize bytes)"
11425 $echo "(UV will be "$uvtype", $uvsize bytes)"
11426 $echo "(NV will be "$nvtype", $nvsize bytes)"
11427
11428 $cat >try.c <<EOCP
11429 #$i_inttypes I_INTTYPES
11430 #ifdef I_INTTYPES
11431 #include <inttypes.h>
11432 #endif
11433 #include <stdio.h>
11434 int main() {
11435 #ifdef INT8
11436    int8_t i =  INT8_MAX;
11437   uint8_t u = UINT8_MAX;
11438   printf("int8_t\n");
11439 #endif
11440 #ifdef INT16
11441    int16_t i =  INT16_MAX;
11442   uint16_t i = UINT16_MAX;
11443   printf("int16_t\n");
11444 #endif
11445 #ifdef INT32
11446    int32_t i =  INT32_MAX;
11447   uint32_t u = UINT32_MAX;
11448   printf("int32_t\n");
11449 #endif
11450 }
11451 EOCP
11452
11453 case "$i8type" in
11454 '')     case "$charsize" in
11455         1)      i8type=char
11456                 u8type="unsigned char"
11457                 i8size=$charsize
11458                 u8size=$charsize
11459                 ;;
11460         esac
11461         ;;
11462 esac
11463 case "$i8type" in
11464 '')     set try -DINT8
11465         if eval $compile; then
11466                 case "`$run ./try`" in
11467                 int8_t) i8type=int8_t
11468                         u8type=uint8_t
11469                         i8size=1
11470                         u8size=1
11471                         ;;
11472                 esac
11473         fi
11474         ;;
11475 esac
11476 case "$i8type" in
11477 '')     if $test $charsize -ge 1; then
11478                 i8type=char
11479                 u8type="unsigned char"
11480                 i8size=$charsize
11481                 u8size=$charsize
11482         fi
11483         ;;
11484 esac
11485
11486 case "$i16type" in
11487 '')     case "$shortsize" in
11488         2)      i16type=short
11489                 u16type="unsigned short"
11490                 i16size=$shortsize
11491                 u16size=$shortsize
11492                 ;;
11493         esac
11494         ;;
11495 esac
11496 case "$i16type" in
11497 '')     set try -DINT16
11498         if eval $compile; then
11499                 case "`$run ./try`" in
11500                 int16_t)
11501                         i16type=int16_t
11502                         u16type=uint16_t
11503                         i16size=2
11504                         u16size=2
11505                         ;;
11506                 esac
11507         fi
11508         ;;
11509 esac
11510 case "$i16type" in
11511 '')     if $test $shortsize -ge 2; then
11512                 i16type=short
11513                 u16type="unsigned short"
11514                 i16size=$shortsize
11515                 u16size=$shortsize
11516         fi
11517         ;;
11518 esac
11519
11520 case "$i32type" in
11521 '')     case "$longsize" in
11522         4)      i32type=long
11523                 u32type="unsigned long"
11524                 i32size=$longsize
11525                 u32size=$longsize
11526                 ;;
11527         *)      case "$intsize" in
11528                 4)      i32type=int
11529                         u32type="unsigned int"
11530                         i32size=$intsize
11531                         u32size=$intsize
11532                         ;;
11533                 esac
11534                 ;;
11535         esac
11536         ;;
11537 esac
11538 case "$i32type" in
11539 '')     set try -DINT32
11540         if eval $compile; then
11541                 case "`$run ./try`" in
11542                 int32_t)
11543                         i32type=int32_t
11544                         u32type=uint32_t
11545                         i32size=4
11546                         u32size=4
11547                         ;;
11548                 esac
11549         fi
11550         ;;
11551 esac
11552 case "$i32type" in
11553 '')     if $test $intsize -ge 4; then
11554                 i32type=int
11555                 u32type="unsigned int"
11556                 i32size=$intsize
11557                 u32size=$intsize
11558         fi
11559         ;;
11560 esac
11561
11562 case "$i64type" in
11563 '')     case "$d_quad:$quadtype" in
11564         define:?*)
11565                 i64type="$quadtype"
11566                 u64type="$uquadtype"
11567                 i64size=8
11568                 u64size=8
11569                 ;;
11570         esac
11571         ;;
11572 esac
11573
11574 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11575 : volatile so that the compiler has to store it out to memory.
11576 if test X"$d_volatile" = X"$define"; then
11577         volatile=volatile
11578 fi
11579 $cat <<EOP >try.c
11580 #include <stdio.h>
11581 #include <sys/types.h>
11582 #include <signal.h>
11583 #ifdef SIGFPE
11584 $volatile int bletched = 0;
11585 $signal_t blech(s) int s; { bletched = 1; }
11586 #endif
11587 int main() {
11588     $uvtype u = 0;
11589     $nvtype d;
11590     int     n = 8 * $uvsize;
11591     int     i;
11592 #ifdef SIGFPE
11593     signal(SIGFPE, blech);
11594 #endif
11595
11596     for (i = 0; i < n; i++) {
11597       u = u << 1 | ($uvtype)1;
11598       d = ($nvtype)u;
11599       if (($uvtype)d != u)
11600         break;
11601       if (d <= 0)
11602         break;
11603       d = ($nvtype)(u - 1);
11604       if (($uvtype)d != (u - 1))
11605         break;
11606 #ifdef SIGFPE
11607       if (bletched) {
11608         break;
11609 #endif
11610       } 
11611     }
11612     printf("%d\n", ((i == n) ? -n : i));
11613     exit(0);
11614 }
11615 EOP
11616 set try
11617
11618 d_nv_preserves_uv="$undef"
11619 if eval $compile; then
11620         d_nv_preserves_uv_bits="`$run ./try`"
11621 fi
11622 case "$d_nv_preserves_uv_bits" in
11623 \-[1-9]*)       
11624         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11625         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11626         d_nv_preserves_uv="$define"
11627         ;;
11628 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11629         d_nv_preserves_uv="$undef" ;;
11630 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11631         d_nv_preserves_uv_bits="$undef" ;;
11632 esac
11633
11634 $rm -f try.* try
11635
11636
11637 : check for off64_t
11638 echo " "
11639 echo "Checking to see if you have off64_t..." >&4
11640 $cat >try.c <<EOCP
11641 #include <sys/types.h>
11642 #include <unistd.h>
11643 int main() { off64_t x = 7; }
11644 EOCP
11645 set try
11646 if eval $compile; then
11647         val="$define"
11648         echo "You have off64_t."
11649 else
11650         val="$undef"
11651         echo "You do not have off64_t."
11652         case "$lseeksize" in
11653         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11654         esac
11655 fi
11656 $rm -f try.* try
11657 set d_off64_t
11658 eval $setvar
11659
11660 : see if POSIX threads are available
11661 set pthread.h i_pthread
11662 eval $inhdr
11663
11664
11665
11666
11667 : how to create joinable pthreads
11668 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11669         echo " "
11670         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11671         $cat >try.c <<'EOCP'
11672 #include <pthread.h>
11673 int main() {
11674     int detachstate = JOINABLE;
11675 }
11676 EOCP
11677         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11678         if eval $compile; then
11679                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11680                 val="$undef" # Yes, undef.
11681                 set d_old_pthread_create_joinable
11682                 eval $setvar
11683                 val=""
11684                 set old_pthread_create_joinable
11685                 eval $setvar
11686         else
11687                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11688                 if eval $compile; then
11689                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11690                         val="$define"
11691                         set d_old_pthread_create_joinable
11692                         eval $setvar
11693                         val=PTHREAD_CREATE_UNDETACHED
11694                         set old_pthread_create_joinable
11695                         eval $setvar
11696                 else            
11697                         set try -DJOINABLE=__UNDETACHED
11698                         if eval $compile; then
11699                                 echo "You seem to use __UNDETACHED." >&4
11700                                 val="$define"
11701                                 set d_old_pthread_create_joinable
11702                                 eval $setvar
11703                                 val=__UNDETACHED
11704                                 set old_pthread_create_joinable
11705                                 eval $setvar
11706                         else
11707                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11708                                 val="$define"
11709                                 set d_old_pthread_create_joinable
11710                                 eval $setvar
11711                                 val=0
11712                                 set old_pthread_create_joinable
11713                                 eval $setvar
11714                         fi
11715                 fi
11716         fi
11717         $rm -f try try.*
11718 else
11719     d_old_pthread_create_joinable="$undef"
11720     old_pthread_create_joinable=""
11721 fi
11722
11723 : see if pause exists
11724 set pause d_pause
11725 eval $inlibc
11726
11727 : see if pipe exists
11728 set pipe d_pipe
11729 eval $inlibc
11730
11731 : see if poll exists
11732 set poll d_poll
11733 eval $inlibc
11734
11735 : see if readlink exists
11736 set readlink d_readlink
11737 eval $inlibc
11738
11739 echo " "
11740 procselfexe=''
11741 val="$undef"
11742 case "$d_readlink" in
11743 "$define")
11744         if $issymlink /proc/self/exe ; then
11745                 $ls -l /proc/self/exe > reflect
11746                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11747                         echo "You have Linux-like /proc/self/exe."
11748                         procselfexe='"/proc/self/exe"'
11749                         val="$define"
11750                 fi
11751         fi
11752         if $issymlink /proc/curproc/file ; then
11753                 $ls -l /proc/curproc/file > reflect
11754                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11755                         echo "You have BSD-like /proc/curproc/file."
11756                         procselfexe='"/proc/curproc/file"'
11757                         val="$define"
11758                 fi
11759         fi
11760         ;;
11761 esac
11762 $rm -f reflect
11763 set d_procselfexe
11764 eval $setvar
11765
11766 : see if pthread_atfork exists
11767 set pthread_atfork d_pthread_atfork
11768 eval $inlibc
11769
11770
11771 : see whether the various POSIXish _yields exist
11772 $cat >try.c <<EOP
11773 #include <pthread.h>
11774 #include <stdio.h>
11775 int main() {
11776 #ifdef SCHED_YIELD
11777         sched_yield();
11778 #else
11779 #ifdef PTHREAD_YIELD
11780         pthread_yield();
11781 #else
11782 #ifdef PTHREAD_YIELD_NULL
11783         pthread_yield(NULL);
11784 #endif
11785 #endif
11786 #endif
11787 }
11788 EOP
11789 : see if sched_yield exists
11790 set try -DSCHED_YIELD
11791 if eval $compile; then
11792     val="$define"
11793     sched_yield='sched_yield()'
11794 else
11795     val="$undef"
11796 fi
11797 case "$usethreads" in
11798 $define)
11799         case "$val" in
11800         $define) echo 'sched_yield() found.' >&4        ;;
11801         *)       echo 'sched_yield() NOT found.' >&4    ;;
11802         esac
11803 esac
11804 set d_sched_yield
11805 eval $setvar
11806
11807 : see if pthread_yield exists
11808 set try -DPTHREAD_YIELD
11809 if eval $compile; then
11810     val="$define"
11811     case "$sched_yield" in
11812     '') sched_yield='pthread_yield()' ;;
11813     esac
11814 else
11815     set try -DPTHREAD_YIELD_NULL
11816     if eval $compile; then
11817         val="$define"
11818         case "$sched_yield" in
11819         '') sched_yield='pthread_yield(NULL)' ;;
11820         esac
11821     else
11822         val="$undef"
11823     fi
11824 fi
11825 case "$usethreads" in
11826 $define)
11827         case "$val" in
11828         $define) echo 'pthread_yield() found.' >&4      ;;
11829         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11830         esac
11831         ;;
11832 esac
11833 set d_pthread_yield
11834 eval $setvar
11835
11836 case "$sched_yield" in
11837 '') sched_yield=undef ;;
11838 esac
11839
11840 $rm -f try try.*
11841
11842 : see if this is a pwd.h system
11843 set pwd.h i_pwd
11844 eval $inhdr
11845
11846 case "$i_pwd" in
11847 $define)
11848         xxx=`./findhdr pwd.h`
11849         $cppstdin $cppflags $cppminus < $xxx >$$.h
11850
11851         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11852                 val="$define"
11853         else
11854                 val="$undef"
11855         fi
11856         set d_pwquota
11857         eval $setvar
11858
11859         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11860                 val="$define"
11861         else
11862                 val="$undef"
11863         fi
11864         set d_pwage
11865         eval $setvar
11866
11867         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11868                 val="$define"
11869         else
11870                 val="$undef"
11871         fi
11872         set d_pwchange
11873         eval $setvar
11874
11875         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11876                 val="$define"
11877         else
11878                 val="$undef"
11879         fi
11880         set d_pwclass
11881         eval $setvar
11882
11883         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11884                 val="$define"
11885         else
11886                 val="$undef"
11887         fi
11888         set d_pwexpire
11889         eval $setvar
11890
11891         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11892                 val="$define"
11893         else
11894                 val="$undef"
11895         fi
11896         set d_pwcomment
11897         eval $setvar
11898
11899         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11900                 val="$define"
11901         else
11902                 val="$undef"
11903         fi
11904         set d_pwgecos
11905         eval $setvar
11906
11907         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11908                 val="$define"
11909         else
11910                 val="$undef"
11911         fi
11912         set d_pwpasswd
11913         eval $setvar
11914
11915         $rm -f $$.h
11916         ;;
11917 *)
11918         val="$undef"; 
11919         set d_pwquota; eval $setvar
11920         set d_pwage; eval $setvar
11921         set d_pwchange; eval $setvar
11922         set d_pwclass; eval $setvar
11923         set d_pwexpire; eval $setvar
11924         set d_pwcomment; eval $setvar
11925         set d_pwgecos; eval $setvar
11926         set d_pwpasswd; eval $setvar
11927         ;;
11928 esac
11929
11930 : see if readdir and friends exist
11931 set readdir d_readdir
11932 eval $inlibc
11933 set seekdir d_seekdir
11934 eval $inlibc
11935 set telldir d_telldir
11936 eval $inlibc
11937 set rewinddir d_rewinddir
11938 eval $inlibc
11939
11940 : see if readv exists
11941 set readv d_readv
11942 eval $inlibc
11943
11944 : see if recvmsg exists
11945 set recvmsg d_recvmsg
11946 eval $inlibc
11947
11948 : see if rename exists
11949 set rename d_rename
11950 eval $inlibc
11951
11952 : see if rmdir exists
11953 set rmdir d_rmdir
11954 eval $inlibc
11955
11956 : see if memory.h is available.
11957 val=''
11958 set memory.h val
11959 eval $inhdr
11960
11961 : See if it conflicts with string.h
11962 case "$val" in
11963 $define)
11964         case "$strings" in
11965         '') ;;
11966         *)
11967                 $cppstdin $cppflags $cppminus < $strings > mem.h
11968                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11969                         echo " "
11970                         echo "We won't be including <memory.h>."
11971                         val="$undef"
11972                 fi
11973                 $rm -f mem.h
11974                 ;;
11975         esac
11976 esac
11977 set i_memory
11978 eval $setvar
11979
11980 : can bcopy handle overlapping blocks?
11981 echo " "
11982 val="$undef"
11983 case "$d_memmove" in
11984 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11985 *)      case "$d_bcopy" in
11986         "$define")
11987                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11988                 $cat >try.c <<EOCP
11989 #$i_memory I_MEMORY
11990 #$i_stdlib I_STDLIB
11991 #$i_string I_STRING
11992 #$i_unistd I_UNISTD
11993 EOCP
11994         $cat >>try.c <<'EOCP'
11995 #include <stdio.h>
11996 #ifdef I_MEMORY
11997 #  include <memory.h>
11998 #endif
11999 #ifdef I_STDLIB
12000 #  include <stdlib.h>
12001 #endif
12002 #ifdef I_STRING
12003 #  include <string.h>
12004 #else
12005 #  include <strings.h>
12006 #endif
12007 #ifdef I_UNISTD
12008 #  include <unistd.h>  /* Needed for NetBSD */
12009 #endif
12010 int main()
12011 {
12012 char buf[128], abc[128];
12013 char *b;
12014 int len;
12015 int off;
12016 int align;
12017
12018 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12019    try to store the string in read-only memory. */
12020 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
12021
12022 for (align = 7; align >= 0; align--) {
12023         for (len = 36; len; len--) {
12024                 b = buf+align;
12025                 bcopy(abc, b, len);
12026                 for (off = 1; off <= len; off++) {
12027                         bcopy(b, b+off, len);
12028                         bcopy(b+off, b, len);
12029                         if (bcmp(b, abc, len))
12030                                 exit(1);
12031                 }
12032         }
12033 }
12034 exit(0);
12035 }
12036 EOCP
12037                 set try
12038                 if eval $compile_ok; then
12039                         if ./try 2>/dev/null; then
12040                                 echo "Yes, it can."
12041                                 val="$define"
12042                         else
12043                                 echo "It can't, sorry."
12044                         fi
12045                 else
12046                         echo "(I can't compile the test program, so we'll assume not...)"
12047                 fi
12048                 ;;
12049         esac
12050         $rm -f try.* try core
12051         ;;
12052 esac
12053 set d_safebcpy
12054 eval $setvar
12055
12056 : can memcpy handle overlapping blocks?
12057 echo " "
12058 val="$undef"
12059 case "$d_memmove" in
12060 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
12061 *)      case "$d_memcpy" in
12062         "$define")
12063                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
12064                 $cat >try.c <<EOCP
12065 #$i_memory I_MEMORY
12066 #$i_stdlib I_STDLIB
12067 #$i_string I_STRING
12068 #$i_unistd I_UNISTD
12069 EOCP
12070         $cat >>try.c <<'EOCP'
12071 #include <stdio.h>
12072 #ifdef I_MEMORY
12073 #  include <memory.h>
12074 #endif
12075 #ifdef I_STDLIB
12076 #  include <stdlib.h>
12077 #endif
12078 #ifdef I_STRING
12079 #  include <string.h>
12080 #else
12081 #  include <strings.h>
12082 #endif
12083 #ifdef I_UNISTD
12084 #  include <unistd.h>  /* Needed for NetBSD */
12085 #endif
12086 int main()
12087 {
12088 char buf[128], abc[128];
12089 char *b;
12090 int len;
12091 int off;
12092 int align;
12093
12094 /* Copy "abcde..." string to char abc[] so that gcc doesn't
12095    try to store the string in read-only memory. */
12096 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
12097
12098 for (align = 7; align >= 0; align--) {
12099         for (len = 36; len; len--) {
12100                 b = buf+align;
12101                 memcpy(b, abc, len);
12102                 for (off = 1; off <= len; off++) {
12103                         memcpy(b+off, b, len);
12104                         memcpy(b, b+off, len);
12105                         if (memcmp(b, abc, len))
12106                                 exit(1);
12107                 }
12108         }
12109 }
12110 exit(0);
12111 }
12112 EOCP
12113                 set try
12114                 if eval $compile_ok; then
12115                         if ./try 2>/dev/null; then
12116                                 echo "Yes, it can."
12117                                 val="$define"
12118                         else
12119                                 echo "It can't, sorry."
12120                         fi
12121                 else
12122                         echo "(I can't compile the test program, so we'll assume not...)"
12123                 fi
12124                 ;;
12125         esac
12126         $rm -f try.* try core
12127         ;;
12128 esac
12129 set d_safemcpy
12130 eval $setvar
12131
12132 : can memcmp be trusted to compare relative magnitude?
12133 val="$undef"
12134 case "$d_memcmp" in
12135 "$define")
12136         echo " "
12137         echo "Checking if your memcmp() can compare relative magnitude..." >&4
12138         $cat >try.c <<EOCP
12139 #$i_memory I_MEMORY
12140 #$i_stdlib I_STDLIB
12141 #$i_string I_STRING
12142 #$i_unistd I_UNISTD
12143 EOCP
12144         $cat >>try.c <<'EOCP'
12145 #include <stdio.h>
12146 #ifdef I_MEMORY
12147 #  include <memory.h>
12148 #endif
12149 #ifdef I_STDLIB
12150 #  include <stdlib.h>
12151 #endif
12152 #ifdef I_STRING
12153 #  include <string.h>
12154 #else
12155 #  include <strings.h>
12156 #endif
12157 #ifdef I_UNISTD
12158 #  include <unistd.h>  /* Needed for NetBSD */
12159 #endif
12160 int main()
12161 {
12162 char a = -1;
12163 char b = 0;
12164 if ((a < b) && memcmp(&a, &b, 1) < 0)
12165         exit(1);
12166 exit(0);
12167 }
12168 EOCP
12169         set try
12170         if eval $compile_ok; then
12171                 if $run ./try 2>/dev/null; then
12172                         echo "Yes, it can."
12173                         val="$define"
12174                 else
12175                         echo "No, it can't (it uses signed chars)."
12176                 fi
12177         else
12178                 echo "(I can't compile the test program, so we'll assume not...)"
12179         fi
12180         ;;
12181 esac
12182 $rm -f try.* try core
12183 set d_sanemcmp
12184 eval $setvar
12185
12186 : see if prototype for sbrk is available
12187 echo " "
12188 set d_sbrkproto sbrk $i_unistd unistd.h
12189 eval $hasproto
12190
12191 : see if select exists
12192 set select d_select
12193 eval $inlibc
12194
12195 : see if semctl exists
12196 set semctl d_semctl
12197 eval $inlibc
12198
12199 : see if semget exists
12200 set semget d_semget
12201 eval $inlibc
12202
12203 : see if semop exists
12204 set semop d_semop
12205 eval $inlibc
12206
12207 : see how much of the 'sem*(2)' library is present.
12208 h_sem=true
12209 echo " "
12210 case "$d_semctl$d_semget$d_semop" in
12211 *"$undef"*) h_sem=false;;
12212 esac
12213 case "$osname" in
12214 freebsd)
12215     case "`ipcs 2>&1`" in
12216     "SVID messages"*"not configured"*)
12217         echo "Your $osname does not have the sem*(2) configured." >&4
12218         h_sem=false
12219         val="$undef"
12220         set semctl d_semctl
12221         eval $setvar
12222         set semget d_semget
12223         eval $setvar
12224         set semop d_semop
12225         eval $setvar
12226         ;;
12227     esac
12228     ;;
12229 esac
12230 : we could also check for sys/ipc.h ...
12231 if $h_sem && $test `./findhdr sys/sem.h`; then
12232         echo "You have the full sem*(2) library." >&4
12233         val="$define"
12234 else
12235         echo "You don't have the full sem*(2) library." >&4
12236         val="$undef"
12237 fi
12238 set d_sem
12239 eval $setvar
12240
12241 : see whether sys/sem.h defines union semun
12242 echo " "
12243 $cat > try.c <<'END'
12244 #include <sys/types.h>
12245 #include <sys/ipc.h>
12246 #include <sys/sem.h>
12247 int main () { union semun semun; semun.buf = 0; }
12248 END
12249 set try
12250 if eval $compile; then
12251     echo "You have union semun in <sys/sem.h>." >&4
12252     val="$define"
12253 else
12254     echo "You do not have union semun in <sys/sem.h>." >&4
12255     val="$undef"
12256 fi
12257 $rm -f try try.c try.h
12258 set d_union_semun
12259 eval $setvar
12260
12261 : see how to do semctl IPC_STAT
12262 case "$d_sem" in
12263 $define)
12264     : see whether semctl IPC_STAT can use union semun
12265     echo " "
12266     $cat > try.h <<END
12267 #ifndef S_IRUSR
12268 #   ifdef S_IREAD
12269 #       define S_IRUSR S_IREAD
12270 #       define S_IWUSR S_IWRITE
12271 #       define S_IXUSR S_IEXEC
12272 #   else
12273 #       define S_IRUSR 0400
12274 #       define S_IWUSR 0200
12275 #       define S_IXUSR 0100
12276 #   endif
12277 #   define S_IRGRP (S_IRUSR>>3)
12278 #   define S_IWGRP (S_IWUSR>>3)
12279 #   define S_IXGRP (S_IXUSR>>3)
12280 #   define S_IROTH (S_IRUSR>>6)
12281 #   define S_IWOTH (S_IWUSR>>6)
12282 #   define S_IXOTH (S_IXUSR>>6)
12283 #endif
12284 #ifndef S_IRWXU
12285 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12286 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12287 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12288 #endif
12289 END
12290
12291     $cat > try.c <<END
12292 #include <sys/types.h>
12293 #include <sys/ipc.h>
12294 #include <sys/sem.h>
12295 #include <sys/stat.h>
12296 #include <stdio.h>
12297 #include <errno.h>
12298 #include "try.h"
12299 #ifndef errno
12300 extern int errno;
12301 #endif
12302 #$d_union_semun HAS_UNION_SEMUN
12303 int main() {
12304     union semun
12305 #ifndef HAS_UNION_SEMUN
12306     {
12307         int val;
12308         struct semid_ds *buf;
12309         unsigned short *array;
12310     }
12311 #endif
12312     arg;
12313     int sem, st;
12314
12315 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12316     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12317     if (sem > -1) {
12318         struct semid_ds argbuf;
12319         arg.buf = &argbuf;
12320 #       ifdef IPC_STAT
12321         st = semctl(sem, 0, IPC_STAT, arg);
12322         if (st == 0)
12323             printf("semun\n");
12324         else
12325 #       endif /* IPC_STAT */
12326             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12327 #       ifdef IPC_RMID
12328         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12329 #       endif /* IPC_RMID */
12330             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12331     } else
12332 #endif /* IPC_PRIVATE && ... */
12333         printf("semget failed: errno = %d\n", errno);
12334   return 0;
12335 }
12336 END
12337     val="$undef"
12338     set try
12339     if eval $compile; then
12340         xxx=`$run ./try`
12341         case "$xxx" in
12342         semun) val="$define" ;;
12343         esac
12344     fi
12345     $rm -f try try.c
12346     set d_semctl_semun
12347     eval $setvar
12348     case "$d_semctl_semun" in
12349     $define)
12350         echo "You can use union semun for semctl IPC_STAT." >&4
12351         also='also'
12352         ;;
12353     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12354         also=''
12355         ;;
12356     esac
12357
12358     : see whether semctl IPC_STAT can use struct semid_ds pointer
12359     $cat > try.c <<'END'
12360 #include <sys/types.h>
12361 #include <sys/ipc.h>
12362 #include <sys/sem.h>
12363 #include <sys/stat.h>
12364 #include "try.h"
12365 #include <stdio.h>
12366 #include <errno.h>
12367 #ifndef errno
12368 extern int errno;
12369 #endif
12370 int main() {
12371     struct semid_ds arg;
12372     int sem, st;
12373
12374 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12375     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12376     if (sem > -1) {
12377 #       ifdef IPC_STAT
12378         st = semctl(sem, 0, IPC_STAT, &arg);
12379         if (st == 0)
12380             printf("semid_ds\n");
12381         else
12382 #       endif /* IPC_STAT */
12383             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12384 #       ifdef IPC_RMID
12385         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12386 #       endif /* IPC_RMID */
12387             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12388     } else
12389 #endif /* IPC_PRIVATE && ... */
12390         printf("semget failed: errno = %d\n", errno);
12391
12392     return 0;
12393 }
12394 END
12395     val="$undef"
12396     set try
12397     if eval $compile; then
12398         xxx=`$run ./try`
12399         case "$xxx" in
12400         semid_ds) val="$define" ;;
12401         esac
12402     fi
12403     $rm -f try try.c
12404     set d_semctl_semid_ds
12405     eval $setvar
12406     case "$d_semctl_semid_ds" in
12407     $define)
12408         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12409         ;;
12410     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12411         ;;
12412     esac
12413     $rm -f try.h
12414     ;;
12415 *)  val="$undef"
12416
12417     # We do not have the full sem*(2) library, so assume we can not
12418     # use either.
12419
12420     set d_semctl_semun
12421     eval $setvar
12422
12423     set d_semctl_semid_ds
12424     eval $setvar
12425     ;;
12426 esac
12427
12428 : see if sendmsg exists
12429 set sendmsg d_sendmsg
12430 eval $inlibc
12431
12432 : see if setegid exists
12433 set setegid d_setegid
12434 eval $inlibc
12435
12436 : see if seteuid exists
12437 set seteuid d_seteuid
12438 eval $inlibc
12439
12440 : see if setgrent exists
12441 set setgrent d_setgrent
12442 eval $inlibc
12443
12444 : see if sethostent exists
12445 set sethostent d_sethent
12446 eval $inlibc
12447
12448 : see if setitimer exists
12449 set setitimer d_setitimer
12450 eval $inlibc
12451
12452 : see if setlinebuf exists
12453 set setlinebuf d_setlinebuf
12454 eval $inlibc
12455
12456 : see if setlocale exists
12457 set setlocale d_setlocale
12458 eval $inlibc
12459
12460 : see if setnetent exists
12461 set setnetent d_setnent
12462 eval $inlibc
12463
12464 : see if setprotoent exists
12465 set setprotoent d_setpent
12466 eval $inlibc
12467
12468 : see if setpgid exists
12469 set setpgid d_setpgid
12470 eval $inlibc
12471
12472 : see if setpgrp2 exists
12473 set setpgrp2 d_setpgrp2
12474 eval $inlibc
12475
12476 : see if setpriority exists
12477 set setpriority d_setprior
12478 eval $inlibc
12479
12480 : see if setproctitle exists
12481 set setproctitle d_setproctitle
12482 eval $inlibc
12483
12484 : see if setpwent exists
12485 set setpwent d_setpwent
12486 eval $inlibc
12487
12488 : see if setregid exists
12489 set setregid d_setregid
12490 eval $inlibc
12491 set setresgid d_setresgid
12492 eval $inlibc
12493
12494 : see if setreuid exists
12495 set setreuid d_setreuid
12496 eval $inlibc
12497 set setresuid d_setresuid
12498 eval $inlibc
12499
12500 : see if setrgid exists
12501 set setrgid d_setrgid
12502 eval $inlibc
12503
12504 : see if setruid exists
12505 set setruid d_setruid
12506 eval $inlibc
12507
12508 : see if setservent exists
12509 set setservent d_setsent
12510 eval $inlibc
12511
12512 : see if setsid exists
12513 set setsid d_setsid
12514 eval $inlibc
12515
12516 : see if setvbuf exists
12517 set setvbuf d_setvbuf
12518 eval $inlibc
12519
12520 : see if sfio.h is available
12521 set sfio.h i_sfio
12522 eval $inhdr
12523
12524
12525 : see if sfio library is available
12526 case "$i_sfio" in
12527 $define)
12528         val=''
12529         set sfreserve val
12530         eval $inlibc
12531         ;;
12532 *)
12533         val="$undef"
12534         ;;
12535 esac
12536 : Ok, but do we want to use it.
12537 case "$val" in
12538 $define)
12539         case "$usesfio" in
12540         true|$define|[yY]*) dflt='y';;
12541         *) dflt='n';;
12542         esac
12543         echo "$package can use the sfio library, but it is experimental."
12544         case "$useperlio" in
12545         "$undef")
12546             echo "For sfio also the PerlIO abstraction layer is needed."
12547             echo "Earlier you said you wouldn't want that."
12548             ;;
12549         esac
12550         rp="You seem to have sfio available, do you want to try using it?"
12551         . ./myread
12552         case "$ans" in
12553         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12554                 useperlio="$define"
12555                 val="$define"
12556                 ;;
12557         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12558                 val="$undef"
12559                 ;;
12560         esac
12561         ;;
12562 *)      case "$usesfio" in
12563         true|$define|[yY]*)
12564                 echo "Sorry, cannot find sfio on this machine." >&4
12565                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12566                 val="$undef"
12567                 ;;
12568         esac
12569         ;;
12570 esac
12571 set d_sfio
12572 eval $setvar
12573 case "$d_sfio" in
12574 $define) usesfio='true';;
12575 *) usesfio='false';;
12576 esac
12577 case "$d_sfio" in
12578 $define) ;;
12579 *)      : Remove sfio from list of libraries to use
12580         case "$libs" in
12581         *-lsfio*)
12582                 echo "Removing unneeded -lsfio from library list" >&4
12583                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12584                 shift
12585                 libs="$*"
12586                 echo "libs = $libs" >&4
12587                 ;;
12588         esac
12589 ;;
12590 esac
12591
12592
12593 : see if shmctl exists
12594 set shmctl d_shmctl
12595 eval $inlibc
12596
12597 : see if shmget exists
12598 set shmget d_shmget
12599 eval $inlibc
12600
12601 : see if shmat exists
12602 set shmat d_shmat
12603 eval $inlibc
12604 : see what shmat returns
12605 case "$d_shmat" in
12606 "$define")
12607         $cat >shmat.c <<'END'
12608 #include <sys/shm.h>
12609 void *shmat();
12610 END
12611         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12612                 shmattype='void *'
12613         else
12614                 shmattype='char *'
12615         fi
12616         echo "and it returns ($shmattype)." >&4
12617         : see if a prototype for shmat is available
12618         xxx=`./findhdr sys/shm.h`
12619         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12620         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12621                 val="$define"
12622         else
12623                 val="$undef"
12624         fi
12625         $rm -f shmat.[co]
12626         ;;
12627 *)
12628         val="$undef"
12629         ;;
12630 esac
12631 set d_shmatprototype
12632 eval $setvar
12633
12634 : see if shmdt exists
12635 set shmdt d_shmdt
12636 eval $inlibc
12637
12638 : see how much of the 'shm*(2)' library is present.
12639 h_shm=true
12640 echo " "
12641 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12642 *"$undef"*) h_shm=false;;
12643 esac
12644 case "$osname" in
12645 freebsd)
12646     case "`ipcs 2>&1`" in
12647     "SVID shared memory"*"not configured"*)
12648         echo "Your $osname does not have the shm*(2) configured." >&4
12649         h_shm=false
12650         val="$undef"
12651         set shmctl d_shmctl
12652         evat $setvar
12653         set shmget d_shmget
12654         evat $setvar
12655         set shmat d_shmat
12656         evat $setvar
12657         set shmdt d_shmdt
12658         evat $setvar
12659         ;;
12660     esac
12661     ;;
12662 esac
12663 : we could also check for sys/ipc.h ...
12664 if $h_shm && $test `./findhdr sys/shm.h`; then
12665         echo "You have the full shm*(2) library." >&4
12666         val="$define"
12667 else
12668         echo "You don't have the full shm*(2) library." >&4
12669         val="$undef"
12670 fi
12671 set d_shm
12672 eval $setvar
12673
12674 echo " "
12675 : see if we have sigaction
12676 if set sigaction val -f d_sigaction; eval $csym; $val; then
12677         echo 'sigaction() found.' >&4
12678         $cat > try.c <<'EOP'
12679 #include <stdio.h>
12680 #include <sys/types.h>
12681 #include <signal.h>
12682 int main()
12683 {
12684     struct sigaction act, oact;
12685     act.sa_flags = 0;
12686     oact.sa_handler = 0;
12687     /* so that act and oact are used */
12688     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12689 }
12690 EOP
12691         set try
12692         if eval $compile_ok; then
12693                 val="$define"
12694         else
12695                 echo "But you don't seem to have a useable struct sigaction." >&4
12696                 val="$undef"
12697         fi
12698 else
12699         echo 'sigaction NOT found.' >&4
12700         val="$undef"
12701 fi
12702 set d_sigaction; eval $setvar
12703 $rm -f try try$_o try.c
12704
12705 : see if sigprocmask exists
12706 set sigprocmask d_sigprocmask
12707 eval $inlibc
12708
12709 : see if sigsetjmp exists
12710 echo " "
12711 case "$d_sigsetjmp" in
12712 '')
12713         $cat >try.c <<'EOP'
12714 #include <setjmp.h>
12715 sigjmp_buf env;
12716 int set = 1;
12717 int main()
12718 {
12719         if (sigsetjmp(env,1))
12720                 exit(set);
12721         set = 0;
12722         siglongjmp(env, 1);
12723         exit(1);
12724 }
12725 EOP
12726         set try
12727         if eval $compile; then
12728                 if $run ./try >/dev/null 2>&1; then
12729                         echo "POSIX sigsetjmp found." >&4
12730                         val="$define"
12731                 else
12732                         $cat >&4 <<EOM
12733 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12734 I'll ignore them.
12735 EOM
12736                         val="$undef"
12737                 fi
12738         else
12739                 echo "sigsetjmp not found." >&4
12740                 val="$undef"
12741         fi
12742         ;;
12743 *) val="$d_sigsetjmp"
12744         case "$d_sigsetjmp" in
12745         $define) echo "POSIX sigsetjmp found." >&4;;
12746         $undef) echo "sigsetjmp not found." >&4;;
12747         esac
12748         ;;
12749 esac
12750 set d_sigsetjmp
12751 eval $setvar
12752 $rm -f try.c try
12753
12754 : see if sockatmark exists
12755 set sockatmark d_sockatmark
12756 eval $inlibc
12757
12758 : see if prototype for sockatmark is available
12759 echo " "
12760 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12761 eval $hasproto
12762
12763 : see if socks5_init exists
12764 set socks5_init d_socks5_init
12765 eval $inlibc
12766
12767 : see if prototype for setresgid is available
12768 echo " "
12769 set d_sresgproto setresgid $i_unistd unistd.h
12770 eval $hasproto
12771
12772 : see if prototype for setresuid is available
12773 echo " "
12774 set d_sresuproto setresuid $i_unistd unistd.h
12775 eval $hasproto
12776
12777 : see if sys/stat.h is available
12778 set sys/stat.h i_sysstat
12779 eval $inhdr
12780
12781
12782 : see if stat knows about block sizes
12783 echo " "
12784 echo "Checking to see if your struct stat has st_blocks field..." >&4
12785 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12786 eval $hasfield
12787
12788
12789 : see if this is a sys/vfs.h system
12790 set sys/vfs.h i_sysvfs
12791 eval $inhdr
12792
12793
12794 : see if this is a sys/statfs.h system
12795 set sys/statfs.h i_sysstatfs
12796 eval $inhdr
12797
12798
12799 echo " "
12800 echo "Checking to see if your system supports struct statfs..." >&4
12801 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
12802 eval $hasstruct
12803 case "$d_statfs_s" in
12804 "$define")      echo "Yes, it does."   ;;
12805 *)              echo "No, it doesn't." ;;
12806 esac
12807
12808
12809
12810 : see if struct statfs knows about f_flags
12811 case "$d_statfs_s" in
12812 define) 
12813         echo " "
12814         echo "Checking to see if your struct statfs has f_flags field..." >&4
12815         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
12816         eval $hasfield
12817         ;;
12818 *)      val="$undef"
12819         set d_statfs_f_flags
12820         eval $setvar
12821         ;;
12822 esac
12823 case "$d_statfs_f_flags" in
12824 "$define")      echo "Yes, it does."   ;;
12825 *)              echo "No, it doesn't." ;;
12826 esac
12827
12828 : see if _ptr and _cnt from stdio act std
12829 echo " "
12830
12831 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12832         echo "(Looks like you have stdio.h from BSD.)"
12833         case "$stdio_ptr" in
12834         '') stdio_ptr='((fp)->_p)'
12835                 ptr_lval=$define
12836                 ;;
12837         *)      ptr_lval=$d_stdio_ptr_lval;;
12838         esac
12839         case "$stdio_cnt" in
12840         '') stdio_cnt='((fp)->_r)'
12841                 cnt_lval=$define
12842                 ;;
12843         *)      cnt_lval=$d_stdio_cnt_lval;;
12844         esac
12845         case "$stdio_base" in
12846         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12847         esac
12848         case "$stdio_bufsiz" in
12849         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12850         esac
12851 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12852         echo "(Looks like you have stdio.h from Linux.)"
12853         case "$stdio_ptr" in
12854         '') stdio_ptr='((fp)->_IO_read_ptr)'
12855                 ptr_lval=$define
12856                 ;;
12857         *)      ptr_lval=$d_stdio_ptr_lval;;
12858         esac
12859         case "$stdio_cnt" in
12860         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12861                 cnt_lval=$undef
12862                 ;;
12863         *)      cnt_lval=$d_stdio_cnt_lval;;
12864         esac
12865         case "$stdio_base" in
12866         '') stdio_base='((fp)->_IO_read_base)';;
12867         esac
12868         case "$stdio_bufsiz" in
12869         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12870         esac
12871 else
12872         case "$stdio_ptr" in
12873         '') stdio_ptr='((fp)->_ptr)'
12874                 ptr_lval=$define
12875                 ;;
12876         *)      ptr_lval=$d_stdio_ptr_lval;;
12877         esac
12878         case "$stdio_cnt" in
12879         '') stdio_cnt='((fp)->_cnt)'
12880                 cnt_lval=$define
12881                 ;;
12882         *)      cnt_lval=$d_stdio_cnt_lval;;
12883         esac
12884         case "$stdio_base" in
12885         '') stdio_base='((fp)->_base)';;
12886         esac
12887         case "$stdio_bufsiz" in
12888         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12889         esac
12890 fi
12891
12892 : test whether _ptr and _cnt really work
12893 echo "Checking how std your stdio is..." >&4
12894 $cat >try.c <<EOP
12895 #include <stdio.h>
12896 #define FILE_ptr(fp)    $stdio_ptr
12897 #define FILE_cnt(fp)    $stdio_cnt
12898 int main() {
12899         FILE *fp = fopen("try.c", "r");
12900         char c = getc(fp);
12901         if (
12902                 18 <= FILE_cnt(fp) &&
12903                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12904         )
12905                 exit(0);
12906         exit(1);
12907 }
12908 EOP
12909 val="$undef"
12910 set try
12911 if eval $compile && $to try.c; then
12912         if $run ./try; then
12913                 echo "Your stdio acts pretty std."
12914                 val="$define"
12915         else
12916                 echo "Your stdio isn't very std."
12917         fi
12918 else
12919         echo "Your stdio doesn't appear very std."
12920 fi
12921 $rm -f try.c try
12922 set d_stdstdio
12923 eval $setvar
12924
12925 : Can _ptr be used as an lvalue?
12926 case "$d_stdstdio$ptr_lval" in
12927 $define$define) val=$define ;;
12928 *) val=$undef ;;
12929 esac
12930 set d_stdio_ptr_lval
12931 eval $setvar
12932
12933 : Can _cnt be used as an lvalue?
12934 case "$d_stdstdio$cnt_lval" in
12935 $define$define) val=$define ;;
12936 *) val=$undef ;;
12937 esac
12938 set d_stdio_cnt_lval
12939 eval $setvar
12940
12941
12942 : test whether setting _ptr sets _cnt as a side effect
12943 d_stdio_ptr_lval_sets_cnt="$undef"
12944 d_stdio_ptr_lval_nochange_cnt="$undef"
12945 case "$d_stdio_ptr_lval$d_stdstdio" in
12946 $define$define)
12947         echo "Checking to see what happens if we set the stdio ptr..." >&4
12948 $cat >try.c <<EOP
12949 #include <stdio.h>
12950 /* Can we scream? */
12951 /* Eat dust sed :-) */
12952 /* In the buffer space, no one can hear you scream. */
12953 #define FILE_ptr(fp)    $stdio_ptr
12954 #define FILE_cnt(fp)    $stdio_cnt
12955 #include <sys/types.h>
12956 int main() {
12957         FILE *fp = fopen("try.c", "r");
12958         int c;
12959         char *ptr;
12960         size_t cnt;
12961         if (!fp) {
12962             puts("Fail even to read");
12963             exit(1);
12964         }
12965         c = getc(fp); /* Read away the first # */
12966         if (c == EOF) {
12967             puts("Fail even to read");
12968             exit(1);
12969         }
12970         if (!(
12971                 18 <= FILE_cnt(fp) &&
12972                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12973         )) {
12974                 puts("Fail even to read");
12975                 exit (1);
12976         }
12977         ptr = (char*) FILE_ptr(fp);
12978         cnt = (size_t)FILE_cnt(fp);
12979
12980         FILE_ptr(fp) += 42;
12981
12982         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12983                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12984                 exit (1);
12985         }
12986         if (FILE_cnt(fp) <= 20) {
12987                 printf ("Fail (<20 chars to test)");
12988                 exit (1);
12989         }
12990         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12991                 puts("Fail compare");
12992                 exit (1);
12993         }
12994         if (cnt == FILE_cnt(fp)) {
12995                 puts("Pass_unchanged");
12996                 exit (0);
12997         }       
12998         if (FILE_cnt(fp) == (cnt - 42)) {
12999                 puts("Pass_changed");
13000                 exit (0);
13001         }
13002         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
13003         return 1;
13004
13005 }
13006 EOP
13007         set try
13008         if eval $compile && $to try.c; then
13009                 case `$run ./try` in
13010                 Pass_changed)
13011                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
13012                         d_stdio_ptr_lval_sets_cnt="$define" ;;
13013                 Pass_unchanged)
13014                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
13015                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
13016                 Fail*)
13017                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
13018                 *)
13019                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
13020         esac
13021         else
13022                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
13023         fi
13024         $rm -f try.c try
13025         ;;
13026 esac
13027
13028 : see if _base is also standard
13029 val="$undef"
13030 case "$d_stdstdio" in
13031 $define)
13032         $cat >try.c <<EOP
13033 #include <stdio.h>
13034 #define FILE_base(fp)   $stdio_base
13035 #define FILE_bufsiz(fp) $stdio_bufsiz
13036 int main() {
13037         FILE *fp = fopen("try.c", "r");
13038         char c = getc(fp);
13039         if (
13040                 19 <= FILE_bufsiz(fp) &&
13041                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
13042         )
13043                 exit(0);
13044         exit(1);
13045 }
13046 EOP
13047         set try
13048         if eval $compile && $to try.c; then
13049                 if $run ./try; then
13050                         echo "And its _base field acts std."
13051                         val="$define"
13052                 else
13053                         echo "But its _base field isn't std."
13054                 fi
13055         else
13056                 echo "However, it seems to be lacking the _base field."
13057         fi
13058         $rm -f try.c try
13059         ;;
13060 esac
13061 set d_stdiobase
13062 eval $setvar
13063
13064 $cat >&4 <<EOM
13065 Checking how to access stdio streams by file descriptor number...
13066 EOM
13067 case "$stdio_stream_array" in
13068 '')     $cat >try.c <<EOCP
13069 #include <stdio.h>
13070 int main() {
13071   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
13072     printf("yes\n");
13073 }
13074 EOCP
13075         for s in _iob __iob __sF
13076         do
13077                 set try -DSTDIO_STREAM_ARRAY=$s
13078                 if eval $compile; then
13079                         case "`$run ./try`" in
13080                         yes)    stdio_stream_array=$s; break ;;
13081                         esac
13082                 fi
13083         done
13084         $rm -f try.* try$exe_ext
13085 esac
13086 case "$stdio_stream_array" in
13087 '')     $cat >&4 <<EOM
13088 I can't figure out how to access stdio streams by file descriptor number.
13089 EOM
13090         d_stdio_stream_array="$undef"
13091         ;;
13092 *)      $cat >&4 <<EOM
13093 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
13094 EOM
13095         d_stdio_stream_array="$define"
13096         ;;
13097 esac
13098
13099 : see if strcoll exists
13100 set strcoll d_strcoll
13101 eval $inlibc
13102
13103 : check for structure copying
13104 echo " "
13105 echo "Checking to see if your C compiler can copy structs..." >&4
13106 $cat >try.c <<'EOCP'
13107 int main()
13108 {
13109         struct blurfl {
13110                 int dyick;
13111         } foo, bar;
13112
13113         foo = bar;
13114 }
13115 EOCP
13116 if $cc -c try.c >/dev/null 2>&1 ; then
13117         val="$define"
13118         echo "Yup, it can."
13119 else
13120         val="$undef"
13121         echo "Nope, it can't."
13122 fi
13123 set d_strctcpy
13124 eval $setvar
13125 $rm -f try.*
13126
13127 : see if strerror and/or sys_errlist[] exist
13128 echo " "
13129 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
13130     if set strerror val -f d_strerror; eval $csym; $val; then
13131                 echo 'strerror() found.' >&4
13132                 d_strerror="$define"
13133                 d_strerrm='strerror(e)'
13134                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13135                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
13136                         d_syserrlst="$define"
13137                 else
13138                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
13139                         d_syserrlst="$undef"
13140                 fi
13141     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
13142                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
13143                 echo 'strerror() found in string header.' >&4
13144                 d_strerror="$define"
13145                 d_strerrm='strerror(e)'
13146                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
13147                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
13148                                 d_syserrlst="$define"
13149                 else
13150                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
13151                         d_syserrlst="$undef"
13152                 fi
13153     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
13154                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
13155                 d_strerror="$undef"
13156                 d_syserrlst="$define"
13157                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
13158     else
13159                 echo 'strerror() and sys_errlist[] NOT found.' >&4
13160                 d_strerror="$undef"
13161                 d_syserrlst="$undef"
13162                 d_strerrm='"unknown"'
13163     fi
13164 fi
13165
13166 : see if strftime exists
13167 set strftime d_strftime
13168 eval $inlibc
13169
13170 : see if strtod exists
13171 set strtod d_strtod
13172 eval $inlibc
13173
13174 : see if strtol exists
13175 set strtol d_strtol
13176 eval $inlibc
13177
13178 : see if strtold exists
13179 set strtold d_strtold
13180 eval $inlibc
13181
13182 : see if strtoll exists
13183 set strtoll d_strtoll
13184 eval $inlibc
13185
13186 case "$d_longlong-$d_strtoll" in
13187 "$define-$define")
13188         $cat <<EOM
13189 Checking whether your strtoll() works okay...
13190 EOM
13191         $cat >try.c <<'EOCP'
13192 #include <errno.h>
13193 #ifdef __hpux
13194 #define strtoll __strtoll
13195 #endif
13196 #ifdef __EMX__
13197 #define strtoll _strtoll
13198 #endif
13199 #include <stdio.h>
13200 extern long long int strtoll(char *s, char **, int); 
13201 static int bad = 0;
13202 int check(char *s, long long ell, int een) {
13203         long long gll;
13204         errno = 0;
13205         gll = strtoll(s, 0, 10);
13206         if (!((gll == ell) && (errno == een)))
13207                 bad++;
13208 }
13209 int main() {
13210         check(" 1",                                      1LL, 0);
13211         check(" 0",                                      0LL, 0);
13212         check("-1",                                     -1LL, 0);
13213         check("-9223372036854775808", -9223372036854775808LL, 0);
13214         check("-9223372036854775808", -9223372036854775808LL, 0);
13215         check(" 9223372036854775807",  9223372036854775807LL, 0);
13216         check("-9223372036854775808", -9223372036854775808LL, 0);
13217         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
13218         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
13219         if (!bad)
13220                 printf("ok\n");
13221 }
13222 EOCP
13223         set try
13224         if eval $compile; then
13225                 yyy=`$run ./try`
13226                 case "$yyy" in
13227                 ok) echo "Your strtoll() seems to be working okay." ;;
13228                 *) cat <<EOM >&4
13229 Your strtoll() doesn't seem to be working okay.
13230 EOM
13231                    d_strtoll="$undef"
13232                    ;;
13233                 esac
13234         else
13235                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13236                 d_strtoll="$undef"
13237         fi
13238         ;;
13239 esac
13240
13241 : see if strtoq exists
13242 set strtoq d_strtoq
13243 eval $inlibc
13244
13245 : see if strtoul exists
13246 set strtoul d_strtoul
13247 eval $inlibc
13248
13249 case "$d_strtoul" in
13250 "$define")
13251         $cat <<EOM
13252 Checking whether your strtoul() works okay...
13253 EOM
13254         $cat >try.c <<'EOCP'
13255 #include <errno.h>
13256 #include <stdio.h>
13257 extern unsigned long int strtoul(char *s, char **, int); 
13258 static int bad = 0;
13259 void check(char *s, unsigned long eul, int een) {
13260         unsigned long gul;
13261         errno = 0;
13262         gul = strtoul(s, 0, 10);
13263         if (!((gul == eul) && (errno == een)))
13264                 bad++;
13265 }
13266 int main() {
13267         check(" 1", 1L, 0);
13268         check(" 0", 0L, 0);
13269 EOCP
13270         case "$longsize" in
13271         8)
13272             $cat >>try.c <<'EOCP'
13273         check("18446744073709551615", 18446744073709551615UL, 0);
13274         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13275 #if 0 /* strtoul() for /^-/ strings is undefined. */
13276         check("-1", 18446744073709551615UL, 0);
13277         check("-18446744073709551614", 2, 0);
13278         check("-18446744073709551615", 1, 0);
13279         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13280         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13281 #endif
13282 EOCP
13283                 ;;
13284         4)
13285                     $cat >>try.c <<'EOCP'
13286         check("4294967295", 4294967295UL, 0);
13287         check("4294967296", 4294967295UL, ERANGE);
13288 #if 0 /* strtoul() for /^-/ strings is undefined. */
13289         check("-1", 4294967295UL, 0);
13290         check("-4294967294", 2, 0);
13291         check("-4294967295", 1, 0);
13292         check("-4294967296", 4294967295UL, ERANGE);
13293         check("-4294967297", 4294967295UL, ERANGE);
13294 #endif
13295 EOCP
13296                 ;;
13297         *)
13298 : Should we write these tests to be more portable by sprintf-ing
13299 : ~0 and then manipulating that char string as input for strtol?
13300                 ;;
13301         esac
13302         $cat >>try.c <<'EOCP'
13303         if (!bad)
13304                 printf("ok\n");
13305         return 0;
13306 }
13307 EOCP
13308         set try
13309         if eval $compile; then
13310                 case "`$run ./try`" in
13311                 ok) echo "Your strtoul() seems to be working okay." ;;
13312                 *) cat <<EOM >&4
13313 Your strtoul() doesn't seem to be working okay.
13314 EOM
13315                    d_strtoul="$undef"
13316                    ;;
13317                 esac
13318         fi
13319         ;;
13320 esac
13321
13322 : see if strtoull exists
13323 set strtoull d_strtoull
13324 eval $inlibc
13325
13326 case "$d_longlong-$d_strtoull" in
13327 "$define-$define")
13328         $cat <<EOM
13329 Checking whether your strtoull() works okay...
13330 EOM
13331         $cat >try.c <<'EOCP'
13332 #include <errno.h>
13333 #ifdef __hpux
13334 #define strtoull __strtoull
13335 #endif
13336 #include <stdio.h>
13337 extern unsigned long long int strtoull(char *s, char **, int); 
13338 static int bad = 0;
13339 int check(char *s, long long eull, int een) {
13340         long long gull;
13341         errno = 0;
13342         gull = strtoull(s, 0, 10);
13343         if (!((gull == eull) && (errno == een)))
13344                 bad++;
13345 }
13346 int main() {
13347         check(" 1",                                        1LL, 0);
13348         check(" 0",                                        0LL, 0);
13349         check("18446744073709551615",  18446744073709551615ULL, 0);
13350         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13351 #if 0 /* strtoull() for /^-/ strings is undefined. */
13352         check("-1",                    18446744073709551615ULL, 0);
13353         check("-18446744073709551614",                     2LL, 0);
13354         check("-18446744073709551615",                     1LL, 0);
13355         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13356         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13357 #endif
13358         if (!bad)
13359                 printf("ok\n");
13360 }
13361 EOCP
13362         set try
13363         if eval $compile; then
13364                 case "`$run ./try`" in
13365                 ok) echo "Your strtoull() seems to be working okay." ;;
13366                 *) cat <<EOM >&4
13367 Your strtoull() doesn't seem to be working okay.
13368 EOM
13369                    d_strtoull="$undef"
13370                    ;;
13371                 esac
13372         fi
13373         ;;
13374 esac
13375
13376 : see if strtouq exists
13377 set strtouq d_strtouq
13378 eval $inlibc
13379
13380 case "$d_strtouq" in
13381 "$define")
13382         $cat <<EOM
13383 Checking whether your strtouq() works okay...
13384 EOM
13385         $cat >try.c <<'EOCP'
13386 #include <errno.h>
13387 #include <stdio.h>
13388 extern unsigned long long int strtouq(char *s, char **, int); 
13389 static int bad = 0;
13390 void check(char *s, unsigned long long eull, int een) {
13391         unsigned long long gull;
13392         errno = 0;
13393         gull = strtouq(s, 0, 10);
13394         if (!((gull == eull) && (errno == een)))
13395                 bad++;
13396 }
13397 int main() {
13398         check(" 1",                                        1LL, 0);
13399         check(" 0",                                        0LL, 0);
13400         check("18446744073709551615",  18446744073709551615ULL, 0);
13401         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13402 #if 0 /* strtouq() for /^-/ strings is undefined. */
13403         check("-1",                    18446744073709551615ULL, 0);
13404         check("-18446744073709551614",                     2LL, 0);
13405         check("-18446744073709551615",                     1LL, 0);
13406         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13407         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13408 #endif
13409         if (!bad)
13410                 printf("ok\n");
13411         return 0;
13412 }
13413 EOCP
13414         set try
13415         if eval $compile; then
13416                 case "`$run ./try`" in
13417                 ok) echo "Your strtouq() seems to be working okay." ;;
13418                 *) cat <<EOM >&4
13419 Your strtouq() doesn't seem to be working okay.
13420 EOM
13421                    d_strtouq="$undef"
13422                    ;;
13423                 esac
13424         fi
13425         ;;
13426 esac
13427
13428 : see if strxfrm exists
13429 set strxfrm d_strxfrm
13430 eval $inlibc
13431
13432 : see if symlink exists
13433 set symlink d_symlink
13434 eval $inlibc
13435
13436 : see if syscall exists
13437 set syscall d_syscall
13438 eval $inlibc
13439
13440 : see if prototype for syscall is available
13441 echo " "
13442 set d_syscallproto syscall $i_unistd unistd.h
13443 eval $hasproto
13444
13445 : see if sysconf exists
13446 set sysconf d_sysconf
13447 eval $inlibc
13448
13449 : see if system exists
13450 set system d_system
13451 eval $inlibc
13452
13453 : see if tcgetpgrp exists
13454 set tcgetpgrp d_tcgetpgrp
13455 eval $inlibc
13456
13457 : see if tcsetpgrp exists
13458 set tcsetpgrp d_tcsetpgrp
13459 eval $inlibc
13460
13461 : see if prototype for telldir is available
13462 echo " "
13463 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13464 eval $hasproto
13465
13466 : see if this is a sys/times.h system
13467 set sys/times.h i_systimes
13468 eval $inhdr
13469
13470 : see if times exists
13471 echo " "
13472 if set times val -f d_times; eval $csym; $val; then
13473         echo 'times() found.' >&4
13474         d_times="$define"
13475         inc=''
13476         case "$i_systimes" in
13477         "$define") inc='sys/times.h';;
13478         esac
13479         rp="What is the type returned by times() on this system?"
13480         set clock_t clocktype long stdio.h sys/types.h $inc
13481         eval $typedef_ask
13482 else
13483         echo 'times() NOT found, hope that will do.' >&4
13484         d_times="$undef"
13485         clocktype='int'
13486 fi
13487
13488 : see if truncate exists
13489 set truncate d_truncate
13490 eval $inlibc
13491
13492 : see if tzname[] exists
13493 echo " "
13494 if set tzname val -a d_tzname; eval $csym; $val; then
13495         val="$define"
13496         echo 'tzname[] found.' >&4
13497 else
13498         val="$undef"
13499         echo 'tzname[] NOT found.' >&4
13500 fi
13501 set d_tzname
13502 eval $setvar
13503
13504 case "$osname" in
13505 next|rhapsody|darwin) multiarch="$define" ;;
13506 esac
13507 case "$multiarch" in
13508 ''|[nN]*) multiarch="$undef" ;;
13509 esac
13510
13511 : check for ordering of bytes in a long
13512 echo " "
13513 case "$usecrosscompile$multiarch" in
13514 *$define*)
13515         $cat <<EOM
13516 You seem to be either cross-compiling or doing a multiarchitecture build,
13517 skipping the byteorder check.
13518
13519 EOM
13520         byteorder='ffff'
13521         ;;
13522 *)
13523         case "$byteorder" in
13524         '')
13525                 $cat <<'EOM'
13526 In the following, larger digits indicate more significance.  A big-endian
13527 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13528 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13529 machines may have weird orders like 3412.  A Cray will report 87654321,
13530 an Alpha will report 12345678. If the test program works the default is
13531 probably right.
13532 I'm now running the test program...
13533 EOM
13534                 $cat >try.c <<'EOCP'
13535 #include <stdio.h>
13536 int main()
13537 {
13538         int i;
13539         union {
13540                 unsigned long l;
13541                 char c[sizeof(long)];
13542         } u;
13543
13544         if (sizeof(long) > 4)
13545                 u.l = (0x08070605L << 32) | 0x04030201L;
13546         else
13547                 u.l = 0x04030201L;
13548         for (i = 0; i < sizeof(long); i++)
13549                 printf("%c", u.c[i]+'0');
13550         printf("\n");
13551         exit(0);
13552 }
13553 EOCP
13554                 xxx_prompt=y
13555                 set try
13556                 if eval $compile && ./try > /dev/null; then
13557                         dflt=`$run ./try`
13558                         case "$dflt" in
13559                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13560                                 echo "(The test program ran ok.)"
13561                                 echo "byteorder=$dflt"
13562                                 xxx_prompt=n
13563                         ;;
13564                         ????|????????) echo "(The test program ran ok.)" ;;
13565                         *) echo "(The test program didn't run right for some reason.)" ;;
13566                         esac
13567                 else
13568                         dflt='4321'
13569                         cat <<'EOM'
13570 (I can't seem to compile the test program.  Guessing big-endian...)
13571 EOM
13572                 fi
13573                 case "$xxx_prompt" in
13574                 y)
13575                         rp="What is the order of bytes in a long?"
13576                         . ./myread
13577                         byteorder="$ans"
13578                         ;;
13579                 *)      byteorder=$dflt
13580                         ;;
13581                 esac
13582                 ;;
13583         esac
13584         $rm -f try.c try
13585         ;;
13586 esac
13587
13588
13589 $cat <<EOM
13590
13591 Checking to see whether you can access character data unalignedly...
13592 EOM
13593 case "$d_u32align" in
13594 '')   $cat >try.c <<EOCP
13595 #include <stdio.h>
13596 #define U32 $u32type
13597 #define BYTEORDER 0x$byteorder
13598 #define U8 $u8type
13599 #include <signal.h>
13600 #ifdef SIGBUS
13601 $signal_t bletch(s) int s; { exit(4); }
13602 #endif
13603 int main() {
13604 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13605     U8 buf[8];
13606     U32 *up;
13607     int i;
13608
13609     if (sizeof(U32) != 4) {
13610         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13611         exit(1);
13612     }
13613
13614     fflush(stdout);
13615
13616 #ifdef SIGBUS
13617     signal(SIGBUS, bletch);
13618 #endif
13619
13620     buf[0] = 0;
13621     buf[1] = 0;
13622     buf[2] = 0;
13623     buf[3] = 1;
13624     buf[5] = 0;
13625     buf[6] = 0;
13626     buf[7] = 0;
13627     buf[8] = 1;
13628
13629     for (i = 0; i < 4; i++) {
13630         up = (U32*)(buf + i);
13631         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13632                (*up == 1 << (8*(3-i)))  /* little-endian */
13633               )
13634            )
13635         {
13636             printf("read failed (%x)\n", *up);
13637             exit(2);
13638         }
13639     }
13640
13641     /* write test */
13642     for (i = 0; i < 4; i++) {
13643         up = (U32*)(buf + i);
13644         *up = 0xBeef;
13645         if (*up != 0xBeef) {
13646             printf("write failed (%x)\n", *up);
13647             exit(3);
13648         }
13649     }
13650
13651     exit(0);
13652 #else
13653     printf("1\n");
13654     exit(1);
13655 #endif
13656     return 0;
13657 }
13658 EOCP
13659 set try
13660 if eval $compile_ok; then
13661         echo "(Testing for character data alignment may crash the test.  That's okay.)" >&4
13662         $run ./try 2>&1 >/dev/null
13663         case "$?" in
13664         0)      cat >&4 <<EOM
13665 You can access character data pretty unalignedly.
13666 EOM
13667                 d_u32align="$undef"
13668                 ;;
13669         *)      cat >&4 <<EOM
13670 It seems that you must access character data in an aligned manner.
13671 EOM
13672                 d_u32align="$define"
13673                 ;;
13674         esac
13675 else
13676         rp='Can you access character data at unaligned addresses?'
13677         dflt='n'
13678         . ./myread
13679         case "$ans" in
13680         [yY]*)  d_u32align="$undef"  ;;
13681         *)      d_u32align="$define" ;;
13682         esac
13683 fi
13684 $rm -f core core.try.* try.core
13685 ;;
13686 esac
13687
13688 : see if ualarm exists
13689 set ualarm d_ualarm
13690 eval $inlibc
13691
13692 : see if umask exists
13693 set umask d_umask
13694 eval $inlibc
13695
13696 : see if unordered exists
13697 set unordered d_unordered
13698 eval $inlibc
13699
13700 : see if usleep exists
13701 set usleep d_usleep
13702 eval $inlibc
13703
13704 : see if prototype for usleep is available
13705 echo " "
13706 set d_usleepproto usleep $i_unistd unistd.h
13707 eval $hasproto
13708
13709 : see if ustat exists
13710 set ustat d_ustat
13711 eval $inlibc
13712
13713 : backward compatibility for d_hvfork
13714 if test X$d_hvfork != X; then
13715         d_vfork="$d_hvfork"
13716         d_hvfork=''
13717 fi
13718 : see if there is a vfork
13719 val=''
13720 set vfork val
13721 eval $inlibc
13722
13723 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13724 : perl on Solaris 2.x, and probably elsewhere.
13725 case "$val" in
13726 $define)
13727         echo " "
13728         case "$usevfork" in
13729         false) dflt='n';;
13730         *) dflt='y';;
13731         esac
13732         cat <<'EOM'
13733  
13734 Perl can only use a vfork() that doesn't suffer from strict
13735 restrictions on calling functions or modifying global data in
13736 the child.  For example, glibc-2.1 contains such a vfork()
13737 that is unsuitable.  If your system provides a proper fork()
13738 call, chances are that you do NOT want perl to use vfork().
13739
13740 EOM
13741         rp="Do you still want to use vfork()?"
13742         . ./myread
13743         case "$ans" in
13744         y|Y) ;;
13745         *)
13746                 echo "Ok, we won't use vfork()."
13747                 val="$undef"
13748                 ;;
13749         esac
13750         ;;
13751 esac
13752 set d_vfork
13753 eval $setvar
13754 case "$d_vfork" in
13755 $define) usevfork='true';;
13756 *) usevfork='false';;
13757 esac
13758
13759 : see if closedir exists
13760 set closedir d_closedir
13761 eval $inlibc
13762
13763 case "$d_closedir" in
13764 "$define")
13765         echo " "
13766         echo "Checking whether closedir() returns a status..." >&4
13767         cat > try.c <<EOM
13768 #$i_dirent I_DIRENT             /**/
13769 #$i_sysdir I_SYS_DIR            /**/
13770 #$i_sysndir I_SYS_NDIR          /**/
13771 #$i_systypes I_SYS_TYPES        /**/
13772
13773 #if defined(I_SYS_TYPES)
13774 #include <sys/types.h>
13775 #endif
13776 #if defined(I_DIRENT)
13777 #include <dirent.h>
13778 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13779 #include <sys/dir.h>
13780 #endif
13781 #else
13782 #ifdef I_SYS_NDIR
13783 #include <sys/ndir.h>
13784 #else
13785 #ifdef I_SYS_DIR
13786 #ifdef hp9000s500
13787 #include <ndir.h>       /* may be wrong in the future */
13788 #else
13789 #include <sys/dir.h>
13790 #endif
13791 #endif
13792 #endif
13793 #endif 
13794 int main() { return closedir(opendir(".")); }
13795 EOM
13796         set try
13797         if eval $compile_ok; then
13798                 if $run ./try > /dev/null 2>&1 ; then
13799                         echo "Yes, it does."
13800                         val="$undef"
13801                 else
13802                         echo "No, it doesn't."
13803                         val="$define"
13804                 fi
13805         else
13806                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13807                 val="$define"
13808         fi
13809         ;;
13810 *)
13811         val="$undef";
13812         ;;
13813 esac
13814 set d_void_closedir
13815 eval $setvar
13816 $rm -f try try.*
13817 : see if there is a wait4
13818 set wait4 d_wait4
13819 eval $inlibc
13820
13821 : see if waitpid exists
13822 set waitpid d_waitpid
13823 eval $inlibc
13824
13825 : see if wcstombs exists
13826 set wcstombs d_wcstombs
13827 eval $inlibc
13828
13829 : see if wctomb exists
13830 set wctomb d_wctomb
13831 eval $inlibc
13832
13833 : see if writev exists
13834 set writev d_writev
13835 eval $inlibc
13836
13837 : preserve RCS keywords in files with variable substitution, grrr
13838 Date='$Date'
13839 Id='$Id'
13840 Log='$Log'
13841 RCSfile='$RCSfile'
13842 Revision='$Revision'
13843
13844 : check for alignment requirements
13845 echo " "
13846 case "$usecrosscompile$multiarch" in
13847 *$define*)
13848         $cat <<EOM
13849 You seem to be either cross-compiling or doing a multiarchitecture build,
13850 skipping the memory alignment check.
13851
13852 EOM
13853         case "$alignbytes" in
13854         '') alignbytes=8 ;;
13855         esac
13856         ;;
13857 *)
13858         case "$alignbytes" in
13859         '') echo "Checking alignment constraints..." >&4
13860                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13861                         $cat >try.c <<'EOCP'
13862 typedef long double NV;
13863 EOCP
13864                 else
13865                         $cat >try.c <<'EOCP'
13866 typedef double NV;
13867 EOCP
13868                 fi
13869                 $cat >>try.c <<'EOCP'
13870 #include <stdio.h>
13871 struct foobar {
13872         char foo;
13873         NV bar;
13874 } try_algn;
13875 int main()
13876 {
13877     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13878     return(0);
13879 }
13880 EOCP
13881                 set try
13882                 if eval $compile_ok; then
13883                         dflt=`$run ./try`
13884                 else
13885                         dflt='8'
13886                         echo "(I can't seem to compile the test program...)"
13887                 fi
13888                 ;;
13889         *) dflt="$alignbytes"
13890                 ;;
13891         esac
13892         rp="Doubles must be aligned on a how-many-byte boundary?"
13893         . ./myread
13894         alignbytes="$ans"
13895         $rm -f try.c try
13896         ;;
13897 esac
13898
13899
13900 : set the base revision
13901 baserev=5.0
13902
13903 : how do we catenate cpp tokens here?
13904 echo " "
13905 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13906 $cat >cpp_stuff.c <<'EOCP'
13907 #define RCAT(a,b)a/**/b
13908 #define ACAT(a,b)a ## b
13909 RCAT(Rei,ser)
13910 ACAT(Cir,cus)
13911 EOCP
13912 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13913 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13914         echo "Oh!  Smells like ANSI's been here." >&4
13915         echo "We can catify or stringify, separately or together!"
13916         cpp_stuff=42
13917 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13918         echo "Ah, yes!  The good old days!" >&4
13919         echo "However, in the good old days we don't know how to stringify and"
13920         echo "catify at the same time."
13921         cpp_stuff=1
13922 else
13923         $cat >&4 <<EOM
13924 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13925 to have to edit the values of CAT[2-5] in config.h...
13926 EOM
13927         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13928 fi
13929 $rm -f cpp_stuff.*
13930
13931 : see if this is a db.h system
13932 set db.h i_db
13933 eval $inhdr
13934
13935 case "$i_db" in
13936 $define)
13937         : Check db version.
13938         echo " "
13939         echo "Checking Berkeley DB version ..." >&4
13940         $cat >try.c <<EOCP
13941 #$d_const HASCONST
13942 #ifndef HASCONST
13943 #define const
13944 #endif
13945 #include <sys/types.h>
13946 #include <stdio.h>
13947 #include <db.h>
13948 int main(int argc, char *argv[])
13949 {
13950 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13951     int Major, Minor, Patch ;
13952     unsigned long Version ;
13953     (void)db_version(&Major, &Minor, &Patch) ;
13954     if (argc == 2) {
13955         printf("%d %d %d %d %d %d\n",
13956                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13957                Major, Minor, Patch);
13958         exit(0);
13959     }
13960     printf("You have Berkeley DB Version 2 or greater.\n");
13961
13962     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13963                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13964     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13965                 Major, Minor, Patch) ;
13966
13967     /* check that db.h & libdb are compatible */
13968     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13969         printf("db.h and libdb are incompatible.\n") ;
13970         exit(3);        
13971     }
13972
13973     printf("db.h and libdb are compatible.\n") ;
13974
13975     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13976                 + DB_VERSION_PATCH ;
13977
13978     /* needs to be >= 2.3.4 */
13979     if (Version < 2003004) {
13980     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13981         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13982         exit(2);        
13983     }
13984
13985     exit(0);
13986 #else
13987 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13988     if (argc == 2) {
13989         printf("1 0 0\n");
13990         exit(0);
13991     }
13992     printf("You have Berkeley DB Version 1.\n");
13993     exit(0);    /* DB version < 2: the coast is clear. */
13994 #else
13995     exit(1);    /* <db.h> not Berkeley DB? */
13996 #endif
13997 #endif
13998 }
13999 EOCP
14000         set try
14001         if eval $compile_ok && $run ./try; then
14002                 echo 'Looks OK.' >&4
14003                 set `$run ./try 1`
14004                 db_version_major=$1
14005                 db_version_minor=$2
14006                 db_version_patch=$3
14007         else
14008                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
14009                 i_db=$undef
14010                 case " $libs " in
14011                 *"-ldb "*)
14012                         : Remove db from list of libraries to use
14013                         echo "Removing unusable -ldb from library list" >&4
14014                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
14015                         shift
14016                         libs="$*"
14017                         echo "libs = $libs" >&4
14018                         ;;
14019                 esac
14020         fi
14021         $rm -f try.*
14022         ;;
14023 esac
14024
14025 case "$i_db" in
14026 define)
14027         : Check the return type needed for hash 
14028         echo " "
14029         echo "Checking return type needed for hash for Berkeley DB ..." >&4
14030         $cat >try.c <<EOCP
14031 #$d_const HASCONST
14032 #ifndef HASCONST
14033 #define const
14034 #endif
14035 #include <sys/types.h>
14036 #include <db.h>
14037
14038 #ifndef DB_VERSION_MAJOR
14039 u_int32_t hash_cb (ptr, size)
14040 const void *ptr;
14041 size_t size;
14042 {
14043 }
14044 HASHINFO info;
14045 int main()
14046 {
14047         info.hash = hash_cb;
14048 }
14049 #endif
14050 EOCP
14051         if $cc $ccflags -c try.c >try.out 2>&1 ; then
14052                 if $contains warning try.out >>/dev/null 2>&1 ; then
14053                         db_hashtype='int'
14054                 else
14055                         db_hashtype='u_int32_t'
14056                 fi
14057         else
14058                 : XXX Maybe we should just give up here.
14059                 db_hashtype=u_int32_t
14060                 $cat try.out >&4
14061                 echo "Help:  I can't seem to compile the db test program." >&4
14062                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
14063         fi
14064         $rm -f try.*
14065         echo "Your version of Berkeley DB uses $db_hashtype for hash."
14066         ;;
14067 *)      db_hashtype=u_int32_t
14068         ;;
14069 esac
14070 case "$i_db" in
14071 define)
14072         : Check the return type needed for prefix 
14073         echo " "
14074         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
14075         cat >try.c <<EOCP
14076 #$d_const HASCONST
14077 #ifndef HASCONST
14078 #define const
14079 #endif
14080 #include <sys/types.h>
14081 #include <db.h>
14082
14083 #ifndef DB_VERSION_MAJOR
14084 size_t prefix_cb (key1, key2)
14085 const DBT *key1;
14086 const DBT *key2;
14087 {
14088 }
14089 BTREEINFO info;
14090 int main()
14091 {
14092         info.prefix = prefix_cb;
14093 }
14094 #endif
14095 EOCP
14096         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
14097                 if $contains warning try.out >>/dev/null 2>&1 ; then
14098                         db_prefixtype='int'
14099                 else
14100                         db_prefixtype='size_t'
14101                 fi
14102         else
14103                 db_prefixtype='size_t'
14104                 : XXX Maybe we should just give up here.
14105                 $cat try.out >&4
14106                 echo "Help:  I can't seem to compile the db test program." >&4
14107                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
14108         fi
14109         $rm -f try.*
14110         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
14111         ;;
14112 *)      db_prefixtype='size_t'
14113         ;;
14114 esac
14115
14116
14117 : How can we generate normalized random numbers ?
14118 echo " "
14119 echo "Looking for a random number function..." >&4
14120 case "$randfunc" in
14121 '')
14122         if set drand48 val -f; eval $csym; $val; then
14123                 dflt="drand48"
14124                 echo "Good, found drand48()." >&4
14125         elif set random val -f; eval $csym; $val; then
14126                 dflt="random"
14127                 echo "OK, found random()." >&4
14128         else
14129                 dflt="rand"
14130                 echo "Yick, looks like I have to use rand()." >&4
14131         fi
14132         echo " "
14133         ;;
14134 *)
14135         dflt="$randfunc"
14136         ;;
14137 esac
14138 cont=true
14139
14140 case "$ccflags" in
14141 *-Dmy_rand=*|*-Dmy_srand=*)
14142         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
14143         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
14144         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
14145         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
14146         ;;
14147 esac
14148
14149 while $test "$cont"; do
14150         rp="Use which function to generate random numbers?"
14151         . ./myread
14152         if $test "$ans" = "$dflt"; then
14153                 : null
14154         else
14155                 randbits=''
14156         fi
14157         randfunc="$ans"
14158         if set $ans val -f; eval $csym; $val; then
14159                 cont=''
14160         else
14161                 dflt=y
14162                 rp="I cannot find function $ans. Use that name anyway?"
14163                 . ./myread
14164                 dflt=rand
14165                 case "$ans" in
14166                         [yY]*) cont='';;
14167                 esac
14168         fi
14169         case "$cont" in
14170         '')
14171                 case "$randfunc" in
14172                 drand48)
14173                         drand01="drand48()"
14174                         seedfunc="srand48"
14175                         randbits=48
14176                         randseedtype=long
14177                         ;;
14178                 rand|random)
14179                         case "$randbits" in
14180                         '')
14181 echo "Checking to see how many bits your $randfunc() function produces..." >&4
14182                                 $cat >try.c <<EOCP
14183 #$i_unistd I_UNISTD
14184 #$i_stdlib I_STDLIB
14185 #include <stdio.h>
14186 #ifdef I_UNISTD
14187 #  include <unistd.h>
14188 #endif
14189 #ifdef I_STDLIB
14190 #  include <stdlib.h>
14191 #endif
14192 int main()
14193 {
14194         register int i;
14195         register unsigned long tmp;
14196         register unsigned long max = 0L;
14197
14198         for (i = 1000; i; i--) {
14199                 tmp = (unsigned long) $randfunc();
14200                 if (tmp > max) max = tmp;
14201         }
14202         for (i = 0; max; i++)
14203                 max /= 2;
14204         printf("%d\n",i);
14205 }
14206 EOCP
14207                                 set try
14208                                 if eval $compile_ok; then
14209                                         dflt=`try`
14210                                 else
14211                                         dflt='?'
14212                                         echo "(I can't seem to compile the test program...)"
14213                                 fi
14214                                 ;;
14215                         *)
14216                                 dflt="$randbits"
14217                                 ;;
14218                         esac
14219                         rp="How many bits does your $randfunc() function produce?"
14220                         . ./myread
14221                         randbits="$ans"
14222                         $rm -f try.c try
14223                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14224                         seedfunc="s$randfunc"
14225                         randseedtype=unsigned
14226                         ;;
14227                 *)
14228                         dflt="31"
14229                         rp="How many bits does your $randfunc() function produce?"
14230                         . ./myread
14231                         randbits="$ans"
14232                         seedfunc="s$randfunc"
14233                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
14234                         if set $seedfunc val -f; eval $csym; $val; then
14235                                 echo "(Using $seedfunc() to seed random generator)"
14236                         else
14237                                 echo "(Warning: no $seedfunc() to seed random generator)"
14238                                 seedfunc=rand
14239                         fi
14240                         randseedtype=unsigned
14241                         ;;
14242                 esac
14243                 ;;
14244         esac
14245 done
14246
14247 echo " "
14248 echo "Determining whether or not we are on an EBCDIC system..." >&4
14249 $cat >try.c <<'EOM'
14250 int main()
14251 {
14252   if ('M'==0xd4) return 0;
14253   return 1;
14254 }
14255 EOM
14256
14257 val=$undef
14258 set try
14259 if eval $compile_ok; then
14260         if $run ./try; then
14261                 echo "You seem to speak EBCDIC." >&4
14262                 val="$define"
14263         else
14264                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14265         fi
14266 else
14267         echo "I'm unable to compile the test program." >&4
14268         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14269 fi
14270 $rm -f try try.*
14271 set ebcdic
14272 eval $setvar
14273
14274 echo " "
14275 $cat >&4 <<EOM
14276 Checking how to flush all pending stdio output...
14277 EOM
14278 # I only know how to find the first 32 possibly open files on SunOS.
14279 # See also hints/sunos_4_1.sh and util.c  --AD
14280 case "$osname" in
14281 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14282 esac
14283 $cat >>try.c <<EOCP
14284 #include <stdio.h>
14285 #$i_unistd I_UNISTD
14286 #ifdef I_UNISTD
14287 # include <unistd.h>
14288 #endif
14289 #$d_sysconf HAS_SYSCONF
14290 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14291 #ifdef HAS_STDIO_STREAM_ARRAY
14292 # define STDIO_STREAM_ARRAY $stdio_stream_array
14293 #endif
14294 int main() {
14295   FILE* p;
14296   unlink("try.out");
14297   p = fopen("try.out", "w");
14298 #ifdef TRY_FPUTC
14299   fputc('x', p);
14300 #else
14301 # ifdef TRY_FPRINTF
14302   fprintf(p, "x");
14303 # endif
14304 #endif
14305 #ifdef TRY_FFLUSH_NULL
14306   fflush(NULL);
14307 #endif
14308 #ifdef TRY_FFLUSH_ALL
14309   {
14310     long open_max = -1;
14311 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14312     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14313 # else
14314 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14315     open_max = sysconf(_SC_OPEN_MAX);
14316 #  else
14317 #   ifdef FOPEN_MAX
14318     open_max = FOPEN_MAX;
14319 #   else
14320 #    ifdef OPEN_MAX
14321     open_max = OPEN_MAX;
14322 #    else
14323 #     ifdef _NFILE
14324     open_max = _NFILE;
14325 #     endif
14326 #    endif
14327 #   endif
14328 #  endif
14329 # endif 
14330 # ifdef HAS_STDIO_STREAM_ARRAY
14331     if (open_max > 0) {
14332       long i;
14333       for (i = 0; i < open_max; i++)
14334             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14335                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14336                 STDIO_STREAM_ARRAY[i]._flag)
14337                 fflush(&STDIO_STREAM_ARRAY[i]);
14338     }   
14339   }
14340 # endif
14341 #endif
14342   _exit(42);
14343 }
14344 EOCP
14345 : first we have to find out how _not_ to flush
14346 $to try.c
14347 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14348     output=''
14349     set try -DTRY_FPUTC
14350     if eval $compile; then
14351             $run ./try 2>/dev/null
14352             code="$?"
14353             $from try.out
14354             if $test ! -s try.out -a "X$code" = X42; then
14355                 output=-DTRY_FPUTC
14356             fi
14357     fi
14358     case "$output" in
14359     '')
14360             set try -DTRY_FPRINTF
14361             if eval $compile; then
14362                     $run ./try 2>/dev/null
14363                     code="$?"
14364                     $from try.out
14365                     if $test ! -s try.out -a "X$code" = X42; then
14366                         output=-DTRY_FPRINTF
14367                     fi
14368             fi
14369         ;;
14370     esac
14371 fi
14372 : check for fflush NULL behaviour
14373 case "$fflushNULL" in
14374 '')     set try -DTRY_FFLUSH_NULL $output
14375         if eval $compile; then
14376                 $run ./try 2>/dev/null
14377                 code="$?"
14378                 $from try.out
14379                 if $test -s try.out -a "X$code" = X42; then
14380                         fflushNULL="`$cat try.out`"
14381                 else
14382                         if $test "X$code" != X42; then
14383                                 $cat >&4 <<EOM
14384 (If this test failed, don't worry, we'll try another method shortly.)
14385 EOM
14386                         fi
14387                 fi
14388         fi
14389         $rm -f core try.core core.try.*
14390         case "$fflushNULL" in
14391         x)      $cat >&4 <<EOM
14392 Your fflush(NULL) works okay for output streams.
14393 Let's see if it clobbers input pipes...
14394 EOM
14395 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14396 # bug that improperly flushes the input end of pipes.  So we avoid the
14397 # autoflush on fork/system/exec support for now. :-(
14398 $cat >tryp.c <<EOCP
14399 #include <stdio.h>
14400 int
14401 main(int argc, char **argv)
14402 {
14403     char buf[1024];
14404     int i;
14405     char *bp = buf;
14406     while (1) {
14407         while ((i = getc(stdin)) != -1
14408                && (*bp++ = i) != '\n'
14409                && bp < &buf[1024])
14410         /* DO NOTHING */ ;
14411         *bp = '\0';
14412         fprintf(stdout, "%s", buf);
14413         fflush(NULL);
14414         if (i == -1)
14415             return 0;
14416         bp = buf;
14417     }
14418 }
14419 EOCP
14420                 fflushNULL="$define"
14421                 set tryp
14422                 if eval $compile; then
14423                     $rm -f tryp.out
14424                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14425                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14426                        $cat >&4 <<EOM
14427 fflush(NULL) seems to behave okay with input streams.
14428 EOM
14429                         fflushNULL="$define"
14430                     else
14431                         $cat >&4 <<EOM
14432 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14433 EOM
14434                         fflushNULL="$undef"
14435                     fi
14436                 fi
14437                 $rm -f core tryp.c tryp.core core.tryp.*
14438                 ;;
14439         '')     $cat >&4 <<EOM
14440 Your fflush(NULL) isn't working (contrary to ANSI C).
14441 EOM
14442                 fflushNULL="$undef"
14443                 ;;
14444         *)      $cat >&4 <<EOM
14445 Cannot figure out whether your fflush(NULL) works or not.
14446 I'm assuming it doesn't (contrary to ANSI C).
14447 EOM
14448                 fflushNULL="$undef"
14449                 ;;
14450         esac
14451         ;;
14452 $define|true|[yY]*)
14453         fflushNULL="$define"
14454         ;;
14455 *)
14456         fflushNULL="$undef"
14457         ;;
14458 esac
14459 : check explicit looping only if NULL did not work, and if the pipe
14460 : bug does not show up on an explicit flush too
14461 case "$fflushNULL" in
14462 "$undef")
14463         $cat >tryp.c <<EOCP
14464 #include <stdio.h>
14465 int
14466 main(int argc, char **argv)
14467 {
14468     char buf[1024];
14469     int i;
14470     char *bp = buf;
14471     while (1) {
14472         while ((i = getc(stdin)) != -1
14473                && (*bp++ = i) != '\n'
14474                && bp < &buf[1024])
14475         /* DO NOTHING */ ;
14476         *bp = '\0';
14477         fprintf(stdout, "%s", buf);
14478         fflush(stdin);
14479         if (i == -1)
14480             return 0;
14481         bp = buf;
14482     }
14483 }
14484 EOCP
14485         set tryp
14486         if eval $compile; then
14487             $rm -f tryp.out
14488             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14489             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14490                $cat >&4 <<EOM
14491 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14492 EOM
14493                 : now check for fflushall behaviour
14494                 case "$fflushall" in
14495                 '')     set try -DTRY_FFLUSH_ALL $output
14496                         if eval $compile; then
14497                                 $cat >&4 <<EOM
14498 (Now testing the other method--but note that this also may fail.)
14499 EOM
14500                                 $run ./try 2>/dev/null
14501                                 code=$?
14502                                 $from try.out
14503                                 if $test -s try.out -a "X$code" = X42; then
14504                                         fflushall="`$cat try.out`"
14505                                 fi
14506                         fi
14507                         $rm -f core try.core core.try.*
14508                         case "$fflushall" in
14509                         x)      $cat >&4 <<EOM
14510 Whew. Flushing explicitly all the stdio streams works.
14511 EOM
14512                                 fflushall="$define"
14513                                 ;;
14514                         '')     $cat >&4 <<EOM
14515 Sigh. Flushing explicitly all the stdio streams doesn't work.
14516 EOM
14517                                 fflushall="$undef"
14518                                 ;;
14519                         *)      $cat >&4 <<EOM
14520 Cannot figure out whether flushing stdio streams explicitly works or not.
14521 I'm assuming it doesn't.
14522 EOM
14523                                 fflushall="$undef"
14524                                 ;;
14525                         esac
14526                         ;;
14527                 "$define"|true|[yY]*)
14528                         fflushall="$define"
14529                         ;;
14530                 *)
14531                         fflushall="$undef"
14532                         ;;
14533                 esac
14534             else
14535                 $cat >&4 <<EOM
14536 All is futile.  Even fflush(stdin) clobbers input pipes!
14537 EOM
14538                 fflushall="$undef"
14539             fi
14540         else
14541             fflushall="$undef"
14542         fi
14543         $rm -f core tryp.c tryp.core core.tryp.*
14544         ;;
14545 *)      fflushall="$undef"
14546         ;;
14547 esac
14548
14549 case "$fflushNULL$fflushall" in
14550 undefundef)
14551         $cat <<EOM
14552 OK, I give up.  I cannot figure out how to flush pending stdio output.
14553 We won't be flushing handles at all before fork/exec/popen.
14554 EOM
14555         ;;
14556 esac
14557 $rm -f try.* try$exe_ext
14558
14559 : Store the full pathname to the ar program for use in the C program
14560 : Respect a hint or command line value for full_ar.
14561 case "$full_ar" in
14562 '') full_ar=$ar ;;
14563 esac
14564
14565 : Store the full pathname to the sed program for use in the C program
14566 full_sed=$sed
14567
14568 : see what type gids are declared as in the kernel
14569 echo " "
14570 echo "Looking for the type for group ids returned by getgid()."
14571 set gid_t gidtype xxx stdio.h sys/types.h
14572 eval $typedef
14573 case "$gidtype" in
14574 xxx)
14575         xxx=`./findhdr sys/user.h`
14576         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14577         case $1 in
14578         unsigned) dflt="$1 $2" ;;
14579         *) dflt="$1" ;;
14580         esac
14581         ;;
14582 *) dflt="$gidtype";;
14583 esac
14584 case "$gidtype" in
14585 gid_t) echo "gid_t found." ;;
14586 *)      rp="What is the type for group ids returned by getgid()?"
14587         . ./myread
14588         gidtype="$ans"
14589         ;;
14590 esac
14591
14592 echo " "
14593 case "$gidtype" in
14594 *_t) zzz="$gidtype"     ;;
14595 *)   zzz="gid"          ;;
14596 esac
14597 echo "Checking the size of $zzz..." >&4 
14598 cat > try.c <<EOCP
14599 #include <sys/types.h>
14600 #include <stdio.h>
14601 int main() {
14602     printf("%d\n", (int)sizeof($gidtype));
14603     exit(0);
14604 }
14605 EOCP
14606 set try
14607 if eval $compile_ok; then
14608         yyy=`$run ./try`
14609         case "$yyy" in
14610         '')     gidsize=4
14611                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14612                 ;;
14613         *)      gidsize=$yyy
14614                 echo "Your $zzz is $gidsize bytes long."
14615                 ;;
14616         esac
14617 else
14618         gidsize=4
14619         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14620 fi
14621
14622
14623 echo " "
14624 case "$gidtype" in
14625 *_t) zzz="$gidtype"     ;;
14626 *)   zzz="gid"          ;;
14627 esac
14628 echo "Checking the sign of $zzz..." >&4 
14629 cat > try.c <<EOCP
14630 #include <sys/types.h>
14631 #include <stdio.h>
14632 int main() {
14633         $gidtype foo = -1;
14634         if (foo < 0)
14635                 printf("-1\n");
14636         else
14637                 printf("1\n");
14638 }
14639 EOCP
14640 set try
14641 if eval $compile; then
14642         yyy=`$run ./try`
14643         case "$yyy" in
14644         '')     gidsign=1
14645                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14646                 ;;
14647         *)      gidsign=$yyy
14648                 case "$gidsign" in
14649                  1) echo "Your $zzz is unsigned." ;;
14650                 -1) echo "Your $zzz is signed."   ;;
14651                 esac
14652                 ;;
14653         esac
14654 else
14655         gidsign=1
14656         echo "(I can't compile the test program--guessing unsigned.)" >&4
14657 fi
14658
14659
14660 echo " "
14661
14662 if $test X"$quadtype" != X; then
14663
14664 echo "Checking how to print 64-bit integers..." >&4
14665
14666 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14667         $cat >try.c <<'EOCP'
14668 #include <sys/types.h>
14669 #include <stdio.h>
14670 int main() {
14671   int q = 12345678901;
14672   printf("%ld\n", q);
14673 }
14674 EOCP
14675         set try
14676         if eval $compile; then
14677                 yyy=`$run ./try`
14678                 case "$yyy" in
14679                 12345678901)
14680                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14681                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14682                         echo "We will use %d."
14683                         ;;
14684                 esac
14685         fi
14686 fi
14687
14688 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14689         $cat >try.c <<'EOCP'
14690 #include <sys/types.h>
14691 #include <stdio.h>
14692 int main() {
14693   long q = 12345678901;
14694   printf("%ld\n", q);
14695 }
14696 EOCP
14697         set try
14698         if eval $compile; then
14699                 yyy=`$run ./try`
14700                 case "$yyy" in
14701                 12345678901)
14702                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14703                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14704                         echo "We will use %ld."
14705                         ;;
14706                 esac
14707         fi
14708 fi
14709
14710 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14711         $cat >try.c <<'EOCP'
14712 #include <sys/types.h>
14713 #include <inttypes.h>
14714 #include <stdio.h>
14715 int main() {
14716   int64_t q = 12345678901;
14717   printf("%" PRId64 "\n", q);
14718 }
14719 EOCP
14720         set try
14721         if eval $compile; then
14722                 yyy=`$run ./try`
14723                 case "$yyy" in
14724                 12345678901)
14725                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14726                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14727                         echo "We will use the C9X style."
14728                         ;;
14729                 esac
14730         fi
14731 fi
14732
14733 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14734         $cat >try.c <<EOCP
14735 #include <sys/types.h>
14736 #include <stdio.h>
14737 int main() {
14738   $quadtype q = 12345678901;
14739   printf("%Ld\n", q);
14740 }
14741 EOCP
14742         set try
14743         if eval $compile; then
14744                 yyy=`$run ./try`
14745                 case "$yyy" in
14746                 12345678901)
14747                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14748                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14749                         echo "We will use %Ld."
14750                         ;;
14751                 esac
14752         fi
14753 fi
14754
14755 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14756         $cat >try.c <<'EOCP'
14757 #include <sys/types.h>
14758 #include <stdio.h>
14759 int main() {
14760   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14761   printf("%lld\n", q);
14762 }
14763 EOCP
14764         set try
14765         if eval $compile; then
14766                 yyy=`$run ./try`
14767                 case "$yyy" in
14768                 12345678901)
14769                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14770                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14771                         echo "We will use the %lld style."
14772                         ;;
14773                 esac
14774         fi
14775 fi
14776
14777 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14778         $cat >try.c <<EOCP
14779 #include <sys/types.h>
14780 #include <stdio.h>
14781 int main() {
14782   $quadtype q = 12345678901;
14783   printf("%qd\n", q);
14784 }
14785 EOCP
14786         set try
14787         if eval $compile; then
14788                 yyy=`$run ./try`
14789                 case "$yyy" in
14790                 12345678901)
14791                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14792                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14793                         echo "We will use %qd."
14794                         ;;
14795                 esac
14796         fi
14797 fi
14798
14799 if $test X"$sPRId64" = X; then
14800         echo "Cannot figure out how to print 64-bit integers." >&4
14801 fi
14802
14803 $rm -f try try.*
14804
14805 fi
14806
14807 case "$sPRId64" in
14808 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14809         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14810         ;;
14811 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14812         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14813         ;;
14814 esac
14815
14816
14817 echo " "
14818 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14819
14820 if $test X"$ivsize" = X8; then
14821         ivdformat="$sPRId64"
14822         uvuformat="$sPRIu64"
14823         uvoformat="$sPRIo64"
14824         uvxformat="$sPRIx64"
14825         uvXUformat="$sPRIXU64"
14826 else
14827         if $test X"$ivsize" = X"$longsize"; then
14828                 ivdformat='"ld"'
14829                 uvuformat='"lu"'
14830                 uvoformat='"lo"'
14831                 uvxformat='"lx"'
14832                 uvXUformat='"lX"'
14833         else
14834                 if $test X"$ivsize" = X"$intsize"; then
14835                         ivdformat='"d"'
14836                         uvuformat='"u"'
14837                         uvoformat='"o"'
14838                         uvxformat='"x"'
14839                         uvXUformat='"X"'
14840                 else
14841                         : far out
14842                         if $test X"$ivsize" = X"$shortsize"; then
14843                                 ivdformat='"hd"'
14844                                 uvuformat='"hu"'
14845                                 uvoformat='"ho"'
14846                                 uvxformat='"hx"'
14847                                 uvXUformat='"hX"'
14848                         fi
14849                 fi
14850         fi
14851 fi
14852
14853 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14854         nveformat="$sPRIeldbl"
14855         nvfformat="$sPRIfldbl"
14856         nvgformat="$sPRIgldbl"
14857         nvEUformat="$sPRIEUldbl"
14858         nvFUformat="$sPRIFUldbl"
14859         nvGUformat="$sPRIGUldbl"
14860 else
14861         nveformat='"e"'
14862         nvfformat='"f"'
14863         nvgformat='"g"'
14864         nvEUformat='"E"'
14865         nvFUformat='"F"'
14866         nvGUformat='"G"'
14867 fi
14868
14869 case "$ivdformat" in
14870 '') echo "$0: Fatal: failed to find format strings, cannot continue." >&4
14871     exit 1
14872     ;;
14873 esac
14874
14875
14876 echo " "
14877 $echo "Checking the format string to be used for gids..." >&4
14878
14879 case "$gidsign" in
14880 -1)     if $test X"$gidsize" = X"$ivsize"; then
14881                 gidformat="$ivdformat"
14882         else
14883                 if $test X"$gidsize" = X"$longsize"; then
14884                         gidformat='"ld"'
14885                 else
14886                         if $test X"$gidsize" = X"$intsize"; then
14887                                 gidformat='"d"'
14888                         else
14889                                 if $test X"$gidsize" = X"$shortsize"; then
14890                                         gidformat='"hd"'
14891                                 fi
14892                         fi
14893                 fi
14894         fi
14895         ;;
14896 *)      if $test X"$gidsize" = X"$uvsize"; then
14897                 gidformat="$uvuformat"
14898         else
14899                 if $test X"$gidsize" = X"$longsize"; then
14900                         gidformat='"lu"'
14901                 else
14902                         if $test X"$gidsize" = X"$intsize"; then
14903                                 gidformat='"u"'
14904                         else
14905                                 if $test X"$gidsize" = X"$shortsize"; then
14906                                         gidformat='"hu"'
14907                                 fi
14908                         fi
14909                 fi
14910         fi
14911         ;;
14912 esac
14913
14914 : see if getgroups exists
14915 set getgroups d_getgrps
14916 eval $inlibc
14917
14918 : see if setgroups exists
14919 set setgroups d_setgrps
14920 eval $inlibc
14921
14922
14923 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14924 echo " "
14925 case "$d_getgrps$d_setgrps" in
14926 *define*)
14927         case "$groupstype" in
14928         '') dflt="$gidtype" ;;
14929         *)  dflt="$groupstype" ;;
14930         esac
14931         $cat <<EOM
14932 What type of pointer is the second argument to getgroups() and setgroups()?
14933 Usually this is the same as group ids, $gidtype, but not always.
14934
14935 EOM
14936         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14937         . ./myread
14938         groupstype="$ans"
14939         ;;
14940 *)  groupstype="$gidtype";;
14941 esac
14942
14943 echo " "
14944 echo "Checking if your $make program sets \$(MAKE)..." >&4
14945 case "$make_set_make" in
14946 '')
14947         $sed 's/^X //' > testmake.mak << 'EOF'
14948 Xall:
14949 X       @echo 'maketemp="$(MAKE)"'
14950 EOF
14951         case "`$make -f testmake.mak 2>/dev/null`" in
14952         *maketemp=*) make_set_make='#' ;;
14953         *)      make_set_make="MAKE=$make" ;;
14954         esac
14955         $rm -f testmake.mak
14956         ;;
14957 esac
14958 case "$make_set_make" in
14959 '#') echo "Yup, it does.";;
14960 *) echo "Nope, it doesn't.";;
14961 esac
14962
14963 : see what type is used for mode_t
14964 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14965 set mode_t modetype int stdio.h sys/types.h
14966 eval $typedef_ask
14967
14968 : see if stdarg is available
14969 echo " "
14970 if $test `./findhdr stdarg.h`; then
14971         echo "<stdarg.h> found." >&4
14972         valstd="$define"
14973 else
14974         echo "<stdarg.h> NOT found." >&4
14975         valstd="$undef"
14976 fi
14977
14978 : see if varags is available
14979 echo " "
14980 if $test `./findhdr varargs.h`; then
14981         echo "<varargs.h> found." >&4
14982 else
14983         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14984 fi
14985
14986 : set up the varargs testing programs
14987 $cat > varargs.c <<EOP
14988 #ifdef I_STDARG
14989 #include <stdarg.h>
14990 #endif
14991 #ifdef I_VARARGS
14992 #include <varargs.h>
14993 #endif
14994
14995 #ifdef I_STDARG
14996 int f(char *p, ...)
14997 #else
14998 int f(va_alist)
14999 va_dcl
15000 #endif
15001 {
15002         va_list ap;
15003 #ifndef I_STDARG
15004         char *p;
15005 #endif
15006 #ifdef I_STDARG
15007         va_start(ap,p);
15008 #else
15009         va_start(ap);
15010         p = va_arg(ap, char *);
15011 #endif
15012         va_end(ap);
15013 }
15014 EOP
15015 $cat > varargs <<EOP
15016 $startsh
15017 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
15018         echo "true"
15019 else
15020         echo "false"
15021 fi
15022 $rm -f varargs$_o
15023 EOP
15024 chmod +x varargs
15025
15026 : now check which varargs header should be included
15027 echo " "
15028 i_varhdr=''
15029 case "$valstd" in
15030 "$define")
15031         if `./varargs I_STDARG`; then
15032                 val='stdarg.h'
15033         elif `./varargs I_VARARGS`; then
15034                 val='varargs.h'
15035         fi
15036         ;;
15037 *)
15038         if `./varargs I_VARARGS`; then
15039                 val='varargs.h'
15040         fi
15041         ;;
15042 esac
15043 case "$val" in
15044 '')
15045 echo "I could not find the definition for va_dcl... You have problems..." >&4
15046         val="$undef"; set i_stdarg; eval $setvar
15047         val="$undef"; set i_varargs; eval $setvar
15048         ;;
15049 *) 
15050         set i_varhdr
15051         eval $setvar
15052         case "$i_varhdr" in
15053         stdarg.h)
15054                 val="$define"; set i_stdarg; eval $setvar
15055                 val="$undef"; set i_varargs; eval $setvar
15056                 ;;
15057         varargs.h)
15058                 val="$undef"; set i_stdarg; eval $setvar
15059                 val="$define"; set i_varargs; eval $setvar
15060                 ;;
15061         esac
15062         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
15063 esac
15064 $rm -f varargs*
15065
15066 : see if we need va_copy
15067 echo " "
15068 case "$i_stdarg" in
15069 "$define")
15070         $cat >try.c <<EOCP
15071 #include <stdarg.h>
15072 #include <stdio.h>
15073 #$i_stdlib I_STDLIB
15074 #ifdef I_STDLIB
15075 #include <stdlib.h>
15076 #endif
15077 #include <signal.h>
15078
15079 int
15080 ivfprintf(FILE *f, const char *fmt, va_list *valp)
15081 {
15082   return vfprintf(f, fmt, *valp);
15083 }
15084  
15085 int    
15086 myvfprintf(FILE *f, const  char *fmt, va_list val)
15087 {
15088   return ivfprintf(f, fmt, &val);
15089 }
15090       
15091 int
15092 myprintf(char *fmt, ...) 
15093 {
15094   va_list val;
15095   va_start(val, fmt);
15096   return myvfprintf(stdout, fmt, val); 
15097 }         
15098
15099 int
15100 main(int ac, char **av)
15101 {
15102   signal(SIGSEGV, exit);
15103
15104   myprintf("%s%cs all right, then\n", "that", '\'');                            
15105   exit(0);      
15106 }
15107 EOCP
15108         set try
15109         if eval $compile && $run ./try 2>&1 >/dev/null; then
15110                 case "`$run ./try`" in
15111                 "that's all right, then")
15112                         okay=yes
15113                         ;;
15114                 esac
15115         fi
15116         case "$okay" in
15117         yes)    echo "It seems that you don't need va_copy()." >&4
15118                 need_va_copy="$undef"
15119                 ;;
15120         *)      echo "It seems that va_copy() or similar will be needed." >&4
15121                 need_va_copy="$define"
15122                 ;;
15123         esac
15124         $rm -f try.* core core.* *.core *.core.*
15125         ;;
15126 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
15127         ;;
15128 esac
15129
15130 : define a fucntion to check prototypes
15131 $cat > protochk <<EOSH
15132 $startsh
15133 cc="$cc"
15134 optimize="$optimize"
15135 ccflags="$ccflags"
15136 prototype="$prototype"
15137 define="$define"
15138 rm=$rm
15139 EOSH
15140
15141 $cat >> protochk <<'EOSH'
15142
15143 $rm -f try.c
15144 foo="$1"
15145 shift
15146 while test $# -ge 2; do
15147         case "$1" in
15148                 $define) echo "#include <$2>" >> try.c ;;
15149                 literal) echo "$2" >> try.c ;;
15150         esac
15151     shift 2
15152 done
15153 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
15154 cat >> try.c <<'EOCP'
15155 #ifdef CAN_PROTOTYPE
15156 #define _(args) args
15157 #else
15158 #define _(args) ()
15159 #endif
15160 EOCP
15161 echo "$foo" >> try.c
15162 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
15163 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
15164 status=$?
15165 $rm -f try.[co]
15166 exit $status
15167 EOSH
15168 chmod +x protochk
15169 $eunicefix protochk
15170
15171 : see what type is used for size_t
15172 rp="What is the type used for the length parameter for string functions?"
15173 set size_t sizetype 'unsigned int' stdio.h sys/types.h
15174 eval $typedef_ask
15175
15176 : check for type of arguments to gethostbyaddr. 
15177 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
15178         case "$d_gethbyaddr" in
15179         $define)
15180                 $cat <<EOM
15181
15182 Checking to see what type of arguments are accepted by gethostbyaddr().
15183 EOM
15184                 hdrs="$define sys/types.h
15185                         $d_socket sys/socket.h 
15186                         $i_niin netinet/in.h 
15187                         $i_netdb netdb.h
15188                         $i_unistd unistd.h"
15189                 : The first arg can 'char *' or 'void *'
15190                 : The second arg is some of integral type
15191                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
15192                         for yyy in size_t long int; do
15193                                 case "$netdb_host_type" in
15194                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
15195                                         if ./protochk "$try" $hdrs; then
15196                                                 echo "Your system accepts $xxx for the first arg."
15197                                                 echo "...and $yyy for the second arg."
15198                                                 netdb_host_type="$xxx"
15199                                                 netdb_hlen_type="$yyy"
15200                                         fi
15201                                         ;;
15202                                 esac
15203                         done
15204                 done
15205                 : In case none of those worked, prompt the user.
15206                 case "$netdb_host_type" in
15207                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
15208                         dflt='char *'
15209                         . ./myread
15210                         netdb_host_type=$ans
15211                         rp='What is the type for the 2nd argument to gethostbyaddr?'
15212                         dflt="$sizetype"
15213                         . ./myread
15214                         netdb_hlen_type=$ans
15215                         ;;
15216                 esac
15217                 ;;
15218         *)      : no gethostbyaddr, so pick harmless defaults
15219                 netdb_host_type='char *'
15220                 netdb_hlen_type="$sizetype"
15221                 ;;
15222         esac
15223         # Remove the "const" if needed. -- but then we'll have a 
15224         # prototype clash!
15225         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
15226 fi
15227
15228 : check for type of argument to gethostbyname. 
15229 if test "X$netdb_name_type" = X ; then
15230         case "$d_gethbyname" in
15231         $define)
15232                 $cat <<EOM
15233
15234 Checking to see what type of argument is accepted by gethostbyname().
15235 EOM
15236                 hdrs="$define sys/types.h
15237                         $d_socket sys/socket.h 
15238                         $i_niin netinet/in.h 
15239                         $i_netdb netdb.h
15240                         $i_unistd unistd.h"
15241                 for xxx in "const char *" "char *"; do
15242                         case "$netdb_name_type" in
15243                         '')     try="extern struct hostent *gethostbyname($xxx);"
15244                                 if ./protochk "$try" $hdrs; then
15245                                         echo "Your system accepts $xxx."
15246                                         netdb_name_type="$xxx"
15247                                 fi
15248                                 ;;
15249                         esac
15250                 done
15251                 : In case none of those worked, prompt the user.
15252                 case "$netdb_name_type" in
15253                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15254                         dflt='char *'
15255                         . ./myread
15256                         netdb_name_type=$ans
15257                         ;;
15258                 esac
15259                 ;;
15260         *)      : no gethostbyname, so pick harmless default
15261                 netdb_name_type='char *'
15262                 ;;
15263         esac
15264 fi
15265
15266 : check for type of 1st argument to getnetbyaddr. 
15267 if test "X$netdb_net_type" = X ; then
15268         case "$d_getnbyaddr" in
15269         $define)
15270                 $cat <<EOM
15271
15272 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15273 EOM
15274                 hdrs="$define sys/types.h
15275                         $d_socket sys/socket.h 
15276                         $i_niin netinet/in.h 
15277                         $i_netdb netdb.h
15278                         $i_unistd unistd.h"
15279                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15280                         case "$netdb_net_type" in
15281                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15282                                 if ./protochk "$try" $hdrs; then
15283                                         echo "Your system accepts $xxx."
15284                                         netdb_net_type="$xxx"
15285                                 fi
15286                                 ;;
15287                         esac
15288                 done
15289                 : In case none of those worked, prompt the user.
15290                 case "$netdb_net_type" in
15291                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15292                         dflt='long'
15293                         . ./myread
15294                         netdb_net_type=$ans
15295                         ;;
15296                 esac
15297                 ;;
15298         *)      : no getnetbyaddr, so pick harmless default
15299                 netdb_net_type='long'
15300                 ;;
15301         esac
15302 fi
15303 : locate the preferred pager for this system
15304 case "$pager" in
15305 '')
15306         dflt=''
15307         case "$pg" in
15308         /*) dflt=$pg;;
15309         [a-zA-Z]:/*) dflt=$pg;;
15310         esac
15311         case "$more" in
15312         /*) dflt=$more;;
15313         [a-zA-Z]:/*) dflt=$more;;
15314         esac
15315         case "$less" in
15316         /*) dflt=$less;;
15317         [a-zA-Z]:/*) dflt=$less;;
15318         esac
15319         case "$dflt" in
15320         '') dflt=/usr/ucb/more;;
15321         esac
15322         ;;
15323 *) dflt="$pager";;
15324 esac
15325 echo " "
15326 fn=f/
15327 rp='What pager is used on your system?'
15328 . ./getfile
15329 pager="$ans"
15330
15331 : see what type pids are declared as in the kernel
15332 rp="What is the type of process ids on this system?"
15333 set pid_t pidtype int stdio.h sys/types.h
15334 eval $typedef_ask
15335
15336 : Find earliest binary compatible site_perl subdirectory perl can use.
15337 case "$bincompat5005" in
15338 "$define") xs_apiversion='5.005' ;;
15339 *) xs_apiversion=$version ;;   # The current site_perl version.
15340 esac
15341 : Find earliest pure perl site_perl subdirectory perl can use.
15342 : The versioned directories started at 5.005.
15343 pm_apiversion='5.005'
15344
15345 : see if ar generates random libraries by itself
15346 echo " "
15347 echo "Checking how to generate random libraries on your machine..." >&4
15348 echo 'int bar1() { return bar2(); }' > bar1.c
15349 echo 'int bar2() { return 2; }' > bar2.c
15350 $cat > foo.c <<'EOP'
15351 int main() { printf("%d\n", bar1()); exit(0); }
15352 EOP
15353 $cc $ccflags -c bar1.c >/dev/null 2>&1
15354 $cc $ccflags -c bar2.c >/dev/null 2>&1
15355 $cc $ccflags -c foo.c >/dev/null 2>&1
15356 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15357 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15358         $run ./foobar >/dev/null 2>&1; then
15359         echo "$ar appears to generate random libraries itself."
15360         orderlib=false
15361         ranlib=":"
15362 elif $ar ts bar$_a >/dev/null 2>&1 &&
15363         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15364         $run ./foobar >/dev/null 2>&1; then
15365                 echo "a table of contents needs to be added with '$ar ts'."
15366                 orderlib=false
15367                 ranlib="$ar ts"
15368 else
15369         case "$ranlib" in
15370         :) ranlib='';;
15371         '')
15372                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15373                 $test -f $ranlib || ranlib=''
15374                 ;;
15375         esac
15376         if $test -n "$ranlib"; then
15377                 echo "your system has '$ranlib'; we'll use that."
15378                 orderlib=false
15379         else
15380                 echo "your system doesn't seem to support random libraries"
15381                 echo "so we'll use lorder and tsort to order the libraries."
15382                 orderlib=true
15383                 ranlib=":"
15384         fi
15385 fi
15386 $rm -f foo* bar* 
15387
15388 : check for type of arguments to select. 
15389 case "$selecttype" in
15390 '') case "$d_select" in
15391         $define)
15392                 echo " "
15393                 $cat <<EOM
15394 Checking to see what type of arguments are accepted by select().
15395 EOM
15396                 hdrs="$define sys/types.h
15397                         $i_systime sys/time.h 
15398                         $i_sysselct sys/select.h
15399                         $d_socket sys/socket.h"
15400                 : The first arg can be int, unsigned, or size_t
15401                 : The last arg may or may not be 'const'
15402                 val=''
15403                 : void pointer has been seen but using that
15404                 : breaks the selectminbits test
15405                 for xxx in 'fd_set *' 'int *'; do
15406                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15407                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15408                                         case "$val" in
15409                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15410                                                 if ./protochk "$try" $hdrs; then
15411                                                         echo "Your system accepts $xxx."
15412                                                         val="$xxx"
15413                                                 fi
15414                                                 ;;
15415                                         esac
15416                                 done
15417                         done
15418                 done
15419                 case "$val" in
15420                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15421                         case "$d_fd_set" in
15422                                 $define) dflt="fd_set *" ;;
15423                                 *)              dflt="int *" ;;
15424                         esac
15425                         . ./myread
15426                         val=$ans
15427                         ;;
15428                 esac
15429                 selecttype="$val"
15430                 ;;
15431         *)      : no select, so pick a harmless default
15432                 selecttype='int *'
15433                 ;;
15434         esac
15435         ;;
15436 esac
15437
15438 : check for the select 'width'
15439 case "$selectminbits" in
15440 '') case "$d_select" in
15441         $define)
15442                 $cat <<EOM
15443
15444 Checking to see on how many bits at a time your select() operates...
15445 EOM
15446                 $cat >try.c <<EOCP
15447 #include <sys/types.h>
15448 #$i_time I_TIME
15449 #$i_systime I_SYS_TIME
15450 #$i_systimek I_SYS_TIME_KERNEL
15451 #ifdef I_TIME
15452 #   include <time.h>
15453 #endif
15454 #ifdef I_SYS_TIME
15455 #   ifdef I_SYS_TIME_KERNEL
15456 #       define KERNEL
15457 #   endif
15458 #   include <sys/time.h>
15459 #   ifdef I_SYS_TIME_KERNEL
15460 #       undef KERNEL
15461 #   endif
15462 #endif
15463 #$i_sysselct I_SYS_SELECT
15464 #ifdef I_SYS_SELECT
15465 #include <sys/select.h>
15466 #endif
15467 #$d_socket HAS_SOCKET
15468 #ifdef HAS_SOCKET
15469 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15470 #endif
15471 #include <stdio.h>
15472 $selecttype b;
15473 #define S sizeof(*(b))
15474 #define MINBITS 64
15475 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15476 #define NBITS  (NBYTES * 8)
15477 int main() {
15478     char s[NBYTES];
15479     struct timeval t;
15480     int i;
15481     FILE* fp;
15482     int fd;
15483
15484     fclose(stdin);
15485     fp = fopen("try.c", "r");
15486     if (fp == 0)
15487       exit(1);
15488     fd = fileno(fp);
15489     if (fd < 0)
15490       exit(2);
15491     b = ($selecttype)s;
15492     for (i = 0; i < NBITS; i++)
15493         FD_SET(i, b);
15494     t.tv_sec  = 0;
15495     t.tv_usec = 0;
15496     select(fd + 1, b, 0, 0, &t);
15497     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15498     printf("%d\n", i + 1);
15499     return 0;
15500 }
15501 EOCP
15502                 set try
15503                 if eval $compile_ok; then
15504                         selectminbits=`$run ./try`
15505                         case "$selectminbits" in
15506                         '')     cat >&4 <<EOM
15507 Cannot figure out on how many bits at a time your select() operates.
15508 I'll play safe and guess it is 32 bits.
15509 EOM
15510                                 selectminbits=32
15511                                 bits="32 bits"
15512                                 ;;
15513                         1)      bits="1 bit" ;;
15514                         *)      bits="$selectminbits bits" ;;
15515                         esac
15516                         echo "Your select() operates on $bits at a time." >&4
15517                 else
15518                         rp='What is the minimum number of bits your select() operates on?'
15519                         case "$byteorder" in
15520                         1234|12345678)  dflt=32 ;;
15521                         *)              dflt=1  ;;
15522                         esac
15523                         . ./myread
15524                         val=$ans
15525                         selectminbits="$val"
15526                 fi
15527                 $rm -f try.* try
15528                 ;;
15529         *)      : no select, so pick a harmless default
15530                 selectminbits='32'
15531                 ;;
15532         esac
15533         ;;
15534 esac
15535
15536 : Trace out the files included by signal.h, then look for SIGxxx names.
15537 : Remove SIGARRAYSIZE used by HPUX.
15538 : Remove SIGSTKSIZE used by Linux.
15539 : Remove SIGSTKSZ used by Posix.
15540 : Remove SIGTYP void lines used by OS2.
15541 : Some cpps, like os390, dont give the file name anywhere
15542 if [ "X$fieldn" = X ]; then
15543         : Just make some guesses.  We check them later.
15544         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15545 else
15546         xxx=`echo '#include <signal.h>' |
15547         $cppstdin $cppminus $cppflags 2>/dev/null |
15548         $grep '^[       ]*#.*include' | 
15549         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15550 fi
15551 : Check this list of files to be sure we have parsed the cpp output ok.
15552 : This will also avoid potentially non-existent files, such 
15553 : as ../foo/bar.h
15554 xxxfiles=''
15555 for xx in $xxx /dev/null ; do
15556         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15557 done
15558 : If we have found no files, at least try signal.h
15559 case "$xxxfiles" in
15560 '')     xxxfiles=`./findhdr signal.h` ;;
15561 esac
15562 xxx=`awk '
15563 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15564         print substr($2, 4, 20)
15565 }
15566 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15567         print substr($3, 4, 20)
15568 }' $xxxfiles`
15569 : Append some common names just in case the awk scan failed.
15570 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15571 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15572 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15573 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15574 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15575
15576 : generate a few handy files for later
15577 $cat > signal.c <<'EOCP'
15578 #include <sys/types.h>
15579 #include <signal.h>
15580 #include <stdio.h>
15581 int main() {
15582
15583 /* Strange style to avoid deeply-nested #if/#else/#endif */
15584 #ifndef NSIG
15585 #  ifdef _NSIG
15586 #    define NSIG (_NSIG)
15587 #  endif
15588 #endif
15589
15590 #ifndef NSIG
15591 #  ifdef SIGMAX
15592 #    define NSIG (SIGMAX+1)
15593 #  endif
15594 #endif
15595
15596 #ifndef NSIG
15597 #  ifdef SIG_MAX
15598 #    define NSIG (SIG_MAX+1)
15599 #  endif
15600 #endif
15601
15602 #ifndef NSIG
15603 #  ifdef MAXSIG
15604 #    define NSIG (MAXSIG+1)
15605 #  endif
15606 #endif
15607
15608 #ifndef NSIG
15609 #  ifdef MAX_SIG
15610 #    define NSIG (MAX_SIG+1)
15611 #  endif
15612 #endif
15613
15614 #ifndef NSIG
15615 #  ifdef SIGARRAYSIZE
15616 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15617 #  endif
15618 #endif
15619
15620 #ifndef NSIG
15621 #  ifdef _sys_nsig
15622 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15623 #  endif
15624 #endif
15625
15626 /* Default to some arbitrary number that's big enough to get most
15627    of the common signals.
15628 */
15629 #ifndef NSIG
15630 #    define NSIG 50
15631 #endif
15632
15633 printf("NSIG %d\n", NSIG);
15634
15635 #ifndef JUST_NSIG
15636
15637 EOCP
15638
15639 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15640 {
15641         printf "#ifdef SIG"; printf $1; printf "\n"
15642         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15643         printf $1; printf ");\n"
15644         printf "#endif\n"
15645 }
15646 END {
15647         printf "#endif /* JUST_NSIG */\n";
15648         printf "exit(0);\n}\n";
15649 }
15650 ' >>signal.c
15651 $cat >signal.awk <<'EOP'
15652 BEGIN { ndups = 0 }
15653 $1 ~ /^NSIG$/ { nsig = $2 }
15654 ($1 !~ /^NSIG$/) && (NF == 2) {
15655     if ($2 > maxsig) { maxsig = $2 }
15656     if (sig_name[$2]) {
15657         dup_name[ndups] = $1
15658         dup_num[ndups] = $2
15659         ndups++ 
15660     }
15661     else {
15662         sig_name[$2] = $1
15663         sig_num[$2] = $2
15664     }
15665 }
15666 END { 
15667     if (nsig == 0) {
15668         nsig = maxsig + 1
15669     }
15670     printf("NSIG %d\n", nsig);
15671     for (n = 1; n < nsig; n++) {
15672         if (sig_name[n]) {
15673             printf("%s %d\n", sig_name[n], sig_num[n])
15674         }
15675         else {
15676             printf("NUM%d %d\n", n, n) 
15677         }
15678     }
15679     for (n = 0; n < ndups; n++) {
15680         printf("%s %d\n", dup_name[n], dup_num[n])
15681     }
15682 }
15683 EOP
15684 $cat >signal_cmd <<EOS
15685 $startsh
15686 if $test -s signal.lst; then
15687     echo "Using your existing signal.lst file"
15688         exit 0
15689 fi
15690 xxx="$xxx"
15691 EOS
15692 $cat >>signal_cmd <<'EOS'
15693
15694 set signal
15695 if eval $compile_ok; then
15696         $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | $uniq | $awk -f signal.awk >signal.lst
15697 else
15698         echo "(I can't seem be able to compile the whole test program)" >&4
15699         echo "(I'll try it in little pieces.)" >&4
15700         set signal -DJUST_NSIG
15701         if eval $compile_ok; then
15702                 $run ./signal$_exe > signal.nsg
15703                 $cat signal.nsg
15704         else
15705                 echo "I can't seem to figure out how many signals you have." >&4
15706                 echo "Guessing 50." >&4
15707                 echo 'NSIG 50' > signal.nsg
15708         fi
15709         : Now look at all the signal names, one at a time.
15710         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15711                 $cat > signal.c <<EOCP
15712 #include <sys/types.h>
15713 #include <signal.h>
15714 #include <stdio.h>
15715 int main() {
15716 printf("$xx %d\n", SIG${xx});
15717 return 0;
15718 }
15719 EOCP
15720                 set signal
15721                 if eval $compile; then
15722                         echo "SIG${xx} found."
15723                         $run ./signal$_exe  >> signal.ls1
15724                 else
15725                         echo "SIG${xx} NOT found."
15726                 fi
15727         done
15728         if $test -s signal.ls1; then
15729                 $cat signal.nsg signal.ls1 |
15730                         $sort -n | $uniq | $awk -f signal.awk >signal.lst
15731         fi
15732
15733 fi
15734 if $test -s signal.lst; then
15735         :
15736 else
15737         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15738         echo 'kill -l' >signal
15739         set X `csh -f <signal`
15740         $rm -f signal
15741         shift
15742         case $# in
15743         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15744         esac
15745         echo $@ | $tr ' ' $trnl | \
15746             $awk '{ printf "%s %d\n", $1, ++s; }
15747                   END { printf "NSIG %d\n", ++s }' >signal.lst
15748 fi
15749 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15750 EOS
15751 chmod a+x signal_cmd
15752 $eunicefix signal_cmd
15753
15754 : generate list of signal names
15755 echo " "
15756 case "$sig_name_init" in
15757 '') doinit=yes ;;
15758 *)  case "$sig_num_init" in
15759     ''|*,*) doinit=yes ;;
15760     esac ;;
15761 esac
15762 case "$doinit" in
15763 yes)
15764         echo "Generating a list of signal names and numbers..." >&4
15765         . ./signal_cmd
15766         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15767         sig_name=`$awk 'BEGIN { printf "ZERO " }
15768                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15769         sig_num=`$awk  'BEGIN { printf "0 " }
15770                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15771         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15772                              !/^NSIG/   { printf "\"%s\", ", $1 }
15773                              END        { printf "0\n" }' signal.lst`
15774         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15775                              !/^NSIG/   { printf "%d, ", $2}
15776                              END        { printf "0\n"}' signal.lst`
15777         ;;
15778 esac
15779 echo "The following $sig_count signals are available:"
15780 echo " "
15781 echo $sig_name | $awk \
15782 'BEGIN { linelen = 0 }
15783 {
15784         for (i = 1; i <= NF; i++) {
15785                 name = "SIG" $i " "
15786                 linelen = linelen + length(name)
15787                 if (linelen > 70) {
15788                         printf "\n"
15789                         linelen = length(name)
15790                 }
15791                 printf "%s", name
15792         }
15793         printf "\n"
15794 }'
15795 sig_size=`echo $sig_name | awk '{print NF}'`
15796 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15797
15798 echo " "
15799 case "$sizetype" in
15800 *_t) zzz="$sizetype"    ;;
15801 *)   zzz="filesize"     ;;
15802 esac
15803 echo "Checking the size of $zzz..." >&4 
15804 cat > try.c <<EOCP
15805 #include <sys/types.h>
15806 #include <stdio.h>
15807 int main() {
15808     printf("%d\n", (int)sizeof($sizetype));
15809     exit(0);
15810 }
15811 EOCP
15812 set try
15813 if eval $compile_ok; then
15814         yyy=`$run ./try`
15815         case "$yyy" in
15816         '')     sizesize=4
15817                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15818                 ;;
15819         *)      sizesize=$yyy
15820                 echo "Your $zzz size is $sizesize bytes."
15821                 ;;
15822         esac
15823 else
15824         sizesize=4
15825         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15826 fi
15827
15828
15829 : check for socklen_t
15830 echo " "
15831 echo "Checking to see if you have socklen_t..." >&4
15832 $cat >try.c <<EOCP
15833 #include <sys/types.h>
15834 #$d_socket HAS_SOCKET
15835 #ifdef HAS_SOCKET
15836 #include <sys/socket.h>
15837 #endif
15838 int main() { socklen_t x = 16; }
15839 EOCP
15840 set try
15841 if eval $compile; then
15842         val="$define"
15843         echo "You have socklen_t."
15844 else
15845         val="$undef"
15846         echo "You do not have socklen_t."
15847         case "$sizetype" in
15848         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15849         esac
15850 fi
15851 $rm -f try try.*
15852 set d_socklen_t
15853 eval $setvar
15854
15855 : see if this is a socks.h system
15856 set socks.h i_socks
15857 eval $inhdr
15858
15859 : check for type of the size argument to socket calls
15860 case "$d_socket" in
15861 "$define")
15862         $cat <<EOM
15863
15864 Checking to see what type is the last argument of accept().
15865 EOM
15866         yyy=''
15867         case "$d_socklen_t" in
15868         "$define") yyy="$yyy socklen_t"
15869         esac
15870         yyy="$yyy $sizetype int long unsigned"
15871         for xxx in $yyy; do
15872                 case "$socksizetype" in
15873                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15874                         case "$usesocks" in
15875                         "$define")
15876                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15877                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15878                                         socksizetype="$xxx"
15879                                 fi
15880                                 ;;
15881                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15882                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15883                                         socksizetype="$xxx"
15884                                 fi
15885                                 ;;
15886                         esac
15887                         ;;
15888                 esac
15889         done
15890 : In case none of those worked, prompt the user.
15891         case "$socksizetype" in
15892         '')     rp='What is the type for socket address structure sizes?'
15893                 dflt='int'
15894                 . ./myread
15895                 socksizetype=$ans
15896                 ;;
15897         esac
15898         ;;
15899 *)      : no sockets, so pick relatively harmless default
15900         socksizetype='int'
15901         ;;
15902 esac
15903
15904 : see what type is used for signed size_t
15905 set ssize_t ssizetype int stdio.h sys/types.h
15906 eval $typedef
15907 dflt="$ssizetype"
15908 $cat > try.c <<EOM
15909 #include <stdio.h>
15910 #include <sys/types.h>
15911 #define Size_t $sizetype
15912 #define SSize_t $dflt
15913 int main()
15914 {
15915         if (sizeof(Size_t) == sizeof(SSize_t))
15916                 printf("$dflt\n");
15917         else if (sizeof(Size_t) == sizeof(int))
15918                 printf("int\n");
15919         else 
15920                 printf("long\n");
15921         exit(0);
15922 }
15923 EOM
15924 echo " "
15925 set try
15926 if eval $compile_ok && $run ./try > /dev/null; then
15927         ssizetype=`$run ./try`
15928         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15929 else
15930         $cat >&4 <<EOM
15931 Help! I can't compile and run the ssize_t test program: please enlighten me!
15932 (This is probably a misconfiguration in your system or libraries, and
15933 you really ought to fix it.  Still, I'll try anyway.)
15934
15935 I need a type that is the same size as $sizetype, but is guaranteed to
15936 be signed.  Common values are ssize_t, int and long.
15937
15938 EOM
15939         rp="What signed type is the same size as $sizetype?"
15940         . ./myread
15941         ssizetype="$ans"
15942 fi
15943 $rm -f try try.*
15944
15945 : see what type of char stdio uses.
15946 echo " "
15947 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15948 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15949         echo "Your stdio uses unsigned chars." >&4
15950         stdchar="unsigned char"
15951 else
15952         echo "Your stdio uses signed chars." >&4
15953         stdchar="char"
15954 fi
15955 $rm -f stdioh
15956
15957
15958
15959 : see if time exists
15960 echo " "
15961 if test "X$d_time" = X -o X"$timetype" = X; then
15962     if set time val -f d_time; eval $csym; $val; then
15963                 echo 'time() found.' >&4
15964                 val="$define"
15965                 rp="What is the type returned by time() on this system?"
15966                 set time_t timetype long stdio.h sys/types.h
15967                 eval $typedef_ask
15968     else
15969                 echo 'time() not found, hope that will do.' >&4
15970                 val="$undef"
15971                 timetype='int';
15972     fi
15973     set d_time
15974     eval $setvar
15975 fi
15976
15977 : see what type uids are declared as in the kernel
15978 echo " "
15979 echo "Looking for the type for user ids returned by getuid()."
15980 set uid_t uidtype xxx stdio.h sys/types.h
15981 eval $typedef
15982 case "$uidtype" in
15983 xxx)
15984         xxx=`./findhdr sys/user.h`
15985         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15986         case $1 in
15987         unsigned) dflt="$1 $2" ;;
15988         *) dflt="$1" ;;
15989         esac
15990         ;;
15991 *) dflt="$uidtype";;
15992 esac
15993 case "$uidtype" in
15994 uid_t)  echo "uid_t found." ;;
15995 *)      rp="What is the type for user ids returned by getuid()?"
15996         . ./myread
15997         uidtype="$ans"
15998         ;;
15999 esac
16000
16001 echo " "
16002 case "$uidtype" in
16003 *_t) zzz="$uidtype"     ;;
16004 *)   zzz="uid"          ;;
16005 esac
16006 echo "Checking the size of $zzz..." >&4 
16007 cat > try.c <<EOCP
16008 #include <sys/types.h>
16009 #include <stdio.h>
16010 int main() {
16011     printf("%d\n", (int)sizeof($uidtype));
16012     exit(0);
16013 }
16014 EOCP
16015 set try
16016 if eval $compile_ok; then
16017         yyy=`$run ./try`
16018         case "$yyy" in
16019         '')     uidsize=4
16020                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
16021                 ;;
16022         *)      uidsize=$yyy
16023                 echo "Your $zzz is $uidsize bytes long."
16024                 ;;
16025         esac
16026 else
16027         uidsize=4
16028         echo "(I can't compile the test program--guessing $uidsize.)" >&4
16029 fi
16030
16031 echo " "
16032 case "$uidtype" in
16033 *_t) zzz="$uidtype"     ;;
16034 *)   zzz="uid"          ;;
16035 esac
16036 echo "Checking the sign of $zzz..." >&4
16037 cat > try.c <<EOCP
16038 #include <sys/types.h>
16039 #include <stdio.h>
16040 int main() {
16041         $uidtype foo = -1;
16042         if (foo < 0)
16043                 printf("-1\n");
16044         else
16045                 printf("1\n");
16046 }
16047 EOCP
16048 set try
16049 if eval $compile; then
16050         yyy=`$run ./try`
16051         case "$yyy" in
16052         '')     uidsign=1
16053                 echo "(I can't execute the test program--guessing unsigned.)" >&4
16054                 ;;
16055         *)      uidsign=$yyy
16056                 case "$uidsign" in
16057                  1) echo "Your $zzz is unsigned." ;;
16058                 -1) echo "Your $zzz is signed."   ;;
16059                 esac
16060                 ;;
16061         esac
16062 else
16063         uidsign=1
16064         echo "(I can't compile the test program--guessing unsigned.)" >&4
16065 fi
16066
16067
16068
16069 echo " "
16070 $echo "Checking the format string to be used for uids..." >&4
16071
16072 case "$uidsign" in
16073 -1)     if $test X"$uidsize" = X"$ivsize"; then
16074                 uidformat="$ivdformat"
16075         else
16076                 if $test X"$uidsize" = X"$longsize"; then
16077                         uidformat='"ld"'
16078                 else
16079                         if $test X"$uidsize" = X"$intsize"; then
16080                                 uidformat='"d"'
16081                         else
16082                                 if $test X"$uidsize" = X"$shortsize"; then
16083                                         uidformat='"hd"'
16084                                 fi
16085                         fi
16086                 fi
16087         fi
16088         ;;
16089 *)      if $test X"$uidsize" = X"$uvsize"; then
16090                 uidformat="$uvuformat"
16091         else
16092                 if $test X"$uidsize" = X"$longsize"; then
16093                         uidformat='"lu"'
16094                 else
16095                         if $test X"$uidsize" = X"$intsize"; then
16096                                 uidformat='"u"'
16097                         else
16098                                 if $test X"$uidsize" = X"$shortsize"; then
16099                                         uidformat='"hu"'
16100                                 fi
16101                         fi
16102                 fi
16103         fi
16104         ;;
16105 esac
16106
16107 : determine compiler compiler
16108 case "$yacc" in
16109 '')
16110         dflt=yacc;;
16111 *)
16112         dflt="$yacc";;
16113 esac
16114 echo " "
16115 comp='yacc'
16116 if $test -f "$byacc$_exe"; then
16117         dflt="$byacc"
16118         comp="byacc or $comp"
16119 fi
16120 if $test -f "$bison$_exe"; then
16121         comp="$comp or bison -y"
16122 fi
16123 rp="Which compiler compiler ($comp) shall I use?"
16124 . ./myread
16125 yacc="$ans"
16126 case "$yacc" in
16127 *bis*)
16128         case "$yacc" in
16129         *-y*) ;;
16130         *)
16131                 yacc="$yacc -y"
16132                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
16133                 ;;
16134         esac
16135         ;;
16136 esac
16137
16138 : see if this is a fp.h system
16139 set fp.h i_fp
16140 eval $inhdr
16141
16142 : see if this is a fp_class.h system
16143 set fp_class.h i_fp_class
16144 eval $inhdr
16145
16146 : see if this is a ieeefp.h system
16147 case "$i_ieeefp" in
16148 '' ) set ieeefp.h i_ieeefp
16149      eval $inhdr
16150      ;;
16151 esac
16152
16153 : see if this is a libutil.h system
16154 set libutil.h i_libutil
16155 eval $inhdr
16156
16157 : see if locale.h is available
16158 set locale.h i_locale
16159 eval $inhdr
16160
16161 : see if mach cthreads are available
16162 if test "X$usethreads" = "X$define"; then
16163         set mach/cthreads.h i_machcthr
16164         eval $inhdr
16165 else
16166         i_machcthr="$undef"
16167 fi
16168
16169
16170
16171 : see if this is a math.h system
16172 set math.h i_math
16173 eval $inhdr
16174
16175 : see if this is a mntent.h system
16176 set mntent.h i_mntent
16177 eval $inhdr
16178
16179 : see if ndbm.h is available
16180 set ndbm.h t_ndbm
16181 eval $inhdr
16182
16183 case "$t_ndbm" in
16184 $undef)
16185     # Some Linux distributions such as RedHat 7.1 put the
16186     # ndbm.h header in /usr/include/gdbm/ndbm.h.
16187     if $test -f /usr/include/gdbm/ndbm.h; then
16188         echo '<gdbm/ndbm.h> found.'
16189         ccflags="$ccflags -I/usr/include/gdbm"
16190         cppflags="$cppflags -I/usr/include/gdbm"
16191         t_ndbm=$define
16192     fi
16193     ;;
16194 esac
16195
16196 case "$t_ndbm" in
16197 $define)
16198         : see if dbm_open exists
16199         set dbm_open d_dbm_open
16200         eval $inlibc
16201         case "$d_dbm_open" in
16202         $undef)
16203                 t_ndbm="$undef"
16204                 echo "We won't be including <ndbm.h>"
16205                 ;;
16206         esac
16207         ;;
16208 esac
16209 val="$t_ndbm"
16210 set i_ndbm
16211 eval $setvar
16212
16213 : see if net/errno.h is available
16214 val=''
16215 set net/errno.h val
16216 eval $inhdr
16217
16218 : Unfortunately, it causes problems on some systems.  Arrgh.
16219 case "$val" in
16220 $define)
16221         cat > try.c <<'EOM'
16222 #include <stdio.h>
16223 #include <errno.h>
16224 #include <net/errno.h>
16225 int func()
16226 {
16227         return ENOTSOCK;
16228 }
16229 EOM
16230         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16231                 echo "We'll be including <net/errno.h>." >&4
16232         else
16233                 echo "We won't be including <net/errno.h>." >&4
16234                 val="$undef"
16235         fi
16236         $rm -f try.* try
16237         ;;
16238 esac
16239 set i_neterrno
16240 eval $setvar
16241
16242 : see if netinet/tcp.h is available
16243 set netinet/tcp.h i_netinettcp
16244 eval $inhdr
16245
16246 : see if this is a poll.h system
16247 set poll.h i_poll
16248 eval $inhdr
16249
16250 : see if this is a prot.h system
16251 set prot.h i_prot
16252 eval $inhdr
16253
16254 echo " "
16255 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16256 $cat <<'EOSH' > Cppsym.know
16257 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16258 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16259 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16260 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16261 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16262 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16263 bull c cadmus clipper CMU COFF COMPILER_VERSION
16264 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16265 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16266 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16267 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16268 GLIBC GLIBC_MINOR
16269 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16270 H3050R H3050RX hbullx20 hcx host_mips
16271 hp200 hp300 hp700 HP700 hp800 hp9000
16272 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16273 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16274 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16275 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16276 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16277 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16278 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16279 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16280 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16281 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16282 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16283 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16284 MATH_HAS_NO_SIDE_EFFECTS
16285 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16286 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16287 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16288 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16289 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16290 NetBSD news1500 news1700 news1800 news1900 news3700
16291 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16292 ns32016 ns32332 ns32k nsc32000
16293 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16294 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16295 pc532 pdp11 PGC PIC plexus PORTAR posix
16296 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16297 POSIX_C_SOURCE POSIX_SOURCE POWER
16298 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16299 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16300 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16301 sony sony_news sonyrisc sparc sparclite spectrum
16302 stardent stdc STDC_EXT stratos sun sun3 sun386
16303 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16304 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16305 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16306 sysV68 sysV88 Tek4132 Tek4300 titan
16307 TM3200 TM5400 TM5600
16308 tower tower32 tower32_200 tower32_600 tower32_700
16309 tower32_800 tower32_850 tss
16310 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16311 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16312 unix UNIX95 UNIX99 unixpc unos
16313 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16314 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16315 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16316 USGr4 USGr4_2
16317 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16318 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16319 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16320 z8000
16321 EOSH
16322 # Maybe put other stuff here too.
16323 cat <<EOSH >>Cppsym.know
16324 $osname
16325 EOSH
16326 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16327 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16328 $cat Cppsym.know > Cppsym.c
16329 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16330 $rm -f Cppsym.a Cppsym.b Cppsym.c
16331 cat <<EOSH > Cppsym
16332 $startsh
16333 if $test \$# -gt 0; then
16334     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16335     if $test -s Cppsym.got; then
16336         $rm -f Cppsym.got
16337         exit 0
16338     fi
16339     $rm -f Cppsym.got
16340     exit 1
16341 else
16342     $tr " " "$trnl" | ./Cppsym.try
16343     exit 0
16344 fi
16345 EOSH
16346 chmod +x Cppsym
16347 $eunicefix Cppsym
16348 cat <<EOSH > Cppsym.try
16349 $startsh
16350 cat <<'EOCP' > try.c
16351 #include <stdio.h>
16352 int main() {
16353 EOCP
16354 $awk \\
16355 EOSH
16356 cat <<'EOSH' >> Cppsym.try
16357 'length($1) > 0 {
16358     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16359     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16360     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16361     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
16362 }'       >> try.c
16363 echo 'return 0;}' >> try.c
16364 EOSH
16365 cat <<EOSH >> Cppsym.try
16366 ccflags="$ccflags"
16367 case "$osname-$gccversion" in
16368 irix-) ccflags="\$ccflags -woff 1178" ;;
16369 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16370 esac
16371 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16372 EOSH
16373 chmod +x Cppsym.try
16374 $eunicefix Cppsym.try
16375 ./Cppsym < Cppsym.know > Cppsym.true
16376 : now check the C compiler for additional symbols
16377 postprocess_cc_v=''
16378 case "$osname" in
16379 aix) postprocess_cc_v="|$tr , ' '" ;;
16380 esac
16381 $cat >ccsym <<EOS
16382 $startsh
16383 $cat >tmp.c <<EOF
16384 extern int foo;
16385 EOF
16386 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16387 do
16388         case "\$i" in
16389         -D*) echo "\$i" | $sed 's/^-D//';;
16390         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16391         esac
16392 done
16393 $rm -f try.c
16394 EOS
16395 postprocess_cc_v=''
16396 chmod +x ccsym
16397 $eunicefix ccsym
16398 ./ccsym > ccsym1.raw
16399 if $test -s ccsym1.raw; then
16400        $sort ccsym1.raw | $uniq >ccsym.raw
16401 else
16402        mv ccsym1.raw ccsym.raw
16403 fi
16404
16405 $awk '/\=/ { print $0; next }
16406         { print $0"=1" }' ccsym.raw >ccsym.list
16407 $awk '/\=/ { print $0; next }
16408         { print $0"=1" }' Cppsym.true >ccsym.true
16409 $comm -13 ccsym.true ccsym.list >ccsym.own
16410 $comm -12 ccsym.true ccsym.list >ccsym.com
16411 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16412 also=''
16413 if $test -z ccsym.raw; then
16414         echo "Your C compiler doesn't seem to define any symbols!" >&4
16415         echo " "
16416         echo "However, your C preprocessor defines the following symbols:"
16417         $cat Cppsym.true
16418         ccsymbols=''
16419         cppsymbols=`$cat Cppsym.true`
16420         cppsymbols=`echo $cppsymbols`
16421         cppccsymbols="$cppsymbols"
16422 else
16423         if $test -s ccsym.com; then
16424                 echo "Your C compiler and pre-processor define these symbols:"
16425                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16426                 also='also '
16427                 symbols='ones'
16428                 cppccsymbols=`$cat ccsym.com`
16429                 cppccsymbols=`echo $cppccsymbols`
16430                 $test "$silent" || sleep 1
16431         fi
16432         if $test -s ccsym.cpp; then
16433                 $test "$also" && echo " "
16434                 echo "Your C pre-processor ${also}defines the following symbols:"
16435                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16436                 also='further '
16437                 cppsymbols=`$cat ccsym.cpp`
16438                 cppsymbols=`echo $cppsymbols`
16439                 $test "$silent" || sleep 1
16440         fi
16441         if $test -s ccsym.own; then
16442                 $test "$also" && echo " "
16443                 echo "Your C compiler ${also}defines the following cpp symbols:"
16444                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16445                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16446                 ccsymbols=`$cat ccsym.own`
16447                 ccsymbols=`echo $ccsymbols`
16448                 $test "$silent" || sleep 1
16449         fi
16450 fi
16451
16452 : see if this is a termio system
16453 val="$undef"
16454 val2="$undef"
16455 val3="$undef"
16456 if $test `./findhdr termios.h`; then
16457         set tcsetattr i_termios
16458         eval $inlibc
16459         val3="$i_termios"
16460 fi
16461 echo " "
16462 case "$val3" in
16463 "$define") echo "You have POSIX termios.h... good!" >&4;;
16464 *) if ./Cppsym pyr; then
16465                 case "`/bin/universe`" in
16466                 ucb) if $test `./findhdr sgtty.h`; then
16467                                 val2="$define"
16468                                 echo "<sgtty.h> found." >&4
16469                         else
16470                                 echo "System is pyramid with BSD universe."
16471                                 echo "<sgtty.h> not found--you could have problems." >&4
16472                         fi;;
16473                 *) if $test `./findhdr termio.h`; then
16474                                 val="$define"
16475                                 echo "<termio.h> found." >&4
16476                         else
16477                                 echo "System is pyramid with USG universe."
16478                                 echo "<termio.h> not found--you could have problems." >&4
16479                         fi;;
16480                 esac
16481         elif ./usg; then
16482                 if $test `./findhdr termio.h`; then
16483                         echo "<termio.h> found." >&4
16484                         val="$define"
16485                 elif $test `./findhdr sgtty.h`; then
16486                         echo "<sgtty.h> found." >&4
16487                         val2="$define"
16488                 else
16489 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16490                 fi
16491         else
16492                 if $test `./findhdr sgtty.h`; then
16493                         echo "<sgtty.h> found." >&4
16494                         val2="$define"
16495                 elif $test `./findhdr termio.h`; then
16496                         echo "<termio.h> found." >&4
16497                         val="$define"
16498                 else
16499 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16500                 fi
16501         fi;;
16502 esac
16503 set i_termio; eval $setvar
16504 val=$val2; set i_sgtty; eval $setvar
16505 val=$val3; set i_termios; eval $setvar
16506
16507 : see if this is a shadow.h system
16508 set shadow.h i_shadow
16509 eval $inhdr
16510
16511 : see if stddef is available
16512 set stddef.h i_stddef
16513 eval $inhdr
16514
16515 : see if this is a sunmath.h system
16516 set sunmath.h i_sunmath
16517 eval $inhdr
16518
16519 : see if sys/access.h is available
16520 set sys/access.h i_sysaccess
16521 eval $inhdr
16522
16523 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16524 set sys/filio.h i_sysfilio
16525 eval $inhdr
16526 echo " "
16527 if $test `./findhdr sys/ioctl.h`; then
16528         val="$define"
16529         echo '<sys/ioctl.h> found.' >&4
16530 else
16531         val="$undef"
16532         if $test $i_sysfilio = "$define"; then
16533             echo '<sys/ioctl.h> NOT found.' >&4
16534         else
16535                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16536                 $test $i_termio = "$define" && xxx="termio.h"
16537                 $test $i_termios = "$define" && xxx="termios.h"
16538 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16539         fi
16540 fi
16541 set i_sysioctl
16542 eval $setvar
16543
16544 : see if socket ioctl defs are in sys/sockio.h
16545 echo " "
16546 xxx=`./findhdr sys/sockio.h`
16547 if $test "$xxx"; then
16548         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16549                 val="$define"
16550                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16551         else
16552                 val="$undef"
16553                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16554         fi
16555 else
16556         val="$undef"
16557         $cat <<EOM
16558 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16559 EOM
16560 fi
16561 set i_syssockio
16562 eval $setvar
16563
16564
16565 : see if this is a syslog.h system
16566 set syslog.h i_syslog
16567 eval $inhdr
16568
16569
16570 : see if this is a sys/mode.h system
16571 set sys/mode.h i_sysmode
16572 eval $inhdr
16573
16574 : see if sys/resource.h has to be included
16575 set sys/resource.h i_sysresrc
16576 eval $inhdr
16577
16578 : see if sys/security.h is available
16579 set sys/security.h i_syssecrt
16580 eval $inhdr
16581
16582 : see if this is a sys/statvfs.h system
16583 set sys/statvfs.h i_sysstatvfs
16584 eval $inhdr
16585
16586 : see if this is a sys/un.h system
16587 set sys/un.h i_sysun
16588 eval $inhdr
16589
16590
16591 : see if this is a sys/utsname.h system
16592 set sys/utsname.h i_sysutsname
16593 eval $inhdr
16594
16595 : see if this is a syswait system
16596 set sys/wait.h i_syswait
16597 eval $inhdr
16598
16599 : see if this is a ustat.h system
16600 set ustat.h i_ustat
16601 eval $inhdr
16602
16603 : see if this is an utime system
16604 set utime.h i_utime
16605 eval $inhdr
16606
16607 : see if this is a values.h system
16608 set values.h i_values
16609 eval $inhdr
16610
16611 : see if this is a vfork system
16612 case "$d_vfork" in
16613 "$define")
16614         set vfork.h i_vfork
16615         eval $inhdr
16616         ;;
16617 *)
16618         i_vfork="$undef"
16619         ;;
16620 esac
16621
16622 : see if gdbm.h is available
16623 set gdbm.h t_gdbm
16624 eval $inhdr
16625 case "$t_gdbm" in
16626 $define)
16627         : see if gdbm_open exists
16628         set gdbm_open d_gdbm_open
16629         eval $inlibc
16630         case "$d_gdbm_open" in
16631         $undef)
16632                 t_gdbm="$undef"
16633                 echo "We won't be including <gdbm.h>"
16634                 ;;
16635         esac
16636         ;;
16637 esac
16638 val="$t_gdbm"
16639 set i_gdbm
16640 eval $setvar
16641
16642 echo " "
16643 echo "Looking for extensions..." >&4
16644 : If we are using the old config.sh, known_extensions may contain
16645 : old or inaccurate or duplicate values.
16646 known_extensions=''
16647 nonxs_extensions=''
16648 : We do not use find because it might not be available.
16649 : We do not just use MANIFEST because the user may have dropped
16650 : some additional extensions into the source tree and expect them
16651 : to be built.
16652
16653 : Function to recursively find available extensions, ignoring DynaLoader
16654 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16655 find_extensions='
16656     for xxx in *; do
16657        case "$xxx" in
16658            DynaLoader|dynaload) ;;
16659            *)
16660            if $test -f $xxx/$xxx.xs; then
16661                known_extensions="$known_extensions $1$xxx";
16662            elif $test -f $xxx/Makefile.PL; then
16663                nonxs_extensions="$nonxs_extensions $1$xxx";
16664            else
16665                if $test -d $xxx -a $# -lt 10; then
16666                    set $1$xxx/ $*;
16667                    cd "$xxx";
16668                    eval $find_extensions;
16669                    cd ..;
16670                    shift;
16671                fi;
16672            fi
16673            ;;
16674        esac;
16675     done'
16676 tdir=`pwd`
16677 cd "$rsrc/ext"
16678 set X
16679 shift
16680 eval $find_extensions
16681 # Special case:  Add in threads/shared since it is not picked up by the
16682 # recursive find above (and adding in general recursive finding breaks
16683 # SDBM_File/sdbm).  A.D.  10/25/2001.
16684 # Encode::JP needs an explicit mention for the same reason
16685 # --jhi 2002-02-23
16686 known_extensions="$known_extensions threads/shared Encode/JP"
16687 set X $nonxs_extensions
16688 shift
16689 nonxs_extensions="$*"
16690 set X $known_extensions
16691 shift
16692 known_extensions="$*"
16693 cd "$tdir"
16694
16695 : Now see which are supported on this system.
16696 avail_ext=''
16697 for xxx in $known_extensions ; do
16698         case "$xxx" in
16699         DB_File|db_file)
16700                 case "$i_db" in
16701                 $define) avail_ext="$avail_ext $xxx" ;;
16702                 esac
16703                 ;;
16704         GDBM_File|gdbm_fil)
16705                 case "$i_gdbm" in 
16706                 $define) avail_ext="$avail_ext $xxx" ;;
16707                 esac
16708                 ;;
16709         I18N/Langinfo|i18n_lan)
16710                 case "$i_langinfo$d_nl_langinfo" in 
16711                 $define$define) avail_ext="$avail_ext $xxx" ;;
16712                 esac
16713                 ;;
16714         NDBM_File|ndbm_fil)
16715                 case "$i_ndbm" in
16716                 $define)
16717                     case "$osname-$use64bitint" in
16718                     cygwin-*|hpux-define)
16719                         case "$libs" in
16720                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16721                         esac
16722                         ;;
16723                     *) avail_ext="$avail_ext $xxx" ;;
16724                     esac
16725                     ;;
16726                 esac
16727                 ;;
16728         ODBM_File|odbm_fil) 
16729                 case "${i_dbm}${i_rpcsvcdbm}" in
16730                 *"${define}"*)
16731                     case "$osname-$use64bitint" in
16732                     cygwin-*|hpux-define)
16733                         case "$libs" in
16734                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16735                         esac
16736                         ;;
16737                     *) avail_ext="$avail_ext $xxx" ;;
16738                     esac
16739                     ;;
16740                 esac
16741                 ;;
16742         POSIX|posix)
16743                 case "$useposix" in
16744                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16745                 esac
16746                 ;;
16747         Opcode|opcode)
16748                 case "$useopcode" in
16749                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16750                 esac
16751                 ;;
16752         Socket|socket)
16753                 case "$d_socket" in 
16754                 true|$define|y)
16755                     case "$osname" in
16756                     beos) ;; # not unless BONE
16757                     *) avail_ext="$avail_ext $xxx" ;;
16758                     esac
16759                     ;;
16760                 esac
16761                 ;;
16762         Sys/Syslog|sys/syslog)
16763                 : XXX syslog requires socket
16764                 case "$d_socket" in 
16765                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16766                 esac
16767                 ;;
16768         Thread|thread)
16769                 case "$usethreads" in
16770                 true|$define|y)
16771                         case "$useithreads" in
16772                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16773                         esac
16774                 esac
16775                 ;;
16776         threads|threads/shared)
16777                 case "$usethreads" in
16778                 true|$define|y)
16779                         case "$useithreads" in
16780                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16781                         esac
16782                 esac
16783                 ;;
16784         IPC/SysV|ipc/sysv)
16785                 : XXX Do we need a useipcsysv variable here
16786                 case "${d_msg}${d_sem}${d_shm}" in 
16787                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16788                 esac
16789                 ;;
16790         *)      avail_ext="$avail_ext $xxx"
16791                 ;;
16792         esac
16793 done
16794
16795 set X $avail_ext
16796 shift
16797 avail_ext="$*"
16798
16799 : Now see which nonxs extensions are supported on this system.
16800 : For now assume all are.
16801 nonxs_ext=''
16802 for xxx in $nonxs_extensions ; do
16803         case "$xxx" in
16804         *)      nonxs_ext="$nonxs_ext $xxx"
16805                 ;;
16806         esac
16807 done
16808
16809 set X $nonxs_ext
16810 shift
16811 nonxs_ext="$*"
16812
16813 case $usedl in
16814 $define)
16815         $cat <<EOM
16816 A number of extensions are supplied with $package.  You may choose to
16817 compile these extensions for dynamic loading (the default), compile
16818 them into the $package executable (static loading), or not include
16819 them at all.  Answer "none" to include no extensions.
16820 Note that DynaLoader is always built and need not be mentioned here.
16821
16822 EOM
16823         case "$dynamic_ext" in
16824         '') dflt="$avail_ext" ;;
16825         *)      dflt="$dynamic_ext"
16826                 # Perhaps we are reusing an old out-of-date config.sh.
16827                 case "$hint" in
16828                 previous)
16829                         if test X"$dynamic_ext" != X"$avail_ext"; then
16830                                 $cat <<EOM
16831 NOTICE:  Your previous config.sh list may be incorrect. 
16832 The extensions now available to you are 
16833         ${avail_ext}
16834 but the default list from your previous config.sh is
16835         ${dynamic_ext} 
16836
16837 EOM
16838                         fi
16839                         ;;
16840                 esac
16841                 ;;
16842         esac
16843         case "$dflt" in
16844         '')     dflt=none;;
16845         esac
16846         rp="What extensions do you wish to load dynamically?"
16847         . ./myread
16848         case "$ans" in
16849         none) dynamic_ext=' ' ;;
16850         *) dynamic_ext="$ans" ;;
16851         esac
16852
16853         case "$static_ext" in
16854         '')
16855                 : Exclude those already listed in dynamic linking
16856                 dflt=''
16857                 for xxx in $avail_ext; do
16858                         case " $dynamic_ext " in
16859                         *" $xxx "*) ;;
16860                         *) dflt="$dflt $xxx" ;;
16861                         esac
16862                 done
16863                 set X $dflt
16864                 shift
16865                 dflt="$*"
16866                 ;;
16867         *)  dflt="$static_ext" 
16868                 ;;
16869         esac
16870
16871         case "$dflt" in
16872         '')     dflt=none;;
16873         esac
16874         rp="What extensions do you wish to load statically?"
16875         . ./myread
16876         case "$ans" in
16877         none) static_ext=' ' ;;
16878         *) static_ext="$ans" ;;
16879         esac
16880         ;;
16881 *)
16882         $cat <<EOM
16883 A number of extensions are supplied with $package.  Answer "none" 
16884 to include no extensions. 
16885 Note that DynaLoader is always built and need not be mentioned here.
16886
16887 EOM
16888         case "$static_ext" in
16889         '') dflt="$avail_ext" ;;
16890         *)      dflt="$static_ext"
16891                 # Perhaps we are reusing an old out-of-date config.sh.
16892                 case "$hint" in
16893                 previous)
16894                         if test X"$static_ext" != X"$avail_ext"; then
16895                                 $cat <<EOM
16896 NOTICE:  Your previous config.sh list may be incorrect. 
16897 The extensions now available to you are 
16898         ${avail_ext}
16899 but the default list from your previous config.sh is
16900         ${static_ext} 
16901
16902 EOM
16903                         fi
16904                         ;;
16905                 esac
16906                 ;;
16907         esac
16908         : Exclude those that are not xs extensions
16909         case "$dflt" in
16910         '')     dflt=none;;
16911         esac
16912         rp="What extensions do you wish to include?"
16913         . ./myread
16914         case "$ans" in
16915         none) static_ext=' ' ;;
16916         *) static_ext="$ans" ;;
16917         esac
16918         ;;
16919 esac
16920
16921 set X $dynamic_ext $static_ext $nonxs_ext
16922 shift
16923 extensions="$*"
16924
16925 : Remove libraries needed only for extensions
16926 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16927 : The exception is SunOS 4.x, which needs them.
16928 case "${osname}X${osvers}" in
16929 sunos*X4*)
16930     perllibs="$libs"
16931     ;;
16932 *) case "$usedl" in
16933     $define|true|[yY]*)
16934             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16935             shift
16936             perllibs="$*"
16937             ;;
16938     *)  perllibs="$libs"
16939             ;;
16940     esac
16941     ;;
16942 esac
16943
16944 : Remove build directory name from cppstdin so it can be used from
16945 : either the present location or the final installed location.
16946 echo " "
16947 : Get out of the UU directory to get correct path name.
16948 cd ..
16949 case "$cppstdin" in
16950 `pwd`/cppstdin)
16951         echo "Stripping down cppstdin path name"
16952         cppstdin=cppstdin
16953         ;;
16954 esac
16955 cd UU
16956
16957 : end of configuration questions
16958 echo " "
16959 echo "End of configuration questions."
16960 echo " "
16961
16962 : back to where it started
16963 if test -d ../UU; then
16964         cd ..
16965 fi
16966
16967 : configuration may be patched via a 'config.arch' file
16968 if $test -f config.arch; then
16969         echo "I see a config.arch file, loading it."
16970         . ./config.arch
16971 fi
16972
16973 : configuration may be patched via a 'config.over' file
16974 if $test -f config.over; then
16975         echo " "
16976         dflt=y
16977         rp='I see a config.over file.  Do you wish to load it?'
16978         . UU/myread
16979         case "$ans" in
16980         n*) echo "OK, I'll ignore it.";;
16981         *)      . ./config.over
16982                 echo "Configuration override changes have been loaded."
16983                 ;;
16984         esac
16985 fi
16986
16987 : in case they want portability, strip down executable paths
16988 case "$d_portable" in
16989 "$define")
16990         echo " "
16991         echo "Stripping down executable paths..." >&4
16992         for file in $loclist $trylist; do
16993                 eval temp=\$$file
16994                 eval $file=`basename $temp`
16995         done
16996         ;;
16997 esac
16998
16999 : create config.sh file
17000 echo " "
17001 echo "Creating config.sh..." >&4
17002 $spitshell <<EOT >config.sh
17003 $startsh
17004 #
17005 # This file was produced by running the Configure script. It holds all the
17006 # definitions figured out by Configure. Should you modify one of these values,
17007 # do not forget to propagate your changes by running "Configure -der". You may
17008 # instead choose to run each of the .SH files by yourself, or "Configure -S".
17009 #
17010
17011 # Package name      : $package
17012 # Source directory  : $src
17013 # Configuration time: $cf_time
17014 # Configured by     : $cf_by
17015 # Target system     : $myuname
17016
17017 Author='$Author'
17018 Date='$Date'
17019 Header='$Header'
17020 Id='$Id'
17021 Locker='$Locker'
17022 Log='$Log'
17023 Mcc='$Mcc'
17024 RCSfile='$RCSfile'
17025 Revision='$Revision'
17026 Source='$Source'
17027 State='$State'
17028 _a='$_a'
17029 _exe='$_exe'
17030 _o='$_o'
17031 afs='$afs'
17032 afsroot='$afsroot'
17033 alignbytes='$alignbytes'
17034 ansi2knr='$ansi2knr'
17035 aphostname='$aphostname'
17036 api_revision='$api_revision'
17037 api_subversion='$api_subversion'
17038 api_version='$api_version'
17039 api_versionstring='$api_versionstring'
17040 ar='$ar'
17041 archlib='$archlib'
17042 archlibexp='$archlibexp'
17043 archname64='$archname64'
17044 archname='$archname'
17045 archobjs='$archobjs'
17046 awk='$awk'
17047 baserev='$baserev'
17048 bash='$bash'
17049 bin='$bin'
17050 bincompat5005='$bincompat5005'
17051 binexp='$binexp'
17052 bison='$bison'
17053 byacc='$byacc'
17054 byteorder='$byteorder'
17055 c='$c'
17056 castflags='$castflags'
17057 cat='$cat'
17058 cc='$cc'
17059 cccdlflags='$cccdlflags'
17060 ccdlflags='$ccdlflags'
17061 ccflags='$ccflags'
17062 ccflags_uselargefiles='$ccflags_uselargefiles'
17063 ccname='$ccname'
17064 ccsymbols='$ccsymbols'
17065 ccversion='$ccversion'
17066 cf_by='$cf_by'
17067 cf_email='$cf_email'
17068 cf_time='$cf_time'
17069 charsize='$charsize'
17070 chgrp='$chgrp'
17071 chmod='$chmod'
17072 chown='$chown'
17073 clocktype='$clocktype'
17074 comm='$comm'
17075 compress='$compress'
17076 contains='$contains'
17077 cp='$cp'
17078 cpio='$cpio'
17079 cpp='$cpp'
17080 cpp_stuff='$cpp_stuff'
17081 cppccsymbols='$cppccsymbols'
17082 cppflags='$cppflags'
17083 cpplast='$cpplast'
17084 cppminus='$cppminus'
17085 cpprun='$cpprun'
17086 cppstdin='$cppstdin'
17087 cppsymbols='$cppsymbols'
17088 cryptlib='$cryptlib'
17089 csh='$csh'
17090 d_Gconvert='$d_Gconvert'
17091 d_PRIEUldbl='$d_PRIEUldbl'
17092 d_PRIFUldbl='$d_PRIFUldbl'
17093 d_PRIGUldbl='$d_PRIGUldbl'
17094 d_PRIXU64='$d_PRIXU64'
17095 d_PRId64='$d_PRId64'
17096 d_PRIeldbl='$d_PRIeldbl'
17097 d_PRIfldbl='$d_PRIfldbl'
17098 d_PRIgldbl='$d_PRIgldbl'
17099 d_PRIi64='$d_PRIi64'
17100 d_PRIo64='$d_PRIo64'
17101 d_PRIu64='$d_PRIu64'
17102 d_PRIx64='$d_PRIx64'
17103 d_SCNfldbl='$d_SCNfldbl'
17104 d__fwalk='$d__fwalk'
17105 d_access='$d_access'
17106 d_accessx='$d_accessx'
17107 d_alarm='$d_alarm'
17108 d_archlib='$d_archlib'
17109 d_atolf='$d_atolf'
17110 d_atoll='$d_atoll'
17111 d_attribut='$d_attribut'
17112 d_bcmp='$d_bcmp'
17113 d_bcopy='$d_bcopy'
17114 d_bincompat5005='$d_bincompat5005'
17115 d_bsd='$d_bsd'
17116 d_bsdgetpgrp='$d_bsdgetpgrp'
17117 d_bsdsetpgrp='$d_bsdsetpgrp'
17118 d_bzero='$d_bzero'
17119 d_casti32='$d_casti32'
17120 d_castneg='$d_castneg'
17121 d_charvspr='$d_charvspr'
17122 d_chown='$d_chown'
17123 d_chroot='$d_chroot'
17124 d_chsize='$d_chsize'
17125 d_class='$d_class'
17126 d_closedir='$d_closedir'
17127 d_cmsghdr_s='$d_cmsghdr_s'
17128 d_const='$d_const'
17129 d_crypt='$d_crypt'
17130 d_csh='$d_csh'
17131 d_cuserid='$d_cuserid'
17132 d_dbl_dig='$d_dbl_dig'
17133 d_dbminitproto='$d_dbminitproto'
17134 d_difftime='$d_difftime'
17135 d_dirfd='$d_dirfd'
17136 d_dirnamlen='$d_dirnamlen'
17137 d_dlerror='$d_dlerror'
17138 d_dlopen='$d_dlopen'
17139 d_dlsymun='$d_dlsymun'
17140 d_dosuid='$d_dosuid'
17141 d_drand48proto='$d_drand48proto'
17142 d_dup2='$d_dup2'
17143 d_eaccess='$d_eaccess'
17144 d_endgrent='$d_endgrent'
17145 d_endhent='$d_endhent'
17146 d_endnent='$d_endnent'
17147 d_endpent='$d_endpent'
17148 d_endpwent='$d_endpwent'
17149 d_endsent='$d_endsent'
17150 d_eofnblk='$d_eofnblk'
17151 d_eunice='$d_eunice'
17152 d_fchdir='$d_fchdir'
17153 d_fchmod='$d_fchmod'
17154 d_fchown='$d_fchown'
17155 d_fcntl='$d_fcntl'
17156 d_fcntl_can_lock='$d_fcntl_can_lock'
17157 d_fd_macros='$d_fd_macros'
17158 d_fd_set='$d_fd_set'
17159 d_fds_bits='$d_fds_bits'
17160 d_fgetpos='$d_fgetpos'
17161 d_finite='$d_finite'
17162 d_finitel='$d_finitel'
17163 d_flexfnam='$d_flexfnam'
17164 d_flock='$d_flock'
17165 d_flockproto='$d_flockproto'
17166 d_fork='$d_fork'
17167 d_fp_class='$d_fp_class'
17168 d_fpathconf='$d_fpathconf'
17169 d_fpclass='$d_fpclass'
17170 d_fpclassify='$d_fpclassify'
17171 d_fpclassl='$d_fpclassl'
17172 d_fpos64_t='$d_fpos64_t'
17173 d_frexpl='$d_frexpl'
17174 d_fs_data_s='$d_fs_data_s'
17175 d_fseeko='$d_fseeko'
17176 d_fsetpos='$d_fsetpos'
17177 d_fstatfs='$d_fstatfs'
17178 d_fstatvfs='$d_fstatvfs'
17179 d_fsync='$d_fsync'
17180 d_ftello='$d_ftello'
17181 d_ftime='$d_ftime'
17182 d_getcwd='$d_getcwd'
17183 d_getespwnam='$d_getespwnam'
17184 d_getfsstat='$d_getfsstat'
17185 d_getgrent='$d_getgrent'
17186 d_getgrps='$d_getgrps'
17187 d_gethbyaddr='$d_gethbyaddr'
17188 d_gethbyname='$d_gethbyname'
17189 d_gethent='$d_gethent'
17190 d_gethname='$d_gethname'
17191 d_gethostprotos='$d_gethostprotos'
17192 d_getitimer='$d_getitimer'
17193 d_getlogin='$d_getlogin'
17194 d_getmnt='$d_getmnt'
17195 d_getmntent='$d_getmntent'
17196 d_getnbyaddr='$d_getnbyaddr'
17197 d_getnbyname='$d_getnbyname'
17198 d_getnent='$d_getnent'
17199 d_getnetprotos='$d_getnetprotos'
17200 d_getpagsz='$d_getpagsz'
17201 d_getpbyname='$d_getpbyname'
17202 d_getpbynumber='$d_getpbynumber'
17203 d_getpent='$d_getpent'
17204 d_getpgid='$d_getpgid'
17205 d_getpgrp2='$d_getpgrp2'
17206 d_getpgrp='$d_getpgrp'
17207 d_getppid='$d_getppid'
17208 d_getprior='$d_getprior'
17209 d_getprotoprotos='$d_getprotoprotos'
17210 d_getprpwnam='$d_getprpwnam'
17211 d_getpwent='$d_getpwent'
17212 d_getsbyname='$d_getsbyname'
17213 d_getsbyport='$d_getsbyport'
17214 d_getsent='$d_getsent'
17215 d_getservprotos='$d_getservprotos'
17216 d_getspnam='$d_getspnam'
17217 d_gettimeod='$d_gettimeod'
17218 d_gnulibc='$d_gnulibc'
17219 d_grpasswd='$d_grpasswd'
17220 d_hasmntopt='$d_hasmntopt'
17221 d_htonl='$d_htonl'
17222 d_index='$d_index'
17223 d_inetaton='$d_inetaton'
17224 d_int64_t='$d_int64_t'
17225 d_isascii='$d_isascii'
17226 d_isfinite='$d_isfinite'
17227 d_isinf='$d_isinf'
17228 d_isnan='$d_isnan'
17229 d_isnanl='$d_isnanl'
17230 d_killpg='$d_killpg'
17231 d_lchown='$d_lchown'
17232 d_ldbl_dig='$d_ldbl_dig'
17233 d_link='$d_link'
17234 d_locconv='$d_locconv'
17235 d_lockf='$d_lockf'
17236 d_longdbl='$d_longdbl'
17237 d_longlong='$d_longlong'
17238 d_lseekproto='$d_lseekproto'
17239 d_lstat='$d_lstat'
17240 d_madvise='$d_madvise'
17241 d_mblen='$d_mblen'
17242 d_mbstowcs='$d_mbstowcs'
17243 d_mbtowc='$d_mbtowc'
17244 d_memchr='$d_memchr'
17245 d_memcmp='$d_memcmp'
17246 d_memcpy='$d_memcpy'
17247 d_memmove='$d_memmove'
17248 d_memset='$d_memset'
17249 d_mkdir='$d_mkdir'
17250 d_mkdtemp='$d_mkdtemp'
17251 d_mkfifo='$d_mkfifo'
17252 d_mkstemp='$d_mkstemp'
17253 d_mkstemps='$d_mkstemps'
17254 d_mktime='$d_mktime'
17255 d_mmap='$d_mmap'
17256 d_modfl='$d_modfl'
17257 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17258 d_mprotect='$d_mprotect'
17259 d_msg='$d_msg'
17260 d_msg_ctrunc='$d_msg_ctrunc'
17261 d_msg_dontroute='$d_msg_dontroute'
17262 d_msg_oob='$d_msg_oob'
17263 d_msg_peek='$d_msg_peek'
17264 d_msg_proxy='$d_msg_proxy'
17265 d_msgctl='$d_msgctl'
17266 d_msgget='$d_msgget'
17267 d_msghdr_s='$d_msghdr_s'
17268 d_msgrcv='$d_msgrcv'
17269 d_msgsnd='$d_msgsnd'
17270 d_msync='$d_msync'
17271 d_munmap='$d_munmap'
17272 d_mymalloc='$d_mymalloc'
17273 d_nice='$d_nice'
17274 d_nl_langinfo='$d_nl_langinfo'
17275 d_nv_preserves_uv='$d_nv_preserves_uv'
17276 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17277 d_off64_t='$d_off64_t'
17278 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17279 d_oldpthreads='$d_oldpthreads'
17280 d_oldsock='$d_oldsock'
17281 d_open3='$d_open3'
17282 d_pathconf='$d_pathconf'
17283 d_pause='$d_pause'
17284 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17285 d_phostname='$d_phostname'
17286 d_pipe='$d_pipe'
17287 d_poll='$d_poll'
17288 d_portable='$d_portable'
17289 d_procselfexe='$d_procselfexe'
17290 d_pthread_atfork='$d_pthread_atfork'
17291 d_pthread_yield='$d_pthread_yield'
17292 d_pwage='$d_pwage'
17293 d_pwchange='$d_pwchange'
17294 d_pwclass='$d_pwclass'
17295 d_pwcomment='$d_pwcomment'
17296 d_pwexpire='$d_pwexpire'
17297 d_pwgecos='$d_pwgecos'
17298 d_pwpasswd='$d_pwpasswd'
17299 d_pwquota='$d_pwquota'
17300 d_qgcvt='$d_qgcvt'
17301 d_quad='$d_quad'
17302 d_readdir='$d_readdir'
17303 d_readlink='$d_readlink'
17304 d_readv='$d_readv'
17305 d_recvmsg='$d_recvmsg'
17306 d_rename='$d_rename'
17307 d_rewinddir='$d_rewinddir'
17308 d_rmdir='$d_rmdir'
17309 d_safebcpy='$d_safebcpy'
17310 d_safemcpy='$d_safemcpy'
17311 d_sanemcmp='$d_sanemcmp'
17312 d_sbrkproto='$d_sbrkproto'
17313 d_sched_yield='$d_sched_yield'
17314 d_scm_rights='$d_scm_rights'
17315 d_seekdir='$d_seekdir'
17316 d_select='$d_select'
17317 d_sem='$d_sem'
17318 d_semctl='$d_semctl'
17319 d_semctl_semid_ds='$d_semctl_semid_ds'
17320 d_semctl_semun='$d_semctl_semun'
17321 d_semget='$d_semget'
17322 d_semop='$d_semop'
17323 d_sendmsg='$d_sendmsg'
17324 d_setegid='$d_setegid'
17325 d_seteuid='$d_seteuid'
17326 d_setgrent='$d_setgrent'
17327 d_setgrps='$d_setgrps'
17328 d_sethent='$d_sethent'
17329 d_setitimer='$d_setitimer'
17330 d_setlinebuf='$d_setlinebuf'
17331 d_setlocale='$d_setlocale'
17332 d_setnent='$d_setnent'
17333 d_setpent='$d_setpent'
17334 d_setpgid='$d_setpgid'
17335 d_setpgrp2='$d_setpgrp2'
17336 d_setpgrp='$d_setpgrp'
17337 d_setprior='$d_setprior'
17338 d_setproctitle='$d_setproctitle'
17339 d_setpwent='$d_setpwent'
17340 d_setregid='$d_setregid'
17341 d_setresgid='$d_setresgid'
17342 d_setresuid='$d_setresuid'
17343 d_setreuid='$d_setreuid'
17344 d_setrgid='$d_setrgid'
17345 d_setruid='$d_setruid'
17346 d_setsent='$d_setsent'
17347 d_setsid='$d_setsid'
17348 d_setvbuf='$d_setvbuf'
17349 d_sfio='$d_sfio'
17350 d_shm='$d_shm'
17351 d_shmat='$d_shmat'
17352 d_shmatprototype='$d_shmatprototype'
17353 d_shmctl='$d_shmctl'
17354 d_shmdt='$d_shmdt'
17355 d_shmget='$d_shmget'
17356 d_sigaction='$d_sigaction'
17357 d_sigprocmask='$d_sigprocmask'
17358 d_sigsetjmp='$d_sigsetjmp'
17359 d_sockatmark='$d_sockatmark'
17360 d_sockatmarkproto='$d_sockatmarkproto'
17361 d_socket='$d_socket'
17362 d_socklen_t='$d_socklen_t'
17363 d_sockpair='$d_sockpair'
17364 d_socks5_init='$d_socks5_init'
17365 d_sqrtl='$d_sqrtl'
17366 d_sresgproto='$d_sresgproto'
17367 d_sresuproto='$d_sresuproto'
17368 d_statblks='$d_statblks'
17369 d_statfs_f_flags='$d_statfs_f_flags'
17370 d_statfs_s='$d_statfs_s'
17371 d_statvfs='$d_statvfs'
17372 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17373 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17374 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17375 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17376 d_stdio_stream_array='$d_stdio_stream_array'
17377 d_stdiobase='$d_stdiobase'
17378 d_stdstdio='$d_stdstdio'
17379 d_strchr='$d_strchr'
17380 d_strcoll='$d_strcoll'
17381 d_strctcpy='$d_strctcpy'
17382 d_strerrm='$d_strerrm'
17383 d_strerror='$d_strerror'
17384 d_strftime='$d_strftime'
17385 d_strtod='$d_strtod'
17386 d_strtol='$d_strtol'
17387 d_strtold='$d_strtold'
17388 d_strtoll='$d_strtoll'
17389 d_strtoq='$d_strtoq'
17390 d_strtoul='$d_strtoul'
17391 d_strtoull='$d_strtoull'
17392 d_strtouq='$d_strtouq'
17393 d_strxfrm='$d_strxfrm'
17394 d_suidsafe='$d_suidsafe'
17395 d_symlink='$d_symlink'
17396 d_syscall='$d_syscall'
17397 d_syscallproto='$d_syscallproto'
17398 d_sysconf='$d_sysconf'
17399 d_sysernlst='$d_sysernlst'
17400 d_syserrlst='$d_syserrlst'
17401 d_system='$d_system'
17402 d_tcgetpgrp='$d_tcgetpgrp'
17403 d_tcsetpgrp='$d_tcsetpgrp'
17404 d_telldir='$d_telldir'
17405 d_telldirproto='$d_telldirproto'
17406 d_time='$d_time'
17407 d_times='$d_times'
17408 d_truncate='$d_truncate'
17409 d_tzname='$d_tzname'
17410 d_u32align='$d_u32align'
17411 d_ualarm='$d_ualarm'
17412 d_umask='$d_umask'
17413 d_uname='$d_uname'
17414 d_union_semun='$d_union_semun'
17415 d_unordered='$d_unordered'
17416 d_usleep='$d_usleep'
17417 d_usleepproto='$d_usleepproto'
17418 d_ustat='$d_ustat'
17419 d_vendorarch='$d_vendorarch'
17420 d_vendorbin='$d_vendorbin'
17421 d_vendorlib='$d_vendorlib'
17422 d_vfork='$d_vfork'
17423 d_void_closedir='$d_void_closedir'
17424 d_voidsig='$d_voidsig'
17425 d_voidtty='$d_voidtty'
17426 d_volatile='$d_volatile'
17427 d_vprintf='$d_vprintf'
17428 d_wait4='$d_wait4'
17429 d_waitpid='$d_waitpid'
17430 d_wcstombs='$d_wcstombs'
17431 d_wctomb='$d_wctomb'
17432 d_writev='$d_writev'
17433 d_xenix='$d_xenix'
17434 date='$date'
17435 db_hashtype='$db_hashtype'
17436 db_prefixtype='$db_prefixtype'
17437 db_version_major='$db_version_major'
17438 db_version_minor='$db_version_minor'
17439 db_version_patch='$db_version_patch'
17440 defvoidused='$defvoidused'
17441 direntrytype='$direntrytype'
17442 dlext='$dlext'
17443 dlsrc='$dlsrc'
17444 doublesize='$doublesize'
17445 drand01='$drand01'
17446 dynamic_ext='$dynamic_ext'
17447 eagain='$eagain'
17448 ebcdic='$ebcdic'
17449 echo='$echo'
17450 egrep='$egrep'
17451 emacs='$emacs'
17452 eunicefix='$eunicefix'
17453 exe_ext='$exe_ext'
17454 expr='$expr'
17455 extensions='$extensions'
17456 extras='$extras'
17457 fflushNULL='$fflushNULL'
17458 fflushall='$fflushall'
17459 find='$find'
17460 firstmakefile='$firstmakefile'
17461 flex='$flex'
17462 fpossize='$fpossize'
17463 fpostype='$fpostype'
17464 freetype='$freetype'
17465 from='$from'
17466 full_ar='$full_ar'
17467 full_csh='$full_csh'
17468 full_sed='$full_sed'
17469 gccosandvers='$gccosandvers'
17470 gccversion='$gccversion'
17471 gidformat='$gidformat'
17472 gidsign='$gidsign'
17473 gidsize='$gidsize'
17474 gidtype='$gidtype'
17475 glibpth='$glibpth'
17476 gmake='$gmake'
17477 grep='$grep'
17478 groupcat='$groupcat'
17479 groupstype='$groupstype'
17480 gzip='$gzip'
17481 h_fcntl='$h_fcntl'
17482 h_sysfile='$h_sysfile'
17483 hint='$hint'
17484 hostcat='$hostcat'
17485 i16size='$i16size'
17486 i16type='$i16type'
17487 i32size='$i32size'
17488 i32type='$i32type'
17489 i64size='$i64size'
17490 i64type='$i64type'
17491 i8size='$i8size'
17492 i8type='$i8type'
17493 i_arpainet='$i_arpainet'
17494 i_bsdioctl='$i_bsdioctl'
17495 i_db='$i_db'
17496 i_dbm='$i_dbm'
17497 i_dirent='$i_dirent'
17498 i_dld='$i_dld'
17499 i_dlfcn='$i_dlfcn'
17500 i_fcntl='$i_fcntl'
17501 i_float='$i_float'
17502 i_fp='$i_fp'
17503 i_fp_class='$i_fp_class'
17504 i_gdbm='$i_gdbm'
17505 i_grp='$i_grp'
17506 i_ieeefp='$i_ieeefp'
17507 i_inttypes='$i_inttypes'
17508 i_langinfo='$i_langinfo'
17509 i_libutil='$i_libutil'
17510 i_limits='$i_limits'
17511 i_locale='$i_locale'
17512 i_machcthr='$i_machcthr'
17513 i_malloc='$i_malloc'
17514 i_math='$i_math'
17515 i_memory='$i_memory'
17516 i_mntent='$i_mntent'
17517 i_ndbm='$i_ndbm'
17518 i_netdb='$i_netdb'
17519 i_neterrno='$i_neterrno'
17520 i_netinettcp='$i_netinettcp'
17521 i_niin='$i_niin'
17522 i_poll='$i_poll'
17523 i_prot='$i_prot'
17524 i_pthread='$i_pthread'
17525 i_pwd='$i_pwd'
17526 i_rpcsvcdbm='$i_rpcsvcdbm'
17527 i_sfio='$i_sfio'
17528 i_sgtty='$i_sgtty'
17529 i_shadow='$i_shadow'
17530 i_socks='$i_socks'
17531 i_stdarg='$i_stdarg'
17532 i_stddef='$i_stddef'
17533 i_stdlib='$i_stdlib'
17534 i_string='$i_string'
17535 i_sunmath='$i_sunmath'
17536 i_sysaccess='$i_sysaccess'
17537 i_sysdir='$i_sysdir'
17538 i_sysfile='$i_sysfile'
17539 i_sysfilio='$i_sysfilio'
17540 i_sysin='$i_sysin'
17541 i_sysioctl='$i_sysioctl'
17542 i_syslog='$i_syslog'
17543 i_sysmman='$i_sysmman'
17544 i_sysmode='$i_sysmode'
17545 i_sysmount='$i_sysmount'
17546 i_sysndir='$i_sysndir'
17547 i_sysparam='$i_sysparam'
17548 i_sysresrc='$i_sysresrc'
17549 i_syssecrt='$i_syssecrt'
17550 i_sysselct='$i_sysselct'
17551 i_syssockio='$i_syssockio'
17552 i_sysstat='$i_sysstat'
17553 i_sysstatfs='$i_sysstatfs'
17554 i_sysstatvfs='$i_sysstatvfs'
17555 i_systime='$i_systime'
17556 i_systimek='$i_systimek'
17557 i_systimes='$i_systimes'
17558 i_systypes='$i_systypes'
17559 i_sysuio='$i_sysuio'
17560 i_sysun='$i_sysun'
17561 i_sysutsname='$i_sysutsname'
17562 i_sysvfs='$i_sysvfs'
17563 i_syswait='$i_syswait'
17564 i_termio='$i_termio'
17565 i_termios='$i_termios'
17566 i_time='$i_time'
17567 i_unistd='$i_unistd'
17568 i_ustat='$i_ustat'
17569 i_utime='$i_utime'
17570 i_values='$i_values'
17571 i_varargs='$i_varargs'
17572 i_varhdr='$i_varhdr'
17573 i_vfork='$i_vfork'
17574 ignore_versioned_solibs='$ignore_versioned_solibs'
17575 inc_version_list='$inc_version_list'
17576 inc_version_list_init='$inc_version_list_init'
17577 incpath='$incpath'
17578 inews='$inews'
17579 installarchlib='$installarchlib'
17580 installbin='$installbin'
17581 installman1dir='$installman1dir'
17582 installman3dir='$installman3dir'
17583 installprefix='$installprefix'
17584 installprefixexp='$installprefixexp'
17585 installprivlib='$installprivlib'
17586 installscript='$installscript'
17587 installsitearch='$installsitearch'
17588 installsitebin='$installsitebin'
17589 installsitelib='$installsitelib'
17590 installstyle='$installstyle'
17591 installusrbinperl='$installusrbinperl'
17592 installvendorarch='$installvendorarch'
17593 installvendorbin='$installvendorbin'
17594 installvendorlib='$installvendorlib'
17595 intsize='$intsize'
17596 issymlink='$issymlink'
17597 ivdformat='$ivdformat'
17598 ivsize='$ivsize'
17599 ivtype='$ivtype'
17600 known_extensions='$known_extensions'
17601 ksh='$ksh'
17602 ld='$ld'
17603 lddlflags='$lddlflags'
17604 ldflags='$ldflags'
17605 ldflags_uselargefiles='$ldflags_uselargefiles'
17606 ldlibpthname='$ldlibpthname'
17607 less='$less'
17608 lib_ext='$lib_ext'
17609 libc='$libc'
17610 libperl='$libperl'
17611 libpth='$libpth'
17612 libs='$libs'
17613 libsdirs='$libsdirs'
17614 libsfiles='$libsfiles'
17615 libsfound='$libsfound'
17616 libspath='$libspath'
17617 libswanted='$libswanted'
17618 libswanted_uselargefiles='$libswanted_uselargefiles'
17619 line='$line'
17620 lint='$lint'
17621 lkflags='$lkflags'
17622 ln='$ln'
17623 lns='$lns'
17624 locincpth='$locincpth'
17625 loclibpth='$loclibpth'
17626 longdblsize='$longdblsize'
17627 longlongsize='$longlongsize'
17628 longsize='$longsize'
17629 lp='$lp'
17630 lpr='$lpr'
17631 ls='$ls'
17632 lseeksize='$lseeksize'
17633 lseektype='$lseektype'
17634 mail='$mail'
17635 mailx='$mailx'
17636 make='$make'
17637 make_set_make='$make_set_make'
17638 mallocobj='$mallocobj'
17639 mallocsrc='$mallocsrc'
17640 malloctype='$malloctype'
17641 man1dir='$man1dir'
17642 man1direxp='$man1direxp'
17643 man1ext='$man1ext'
17644 man3dir='$man3dir'
17645 man3direxp='$man3direxp'
17646 man3ext='$man3ext'
17647 mips_type='$mips_type'
17648 mkdir='$mkdir'
17649 mmaptype='$mmaptype'
17650 modetype='$modetype'
17651 more='$more'
17652 multiarch='$multiarch'
17653 mv='$mv'
17654 myarchname='$myarchname'
17655 mydomain='$mydomain'
17656 myhostname='$myhostname'
17657 myuname='$myuname'
17658 n='$n'
17659 need_va_copy='$need_va_copy'
17660 netdb_hlen_type='$netdb_hlen_type'
17661 netdb_host_type='$netdb_host_type'
17662 netdb_name_type='$netdb_name_type'
17663 netdb_net_type='$netdb_net_type'
17664 nm='$nm'
17665 nm_opt='$nm_opt'
17666 nm_so_opt='$nm_so_opt'
17667 nonxs_ext='$nonxs_ext'
17668 nroff='$nroff'
17669 nvEUformat='$nvEUformat'
17670 nvFUformat='$nvFUformat'
17671 nvGUformat='$nvGUformat'
17672 nveformat='$nveformat'
17673 nvfformat='$nvfformat'
17674 nvgformat='$nvgformat'
17675 nvsize='$nvsize'
17676 nvtype='$nvtype'
17677 o_nonblock='$o_nonblock'
17678 obj_ext='$obj_ext'
17679 old_pthread_create_joinable='$old_pthread_create_joinable'
17680 optimize='$optimize'
17681 orderlib='$orderlib'
17682 osname='$osname'
17683 osvers='$osvers'
17684 otherlibdirs='$otherlibdirs'
17685 package='$package'
17686 pager='$pager'
17687 passcat='$passcat'
17688 patchlevel='$patchlevel'
17689 path_sep='$path_sep'
17690 perl5='$perl5'
17691 perl='$perl'
17692 perl_patchlevel='$perl_patchlevel'
17693 perladmin='$perladmin'
17694 perllibs='$perllibs'
17695 perlpath='$perlpath'
17696 pg='$pg'
17697 phostname='$phostname'
17698 pidtype='$pidtype'
17699 plibpth='$plibpth'
17700 pm_apiversion='$pm_apiversion'
17701 pmake='$pmake'
17702 pr='$pr'
17703 prefix='$prefix'
17704 prefixexp='$prefixexp'
17705 privlib='$privlib'
17706 privlibexp='$privlibexp'
17707 procselfexe='$procselfexe'
17708 prototype='$prototype'
17709 ptrsize='$ptrsize'
17710 quadkind='$quadkind'
17711 quadtype='$quadtype'
17712 randbits='$randbits'
17713 randfunc='$randfunc'
17714 randseedtype='$randseedtype'
17715 ranlib='$ranlib'
17716 rd_nodata='$rd_nodata'
17717 revision='$revision'
17718 rm='$rm'
17719 rmail='$rmail'
17720 run='$run'
17721 runnm='$runnm'
17722 sPRIEUldbl='$sPRIEUldbl'
17723 sPRIFUldbl='$sPRIFUldbl'
17724 sPRIGUldbl='$sPRIGUldbl'
17725 sPRIXU64='$sPRIXU64'
17726 sPRId64='$sPRId64'
17727 sPRIeldbl='$sPRIeldbl'
17728 sPRIfldbl='$sPRIfldbl'
17729 sPRIgldbl='$sPRIgldbl'
17730 sPRIi64='$sPRIi64'
17731 sPRIo64='$sPRIo64'
17732 sPRIu64='$sPRIu64'
17733 sPRIx64='$sPRIx64'
17734 sSCNfldbl='$sSCNfldbl'
17735 sched_yield='$sched_yield'
17736 scriptdir='$scriptdir'
17737 scriptdirexp='$scriptdirexp'
17738 sed='$sed'
17739 seedfunc='$seedfunc'
17740 selectminbits='$selectminbits'
17741 selecttype='$selecttype'
17742 sendmail='$sendmail'
17743 sh='$sh'
17744 shar='$shar'
17745 sharpbang='$sharpbang'
17746 shmattype='$shmattype'
17747 shortsize='$shortsize'
17748 shrpenv='$shrpenv'
17749 shsharp='$shsharp'
17750 sig_count='$sig_count'
17751 sig_name='$sig_name'
17752 sig_name_init='$sig_name_init'
17753 sig_num='$sig_num'
17754 sig_num_init='$sig_num_init'
17755 sig_size='$sig_size'
17756 signal_t='$signal_t'
17757 sitearch='$sitearch'
17758 sitearchexp='$sitearchexp'
17759 sitebin='$sitebin'
17760 sitebinexp='$sitebinexp'
17761 sitelib='$sitelib'
17762 sitelib_stem='$sitelib_stem'
17763 sitelibexp='$sitelibexp'
17764 siteprefix='$siteprefix'
17765 siteprefixexp='$siteprefixexp'
17766 sizesize='$sizesize'
17767 sizetype='$sizetype'
17768 sleep='$sleep'
17769 smail='$smail'
17770 so='$so'
17771 sockethdr='$sockethdr'
17772 socketlib='$socketlib'
17773 socksizetype='$socksizetype'
17774 sort='$sort'
17775 spackage='$spackage'
17776 spitshell='$spitshell'
17777 src='$src'
17778 ssizetype='$ssizetype'
17779 startperl='$startperl'
17780 startsh='$startsh'
17781 static_ext='$static_ext'
17782 stdchar='$stdchar'
17783 stdio_base='$stdio_base'
17784 stdio_bufsiz='$stdio_bufsiz'
17785 stdio_cnt='$stdio_cnt'
17786 stdio_filbuf='$stdio_filbuf'
17787 stdio_ptr='$stdio_ptr'
17788 stdio_stream_array='$stdio_stream_array'
17789 strings='$strings'
17790 submit='$submit'
17791 subversion='$subversion'
17792 sysman='$sysman'
17793 tail='$tail'
17794 tar='$tar'
17795 targetarch='$targetarch'
17796 tbl='$tbl'
17797 tee='$tee'
17798 test='$test'
17799 timeincl='$timeincl'
17800 timetype='$timetype'
17801 to='$to'
17802 touch='$touch'
17803 tr='$tr'
17804 trnl='$trnl'
17805 troff='$troff'
17806 u16size='$u16size'
17807 u16type='$u16type'
17808 u32size='$u32size'
17809 u32type='$u32type'
17810 u64size='$u64size'
17811 u64type='$u64type'
17812 u8size='$u8size'
17813 u8type='$u8type'
17814 uidformat='$uidformat'
17815 uidsign='$uidsign'
17816 uidsize='$uidsize'
17817 uidtype='$uidtype'
17818 uname='$uname'
17819 uniq='$uniq'
17820 uquadtype='$uquadtype'
17821 use5005threads='$use5005threads'
17822 use64bitall='$use64bitall'
17823 use64bitint='$use64bitint'
17824 usecrosscompile='$usecrosscompile'
17825 usedl='$usedl'
17826 useithreads='$useithreads'
17827 uselargefiles='$uselargefiles'
17828 uselongdouble='$uselongdouble'
17829 usemorebits='$usemorebits'
17830 usemultiplicity='$usemultiplicity'
17831 usemymalloc='$usemymalloc'
17832 usenm='$usenm'
17833 useopcode='$useopcode'
17834 useperlio='$useperlio'
17835 useposix='$useposix'
17836 usereentrant='$usereentrant'
17837 usesfio='$usesfio'
17838 useshrplib='$useshrplib'
17839 usesocks='$usesocks'
17840 usethreads='$usethreads'
17841 usevendorprefix='$usevendorprefix'
17842 usevfork='$usevfork'
17843 usrinc='$usrinc'
17844 uuname='$uuname'
17845 uvXUformat='$uvXUformat'
17846 uvoformat='$uvoformat'
17847 uvsize='$uvsize'
17848 uvtype='$uvtype'
17849 uvuformat='$uvuformat'
17850 uvxformat='$uvxformat'
17851 vendorarch='$vendorarch'
17852 vendorarchexp='$vendorarchexp'
17853 vendorbin='$vendorbin'
17854 vendorbinexp='$vendorbinexp'
17855 vendorlib='$vendorlib'
17856 vendorlib_stem='$vendorlib_stem'
17857 vendorlibexp='$vendorlibexp'
17858 vendorprefix='$vendorprefix'
17859 vendorprefixexp='$vendorprefixexp'
17860 version='$version'
17861 version_patchlevel_string='$version_patchlevel_string'
17862 versiononly='$versiononly'
17863 vi='$vi'
17864 voidflags='$voidflags'
17865 xlibpth='$xlibpth'
17866 xs_apiversion='$xs_apiversion'
17867 yacc='$yacc'
17868 yaccflags='$yaccflags'
17869 zcat='$zcat'
17870 zip='$zip'
17871 EOT
17872
17873 : Add in command line options if available
17874 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17875
17876 : add special variables
17877 $test -f $src/patchlevel.h && \
17878 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17879 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17880 echo "PERL_CONFIG_SH=true" >>config.sh
17881
17882 : propagate old symbols
17883 if $test -f UU/config.sh; then
17884         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17885         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17886         $sort | $uniq -u >UU/oldsyms
17887         set X `cat UU/oldsyms`
17888         shift
17889         case $# in
17890         0) ;;
17891         *)
17892                 cat <<EOM
17893 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17894 EOM
17895                 echo "# Variables propagated from previous config.sh file." >>config.sh
17896                 for sym in `cat UU/oldsyms`; do
17897                         echo "    Propagating $hint variable "'$'"$sym..."
17898                         eval 'tmp="$'"${sym}"'"'
17899                         echo "$tmp" | \
17900                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17901                 done
17902                 ;;
17903         esac
17904 fi
17905
17906 : Finish up by extracting the .SH files
17907 case "$alldone" in
17908 exit)
17909         $rm -rf UU
17910         echo "Extraction done."
17911         exit 0
17912         ;;
17913 cont)
17914         ;;
17915 '')
17916         dflt=''
17917         nostick=true
17918         $cat <<EOM
17919
17920 If you'd like to make any changes to the config.sh file before I begin
17921 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17922
17923 EOM
17924         rp="Press return or use a shell escape to edit config.sh:"
17925         . UU/myread
17926         nostick=''
17927         case "$ans" in
17928         '') ;;
17929         *) : in case they cannot read
17930                 sh 1>&4 -c "$ans";;
17931         esac
17932         ;;
17933 esac
17934
17935 : if this fails, just run all the .SH files by hand
17936 . ./config.sh
17937
17938 echo " "
17939 exec 1>&4
17940 pwd=`pwd`
17941 . ./UU/extract
17942 cd "$pwd"
17943
17944 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17945         dflt=y
17946         case "$silent" in
17947         true) ;;
17948         *)
17949                 $cat <<EOM
17950
17951 Now you need to generate make dependencies by running "$make depend".
17952 You might prefer to run it in background: "$make depend > makedepend.out &"
17953 It can take a while, so you might not want to run it right now.
17954
17955 EOM
17956                 ;;
17957         esac
17958         rp="Run $make depend now?"
17959         . UU/myread
17960         case "$ans" in
17961         y*)
17962                 $make depend && echo "Now you must run '$make'."
17963                 ;;
17964         *)
17965                 echo "You must run '$make depend' then '$make'."
17966                 ;;
17967         esac
17968 elif test -f [Mm]akefile; then
17969         echo " "
17970         echo "Now you must run a $make."
17971 else
17972         echo "Configure done."
17973 fi
17974
17975 if $test -f Policy.sh; then
17976     $cat <<EOM
17977
17978 If you compile $package on a different machine or from a different object
17979 directory, copy the Policy.sh file from this object directory to the
17980 new one before you run Configure -- this will help you with most of
17981 the policy defaults.
17982
17983 EOM
17984 fi
17985 if $test -f config.msg; then
17986     echo "Hmm.  I also noted the following information while running:"
17987     echo " "
17988     $cat config.msg >&4
17989     $rm -f config.msg
17990 fi
17991 $rm -f kit*isdone ark*isdone
17992 $rm -rf UU
17993
17994 : End of Configure
17995