Better to "quote" the pathname.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Nov 23 21:46:25 EET 2001 [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
85 for p in $paths
86 do
87         case "$p_$PATH$p_" in
88         *$p_$p$p_*) ;;
89         *) test -d $p && PATH=$PATH$p_$p ;;
90         esac
91 done
92
93 PATH=.$p_$PATH
94 export PATH
95
96 : shall we be using ksh?
97 inksh=''
98 needksh=''
99 avoidksh=''
100 newsh=/bin/ksh
101 changesh=''
102 if (PATH=.; alias -x) >/dev/null 2>&1; then
103                 inksh=true
104 fi
105 if test -f /hp-ux -a -f /bin/ksh; then
106         needksh='to avoid sh bug in "here document" expansion'
107 fi
108 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
109         if test X`/usr/bin/uname -v` = X4; then
110                 avoidksh="to avoid AIX 4's /bin/sh"
111                 newsh=/usr/bin/bsh
112         fi
113 fi
114 if test -f /osf_boot -a -f /usr/sbin/setld; then
115         if test X`/usr/bin/uname -s` = XOSF1; then
116                 avoidksh="to avoid Digital UNIX' ksh"
117                 newsh=/bin/sh
118                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
119         fi
120 fi
121 case "$inksh/$needksh" in
122 /[a-z]*)
123                 ENV=''
124                 changesh=true
125                 reason="$needksh"
126         ;;
127 esac
128 case "$inksh/$avoidksh" in
129 true/[a-z]*)
130         changesh=true
131         reason="$avoidksh"
132         ;;
133 esac
134 case "$inksh/$needksh-$avoidksh-" in
135 true/--)
136                 cat <<EOM
137 (I see you are using the Korn shell.  Some ksh's blow up on $me,
138 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
139 EOM
140         ;;
141 esac
142 case "$changesh" in
143 true)
144         export newsh
145         echo "(Feeding myself to $newsh $reason.)"
146         case "$0" in
147         Configure|*/Configure) exec $newsh $0 "$@";;
148         *) exec $newsh Configure "$@";;
149         esac
150         ;;
151 esac
152
153 : if needed set CDPATH to a harmless value that is not chatty
154 : avoid bash 2.02 problems with empty CDPATH.
155 case "$CDPATH" in
156 '')     ;;
157 *)      case "$SHELL" in
158         *bash*) CDPATH='.' ;;
159         *)              CDPATH='' ;;
160         esac
161         ;;
162 esac
163 : Configure runs within the UU subdirectory
164 test -d UU || mkdir UU
165 cd UU && rm -f ./*
166
167 ccname=''
168 ccversion=''
169 ccsymbols=''
170 cppccsymbols=''
171 cppsymbols=''
172 from=''
173 run=''
174 targetarch=''
175 to=''
176 usecrosscompile=''
177 perllibs=''
178 dynamic_ext=''
179 extensions=''
180 known_extensions=''
181 nonxs_ext=''
182 static_ext=''
183 useopcode=''
184 useposix=''
185 extras=''
186 d_bsd=''
187 d_eunice=''
188 d_xenix=''
189 eunicefix=''
190 Mcc=''
191 ar=''
192 awk=''
193 bash=''
194 bison=''
195 byacc=''
196 cat=''
197 chgrp=''
198 chmod=''
199 chown=''
200 comm=''
201 compress=''
202 cp=''
203 cpio=''
204 cpp=''
205 csh=''
206 date=''
207 echo=''
208 egrep=''
209 emacs=''
210 expr=''
211 find=''
212 flex=''
213 grep=''
214 gzip=''
215 inews=''
216 ksh=''
217 less=''
218 line=''
219 lint=''
220 ln=''
221 lp=''
222 lpr=''
223 ls=''
224 mail=''
225 mailx=''
226 make=''
227 mkdir=''
228 more=''
229 mv=''
230 nm=''
231 nroff=''
232 perl=''
233 pg=''
234 pmake=''
235 pr=''
236 rm=''
237 rmail=''
238 sed=''
239 sendmail=''
240 shar=''
241 sleep=''
242 smail=''
243 sort=''
244 submit=''
245 tail=''
246 tar=''
247 tbl=''
248 tee=''
249 test=''
250 touch=''
251 tr=''
252 troff=''
253 uname=''
254 uniq=''
255 uuname=''
256 vi=''
257 zcat=''
258 zip=''
259 full_ar=''
260 full_sed=''
261 libswanted=''
262 hint=''
263 myuname=''
264 osname=''
265 osvers=''
266 Author=''
267 Date=''
268 Header=''
269 Id=''
270 Locker=''
271 Log=''
272 RCSfile=''
273 Revision=''
274 Source=''
275 State=''
276 _a=''
277 _exe=''
278 _o=''
279 archobjs=''
280 exe_ext=''
281 firstmakefile=''
282 lib_ext=''
283 obj_ext=''
284 path_sep=''
285 afs=''
286 afsroot=''
287 alignbytes=''
288 ansi2knr=''
289 archlib=''
290 archlibexp=''
291 d_archlib=''
292 installarchlib=''
293 archname=''
294 myarchname=''
295 d_atolf=''
296 d_atoll=''
297 baserev=''
298 bin=''
299 binexp=''
300 installbin=''
301 bincompat5005=''
302 d_bincompat5005=''
303 byteorder=''
304 cc=''
305 ccflags=''
306 cppflags=''
307 ldflags=''
308 lkflags=''
309 locincpth=''
310 optimize=''
311 cf_email=''
312 cf_by=''
313 cf_time=''
314 charsize=''
315 contains=''
316 cpp_stuff=''
317 cpplast=''
318 cppminus=''
319 cpprun=''
320 cppstdin=''
321 d__fwalk=''
322 d_access=''
323 d_accessx=''
324 d_alarm=''
325 d_attribut=''
326 d_bcmp=''
327 d_bcopy=''
328 d_bzero=''
329 d_casti32=''
330 castflags=''
331 d_castneg=''
332 d_chown=''
333 d_chroot=''
334 d_chsize=''
335 d_class=''
336 d_closedir=''
337 d_void_closedir=''
338 d_cmsghdr_s=''
339 d_const=''
340 cryptlib=''
341 d_crypt=''
342 d_csh=''
343 full_csh=''
344 d_cuserid=''
345 d_dbl_dig=''
346 d_dbminitproto=''
347 d_difftime=''
348 d_dirfd=''
349 d_dlerror=''
350 d_dlopen=''
351 d_dlsymun=''
352 d_dosuid=''
353 d_suidsafe=''
354 d_drand48proto=''
355 d_dup2=''
356 d_eaccess=''
357 d_endgrent=''
358 d_endhent=''
359 d_endnent=''
360 d_endpent=''
361 d_endpwent=''
362 d_endsent=''
363 d_fchdir=''
364 d_fchmod=''
365 d_fchown=''
366 d_fcntl=''
367 d_fcntl_can_lock=''
368 d_fd_macros=''
369 d_fd_set=''
370 d_fds_bits=''
371 d_fgetpos=''
372 d_finite=''
373 d_finitel=''
374 d_flexfnam=''
375 d_flock=''
376 d_flockproto=''
377 d_fork=''
378 d_fp_class=''
379 d_fpclass=''
380 d_fpclassify=''
381 d_fpclassl=''
382 d_fpos64_t=''
383 d_frexpl=''
384 d_fs_data_s=''
385 d_fseeko=''
386 d_fsetpos=''
387 d_fstatfs=''
388 d_fsync=''
389 d_ftello=''
390 d_ftime=''
391 d_gettimeod=''
392 d_Gconvert=''
393 d_getcwd=''
394 d_getespwnam=''
395 d_getfsstat=''
396 d_getgrent=''
397 d_getgrps=''
398 d_gethbyaddr=''
399 d_gethbyname=''
400 d_gethent=''
401 aphostname=''
402 d_gethname=''
403 d_phostname=''
404 d_uname=''
405 d_gethostprotos=''
406 d_getitimer=''
407 d_getlogin=''
408 d_getmnt=''
409 d_getmntent=''
410 d_getnbyaddr=''
411 d_getnbyname=''
412 d_getnent=''
413 d_getnetprotos=''
414 d_getpagsz=''
415 d_getpent=''
416 d_getpgid=''
417 d_getpgrp2=''
418 d_bsdgetpgrp=''
419 d_getpgrp=''
420 d_getppid=''
421 d_getprior=''
422 d_getpbyname=''
423 d_getpbynumber=''
424 d_getprotoprotos=''
425 d_getprpwnam=''
426 d_getpwent=''
427 d_getsent=''
428 d_getservprotos=''
429 d_getspnam=''
430 d_getsbyname=''
431 d_getsbyport=''
432 d_gnulibc=''
433 d_hasmntopt=''
434 d_htonl=''
435 d_inetaton=''
436 d_int64_t=''
437 d_isascii=''
438 d_isfinite=''
439 d_isinf=''
440 d_isnan=''
441 d_isnanl=''
442 d_killpg=''
443 d_lchown=''
444 d_ldbl_dig=''
445 d_link=''
446 d_locconv=''
447 d_lockf=''
448 d_longdbl=''
449 longdblsize=''
450 d_longlong=''
451 longlongsize=''
452 d_lseekproto=''
453 d_lstat=''
454 d_madvise=''
455 d_mblen=''
456 d_mbstowcs=''
457 d_mbtowc=''
458 d_memchr=''
459 d_memcmp=''
460 d_memcpy=''
461 d_memmove=''
462 d_memset=''
463 d_mkdir=''
464 d_mkdtemp=''
465 d_mkfifo=''
466 d_mkstemp=''
467 d_mkstemps=''
468 d_mktime=''
469 d_mmap=''
470 mmaptype=''
471 d_modfl=''
472 d_modfl_pow32_bug=''
473 d_mprotect=''
474 d_msg=''
475 d_msgctl=''
476 d_msgget=''
477 d_msghdr_s=''
478 d_msgrcv=''
479 d_msgsnd=''
480 d_msync=''
481 d_munmap=''
482 d_nice=''
483 d_nl_langinfo=''
484 d_off64_t=''
485 d_open3=''
486 d_fpathconf=''
487 d_pathconf=''
488 d_pause=''
489 d_pipe=''
490 d_poll=''
491 d_portable=''
492 d_procselfexe=''
493 procselfexe=''
494 d_old_pthread_create_joinable=''
495 old_pthread_create_joinable=''
496 d_pthread_atfork=''
497 d_pthread_yield=''
498 d_sched_yield=''
499 sched_yield=''
500 d_qgcvt=''
501 d_readdir=''
502 d_rewinddir=''
503 d_seekdir=''
504 d_telldir=''
505 d_readlink=''
506 d_readv=''
507 d_recvmsg=''
508 d_rename=''
509 d_rmdir=''
510 d_safebcpy=''
511 d_safemcpy=''
512 d_sanemcmp=''
513 d_sbrkproto=''
514 d_select=''
515 d_sem=''
516 d_semctl=''
517 d_semget=''
518 d_semop=''
519 d_sendmsg=''
520 d_setegid=''
521 d_seteuid=''
522 d_setgrent=''
523 d_setgrps=''
524 d_sethent=''
525 d_setitimer=''
526 d_setlinebuf=''
527 d_setlocale=''
528 d_setnent=''
529 d_setpent=''
530 d_setpgid=''
531 d_setpgrp2=''
532 d_bsdsetpgrp=''
533 d_setpgrp=''
534 d_setprior=''
535 d_setproctitle=''
536 d_setpwent=''
537 d_setregid=''
538 d_setresgid=''
539 d_setresuid=''
540 d_setreuid=''
541 d_setrgid=''
542 d_setruid=''
543 d_setsent=''
544 d_setsid=''
545 d_setvbuf=''
546 d_sfio=''
547 usesfio=''
548 d_shm=''
549 d_shmat=''
550 d_shmatprototype=''
551 shmattype=''
552 d_shmctl=''
553 d_shmdt=''
554 d_shmget=''
555 d_sigaction=''
556 d_sigprocmask=''
557 d_sigsetjmp=''
558 d_sockatmark=''
559 d_sockatmarkproto=''
560 d_msg_ctrunc=''
561 d_msg_dontroute=''
562 d_msg_oob=''
563 d_msg_peek=''
564 d_msg_proxy=''
565 d_oldsock=''
566 d_scm_rights=''
567 d_socket=''
568 d_sockpair=''
569 sockethdr=''
570 socketlib=''
571 d_socklen_t=''
572 d_socks5_init=''
573 d_sqrtl=''
574 d_sresgproto=''
575 d_sresuproto=''
576 d_statblks=''
577 d_statfs_f_flags=''
578 d_statfs_s=''
579 d_fstatvfs=''
580 d_statvfs=''
581 d_stdio_cnt_lval=''
582 d_stdio_ptr_lval=''
583 d_stdio_ptr_lval_nochange_cnt=''
584 d_stdio_ptr_lval_sets_cnt=''
585 d_stdiobase=''
586 d_stdstdio=''
587 stdio_base=''
588 stdio_bufsiz=''
589 stdio_cnt=''
590 stdio_filbuf=''
591 stdio_ptr=''
592 d_index=''
593 d_strchr=''
594 d_strcoll=''
595 d_strctcpy=''
596 d_strerrm=''
597 d_strerror=''
598 d_sysernlst=''
599 d_syserrlst=''
600 d_strftime=''
601 d_strtod=''
602 d_strtol=''
603 d_strtold=''
604 d_strtoll=''
605 d_strtoq=''
606 d_strtoul=''
607 d_strtoull=''
608 d_strtouq=''
609 d_strxfrm=''
610 d_symlink=''
611 d_syscall=''
612 d_syscallproto=''
613 d_sysconf=''
614 d_system=''
615 d_tcgetpgrp=''
616 d_tcsetpgrp=''
617 d_telldirproto=''
618 d_time=''
619 timetype=''
620 clocktype=''
621 d_times=''
622 d_truncate=''
623 d_tzname=''
624 d_u32align=''
625 d_ualarm=''
626 d_umask=''
627 d_semctl_semid_ds=''
628 d_semctl_semun=''
629 d_union_semun=''
630 d_unordered=''
631 d_usleep=''
632 d_usleepproto=''
633 d_ustat=''
634 d_vfork=''
635 usevfork=''
636 d_voidsig=''
637 signal_t=''
638 d_volatile=''
639 d_charvspr=''
640 d_vprintf=''
641 d_wait4=''
642 d_waitpid=''
643 d_wcstombs=''
644 d_wctomb=''
645 d_writev=''
646 dlext=''
647 cccdlflags=''
648 ccdlflags=''
649 dlsrc=''
650 ld=''
651 lddlflags=''
652 usedl=''
653 doublesize=''
654 ebcdic=''
655 fflushNULL=''
656 fflushall=''
657 fpossize=''
658 fpostype=''
659 gccosandvers=''
660 gccversion=''
661 gidformat=''
662 gidsign=''
663 gidsize=''
664 gidtype=''
665 groupstype=''
666 h_fcntl=''
667 h_sysfile=''
668 i_arpainet=''
669 db_hashtype=''
670 db_prefixtype=''
671 db_version_major=''
672 db_version_minor=''
673 db_version_patch=''
674 i_db=''
675 i_dbm=''
676 i_rpcsvcdbm=''
677 d_dirnamlen=''
678 direntrytype=''
679 i_dirent=''
680 i_dld=''
681 i_dlfcn=''
682 i_fcntl=''
683 i_float=''
684 i_fp=''
685 i_fp_class=''
686 i_gdbm=''
687 d_grpasswd=''
688 i_grp=''
689 i_ieeefp=''
690 i_inttypes=''
691 i_langinfo=''
692 i_libutil=''
693 i_limits=''
694 i_locale=''
695 i_machcthr=''
696 i_malloc=''
697 i_math=''
698 i_memory=''
699 i_mntent=''
700 i_ndbm=''
701 i_netdb=''
702 i_neterrno=''
703 i_netinettcp=''
704 i_niin=''
705 i_sysin=''
706 i_poll=''
707 i_prot=''
708 i_pthread=''
709 d_pwage=''
710 d_pwchange=''
711 d_pwclass=''
712 d_pwcomment=''
713 d_pwexpire=''
714 d_pwgecos=''
715 d_pwpasswd=''
716 d_pwquota=''
717 i_pwd=''
718 i_sfio=''
719 i_shadow=''
720 i_socks=''
721 i_stddef=''
722 i_stdlib=''
723 i_string=''
724 strings=''
725 i_sunmath=''
726 i_sysaccess=''
727 i_sysdir=''
728 i_sysfile=''
729 d_voidtty=''
730 i_bsdioctl=''
731 i_sysfilio=''
732 i_sysioctl=''
733 i_syssockio=''
734 i_syslog=''
735 i_sysmman=''
736 i_sysmode=''
737 i_sysmount=''
738 i_sysndir=''
739 i_sysparam=''
740 i_sysresrc=''
741 i_syssecrt=''
742 i_sysselct=''
743 i_sysstat=''
744 i_sysstatfs=''
745 i_sysstatvfs=''
746 i_systimes=''
747 i_systypes=''
748 i_sysuio=''
749 i_sysun=''
750 i_sysutsname=''
751 i_sysvfs=''
752 i_syswait=''
753 i_sgtty=''
754 i_termio=''
755 i_termios=''
756 i_systime=''
757 i_systimek=''
758 i_time=''
759 timeincl=''
760 i_unistd=''
761 i_ustat=''
762 i_utime=''
763 i_values=''
764 i_stdarg=''
765 i_varargs=''
766 i_varhdr=''
767 i_vfork=''
768 inc_version_list=''
769 inc_version_list_init=''
770 installprefix=''
771 installprefixexp=''
772 installstyle=''
773 installusrbinperl=''
774 intsize=''
775 longsize=''
776 shortsize=''
777 issymlink=''
778 libc=''
779 ldlibpthname=''
780 libperl=''
781 shrpenv=''
782 useshrplib=''
783 glibpth=''
784 libpth=''
785 loclibpth=''
786 plibpth=''
787 xlibpth=''
788 ignore_versioned_solibs=''
789 libs=''
790 libsdirs=''
791 libsfiles=''
792 libsfound=''
793 libspath=''
794 lns=''
795 d_PRIEUldbl=''
796 d_PRIFUldbl=''
797 d_PRIGUldbl=''
798 d_PRIeldbl=''
799 d_PRIfldbl=''
800 d_PRIgldbl=''
801 d_SCNfldbl=''
802 sPRIEUldbl=''
803 sPRIFUldbl=''
804 sPRIGUldbl=''
805 sPRIeldbl=''
806 sPRIfldbl=''
807 sPRIgldbl=''
808 sSCNfldbl=''
809 lseeksize=''
810 lseektype=''
811 make_set_make=''
812 d_mymalloc=''
813 freetype=''
814 mallocobj=''
815 mallocsrc=''
816 malloctype=''
817 usemymalloc=''
818 installman1dir=''
819 man1dir=''
820 man1direxp=''
821 man1ext=''
822 installman3dir=''
823 man3dir=''
824 man3direxp=''
825 man3ext=''
826 modetype=''
827 multiarch=''
828 mydomain=''
829 myhostname=''
830 phostname=''
831 c=''
832 n=''
833 d_eofnblk=''
834 eagain=''
835 o_nonblock=''
836 rd_nodata=''
837 need_va_copy=''
838 netdb_hlen_type=''
839 netdb_host_type=''
840 netdb_name_type=''
841 netdb_net_type=''
842 groupcat=''
843 hostcat=''
844 passcat=''
845 orderlib=''
846 ranlib=''
847 d_perl_otherlibdirs=''
848 otherlibdirs=''
849 package=''
850 spackage=''
851 pager=''
852 api_revision=''
853 api_subversion=''
854 api_version=''
855 api_versionstring=''
856 patchlevel=''
857 perl_patchlevel=''
858 revision=''
859 subversion=''
860 version=''
861 version_patchlevel_string=''
862 perl5=''
863 perladmin=''
864 perlpath=''
865 d_nv_preserves_uv=''
866 d_nv_preserves_uv_bits=''
867 i16size=''
868 i16type=''
869 i32size=''
870 i32type=''
871 i64size=''
872 i64type=''
873 i8size=''
874 i8type=''
875 ivsize=''
876 ivtype=''
877 nvsize=''
878 nvtype=''
879 u16size=''
880 u16type=''
881 u32size=''
882 u32type=''
883 u64size=''
884 u64type=''
885 u8size=''
886 u8type=''
887 uvsize=''
888 uvtype=''
889 ivdformat=''
890 nvEUformat=''
891 nvFUformat=''
892 nvGUformat=''
893 nveformat=''
894 nvfformat=''
895 nvgformat=''
896 uvXUformat=''
897 uvoformat=''
898 uvuformat=''
899 uvxformat=''
900 pidtype=''
901 prefix=''
902 prefixexp=''
903 installprivlib=''
904 privlib=''
905 privlibexp=''
906 prototype=''
907 ptrsize=''
908 d_PRIXU64=''
909 d_PRId64=''
910 d_PRIi64=''
911 d_PRIo64=''
912 d_PRIu64=''
913 d_PRIx64=''
914 sPRIXU64=''
915 sPRId64=''
916 sPRIi64=''
917 sPRIo64=''
918 sPRIu64=''
919 sPRIx64=''
920 d_quad=''
921 quadkind=''
922 quadtype=''
923 uquadtype=''
924 drand01=''
925 randbits=''
926 randfunc=''
927 randseedtype=''
928 seedfunc=''
929 installscript=''
930 scriptdir=''
931 scriptdirexp=''
932 selectminbits=''
933 selecttype=''
934 sh=''
935 sig_count=''
936 sig_name=''
937 sig_name_init=''
938 sig_num=''
939 sig_num_init=''
940 sig_size=''
941 installsitearch=''
942 sitearch=''
943 sitearchexp=''
944 installsitebin=''
945 sitebin=''
946 sitebinexp=''
947 installsitelib=''
948 sitelib=''
949 sitelib_stem=''
950 sitelibexp=''
951 siteprefix=''
952 siteprefixexp=''
953 sizesize=''
954 sizetype=''
955 so=''
956 socksizetype=''
957 sharpbang=''
958 shsharp=''
959 spitshell=''
960 src=''
961 ssizetype=''
962 startperl=''
963 startsh=''
964 stdchar=''
965 d_stdio_stream_array=''
966 stdio_stream_array=''
967 sysman=''
968 trnl=''
969 uidformat=''
970 uidsign=''
971 uidsize=''
972 uidtype=''
973 archname64=''
974 use64bitall=''
975 use64bitint=''
976 ccflags_uselargefiles=''
977 ldflags_uselargefiles=''
978 libswanted_uselargefiles=''
979 uselargefiles=''
980 uselongdouble=''
981 usemorebits=''
982 usemultiplicity=''
983 nm_opt=''
984 nm_so_opt=''
985 runnm=''
986 usenm=''
987 useperlio=''
988 usesocks=''
989 d_oldpthreads=''
990 use5005threads=''
991 useithreads=''
992 usereentrant=''
993 usethreads=''
994 incpath=''
995 mips_type=''
996 usrinc=''
997 d_vendorarch=''
998 installvendorarch=''
999 vendorarch=''
1000 vendorarchexp=''
1001 d_vendorbin=''
1002 installvendorbin=''
1003 vendorbin=''
1004 vendorbinexp=''
1005 d_vendorlib=''
1006 installvendorlib=''
1007 vendorlib=''
1008 vendorlib_stem=''
1009 vendorlibexp=''
1010 usevendorprefix=''
1011 vendorprefix=''
1012 vendorprefixexp=''
1013 versiononly=''
1014 defvoidused=''
1015 voidflags=''
1016 pm_apiversion=''
1017 xs_apiversion=''
1018 yacc=''
1019 yaccflags=''
1020 CONFIG=''
1021
1022 define='define'
1023 undef='undef'
1024 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1025 rmlist=''
1026
1027 : We must find out about Eunice early
1028 eunicefix=':'
1029 if test -f /etc/unixtovms; then
1030         eunicefix=/etc/unixtovms
1031 fi
1032 if test -f /etc/unixtovms.exe; then
1033         eunicefix=/etc/unixtovms.exe
1034 fi
1035
1036 i_whoami=''
1037 ccname=''
1038 ccversion=''
1039 perllibs=''
1040 : set useposix=false in your hint file to disable the POSIX extension.
1041 useposix=true
1042 : set useopcode=false in your hint file to disable the Opcode extension.
1043 useopcode=true
1044 : Trailing extension.  Override this in a hint file, if needed.
1045 _exe=''
1046 : Extra object files, if any, needed on this platform.
1047 archobjs=''
1048 archname=''
1049 : Possible local include directories to search.
1050 : Set locincpth to "" in a hint file to defeat local include searches.
1051 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1052 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1053 :
1054 : no include file wanted by default
1055 inclwanted=''
1056
1057 groupstype=''
1058 libnames=''
1059 : change the next line if compiling for Xenix/286 on Xenix/386
1060 xlibpth='/usr/lib/386 /lib/386'
1061 : Possible local library directories to search.
1062 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1063 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1064
1065 : general looking path for locating libraries
1066 glibpth="/lib /usr/lib $xlibpth"
1067 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1068 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1069 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1070
1071 : Private path used by Configure to find libraries.  Its value
1072 : is prepended to libpth. This variable takes care of special
1073 : machines, like the mips.  Usually, it should be empty.
1074 plibpth=''
1075
1076 : default library list
1077 libswanted=''
1078 : some systems want to use only the non-versioned libso:s
1079 ignore_versioned_solibs=''
1080 archname64=''
1081 ccflags_uselargefiles=''
1082 ldflags_uselargefiles=''
1083 libswanted_uselargefiles=''
1084 : set usemultiplicity on the Configure command line to enable multiplicity.
1085 : set usesocks on the Configure command line to enable socks.
1086 : set usethreads on the Configure command line to enable threads.
1087 usereentrant='undef'
1088 : full support for void wanted by default
1089 defvoidused=15
1090
1091 : List of libraries we want.
1092 : If anyone needs -lnet, put it in a hint file.
1093 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1094 libswanted="$libswanted dld ld sun m c cposix posix"
1095 libswanted="$libswanted ndir dir crypt sec"
1096 libswanted="$libswanted ucb bsd BSD PW x util"
1097 : We probably want to search /usr/shlib before most other libraries.
1098 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1099 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1100 glibpth="/usr/shlib $glibpth"
1101 : Do not use vfork unless overridden by a hint file.
1102 usevfork=false
1103
1104 : Find the basic shell for Bourne shell scripts
1105 case "$sh" in
1106 '')
1107         case "$SYSTYPE" in
1108         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1109         *) xxx='/bin/sh';;
1110         esac
1111         if test -f "$xxx"; then
1112                 sh="$xxx"
1113         else
1114                 : Build up a list and do a single loop so we can 'break' out.
1115                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1116                 for xxx in sh bash ksh pdksh ash; do
1117                         for p in $pth; do
1118                                 try="$try ${p}/${xxx}"
1119                         done
1120                 done
1121                 for xxx in $try; do
1122                         if test -f "$xxx"; then
1123                                 sh="$xxx";
1124                                 break
1125                         elif test -f "$xxx.exe"; then
1126                                 sh="$xxx";
1127                                 break
1128                         fi
1129                 done
1130         fi
1131         ;;
1132 esac
1133
1134 case "$sh" in
1135 '')     cat >&2 <<EOM
1136 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1137
1138 Usually it's in /bin/sh.  How did you even get this far?
1139 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1140 we'll try to straighten this all out.
1141 EOM
1142         exit 1
1143         ;;
1144 esac
1145
1146 : see if sh knows # comments
1147 if `$sh -c '#' >/dev/null 2>&1`; then
1148         shsharp=true
1149         spitshell=cat
1150         xcat=/bin/cat
1151         test -f $xcat || xcat=/usr/bin/cat
1152         echo "#!$xcat" >sharp
1153         $eunicefix sharp
1154         chmod +x sharp
1155         ./sharp > today
1156         if test -s today; then
1157                 sharpbang='#!'
1158         else
1159                 echo "#! $xcat" > sharp
1160                 $eunicefix sharp
1161                 chmod +x sharp
1162                 ./sharp > today
1163                 if test -s today; then
1164                         sharpbang='#! '
1165                 else
1166                         sharpbang=': use '
1167                 fi
1168         fi
1169 else
1170         echo " "
1171         echo "Your $sh doesn't grok # comments--I will strip them later on."
1172         shsharp=false
1173         cd ..
1174         echo "exec grep -v '^[  ]*#'" >spitshell
1175         chmod +x spitshell
1176         $eunicefix spitshell
1177         spitshell=`pwd`/spitshell
1178         cd UU
1179         echo "I presume that if # doesn't work, #! won't work either!"
1180         sharpbang=': use '
1181 fi
1182 rm -f sharp today
1183
1184 : figure out how to guarantee sh startup
1185 case "$startsh" in
1186 '') startsh=${sharpbang}${sh} ;;
1187 *)
1188 esac
1189 cat >sharp <<EOSS
1190 $startsh
1191 set abc
1192 test "$?abc" != 1
1193 EOSS
1194
1195 chmod +x sharp
1196 $eunicefix sharp
1197 if ./sharp; then
1198         : echo "Yup, it does."
1199 else
1200         echo "Hmm... '$startsh' does not guarantee sh startup..."
1201         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1202 fi
1203 rm -f sharp
1204
1205
1206 : Save command line options in file UU/cmdline.opt for later use in
1207 : generating config.sh.
1208 cat > cmdline.opt <<EOSH
1209 # Configure command line arguments.
1210 config_arg0='$0'
1211 config_args='$*'
1212 config_argc=$#
1213 EOSH
1214 argn=1
1215 args_exp=''
1216 args_sep=''
1217 for arg in "$@"; do
1218         cat >>cmdline.opt <<EOSH
1219 config_arg$argn='$arg'
1220 EOSH
1221         # Extreme backslashitis: replace each ' by '"'"'
1222         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1223 $arg
1224 EOC
1225         arg_exp=`cat cmdl.opt`
1226         args_exp="$args_exp$args_sep'$arg_exp'"
1227         argn=`expr $argn + 1`
1228         args_sep=' '
1229 done
1230 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1231 # used by ./hints/os2.sh
1232 rm -f cmdl.opt
1233
1234 : produce awk script to parse command line options
1235 cat >options.awk <<'EOF'
1236 BEGIN {
1237         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1238
1239         len = length(optstr);
1240         for (i = 1; i <= len; i++) {
1241                 c = substr(optstr, i, 1);
1242                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1243                 if (a == ":") {
1244                         arg[c] = 1;
1245                         i++;
1246                 }
1247                 opt[c] = 1;
1248         }
1249 }
1250 {
1251         expect = 0;
1252         str = $0;
1253         if (substr(str, 1, 1) != "-") {
1254                 printf("'%s'\n", str);
1255                 next;
1256         }
1257         len = length($0);
1258         for (i = 2; i <= len; i++) {
1259                 c = substr(str, i, 1);
1260                 if (!opt[c]) {
1261                         printf("-%s\n", substr(str, i));
1262                         next;
1263                 }
1264                 printf("-%s\n", c);
1265                 if (arg[c]) {
1266                         if (i < len)
1267                                 printf("'%s'\n", substr(str, i + 1));
1268                         else
1269                                 expect = 1;
1270                         next;
1271                 }
1272         }
1273 }
1274 END {
1275         if (expect)
1276                 print "?";
1277 }
1278 EOF
1279
1280 : process the command line options
1281 set X `for arg in "$@"; do echo "X$arg"; done |
1282         sed -e s/X// | awk -f options.awk`
1283 eval "set $*"
1284 shift
1285 rm -f options.awk
1286
1287 : set up default values
1288 fastread=''
1289 reuseval=false
1290 config_sh=''
1291 alldone=''
1292 error=''
1293 silent=''
1294 extractsh=''
1295 override=''
1296 knowitall=''
1297 rm -f optdef.sh posthint.sh
1298 cat >optdef.sh <<EOS
1299 $startsh
1300 EOS
1301
1302
1303 : option parsing
1304 while test $# -gt 0; do
1305         case "$1" in
1306         -d) shift; fastread=yes;;
1307         -e) shift; alldone=cont;;
1308         -f)
1309                 shift
1310                 cd ..
1311                 if test -r "$1"; then
1312                         config_sh="$1"
1313                 else
1314                         echo "$me: cannot read config file $1." >&2
1315                         error=true
1316                 fi
1317                 cd UU
1318                 shift;;
1319         -h) shift; error=true;;
1320         -r) shift; reuseval=true;;
1321         -s) shift; silent=true; realsilent=true;;
1322         -E) shift; alldone=exit;;
1323         -K) shift; knowitall=true;;
1324         -O) shift; override=true;;
1325         -S) shift; silent=true; extractsh=true;;
1326         -D)
1327                 shift
1328                 case "$1" in
1329                 *=)
1330                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1331                         echo "$me: ignoring -D $1" >&2
1332                         ;;
1333                 *=*) echo "$1" | \
1334                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1335                 *) echo "$1='define'" >> optdef.sh;;
1336                 esac
1337                 shift
1338                 ;;
1339         -U)
1340                 shift
1341                 case "$1" in
1342                 *=) echo "$1" >> optdef.sh;;
1343                 *=*)
1344                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1345                         echo "$me: ignoring -U $1" >&2
1346                         ;;
1347                 *) echo "$1='undef'" >> optdef.sh;;
1348                 esac
1349                 shift
1350                 ;;
1351         -A)
1352             shift
1353             xxx=''
1354             yyy="$1"
1355             zzz=''
1356             uuu=undef
1357             case "$yyy" in
1358             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1359                  case "$zzz" in
1360                  *:*) zzz='' ;;
1361                  *)   xxx=append
1362                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1363                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1364                  esac
1365                  ;;
1366             esac
1367             case "$xxx" in
1368             '')  case "$yyy" in
1369                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1370                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1371                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1372                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1373                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1374                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1375                  esac
1376                  ;;       
1377             esac
1378             case "$xxx" in
1379             append)
1380                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1381             clear)
1382                 echo "$yyy=''"                  >> posthint.sh ;;
1383             define)
1384                 case "$zzz" in
1385                 '') zzz=define ;;
1386                 esac
1387                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1388             eval)
1389                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1390             prepend)
1391                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1392             undef)
1393                 case "$zzz" in
1394                 '') zzz="$uuu" ;;
1395                 esac
1396                 echo "$yyy=$zzz"                >> posthint.sh ;;
1397             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1398             esac
1399             shift
1400             ;;
1401         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1402             exit 0;;
1403         --) break;;
1404         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1405         *) break;;
1406         esac
1407 done
1408
1409 case "$error" in
1410 true)
1411         cat >&2 <<EOM
1412 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1413                  [-U symbol] [-U symbol=] [-A command:symbol...]
1414   -d : use defaults for all answers.
1415   -e : go on without questioning past the production of config.sh.
1416   -f : specify an alternate default configuration file.
1417   -h : print this help message and exit (with an error status).
1418   -r : reuse C symbols value if possible (skips costly nm extraction).
1419   -s : silent mode, only echoes questions and essential information.
1420   -D : define symbol to have some value:
1421          -D symbol         symbol gets the value 'define'
1422          -D symbol=value   symbol gets the value 'value'
1423   -E : stop at the end of questions, after having produced config.sh.
1424   -K : do not use unless you know what you are doing.
1425   -O : let -D and -U override definitions from loaded configuration file.
1426   -S : perform variable substitutions on all .SH files (can mix with -f)
1427   -U : undefine symbol:
1428          -U symbol    symbol gets the value 'undef'
1429          -U symbol=   symbol gets completely empty
1430   -A : manipulate symbol after the platform specific hints have been applied:
1431          -A symbol=value                append " "value to symbol
1432          -A append:symbol=value         append value to symbol
1433          -A define:symbol=value         define symbol to have value
1434          -A clear:symbol                define symbol to be ''
1435          -A define:symbol               define symbol to be 'define'
1436          -A eval:symbol=value           define symbol to be eval of value
1437          -A prepend:symbol=value        prepend value to symbol
1438          -A undef:symbol                define symbol to be 'undef'
1439          -A undef:symbol=               define symbol to be ''
1440   -V : print version number and exit (with a zero status).
1441 EOM
1442         exit 1
1443         ;;
1444 esac
1445
1446 : Sanity checks
1447 case "$fastread$alldone" in
1448 yescont|yesexit) ;;
1449 *)
1450         case "$extractsh" in
1451         true) ;;
1452         *)
1453                 if test ! -t 0; then
1454                         echo "Say 'sh Configure', not 'sh <Configure'"
1455                         exit 1
1456                 fi
1457                 ;;
1458         esac
1459         ;;
1460 esac
1461
1462 exec 4>&1
1463 case "$silent" in
1464 true) exec 1>/dev/null;;
1465 esac
1466
1467 : run the defines and the undefines, if any, but leave the file out there...
1468 touch optdef.sh
1469 . ./optdef.sh
1470 : create the posthint manipulation script and leave the file out there...
1471 touch posthint.sh
1472
1473 : set package name
1474 package=perl5
1475 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1476 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1477 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1478 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1479 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1480 esac
1481
1482 : Some greps do not return status, grrr.
1483 echo "grimblepritz" >grimble
1484 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1485         contains=contains
1486 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1487         contains=grep
1488 else
1489         contains=contains
1490 fi
1491 rm -f grimble
1492 : the following should work in any shell
1493 case "$contains" in
1494 contains*)
1495         echo " "
1496         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1497         cat >contains <<'EOSS'
1498 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1499 EOSS
1500 chmod +x contains
1501 esac
1502
1503 : Find the path to the source tree
1504 case "$src" in
1505 '') case "$0" in
1506     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1507          case "$src" in
1508          /*)    ;;
1509          .)     ;;
1510          *)     src=`cd ../$src && pwd` ;;
1511          esac
1512          ;;
1513     *)   src='.';;
1514     esac;;
1515 esac
1516 case "$src" in
1517 '')     src=/
1518         rsrc=/
1519         ;;
1520 /*) rsrc="$src";;
1521 *) rsrc="../$src";;
1522 esac
1523 if test -f $rsrc/Configure && \
1524         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1525 then
1526    : found it, so we are ok.
1527 else
1528         rsrc=''
1529         for src in . .. ../.. ../../.. ../../../..; do
1530                 if test -f ../$src/Configure && \
1531                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1532                 then
1533                         rsrc=../$src
1534                         break
1535                 fi
1536         done
1537 fi
1538 case "$rsrc" in
1539 '')
1540         cat <<EOM >&4
1541
1542 Sorry, I can't seem to locate the source dir for $package.  Please start
1543 Configure with an explicit path -- i.e. /some/path/Configure.
1544
1545 EOM
1546         exit 1
1547         ;;
1548 ../.)   rsrc='..';;
1549 *)
1550         echo " "
1551         echo "Sources for $package found in \"$src\"." >&4
1552         ;;
1553 esac
1554
1555 : script used to extract .SH files with variable substitutions
1556 cat >extract <<'EOS'
1557 PERL_CONFIG_SH=true
1558 echo "Doing variable substitutions on .SH files..."
1559 if test -f MANIFEST; then
1560         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1561 else
1562         echo "(Looking for .SH files under the source directory.)"
1563         set x `(cd $src; find . -name "*.SH" -print)`
1564 fi
1565 shift
1566 case $# in
1567 0) set x `(cd $src; echo *.SH)`; shift;;
1568 esac
1569 if test ! -f $src/$1; then
1570         shift
1571 fi
1572 mkdir_p='
1573 name=$1;
1574 create="";
1575 while test $name; do
1576         if test ! -d "$name"; then
1577                 create="$name $create";
1578                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1579                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1580         else
1581                 name="";
1582         fi;
1583 done;
1584 for file in $create; do
1585         mkdir $file;
1586 done
1587 '
1588 for file in $*; do
1589         case "$src" in
1590         ".")
1591                 case "$file" in
1592                 */*)
1593                         dir=`expr X$file : 'X\(.*\)/'`
1594                         file=`expr X$file : 'X.*/\(.*\)'`
1595                         (cd $dir && . ./$file)
1596                         ;;
1597                 *)
1598                         . ./$file
1599                         ;;
1600                 esac
1601                 ;;
1602         *)
1603                 case "$file" in
1604                 */*)
1605                         dir=`expr X$file : 'X\(.*\)/'`
1606                         file=`expr X$file : 'X.*/\(.*\)'`
1607                         (set x $dir; shift; eval $mkdir_p)
1608                         sh <$src/$dir/$file
1609                         ;;
1610                 *)
1611                         sh <$src/$file
1612                         ;;
1613                 esac
1614                 ;;
1615         esac
1616 done
1617 if test -f $src/config_h.SH; then
1618         if test ! -f config.h; then
1619         : oops, they left it out of MANIFEST, probably, so do it anyway.
1620         . $src/config_h.SH
1621         fi
1622 fi
1623 EOS
1624
1625 : extract files and exit if asked to do so
1626 case "$extractsh" in
1627 true)
1628         case "$realsilent" in
1629         true) ;;
1630         *) exec 1>&4;;
1631         esac
1632         case "$config_sh" in
1633         '') config_sh='config.sh';;
1634         esac
1635         echo " "
1636         echo "Fetching answers from $config_sh..."
1637         cd ..
1638         . $config_sh
1639         test "$override" && . ./optdef.sh
1640         echo " "
1641         . UU/extract
1642         rm -rf UU
1643         echo "Extraction done."
1644         exit 0
1645         ;;
1646 esac
1647
1648 : Eunice requires " " instead of "", can you believe it
1649 echo " "
1650 : Here we go...
1651 echo "Beginning of configuration questions for $package."
1652
1653 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1654
1655 : first determine how to suppress newline on echo command
1656 echo " "
1657 echo "Checking echo to see how to suppress newlines..."
1658 (echo "hi there\c" ; echo " ") >.echotmp
1659 if $contains c .echotmp >/dev/null 2>&1 ; then
1660         echo "...using -n."
1661         n='-n'
1662         c=''
1663 else
1664         cat <<'EOM'
1665 ...using \c
1666 EOM
1667         n=''
1668         c='\c'
1669 fi
1670 echo $n "The star should be here-->$c"
1671 echo '*'
1672 rm -f .echotmp
1673
1674 : Now test for existence of everything in MANIFEST
1675 echo " "
1676 if test -f $rsrc/MANIFEST; then
1677         echo "First let's make sure your kit is complete.  Checking..." >&4
1678         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1679         rm -f missing
1680         tmppwd=`pwd`
1681         for filelist in x??; do
1682                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1683         done
1684         if test -s missing; then
1685                 cat missing >&4
1686                 cat >&4 <<'EOM'
1687
1688 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1689
1690 You have the option of continuing the configuration process, despite the
1691 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1692 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1693 and contact the author (perlbug@perl.org).
1694
1695 EOM
1696                 echo $n "Continue? [n] $c" >&4
1697                 read ans
1698                 case "$ans" in
1699                 y*)
1700                         echo "Continuing..." >&4
1701                         rm -f missing
1702                         ;;
1703                 *)
1704                         echo "ABORTING..." >&4
1705                         kill $$
1706                         ;;
1707                 esac
1708         else
1709                 echo "Looks good..."
1710         fi
1711 else
1712         echo "There is no MANIFEST file.  I hope your kit is complete !"
1713 fi
1714 rm -f missing x??
1715
1716 echo " "
1717 : Find the appropriate value for a newline for tr
1718 if test -n "$DJGPP"; then
1719        trnl='\012'
1720 fi
1721 if test X"$trnl" = X; then
1722         case "`echo foo|tr '\n' x 2>/dev/null`" in
1723         foox) trnl='\n' ;;
1724         esac
1725 fi
1726 if test X"$trnl" = X; then
1727         case "`echo foo|tr '\012' x 2>/dev/null`" in
1728         foox) trnl='\012' ;;
1729         esac
1730 fi
1731 if test X"$trnl" = X; then
1732         cat <<EOM >&2
1733
1734 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1735
1736 EOM
1737         exit 1
1738 fi
1739
1740 : compute the number of columns on the terminal for proper question formatting
1741 case "$COLUMNS" in
1742 '') COLUMNS='80';;
1743 esac
1744
1745 : set up the echo used in my read
1746 myecho="case \"\$xxxm\" in
1747 '') echo $n \"\$rp $c\" >&4;;
1748 *) case \"\$rp\" in
1749         '') echo $n \"[\$xxxm] $c\";;
1750         *)
1751                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1752                         echo \"\$rp\" >&4
1753                         echo $n \"[\$xxxm] $c\" >&4
1754                 else
1755                         echo $n \"\$rp [\$xxxm] $c\" >&4
1756                 fi
1757                 ;;
1758         esac;;
1759 esac"
1760
1761 : now set up to do reads with possible shell escape and default assignment
1762 cat <<EOSC >myread
1763 $startsh
1764 xxxm=\$dflt
1765 $myecho
1766 ans='!'
1767 case "\$fastread" in
1768 yes) case "\$dflt" in
1769         '') ;;
1770         *) ans='';
1771                 case "\$silent-\$rp" in
1772                 true-) ;;
1773                 *) echo " " >&4;;
1774                 esac;;
1775         esac;;
1776 *) case "\$silent" in
1777         true) case "\$rp" in
1778                 '') ans='';;
1779                 esac;;
1780         esac;;
1781 esac
1782 while expr "X\$ans" : "X!" >/dev/null; do
1783         read answ
1784         set x \$xxxm
1785         shift
1786         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1787         case  "\$answ" in
1788         "!")
1789                 sh 1>&4
1790                 echo " "
1791                 $myecho
1792                 ;;
1793         !*)
1794                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1795                 shift
1796                 sh 1>&4 -c "\$*"
1797                 echo " "
1798                 $myecho
1799                 ;;
1800         "\$ans")
1801                 case "\$ans" in
1802                 \\&*)
1803                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1804                         shift
1805                         case "\$1" in
1806                         -d)
1807                                 fastread=yes
1808                                 echo "(OK, I'll run with -d after this question.)" >&4
1809                                 ;;
1810                         -*)
1811                                 echo "*** Sorry, \$1 not supported yet." >&4
1812                                 ;;
1813                         esac
1814                         $myecho
1815                         ans=!
1816                         ;;
1817                 esac;;
1818         *)
1819                 case "\$aok" in
1820                 y)
1821                         echo "*** Substitution done -- please confirm."
1822                         xxxm="\$ans"
1823                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1824                         xxxm="\$ans"
1825                         ans=!
1826                         ;;
1827                 *)
1828                         echo "*** Error -- try again."
1829                         ans=!
1830                         ;;
1831                 esac
1832                 $myecho
1833                 ;;
1834         esac
1835         case "\$ans\$xxxm\$nostick" in
1836         '')
1837                 ans=!
1838                 $myecho
1839                 ;;
1840         esac
1841 done
1842 case "\$ans" in
1843 '') ans="\$xxxm";;
1844 esac
1845 EOSC
1846
1847 : create .config dir to save info across Configure sessions
1848 test -d ../.config || mkdir ../.config
1849 cat >../.config/README <<EOF
1850 This directory created by Configure to save information that should
1851 persist across sessions for $package.
1852
1853 You may safely delete it if you wish.
1854 EOF
1855
1856 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1857 case "$usedevel" in
1858 $define|true|[yY]*) ;;
1859 *) case "$xversion" in
1860    *[13579])
1861         cat >&4 <<EOH
1862 *** WHOA THERE!!! ***
1863
1864     This is an UNSTABLE DEVELOPMENT release.
1865     The version of this $package distribution is $xversion, that is, odd,
1866     (as opposed to even) and that signifies a development release.
1867     If you want a maintenance release, you want an even-numbered version.
1868
1869     Do ***NOT*** install this into production use.
1870     Data corruption and crashes are possible.
1871
1872     It is most seriously suggested that you do not continue any further
1873     unless you want to help in developing and debugging Perl.
1874
1875     If you *still* want to build perl, you can answer 'y' now,
1876     or pass -Dusedevel to Configure.
1877
1878 EOH
1879         rp='Do you really want to continue?'
1880         dflt='n'
1881         . ./myread
1882         case "$ans" in
1883         [yY]) echo >&4 "Okay, continuing."
1884               usedevel="$define" ;;
1885         *) echo >&4 "Okay, bye."
1886            exit 1
1887            ;;
1888         esac
1889         ;;
1890     esac
1891     ;;
1892 esac
1893 case "$usedevel" in
1894 $define|true|[yY]*)
1895         case "$versiononly" in
1896         '') versiononly="$define" ;;
1897         esac
1898         case "$installusrbinperl" in
1899         '') installusrbinperl="$undef" ;;
1900         esac
1901         ;;
1902 esac
1903
1904 : general instructions
1905 needman=true
1906 firsttime=true
1907 user=`(logname) 2>/dev/null`
1908 case "$user" in
1909 '') user=`whoami 2>&1`;;
1910 esac
1911 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1912         firsttime=false
1913         echo " "
1914         rp='Would you like to see the instructions?'
1915         dflt=n
1916         . ./myread
1917         case "$ans" in
1918         [yY]*) ;;
1919         *) needman=false;;
1920         esac
1921 fi
1922 if $needman; then
1923         cat <<EOH
1924
1925 This installation shell script will examine your system and ask you questions
1926 to determine how the perl5 package should be installed. If you get
1927 stuck on a question, you may use a ! shell escape to start a subshell or
1928 execute a command.  Many of the questions will have default answers in square
1929 brackets; typing carriage return will give you the default.
1930
1931 On some of the questions which ask for file or directory names you are allowed
1932 to use the ~name construct to specify the login directory belonging to "name",
1933 even if you don't have a shell which knows about that.  Questions where this is
1934 allowed will be marked "(~name ok)".
1935
1936 EOH
1937         rp=''
1938         dflt='Type carriage return to continue'
1939         . ./myread
1940         cat <<'EOH'
1941
1942 The prompter used in this script allows you to use shell variables and
1943 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1944 in the default answer, as if the default line was a set of arguments given to a
1945 script shell.  This means you may also use $* to repeat the whole default line,
1946 so you do not have to re-type everything to add something to the default.
1947
1948 Everytime there is a substitution, you will have to confirm.  If there is an
1949 error (e.g. an unmatched backtick), the default answer will remain unchanged
1950 and you will be prompted again.
1951
1952 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1953 the questions and use the computed defaults (or the previous answers if there
1954 was already a config.sh file). Type 'Configure -h' for a list of options.
1955 You may also start interactively and then answer '& -d' at any prompt to turn
1956 on the non-interactive behaviour for the remainder of the execution.
1957
1958 EOH
1959         . ./myread
1960         cat <<EOH
1961
1962 Much effort has been expended to ensure that this shell script will run on any
1963 Unix system.  If despite that it blows up on yours, your best bet is to edit
1964 Configure and run it again.  If you can't run Configure for some reason,
1965 you'll have to generate a config.sh file by hand.  Whatever problems you
1966 have, let me (perlbug@perl.org) know how I blew it.
1967
1968 This installation script affects things in two ways:
1969
1970 1) it may do direct variable substitutions on some of the files included
1971    in this kit.
1972 2) it builds a config.h file for inclusion in C programs.  You may edit
1973    any of these files as the need arises after running this script.
1974
1975 If you make a mistake on a question, there is no easy way to back up to it
1976 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1977 files.  Configure will offer to let you do this before it runs the SH files.
1978
1979 EOH
1980         dflt='Type carriage return to continue'
1981         . ./myread
1982         case "$firsttime" in
1983         true) echo $user >>../.config/instruct;;
1984         esac
1985 fi
1986
1987 : find out where common programs are
1988 echo " "
1989 echo "Locating common programs..." >&4
1990 cat <<EOSC >loc
1991 $startsh
1992 case \$# in
1993 0) exit 1;;
1994 esac
1995 thing=\$1
1996 shift
1997 dflt=\$1
1998 shift
1999 for dir in \$*; do
2000         case "\$thing" in
2001         .)
2002         if test -d \$dir/\$thing; then
2003                 echo \$dir
2004                 exit 0
2005         fi
2006         ;;
2007         *)
2008         for thisthing in \$dir/\$thing; do
2009                 : just loop through to pick last item
2010         done
2011         if test -f \$thisthing; then
2012                 echo \$thisthing
2013                 exit 0
2014         elif test -f \$dir/\$thing.exe; then
2015                 if test -n "$DJGPP"; then
2016                         echo \$dir/\$thing.exe
2017                 else
2018                         : on Eunice apparently
2019                         echo \$dir/\$thing
2020                 fi
2021                 exit 0
2022         fi
2023         ;;
2024         esac
2025 done
2026 echo \$dflt
2027 exit 1
2028 EOSC
2029 chmod +x loc
2030 $eunicefix loc
2031 loclist="
2032 awk
2033 cat
2034 chmod
2035 comm
2036 cp
2037 echo
2038 expr
2039 grep
2040 ls
2041 make
2042 mkdir
2043 rm
2044 sed
2045 sort
2046 touch
2047 tr
2048 uniq
2049 "
2050 trylist="
2051 Mcc
2052 ar
2053 bison
2054 byacc
2055 cpp
2056 csh
2057 date
2058 egrep
2059 gzip
2060 less
2061 ln
2062 more
2063 nm
2064 nroff
2065 pg
2066 test
2067 uname
2068 zip
2069 "
2070 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2071 pth="$pth /lib /usr/lib"
2072 for file in $loclist; do
2073         eval xxx=\$$file
2074         case "$xxx" in
2075         /*|?:[\\/]*)
2076                 if test -f "$xxx"; then
2077                         : ok
2078                 else
2079                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2080                         xxx=`./loc $file $file $pth`
2081                 fi
2082                 ;;
2083         '') xxx=`./loc $file $file $pth`;;
2084         *) xxx=`./loc $xxx $xxx $pth`;;
2085         esac
2086         eval $file=$xxx
2087         eval _$file=$xxx
2088         case "$xxx" in
2089         /*)
2090                 echo $file is in $xxx.
2091                 ;;
2092         ?:[\\/]*)
2093                 echo $file is in $xxx.
2094                 ;;
2095         *)
2096                 echo "I don't know where '$file' is, and my life depends on it." >&4
2097                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2098                 exit 1
2099                 ;;
2100         esac
2101 done
2102 echo " "
2103 echo "Don't worry if any of the following aren't found..."
2104 say=offhand
2105 for file in $trylist; do
2106         eval xxx=\$$file
2107         case "$xxx" in
2108         /*|?:[\\/]*)
2109                 if test -f "$xxx"; then
2110                         : ok
2111                 else
2112                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2113                         xxx=`./loc $file $file $pth`
2114                 fi
2115                 ;;
2116         '') xxx=`./loc $file $file $pth`;;
2117         *) xxx=`./loc $xxx $xxx $pth`;;
2118         esac
2119         eval $file=$xxx
2120         eval _$file=$xxx
2121         case "$xxx" in
2122         /*)
2123                 echo $file is in $xxx.
2124                 ;;
2125         ?:[\\/]*)
2126                 echo $file is in $xxx.
2127                 ;;
2128         *)
2129                 echo "I don't see $file out there, $say."
2130                 say=either
2131                 ;;
2132         esac
2133 done
2134 case "$egrep" in
2135 egrep)
2136         echo "Substituting grep for egrep."
2137         egrep=$grep
2138         ;;
2139 esac
2140 case "$ln" in
2141 ln)
2142         echo "Substituting cp for ln."
2143         ln=$cp
2144         ;;
2145 esac
2146 case "$test" in
2147 test)
2148         echo "Hopefully test is built into your sh."
2149         ;;
2150 *)
2151         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2152                 echo "Using the test built into your sh."
2153                 test=test
2154                 _test=test
2155         fi
2156         ;;
2157 esac
2158 case "$echo" in
2159 echo)
2160         echo "Hopefully echo is built into your sh."
2161         ;;
2162 '') ;;
2163 *)
2164         echo " "
2165 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2166         $echo $n "hi there$c" >foo1
2167         echo $n "hi there$c" >foo2
2168         if cmp foo1 foo2 >/dev/null 2>&1; then
2169                 echo "They are compatible.  In fact, they may be identical."
2170         else
2171                 case "$n" in
2172                 '-n') n='' c='\c';;
2173                 *) n='-n' c='';;
2174                 esac
2175                 cat <<FOO
2176 They are not compatible!  You are probably running ksh on a non-USG system.
2177 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2178 have echo built in and we may have to run some Bourne shell scripts.  That
2179 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2180
2181 FOO
2182                 $echo $n "The star should be here-->$c"
2183                 $echo "*"
2184         fi
2185         $rm -f foo1 foo2
2186         ;;
2187 esac
2188
2189 cat <<EOS >checkcc
2190 $startsh
2191 EOS
2192 cat <<'EOSC' >>checkcc
2193 case "$cc" in
2194 '') ;;
2195 *)  $rm -f try try.*
2196     $cat >try.c <<EOM
2197 int main(int argc, char *argv[]) {
2198   return 0;
2199 }
2200 EOM
2201     if $cc -o try $ccflags $ldflags try.c; then
2202        :
2203     else
2204         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2205         despair=yes
2206         trygcc=yes
2207         case "$cc" in
2208         *gcc*) trygcc=no ;;
2209         esac
2210         case "`$cc -v -c try.c 2>&1`" in
2211         *gcc*) trygcc=no ;;
2212         esac
2213         if $test X"$trygcc" = Xyes; then
2214             if gcc -o try -c try.c; then
2215                 echo " "
2216                 echo "You seem to have a working gcc, though." >&4
2217                 rp="Would you like to use it?"
2218                 dflt=y
2219                 if $test -f myread; then
2220                     . ./myread
2221                 else
2222                     if $test -f UU/myread; then
2223                         . ./UU/myread
2224                     else
2225                         echo "Cannot find myread, sorry.  Aborting." >&2
2226                         exit 1
2227                     fi
2228                 fi  
2229                 case "$ans" in
2230                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2231                 esac
2232             fi
2233         fi
2234         if $test X"$despair" = Xyes; then
2235             $cat >&4 <<EOM
2236 You need to find a working C compiler.
2237 Either (purchase and) install the C compiler supplied by your OS vendor,
2238 or for a free C compiler try http://gcc.gnu.org/
2239 I cannot continue any further, aborting.
2240 EOM
2241             exit 1
2242         fi
2243     fi
2244     $rm -f try try.*
2245     ;;
2246 esac
2247 EOSC
2248
2249 : determine whether symbolic links are supported
2250 echo " "
2251 $touch blurfl
2252 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2253         echo "Symbolic links are supported." >&4
2254         lns="$ln -s"
2255 else
2256         echo "Symbolic links are NOT supported." >&4
2257         lns="$ln"
2258 fi
2259 $rm -f blurfl sym
2260
2261 : determine whether symbolic links are supported
2262 echo " "
2263 case "$lns" in
2264 *"ln -s")
2265         echo "Checking how to test for symbolic links..." >&4
2266         $lns blurfl sym
2267         if $test "X$issymlink" = X; then
2268                 case "$newsh" in
2269                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2270                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2271                 esac
2272                 if test $? = 0; then
2273                         issymlink="test -h"
2274                 else
2275                         echo "Your builtin 'test -h' may be broken." >&4
2276                         case "$test" in
2277                         /*)     ;;
2278                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2279                                 for p in $pth
2280                                 do
2281                                         if test -f "$p/$test"; then
2282                                                 test="$p/$test"
2283                                                 break
2284                                         fi
2285                                 done
2286                                 ;;
2287                         esac
2288                         case "$test" in
2289                         /*)
2290                                 echo "Trying external '$test -h'." >&4
2291                                 issymlink="$test -h"
2292                                 if $test ! -h sym >/dev/null 2>&1; then
2293                                         echo "External '$test -h' is broken, too." >& 4
2294                                         issymlink=''
2295                                 fi
2296                                 ;;
2297                         *)      issymlink='' ;;
2298                         esac
2299                 fi              
2300         fi
2301         if $test "X$issymlink" = X; then
2302                 if $test -L sym 2>/dev/null; then
2303                         issymlink="$test -L"
2304                         echo "The builtin '$test -L' worked." >&4
2305                 fi
2306         fi
2307         if $test "X$issymlink" != X; then
2308                 echo "You can test for symbolic links with '$issymlink'." >&4
2309         else
2310                 echo "I do not know how you can test for symbolic links." >&4
2311         fi
2312         $rm -f blurfl sym
2313         ;;
2314 *)      echo "No symbolic links, so not testing for their testing..." >&4
2315         ;;
2316 esac
2317 echo " "
2318
2319
2320 case "$mksymlinks" in
2321 $define|true|[yY]*)
2322         case "$src" in
2323         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2324                 exit 1
2325                 ;;
2326         *)      case "$lns:$issymlink" in
2327                 *"ln -s:"*"test -"?)
2328                         echo "Creating the symbolic links..." >&4
2329                         echo "(First creating the subdirectories...)" >&4
2330                         cd ..
2331                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2332                                 read directory
2333                                 test -z "$directory" && break
2334                                 mkdir -p $directory
2335                         done
2336                         # Sanity check 1.
2337                         if test ! -d t/base; then
2338                                 echo "Failed to create the subdirectories.  Aborting." >&4
2339                                 exit 1
2340                         fi
2341                         echo "(Then creating the symlinks...)" >&4
2342                         awk '{print $1}' $src/MANIFEST | while true; do
2343                                 read filename
2344                                 test -z "$filename" && break
2345                                 if test -f $filename; then
2346                                         if $issymlink $filename; then
2347                                                 rm -f $filename
2348                                         fi
2349                                 fi
2350                                 if test -f $filename; then
2351                                         echo "$filename already exists, not symlinking."
2352                                 else
2353                                         ln -s $src/$filename $filename
2354                                 fi
2355                         done
2356                         # Sanity check 2.
2357                         if test ! -f t/base/lex.t; then
2358                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2359                                 exit 1
2360                         fi
2361                         cd UU
2362                         ;;
2363                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2364                         ;;
2365                 esac
2366                 ;;
2367         esac
2368         ;;
2369 esac
2370
2371
2372 case "$usecrosscompile" in
2373 $define|true|[yY]*)
2374         $echo "Cross-compiling..."
2375         croak=''
2376         case "$cc" in
2377         *-*-gcc) # A cross-compiling gcc, probably.
2378             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2379             ar=$targetarch-ar
2380             # leave out ld, choosing it is more complex
2381             nm=$targetarch-nm
2382             ranlib=$targetarch-ranlib
2383             $echo 'extern int foo;' > try.c
2384             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2385             shift
2386             if $test $# -gt 0; then
2387                 incpth="$incpth $*"
2388                 incpth="`$echo $incpth|$sed 's/^ //'`"
2389                 echo "Guessing incpth '$incpth'." >&4
2390                 for i in $*; do
2391                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2392                     if $test -d $j; then
2393                         libpth="$libpth $j"
2394                     fi
2395                 done   
2396                 libpth="`$echo $libpth|$sed 's/^ //'`"
2397                 echo "Guessing libpth '$libpth'." >&4
2398             fi
2399             $rm -f try.c
2400             ;;
2401         esac
2402         case "$targetarch" in
2403         '') echo "Targetarch not defined." >&4; croak=y ;;
2404         *)  echo "Using targetarch $targetarch." >&4 ;;
2405         esac
2406         case "$incpth" in
2407         '') echo "Incpth not defined." >&4; croak=y ;;
2408         *)  echo "Using incpth '$incpth'." >&4 ;;
2409         esac
2410         case "$libpth" in
2411         '') echo "Libpth not defined." >&4; croak=y ;;
2412         *)  echo "Using libpth '$libpth'." >&4 ;;
2413         esac
2414         case "$usrinc" in
2415         '') for i in $incpth; do
2416                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2417                     usrinc=$i
2418                     echo "Guessing usrinc $usrinc." >&4
2419                     break
2420                 fi
2421             done
2422             case "$usrinc" in
2423             '') echo "Usrinc not defined." >&4; croak=y ;;
2424             esac
2425             ;;
2426         *)  echo "Using usrinc $usrinc." >&4 ;;
2427         esac
2428         case "$targethost" in
2429         '') echo "Targethost not defined." >&4; croak=y ;;
2430         *)  echo "Using targethost $targethost." >&4
2431         esac
2432         locincpth=' '
2433         loclibpth=' '
2434         case "$croak" in
2435         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2436         esac
2437         case "$src" in
2438         /*) run=$src/Cross/run
2439             targetmkdir=$src/Cross/mkdir
2440             to=$src/Cross/to
2441             from=$src/Cross/from
2442             ;;
2443         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2444             run=$pwd/Cross/run
2445             targetmkdir=$pwd/Cross/mkdir
2446             to=$pwd/Cross/to
2447             from=$pwd/Cross/from
2448             ;;
2449         esac
2450         case "$targetrun" in
2451         '') targetrun=ssh ;;
2452         esac
2453         case "$targetto" in
2454         '') targetto=scp ;;
2455         esac
2456         case "$targetfrom" in
2457         '') targetfrom=scp ;;
2458         esac
2459         run=$run-$targetrun
2460         to=$to-$targetto
2461         from=$from-$targetfrom
2462         case "$targetdir" in
2463         '')  targetdir=/tmp
2464              echo "Guessing targetdir $targetdir." >&4
2465              ;;
2466         esac
2467         case "$targetuser" in
2468         '')  targetuser=root
2469              echo "Guessing targetuser $targetuser." >&4
2470              ;;
2471         esac
2472         case "$targetfrom" in
2473         scp)    q=-q ;;
2474         *)      q='' ;;
2475         esac
2476         case "$targetrun" in
2477         ssh|rsh)
2478             cat >$run <<EOF
2479 #!/bin/sh
2480 case "\$1" in
2481 -cwd)
2482   shift
2483   cwd=\$1
2484   shift
2485   ;;
2486 esac
2487 case "\$cwd" in
2488 '') cwd=$targetdir ;;
2489 esac
2490 exe=\$1
2491 shift
2492 if $test ! -f \$exe.xok; then
2493   $to \$exe
2494   $touch \$exe.xok
2495 fi
2496 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2497 EOF
2498             ;;
2499         *)  echo "Unknown targetrun '$targetrun'" >&4
2500             exit 1
2501             ;;
2502         esac
2503         case "$targetmkdir" in
2504         */Cross/mkdir)
2505             cat >$targetmkdir <<EOF
2506 #!/bin/sh
2507 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2508 EOF
2509             $chmod a+rx $targetmkdir
2510             ;;
2511         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2512             exit 1
2513             ;;
2514         esac
2515         case "$targetto" in
2516         scp|rcp)
2517             cat >$to <<EOF
2518 #!/bin/sh
2519 for f in \$@
2520 do
2521   case "\$f" in
2522   /*)
2523     $targetmkdir \`dirname \$f\`
2524     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2525     ;;
2526   *)
2527     $targetmkdir $targetdir/\`dirname \$f\`
2528     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2529     ;;
2530   esac
2531 done
2532 exit 0
2533 EOF
2534             ;;
2535         cp) cat >$to <<EOF
2536 #!/bin/sh
2537 for f in \$@
2538 do
2539   case "\$f" in
2540   /*)
2541     $mkdir -p $targetdir/\`dirname \$f\`
2542     $cp \$f $targetdir/\$f || exit 1
2543     ;;
2544   *)
2545     $targetmkdir $targetdir/\`dirname \$f\`
2546     $cp \$f $targetdir/\$f || exit 1
2547     ;;
2548   esac
2549 done
2550 exit 0
2551 EOF
2552             ;;
2553         *)  echo "Unknown targetto '$targetto'" >&4
2554             exit 1
2555             ;;
2556         esac
2557         case "$targetfrom" in
2558         scp|rcp)
2559           cat >$from <<EOF
2560 #!/bin/sh
2561 for f in \$@
2562 do
2563   $rm -f \$f
2564   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2565 done
2566 exit 0
2567 EOF
2568             ;;
2569         cp) cat >$from <<EOF
2570 #!/bin/sh
2571 for f in \$@
2572 do
2573   $rm -f \$f
2574   cp $targetdir/\$f . || exit 1
2575 done
2576 exit 0
2577 EOF
2578             ;;
2579         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2580             exit 1
2581             ;;
2582         esac
2583         if $test ! -f $run; then
2584             echo "Target 'run' script '$run' not found." >&4
2585         else
2586             $chmod a+rx $run
2587         fi
2588         if $test ! -f $to; then
2589             echo "Target 'to' script '$to' not found." >&4
2590         else
2591             $chmod a+rx $to
2592         fi
2593         if $test ! -f $from; then
2594             echo "Target 'from' script '$from' not found." >&4
2595         else
2596             $chmod a+rx $from
2597         fi
2598         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2599             exit 1
2600         fi
2601         cat >&4 <<EOF
2602 Using '$run' for remote execution,
2603 and '$from' and '$to'
2604 for remote file transfer.
2605 EOF
2606         ;;
2607 *)      run=''
2608         to=:
2609         from=:
2610         usecrosscompile='undef'
2611         targetarch=''
2612         ;;
2613 esac
2614
2615 : see whether [:lower:] and [:upper:] are supported character classes
2616 echo " "
2617 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2618 ABYZ)
2619         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2620         up='[:upper:]'
2621         low='[:lower:]'
2622         ;;
2623 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2624         # (0xc9 and 0xd1), therefore that is a nice testing point.
2625         if test "X$up" = X -o "X$low" = X; then
2626             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2627             ij) up='[A-Z]'
2628                 low='[a-z]'
2629                 ;;
2630             esac
2631         fi
2632         if test "X$up" = X -o "X$low" = X; then
2633             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2634             ij) up='A-Z'
2635                 low='a-z'
2636                 ;;
2637             esac
2638         fi
2639         if test "X$up" = X -o "X$low" = X; then
2640             case "`echo IJ | od -x 2>/dev/null`" in
2641             *C9D1*|*c9d1*)
2642                 echo "Hey, this might be EBCDIC." >&4
2643                 if test "X$up" = X -o "X$low" = X; then
2644                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2645                     ij) up='[A-IJ-RS-Z]'
2646                         low='[a-ij-rs-z]'
2647                         ;;
2648                     esac
2649                 fi
2650                 if test "X$up" = X -o "X$low" = X; then
2651                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2652                     ij) up='A-IJ-RS-Z'
2653                         low='a-ij-rs-z'
2654                         ;;
2655                     esac
2656                 fi
2657                 ;;
2658             esac
2659         fi
2660 esac
2661 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2662 ij)
2663     echo "Using $up and $low to convert case." >&4
2664     ;;
2665 *)
2666     echo "I don't know how to translate letters from upper to lower case." >&4
2667     echo "Your tr is not acting any way I know of." >&4
2668     exit 1
2669     ;;
2670 esac
2671 : set up the translation script tr, must be called with ./tr of course
2672 cat >tr <<EOSC
2673 $startsh
2674 case "\$1\$2" in
2675 '[A-Z][a-z]') exec $tr '$up' '$low';;
2676 '[a-z][A-Z]') exec $tr '$low' '$up';;
2677 esac
2678 exec $tr "\$@"
2679 EOSC
2680 chmod +x tr
2681 $eunicefix tr
2682
2683 : Try to determine whether config.sh was made on this system
2684 case "$config_sh" in
2685 '')
2686 myuname=`$uname -a 2>/dev/null`
2687 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2688 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2689 # because the A-Z/a-z are not consecutive.
2690 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2691         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2692 newmyuname="$myuname"
2693 dflt=n
2694 case "$knowitall" in
2695 '')
2696         if test -f ../config.sh; then
2697                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2698                         eval "`grep myuname= ../config.sh`"
2699                 fi
2700                 if test "X$myuname" = "X$newmyuname"; then
2701                         dflt=y
2702                 fi
2703         fi
2704         ;;
2705 *) dflt=y;;
2706 esac
2707
2708 : Get old answers from old config file if Configure was run on the
2709 : same system, otherwise use the hints.
2710 hint=default
2711 cd ..
2712 if test -f config.sh; then
2713         echo " "
2714         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2715         . UU/myread
2716         case "$ans" in
2717         n*|N*) echo "OK, I'll ignore it."
2718                 mv config.sh config.sh.old
2719                 myuname="$newmyuname"
2720                 ;;
2721         *)  echo "Fetching default answers from your old config.sh file..." >&4
2722                 tmp_n="$n"
2723                 tmp_c="$c"
2724                 tmp_sh="$sh"
2725                 . ./config.sh
2726                 cp config.sh UU
2727                 n="$tmp_n"
2728                 c="$tmp_c"
2729                 : Older versions did not always set $sh.  Catch re-use of such
2730                 : an old config.sh.
2731                 case "$sh" in
2732                 '') sh="$tmp_sh" ;;
2733                 esac
2734                 hint=previous
2735                 ;;
2736         esac
2737 fi
2738 . ./UU/checkcc
2739 if test ! -f config.sh; then
2740         $cat <<EOM
2741
2742 First time through, eh?  I have some defaults handy for some systems
2743 that need some extra help getting the Configure answers right:
2744
2745 EOM
2746         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2747         dflt=''
2748         : Half the following guesses are probably wrong... If you have better
2749         : tests or hints, please send them to perlbug@perl.org
2750         : The metaconfig authors would also appreciate a copy...
2751         $test -f /irix && osname=irix
2752         $test -f /xenix && osname=sco_xenix
2753         $test -f /dynix && osname=dynix
2754         $test -f /dnix && osname=dnix
2755         $test -f /lynx.os && osname=lynxos
2756         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2757         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2758         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2759         $test -f /bin/mips && /bin/mips && osname=mips
2760         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2761                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2762         $test -d /usr/apollo/bin && osname=apollo
2763         $test -f /etc/saf/_sactab && osname=svr4
2764         $test -d /usr/include/minix && osname=minix
2765         if $test -d /MachTen -o -d /MachTen_Folder; then
2766                 osname=machten
2767                 if $test -x /sbin/version; then
2768                         osvers=`/sbin/version | $awk '{print $2}' |
2769                         $sed -e 's/[A-Za-z]$//'`
2770                 elif $test -x /usr/etc/version; then
2771                         osvers=`/usr/etc/version | $awk '{print $2}' |
2772                         $sed -e 's/[A-Za-z]$//'`
2773                 else
2774                         osvers="$2.$3"
2775                 fi
2776         fi
2777
2778         $test -f /sys/posix.dll &&
2779                 $test -f /usr/bin/what &&
2780                 set X `/usr/bin/what /sys/posix.dll` &&
2781                 $test "$3" = UWIN &&
2782                 osname=uwin &&
2783                 osvers="$5"
2784
2785         if $test -f $uname; then
2786                 set X $myuname
2787                 shift
2788
2789                 case "$5" in
2790                 fps*) osname=fps ;;
2791                 mips*)
2792                         case "$4" in
2793                         umips) osname=umips ;;
2794                         *) osname=mips ;;
2795                         esac;;
2796                 [23]100) osname=mips ;;
2797                 next*) osname=next ;;
2798                 i386*)
2799                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2800                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2801                                 osname='sco'
2802                                 osvers=$tmp
2803                         elif $test -f /etc/kconfig; then
2804                                 osname=isc
2805                                 if test "$lns" = "$ln -s"; then
2806                                         osvers=4
2807                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2808                                         osvers=3
2809                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2810                                         osvers=2
2811                                 fi
2812                         fi
2813                         tmp=''
2814                         ;;
2815                 pc*)
2816                         if test -n "$DJGPP"; then
2817                                 osname=dos
2818                                 osvers=djgpp
2819                         fi
2820                         ;;
2821                 esac
2822
2823                 case "$1" in
2824                 aix) osname=aix
2825                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2826                         case "$tmp" in
2827                         'not found') osvers="$4"."$3" ;;
2828                         '<3240'|'<>3240') osvers=3.2.0 ;;
2829                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2830                         '=3250'|'>3250') osvers=3.2.5 ;;
2831                         *) osvers=$tmp;;
2832                         esac
2833                         ;;
2834                 bsd386) osname=bsd386
2835                         osvers=`$uname -r`
2836                         ;;
2837                 cygwin*) osname=cygwin
2838                         osvers="$3"
2839                         ;;
2840                 *dc.osx) osname=dcosx
2841                         osvers="$3"
2842                         ;;
2843                 dnix) osname=dnix
2844                         osvers="$3"
2845                         ;;
2846                 domainos) osname=apollo
2847                         osvers="$3"
2848                         ;;
2849                 dgux) osname=dgux 
2850                         osvers="$3"
2851                         ;;
2852                 dynixptx*) osname=dynixptx
2853                         osvers=`echo "$4"|sed 's/^v//'`
2854                         ;;
2855                 freebsd) osname=freebsd 
2856                         osvers="$3" ;;
2857                 genix) osname=genix ;;
2858                 hp*) osname=hpux 
2859                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2860                         ;;
2861                 irix*) osname=irix
2862                         case "$3" in
2863                         4*) osvers=4 ;;
2864                         5*) osvers=5 ;;
2865                         *)      osvers="$3" ;;
2866                         esac
2867                         ;;
2868                 linux) osname=linux
2869                         case "$3" in
2870                         *)      osvers="$3" ;;
2871                         esac
2872                         ;;
2873                 MiNT) osname=mint
2874                         ;;
2875                 netbsd*) osname=netbsd
2876                         osvers="$3"
2877                         ;;
2878                 news-os) osvers="$3"
2879                         case "$3" in
2880                         4*) osname=newsos4 ;;
2881                         *) osname=newsos ;;
2882                         esac
2883                         ;;
2884                 next*) osname=next ;;
2885                 nonstop-ux) osname=nonstopux ;;
2886                 POSIX-BC | posix-bc ) osname=posix-bc
2887                         osvers="$3"
2888                         ;;
2889                 powerux | power_ux | powermax_os | powermaxos | \
2890                 powerunix | power_unix) osname=powerux
2891                         osvers="$3"
2892                         ;;
2893                 qnx) osname=qnx
2894                         osvers="$4"
2895                         ;;
2896                 solaris) osname=solaris
2897                         case "$3" in
2898                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2899                         *)      osvers="$3" ;;
2900                         esac
2901                         ;;
2902                 sunos) osname=sunos
2903                         case "$3" in
2904                         5*) osname=solaris
2905                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2906                         *)      osvers="$3" ;;
2907                         esac
2908                         ;;
2909                 titanos) osname=titanos
2910                         case "$3" in
2911                         1*) osvers=1 ;;
2912                         2*) osvers=2 ;;
2913                         3*) osvers=3 ;;
2914                         4*) osvers=4 ;;
2915                         *)      osvers="$3" ;;
2916                         esac
2917                         ;;
2918                 ultrix) osname=ultrix
2919                         osvers="$3"
2920                         ;;
2921                 osf1|mls+)      case "$5" in
2922                                 alpha)
2923                                         osname=dec_osf
2924                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2925                                         case "$osvers" in
2926                                         [1-9].[0-9]*) ;;
2927                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2928                                         esac
2929                                         ;;
2930                         hp*)    osname=hp_osf1  ;;
2931                         mips)   osname=mips_osf1 ;;
2932                         esac
2933                         ;;
2934                 unixware) osname=svr5
2935                         osvers="$4"
2936                         ;;
2937                 uts) osname=uts
2938                         osvers="$3"
2939                         ;;
2940                 $2) case "$osname" in
2941                         *isc*) ;;
2942                         *freebsd*) ;;
2943                         svr*)
2944                                 : svr4.x or possibly later
2945                                 case "svr$3" in 
2946                                 ${osname}*)
2947                                         osname=svr$3
2948                                         osvers=$4
2949                                         ;;
2950                                 esac
2951                                 case "$osname" in
2952                                 svr4.0)
2953                                         : Check for ESIX
2954                                         if test -f /stand/boot ; then
2955                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2956                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2957                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2958                                                         if test -n "$isesix"; then
2959                                                                 osname=esix4
2960                                                         fi
2961                                                 fi
2962                                         fi
2963                                         ;;
2964                                 esac
2965                                 ;;
2966                         *)      if test -f /etc/systemid; then
2967                                         osname=sco
2968                                         set `echo $3 | $sed 's/\./ /g'` $4
2969                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2970                                                 osvers=$1.$2.$3
2971                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2972                                                 osvers=$1.$2
2973                                         elif $test -f $src/hints/sco_$1.sh; then
2974                                                 osvers=$1
2975                                         fi
2976                                 else
2977                                         case "$osname" in
2978                                         '') : Still unknown.  Probably a generic Sys V.
2979                                                 osname="sysv"
2980                                                 osvers="$3"
2981                                                 ;;
2982                                         esac
2983                                 fi
2984                                 ;;
2985                         esac
2986                         ;;
2987                 *)      case "$osname" in
2988                         '') : Still unknown.  Probably a generic BSD.
2989                                 osname="$1"
2990                                 osvers="$3"
2991                                 ;;
2992                         esac
2993                         ;;
2994                 esac
2995         else
2996                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2997                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2998                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2999                                 osname=news_os
3000                         fi
3001                         $rm -f UU/kernel.what
3002                 elif test -d c:/.; then
3003                         set X $myuname
3004                         osname=os2
3005                         osvers="$5"
3006                 fi
3007         fi
3008         
3009         case "$targetarch" in
3010         '') ;;
3011         *)  hostarch=$osname
3012             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3013             osvers=''
3014             ;;
3015         esac
3016
3017         : Now look for a hint file osname_osvers, unless one has been
3018         : specified already.
3019         case "$hintfile" in
3020         ''|' ')
3021                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3022                 : Also try without trailing minor version numbers.
3023                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3024                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3025                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3026                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3027                 case "$file" in
3028                 '') dflt=none ;;
3029                 *)  case "$osvers" in
3030                         '') dflt=$file
3031                                 ;;
3032                         *)  if $test -f $src/hints/$file.sh ; then
3033                                         dflt=$file
3034                                 elif $test -f $src/hints/$xfile.sh ; then
3035                                         dflt=$xfile
3036                                 elif $test -f $src/hints/$xxfile.sh ; then
3037                                         dflt=$xxfile
3038                                 elif $test -f $src/hints/$xxxfile.sh ; then
3039                                         dflt=$xxxfile
3040                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3041                                         dflt=$xxxxfile
3042                                 elif $test -f "$src/hints/${osname}.sh" ; then
3043                                         dflt="${osname}"
3044                                 else
3045                                         dflt=none
3046                                 fi
3047                                 ;;
3048                         esac
3049                         ;;
3050                 esac
3051                 if $test -f Policy.sh ; then
3052                         case "$dflt" in
3053                         *Policy*) ;;
3054                         none) dflt="Policy" ;;
3055                         *) dflt="Policy $dflt" ;;
3056                         esac
3057                 fi
3058                 ;;
3059         *)
3060                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3061                 ;;
3062         esac
3063
3064         if $test -f Policy.sh ; then
3065                 $cat <<EOM
3066
3067 There's also a Policy hint file available, which should make the
3068 site-specific (policy) questions easier to answer.
3069 EOM
3070
3071         fi
3072
3073         $cat <<EOM
3074
3075 You may give one or more space-separated answers, or "none" if appropriate.
3076 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3077 is a good thing.  DO NOT give a wrong version or a wrong OS.
3078
3079 EOM
3080
3081         rp="Which of these apply, if any?"
3082         . UU/myread
3083         tans=$ans
3084         for file in $tans; do
3085                 if $test X$file = XPolicy -a -f Policy.sh; then
3086                         . Policy.sh
3087                         $cat Policy.sh >> UU/config.sh
3088                 elif $test -f $src/hints/$file.sh; then
3089                         . $src/hints/$file.sh
3090                         $cat $src/hints/$file.sh >> UU/config.sh
3091                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3092                         : nothing
3093                 else
3094                         : Give one chance to correct a possible typo.
3095                         echo "$file.sh does not exist"
3096                         dflt=$file
3097                         rp="hint to use instead?"
3098                         . UU/myread
3099                         for file in $ans; do
3100                                 if $test -f "$src/hints/$file.sh"; then
3101                                         . $src/hints/$file.sh
3102                                         $cat $src/hints/$file.sh >> UU/config.sh
3103                                 elif $test X$ans = X -o X$ans = Xnone ; then
3104                                         : nothing
3105                                 else
3106                                         echo "$file.sh does not exist -- ignored."
3107                                 fi
3108                         done
3109                 fi
3110         done
3111
3112         hint=recommended
3113         : Remember our hint file for later.
3114         if $test -f "$src/hints/$file.sh" ; then
3115                 hintfile="$file"
3116         else
3117                 hintfile=''
3118         fi
3119 fi
3120 cd UU
3121 ;;
3122 *)
3123         echo " "
3124         echo "Fetching default answers from $config_sh..." >&4
3125         tmp_n="$n"
3126         tmp_c="$c"
3127         cd ..
3128         cp $config_sh config.sh 2>/dev/null
3129         chmod +w config.sh
3130         . ./config.sh
3131         cd UU
3132         cp ../config.sh .
3133         n="$tmp_n"
3134         c="$tmp_c"
3135         hint=previous
3136         ;;
3137 esac
3138 test "$override" && . ./optdef.sh
3139
3140 : Restore computed paths
3141 for file in $loclist $trylist; do
3142         eval $file="\$_$file"
3143 done
3144
3145 cat << EOM
3146
3147 Configure uses the operating system name and version to set some defaults.
3148 The default value is probably right if the name rings a bell. Otherwise,
3149 since spelling matters for me, either accept the default or answer "none"
3150 to leave it blank.
3151
3152 EOM
3153 case "$osname" in
3154         ''|' ')
3155                 case "$hintfile" in
3156                 ''|' '|none) dflt=none ;;
3157                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3158                 esac
3159                 ;;
3160         *) dflt="$osname" ;;
3161 esac
3162 rp="Operating system name?"
3163 . ./myread
3164 case "$ans" in
3165 none)  osname='' ;;
3166 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3167 esac
3168 echo " "
3169 case "$osvers" in
3170         ''|' ')
3171                 case "$hintfile" in
3172                 ''|' '|none) dflt=none ;;
3173                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3174                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3175                         case "$dflt" in
3176                         ''|' ') dflt=none ;;
3177                         esac
3178                         ;;
3179                 esac
3180                 ;;
3181         *) dflt="$osvers" ;;
3182 esac
3183 rp="Operating system version?"
3184 . ./myread
3185 case "$ans" in
3186 none)  osvers='' ;;
3187 *) osvers="$ans" ;;
3188 esac
3189
3190
3191 . ./posthint.sh
3192
3193 : who configured the system
3194 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3195 cf_by=`(logname) 2>/dev/null`
3196 case "$cf_by" in
3197 "")
3198         cf_by=`(whoami) 2>/dev/null`
3199         case "$cf_by" in
3200         "") cf_by=unknown ;;
3201         esac ;;
3202 esac
3203
3204 : set up the script used to warn in case of inconsistency
3205 cat <<EOS >whoa
3206 $startsh
3207 EOS
3208 cat <<'EOSC' >>whoa
3209 dflt=y
3210 echo " "
3211 echo "*** WHOA THERE!!! ***" >&4
3212 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3213 rp="    Keep the $hint value?"
3214 . ./myread
3215 case "$ans" in
3216 y) td=$was; tu=$was;;
3217 esac
3218 EOSC
3219
3220 : function used to set $1 to $val
3221 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3222 case "$val$was" in
3223 $define$undef) . ./whoa; eval "$var=\$td";;
3224 $undef$define) . ./whoa; eval "$var=\$tu";;
3225 *) eval "$var=$val";;
3226 esac'
3227
3228 case "$usethreads" in
3229 $define|true|[yY]*)     dflt='y';;
3230 *) dflt='n';;
3231 esac
3232 cat <<EOM
3233
3234 Perl can be built to take advantage of threads on some systems.
3235 To do so, Configure can be run with -Dusethreads.
3236
3237 Note that threading is a highly experimental feature, and
3238 some known race conditions still remain.  If you choose to try
3239 it, be very sure to not actually deploy it for production
3240 purposes.  README.threads has more details, and is required
3241 reading if you enable threads.
3242
3243 If this doesn't make any sense to you, just accept the default '$dflt'.
3244 EOM
3245 rp='Build a threading Perl?'
3246 . ./myread
3247 case "$ans" in
3248 y|Y)    val="$define" ;;
3249 *)      val="$undef" ;;
3250 esac
3251 set usethreads
3252 eval $setvar
3253
3254 case "$usethreads" in
3255 $define)
3256         $cat <<EOM
3257
3258 As of 5.5.640, Perl has two different internal threading implementations,
3259 the 5.005 version (5005threads) and an interpreter-based version
3260 (ithreads) that has one interpreter per thread.  Both are very 
3261 experimental.  This arrangement exists to help developers work out
3262 which one is better.
3263
3264 If you're a casual user, you probably don't want interpreter-threads
3265 at this time.  There doesn't yet exist a way to create threads from
3266 within Perl in this model, i.e., "use Thread;" will NOT work.
3267 EOM
3268         : Default to ithreads unless overridden on command line or with
3269         : old config.sh
3270         dflt='y'
3271         case "$use5005threads" in
3272                 $define|true|[yY]*) dflt='n';;
3273         esac
3274         case "$useithreads" in
3275                 $undef|false|[nN]*) dflt='n';;
3276         esac
3277         rp='Use interpreter-based ithreads?'
3278         . ./myread
3279         case "$ans" in
3280         y|Y)    val="$define" ;;
3281         *)      val="$undef" ;;
3282         esac
3283         set useithreads
3284         eval $setvar
3285         : Now set use5005threads to the opposite value.
3286         case "$useithreads" in
3287         $define) val="$undef" ;;
3288         *) val="$define" ;;
3289         esac
3290         set use5005threads
3291         eval $setvar
3292         ;;
3293 *)
3294         useithreads="$undef"
3295         use5005threads="$undef"
3296         ;;
3297 esac
3298
3299 case "$useithreads$use5005threads" in
3300 "$define$define")
3301         $cat >&4 <<EOM
3302
3303 You cannot have both the ithreads and the 5.005 threads enabled
3304 at the same time.  Disabling the 5.005 threads since they are
3305 much less stable than the ithreads.
3306
3307 EOM
3308         use5005threads="$undef"
3309         ;;
3310 esac
3311
3312 case "$d_oldpthreads" in
3313 '')     : Configure tests would be welcome here.  For now, assume undef.
3314         val="$undef" ;;
3315 *)      val="$d_oldpthreads" ;;
3316 esac
3317 set d_oldpthreads
3318 eval $setvar
3319
3320
3321 case "$usethreads" in
3322 "$define"|true|[yY]*)
3323 : Look for a hint-file generated 'call-back-unit'.  If the
3324 : user has specified that a threading perl is to be built,
3325 : we may need to set or change some other defaults.
3326         if $test -f usethreads.cbu; then
3327                 echo "Your platform has some specific hints for threaded builds, using them..."
3328                 . ./usethreads.cbu
3329         else
3330                 $cat <<EOM
3331 (Your platform doesn't have any specific hints for threaded builds.
3332  Assuming POSIX threads, then.)
3333 EOM
3334         fi
3335         ;;
3336 esac
3337
3338 cat <<EOM
3339
3340 Perl can be built so that multiple Perl interpreters can coexist
3341 within the same Perl executable.
3342 EOM
3343
3344 case "$useithreads" in
3345 $define)
3346         cat <<EOM
3347 This multiple interpreter support is required for interpreter-based threads.
3348 EOM
3349         val="$define"
3350         ;;
3351 *)      case "$usemultiplicity" in
3352         $define|true|[yY]*)     dflt='y';;
3353         *) dflt='n';;
3354         esac
3355         echo " "
3356         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3357         rp='Build Perl for multiplicity?'
3358         . ./myread
3359         case "$ans" in
3360         y|Y)    val="$define" ;;
3361         *)      val="$undef" ;;
3362         esac
3363         ;;
3364 esac
3365 set usemultiplicity
3366 eval $setvar
3367
3368
3369 case "$usemorebits" in
3370 "$define"|true|[yY]*)
3371         use64bitint="$define"
3372         uselongdouble="$define"
3373         usemorebits="$define"
3374         ;;
3375 *)      usemorebits="$undef"
3376         ;;
3377 esac
3378
3379 : make some quick guesses about what we are up against
3380 echo " "
3381 $echo $n "Hmm...  $c"
3382 echo exit 1 >bsd
3383 echo exit 1 >usg
3384 echo exit 1 >v7
3385 echo exit 1 >osf1
3386 echo exit 1 >eunice
3387 echo exit 1 >xenix
3388 echo exit 1 >venix
3389 echo exit 1 >os2
3390 d_bsd="$undef"
3391 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3392 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3393 then
3394         echo "Looks kind of like an OSF/1 system, but we'll see..."
3395         echo exit 0 >osf1
3396 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3397         xxx=`./loc addbib blurfl $pth`
3398         if $test -f $xxx; then
3399         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3400                 echo exit 0 >bsd
3401                 echo exit 0 >usg
3402         else
3403                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3404                         echo "Looks kind of like an extended USG system, but we'll see..."
3405                 else
3406                         echo "Looks kind of like a USG system, but we'll see..."
3407                 fi
3408                 echo exit 0 >usg
3409         fi
3410 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3411         echo "Looks kind of like a BSD system, but we'll see..."
3412         d_bsd="$define"
3413         echo exit 0 >bsd
3414 else
3415         echo "Looks kind of like a Version 7 system, but we'll see..."
3416         echo exit 0 >v7
3417 fi
3418 case "$eunicefix" in
3419 *unixtovms*)
3420         $cat <<'EOI'
3421 There is, however, a strange, musty smell in the air that reminds me of
3422 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3423 EOI
3424         echo exit 0 >eunice
3425         d_eunice="$define"
3426 : it so happens the Eunice I know will not run shell scripts in Unix format
3427         ;;
3428 *)
3429         echo " "
3430         echo "Congratulations.  You aren't running Eunice."
3431         d_eunice="$undef"
3432         ;;
3433 esac
3434 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3435 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3436 : semicolon as a patch separator
3437 case "$p_" in
3438 :) ;;
3439 *)
3440         $cat <<'EOI'
3441 I have the feeling something is not exactly right, however...don't tell me...
3442 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3443 (Or you may be running DOS with DJGPP.)
3444 EOI
3445         echo exit 0 >os2
3446         ;;
3447 esac
3448 if test -f /xenix; then
3449         echo "Actually, this looks more like a XENIX system..."
3450         echo exit 0 >xenix
3451         d_xenix="$define"
3452 else
3453         echo " "
3454         echo "It's not Xenix..."
3455         d_xenix="$undef"
3456 fi
3457 chmod +x xenix
3458 $eunicefix xenix
3459 if test -f /venix; then
3460         echo "Actually, this looks more like a VENIX system..."
3461         echo exit 0 >venix
3462 else
3463         echo " "
3464         if ./xenix; then
3465                 : null
3466         else
3467                 echo "Nor is it Venix..."
3468         fi
3469 fi
3470 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3471 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3472 $rm -f foo
3473
3474 case "$cc" in
3475 '') dflt=cc;;
3476 *) dflt="$cc";;
3477 esac
3478 rp="Use which C compiler?"
3479 . ./myread
3480 cc="$ans"
3481 : Look for a hint-file generated 'call-back-unit'.  Now that the
3482 : user has specified the compiler, we may need to set or change some
3483 : other defaults.
3484 if $test -f cc.cbu; then
3485     . ./cc.cbu
3486 fi
3487 . ./checkcc
3488
3489 echo " "
3490 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3491 $cat >try.c <<EOM
3492 #include <stdio.h>
3493 int main() {
3494 #ifdef __GNUC__
3495 #ifdef __VERSION__
3496         printf("%s\n", __VERSION__);
3497 #else
3498         printf("%s\n", "1");
3499 #endif
3500 #endif
3501         exit(0);
3502 }
3503 EOM
3504 if $cc -o try $ccflags $ldflags try.c; then
3505         gccversion=`$run ./try`
3506         case "$gccversion" in
3507         '') echo "You are not using GNU cc." ;;
3508         *)  echo "You are using GNU cc $gccversion."
3509             ccname=gcc  
3510             ;;
3511         esac
3512 else
3513         echo " "
3514         echo "*** WHOA THERE!!! ***" >&4
3515         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3516         case "$knowitall" in
3517         '')
3518         echo "    You'd better start hunting for one and let me know about it." >&4
3519                 exit 1
3520                 ;;
3521         esac
3522 fi
3523 $rm -f try try.*
3524 case "$gccversion" in
3525 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3526 esac
3527 case "$gccversion" in
3528 '') gccosandvers='' ;;
3529 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3530    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3531    gccshortvers=''
3532    case "$gccosandvers" in
3533    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3534    $osname$osvers) ;; # looking good
3535    $osname*) cat <<EOM >&4
3536
3537 *** WHOA THERE!!! ***
3538
3539     Your gcc has not been compiled for the exact release of
3540     your operating system ($gccosandvers versus $osname$osvers).
3541
3542     In general it is a good idea to keep gcc synchronized with
3543     the operating system because otherwise serious problems
3544     may ensue when trying to compile software, like Perl.
3545
3546     I'm trying to be optimistic here, though, and will continue.
3547     If later during the configuration and build icky compilation
3548     problems appear (headerfile conflicts being the most common
3549     manifestation), I suggest reinstalling the gcc to match
3550     your operating system release.
3551
3552 EOM
3553       ;;
3554    *) gccosandvers='' ;; # failed to parse, better be silent
3555    esac
3556    ;;
3557 esac
3558 case "$ccname" in
3559 '') ccname="$cc" ;;
3560 esac
3561
3562
3563 : decide how portable to be.  Allow command line overrides.
3564 case "$d_portable" in
3565 "$undef") ;;
3566 *)      d_portable="$define" ;;
3567 esac
3568
3569 : set up shell script to do ~ expansion
3570 cat >filexp <<EOSS
3571 $startsh
3572 : expand filename
3573 case "\$1" in
3574  ~/*|~)
3575         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3576         ;;
3577  ~*)
3578         if $test -f /bin/csh; then
3579                 /bin/csh -f -c "glob \$1"
3580                 failed=\$?
3581                 echo ""
3582                 exit \$failed
3583         else
3584                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3585                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3586                 if $test ! -d "\$dir"; then
3587                         me=\`basename \$0\`
3588                         echo "\$me: can't locate home directory for: \$name" >&2
3589                         exit 1
3590                 fi
3591                 case "\$1" in
3592                 */*)
3593                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3594                         ;;
3595                 *)
3596                         echo \$dir
3597                         ;;
3598                 esac
3599         fi
3600         ;;
3601 *)
3602         echo \$1
3603         ;;
3604 esac
3605 EOSS
3606 chmod +x filexp
3607 $eunicefix filexp
3608
3609 : now set up to get a file name
3610 cat <<EOS >getfile
3611 $startsh
3612 EOS
3613 cat <<'EOSC' >>getfile
3614 tilde=''
3615 fullpath=''
3616 already=''
3617 skip=''
3618 none_ok=''
3619 exp_file=''
3620 nopath_ok=''
3621 orig_rp="$rp"
3622 orig_dflt="$dflt"
3623 case "$gfpth" in
3624 '') gfpth='.' ;;
3625 esac
3626
3627 case "$fn" in
3628 *\(*)
3629         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3630         fn=`echo $fn | sed 's/(.*)//'`
3631         ;;
3632 esac
3633
3634 case "$fn" in
3635 *:*)
3636         loc_file=`expr $fn : '.*:\(.*\)'`
3637         fn=`expr $fn : '\(.*\):.*'`
3638         ;;
3639 esac
3640
3641 case "$fn" in
3642 *~*) tilde=true;;
3643 esac
3644 case "$fn" in
3645 */*) fullpath=true;;
3646 esac
3647 case "$fn" in
3648 *+*) skip=true;;
3649 esac
3650 case "$fn" in
3651 *n*) none_ok=true;;
3652 esac
3653 case "$fn" in
3654 *e*) exp_file=true;;
3655 esac
3656 case "$fn" in
3657 *p*) nopath_ok=true;;
3658 esac
3659
3660 case "$fn" in
3661 *f*) type='File';;
3662 *d*) type='Directory';;
3663 *l*) type='Locate';;
3664 esac
3665
3666 what="$type"
3667 case "$what" in
3668 Locate) what='File';;
3669 esac
3670
3671 case "$exp_file" in
3672 '')
3673         case "$d_portable" in
3674         "$define") ;;
3675         *) exp_file=true;;
3676         esac
3677         ;;
3678 esac
3679
3680 cd ..
3681 while test "$type"; do
3682         redo=''
3683         rp="$orig_rp"
3684         dflt="$orig_dflt"
3685         case "$tilde" in
3686         true) rp="$rp (~name ok)";;
3687         esac
3688         . UU/myread
3689         if test -f UU/getfile.ok && \
3690                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3691         then
3692                 value="$ans"
3693                 ansexp="$ans"
3694                 break
3695         fi
3696         case "$ans" in
3697         none)
3698                 value=''
3699                 ansexp=''
3700                 case "$none_ok" in
3701                 true) type='';;
3702                 esac
3703                 ;;
3704         *)
3705                 case "$tilde" in
3706                 '') value="$ans"
3707                         ansexp="$ans";;
3708                 *)
3709                         value=`UU/filexp $ans`
3710                         case $? in
3711                         0)
3712                                 if test "$ans" != "$value"; then
3713                                         echo "(That expands to $value on this system.)"
3714                                 fi
3715                                 ;;
3716                         *) value="$ans";;
3717                         esac
3718                         ansexp="$value"
3719                         case "$exp_file" in
3720                         '') value="$ans";;
3721                         esac
3722                         ;;
3723                 esac
3724                 case "$fullpath" in
3725                 true)
3726                         case "$ansexp" in
3727                         /*) value="$ansexp" ;;
3728                         [a-zA-Z]:/*) value="$ansexp" ;;
3729                         *)
3730                                 redo=true
3731                                 case "$already" in
3732                                 true)
3733                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3734                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3735                                         ;;
3736                                 *)
3737                                 echo "Please give a full path name, starting with slash." >&4
3738                                         case "$tilde" in
3739                                         true)
3740                                 echo "Note that using ~name is ok provided it expands well." >&4
3741                                                 already=true
3742                                                 ;;
3743                                         esac
3744                                 esac
3745                                 ;;
3746                         esac
3747                         ;;
3748                 esac
3749                 case "$redo" in
3750                 '')
3751                         case "$type" in
3752                         File)
3753                                 for fp in $gfpth; do
3754                                         if test "X$fp" = X.; then
3755                                             pf="$ansexp"
3756                                         else    
3757                                             pf="$fp/$ansexp"
3758                                         fi
3759                                         if test -f "$pf"; then
3760                                                 type=''
3761                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3762                                         then
3763                                                 echo "($value is not a plain file, but that's ok.)"
3764                                                 type=''
3765                                         fi
3766                                         if test X"$type" = X; then
3767                                             value="$pf"
3768                                             break
3769                                         fi
3770                                 done
3771                                 ;;
3772                         Directory)
3773                                 for fp in $gfpth; do
3774                                         if test "X$fp" = X.; then
3775                                             dir="$ans"
3776                                             direxp="$ansexp"
3777                                         else    
3778                                             dir="$fp/$ansexp"
3779                                             direxp="$fp/$ansexp"
3780                                         fi
3781                                         if test -d "$direxp"; then
3782                                                 type=''
3783                                                 value="$dir"
3784                                                 break
3785                                         fi
3786                                 done
3787                                 ;;
3788                         Locate)
3789                                 if test -d "$ansexp"; then
3790                                         echo "(Looking for $loc_file in directory $value.)"
3791                                         value="$value/$loc_file"
3792                                         ansexp="$ansexp/$loc_file"
3793                                 fi
3794                                 if test -f "$ansexp"; then
3795                                         type=''
3796                                 fi
3797                                 case "$nopath_ok" in
3798                                 true)   case "$value" in
3799                                         */*) ;;
3800                                         *)      echo "Assuming $value will be in people's path."
3801                                                 type=''
3802                                                 ;;
3803                                         esac
3804                                         ;;
3805                                 esac
3806                                 ;;
3807                         esac
3808
3809                         case "$skip" in
3810                         true) type='';
3811                         esac
3812
3813                         case "$type" in
3814                         '') ;;
3815                         *)
3816                                 if test "$fastread" = yes; then
3817                                         dflt=y
3818                                 else
3819                                         dflt=n
3820                                 fi
3821                                 rp="$what $value doesn't exist.  Use that name anyway?"
3822                                 . UU/myread
3823                                 dflt=''
3824                                 case "$ans" in
3825                                 y*) type='';;
3826                                 *) echo " ";;
3827                                 esac
3828                                 ;;
3829                         esac
3830                         ;;
3831                 esac
3832                 ;;
3833         esac
3834 done
3835 cd UU
3836 ans="$value"
3837 rp="$orig_rp"
3838 dflt="$orig_dflt"
3839 rm -f getfile.ok
3840 test "X$gfpthkeep" != Xy && gfpth=""
3841 EOSC
3842
3843 : What should the include directory be ?
3844 echo " "
3845 $echo $n "Hmm...  $c"
3846 dflt='/usr/include'
3847 incpath=''
3848 mips_type=''
3849 if $test -f /bin/mips && /bin/mips; then
3850         echo "Looks like a MIPS system..."
3851         $cat >usr.c <<'EOCP'
3852 #ifdef SYSTYPE_BSD43
3853 /bsd43
3854 #endif
3855 EOCP
3856         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3857                 dflt='/bsd43/usr/include'
3858                 incpath='/bsd43'
3859                 mips_type='BSD 4.3'
3860         else
3861                 mips_type='System V'
3862         fi
3863         $rm -f usr.c usr.out
3864         echo "and you're compiling with the $mips_type compiler and libraries."
3865         xxx_prompt=y
3866         echo "exit 0" >mips
3867 else
3868         echo "Doesn't look like a MIPS system."
3869         xxx_prompt=n
3870         echo "exit 1" >mips
3871 fi
3872 chmod +x mips
3873 $eunicefix mips
3874 case "$usrinc" in
3875 '') ;;
3876 *) dflt="$usrinc";;
3877 esac
3878 case "$xxx_prompt" in
3879 y)      fn=d/
3880         echo " "
3881         rp='Where are the include files you want to use?'
3882         . ./getfile
3883         usrinc="$ans"
3884         ;;
3885 *)      usrinc="$dflt"
3886         ;;
3887 esac
3888
3889 : see how we invoke the C preprocessor
3890 echo " "
3891 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3892 cat <<'EOT' >testcpp.c
3893 #define ABC abc
3894 #define XYZ xyz
3895 ABC.XYZ
3896 EOT
3897 cd ..
3898 if test ! -f cppstdin; then
3899         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3900                 # AIX cc -E doesn't show the absolute headerfile
3901                 # locations but we'll cheat by using the -M flag.
3902                 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
3903         else
3904                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3905         fi
3906 else
3907         echo "Keeping your $hint cppstdin wrapper."
3908 fi
3909 chmod 755 cppstdin
3910 wrapper=`pwd`/cppstdin
3911 ok='false'
3912 cd UU
3913
3914 if $test "X$cppstdin" != "X" && \
3915         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3916         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3917 then
3918         echo "You used to use $cppstdin $cppminus so we'll use that again."
3919         case "$cpprun" in
3920         '') echo "But let's see if we can live without a wrapper..." ;;
3921         *)
3922                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3923                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3924                 then
3925                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3926                         ok='true'
3927                 else
3928                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3929                 fi
3930                 ;;
3931         esac
3932 else
3933         case "$cppstdin" in
3934         '') ;;
3935         *)
3936                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3937                 ;;
3938         esac
3939 fi
3940
3941 if $ok; then
3942         : nothing
3943 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3944         $cc -E <testcpp.c >testcpp.out 2>&1; \
3945         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3946         echo "Yup, it does."
3947         x_cpp="$cc -E"
3948         x_minus='';
3949 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3950         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3951         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3952         echo "Yup, it does."
3953         x_cpp="$cc -E"
3954         x_minus='-';
3955 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3956         $cc -P <testcpp.c >testcpp.out 2>&1; \
3957         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3958         echo "Yipee, that works!"
3959         x_cpp="$cc -P"
3960         x_minus='';
3961 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3962         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3963         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3964         echo "At long last!"
3965         x_cpp="$cc -P"
3966         x_minus='-';
3967 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3968         $cpp <testcpp.c >testcpp.out 2>&1; \
3969         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3970         echo "It works!"
3971         x_cpp="$cpp"
3972         x_minus='';
3973 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3974         $cpp - <testcpp.c >testcpp.out 2>&1; \
3975         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3976         echo "Hooray, it works!  I was beginning to wonder."
3977         x_cpp="$cpp"
3978         x_minus='-';
3979 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3980         $wrapper <testcpp.c >testcpp.out 2>&1; \
3981         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3982         x_cpp="$wrapper"
3983         x_minus=''
3984         echo "Eureka!"
3985 else
3986         dflt=''
3987         rp="No dice.  I can't find a C preprocessor.  Name one:"
3988         . ./myread
3989         x_cpp="$ans"
3990         x_minus=''
3991         $x_cpp <testcpp.c >testcpp.out 2>&1
3992         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3993                 echo "OK, that will do." >&4
3994         else
3995 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3996                 exit 1
3997         fi
3998 fi
3999
4000 case "$ok" in
4001 false)
4002         cppstdin="$x_cpp"
4003         cppminus="$x_minus"
4004         cpprun="$x_cpp"
4005         cpplast="$x_minus"
4006         set X $x_cpp
4007         shift
4008         case "$1" in
4009         "$cpp")
4010                 echo "Perhaps can we force $cc -E using a wrapper..."
4011                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4012                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4013                 then
4014                         echo "Yup, we can."
4015                         cppstdin="$wrapper"
4016                         cppminus='';
4017                 else
4018                         echo "Nope, we'll have to live without it..."
4019                 fi
4020                 ;;
4021         esac
4022         case "$cpprun" in
4023         "$wrapper")
4024                 cpprun=''
4025                 cpplast=''
4026                 ;;
4027         esac
4028         ;;
4029 esac
4030
4031 case "$cppstdin" in
4032 "$wrapper"|'cppstdin') ;;
4033 *) $rm -f $wrapper;;
4034 esac
4035 $rm -f testcpp.c testcpp.out
4036
4037 : Set private lib path
4038 case "$plibpth" in
4039 '') if ./mips; then
4040                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4041         fi;;
4042 esac
4043 case "$libpth" in
4044 ' ') dlist='';;
4045 '') dlist="$loclibpth $plibpth $glibpth";;
4046 *) dlist="$libpth";;
4047 esac
4048
4049 : Now check and see which directories actually exist, avoiding duplicates
4050 libpth=''
4051 for xxx in $dlist
4052 do
4053     if $test -d $xxx; then
4054                 case " $libpth " in
4055                 *" $xxx "*) ;;
4056                 *) libpth="$libpth $xxx";;
4057                 esac
4058     fi
4059 done
4060 $cat <<'EOM'
4061
4062 Some systems have incompatible or broken versions of libraries.  Among
4063 the directories listed in the question below, please remove any you
4064 know not to be holding relevant libraries, and add any that are needed.
4065 Say "none" for none.
4066
4067 EOM
4068 case "$libpth" in
4069 '') dflt='none';;
4070 *)
4071         set X $libpth
4072         shift
4073         dflt=${1+"$@"}
4074         ;;
4075 esac
4076 rp="Directories to use for library searches?"
4077 . ./myread
4078 case "$ans" in
4079 none) libpth=' ';;
4080 *) libpth="$ans";;
4081 esac
4082
4083 : compute shared library extension
4084 case "$so" in
4085 '')
4086         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4087                 dflt='sl'
4088         else
4089                 dflt='so'
4090         fi
4091         ;;
4092 *) dflt="$so";;
4093 esac
4094 $cat <<EOM
4095
4096 On some systems, shared libraries may be available.  Answer 'none' if
4097 you want to suppress searching of shared libraries for the remainder
4098 of this configuration.
4099
4100 EOM
4101 rp='What is the file extension used for shared libraries?'
4102 . ./myread
4103 so="$ans"
4104
4105 : Define several unixisms.
4106 : Hints files or command line option can be used to override them.
4107 : The convoluted testing is in case hints files set either the old
4108 : or the new name.
4109 case "$_exe" in
4110 '')     case "$exe_ext" in
4111     '') ;;
4112         *)      _exe="$exe_ext" ;;
4113         esac
4114         ;;
4115 esac
4116 case "$_a" in
4117 '')     case "$lib_ext" in
4118     '') _a='.a';;
4119         *)      _a="$lib_ext" ;;
4120         esac
4121         ;;
4122 esac
4123 case "$_o" in
4124 '') case "$obj_ext" in
4125         '')     _o='.o';;
4126         *)      _o="$obj_ext";;
4127         esac
4128         ;;
4129 esac
4130 case "$p_" in
4131 '') case "$path_sep" in
4132         '')     p_=':';;
4133         *)      p_="$path_sep";;
4134         esac
4135         ;;
4136 esac
4137 exe_ext=$_exe
4138 lib_ext=$_a
4139 obj_ext=$_o
4140 path_sep=$p_
4141
4142 : Which makefile gets called first.  This is used by make depend.
4143 case "$firstmakefile" in
4144 '') firstmakefile='makefile';;
4145 esac
4146
4147 case "$usesocks" in
4148 $define|true|[yY]*)     dflt='y';;
4149 *) dflt='n';;
4150 esac
4151 cat <<EOM
4152
4153 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4154 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4155 to use the PerlIO abstraction layer, this will be implicitly selected.
4156
4157 If this doesn't make any sense to you, just accept the default '$dflt'.
4158 EOM
4159 rp='Build Perl for SOCKS?'
4160 . ./myread
4161 case "$ans" in
4162 y|Y)    val="$define" ;;     
4163 *)      val="$undef" ;;
4164 esac
4165 set usesocks
4166 eval $setvar
4167
4168 case "$usesocks" in
4169 $define|true|[yY]*) useperlio="$define";;
4170 esac
4171
4172 : Looking for optional libraries
4173 echo " "
4174 echo "Checking for optional libraries..." >&4
4175 case "$libs" in
4176 ' '|'') dflt='';;
4177 *) dflt="$libs";;
4178 esac
4179 case "$libswanted" in
4180 '') libswanted='c_s';;
4181 esac
4182 case "$usesocks" in
4183 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4184 esac
4185 libsfound=''
4186 libsfiles=''
4187 libsdirs=''
4188 libspath=''
4189 for thisdir in $libpth $xlibpth; do
4190   test -d $thisdir && libspath="$libspath $thisdir"
4191 done
4192 for thislib in $libswanted; do
4193         for thisdir in $libspath; do
4194             xxx=''
4195             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4196                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4197                 $test -f "$xxx" && eval $libscheck
4198                 $test -f "$xxx" && libstyle=shared
4199             fi
4200             if test ! -f "$xxx"; then
4201                 xxx=$thisdir/lib$thislib.$so
4202                 $test -f "$xxx" && eval $libscheck
4203                 $test -f "$xxx" && libstyle=shared
4204             fi  
4205             if test ! -f "$xxx"; then
4206                 xxx=$thisdir/lib$thislib$_a
4207                 $test -f "$xxx" && eval $libscheck
4208                 $test -f "$xxx" && libstyle=static
4209             fi
4210             if test ! -f "$xxx"; then
4211                 xxx=$thisdir/$thislib$_a
4212                 $test -f "$xxx" && eval $libscheck
4213                 $test -f "$xxx" && libstyle=static
4214             fi
4215             if test ! -f "$xxx"; then
4216                 xxx=$thisdir/lib${thislib}_s$_a
4217                 $test -f "$xxx" && eval $libscheck
4218                 $test -f "$xxx" && libstyle=static
4219                 $test -f "$xxx" && thislib=${thislib}_s
4220             fi
4221             if test ! -f "$xxx"; then
4222                 xxx=$thisdir/Slib$thislib$_a
4223                 $test -f "$xxx" && eval $libscheck
4224                 $test -f "$xxx" && libstyle=static
4225             fi
4226             if $test -f "$xxx"; then
4227                 case "$libstyle" in
4228                 shared) echo "Found -l$thislib (shared)." ;;
4229                 static) echo "Found -l$thislib." ;;
4230                 *)      echo "Found -l$thislib ($libstyle)." ;;
4231                 esac
4232                 case " $dflt " in
4233                 *"-l$thislib "*);;
4234                 *) dflt="$dflt -l$thislib"
4235                    libsfound="$libsfound $xxx"
4236                    yyy=`basename $xxx`
4237                    libsfiles="$libsfiles $yyy"
4238                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4239                    case " $libsdirs " in
4240                    *" $yyy "*) ;;
4241                    *) libsdirs="$libsdirs $yyy" ;;
4242                    esac
4243                    ;;
4244                 esac
4245                 break
4246             fi  
4247         done
4248         if $test ! -f "$xxx"; then
4249             echo "No -l$thislib."
4250         fi
4251 done
4252 set X $dflt
4253 shift
4254 dflt="$*"
4255 case "$libs" in
4256 '') dflt="$dflt";;
4257 *) dflt="$libs";;
4258 esac
4259 case "$dflt" in
4260 ' '|'') dflt='none';;
4261 esac
4262
4263 $cat <<EOM
4264
4265 In order to compile $package on your machine, a number of libraries
4266 are usually needed.  Include any other special libraries here as well.
4267 Say "none" for none.  The default list is almost always right.
4268 EOM
4269
4270 echo " "
4271 rp="What libraries to use?"
4272 . ./myread
4273 case "$ans" in
4274 none) libs=' ';;
4275 *) libs="$ans";;
4276 esac
4277
4278 : determine optimization, if desired, or use for debug flag also
4279 case "$optimize" in
4280 ' '|$undef) dflt='none';;
4281 '') dflt='-O';;
4282 *) dflt="$optimize";;
4283 esac
4284 $cat <<EOH
4285
4286 By default, $package compiles with the -O flag to use the optimizer.
4287 Alternately, you might want to use the symbolic debugger, which uses
4288 the -g flag (on traditional Unix systems).  Either flag can be
4289 specified here.  To use neither flag, specify the word "none".
4290
4291 EOH
4292 rp="What optimizer/debugger flag should be used?"
4293 . ./myread
4294 optimize="$ans"
4295 case "$optimize" in
4296 'none') optimize=" ";;
4297 esac
4298
4299 dflt=''
4300 : We will not override a previous value, but we might want to
4301 : augment a hint file
4302 case "$hint" in
4303 default|recommended)
4304         case "$gccversion" in
4305         1*) dflt='-fpcc-struct-return' ;;
4306         esac
4307         case "$optimize" in
4308         *-g*) dflt="$dflt -DDEBUGGING";;
4309         esac
4310         case "$gccversion" in
4311         2*) if test -d /etc/conf/kconfig.d &&
4312                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4313                 then
4314                         dflt="$dflt -posix"
4315                 fi
4316                 ;;
4317         esac
4318         case "$gccversion" in
4319         1*) ;;
4320         2.[0-8]*) ;;
4321         ?*)     echo " "
4322                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4323                 echo 'int main(void) { return 0; }' > gcctest.c
4324                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4325                         echo "Yes, it does." 2>&1
4326                         case "$ccflags" in
4327                         *strict-aliasing*) 
4328                                 echo "Leaving current flags $ccflags alone." 2>&1
4329                                 ;;
4330                         *) dflt="$dflt -fno-strict-aliasing" ;;
4331                         esac
4332                 else
4333                         echo "Nope, it doesn't, but that's ok." 2>&1
4334                 fi
4335                 ;;
4336         esac
4337         ;;
4338 esac
4339
4340 case "$mips_type" in
4341 *BSD*|'') inclwanted="$locincpth $usrinc";;
4342 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4343 esac
4344 for thisincl in $inclwanted; do
4345         if $test -d $thisincl; then
4346                 if $test x$thisincl != x$usrinc; then
4347                         case "$dflt" in
4348                         *" -I$thisincl "*);;
4349                         *) dflt="$dflt -I$thisincl ";;
4350                         esac
4351                 fi
4352         fi
4353 done
4354
4355 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4356         xxx=true;
4357 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4358         xxx=true;
4359 else
4360         xxx=false;
4361 fi;
4362 if $xxx; then
4363         case "$dflt" in
4364         *$2*);;
4365         *) dflt="$dflt -D$2";;
4366         esac;
4367 fi'
4368
4369 set signal.h LANGUAGE_C; eval $inctest
4370
4371 case "$usesocks" in
4372 $define)
4373         ccflags="$ccflags -DSOCKS"
4374         ;;
4375 esac
4376
4377 case "$hint" in
4378 default|recommended) dflt="$ccflags $dflt" ;;
4379 *) dflt="$ccflags";;
4380 esac
4381
4382 case "$dflt" in
4383 ''|' ') dflt=none;;
4384 esac
4385
4386 $cat <<EOH
4387
4388 Your C compiler may want other flags.  For this question you should include
4389 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4390 but you should NOT include libraries or ld flags like -lwhatever.  If you
4391 want $package to honor its debug switch, you should include -DDEBUGGING here.
4392 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4393
4394 To use no flags, specify the word "none".
4395
4396 EOH
4397 set X $dflt
4398 shift
4399 dflt=${1+"$@"}
4400 rp="Any additional cc flags?"
4401 . ./myread
4402 case "$ans" in
4403 none) ccflags='';;
4404 *) ccflags="$ans";;
4405 esac
4406
4407 : the following weeds options from ccflags that are of no interest to cpp
4408 case "$cppflags" in
4409 '') cppflags="$ccflags" ;;
4410 *)  cppflags="$cppflags $ccflags" ;;
4411 esac
4412 case "$gccversion" in
4413 1*) cppflags="$cppflags -D__GNUC__"
4414 esac
4415 case "$mips_type" in
4416 '');;
4417 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4418 esac
4419 case "$cppflags" in
4420 '');;
4421 *)
4422         echo " "
4423         echo "Let me guess what the preprocessor flags are..." >&4
4424         set X $cppflags
4425         shift
4426         cppflags=''
4427         $cat >cpp.c <<'EOM'
4428 #define BLURFL foo
4429
4430 BLURFL xx LFRULB
4431 EOM
4432         previous=''
4433         for flag in $*
4434         do
4435                 case "$flag" in
4436                 -*) ftry="$flag";;
4437                 *) ftry="$previous $flag";;
4438                 esac
4439                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4440                         >cpp1.out 2>/dev/null && \
4441                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4442                         >cpp2.out 2>/dev/null && \
4443                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4444                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4445                 then
4446                         cppflags="$cppflags $ftry"
4447                         previous=''
4448                 else
4449                         previous="$flag"
4450                 fi
4451         done
4452         set X $cppflags
4453         shift
4454         cppflags=${1+"$@"}
4455         case "$cppflags" in
4456         *-*)  echo "They appear to be: $cppflags";;
4457         esac
4458         $rm -f cpp.c cpp?.out
4459         ;;
4460 esac
4461
4462 : flags used in final linking phase
4463 case "$ldflags" in
4464 '') if ./venix; then
4465                 dflt='-i -z'
4466         else
4467                 dflt=''
4468         fi
4469         case "$ccflags" in
4470         *-posix*) dflt="$dflt -posix" ;;
4471         esac
4472         ;;
4473 *) dflt="$ldflags";;
4474 esac
4475
4476 : Try to guess additional flags to pick up local libraries.
4477 for thislibdir in $libpth; do
4478         case " $loclibpth " in
4479         *" $thislibdir "*)
4480                 case "$dflt " in 
4481                 *"-L$thislibdir "*) ;;
4482                 *)  dflt="$dflt -L$thislibdir" ;;
4483                 esac
4484                 ;;
4485         esac
4486 done
4487
4488 case "$dflt" in
4489 '') dflt='none' ;;
4490 esac
4491
4492 $cat <<EOH
4493
4494 Your C linker may need flags.  For this question you should
4495 include -L/whatever and any other flags used by the C linker, but you
4496 should NOT include libraries like -lwhatever.
4497
4498 Make sure you include the appropriate -L/path flags if your C linker
4499 does not normally search all of the directories you specified above,
4500 namely
4501         $libpth
4502 To use no flags, specify the word "none".
4503
4504 EOH
4505
4506 rp="Any additional ld flags (NOT including libraries)?"
4507 . ./myread
4508 case "$ans" in
4509 none) ldflags='';;
4510 *) ldflags="$ans";;
4511 esac
4512 rmlist="$rmlist pdp11"
4513
4514 : coherency check
4515 echo " "
4516 echo "Checking your choice of C compiler and flags for coherency..." >&4
4517 $cat > try.c <<'EOF'
4518 #include <stdio.h>
4519 int main() { printf("Ok\n"); exit(0); }
4520 EOF
4521 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4522 shift
4523 $cat >try.msg <<'EOM'
4524 I've tried to compile and run the following simple program:
4525
4526 EOM
4527 $cat try.c >> try.msg
4528
4529 $cat >> try.msg <<EOM
4530
4531 I used the command:
4532
4533         $*
4534         $run ./try
4535
4536 and I got the following output:
4537
4538 EOM
4539 dflt=y
4540 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4541         if $sh -c "$run ./try" >>try.msg 2>&1; then
4542                 xxx=`$run ./try`
4543                 case "$xxx" in
4544                 "Ok") dflt=n ;;
4545                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4546                         case " $libs " in
4547                         *" -lsfio "*)
4548                                 cat >> try.msg <<'EOQS'
4549 If $libs contains -lsfio, and sfio is mis-configured, then it
4550 sometimes (apparently) runs and exits with a 0 status, but with no
4551 output!  It may have to do with sfio's use of _exit vs. exit.
4552
4553 EOQS
4554                                 rp="You have a big problem.  Shall I abort Configure"
4555                                 dflt=y
4556                                 ;;
4557                         esac
4558                         ;;
4559                 esac
4560         else
4561                 echo "The program compiled OK, but exited with status $?." >>try.msg
4562                 rp="You have a problem.  Shall I abort Configure"
4563                 dflt=y
4564         fi
4565 else
4566         echo "I can't compile the test program." >>try.msg
4567         rp="You have a BIG problem.  Shall I abort Configure"
4568         dflt=y
4569 fi
4570 case "$dflt" in
4571 y)
4572         $cat try.msg >&4
4573         case "$knowitall" in
4574         '')
4575                 echo "(The supplied flags or libraries might be incorrect.)"
4576                 ;;
4577         *) dflt=n;;
4578         esac
4579         echo " "
4580         . ./myread
4581         case "$ans" in
4582         n*|N*) ;;
4583         *)      echo "Ok.  Stopping Configure." >&4
4584                 exit 1
4585                 ;;
4586         esac
4587         ;;
4588 n) echo "OK, that should do.";;
4589 esac
4590 $rm -f try try.* core
4591
4592 : define a shorthand compile call
4593 compile='
4594 mc_file=$1;
4595 shift;
4596 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4597 : define a shorthand compile call for compilations that should be ok.
4598 compile_ok='
4599 mc_file=$1;
4600 shift;
4601 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4602
4603 : check for lengths of integral types
4604 echo " "
4605 case "$intsize" in
4606 '')
4607         echo "Checking to see how big your integers are..." >&4
4608         $cat >try.c <<'EOCP'
4609 #include <stdio.h>
4610 int main()
4611 {
4612         printf("intsize=%d;\n", (int)sizeof(int));
4613         printf("longsize=%d;\n", (int)sizeof(long));
4614         printf("shortsize=%d;\n", (int)sizeof(short));
4615         exit(0);
4616 }
4617 EOCP
4618         set try
4619         if eval $compile_ok && $run ./try > /dev/null; then
4620                 eval `$run ./try`
4621                 echo "Your integers are $intsize bytes long."
4622                 echo "Your long integers are $longsize bytes long."
4623                 echo "Your short integers are $shortsize bytes long."
4624         else
4625                 $cat >&4 <<EOM
4626 !
4627 Help! I can't compile and run the intsize test program: please enlighten me!
4628 (This is probably a misconfiguration in your system or libraries, and
4629 you really ought to fix it.  Still, I'll try anyway.)
4630 !
4631 EOM
4632                 dflt=4
4633                 rp="What is the size of an integer (in bytes)?"
4634                 . ./myread
4635                 intsize="$ans"
4636                 dflt=$intsize
4637                 rp="What is the size of a long integer (in bytes)?"
4638                 . ./myread
4639                 longsize="$ans"
4640                 dflt=2
4641                 rp="What is the size of a short integer (in bytes)?"
4642                 . ./myread
4643                 shortsize="$ans"
4644         fi
4645         ;;
4646 esac
4647 $rm -f try try.*
4648
4649 : check for void type
4650 echo " "
4651 echo "Checking to see how well your C compiler groks the void type..." >&4
4652 case "$voidflags" in
4653 '')
4654         $cat >try.c <<'EOCP'
4655 #if TRY & 1
4656 void sub() {
4657 #else
4658 sub() {
4659 #endif
4660         extern void moo();      /* function returning void */
4661         void (*goo)();          /* ptr to func returning void */
4662 #if TRY & 8
4663         void *hue;              /* generic ptr */
4664 #endif
4665 #if TRY & 2
4666         void (*foo[10])();
4667 #endif
4668
4669 #if TRY & 4
4670         if(goo == moo) {
4671                 exit(0);
4672         }
4673 #endif
4674         exit(0);
4675 }
4676 int main() { sub(); }
4677 EOCP
4678         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4679                 voidflags=$defvoidused
4680         echo "Good.  It appears to support void to the level $package wants.">&4
4681                 if $contains warning .out >/dev/null 2>&1; then
4682                         echo "However, you might get some warnings that look like this:"
4683                         $cat .out
4684                 fi
4685         else
4686 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4687                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4688                         echo "It supports 1..."
4689                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4690                                 echo "It also supports 2..."
4691                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4692                                         voidflags=7
4693                                         echo "And it supports 4 but not 8 definitely."
4694                                 else
4695                                         echo "It doesn't support 4..."
4696                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4697                                                 voidflags=11
4698                                                 echo "But it supports 8."
4699                                         else
4700                                                 voidflags=3
4701                                                 echo "Neither does it support 8."
4702                                         fi
4703                                 fi
4704                         else
4705                                 echo "It does not support 2..."
4706                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4707                                         voidflags=13
4708                                         echo "But it supports 4 and 8."
4709                                 else
4710                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4711                                                 voidflags=5
4712                                                 echo "And it supports 4 but has not heard about 8."
4713                                         else
4714                                                 echo "However it supports 8 but not 4."
4715                                         fi
4716                                 fi
4717                         fi
4718                 else
4719                         echo "There is no support at all for void."
4720                         voidflags=0
4721                 fi
4722         fi
4723 esac
4724 case "$voidflags" in
4725 "$defvoidused") ;;
4726 *)      $cat >&4 <<'EOM'
4727   Support flag bits are:
4728     1: basic void declarations.
4729     2: arrays of pointers to functions returning void.
4730     4: operations between pointers to and addresses of void functions.
4731     8: generic void pointers.
4732 EOM
4733         dflt="$voidflags";
4734         rp="Your void support flags add up to what?"
4735         . ./myread
4736         voidflags="$ans"
4737         ;;
4738 esac
4739 $rm -f try.* .out
4740
4741 : check for length of pointer
4742 echo " "
4743 case "$ptrsize" in
4744 '')
4745         echo "Checking to see how big your pointers are..." >&4
4746         if test "$voidflags" -gt 7; then
4747                 echo '#define VOID_PTR char *' > try.c
4748         else
4749                 echo '#define VOID_PTR void *' > try.c
4750         fi
4751         $cat >>try.c <<'EOCP'
4752 #include <stdio.h>
4753 int main()
4754 {
4755     printf("%d\n", (int)sizeof(VOID_PTR));
4756     exit(0);
4757 }
4758 EOCP
4759         set try
4760         if eval $compile_ok; then
4761                 ptrsize=`$run ./try`
4762                 echo "Your pointers are $ptrsize bytes long."
4763         else
4764                 dflt='4'
4765                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4766                 rp="What is the size of a pointer (in bytes)?"
4767                 . ./myread
4768                 ptrsize="$ans"
4769         fi
4770         ;;
4771 esac
4772 $rm -f try.c try
4773
4774 : check for long long
4775 echo " "
4776 echo "Checking to see if you have long long..." >&4
4777 echo 'int main() { long long x = 7; return 0; }' > try.c
4778 set try
4779 if eval $compile; then
4780         val="$define"
4781         echo "You have long long."
4782 else
4783         val="$undef"
4784         echo "You do not have long long."
4785 fi
4786 $rm try.*
4787 set d_longlong
4788 eval $setvar
4789
4790 : check for length of long long
4791 case "${d_longlong}${longlongsize}" in
4792 $define)
4793         echo " "
4794         echo "Checking to see how big your long longs are..." >&4
4795         $cat >try.c <<'EOCP'
4796 #include <stdio.h>
4797 int main()
4798 {
4799     printf("%d\n", (int)sizeof(long long));
4800     return(0);
4801 }
4802 EOCP
4803         set try
4804         if eval $compile_ok; then
4805                 longlongsize=`$run ./try`
4806                 echo "Your long longs are $longlongsize bytes long."
4807         else
4808                 dflt='8'
4809                 echo " "
4810                 echo "(I can't seem to compile the test program.  Guessing...)"
4811                 rp="What is the size of a long long (in bytes)?"
4812                 . ./myread
4813                 longlongsize="$ans"
4814         fi
4815         if $test "X$longsize" = "X$longlongsize"; then
4816                 echo "(That isn't any different from an ordinary long.)"
4817         fi      
4818         ;;
4819 esac
4820 $rm -f try.* try
4821
4822 : determine filename position in cpp output
4823 echo " "
4824 echo "Computing filename position in cpp output for #include directives..." >&4
4825 echo '#include <stdio.h>' > foo.c
4826 $cat >fieldn <<EOF
4827 $startsh
4828 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4829 $grep '^[       ]*#.*stdio\.h' | \
4830 while read cline; do
4831         pos=1
4832         set \$cline
4833         while $test \$# -gt 0; do
4834                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4835                         echo "\$pos"
4836                         exit 0
4837                 fi
4838                 shift
4839                 pos=\`expr \$pos + 1\`
4840         done
4841 done
4842 EOF
4843 chmod +x fieldn
4844 fieldn=`./fieldn`
4845 $rm -f foo.c fieldn
4846 case $fieldn in
4847 '') pos='???';;
4848 1) pos=first;;
4849 2) pos=second;;
4850 3) pos=third;;
4851 *) pos="${fieldn}th";;
4852 esac
4853 echo "Your cpp writes the filename in the $pos field of the line."
4854
4855 : locate header file
4856 $cat >findhdr <<EOF
4857 $startsh
4858 wanted=\$1
4859 name=''
4860 for usrincdir in $usrinc
4861 do
4862         if test -f \$usrincdir/\$wanted; then
4863                 echo "\$usrincdir/\$wanted"
4864                 exit 0
4865         fi
4866 done
4867 awkprg='{ print \$$fieldn }'
4868 echo "#include <\$wanted>" > foo\$\$.c
4869 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4870 $grep "^[       ]*#.*\$wanted" | \
4871 while read cline; do
4872         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4873         case "\$name" in
4874         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4875         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4876         *) exit 2;;
4877         esac;
4878 done;
4879 #
4880 # status = 0: grep returned 0 lines, case statement not executed
4881 # status = 1: headerfile found
4882 # status = 2: while loop executed, no headerfile found
4883 #
4884 status=\$?
4885 $rm -f foo\$\$.c;
4886 if test \$status -eq 1; then
4887         exit 0;
4888 fi
4889 exit 1
4890 EOF
4891 chmod +x findhdr
4892
4893 : define an alternate in-header-list? function
4894 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4895 cont=true; xxf="echo \"<\$1> found.\" >&4";
4896 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4897 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4898 esac;
4899 case $# in 4) instead=instead;; *) instead="at last";; esac;
4900 while $test "$cont"; do
4901         xxx=`./findhdr $1`
4902         var=$2; eval "was=\$$2";
4903         if $test "$xxx" && $test -r "$xxx";
4904         then eval $xxf;
4905         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4906                 cont="";
4907         else eval $xxnf;
4908         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4909         set $yyy; shift; shift; yyy=$@;
4910         case $# in 0) cont="";;
4911         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4912                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4913         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4914                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4915         esac;
4916 done;
4917 while $test "$yyy";
4918 do set $yyy; var=$2; eval "was=\$$2";
4919         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4920         set $yyy; shift; shift; yyy=$@;
4921 done'
4922
4923 : see if inttypes.h is available
4924 : we want a real compile instead of Inhdr because some systems
4925 : have an inttypes.h which includes non-existent headers
4926 echo " "
4927 $cat >try.c <<EOCP
4928 #include <inttypes.h>
4929 int main() {
4930         static int32_t foo32 = 0x12345678;
4931 }
4932 EOCP
4933 set try
4934 if eval $compile; then
4935         echo "<inttypes.h> found." >&4
4936         val="$define"
4937 else
4938         echo "<inttypes.h> NOT found." >&4
4939         val="$undef"
4940 fi
4941 $rm -f try.c try
4942 set i_inttypes
4943 eval $setvar
4944
4945 : check for int64_t
4946 echo " "
4947 echo "Checking to see if you have int64_t..." >&4
4948 $cat >try.c <<EOCP
4949 #include <sys/types.h>
4950 #$i_inttypes I_INTTYPES
4951 #ifdef I_INTTYPES
4952 #include <inttypes.h>
4953 #endif
4954 int main() { int64_t x = 7; }
4955 EOCP
4956 set try
4957 if eval $compile; then
4958         val="$define"
4959         echo "You have int64_t."
4960 else
4961         val="$undef"
4962         echo "You do not have int64_t."
4963 fi
4964 $rm -f try try.*
4965 set d_int64_t
4966 eval $setvar
4967
4968
4969 echo " "
4970 echo "Checking which 64-bit integer type we could use..." >&4
4971
4972 case "$intsize" in
4973 8) val=int
4974    set quadtype
4975    eval $setvar
4976    val='"unsigned int"'
4977    set uquadtype
4978    eval $setvar
4979    quadkind=1
4980    ;;
4981 *) case "$longsize" in
4982    8) val=long
4983       set quadtype
4984       eval $setvar
4985       val='"unsigned long"'
4986       set uquadtype
4987       eval $setvar
4988       quadkind=2
4989       ;;
4990    *) case "$d_longlong:$longlongsize" in
4991       define:8)
4992         val='"long long"'
4993         set quadtype
4994         eval $setvar
4995         val='"unsigned long long"'
4996         set uquadtype
4997         eval $setvar
4998         quadkind=3
4999         ;;
5000       *) case "$d_int64_t" in
5001          define)
5002            val=int64_t
5003            set quadtype
5004            eval $setvar
5005            val=uint64_t
5006            set uquadtype
5007            eval $setvar
5008            quadkind=4
5009            ;;
5010          esac
5011          ;;
5012       esac
5013       ;;
5014    esac
5015    ;;
5016 esac
5017
5018 case "$quadtype" in
5019 '')     echo "Alas, no 64-bit integer types in sight." >&4
5020         d_quad="$undef"
5021         ;;
5022 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5023         d_quad="$define"
5024         ;;
5025 esac
5026
5027
5028 case "$uselonglong" in
5029 "$define"|true|[yY]*)
5030         cat <<EOM >&4
5031
5032 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5033 EOM
5034         use64bitint="$define"
5035         ;;
5036 esac                          
5037 case "$use64bits" in
5038 "$define"|true|[yY]*)
5039         cat <<EOM >&4
5040
5041 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5042 EOM
5043         use64bitint="$define"
5044         ;;
5045 esac                          
5046 case "$use64bitints" in
5047 "$define"|true|[yY]*)
5048         cat <<EOM >&4
5049
5050 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5051 EOM
5052         use64bitint="$define"
5053         ;;
5054 esac                          
5055 case "$use64bitsint" in
5056 "$define"|true|[yY]*)
5057         cat <<EOM >&4
5058
5059 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5060 EOM
5061         use64bitint="$define"
5062         ;;
5063 esac                          
5064 case "$uselonglongs" in
5065 "$define"|true|[yY]*)
5066         cat <<EOM >&4
5067
5068 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5069 EOM
5070         use64bitint="$define"
5071         ;;
5072 esac                          
5073 case "$use64bitsall" in
5074 "$define"|true|[yY]*)
5075         cat <<EOM >&4
5076
5077 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5078 EOM
5079         use64bitall="$define"
5080         ;;
5081 esac                          
5082
5083 case "$ccflags" in
5084 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5085 esac
5086 case "$use64bitall" in
5087 "$define"|true|[yY]*) use64bitint="$define" ;;
5088 esac
5089
5090 case "$longsize" in
5091 8) cat <<EOM
5092
5093 You have natively 64-bit long integers.
5094 EOM
5095    val="$define"
5096    ;;
5097 *) case "$use64bitint" in
5098    "$define"|true|[yY]*) dflt='y';;
5099    *) dflt='n';;
5100    esac
5101    case "$d_quad" in
5102    "$define") ;;
5103    *) dflt='n' ;;
5104    esac
5105    cat <<EOM
5106
5107 Perl can be built to take advantage of 64-bit integer types
5108 on some systems.  To do so, Configure can be run with -Duse64bitint.
5109 Choosing this option will most probably introduce binary incompatibilities.
5110
5111 If this doesn't make any sense to you, just accept the default '$dflt'.
5112 (The default has been chosen based on your configuration.)
5113 EOM
5114    rp='Try to use 64-bit integers, if available?'
5115    . ./myread
5116    case "$ans" in
5117    [yY]*) val="$define" ;;
5118    *)     val="$undef"  ;;
5119    esac
5120    ;;
5121 esac
5122 set use64bitint
5123 eval $setvar
5124
5125 case "$use64bitall" in
5126 "$define"|true|[yY]*) dflt='y' ;;
5127 *) case "$longsize" in
5128    8) dflt='y' ;;
5129    *) dflt='n' ;;
5130    esac
5131    ;;
5132 esac    
5133 cat <<EOM
5134
5135 You may also choose to try maximal 64-bitness.  It means using as much
5136 64-bitness as possible on the platform.  This in turn means even more
5137 binary incompatibilities.  On the other hand, your platform may not
5138 have any more 64-bitness available than what you already have chosen.
5139
5140 If this doesn't make any sense to you, just accept the default '$dflt'.
5141 (The default has been chosen based on your configuration.)
5142 EOM
5143 rp='Try to use maximal 64-bit support, if available?'
5144 . ./myread
5145 case "$ans" in
5146 [yY]*) val="$define" ;;
5147 *)     val="$undef"  ;;
5148 esac
5149 set use64bitall
5150 eval $setvar
5151 case "$use64bitall" in
5152 "$define")
5153         case "$use64bitint" in
5154         "$undef")
5155                 cat <<EOM
5156
5157 Since you have chosen a maximally 64-bit build, I'm also turning on
5158 the use of 64-bit integers.
5159 EOM
5160                 use64bitint="$define" ;;
5161         esac
5162         ;;
5163 esac
5164
5165 case "$use64bitall" in
5166 "$define"|true|[yY]*)
5167         case "$ptrsize" in
5168         4)      cat <<EOM >&4
5169
5170 *** You have chosen a maximally 64-bit build, but your pointers
5171 *** are only 4 bytes wide, disabling maximal 64-bitness.
5172
5173 EOM
5174                 use64bitall="$undef"
5175                 case "$use64bitint" in
5176                 "$define"|true|[yY]*) ;;
5177                 *)      cat <<EOM >&4
5178
5179 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5180
5181 EOM
5182                         use64bitint="$define"
5183                         ;;
5184                 esac
5185                 ;;
5186         esac
5187         ;;
5188 esac
5189
5190 case "$use64bitint" in
5191 "$define"|true|[yY]*)
5192 : Look for a hint-file generated 'call-back-unit'.  If the
5193 : user has specified that a 64-bit perl is to be built,
5194 : we may need to set or change some other defaults.
5195         if $test -f use64bitint.cbu; then
5196                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5197                 . ./use64bitint.cbu
5198         fi
5199         case "$longsize" in
5200         4) case "$archname64" in
5201            '') archname64=64int ;;
5202            esac
5203            ;;
5204         esac
5205         ;;
5206 esac
5207
5208 case "$use64bitall" in
5209 "$define"|true|[yY]*)
5210 : Look for a hint-file generated 'call-back-unit'.  If the
5211 : user has specified that a maximally 64-bit perl is to be built,
5212 : we may need to set or change some other defaults.
5213         if $test -f use64bitall.cbu; then
5214                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5215                 . ./use64bitall.cbu
5216         fi
5217         case "$longsize" in
5218         4) case "$archname64" in
5219            ''|64int) archname64=64all ;;
5220            esac
5221            ;;
5222         esac
5223         ;;
5224 esac
5225
5226 echo " "
5227 echo "Checking for GNU C Library..." >&4
5228 cat >try.c <<EOM
5229 #include <stdio.h>
5230 int main()
5231 {
5232 #ifdef __GLIBC__
5233     exit(0);
5234 #else
5235     exit(1);
5236 #endif
5237 }
5238 EOM
5239 set try
5240 if eval $compile_ok && $run ./try; then
5241         val="$define"
5242         echo "You are using the GNU C Library"
5243 else
5244         val="$undef"
5245         echo "You are not using the GNU C Library"
5246 fi
5247 $rm -f try try.*
5248 set d_gnulibc
5249 eval $setvar
5250
5251 : see if nm is to be used to determine whether a symbol is defined or not
5252 case "$usenm" in
5253 '')
5254         dflt=''
5255         case "$d_gnulibc" in
5256         "$define")
5257                 echo " "
5258                 echo "nm probably won't work on the GNU C Library." >&4
5259                 dflt=n
5260                 ;;
5261         esac
5262         case "$dflt" in
5263         '') 
5264                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5265                         echo " "
5266                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5267                         echo "'nm' won't be sufficient on this sytem." >&4
5268                         dflt=n
5269                 fi
5270                 ;;
5271         esac
5272         case "$dflt" in
5273         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5274                 if $test $dflt -gt 20; then
5275                         dflt=y
5276                 else
5277                         dflt=n
5278                 fi
5279                 ;;
5280         esac
5281         ;;
5282 *)
5283         case "$usenm" in
5284         true|$define) dflt=y;;
5285         *) dflt=n;;
5286         esac
5287         ;;
5288 esac
5289 $cat <<EOM
5290
5291 I can use $nm to extract the symbols from your C libraries. This
5292 is a time consuming task which may generate huge output on the disk (up
5293 to 3 megabytes) but that should make the symbols extraction faster. The
5294 alternative is to skip the 'nm' extraction part and to compile a small
5295 test program instead to determine whether each symbol is present. If
5296 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5297 this may be the best solution.
5298
5299 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5300
5301 EOM
5302 rp="Shall I use $nm to extract C symbols from the libraries?"
5303 . ./myread
5304 case "$ans" in
5305 [Nn]*) usenm=false;;
5306 *) usenm=true;;
5307 esac
5308
5309 runnm=$usenm
5310 case "$reuseval" in
5311 true) runnm=false;;
5312 esac
5313
5314 : nm options which may be necessary
5315 case "$nm_opt" in
5316 '') if $test -f /mach_boot; then
5317                 nm_opt=''       # Mach
5318         elif $test -d /usr/ccs/lib; then
5319                 nm_opt='-p'     # Solaris (and SunOS?)
5320         elif $test -f /dgux; then
5321                 nm_opt='-p'     # DG-UX
5322         elif $test -f /lib64/rld; then
5323                 nm_opt='-p'     # 64-bit Irix
5324         else
5325                 nm_opt=''
5326         fi;;
5327 esac
5328
5329 : nm options which may be necessary for shared libraries but illegal
5330 : for archive libraries.  Thank you, Linux.
5331 case "$nm_so_opt" in
5332 '')     case "$myuname" in
5333         *linux*)
5334                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5335                         nm_so_opt='--dynamic'
5336                 fi
5337                 ;;
5338         esac
5339         ;;
5340 esac
5341
5342 case "$runnm" in
5343 true)
5344 : get list of predefined functions in a handy place
5345 echo " "
5346 case "$libc" in
5347 '') libc=unknown
5348         case "$libs" in
5349         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5350         esac
5351         ;;
5352 esac
5353 case "$libs" in
5354 '') ;;
5355 *)  for thislib in $libs; do
5356         case "$thislib" in
5357         -lc|-lc_s)
5358                 : Handle C library specially below.
5359                 ;;
5360         -l*)
5361                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5362                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5363                         :
5364                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5365                         :
5366                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5367                         :
5368                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5369                         :
5370                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5371                         :
5372                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5373                         :
5374                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5375                         :
5376                 else
5377                         try=''
5378                 fi
5379                 libnames="$libnames $try"
5380                 ;;
5381         *) libnames="$libnames $thislib" ;;
5382         esac
5383         done
5384         ;;
5385 esac
5386 xxx=normal
5387 case "$libc" in
5388 unknown)
5389         set /lib/libc.$so
5390         for xxx in $libpth; do
5391                 $test -r $1 || set $xxx/libc.$so
5392                 : The messy sed command sorts on library version numbers.
5393                 $test -r $1 || \
5394                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5395                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5396                                 h
5397                                 s/[0-9][0-9]*/0000&/g
5398                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5399                                 G
5400                                 s/\n/ /' | \
5401                          $sort | $sed -e 's/^.* //'`
5402                 eval set \$$#
5403         done
5404         $test -r $1 || set /usr/ccs/lib/libc.$so
5405         $test -r $1 || set /lib/libsys_s$_a
5406         ;;
5407 *)
5408         set blurfl
5409         ;;
5410 esac
5411 if $test -r "$1"; then
5412         echo "Your (shared) C library seems to be in $1."
5413         libc="$1"
5414 elif $test -r /lib/libc && $test -r /lib/clib; then
5415         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5416         xxx=apollo
5417         libc='/lib/clib /lib/libc'
5418         if $test -r /lib/syslib; then
5419                 echo "(Your math library is in /lib/syslib.)"
5420                 libc="$libc /lib/syslib"
5421         fi
5422 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5423         echo "Your C library seems to be in $libc, as you said before."
5424 elif $test -r $incpath/usr/lib/libc$_a; then
5425         libc=$incpath/usr/lib/libc$_a;
5426         echo "Your C library seems to be in $libc.  That's fine."
5427 elif $test -r /lib/libc$_a; then
5428         libc=/lib/libc$_a;
5429         echo "Your C library seems to be in $libc.  You're normal."
5430 else
5431         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5432                 :
5433         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5434                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5435         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5436                 :
5437         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5438                 :
5439         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5440                 :
5441         else
5442                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5443         fi
5444         if $test -r "$tans"; then
5445                 echo "Your C library seems to be in $tans, of all places."
5446                 libc=$tans
5447         else
5448                 libc='blurfl'
5449         fi
5450 fi
5451 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5452         dflt="$libc"
5453         cat <<EOM
5454
5455 If the guess above is wrong (which it might be if you're using a strange
5456 compiler, or your machine supports multiple models), you can override it here.
5457
5458 EOM
5459 else
5460         dflt=''
5461         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5462         cat >&4 <<EOM
5463 I can't seem to find your C library.  I've looked in the following places:
5464
5465 EOM
5466         $sed 's/^/      /' libpath
5467         cat <<EOM
5468
5469 None of these seems to contain your C library. I need to get its name...
5470
5471 EOM
5472 fi
5473 fn=f
5474 rp='Where is your C library?'
5475 . ./getfile
5476 libc="$ans"
5477
5478 echo " "
5479 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5480 set X `cat libnames`
5481 shift
5482 xxx=files
5483 case $# in 1) xxx=file; esac
5484 echo "Extracting names from the following $xxx for later perusal:" >&4
5485 echo " "
5486 $sed 's/^/      /' libnames >&4
5487 echo " "
5488 $echo $n "This may take a while...$c" >&4
5489
5490 for file in $*; do
5491         case $file in
5492         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5493         *) $nm $nm_opt $file 2>/dev/null;;
5494         esac
5495 done >libc.tmp
5496
5497 $echo $n ".$c"
5498 $grep fprintf libc.tmp > libc.ptf
5499 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5500 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5501 xxx='[ADTSIW]'
5502 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5503         eval $xscan;\
5504         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5505                 eval $xrun
5506 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5507         eval $xscan;\
5508         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5509                 eval $xrun
5510 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5511         eval $xscan;\
5512         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5513                 eval $xrun
5514 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5515         eval $xscan;\
5516         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5517                 eval $xrun
5518 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5519         eval $xscan;\
5520         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5521                 eval $xrun
5522 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5523         eval $xscan;\
5524         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5525                 eval $xrun
5526 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5527                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5528         eval $xscan;\
5529         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5530                 eval $xrun
5531 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5532         eval $xscan;\
5533         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5534                 eval $xrun
5535 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5536         eval $xscan;\
5537         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5538                 eval $xrun
5539 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5540         eval $xscan;\
5541         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5542                 eval $xrun
5543 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5544         eval $xscan;\
5545         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5546                 eval $xrun
5547 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5548         eval $xscan;\
5549         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5550                 eval $xrun
5551 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5552         eval $xscan;\
5553         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5554                 eval $xrun
5555 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5556         eval $xscan;\
5557         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5558                 eval $xrun
5559 else
5560         $nm -p $* 2>/dev/null >libc.tmp
5561         $grep fprintf libc.tmp > libc.ptf
5562         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5563                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5564         then
5565                 nm_opt='-p'
5566                 eval $xrun
5567         else
5568                 echo " "
5569                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5570                 com=''
5571                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5572                         for thisname in $libnames $libc; do
5573                                 $ar t $thisname >>libc.tmp
5574                         done
5575                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5576                         echo "Ok." >&4
5577                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5578                         # Repeat libc to extract forwarders to DLL entries too
5579                         for thisname in $libnames $libc; do
5580                                 $ar tv $thisname >>libc.tmp
5581                                 # Revision 50 of EMX has bug in $ar.
5582                                 # it will not extract forwarders to DLL entries
5583                                 # Use emximp which will extract exactly them.
5584                                 emximp -o tmp.imp $thisname \
5585                                     2>/dev/null && \
5586                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5587                                     < tmp.imp >>libc.tmp
5588                                 $rm tmp.imp
5589                         done
5590                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5591                         echo "Ok." >&4
5592                 else
5593                         echo "$ar didn't seem to work right." >&4
5594                         echo "Maybe this is a Cray...trying bld instead..." >&4
5595                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5596                         then
5597                                 for thisname in $libnames; do
5598                                         bld t $libnames | \
5599                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5600                                         $ar t $thisname >>libc.tmp
5601                                 done
5602                                 echo "Ok." >&4
5603                         else
5604                                 echo "That didn't work either.  Giving up." >&4
5605                                 exit 1
5606                         fi
5607                 fi
5608         fi
5609 fi
5610 nm_extract="$com"
5611 if $test -f /lib/syscalls.exp; then
5612         echo " "
5613         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5614         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5615 fi
5616 ;;
5617 esac
5618 $rm -f libnames libpath
5619
5620 : is a C symbol defined?
5621 csym='tlook=$1;
5622 case "$3" in
5623 -v) tf=libc.tmp; tc=""; tdc="";;
5624 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5625 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5626 esac;
5627 tx=yes;
5628 case "$reuseval-$4" in
5629 true-) ;;
5630 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5631 esac;
5632 case "$tx" in
5633 yes)
5634         case "$runnm" in
5635         true)
5636                 if $contains $tlook $tf >/dev/null 2>&1;
5637                 then tval=true;
5638                 else tval=false;
5639                 fi;;
5640         *)
5641                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5642                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5643                 then tval=true;
5644                 else tval=false;
5645                 fi;
5646                 $rm -f t t.c;;
5647         esac;;
5648 *)
5649         case "$tval" in
5650         $define) tval=true;;
5651         *) tval=false;;
5652         esac;;
5653 esac;
5654 eval "$2=$tval"'
5655
5656 : define an is-in-libc? function
5657 inlibc='echo " "; td=$define; tu=$undef;
5658 sym=$1; var=$2; eval "was=\$$2";
5659 tx=yes;
5660 case "$reuseval$was" in
5661 true) ;;
5662 true*) tx=no;;
5663 esac;
5664 case "$tx" in
5665 yes)
5666         set $sym tres -f;
5667         eval $csym;
5668         case "$tres" in
5669         true)
5670                 echo "$sym() found." >&4;
5671                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5672         *)
5673                 echo "$sym() NOT found." >&4;
5674                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5675         esac;;
5676 *)
5677         case "$was" in
5678         $define) echo "$sym() found." >&4;;
5679         *) echo "$sym() NOT found." >&4;;
5680         esac;;
5681 esac'
5682
5683 : see if sqrtl exists
5684 set sqrtl d_sqrtl
5685 eval $inlibc
5686
5687 case "$ccflags" in
5688 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5689 esac
5690
5691 case "$uselongdouble" in
5692 $define|true|[yY]*)     dflt='y';;
5693 *) dflt='n';;
5694 esac
5695 cat <<EOM
5696
5697 Perl can be built to take advantage of long doubles which
5698 (if available) may give more accuracy and range for floating point numbers.
5699
5700 If this doesn't make any sense to you, just accept the default '$dflt'.
5701 EOM
5702 rp='Try to use long doubles if available?'
5703 . ./myread
5704 case "$ans" in
5705 y|Y)    val="$define"   ;;
5706 *)      val="$undef"    ;;
5707 esac
5708 set uselongdouble
5709 eval $setvar
5710
5711 case "$uselongdouble" in
5712 true|[yY]*) uselongdouble="$define" ;;
5713 esac
5714
5715 case "$uselongdouble" in
5716 $define)
5717 : Look for a hint-file generated 'call-back-unit'.  If the
5718 : user has specified that long doubles should be used,
5719 : we may need to set or change some other defaults.
5720         if $test -f uselongdouble.cbu; then
5721                 echo "Your platform has some specific hints for long doubles, using them..."
5722                 . ./uselongdouble.cbu
5723         else
5724                 $cat <<EOM
5725 (Your platform doesn't have any specific hints for long doubles.)
5726 EOM
5727         fi
5728         ;;
5729 esac
5730
5731 case "$uselongdouble:$d_sqrtl" in
5732 $define:$undef)
5733                 $cat <<EOM >&4
5734
5735 *** You requested the use of long doubles but you do not seem to have
5736 *** the mathematic functions for long doubles.  I'm disabling the use
5737 *** of long doubles.
5738
5739 EOM
5740         uselongdouble=$undef
5741         ;;
5742 esac
5743
5744 : check for length of double
5745 echo " "
5746 case "$doublesize" in
5747 '')
5748         echo "Checking to see how big your double precision numbers are..." >&4
5749         $cat >try.c <<'EOCP'
5750 #include <stdio.h>
5751 int main()
5752 {
5753     printf("%d\n", (int)sizeof(double));
5754     exit(0);
5755 }
5756 EOCP
5757         set try
5758         if eval $compile_ok; then
5759                 doublesize=`$run ./try`
5760                 echo "Your double is $doublesize bytes long."
5761         else
5762                 dflt='8'
5763                 echo "(I can't seem to compile the test program.  Guessing...)"
5764                 rp="What is the size of a double precision number (in bytes)?"
5765                 . ./myread
5766                 doublesize="$ans"
5767         fi
5768         ;;
5769 esac
5770 $rm -f try.c try
5771
5772 : check for long doubles
5773 echo " "
5774 echo "Checking to see if you have long double..." >&4
5775 echo 'int main() { long double x = 7.0; }' > try.c
5776 set try
5777 if eval $compile; then
5778         val="$define"
5779         echo "You have long double."
5780 else
5781         val="$undef"
5782         echo "You do not have long double."
5783 fi
5784 $rm try.*
5785 set d_longdbl
5786 eval $setvar
5787
5788 : check for length of long double
5789 case "${d_longdbl}${longdblsize}" in
5790 $define)
5791         echo " "
5792         echo "Checking to see how big your long doubles are..." >&4
5793         $cat >try.c <<'EOCP'
5794 #include <stdio.h>
5795 int main()
5796 {
5797         printf("%d\n", sizeof(long double));
5798 }
5799 EOCP
5800         set try
5801         set try
5802         if eval $compile; then
5803                 longdblsize=`$run ./try`
5804                 echo "Your long doubles are $longdblsize bytes long."
5805         else
5806                 dflt='8'
5807                 echo " "
5808                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5809                 rp="What is the size of a long double (in bytes)?"
5810                 . ./myread
5811                 longdblsize="$ans"
5812         fi
5813         if $test "X$doublesize" = "X$longdblsize"; then
5814                 echo "(That isn't any different from an ordinary double.)"
5815         fi      
5816         ;;
5817 esac
5818 $rm -f try.* try
5819
5820 case "$useperlio" in
5821 $define|true|[yY]*|'')  dflt='y';;
5822 *) dflt='n';;
5823 esac
5824 cat <<EOM
5825
5826 Previous version of $package used the standard IO mechanisms as
5827 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5828 alternate IO mechanisms via the PerlIO abstraction layer, but the
5829 stdio mechanism is still available if needed.  The abstraction layer
5830 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5831 Using PerlIO with sfio may cause problems with some extension modules.
5832
5833 If this doesn't make any sense to you, just accept the default '$dflt'.
5834 EOM
5835 rp='Use the PerlIO abstraction layer?'
5836 . ./myread
5837 case "$ans" in
5838 y|Y) 
5839         val="$define"
5840         ;;
5841 *)      
5842         echo "Ok, doing things the stdio way."
5843         val="$undef"
5844         ;;
5845 esac
5846 set useperlio
5847 eval $setvar 
5848
5849 case "$usesocks" in
5850 $define|true|[yY]*)
5851         case "$useperlio" in
5852         $define|true|[yY]*) ;;
5853         *)      cat >&4 <<EOM
5854
5855 You are using the SOCKS proxy protocol library which means that you
5856 should also use the PerlIO layer.  You may be headed for trouble.
5857
5858 EOM
5859                 ;;
5860         esac
5861         ;;
5862 esac
5863
5864         
5865 : determine the architecture name
5866 echo " "
5867 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5868         tarch=`arch`"-$osname"
5869 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5870         if uname -m > tmparch 2>&1 ; then
5871                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5872                         -e 's/$/'"-$osname/" tmparch`
5873         else
5874                 tarch="$osname"
5875         fi
5876         $rm -f tmparch
5877 else
5878         tarch="$osname"
5879 fi
5880 case "$myarchname" in
5881 ''|"$tarch") ;;
5882 *)
5883         echo "(Your architecture name used to be $myarchname.)"
5884         archname=''
5885         ;;
5886 esac
5887 case "$targetarch" in
5888 '') ;;
5889 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5890 esac
5891 myarchname="$tarch"
5892 case "$archname" in
5893 '') dflt="$tarch";;
5894 *) dflt="$archname";;
5895 esac
5896 rp='What is your architecture name'
5897 . ./myread
5898 archname="$ans"
5899 case "$usethreads" in
5900 $define)
5901         echo "Threads selected." >&4
5902         case "$archname" in
5903         *-thread*) echo "...and architecture name already has -thread." >&4
5904                 ;;
5905         *)      archname="$archname-thread"
5906                 echo "...setting architecture name to $archname." >&4
5907                 ;;
5908         esac
5909         ;;
5910 esac
5911 case "$usemultiplicity" in
5912 $define)
5913         echo "Multiplicity selected." >&4
5914         case "$archname" in
5915         *-multi*) echo "...and architecture name already has -multi." >&4
5916                 ;;
5917         *)      archname="$archname-multi"
5918                 echo "...setting architecture name to $archname." >&4
5919                 ;;
5920         esac
5921         ;;
5922 esac
5923 case "$use64bitint$use64bitall" in
5924 *"$define"*)
5925         case "$archname64" in
5926         '')
5927                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5928                 ;;
5929         *)
5930                 case "$use64bitint" in
5931                 "$define") echo "64 bit integers selected." >&4 ;;
5932                 esac
5933                 case "$use64bitall" in
5934                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5935                 esac
5936                 case "$archname" in
5937                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5938                         ;;
5939                 *)      archname="$archname-$archname64"
5940                         echo "...setting architecture name to $archname." >&4
5941                         ;;
5942                 esac
5943                 ;;
5944         esac
5945 esac
5946 case "$uselongdouble" in
5947 $define)
5948         echo "Long doubles selected." >&4
5949         case "$longdblsize" in
5950         $doublesize)
5951                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
5952                 ;;
5953         *)
5954                 case "$archname" in
5955                 *-ld*) echo "...and architecture name already has -ld." >&4
5956                         ;;
5957                 *)      archname="$archname-ld"
5958                         echo "...setting architecture name to $archname." >&4
5959                         ;;
5960                 esac
5961                 ;;
5962         esac
5963         ;;
5964 esac
5965 case "$useperlio" in
5966 $define)
5967         echo "Perlio selected." >&4
5968         ;;
5969 *)
5970         echo "Perlio not selected, using stdio." >&4
5971         case "$archname" in
5972         *-stdio*) echo "...and architecture name already has -stdio." >&4
5973                 ;;
5974         *)      archname="$archname-stdio"
5975                 echo "...setting architecture name to $archname." >&4
5976                 ;;
5977         esac
5978         ;;
5979 esac
5980
5981 : determine root of directory hierarchy where package will be installed.
5982 case "$prefix" in
5983 '')
5984         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5985         ;;
5986 *)
5987         dflt="$prefix"
5988         ;;
5989 esac
5990 $cat <<EOM
5991
5992 By default, $package will be installed in $dflt/bin, manual pages
5993 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5994 installation directories. Typically this is something like /usr/local.
5995 If you wish to have binaries under /usr/bin but other parts of the
5996 installation under /usr/local, that's ok: you will be prompted
5997 separately for each of the installation directories, the prefix being
5998 only used to set the defaults.
5999
6000 EOM
6001 fn=d~
6002 rp='Installation prefix to use?'
6003 . ./getfile
6004 oldprefix=''
6005 case "$prefix" in
6006 '') ;;
6007 *)
6008         case "$ans" in
6009         "$prefix") ;;
6010         *) oldprefix="$prefix";;
6011         esac
6012         ;;
6013 esac
6014 prefix="$ans"
6015 prefixexp="$ansexp"
6016
6017 case "$afsroot" in
6018 '')     afsroot=/afs ;;
6019 *)      afsroot=$afsroot ;;
6020 esac
6021
6022 : is AFS running?
6023 echo " "
6024 case "$afs" in
6025 $define|true)   afs=true ;;
6026 $undef|false)   afs=false ;;
6027 *)      if test -d $afsroot; then
6028                 afs=true
6029         else
6030                 afs=false
6031         fi
6032         ;;
6033 esac
6034 if $afs; then
6035         echo "AFS may be running... I'll be extra cautious then..." >&4
6036 else
6037         echo "AFS does not seem to be running..." >&4
6038 fi
6039
6040 : determine installation prefix for where package is to be installed.
6041 if $afs; then 
6042 $cat <<EOM
6043
6044 Since you are running AFS, I need to distinguish the directory in which
6045 files will reside from the directory in which they are installed (and from
6046 which they are presumably copied to the former directory by occult means).
6047
6048 EOM
6049         case "$installprefix" in
6050         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6051         *) dflt="$installprefix";;
6052         esac
6053 else
6054 $cat <<EOM
6055
6056 In some special cases, particularly when building $package for distribution,
6057 it is convenient to distinguish between the directory in which files should 
6058 be installed from the directory ($prefix) in which they 
6059 will eventually reside.  For most users, these two directories are the same.
6060
6061 EOM
6062         case "$installprefix" in
6063         '') dflt=$prefix ;;
6064         *) dflt=$installprefix;;
6065         esac
6066 fi
6067 fn=d~
6068 rp='What installation prefix should I use for installing files?'
6069 . ./getfile
6070 installprefix="$ans"
6071 installprefixexp="$ansexp"
6072
6073 : set the prefixit variable, to compute a suitable default value
6074 prefixit='case "$3" in
6075 ""|none)
6076         case "$oldprefix" in
6077         "") eval "$1=\"\$$2\"";;
6078         *)
6079                 case "$3" in
6080                 "") eval "$1=";;
6081                 none)
6082                         eval "tp=\"\$$2\"";
6083                         case "$tp" in
6084                         ""|" ") eval "$1=\"\$$2\"";;
6085                         *) eval "$1=";;
6086                         esac;;
6087                 esac;;
6088         esac;;
6089 *)
6090         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6091         case "$tp" in
6092         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6093         /*-$oldprefix/*|\~*-$oldprefix/*)
6094                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6095         *) eval "$1=\"\$$2\"";;
6096         esac;;
6097 esac'
6098
6099 : get the patchlevel
6100 echo " "
6101 echo "Getting the current patchlevel..." >&4
6102 if $test -r $rsrc/patchlevel.h;then
6103         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6104         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6105         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6106         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6107         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6108         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6109        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6110 else
6111         revision=0
6112         patchlevel=0
6113         subversion=0
6114         api_revision=0
6115         api_version=0
6116         api_subversion=0
6117         perl_patchlevel=0
6118         $echo "(You do not have patchlevel.h.  Eek.)"
6119 fi
6120 if $test -r $rsrc/.patch ; then  
6121         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6122                 perl_patchlevel=`cat $rsrc/.patch`
6123         fi
6124 fi
6125 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6126 version_patchlevel_string="version $patchlevel subversion $subversion"
6127 case "$perl_patchlevel" in
6128 0|'') ;;
6129 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6130 esac
6131
6132 $echo "(You have $package $version_patchlevel_string.)"
6133
6134 case "$osname" in
6135 dos|vms)
6136         : XXX Should be a Configure test for double-dots in filenames.
6137         version=`echo $revision $patchlevel $subversion | \
6138                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6139         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6140                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6141         ;;
6142 *)
6143         version=`echo $revision $patchlevel $subversion | \
6144                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6145         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6146                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6147         ;;
6148 esac
6149 : Special case the 5.005_xx maintenance series, which used 5.005
6150 : without any subversion label as a subdirectory in $sitelib
6151 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6152         api_versionstring='5.005'
6153 fi
6154
6155 : determine installation style
6156 : For now, try to deduce it from prefix unless it is already set.
6157 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6158 case "$installstyle" in
6159 '')     case "$prefix" in
6160                 *perl*) dflt='lib';;
6161                 *) dflt='lib/perl5' ;;
6162         esac
6163         ;;
6164 *)      dflt="$installstyle" ;;
6165 esac
6166 : Probably not worth prompting for this since we prompt for all
6167 : the directories individually, and the prompt would be too long and
6168 : confusing anyway.
6169 installstyle=$dflt
6170
6171 : determine where private library files go
6172 : Usual default is /usr/local/lib/perl5/$version.
6173 : Also allow things like /opt/perl/lib/$version, since 
6174 : /opt/perl/lib/perl5... would be redundant.
6175 : The default "style" setting is made in installstyle.U
6176 case "$installstyle" in
6177 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6178 *)       set dflt privlib lib/$version ;;
6179 esac
6180 eval $prefixit
6181 $cat <<EOM
6182
6183 There are some auxiliary files for $package that need to be put into a
6184 private library directory that is accessible by everyone.
6185
6186 EOM
6187 fn=d~+
6188 rp='Pathname where the private library files will reside?'
6189 . ./getfile
6190 privlib="$ans"
6191 privlibexp="$ansexp"
6192 : Change installation prefix, if necessary.
6193 if $test X"$prefix" != X"$installprefix"; then
6194         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6195 else
6196         installprivlib="$privlibexp"
6197 fi
6198
6199 : set the prefixup variable, to restore leading tilda escape
6200 prefixup='case "$prefixexp" in
6201 "$prefix") ;;
6202 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6203 esac'
6204
6205 : determine where public architecture dependent libraries go
6206 set archlib archlib
6207 eval $prefixit
6208 : privlib default is /usr/local/lib/$package/$version
6209 : archlib default is /usr/local/lib/$package/$version/$archname
6210 : privlib may have an optional trailing /share.
6211 tdflt=`echo $privlib | $sed 's,/share$,,'`
6212 tdflt=$tdflt/$archname
6213 case "$archlib" in
6214 '')     dflt=$tdflt
6215         ;;
6216 *)      dflt="$archlib"
6217     ;;
6218 esac
6219 $cat <<EOM
6220
6221 $spackage contains architecture-dependent library files.  If you are
6222 sharing libraries in a heterogeneous environment, you might store
6223 these files in a separate location.  Otherwise, you can just include
6224 them with the rest of the public library files.
6225
6226 EOM
6227 fn=d+~
6228 rp='Where do you want to put the public architecture-dependent libraries?'
6229 . ./getfile
6230 archlib="$ans"
6231 archlibexp="$ansexp"
6232 if $test X"$archlib" = X"$privlib"; then
6233         d_archlib="$undef"
6234 else
6235         d_archlib="$define"
6236 fi
6237 : Change installation prefix, if necessary.
6238 if $test X"$prefix" != X"$installprefix"; then
6239         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6240 else
6241         installarchlib="$archlibexp"
6242 fi
6243
6244
6245 : Binary compatibility with 5.005 is not possible for builds
6246 : with advanced features
6247 case "$usethreads$usemultiplicity" in
6248 *define*)
6249         bincompat5005="$undef"
6250         d_bincompat5005="$undef"
6251         ;;
6252 *)      $cat <<EOM
6253
6254 This version of Perl can be compiled for binary compatibility with 5.005.
6255 If you decide to do so, you will be able to continue using most of the
6256 extensions that were compiled for Perl 5.005.
6257
6258 EOM
6259         case "$bincompat5005$d_bincompat5005" in
6260         *"$undef"*) dflt=n ;;
6261         *) dflt=y ;;
6262         esac
6263         rp='Binary compatibility with Perl 5.005?'
6264         . ./myread
6265         case "$ans" in
6266         y*) val="$define" ;;
6267         *)  val="$undef" ;;
6268         esac
6269         set d_bincompat5005
6270         eval $setvar
6271         case "$d_bincompat5005" in
6272         "$define")
6273                 bincompat5005="$define"
6274                 ;;
6275         *)      bincompat5005="$undef"
6276                 d_bincompat5005="$undef"
6277                 ;;
6278         esac
6279         ;;
6280 esac
6281
6282
6283 : see if setuid scripts can be secure
6284 $cat <<EOM
6285
6286 Some kernels have a bug that prevents setuid #! scripts from being
6287 secure.  Some sites have disabled setuid #! scripts because of this.
6288
6289 First let's decide if your kernel supports secure setuid #! scripts.
6290 (If setuid #! scripts would be secure but have been disabled anyway,
6291 don't say that they are secure if asked.)
6292
6293 EOM
6294
6295 val="$undef"
6296 if $test -d /dev/fd; then
6297         echo "#!$ls" >reflect
6298         chmod +x,u+s reflect
6299         ./reflect >flect 2>&1
6300         if $contains "/dev/fd" flect >/dev/null; then
6301                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6302                 val="$define"
6303         else
6304                 $cat <<EOM
6305 If you are not sure if they are secure, I can check but I'll need a
6306 username and password different from the one you are using right now.
6307 If you don't have such a username or don't want me to test, simply
6308 enter 'none'.
6309
6310 EOM
6311                 rp='Other username to test security of setuid scripts with?'
6312                 dflt='none'
6313                 . ./myread
6314                 case "$ans" in
6315                 n|none)
6316                         case "$d_suidsafe" in
6317                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6318                                 dflt=n;;
6319                         "$undef")
6320                                 echo "Well, the $hint value is *not* secure." >&4
6321                                 dflt=n;;
6322                         *)      echo "Well, the $hint value *is* secure." >&4
6323                                 dflt=y;;
6324                         esac
6325                         ;;
6326                 *)
6327                         $rm -f reflect flect
6328                         echo "#!$ls" >reflect
6329                         chmod +x,u+s reflect
6330                         echo >flect
6331                         chmod a+w flect
6332                         echo '"su" will (probably) prompt you for '"$ans's password."
6333                         su $ans -c './reflect >flect'
6334                         if $contains "/dev/fd" flect >/dev/null; then
6335                                 echo "Okay, it looks like setuid scripts are secure." >&4
6336                                 dflt=y
6337                         else
6338                                 echo "I don't think setuid scripts are secure." >&4
6339                                 dflt=n
6340                         fi
6341                         ;;
6342                 esac
6343                 rp='Does your kernel have *secure* setuid scripts?'
6344                 . ./myread
6345                 case "$ans" in
6346                 [yY]*)  val="$define";;
6347                 *)      val="$undef";;
6348                 esac
6349         fi
6350 else
6351         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6352         echo "(That's for file descriptors, not floppy disks.)"
6353         val="$undef"
6354 fi
6355 set d_suidsafe
6356 eval $setvar
6357
6358 $rm -f reflect flect
6359
6360 : now see if they want to do setuid emulation
6361 echo " "
6362 val="$undef"
6363 case "$d_suidsafe" in
6364 "$define")
6365         val="$undef"
6366         echo "No need to emulate SUID scripts since they are secure here." >& 4
6367         ;;
6368 *)
6369         $cat <<EOM
6370 Some systems have disabled setuid scripts, especially systems where
6371 setuid scripts cannot be secure.  On systems where setuid scripts have
6372 been disabled, the setuid/setgid bits on scripts are currently
6373 useless.  It is possible for $package to detect those bits and emulate
6374 setuid/setgid in a secure fashion.  This emulation will only work if
6375 setuid scripts have been disabled in your kernel.
6376
6377 EOM
6378         case "$d_dosuid" in
6379         "$define") dflt=y ;;
6380         *) dflt=n ;;
6381         esac
6382         rp="Do you want to do setuid/setgid emulation?"
6383         . ./myread
6384         case "$ans" in
6385         [yY]*)  val="$define";;
6386         *)      val="$undef";;
6387         esac
6388         ;;
6389 esac
6390 set d_dosuid
6391 eval $setvar
6392
6393 : see if this is a malloc.h system
6394 set malloc.h i_malloc
6395 eval $inhdr
6396
6397 : see if stdlib is available
6398 set stdlib.h i_stdlib
6399 eval $inhdr
6400
6401 : determine which malloc to compile in
6402 echo " "
6403 case "$usemymalloc" in
6404 [yY]*|true|$define)     dflt='y' ;;
6405 [nN]*|false|$undef)     dflt='n' ;;
6406 *)      case "$ptrsize" in
6407         4) dflt='y' ;;
6408         *) dflt='n' ;;
6409         esac
6410         ;;
6411 esac
6412 rp="Do you wish to attempt to use the malloc that comes with $package?"
6413 . ./myread
6414 usemymalloc="$ans"
6415 case "$ans" in
6416 y*|true)
6417         usemymalloc='y'
6418         mallocsrc='malloc.c'
6419         mallocobj="malloc$_o"
6420         d_mymalloc="$define"
6421         case "$libs" in
6422         *-lmalloc*)
6423                 : Remove malloc from list of libraries to use
6424                 echo "Removing unneeded -lmalloc from library list" >&4
6425                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6426                 shift
6427                 libs="$*"
6428                 echo "libs = $libs" >&4
6429                 ;;
6430         esac
6431         ;;
6432 *)
6433         usemymalloc='n'
6434         mallocsrc=''
6435         mallocobj=''
6436         d_mymalloc="$undef"
6437         ;;
6438 esac
6439
6440 : compute the return types of malloc and free
6441 echo " "
6442 $cat >malloc.c <<END
6443 #$i_malloc I_MALLOC
6444 #$i_stdlib I_STDLIB
6445 #include <stdio.h>
6446 #include <sys/types.h>
6447 #ifdef I_MALLOC
6448 #include <malloc.h>
6449 #endif
6450 #ifdef I_STDLIB
6451 #include <stdlib.h>
6452 #endif
6453 #ifdef TRY_MALLOC
6454 void *malloc();
6455 #endif
6456 #ifdef TRY_FREE
6457 void free();
6458 #endif
6459 END
6460 case "$malloctype" in
6461 '')
6462         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6463                 malloctype='void *'
6464         else
6465                 malloctype='char *'
6466         fi
6467         ;;
6468 esac
6469 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6470
6471 case "$freetype" in
6472 '')
6473         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6474                 freetype='void'
6475         else
6476                 freetype='int'
6477         fi
6478         ;;
6479 esac
6480 echo "Your system uses $freetype free(), it would seem." >&4
6481 $rm -f malloc.[co]
6482 $cat <<EOM
6483
6484 After $package is installed, you may wish to install various
6485 add-on modules and utilities.  Typically, these add-ons will
6486 be installed under $prefix with the rest
6487 of this package.  However, you may wish to install such add-ons
6488 elsewhere under a different prefix.
6489
6490 If you do not wish to put everything under a single prefix, that's
6491 ok.  You will be prompted for the individual locations; this siteprefix
6492 is only used to suggest the defaults.
6493
6494 The default should be fine for most people.
6495
6496 EOM
6497 fn=d~+
6498 rp='Installation prefix to use for add-on modules and utilities?'
6499 : XXX Here might be another good place for an installstyle setting.
6500 case "$siteprefix" in
6501 '') dflt=$prefix ;;
6502 *)  dflt=$siteprefix ;;
6503 esac
6504 . ./getfile
6505 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6506 oldsiteprefix=''
6507 case "$siteprefix" in
6508 '') ;;
6509 *)      case "$ans" in
6510         "$prefix") ;;
6511         *) oldsiteprefix="$prefix";;
6512         esac
6513         ;;
6514 esac
6515 siteprefix="$ans"
6516 siteprefixexp="$ansexp"
6517
6518 : determine where site specific libraries go.
6519 : Usual default is /usr/local/lib/perl5/site_perl/$version
6520 : The default "style" setting is made in installstyle.U
6521 : XXX No longer works with Prefixit stuff.
6522 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6523 case "$sitelib" in
6524 '') case "$installstyle" in
6525         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6526         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6527         esac
6528         ;;
6529 *)      dflt="$sitelib"
6530         ;;
6531 esac
6532 $cat <<EOM
6533
6534 The installation process will create a directory for
6535 site-specific extensions and modules.  Most users find it convenient
6536 to place all site-specific files in this directory rather than in the
6537 main distribution directory.
6538
6539 EOM
6540 fn=d~+
6541 rp='Pathname for the site-specific library files?'
6542 . ./getfile
6543 sitelib="$ans"
6544 sitelibexp="$ansexp"
6545 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6546 : Change installation prefix, if necessary.
6547 if $test X"$prefix" != X"$installprefix"; then
6548         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6549 else
6550         installsitelib="$sitelibexp"
6551 fi
6552
6553 : determine where site specific architecture-dependent libraries go.
6554 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6555 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6556 : sitelib may have an optional trailing /share.
6557 case "$sitearch" in
6558 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6559         dflt="$dflt/$archname"
6560         ;;
6561 *)      dflt="$sitearch"
6562         ;;
6563 esac
6564 set sitearch sitearch none
6565 eval $prefixit
6566 $cat <<EOM
6567
6568 The installation process will also create a directory for
6569 architecture-dependent site-specific extensions and modules.
6570
6571 EOM
6572 fn=d~+
6573 rp='Pathname for the site-specific architecture-dependent library files?'
6574 . ./getfile
6575 sitearch="$ans"
6576 sitearchexp="$ansexp"
6577 : Change installation prefix, if necessary.
6578 if $test X"$prefix" != X"$installprefix"; then
6579         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6580 else
6581         installsitearch="$sitearchexp"
6582 fi
6583
6584 $cat <<EOM
6585
6586 The installation process will also create a directory for
6587 vendor-supplied add-ons.  Vendors who supply perl with their system
6588 may find it convenient to place all vendor-supplied files in this
6589 directory rather than in the main distribution directory.  This will
6590 ease upgrades between binary-compatible maintenance versions of perl.
6591
6592 Of course you may also use these directories in whatever way you see
6593 fit.  For example, you might use them to access modules shared over a
6594 company-wide network.
6595
6596 The default answer should be fine for most people.
6597 This causes further questions about vendor add-ons to be skipped
6598 and no vendor-specific directories will be configured for perl.
6599
6600 EOM
6601 rp='Do you want to configure vendor-specific add-on directories?'
6602 case "$usevendorprefix" in
6603 define|true|[yY]*) dflt=y ;;
6604 *)      : User may have set vendorprefix directly on Configure command line.
6605         case "$vendorprefix" in
6606         ''|' ') dflt=n ;;
6607         *)      dflt=y ;;
6608         esac
6609         ;;
6610 esac
6611 . ./myread
6612 case "$ans" in
6613 [yY]*)  fn=d~+
6614         rp='Installation prefix to use for vendor-supplied add-ons?'
6615         case "$vendorprefix" in
6616         '') dflt='' ;;
6617         *)  dflt=$vendorprefix ;;
6618         esac
6619         . ./getfile
6620         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6621         oldvendorprefix=''
6622         case "$vendorprefix" in
6623         '') ;;
6624         *)      case "$ans" in
6625                 "$prefix") ;;
6626                 *) oldvendorprefix="$prefix";;
6627                 esac
6628                 ;;
6629         esac
6630         usevendorprefix="$define"
6631         vendorprefix="$ans"
6632         vendorprefixexp="$ansexp"
6633         ;;
6634 *)      usevendorprefix="$undef"
6635         vendorprefix=''
6636         vendorprefixexp=''
6637         ;;
6638 esac
6639
6640 case "$vendorprefix" in
6641 '')     d_vendorlib="$undef"
6642         vendorlib=''
6643         vendorlibexp=''
6644         ;;
6645 *)      d_vendorlib="$define"
6646         : determine where vendor-supplied modules go.
6647         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6648         case "$vendorlib" in
6649         '')
6650                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6651                 case "$installstyle" in
6652                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6653                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6654                 esac
6655                 ;;
6656         *)      dflt="$vendorlib"
6657                 ;;
6658         esac
6659         fn=d~+
6660         rp='Pathname for the vendor-supplied library files?'
6661         . ./getfile
6662         vendorlib="$ans"
6663         vendorlibexp="$ansexp"
6664         ;;
6665 esac
6666 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6667 : Change installation prefix, if necessary.
6668 if $test X"$prefix" != X"$installprefix"; then
6669         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6670 else
6671         installvendorlib="$vendorlibexp"
6672 fi
6673
6674 case "$vendorprefix" in
6675 '')     d_vendorarch="$undef"
6676         vendorarch=''
6677         vendorarchexp=''
6678         ;;
6679 *)      d_vendorarch="$define"
6680         : determine where vendor-supplied architecture-dependent libraries go.
6681         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6682         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6683         : vendorlib may have an optional trailing /share.
6684         case "$vendorarch" in
6685         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6686                 dflt="$dflt/$archname"
6687                 ;;
6688         *)      dflt="$vendorarch" ;;
6689         esac
6690         fn=d~+
6691         rp='Pathname for vendor-supplied architecture-dependent files?'
6692         . ./getfile
6693         vendorarch="$ans"
6694         vendorarchexp="$ansexp"
6695         ;;
6696 esac
6697 : Change installation prefix, if necessary.
6698 if $test X"$prefix" != X"$installprefix"; then
6699         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6700 else
6701         installvendorarch="$vendorarchexp"
6702 fi
6703
6704 : Final catch-all directories to search
6705 $cat <<EOM
6706
6707 Lastly, you can have perl look in other directories for extensions and
6708 modules in addition to those already specified.
6709 These directories will be searched after 
6710         $sitearch 
6711         $sitelib 
6712 EOM
6713 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6714 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6715 echo ' '
6716 case "$otherlibdirs" in
6717 ''|' ') dflt='none' ;;
6718 *)      dflt="$otherlibdirs" ;;
6719 esac
6720 $cat <<EOM
6721 Enter a colon-separated set of extra paths to include in perl's @INC
6722 search path, or enter 'none' for no extra paths.
6723
6724 EOM
6725
6726 rp='Colon-separated list of additional directories for perl to search?'
6727 . ./myread
6728 case "$ans" in
6729 ' '|''|none)    otherlibdirs=' ' ;;     
6730 *)      otherlibdirs="$ans" ;;
6731 esac
6732 case "$otherlibdirs" in
6733 ' ') val=$undef ;;
6734 *)      val=$define ;;
6735 esac
6736 set d_perl_otherlibdirs
6737 eval $setvar
6738
6739 : Cruising for prototypes
6740 echo " "
6741 echo "Checking out function prototypes..." >&4
6742 $cat >prototype.c <<'EOCP'
6743 int main(int argc, char *argv[]) {
6744         exit(0);}
6745 EOCP
6746 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6747         echo "Your C compiler appears to support function prototypes."
6748         val="$define"
6749 else
6750         echo "Your C compiler doesn't seem to understand function prototypes."
6751         val="$undef"
6752 fi
6753 set prototype
6754 eval $setvar
6755 $rm -f prototype*
6756
6757 case "$prototype" in
6758 "$define") ;;
6759 *)      ansi2knr='ansi2knr'
6760         echo " "
6761         cat <<EOM >&4
6762
6763 $me:  FATAL ERROR:
6764 This version of $package can only be compiled by a compiler that 
6765 understands function prototypes.  Unfortunately, your C compiler 
6766         $cc $ccflags
6767 doesn't seem to understand them.  Sorry about that.
6768
6769 If GNU cc is available for your system, perhaps you could try that instead.  
6770
6771 Eventually, we hope to support building Perl with pre-ANSI compilers.
6772 If you would like to help in that effort, please contact <perlbug@perl.org>.
6773
6774 Aborting Configure now.
6775 EOM
6776         exit 2
6777         ;;
6778 esac
6779
6780 : determine where public executables go
6781 echo " "
6782 set dflt bin bin
6783 eval $prefixit
6784 fn=d~
6785 rp='Pathname where the public executables will reside?'
6786 . ./getfile
6787 if $test "X$ansexp" != "X$binexp"; then
6788         installbin=''
6789 fi
6790 bin="$ans"
6791 binexp="$ansexp"
6792 : Change installation prefix, if necessary.
6793 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6794 if $test X"$prefix" != X"$installprefix"; then
6795         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6796 else
6797         installbin="$binexp"
6798 fi
6799
6800 echo " "
6801 case "$extras" in
6802 '') dflt='n';;
6803 *) dflt='y';;
6804 esac
6805 cat <<EOM
6806 Perl can be built with extra modules or bundles of modules which
6807 will be fetched from the CPAN and installed alongside Perl.
6808
6809 Notice that you will need access to the CPAN; either via the Internet,
6810 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6811 be asked later to configure the CPAN.pm module which will in turn do
6812 the installation of the rest of the extra modules or bundles.)
6813
6814 Notice also that if the modules require any external software such as
6815 libraries and headers (the libz library and the zlib.h header for the
6816 Compress::Zlib module, for example) you MUST have any such software
6817 already installed, this configuration process will NOT install such
6818 things for you.
6819
6820 If this doesn't make any sense to you, just accept the default '$dflt'.
6821 EOM
6822 rp='Install any extra modules (y or n)?'
6823 . ./myread
6824 case "$ans" in
6825 y|Y)
6826         cat <<EOM
6827
6828 Please list any extra modules or bundles to be installed from CPAN,
6829 with spaces between the names.  The names can be in any format the
6830 'install' command of CPAN.pm will understand.  (Answer 'none',
6831 without the quotes, to install no extra modules or bundles.)
6832 EOM
6833         rp='Extras?'
6834         dflt="$extras"
6835         . ./myread
6836         extras="$ans"
6837 esac
6838 case "$extras" in
6839 ''|'none')
6840         val=''
6841         $rm -f ../extras.lst
6842         ;;
6843 *)      echo "(Saving the list of extras for later...)"
6844         echo "$extras" > ../extras.lst
6845         val="'$extras'"
6846         ;;
6847 esac
6848 set extras
6849 eval $setvar
6850 echo " "
6851
6852 : Find perl5.005 or later.
6853 echo "Looking for a previously installed perl5.005 or later... "
6854 case "$perl5" in
6855 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6856                 : Check if this perl is recent and can load a simple module
6857                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6858                         perl5=$tdir/perl
6859                         break;
6860                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6861                         perl5=$tdir/perl5
6862                         break;
6863                 fi
6864         done
6865         ;;
6866 *)      perl5="$perl5"
6867         ;;
6868 esac
6869 case "$perl5" in
6870 '')     echo "None found.  That's ok.";;
6871 *)      echo "Using $perl5." ;;
6872 esac
6873
6874 : Determine list of previous versions to include in @INC
6875 $cat > getverlist <<EOPL
6876 #!$perl5 -w
6877 use File::Basename;
6878 \$api_versionstring = "$api_versionstring";
6879 \$version = "$version";
6880 \$stem = "$sitelib_stem";
6881 \$archname = "$archname";
6882 EOPL
6883         $cat >> getverlist <<'EOPL'
6884 # Can't have leading @ because metaconfig interprets it as a command!
6885 ;@inc_version_list=();
6886 # XXX Redo to do opendir/readdir? 
6887 if (-d $stem) {
6888     chdir($stem);
6889     ;@candidates = glob("5.*");
6890 }
6891 else {
6892     ;@candidates = ();
6893 }
6894
6895 # XXX ToDo:  These comparisons must be reworked when two-digit
6896 # subversions come along, so that 5.7.10 compares as greater than
6897 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6898 # widespread that we can use the built-in version vectors rather
6899 # than reinventing them here.  For 5.6.0, however, we must
6900 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6901 foreach $d (@candidates) {
6902     if ($d lt $version) {
6903         if ($d ge $api_versionstring) {
6904             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6905         }
6906         elsif ($d ge "5.005") {
6907             unshift(@inc_version_list, grep { -d } $d);
6908         }
6909     }
6910     else {
6911         # Skip newer version.  I.e. don't look in
6912         # 5.7.0 if we're installing 5.6.1.
6913     }
6914 }
6915
6916 if (@inc_version_list) {
6917     print join(' ', @inc_version_list);
6918 }
6919 else {
6920     # Blank space to preserve value for next Configure run.
6921     print " ";
6922 }
6923 EOPL
6924 chmod +x getverlist
6925 case "$inc_version_list" in
6926 '')     if test -x "$perl5$exe_ext"; then
6927                 dflt=`$perl5 getverlist`
6928         else
6929                 dflt='none'
6930         fi
6931         ;;
6932 $undef) dflt='none' ;;
6933 *)  eval dflt=\"$inc_version_list\" ;;
6934 esac
6935 case "$dflt" in
6936 ''|' ') dflt=none ;;
6937 esac
6938 case "$dflt" in
6939 5.005) case "$bincompat5005" in
6940        $define|true|[yY]*) ;;
6941        *) dflt=none ;;
6942        esac
6943        ;;
6944 esac
6945 $cat <<'EOM'
6946
6947 In order to ease the process of upgrading, this version of perl 
6948 can be configured to use modules built and installed with earlier 
6949 versions of perl that were installed under $prefix.  Specify here
6950 the list of earlier versions that this version of perl should check.
6951 If Configure detected no earlier versions of perl installed under
6952 $prefix, then the list will be empty.  Answer 'none' to tell perl
6953 to not search earlier versions.
6954
6955 The default should almost always be sensible, so if you're not sure,
6956 just accept the default.
6957 EOM
6958
6959 rp='List of earlier versions to include in @INC?'
6960 . ./myread
6961 case "$ans" in
6962 [Nn]one|''|' ') inc_version_list=' ' ;;
6963 *) inc_version_list="$ans" ;;
6964 esac
6965 case "$inc_version_list" in
6966 ''|' ') 
6967         inc_version_list_init='0';;
6968 *)      inc_version_list_init=`echo $inc_version_list |
6969                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6970         ;;
6971 esac
6972 $rm -f getverlist
6973
6974 : determine whether to install perl also as /usr/bin/perl
6975
6976 echo " "
6977 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6978         $cat <<EOM
6979 Many scripts expect perl to be installed as /usr/bin/perl.
6980 I can install the perl you are about to compile also as /usr/bin/perl
6981 (in addition to $installbin/perl).
6982 EOM
6983         case "$installusrbinperl" in
6984         "$undef"|[nN]*) dflt='n';;
6985         *)              dflt='y';;
6986         esac
6987         rp="Do you want to install perl as /usr/bin/perl?"
6988         . ./myread
6989         case "$ans" in
6990         [yY]*)  val="$define";;
6991         *)      val="$undef" ;;
6992         esac
6993 else
6994         val="$undef"
6995 fi
6996 set installusrbinperl
6997 eval $setvar
6998
6999 : see if dld is available
7000 set dld.h i_dld
7001 eval $inhdr
7002
7003 : see if dlopen exists
7004 xxx_runnm="$runnm"
7005 runnm=false
7006 set dlopen d_dlopen
7007 eval $inlibc
7008 runnm="$xxx_runnm"
7009
7010 : determine which dynamic loading, if any, to compile in
7011 echo " "
7012 dldir="ext/DynaLoader"
7013 case "$usedl" in
7014 $define|y|true)
7015         dflt='y'
7016         usedl="$define"
7017         ;;
7018 $undef|n|false)
7019         dflt='n'
7020         usedl="$undef"
7021         ;;
7022 *) 
7023         dflt='n'
7024         case "$d_dlopen" in
7025             $define) dflt='y' ;;
7026         esac
7027         case "$i_dld" in
7028             $define) dflt='y' ;;
7029         esac
7030         : Does a dl_xxx.xs file exist for this operating system
7031         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7032         ;;
7033 esac
7034 rp="Do you wish to use dynamic loading?"
7035 . ./myread
7036 usedl="$ans"
7037 case "$ans" in
7038 y*) usedl="$define"
7039         case "$dlsrc" in
7040         '')
7041                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7042                         dflt="$dldir/dl_${osname}.xs"
7043                 elif $test "$d_dlopen" = "$define" ; then
7044                         dflt="$dldir/dl_dlopen.xs"
7045                 elif $test "$i_dld" = "$define" ; then
7046                         dflt="$dldir/dl_dld.xs"
7047                 else
7048                         dflt=''
7049                 fi
7050                 ;;
7051         *)      dflt="$dldir/$dlsrc"
7052                 ;;
7053         esac
7054     echo "The following dynamic loading files are available:"
7055         : Can not go over to $dldir because getfile has path hard-coded in.
7056         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7057         rp="Source file to use for dynamic loading"
7058         fn="fne"
7059         gfpth="$src"
7060         . ./getfile
7061         usedl="$define"
7062         : emulate basename
7063         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7064
7065         $cat << EOM
7066
7067 Some systems may require passing special flags to $cc -c to
7068 compile modules that will be used to create a shared library.
7069 To use no flags, say "none".
7070
7071 EOM
7072     case "$cccdlflags" in
7073     '') case "$gccversion" in
7074                 '') case "$osname" in
7075                         hpux)   dflt='+z' ;;
7076                         next)   dflt='none' ;;
7077                         irix*)  dflt='-KPIC' ;;
7078                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7079                         sunos)  dflt='-pic' ;;
7080                         *)      dflt='none' ;;
7081                     esac
7082                         ;;
7083                 *)  case "$osname" in
7084                         darwin) dflt='none' ;;
7085                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7086                         *)      dflt='-fpic' ;;
7087                     esac ;;
7088             esac ;;
7089         ' ') dflt='none' ;;
7090     *)  dflt="$cccdlflags" ;;
7091     esac
7092     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7093     . ./myread
7094     case "$ans" in
7095     none) cccdlflags=' ' ;;
7096     *) cccdlflags="$ans" ;;
7097     esac
7098
7099     cat << EOM
7100
7101 Some systems use ld to create libraries that can be dynamically loaded,
7102 while other systems (such as those using ELF) use $cc.
7103
7104 EOM
7105         case "$ld" in
7106         '')     $cat >try.c <<'EOM'
7107 /* Test for whether ELF binaries are produced */
7108 #include <fcntl.h>
7109 #include <stdlib.h>
7110 int main() {
7111         char b[4];
7112         int i = open("a.out",O_RDONLY);
7113         if(i == -1) 
7114                 exit(1); /* fail */
7115         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7116                 exit(0); /* succeed (yes, it's ELF) */
7117         else
7118                 exit(1); /* fail */
7119 }
7120 EOM
7121                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7122                         cat <<EOM
7123 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7124 EOM
7125                         dflt="$cc"
7126                 else
7127                         echo "I'll use ld to build dynamic libraries."
7128                         dflt='ld'
7129                 fi
7130                 rm -f try.c a.out
7131                 ;;
7132         *)      dflt="$ld"
7133                 ;;
7134         esac
7135
7136     rp="What command should be used to create dynamic libraries?"
7137     . ./myread
7138         ld="$ans"
7139
7140     cat << EOM
7141
7142 Some systems may require passing special flags to $ld to create a
7143 library that can be dynamically loaded.  If your ld flags include
7144 -L/other/path options to locate libraries outside your loader's normal
7145 search path, you may need to specify those -L options here as well.  To
7146 use no flags, say "none".
7147
7148 EOM
7149     case "$lddlflags" in
7150     '') case "$osname" in
7151                         beos) dflt='-nostart' ;;
7152                         hpux) dflt='-b';
7153                               case "$gccversion" in
7154                               '') dflt="$dflt +vnocompatwarnings" ;;
7155                               esac
7156                               ;;        
7157                         linux|irix*)    dflt='-shared' ;;
7158                         next)  dflt='none' ;;
7159                         solaris) dflt='-G' ;;
7160                         sunos) dflt='-assert nodefinitions' ;;
7161                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7162                 *)     dflt='none' ;;
7163                         esac
7164                         ;;
7165     *) dflt="$lddlflags" ;;
7166     esac
7167
7168         : Try to guess additional flags to pick up local libraries.
7169         : Be careful not to append to a plain 'none'
7170         case "$dflt" in
7171         none) dflt='' ;;
7172         esac
7173         for thisflag in $ldflags; do
7174                 case "$thisflag" in
7175                 -L*|-R*)
7176                         case " $dflt " in
7177                         *" $thisflag "*) ;;
7178                         *) dflt="$dflt $thisflag" ;;
7179                         esac
7180                         ;;
7181                 esac
7182         done
7183
7184         case "$dflt" in
7185         ''|' ') dflt='none' ;;
7186         esac
7187
7188     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7189     . ./myread
7190     case "$ans" in
7191     none) lddlflags=' ' ;;
7192     *) lddlflags="$ans" ;;
7193     esac
7194
7195         cat <<EOM
7196
7197 Some systems may require passing special flags to $cc to indicate that
7198 the resulting executable will use dynamic linking.  To use no flags,
7199 say "none".
7200
7201 EOM
7202     case "$ccdlflags" in
7203     '') case "$osname" in
7204                 hpux)   dflt='-Wl,-E' ;;
7205                 linux)  dflt='-rdynamic' ;;
7206                 next)   dflt='none' ;;
7207                 sunos)  dflt='none' ;;
7208                 *)      dflt='none' ;;
7209             esac ;;
7210     ' ')  dflt='none' ;;
7211     *)  dflt="$ccdlflags" ;;
7212     esac
7213     rp="Any special flags to pass to $cc to use dynamic linking?"
7214     . ./myread
7215     case "$ans" in
7216     none) ccdlflags=' ' ;;
7217     *) ccdlflags="$ans" ;;
7218     esac
7219     ;;
7220 *)  usedl="$undef"
7221         ld='ld'
7222     dlsrc='dl_none.xs'
7223     lddlflags=''
7224     ccdlflags=''
7225     ;;
7226 esac
7227
7228 also=''
7229 case "$usedl" in
7230 $undef)
7231         # No dynamic loading being used, so don't bother even to prompt.
7232         useshrplib='false'
7233         ;;
7234 *)      case "$useshrplib" in
7235         '')     case "$osname" in
7236                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7237                         dflt=y
7238                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7239                         ;;
7240                 next*)
7241                         case "$osvers" in
7242                         4*)     dflt=y
7243                                 also='Building a shared libperl is needed for MAB support.'
7244                                 ;;
7245                         *)      dflt=n
7246                                 ;;
7247                         esac
7248                         ;;
7249                 *)      dflt=n
7250                         ;;
7251                 esac
7252                 ;;
7253         $define|true|[Yy]*)
7254                 dflt=y
7255                 ;;
7256         *)      dflt=n
7257                 ;;
7258         esac
7259         $cat << EOM
7260
7261 The perl executable is normally obtained by linking perlmain.c with
7262 libperl${_a}, any static extensions (usually just DynaLoader), and
7263 any other libraries needed on this system (such as -lm, etc.).  Since
7264 your system supports dynamic loading, it is probably possible to build
7265 a shared libperl.$so.  If you will have more than one executable linked
7266 to libperl.$so, this will significantly reduce the size of each
7267 executable, but it may have a noticeable affect on performance.  The
7268 default is probably sensible for your system.
7269 $also
7270
7271 EOM
7272         rp="Build a shared libperl.$so (y/n)"
7273         . ./myread
7274         case "$ans" in
7275         true|$define|[Yy]*)
7276                 useshrplib='true'  ;;
7277         *)      useshrplib='false' ;;
7278         esac
7279         ;;
7280 esac
7281
7282 case "$useshrplib" in
7283 true)
7284         case "$libperl" in
7285         '')
7286                 # Figure out a good name for libperl.so.  Since it gets stored in
7287                 # a version-specific architecture-dependent library, the version
7288                 # number isn't really that important, except for making cc/ld happy.
7289                 #
7290                 # A name such as libperl.so.3.1
7291                 majmin="libperl.$so.$patchlevel.$subversion"
7292                 # A name such as libperl.so.301
7293                 majonly=`echo $patchlevel $subversion |
7294                         $awk '{printf "%d%02d", $1, $2}'`
7295                 majonly=libperl.$so.$majonly
7296                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7297                 # rely on figuring it out from the naming of libc.
7298                 case "${osname}${osvers}" in
7299                 next4*)
7300                         dflt=libperl.5.$so
7301                         # XXX How handle the --version stuff for MAB?
7302                         ;;
7303                 linux*)  # ld won't link with a bare -lperl otherwise.
7304                         dflt=libperl.$so
7305                         ;;
7306                 cygwin*) # include version
7307                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7308                         ;;
7309                 *)      # Try to guess based on whether libc has major.minor.
7310                         case "$libc" in
7311                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7312                         *libc.$so.[0-9]*) dflt=$majonly ;;
7313                         *)      dflt=libperl.$so ;;
7314                         esac
7315                         ;;
7316                 esac
7317                 ;;
7318         *)      dflt=$libperl
7319                 ;;
7320         esac
7321         cat << EOM
7322
7323 I need to select a good name for the shared libperl.  If your system uses
7324 library names with major and minor numbers, then you might want something
7325 like $majmin.  Alternatively, if your system uses a single version
7326 number for shared libraries, then you might want to use $majonly.
7327 Or, your system might be quite happy with a simple libperl.$so.
7328
7329 Since the shared libperl will get installed into a version-specific
7330 architecture-dependent directory, the version number of the shared perl
7331 library probably isn't important, so the default should be o.k.
7332
7333 EOM
7334         rp='What name do you want to give to the shared libperl?'
7335         . ./myread
7336         libperl=$ans
7337         echo "Ok, I'll use $libperl"
7338         ;;
7339 *)
7340         libperl="libperl${_a}"
7341         ;;
7342 esac
7343
7344 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7345 case "$shrpdir" in
7346 '') ;;
7347 *)      $cat >&4 <<EOM
7348 WARNING:  Use of the shrpdir variable for the installation location of
7349 the shared $libperl is not supported.  It was never documented and
7350 will not work in this version.  Let me (perlbug@perl.org)
7351 know of any problems this may cause.
7352
7353 EOM
7354         case "$shrpdir" in
7355         "$archlibexp/CORE")
7356                 $cat >&4 <<EOM
7357 But your current setting of $shrpdir is
7358 the default anyway, so it's harmless.
7359 EOM
7360                 ;;
7361         *)
7362                 $cat >&4 <<EOM
7363 Further, your current attempted setting of $shrpdir
7364 conflicts with the value of $archlibexp/CORE
7365 that installperl will use.
7366 EOM
7367                 ;;
7368         esac
7369         ;;
7370 esac
7371
7372 # How will the perl executable find the installed shared $libperl?
7373 # Add $xxx to ccdlflags.
7374 # If we can't figure out a command-line option, use $shrpenv to
7375 # set env LD_RUN_PATH.  The main perl makefile uses this.
7376 shrpdir=$archlibexp/CORE
7377 xxx=''
7378 tmp_shrpenv=''
7379 if "$useshrplib"; then
7380     case "$osname" in 
7381         aix)
7382                 # We'll set it in Makefile.SH...
7383                 ;;
7384         solaris|netbsd)
7385                 xxx="-R $shrpdir"
7386                 ;;
7387         freebsd)
7388                 xxx="-Wl,-R$shrpdir"
7389                 ;;
7390         linux|irix*|dec_osf)
7391                 xxx="-Wl,-rpath,$shrpdir"
7392                 ;;
7393         next)
7394                 # next doesn't like the default...
7395                 ;;
7396         beos)
7397                 # beos doesn't like the default, either.
7398                 ;;
7399         hpux*)
7400                 # hpux doesn't like the default, either.
7401                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7402                 ;;
7403         *)
7404                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7405                 ;;
7406         esac
7407         case "$xxx" in
7408         '') ;;
7409         *)      
7410                 # Only add $xxx if it isn't already in ccdlflags.
7411                 case " $ccdlflags " in
7412                 *" $xxx "*)     ;;
7413                 *)      ccdlflags="$ccdlflags $xxx"
7414                         cat <<EOM >&4
7415
7416 Adding $xxx to the flags
7417 passed to $ld so that the perl executable will find the 
7418 installed shared $libperl.
7419
7420 EOM
7421                         ;;
7422                 esac
7423                 ;;
7424         esac
7425 fi
7426 # Fix ccdlflags in AIX for building external extensions.
7427 # (For building Perl itself bare -bE:perl.exp is needed,
7428 #  Makefile.SH takes care of this.)
7429 case "$osname" in
7430 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7431 esac
7432 # Respect a hint or command-line value.
7433 case "$shrpenv" in
7434 '') shrpenv="$tmp_shrpenv" ;;
7435 esac
7436 case "$ldlibpthname" in
7437 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7438 none)   ldlibpthname='' ;;
7439 esac
7440
7441 : determine where manual pages are on this system
7442 echo " "
7443 case "$sysman" in
7444 '') 
7445         syspath='/usr/share/man/man1 /usr/man/man1'
7446         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7447         syspath="$syspath /usr/man/u_man/man1"
7448         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7449         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7450         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7451         sysman=`./loc . /usr/man/man1 $syspath`
7452         ;;
7453 esac
7454 if $test -d "$sysman"; then
7455         echo "System manual is in $sysman." >&4
7456 else
7457         echo "Could not find manual pages in source form." >&4
7458 fi
7459
7460 : determine where manual pages go
7461 set man1dir man1dir none
7462 eval $prefixit
7463 $cat <<EOM
7464
7465 $spackage has manual pages available in source form.
7466 EOM
7467 case "$nroff" in
7468 nroff)
7469         echo "However, you don't have nroff, so they're probably useless to you."
7470         case "$man1dir" in
7471         '') man1dir="none";;
7472         esac;;
7473 esac
7474 echo "If you don't want the manual sources installed, answer 'none'."
7475 case "$man1dir" in
7476 ' ') dflt=none
7477         ;;
7478 '')
7479         lookpath="$prefixexp/share/man/man1"
7480         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7481         lookpath="$lookpath $prefixexp/man/p_man/man1"
7482         lookpath="$lookpath $prefixexp/man/u_man/man1"
7483         lookpath="$lookpath $prefixexp/man/man.1"
7484         case "$sysman" in
7485         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7486         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7487         esac
7488         set dflt
7489         eval $prefixup
7490         ;;
7491 *)  dflt="$man1dir"
7492         ;;
7493 esac
7494 echo " "
7495 fn=dn+~
7496 rp="Where do the main $spackage manual pages (source) go?"
7497 . ./getfile
7498 if $test "X$man1direxp" != "X$ansexp"; then
7499         installman1dir=''
7500 fi
7501 man1dir="$ans"
7502 man1direxp="$ansexp"
7503 case "$man1dir" in
7504 '')     man1dir=' '
7505         installman1dir='';;
7506 esac
7507
7508 : Change installation prefix, if necessary.
7509 if $test X"$prefix" != X"$installprefix"; then
7510         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7511 else
7512         installman1dir="$man1direxp"
7513 fi
7514
7515 : What suffix to use on installed man pages
7516
7517 case "$man1dir" in
7518 ' ')
7519         man1ext='0'
7520         ;;
7521 *)
7522         rp="What suffix should be used for the main $spackage man pages?"
7523         case "$man1ext" in
7524         '')     case "$man1dir" in
7525                 *1)  dflt=1 ;;
7526                 *1p) dflt=1p ;;
7527                 *1pm) dflt=1pm ;;
7528                 *l) dflt=l;;
7529                 *n) dflt=n;;
7530                 *o) dflt=o;;
7531                 *p) dflt=p;;
7532                 *C) dflt=C;;
7533                 *L) dflt=L;;
7534                 *L1) dflt=L1;;
7535                 *) dflt=1;;
7536                 esac
7537                 ;;
7538         *)      dflt="$man1ext";;
7539         esac
7540         . ./myread
7541         man1ext="$ans"
7542         ;;
7543 esac
7544
7545 : see if we can have long filenames
7546 echo " "
7547 first=123456789abcdef
7548 $rm -f $first
7549 if (echo hi >$first) 2>/dev/null; then
7550         if $test -f 123456789abcde; then
7551                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7552                 val="$undef"
7553         else
7554                 echo 'You can have filenames longer than 14 characters.'>&4
7555                 val="$define"
7556         fi
7557 else
7558         $cat <<'EOM'
7559 You can't have filenames longer than 14 chars.
7560 You can't even think about them!
7561 EOM
7562         val="$undef"
7563 fi 
7564 set d_flexfnam
7565 eval $setvar
7566 $rm -rf 123456789abcde*
7567
7568 : determine where library module manual pages go
7569 set man3dir man3dir none
7570 eval $prefixit
7571 $cat <<EOM
7572
7573 $spackage has manual pages for many of the library modules.
7574 EOM
7575
7576 case "$nroff" in
7577 nroff)
7578         $cat <<'EOM'
7579 However, you don't have nroff, so they're probably useless to you.
7580 EOM
7581         case "$man3dir" in
7582         '') man3dir="none";;
7583         esac;;
7584 esac
7585
7586 case "$d_flexfnam" in
7587 undef)
7588         $cat <<'EOM'
7589 However, your system can't handle the long file names like File::Basename.3. 
7590 EOM
7591         case "$man3dir" in
7592         '') man3dir="none";;
7593         esac;;
7594 esac
7595
7596 echo "If you don't want the manual sources installed, answer 'none'."
7597 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7598 case "$man3dir" in
7599 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7600         if $test -d "$privlib/man/man3"; then
7601                 cat <<EOM >&4
7602
7603 WARNING:  Previous versions of perl installed man3 pages into
7604 $privlib/man/man3.  This version will suggest a 
7605 new default of $dflt.  
7606 EOM
7607                 tdflt=$dflt
7608                 dflt='n'
7609                 rp='Do you wish to preserve the old behavior?(y/n)'
7610                 . ./myread
7611                 case "$ans" in
7612                 y*) dflt="$privlib/man/man3" ;;
7613                 *)  dflt=$tdflt ;;
7614                 esac
7615     fi
7616         ;;
7617 *)      dflt="$man3dir" ;;
7618 esac
7619 case "$dflt" in
7620 ' ') dflt=none ;;
7621 esac
7622 echo " "
7623 fn=dn+~
7624 rp="Where do the $package library man pages (source) go?"
7625 . ./getfile
7626 man3dir="$ans"
7627 man3direxp="$ansexp"
7628 case "$man3dir" in
7629 '')     man3dir=' '
7630         installman3dir='';;
7631 esac
7632
7633 : Change installation prefix, if necessary.
7634 if $test X"$prefix" != X"$installprefix"; then
7635         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7636 else
7637         installman3dir="$man3direxp"
7638 fi
7639
7640 : What suffix to use on installed man pages
7641 case "$man3dir" in
7642 ' ')
7643         man3ext='0'
7644         ;;
7645 *)
7646         rp="What suffix should be used for the $package library man pages?"
7647         case "$man3ext" in
7648         '')     case "$man3dir" in
7649                 *3)  dflt=3 ;;
7650                 *3p) dflt=3p ;;
7651                 *3pm) dflt=3pm ;;
7652                 *l) dflt=l;;
7653                 *n) dflt=n;;
7654                 *o) dflt=o;;
7655                 *p) dflt=p;;
7656                 *C) dflt=C;;
7657                 *L) dflt=L;;
7658                 *L3) dflt=L3;;
7659                 *) dflt=3;;
7660                 esac
7661                 ;;
7662         *)      dflt="$man3ext";;
7663         esac
7664         . ./myread
7665         man3ext="$ans"
7666         ;;
7667 esac
7668
7669 : see if we have to deal with yellow pages, now NIS.
7670 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7671         if $test -f /usr/etc/nibindd; then
7672                 echo " "
7673                 echo "I'm fairly confident you're on a NeXT."
7674                 echo " "
7675                 rp='Do you get the hosts file via NetInfo?'
7676                 dflt=y
7677                 case "$hostcat" in
7678                 nidump*) ;;
7679                 '') ;;
7680                 *) dflt=n;;
7681                 esac
7682                 . ./myread
7683                 case "$ans" in
7684                 y*) hostcat='nidump hosts .';;
7685                 *)      case "$hostcat" in
7686                         nidump*) hostcat='';;
7687                         esac
7688                         ;;
7689                 esac
7690         fi
7691         case "$hostcat" in
7692         nidump*) ;;
7693         *)
7694                 case "$hostcat" in
7695                 *ypcat*) dflt=y;;
7696                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7697                                 dflt=y
7698                         else
7699                                 dflt=n
7700                         fi;;
7701                 *) dflt=n;;
7702                 esac
7703                 echo " "
7704                 rp='Are you getting the hosts file via yellow pages?'
7705                 . ./myread
7706                 case "$ans" in
7707                 y*) hostcat='ypcat hosts';;
7708                 *) hostcat='cat /etc/hosts';;
7709                 esac
7710                 ;;
7711         esac
7712 fi
7713 case "$hostcat" in
7714 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7715 esac
7716 case "$groupcat" in
7717 '') test -f /etc/group && groupcat='cat /etc/group';;
7718 esac
7719 case "$passcat" in
7720 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7721 esac
7722
7723 : now get the host name
7724 echo " "
7725 echo "Figuring out host name..." >&4
7726 case "$myhostname" in
7727 '') cont=true
7728         echo 'Maybe "hostname" will work...'
7729         if tans=`sh -c hostname 2>&1` ; then
7730                 myhostname=$tans
7731                 phostname=hostname
7732                 cont=''
7733         fi
7734         ;;
7735 *) cont='';;
7736 esac
7737 if $test "$cont"; then
7738         if ./xenix; then
7739                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7740                 if tans=`cat /etc/systemid 2>&1` ; then
7741                         myhostname=$tans
7742                         phostname='cat /etc/systemid'
7743                         echo "Whadyaknow.  Xenix always was a bit strange..."
7744                         cont=''
7745                 fi
7746         elif $test -r /etc/systemid; then
7747                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7748         fi
7749 fi
7750 if $test "$cont"; then
7751         echo 'No, maybe "uuname -l" will work...'
7752         if tans=`sh -c 'uuname -l' 2>&1` ; then
7753                 myhostname=$tans
7754                 phostname='uuname -l'
7755         else
7756                 echo 'Strange.  Maybe "uname -n" will work...'
7757                 if tans=`sh -c 'uname -n' 2>&1` ; then
7758                         myhostname=$tans
7759                         phostname='uname -n'
7760                 else
7761                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7762                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7763                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7764                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7765                         else
7766                                 case "$myhostname" in
7767                                 '') echo "Does this machine have an identity crisis or something?"
7768                                         phostname='';;
7769                                 *)
7770                                         echo "Well, you said $myhostname before..."
7771                                         phostname='echo $myhostname';;
7772                                 esac
7773                         fi
7774                 fi
7775         fi
7776 fi
7777 : you do not want to know about this
7778 set $myhostname
7779 myhostname=$1
7780
7781 : verify guess
7782 if $test "$myhostname" ; then
7783         dflt=y
7784         rp='Your host name appears to be "'$myhostname'".'" Right?"
7785         . ./myread
7786         case "$ans" in
7787         y*) ;;
7788         *) myhostname='';;
7789         esac
7790 fi
7791
7792 : bad guess or no guess
7793 while $test "X$myhostname" = X ; do
7794         dflt=''
7795         rp="Please type the (one word) name of your host:"
7796         . ./myread
7797         myhostname="$ans"
7798 done
7799
7800 : translate upper to lower if necessary
7801 case "$myhostname" in
7802 *[A-Z]*)
7803         echo "(Normalizing case in your host name)"
7804         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7805         ;;
7806 esac
7807
7808 case "$myhostname" in
7809 *.*)
7810         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7811         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7812         echo "(Trimming domain name from host name--host name is now $myhostname)"
7813         ;;
7814 *) case "$mydomain" in
7815         '')
7816                 {
7817                         test "X$hostcat" = "Xypcat hosts" &&
7818                         ypmatch "$myhostname" hosts 2>/dev/null |\
7819                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7820                         $test -s hosts
7821                 } || {
7822                         test "X$hostcat" != "X" &&
7823                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7824                                         /[       ]$myhostname[  . ]/p" > hosts
7825                 }
7826                 tmp_re="[       . ]"
7827                 if $test -f hosts; then
7828                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7829                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7830                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7831                                 hosts | $sort | $uniq | \
7832                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7833                         case `$echo X$dflt` in
7834                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7835                                 dflt=.
7836                                 ;;
7837                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7838                                 ;;
7839                         esac
7840                 else
7841                         echo "(I cannot locate a hosts database anywhere)"
7842                         dflt=.
7843                 fi
7844                 case "$dflt" in
7845                 .)
7846                         tans=`./loc resolv.conf X /etc /usr/etc`
7847                         if $test -f "$tans"; then
7848                                 echo "(Attempting domain name extraction from $tans)"
7849                                 dflt=.`$sed -n -e 's/   / /g' \
7850                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7851                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7852                                 case "$dflt" in
7853                                 .) dflt=.`$sed -n -e 's/        / /g' \
7854                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7855                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7856                                         ;;
7857                                 esac
7858                         fi
7859                         ;;
7860                 esac
7861                 case "$dflt" in
7862                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7863                         dflt=.`sh -c domainname 2>/dev/null`
7864                         case "$dflt" in
7865                         '') dflt='.';;
7866                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7867                         esac
7868                         ;;
7869                 esac
7870                 case "$dflt$osname" in
7871                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7872                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7873                         ;;
7874                 esac
7875                 case "$dflt" in
7876                 .) echo "(Lost all hope -- silly guess then)"
7877                         dflt='.uucp'
7878                         ;;
7879                 esac
7880                 $rm -f hosts
7881                 ;;
7882         *) dflt="$mydomain";;
7883         esac;;
7884 esac
7885 echo " "
7886 rp="What is your domain name?"
7887 . ./myread
7888 tans="$ans"
7889 case "$ans" in
7890 '') ;;
7891 .*) ;;
7892 *) tans=".$tans";;
7893 esac
7894 mydomain="$tans"
7895
7896 : translate upper to lower if necessary
7897 case "$mydomain" in
7898 *[A-Z]*)
7899         echo "(Normalizing case in your domain name)"
7900         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7901         ;;
7902 esac
7903
7904 : a little sanity check here
7905 case "$phostname" in
7906 '') ;;
7907 *)
7908         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7909         $myhostname$mydomain|$myhostname) ;;
7910         *)
7911                 case "$phostname" in
7912                 sed*)
7913                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7914                         ;;
7915                 *)
7916                         echo "(That doesn't agree with your $phostname command, by the way.)"
7917                         ;;
7918                 esac
7919         ;;
7920         esac
7921         ;;
7922 esac
7923
7924 $cat <<EOM
7925
7926 I need to get your e-mail address in Internet format if possible, i.e.
7927 something like user@host.domain. Please answer accurately since I have
7928 no easy means to double check it. The default value provided below
7929 is most probably close to reality but may not be valid from outside
7930 your organization...
7931
7932 EOM
7933 cont=x
7934 while test "$cont"; do
7935         case "$cf_email" in
7936         '') dflt="$cf_by@$myhostname$mydomain";;
7937         *) dflt="$cf_email";;
7938         esac
7939         rp='What is your e-mail address?'
7940         . ./myread
7941         cf_email="$ans"
7942         case "$cf_email" in
7943         *@*.*) cont='' ;;
7944         *)
7945                 rp='Address does not look like an Internet one.  Use it anyway?'
7946                 case "$fastread" in
7947                 yes) dflt=y ;;
7948                 *) dflt=n ;;
7949                 esac
7950                 . ./myread
7951                 case "$ans" in
7952                 y*) cont='' ;;
7953                 *) echo " " ;;
7954                 esac
7955                 ;;
7956         esac
7957 done
7958
7959 $cat <<EOM
7960
7961 If you or somebody else will be maintaining perl at your site, please
7962 fill in the correct e-mail address here so that they may be contacted
7963 if necessary. Currently, the "perlbug" program included with perl
7964 will send mail to this address in addition to perlbug@perl.org. You may
7965 enter "none" for no administrator.
7966
7967 EOM
7968 case "$perladmin" in
7969 '') dflt="$cf_email";;
7970 *) dflt="$perladmin";;
7971 esac
7972 rp='Perl administrator e-mail address'
7973 . ./myread
7974 perladmin="$ans"
7975
7976 : determine whether to only install version-specific parts.
7977 echo " "
7978 $cat <<EOM
7979 Do you want to install only the version-specific parts of the perl
7980 distribution?  Usually you do *not* want to do this.
7981 EOM
7982 case "$versiononly" in
7983 "$define"|[Yy]*|true) dflt='y' ;;
7984 *) dflt='n';
7985 esac
7986 rp="Do you want to install only the version-specific parts of perl?"
7987 . ./myread
7988 case "$ans" in
7989 [yY]*)  val="$define";;
7990 *)      val="$undef" ;;
7991 esac
7992 set versiononly
7993 eval $setvar
7994
7995 : figure out how to guarantee perl startup
7996 case "$startperl" in
7997 '')
7998         case "$sharpbang" in
7999         *!)
8000                 $cat <<EOH
8001
8002 I can use the #! construct to start perl on your system. This will
8003 make startup of perl scripts faster, but may cause problems if you
8004 want to share those scripts and perl is not in a standard place
8005 ($binexp/perl) on all your platforms. The alternative is to force
8006 a shell by starting the script with a single ':' character.
8007
8008 EOH
8009                 case "$versiononly" in
8010                 "$define")      dflt="$binexp/perl$version";;  
8011                 *)              dflt="$binexp/perl";;
8012                 esac
8013                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8014                 . ./myread
8015                 case "$ans" in
8016                 none)   startperl=": # use perl";;
8017                 *)      startperl="#!$ans"
8018                         if $test 30 -lt `echo "$ans" | wc -c`; then
8019                                 $cat >&4 <<EOM
8020
8021 WARNING:  Some systems limit the #! command to 32 characters.
8022 If you experience difficulty running Perl scripts with #!, try
8023 installing Perl in a directory with a shorter pathname.
8024
8025 EOM
8026                         fi ;;
8027                 esac
8028                 ;;
8029         *) startperl=": # use perl"
8030                 ;;
8031         esac
8032         ;;
8033 esac
8034 echo "I'll use $startperl to start perl scripts."
8035
8036 : figure best path for perl in scripts
8037 case "$perlpath" in
8038 '')
8039         perlpath="$binexp/perl"
8040         case "$startperl" in
8041         *!*) ;;
8042         *)
8043                 $cat <<EOH
8044
8045 I will use the "eval 'exec'" idiom to start Perl on your system.
8046 I can use the full path of your Perl binary for this purpose, but
8047 doing so may cause problems if you want to share those scripts and
8048 Perl is not always in a standard place ($binexp/perl).
8049
8050 EOH
8051                 dflt="$binexp/perl"
8052                 rp="What path shall I use in \"eval 'exec'\"?"
8053                 . ./myread
8054                 perlpath="$ans"
8055                 ;;
8056         esac
8057         ;;
8058 esac
8059 case "$startperl" in
8060 *!*)    ;;
8061 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8062 esac
8063
8064 : determine where public executable scripts go
8065 set scriptdir scriptdir
8066 eval $prefixit
8067 case "$scriptdir" in
8068 '')
8069         dflt="$bin"
8070         : guess some guesses
8071         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8072         $test -d /usr/share/bin     && dflt=/usr/share/bin
8073         $test -d /usr/local/script  && dflt=/usr/local/script
8074         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8075         $test -d $prefixexp/script  && dflt=$prefixexp/script
8076         set dflt
8077         eval $prefixup
8078         ;;
8079 *)  dflt="$scriptdir"
8080         ;;
8081 esac
8082 $cat <<EOM
8083  
8084 Some installations have a separate directory just for executable scripts so
8085 that they can mount it across multiple architectures but keep the scripts in
8086 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8087 Or you might just lump your scripts in with all your other executables.
8088  
8089 EOM
8090 fn=d~
8091 rp='Where do you keep publicly executable scripts?'
8092 . ./getfile
8093 if $test "X$ansexp" != "X$scriptdirexp"; then
8094         installscript=''
8095 fi
8096 scriptdir="$ans"
8097 scriptdirexp="$ansexp"
8098 : Change installation prefix, if necessary.
8099 if $test X"$prefix" != X"$installprefix"; then
8100         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8101 else
8102         installscript="$scriptdirexp"
8103 fi
8104
8105 : determine where add-on public executables go
8106 case "$sitebin" in
8107 '')     dflt=$siteprefix/bin ;;
8108 *)      dflt=$sitebin ;;
8109 esac
8110 fn=d~
8111 rp='Pathname where the add-on public executables should be installed?'
8112 . ./getfile
8113 sitebin="$ans"
8114 sitebinexp="$ansexp"
8115 : Change installation prefix, if necessary.
8116 if $test X"$prefix" != X"$installprefix"; then
8117         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8118 else
8119         installsitebin="$sitebinexp"
8120 fi
8121
8122 : define an is-a-typedef? function
8123 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8124 case "$inclist" in
8125 "") inclist="sys/types.h";;
8126 esac;
8127 eval "varval=\$$var";
8128 case "$varval" in
8129 "")
8130         $rm -f temp.c;
8131         for inc in $inclist; do
8132                 echo "#include <$inc>" >>temp.c;
8133         done;
8134         echo "#ifdef $type" >> temp.c;
8135         echo "printf(\"We have $type\");" >> temp.c;
8136         echo "#endif" >> temp.c;
8137         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8138         if $contains $type temp.E >/dev/null 2>&1; then
8139                 eval "$var=\$type";
8140         else
8141                 eval "$var=\$def";
8142         fi;
8143         $rm -f temp.?;;
8144 *) eval "$var=\$varval";;
8145 esac'
8146
8147 : define an is-a-typedef? function that prompts if the type is not available.
8148 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8149 case "$inclist" in
8150 "") inclist="sys/types.h";;
8151 esac;
8152 eval "varval=\$$var";
8153 case "$varval" in
8154 "")
8155         $rm -f temp.c;
8156         for inc in $inclist; do
8157                 echo "#include <$inc>" >>temp.c;
8158         done;
8159         echo "#ifdef $type" >> temp.c;
8160         echo "printf(\"We have $type\");" >> temp.c;
8161         echo "#endif" >> temp.c;
8162         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8163         echo " " ;
8164         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8165         if $contains $type temp.E >/dev/null 2>&1; then
8166                 echo "$type found." >&4;
8167                 eval "$var=\$type";
8168         else
8169                 echo "$type NOT found." >&4;
8170                 dflt="$def";
8171                 . ./myread ;
8172                 eval "$var=\$ans";
8173         fi;
8174         $rm -f temp.?;;
8175 *) eval "$var=\$varval";;
8176 esac'
8177
8178 : see what type lseek is declared as in the kernel
8179 rp="What is the type used for lseek's offset on this system?"
8180 set off_t lseektype long stdio.h sys/types.h
8181 eval $typedef_ask
8182
8183 echo " "
8184 echo "Checking to see how big your file offsets are..." >&4
8185 $cat >try.c <<EOCP
8186 #include <sys/types.h>
8187 #include <stdio.h>
8188 int main()
8189 {
8190     printf("%d\n", (int)sizeof($lseektype));
8191     return(0); 
8192 }
8193 EOCP
8194 set try
8195 if eval $compile_ok; then
8196         lseeksize=`$run ./try`
8197         echo "Your file offsets are $lseeksize bytes long."
8198 else
8199         dflt=$longsize
8200         echo " "
8201         echo "(I can't seem to compile the test program.  Guessing...)"
8202         rp="What is the size of your file offsets (in bytes)?"
8203         . ./myread
8204         lseeksize="$ans"
8205 fi
8206 $rm -f try.c try
8207
8208 : see what type file positions are declared as in the library
8209 rp="What is the type for file position used by fsetpos()?"
8210 set fpos_t fpostype long stdio.h sys/types.h
8211 eval $typedef_ask
8212
8213 echo " "
8214 case "$fpostype" in
8215 *_t) zzz="$fpostype"    ;;
8216 *)   zzz="fpos_t"       ;;
8217 esac
8218 echo "Checking the size of $zzz..." >&4 
8219 cat > try.c <<EOCP
8220 #include <sys/types.h>
8221 #include <stdio.h>
8222 int main() {
8223     printf("%d\n", (int)sizeof($fpostype));
8224     exit(0);
8225 }
8226 EOCP
8227 set try
8228 if eval $compile_ok; then
8229         yyy=`$run ./try`
8230         case "$yyy" in
8231         '')     fpossize=4
8232                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8233                 ;;
8234         *)      fpossize=$yyy
8235                 echo "Your $zzz is $fpossize bytes long."
8236                 ;;
8237         esac
8238 else
8239         dflt="$longsize"
8240         echo " " >&4
8241         echo "(I can't compile the test program.  Guessing...)" >&4
8242         rp="What is the size of your file positions (in bytes)?"
8243         . ./myread
8244         fpossize="$ans"
8245 fi
8246
8247
8248
8249 # Backward compatibility (uselfs is deprecated).
8250 case "$uselfs" in
8251 "$define"|true|[yY]*)
8252         cat <<EOM >&4
8253
8254 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8255 EOM
8256         uselargefiles="$define"
8257         ;;
8258 esac                          
8259
8260 case "$lseeksize:$fpossize" in
8261 8:8) cat <<EOM
8262
8263 You can have files larger than 2 gigabytes.
8264 EOM
8265    val="$define" ;;
8266 *)    case "$uselargefiles" in
8267    "$undef"|false|[nN]*) dflt='n' ;;
8268    *)   dflt='y' ;;
8269    esac
8270    cat <<EOM
8271
8272 Perl can be built to understand large files (files larger than 2 gigabytes)
8273 on some systems.  To do so, Configure can be run with -Duselargefiles.
8274
8275 If this doesn't make any sense to you, just accept the default '$dflt'.
8276 EOM
8277    rp='Try to understand large files, if available?'
8278    . ./myread
8279    case "$ans" in
8280    y|Y)         val="$define" ;;
8281    *)           val="$undef"  ;;
8282    esac
8283    ;;
8284 esac
8285 set uselargefiles
8286 eval $setvar
8287 case "$uselargefiles" in
8288 "$define")
8289 : Look for a hint-file generated 'call-back-unit'.  If the
8290 : user has specified that a large files perl is to be built,
8291 : we may need to set or change some other defaults.
8292         if $test -f uselargefiles.cbu; then
8293                 echo "Your platform has some specific hints for large file builds, using them..."
8294                 . ./uselargefiles.cbu
8295                 echo " "
8296                 echo "Rechecking to see how big your file offsets are..." >&4
8297                 $cat >try.c <<EOCP
8298 #include <sys/types.h>
8299 #include <stdio.h>
8300 int main()
8301 {
8302     printf("%d\n", (int)sizeof($lseektype));
8303     return(0); 
8304 }
8305 EOCP
8306                 set try
8307                 if eval $compile_ok; then
8308                         lseeksize=`$run ./try`
8309                         $echo "Your file offsets are now $lseeksize bytes long."
8310                 else
8311                         dflt="$lseeksize"
8312                         echo " "
8313                         echo "(I can't seem to compile the test program.  Guessing...)"
8314                         rp="What is the size of your file offsets (in bytes)?"
8315                         . ./myread
8316                         lseeksize="$ans"
8317                 fi
8318                 case "$fpostype" in
8319                 *_t) zzz="$fpostype"    ;;
8320                 *)   zzz="fpos_t"       ;;
8321                 esac
8322                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8323                 $cat > try.c <<EOCP
8324 #include <sys/types.h>
8325 #include <stdio.h>
8326 int main() {
8327     printf("%d\n", (int)sizeof($fpostype));
8328     exit(0);
8329 }
8330 EOCP
8331                 set try
8332                 if eval $compile_ok; then
8333                         yyy=`$run ./try`
8334                         dflt="$lseeksize"
8335                         case "$yyy" in
8336                         '')     echo " "
8337                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8338                                 ;;
8339                         *)      fpossize=$yyy
8340                                 echo " $fpossize bytes." >&4
8341                                 ;;
8342                         esac
8343                 else
8344                         dflt="$fpossize"
8345                         echo " "
8346                         echo "(I can't compile the test program.  Guessing...)" >&4
8347                         rp="What is the size of your file positions (in bytes)?"
8348                         . ./myread
8349                         fpossize="$ans"
8350                 fi
8351                 $rm -f try.c try
8352         fi
8353         ;;
8354 esac
8355
8356 case "$vendorprefix" in
8357 '')     d_vendorbin="$undef"
8358         vendorbin=''
8359         vendorbinexp=''
8360         ;;
8361 *)      d_vendorbin="$define"
8362         : determine where vendor-supplied executables go.
8363         case "$vendorbin" in
8364         '') dflt=$vendorprefix/bin ;;
8365         *)      dflt="$vendorbin" ;;
8366         esac
8367         fn=d~+
8368         rp='Pathname for the vendor-supplied executables directory?'
8369         . ./getfile
8370         vendorbin="$ans"
8371         vendorbinexp="$ansexp"
8372         ;;
8373 esac
8374 : Change installation prefix, if necessary.
8375 if $test X"$prefix" != X"$installprefix"; then
8376         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8377 else
8378         installvendorbin="$vendorbinexp"
8379 fi
8380
8381 : see if qgcvt exists
8382 set qgcvt d_qgcvt
8383 eval $inlibc
8384
8385 echo " "
8386
8387 if $test X"$d_longdbl" = X"$define"; then
8388
8389 echo "Checking how to print long doubles..." >&4
8390
8391 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8392         $cat >try.c <<'EOCP'
8393 #include <sys/types.h>
8394 #include <stdio.h>
8395 int main() {
8396   double d = 123.456;
8397   printf("%.3f\n", d);
8398 }
8399 EOCP
8400         set try
8401         if eval $compile; then
8402                 yyy=`$run ./try`
8403                 case "$yyy" in
8404                 123.456)
8405                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8406                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8407                         echo "We will use %f."
8408                         ;;
8409                 esac
8410         fi
8411 fi
8412
8413 if $test X"$sPRIfldbl" = X; then
8414         $cat >try.c <<'EOCP'
8415 #include <sys/types.h>
8416 #include <stdio.h>
8417 int main() {
8418   long double d = 123.456;
8419   printf("%.3Lf\n", d);
8420 }
8421 EOCP
8422         set try
8423         if eval $compile; then
8424                 yyy=`$run ./try`
8425                 case "$yyy" in
8426                 123.456)
8427                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8428                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8429                         echo "We will use %Lf."
8430                         ;;
8431                 esac
8432         fi
8433 fi
8434
8435 if $test X"$sPRIfldbl" = X; then
8436         $cat >try.c <<'EOCP'
8437 #include <sys/types.h>
8438 #include <stdio.h>
8439 int main() {
8440   long double d = 123.456;
8441   printf("%.3llf\n", d);
8442 }
8443 EOCP
8444         set try
8445         if eval $compile; then
8446                 yyy=`$run ./try`
8447                 case "$yyy" in
8448                 123.456)
8449                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8450                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8451                         echo "We will use %llf."
8452                         ;;
8453                 esac
8454         fi
8455 fi
8456
8457 if $test X"$sPRIfldbl" = X; then
8458         $cat >try.c <<'EOCP'
8459 #include <sys/types.h>
8460 #include <stdio.h>
8461 int main() {
8462   long double d = 123.456;
8463   printf("%.3lf\n", d);
8464 }
8465 EOCP
8466         set try
8467         if eval $compile; then
8468                 yyy=`$run ./try`
8469                 case "$yyy" in
8470                 123.456)
8471                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8472                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8473                         echo "We will use %lf."
8474                         ;;
8475                 esac
8476         fi
8477 fi
8478
8479 if $test X"$sPRIfldbl" = X; then
8480         echo "Cannot figure out how to print long doubles." >&4
8481 else
8482         sSCNfldbl=$sPRIfldbl    # expect consistency
8483 fi
8484
8485 $rm -f try try.*
8486
8487 fi # d_longdbl
8488
8489 case "$sPRIfldbl" in
8490 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8491         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8492         d_SCNfldbl="$undef";
8493         ;;
8494 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8495         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8496         d_SCNfldbl="$define";
8497         ;;
8498 esac
8499
8500 : Check how to convert floats to strings.
8501 echo " "
8502 echo "Checking for an efficient way to convert floats to strings."
8503 echo " " > try.c
8504 case "$uselongdouble" in
8505 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8506 esac
8507 case "$d_longdbl" in
8508 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8509 esac
8510 case "$d_PRIgldbl" in
8511 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8512 esac
8513 $cat >>try.c <<EOP
8514 #ifdef TRY_gconvert
8515 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8516 char *myname = "gconvert";
8517 #endif
8518 #ifdef TRY_gcvt
8519 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8520 char *myname = "gcvt";
8521 #endif
8522 #ifdef TRY_qgcvt
8523 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8524 char *myname = "qgcvt";
8525 #define DOUBLETYPE long double
8526 #endif
8527 #ifdef TRY_sprintf
8528 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8529 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8530 #else
8531 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8532 #endif
8533 char *myname = "sprintf";
8534 #endif
8535
8536 #ifndef DOUBLETYPE
8537 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8538 #define DOUBLETYPE long double
8539 #else
8540 #define DOUBLETYPE double
8541 #endif
8542 #endif
8543
8544 #include <stdio.h>
8545
8546 #define I_STDLIB $i_stdlib
8547 #ifdef I_STDLIB
8548 #include <stdlib.h>
8549 #endif
8550
8551 int
8552 checkit(expect, got)
8553 char *expect;
8554 char *got;
8555 {
8556     if (strcmp(expect, got)) {
8557                 printf("%s oddity:  Expected %s, got %s\n",
8558                         myname, expect, got);
8559                 exit(1);
8560         }
8561 }
8562
8563 int main()
8564
8565         char buf[64]; 
8566         buf[63] = '\0';
8567
8568         /* This must be 1st test on (which?) platform */
8569         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8570         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8571         checkit("0.1", buf);
8572
8573         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8574         checkit("1", buf);
8575
8576         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8577         checkit("1.1", buf);
8578
8579         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8580         checkit("1.01", buf);
8581
8582         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8583         checkit("1.001", buf);
8584
8585         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8586         checkit("1.0001", buf);
8587
8588         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8589         checkit("1.00001", buf);
8590
8591         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8592         checkit("1.000001", buf);
8593
8594         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8595         checkit("0", buf);
8596
8597         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8598         checkit("-1", buf);
8599
8600         /* Some Linux gcvt's give 1.e+5 here. */
8601         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8602         checkit("100000", buf);
8603         
8604         /* Some Linux gcvt's give -1.e+5 here. */
8605         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8606         checkit("-100000", buf);
8607
8608         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8609         checkit("123.456", buf);
8610
8611         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8612         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8613         if (strlen(buf) > 5)
8614             checkit("1e+030", buf); /* for Microsoft */
8615         else
8616             checkit("1e+30", buf);
8617
8618         exit(0);
8619 }
8620 EOP
8621 case "$d_Gconvert" in
8622 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8623 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8624 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8625 *) xxx_list='gconvert gcvt sprintf' ;;
8626 esac
8627
8628 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8629 "$define$define$define")
8630     # for long doubles prefer first qgcvt, then sprintf
8631     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8632     xxx_list="sprintf $xxx_list"
8633     case "$d_qgcvt" in
8634     "$define") xxx_list="qgcvt $xxx_list" ;;
8635     esac
8636     ;;
8637 esac
8638
8639 for xxx_convert in $xxx_list; do
8640         echo "Trying $xxx_convert..."
8641         $rm -f try try$_o
8642         set try -DTRY_$xxx_convert
8643         if eval $compile; then
8644                 echo "$xxx_convert() found." >&4
8645                 if $run ./try; then
8646                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8647                         break;
8648                 else
8649                         echo "...But $xxx_convert didn't work as I expected."
8650                 fi
8651         else
8652                 echo "$xxx_convert NOT found." >&4
8653         fi
8654 done
8655         
8656 case "$xxx_convert" in
8657 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8658 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8659 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8660 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8661    "$define$define$define")
8662       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8663    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8664    esac
8665    ;;  
8666 esac
8667
8668 : see if _fwalk exists
8669 set fwalk d__fwalk
8670 eval $inlibc
8671
8672 : Initialize h_fcntl
8673 h_fcntl=false
8674
8675 : Initialize h_sysfile
8676 h_sysfile=false
8677
8678 : access call always available on UNIX
8679 set access d_access
8680 eval $inlibc
8681
8682 : locate the flags for 'access()'
8683 case "$d_access" in
8684 "$define")
8685         echo " "
8686         $cat >access.c <<'EOCP'
8687 #include <sys/types.h>
8688 #ifdef I_FCNTL
8689 #include <fcntl.h>
8690 #endif
8691 #ifdef I_SYS_FILE
8692 #include <sys/file.h>
8693 #endif
8694 #ifdef I_UNISTD
8695 #include <unistd.h>
8696 #endif
8697 int main() {
8698         exit(R_OK);
8699 }
8700 EOCP
8701         : check sys/file.h first, no particular reason here
8702         if $test `./findhdr sys/file.h` && \
8703                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8704                 h_sysfile=true;
8705                 echo "<sys/file.h> defines the *_OK access constants." >&4
8706         elif $test `./findhdr fcntl.h` && \
8707                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8708                 h_fcntl=true;
8709                 echo "<fcntl.h> defines the *_OK access constants." >&4
8710         elif $test `./findhdr unistd.h` && \
8711                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8712                 echo "<unistd.h> defines the *_OK access constants." >&4
8713         else
8714                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8715         fi
8716         ;;
8717 esac
8718 $rm -f access*
8719
8720 : see if accessx exists
8721 set accessx d_accessx
8722 eval $inlibc
8723
8724 : see if alarm exists
8725 set alarm d_alarm
8726 eval $inlibc
8727
8728 : see if atolf exists
8729 set atolf d_atolf
8730 eval $inlibc
8731
8732 : see if atoll exists
8733 set atoll d_atoll
8734 eval $inlibc
8735
8736 : Look for GNU-cc style attribute checking
8737 echo " "
8738 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8739 $cat >attrib.c <<'EOCP'
8740 #include <stdio.h>
8741 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8742 EOCP
8743 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8744         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8745                 echo "Your C compiler doesn't fully support __attribute__."
8746                 val="$undef"
8747         else
8748                 echo "Your C compiler supports __attribute__."
8749                 val="$define"
8750         fi
8751 else
8752         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8753         val="$undef"
8754 fi
8755 set d_attribut
8756 eval $setvar
8757 $rm -f attrib*
8758
8759 : see if bcmp exists
8760 set bcmp d_bcmp
8761 eval $inlibc
8762
8763 : see if bcopy exists
8764 set bcopy d_bcopy
8765 eval $inlibc
8766
8767 : see if this is a unistd.h system
8768 set unistd.h i_unistd
8769 eval $inhdr
8770
8771 : see if getpgrp exists
8772 set getpgrp d_getpgrp
8773 eval $inlibc
8774
8775 case "$d_getpgrp" in
8776 "$define")
8777         echo " "
8778         echo "Checking to see which flavor of getpgrp is in use..."
8779         $cat >try.c <<EOP
8780 #$i_unistd I_UNISTD
8781 #include <sys/types.h>
8782 #ifdef I_UNISTD
8783 #  include <unistd.h>
8784 #endif
8785 int main()
8786 {
8787         if (getuid() == 0) {
8788                 printf("(I see you are running Configure as super-user...)\n");
8789                 setuid(1);
8790         }
8791 #ifdef TRY_BSD_PGRP
8792         if (getpgrp(1) == 0)
8793                 exit(0);
8794 #else
8795         if (getpgrp() > 0)
8796                 exit(0);
8797 #endif
8798         exit(1);
8799 }
8800 EOP
8801         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8802                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8803                 val="$define"
8804         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8805                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8806                 val="$undef"
8807         else
8808                 echo "I can't seem to compile and run the test program."
8809                 if ./usg; then
8810                         xxx="a USG one, i.e. you use getpgrp()."
8811                 else
8812                         # SVR4 systems can appear rather BSD-ish.
8813                         case "$i_unistd" in
8814                         $undef)
8815                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8816                                 val="$define"
8817                                 ;;
8818                         $define)
8819                                 xxx="probably a USG one, i.e. you use getpgrp()."
8820                                 val="$undef"
8821                                 ;;
8822                         esac
8823                 fi
8824                 echo "Assuming your getpgrp is $xxx" >&4
8825         fi
8826         ;;
8827 *) val="$undef";;
8828 esac
8829 set d_bsdgetpgrp
8830 eval $setvar
8831 $rm -f try try.*
8832
8833 : see if setpgrp exists
8834 set setpgrp d_setpgrp
8835 eval $inlibc
8836
8837 case "$d_setpgrp" in
8838 "$define")
8839         echo " "
8840         echo "Checking to see which flavor of setpgrp is in use..."
8841         $cat >try.c <<EOP
8842 #$i_unistd I_UNISTD
8843 #include <sys/types.h>
8844 #ifdef I_UNISTD
8845 #  include <unistd.h>
8846 #endif
8847 int main()
8848 {
8849         if (getuid() == 0) {
8850                 printf("(I see you are running Configure as super-user...)\n");
8851                 setuid(1);
8852         }
8853 #ifdef TRY_BSD_PGRP
8854         if (-1 == setpgrp(1, 1))
8855                 exit(0);
8856 #else
8857         if (setpgrp() != -1)
8858                 exit(0);
8859 #endif
8860         exit(1);
8861 }
8862 EOP
8863         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8864                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8865                 val="$define"
8866         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8867                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8868                 val="$undef"
8869         else
8870                 echo "(I can't seem to compile and run the test program.)"
8871                 if ./usg; then
8872                         xxx="a USG one, i.e. you use setpgrp()."
8873                 else
8874                         # SVR4 systems can appear rather BSD-ish.
8875                         case "$i_unistd" in
8876                         $undef)
8877                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8878                                 val="$define"
8879                                 ;;
8880                         $define)
8881                                 xxx="probably a USG one, i.e. you use setpgrp()."
8882                                 val="$undef"
8883                                 ;;
8884                         esac
8885                 fi
8886                 echo "Assuming your setpgrp is $xxx" >&4
8887         fi
8888         ;;
8889 *) val="$undef";;
8890 esac
8891 set d_bsdsetpgrp
8892 eval $setvar
8893 $rm -f try try.*
8894 : see if bzero exists
8895 set bzero d_bzero
8896 eval $inlibc
8897
8898 : see if signal is declared as pointer to function returning int or void
8899 echo " "
8900 xxx=`./findhdr signal.h`
8901 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8902 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8903         echo "You have int (*signal())() instead of void." >&4
8904         val="$undef"
8905 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8906         echo "You have void (*signal())()." >&4
8907         val="$define"
8908 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8909         echo "You have int (*signal())() instead of void." >&4
8910         val="$undef"
8911 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8912         echo "You have void (*signal())()." >&4
8913         val="$define"
8914 else
8915         case "$d_voidsig" in
8916         '')
8917         echo "I can't determine whether signal handler returns void or int..." >&4
8918                 dflt=void
8919                 rp="What type does your signal handler return?"
8920                 . ./myread
8921                 case "$ans" in
8922                 v*) val="$define";;
8923                 *) val="$undef";;
8924                 esac;;
8925         "$define")
8926                 echo "As you already told me, signal handler returns void." >&4
8927                 val="$define"
8928                 ;;
8929         *)      echo "As you already told me, signal handler returns int." >&4
8930                 val="$undef"
8931                 ;;
8932         esac
8933 fi
8934 set d_voidsig
8935 eval $setvar
8936 case "$d_voidsig" in
8937 "$define") signal_t="void";;
8938 *) signal_t="int";;
8939 esac
8940 $rm -f $$.tmp
8941
8942 : check for ability to cast large floats to 32-bit ints.
8943 echo " "
8944 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8945 if $test "$intsize" -ge 4; then
8946         xxx=int
8947 else
8948         xxx=long
8949 fi
8950 $cat >try.c <<EOCP
8951 #include <stdio.h>
8952 #include <sys/types.h>
8953 #include <signal.h>
8954 $signal_t blech(s) int s; { exit(3); }
8955 int main()
8956 {
8957         $xxx i32;
8958         double f, g;
8959         int result = 0;
8960         char str[16];
8961         signal(SIGFPE, blech);
8962
8963         /* Don't let compiler optimize the test away.  Store the number 
8964            in a writable string for gcc to pass to sscanf under HP/UX.
8965         */
8966         sprintf(str, "2147483647");
8967         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8968         g = 10 * f;
8969         i32  = ($xxx) g;
8970
8971         /* x86 processors will probably give 0x8000 0000, which is a
8972        sign change.  We don't want that.  We want to mimic SPARC
8973            behavior here, which is to preserve the sign and give
8974            back 0x7fff ffff.
8975         */
8976         if (i32 != ($xxx) f)
8977                 result |= 1;
8978         exit(result);
8979 }
8980 EOCP
8981 set try
8982 if eval $compile_ok; then
8983         $run ./try
8984         yyy=$?
8985 else
8986         echo "(I can't seem to compile the test program--assuming it can't)"
8987         yyy=1
8988 fi
8989 case "$yyy" in
8990 0)      val="$define"
8991         echo "Yup, it can."
8992         ;;
8993 *)      val="$undef"
8994         echo "Nope, it can't."
8995         ;;
8996 esac
8997 set d_casti32
8998 eval $setvar
8999 $rm -f try try.*
9000
9001 : check for ability to cast negative floats to unsigned
9002 echo " "
9003 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9004 $cat >try.c <<EOCP
9005 #include <stdio.h>
9006 #include <sys/types.h>
9007 #include <signal.h>
9008 $signal_t blech(s) int s; { exit(7); }
9009 $signal_t blech_in_list(s) int s; { exit(4); }
9010 unsigned long dummy_long(p) unsigned long p; { return p; }
9011 unsigned int dummy_int(p) unsigned int p; { return p; }
9012 unsigned short dummy_short(p) unsigned short p; { return p; }
9013 int main()
9014 {
9015         double f;
9016         unsigned long along;
9017         unsigned int aint;
9018         unsigned short ashort;
9019         int result = 0;
9020         char str[16];
9021         
9022         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9023            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9024            optimized the whole file away
9025         */
9026         /* Store the number in a writable string for gcc to pass to 
9027            sscanf under HP/UX.
9028         */
9029         sprintf(str, "-123");
9030         sscanf(str, "%lf", &f);  /* f = -123.; */
9031
9032         signal(SIGFPE, blech);
9033         along = (unsigned long)f;
9034         aint = (unsigned int)f;
9035         ashort = (unsigned short)f;
9036         if (along != (unsigned long)-123)
9037                 result |= 1;
9038         if (aint != (unsigned int)-123)
9039                 result |= 1;
9040         if (ashort != (unsigned short)-123)
9041                 result |= 1;
9042         sprintf(str, "1073741824.");
9043         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9044         f = f + f;
9045         along = 0;
9046         along = (unsigned long)f;
9047         if (along != 0x80000000)
9048                 result |= 2;
9049         f -= 1.;
9050         along = 0;
9051         along = (unsigned long)f;
9052         if (along != 0x7fffffff)
9053                 result |= 1;
9054         f += 2.;
9055         along = 0;
9056         along = (unsigned long)f;
9057         if (along != 0x80000001)
9058                 result |= 2;
9059         if (result)
9060                 exit(result);
9061         signal(SIGFPE, blech_in_list);
9062         sprintf(str, "123.");
9063         sscanf(str, "%lf", &f);  /* f = 123.; */
9064         along = dummy_long((unsigned long)f);
9065         aint = dummy_int((unsigned int)f);
9066         ashort = dummy_short((unsigned short)f);
9067         if (along != (unsigned long)123)
9068                 result |= 4;
9069         if (aint != (unsigned int)123)
9070                 result |= 4;
9071         if (ashort != (unsigned short)123)
9072                 result |= 4;
9073         exit(result);
9074
9075 }
9076 EOCP
9077 set try
9078 if eval $compile_ok; then
9079         $run ./try
9080         castflags=$?
9081 else
9082         echo "(I can't seem to compile the test program--assuming it can't)"
9083         castflags=7
9084 fi
9085 case "$castflags" in
9086 0)      val="$define"
9087         echo "Yup, it can."
9088         ;;
9089 *)      val="$undef"
9090         echo "Nope, it can't."
9091         ;;
9092 esac
9093 set d_castneg
9094 eval $setvar
9095 $rm -f try.*
9096
9097 : see if vprintf exists
9098 echo " "
9099 if set vprintf val -f d_vprintf; eval $csym; $val; then
9100         echo 'vprintf() found.' >&4
9101         val="$define"
9102         $cat >try.c <<'EOF'
9103 #include <varargs.h>
9104
9105 int main() { xxx("foo"); }
9106
9107 xxx(va_alist)
9108 va_dcl
9109 {
9110         va_list args;
9111         char buf[10];
9112
9113         va_start(args);
9114         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9115 }
9116 EOF
9117         set try
9118         if eval $compile && $run ./try; then
9119                 echo "Your vsprintf() returns (int)." >&4
9120                 val2="$undef"
9121         else
9122                 echo "Your vsprintf() returns (char*)." >&4
9123                 val2="$define"
9124         fi
9125 else
9126         echo 'vprintf() NOT found.' >&4
9127                 val="$undef"
9128                 val2="$undef"
9129 fi
9130 $rm -f try try.*
9131 set d_vprintf
9132 eval $setvar
9133 val=$val2
9134 set d_charvspr
9135 eval $setvar
9136
9137 : see if chown exists
9138 set chown d_chown
9139 eval $inlibc
9140
9141 : see if chroot exists
9142 set chroot d_chroot
9143 eval $inlibc
9144
9145 : see if chsize exists
9146 set chsize d_chsize
9147 eval $inlibc
9148
9149 : see if class exists
9150 set class d_class
9151 eval $inlibc
9152
9153 hasstruct='varname=$1; struct=$2; shift; shift;
9154 while $test $# -ge 2; do
9155         case "$1" in
9156         $define) echo "#include <$2>";;
9157         esac ;
9158     shift 2;
9159 done > try.c;
9160 echo "int main () { struct $struct foo; }" >> try.c;
9161 set try;
9162 if eval $compile; then
9163         val="$define";
9164 else
9165         val="$undef";
9166 fi;
9167 set $varname;
9168 eval $setvar;
9169 $rm -f try.c try.o'
9170
9171 : see if sys/types.h has to be included
9172 set sys/types.h i_systypes
9173 eval $inhdr
9174
9175 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9176 while $test $# -ge 2; do
9177         case "$1" in
9178         $define) echo "#include <$2>";;
9179         esac ;
9180     shift 2;
9181 done > try.c;
9182 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9183 set try;
9184 if eval $compile; then
9185         val="$define";
9186 else
9187         val="$undef";
9188 fi;
9189 set $varname;
9190 eval $setvar;
9191 $rm -f try.c try.o'
9192
9193 socketlib=''
9194 sockethdr=''
9195 : see whether socket exists
9196 echo " "
9197 $echo $n "Hmm... $c" >&4
9198 if set socket val -f d_socket; eval $csym; $val; then
9199         echo "Looks like you have Berkeley networking support." >&4
9200         d_socket="$define"
9201         if set setsockopt val -f; eval $csym; $val; then
9202                 d_oldsock="$undef"
9203         else
9204                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9205                 d_oldsock="$define"
9206         fi
9207 else
9208         if $contains socklib libc.list >/dev/null 2>&1; then
9209                 echo "Looks like you have Berkeley networking support." >&4
9210                 d_socket="$define"
9211                 : we will have to assume that it supports the 4.2 BSD interface
9212                 d_oldsock="$undef"
9213         else
9214                 echo "You don't have Berkeley networking in libc$_a..." >&4
9215                 if test "X$d_socket" = "X$define"; then
9216                    echo "...but you seem to believe that you have sockets." >&4
9217                 else
9218                         for net in net socket
9219                         do
9220                                 if test -f /usr/lib/lib$net$_a; then
9221                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9222                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9223                                         if $contains socket libc.list >/dev/null 2>&1; then
9224                                                 d_socket="$define"
9225                                                 socketlib="-l$net"
9226                                                 case "$net" in
9227                                                 net)
9228                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9229                                                         sockethdr="-I/usr/netinclude"
9230                                                         ;;
9231                                                 esac
9232                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9233                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9234                                                         d_oldsock="$undef"
9235                                                 else
9236                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9237                                                         d_oldsock="$define"
9238                                                 fi
9239                                                 break
9240                                         fi
9241                                 fi
9242                         done
9243                         if test "X$d_socket" != "X$define"; then
9244                            echo "or anywhere else I see." >&4
9245                            d_socket="$undef"
9246                            d_oldsock="$undef"
9247                         fi
9248                 fi
9249         fi
9250 fi
9251
9252 : see if socketpair exists
9253 set socketpair d_sockpair
9254 eval $inlibc
9255
9256
9257 echo " "
9258 echo "Checking the availability of certain socket constants..." >& 4
9259 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9260         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9261         $cat >try.c <<EOF
9262 #include <sys/types.h>
9263 #include <sys/socket.h>
9264 int main() {
9265     int i = $ENUM;
9266 }
9267 EOF
9268         val="$undef"
9269         set try; if eval $compile; then
9270                 val="$define"
9271         fi
9272         set d_${enum}; eval $setvar
9273         $rm -f try.c try
9274 done
9275
9276 : see if this is a sys/uio.h system
9277 set sys/uio.h i_sysuio
9278 eval $inhdr
9279
9280
9281 echo " "
9282 echo "Checking to see if your system supports struct cmsghdr..." >&4
9283 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9284 eval $hasstruct
9285 case "$d_cmsghdr_s" in
9286 "$define")      echo "Yes, it does."   ;;
9287 *)              echo "No, it doesn't." ;;
9288 esac
9289
9290
9291 : check for const keyword
9292 echo " "
9293 echo 'Checking to see if your C compiler knows about "const"...' >&4
9294 $cat >const.c <<'EOCP'
9295 typedef struct spug { int drokk; } spug;
9296 int main()
9297 {
9298         const char *foo;
9299         const spug y;
9300 }
9301 EOCP
9302 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9303         val="$define"
9304         echo "Yup, it does."
9305 else
9306         val="$undef"
9307         echo "Nope, it doesn't."
9308 fi
9309 set d_const
9310 eval $setvar
9311
9312 : see if crypt exists
9313 echo " "
9314 if set crypt val -f d_crypt; eval $csym; $val; then
9315         echo 'crypt() found.' >&4
9316         val="$define"
9317         cryptlib=''
9318 else
9319         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9320         if $test -z "$cryptlib"; then
9321                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9322         else
9323                 cryptlib=-lcrypt
9324         fi
9325         if $test -z "$cryptlib"; then
9326                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9327         else
9328                 cryptlib=-lcrypt
9329         fi
9330         if $test -z "$cryptlib"; then
9331                 cryptlib=`./loc libcrypt$_a "" $libpth`
9332         else
9333                 cryptlib=-lcrypt
9334         fi
9335         if $test -z "$cryptlib"; then
9336                 echo 'crypt() NOT found.' >&4
9337                 val="$undef"
9338         else
9339                 val="$define"
9340         fi
9341 fi
9342 set d_crypt
9343 eval $setvar
9344
9345 : get csh whereabouts
9346 case "$csh" in
9347 'csh') val="$undef" ;;
9348 *) val="$define" ;;
9349 esac
9350 set d_csh
9351 eval $setvar
9352 : Respect a hint or command line value for full_csh.
9353 case "$full_csh" in
9354 '') full_csh=$csh ;;
9355 esac
9356
9357 : see if cuserid exists
9358 set cuserid d_cuserid
9359 eval $inlibc
9360
9361 : see if this is a limits.h system
9362 set limits.h i_limits
9363 eval $inhdr
9364
9365 : see if this is a float.h system
9366 set float.h i_float
9367 eval $inhdr
9368
9369 : See if number of significant digits in a double precision number is known
9370 echo " "
9371 $cat >dbl_dig.c <<EOM
9372 #$i_limits I_LIMITS
9373 #$i_float I_FLOAT
9374 #ifdef I_LIMITS
9375 #include <limits.h>
9376 #endif
9377 #ifdef I_FLOAT
9378 #include <float.h>
9379 #endif
9380 #ifdef DBL_DIG
9381 printf("Contains DBL_DIG");
9382 #endif
9383 EOM
9384 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9385 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9386         echo "DBL_DIG found." >&4
9387         val="$define"
9388 else
9389         echo "DBL_DIG NOT found." >&4
9390         val="$undef"
9391 fi
9392 $rm -f dbl_dig.?
9393 set d_dbl_dig
9394 eval $setvar
9395
9396 hasproto='varname=$1; func=$2; shift; shift;
9397 while $test $# -ge 2; do
9398         case "$1" in
9399         $define) echo "#include <$2>";;
9400         esac ;
9401     shift 2;
9402 done > try.c;
9403 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9404 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9405         echo "$func() prototype found.";
9406         val="$define";
9407 else
9408         echo "$func() prototype NOT found.";
9409         val="$undef";
9410 fi;
9411 set $varname;
9412 eval $setvar;
9413 $rm -f try.c tryout.c'
9414
9415 : see if dbm.h is available
9416 : see if dbmclose exists
9417 set dbmclose d_dbmclose
9418 eval $inlibc
9419
9420 case "$d_dbmclose" in
9421 $define)
9422         set dbm.h i_dbm
9423         eval $inhdr
9424         case "$i_dbm" in
9425         $define)
9426                 val="$undef"
9427                 set i_rpcsvcdbm
9428                 eval $setvar
9429                 ;;
9430         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9431                 eval $inhdr
9432                 ;;
9433         esac
9434         ;;
9435 *)      echo "We won't be including <dbm.h>"
9436         val="$undef"
9437         set i_dbm
9438         eval $setvar
9439         val="$undef"
9440         set i_rpcsvcdbm
9441         eval $setvar
9442         ;;
9443 esac
9444
9445 : see if prototype for dbminit is available
9446 echo " "
9447 set d_dbminitproto dbminit $i_dbm dbm.h
9448 eval $hasproto
9449
9450 : see if difftime exists
9451 set difftime d_difftime
9452 eval $inlibc
9453
9454 : see if this is a dirent system
9455 echo " "
9456 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9457         val="$define"
9458         echo "<dirent.h> found." >&4
9459 else
9460         val="$undef"
9461         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9462                 echo "<sys/dir.h> found." >&4
9463                 echo " "
9464         else
9465                 xinc=`./findhdr sys/ndir.h`
9466         fi
9467         echo "<dirent.h> NOT found." >&4
9468 fi
9469 set i_dirent
9470 eval $setvar
9471
9472 : Look for type of directory structure.
9473 echo " "
9474 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9475
9476 case "$direntrytype" in
9477 ''|' ')
9478         case "$i_dirent" in
9479         $define) guess1='struct dirent' ;;
9480         *) guess1='struct direct'  ;;
9481         esac
9482         ;;
9483 *)      guess1="$direntrytype"
9484         ;;
9485 esac
9486
9487 case "$guess1" in
9488 'struct dirent') guess2='struct direct' ;;
9489 *) guess2='struct dirent' ;;
9490 esac
9491                 
9492 if $contains "$guess1" try.c >/dev/null 2>&1; then
9493         direntrytype="$guess1"
9494         echo "Your directory entries are $direntrytype." >&4
9495 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9496         direntrytype="$guess2"
9497         echo "Your directory entries seem to be $direntrytype." >&4
9498 else
9499         echo "I don't recognize your system's directory entries." >&4
9500         rp="What type is used for directory entries on this system?"
9501         dflt="$guess1"
9502         . ./myread
9503         direntrytype="$ans"
9504 fi
9505 $rm -f try.c
9506
9507
9508 : see if the directory entry stores field length
9509 echo " "
9510 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9511 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9512         echo "Good, your directory entry keeps length information in d_namlen." >&4
9513         val="$define"
9514 else
9515         echo "Your directory entry does not know about the d_namlen field." >&4
9516         val="$undef"
9517 fi
9518 set d_dirnamlen
9519 eval $setvar
9520 $rm -f try.c
9521
9522 : see if this is an sysdir system
9523 set sys/dir.h i_sysdir
9524 eval $inhdr
9525
9526 : see if this is an sysndir system
9527 set sys/ndir.h i_sysndir
9528 eval $inhdr
9529
9530 : Look for dirfd
9531 echo " "
9532 $cat >dirfd.c <<EOM
9533 #include <stdio.h>
9534 #$i_dirent I_DIRENT             /**/
9535 #$i_sysdir I_SYS_DIR            /**/
9536 #$i_sysndir I_SYS_NDIR          /**/
9537 #$i_systypes I_SYS_TYPES        /**/
9538 #if defined(I_SYS_TYPES)
9539 #include <sys/types.h>
9540 #endif
9541 #if defined(I_DIRENT)
9542 #include <dirent.h>
9543 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9544 #include <sys/dir.h>
9545 #endif
9546 #else
9547 #ifdef I_SYS_NDIR
9548 #include <sys/ndir.h>
9549 #else
9550 #ifdef I_SYS_DIR
9551 #ifdef hp9000s500
9552 #include <ndir.h>       /* may be wrong in the future */
9553 #else
9554 #include <sys/dir.h>
9555 #endif
9556 #endif
9557 #endif
9558 #endif 
9559 int main() {
9560         DIR *dirp = opendir(".");
9561         if (dirfd(dirp) >= 0)
9562                 exit(0);
9563         else
9564                 exit(1);
9565 }
9566 EOM
9567 set dirfd
9568 if eval $compile; then
9569         val="$define"
9570 fi
9571 case "$val" in
9572 $define)        echo "dirfd() found." >&4       ;;
9573 *)              echo "dirfd() NOT found." >&4   ;;
9574 esac
9575 set d_dirfd
9576 eval $setvar
9577 $rm -f dirfd*
9578
9579 : see if dlerror exists
9580 xxx_runnm="$runnm"
9581 runnm=false
9582 set dlerror d_dlerror
9583 eval $inlibc
9584 runnm="$xxx_runnm"
9585
9586 : see if dlfcn is available
9587 set dlfcn.h i_dlfcn
9588 eval $inhdr
9589
9590 case "$usedl" in
9591 $define|y|true)
9592         $cat << EOM
9593
9594 On a few systems, the dynamically loaded modules that perl generates and uses
9595 will need a different extension than shared libs. The default will probably
9596 be appropriate.
9597
9598 EOM
9599         case "$dlext" in
9600         '')     dflt="$so" ;;
9601         *)      dflt="$dlext" ;;
9602         esac
9603         rp='What is the extension of dynamically loaded modules'
9604         . ./myread
9605         dlext="$ans"
9606         ;;
9607 *)
9608         dlext="none"
9609         ;;
9610 esac
9611
9612 : Check if dlsym need a leading underscore
9613 echo " "
9614 val="$undef"
9615
9616 case "$dlsrc" in
9617 dl_dlopen.xs)
9618         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9619         $cat >dyna.c <<'EOM'
9620 fred () { }
9621 EOM
9622
9623 $cat >fred.c<<EOM
9624
9625 #include <stdio.h>
9626 #$i_dlfcn I_DLFCN
9627 #ifdef I_DLFCN
9628 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9629 #else
9630 #include <sys/types.h>
9631 #include <nlist.h>
9632 #include <link.h>
9633 #endif
9634
9635 extern int fred() ;
9636
9637 int main()
9638 {
9639     void * handle ;
9640     void * symbol ;
9641 #ifndef RTLD_LAZY
9642     int mode = 1 ;
9643 #else
9644     int mode = RTLD_LAZY ;
9645 #endif
9646     handle = dlopen("./dyna.$dlext", mode) ;
9647     if (handle == NULL) {
9648         printf ("1\n") ;
9649         fflush (stdout) ;
9650         exit(0);
9651     }
9652     symbol = dlsym(handle, "fred") ;
9653     if (symbol == NULL) {
9654         /* try putting a leading underscore */
9655         symbol = dlsym(handle, "_fred") ;
9656         if (symbol == NULL) {
9657             printf ("2\n") ;
9658             fflush (stdout) ;
9659             exit(0);
9660         }
9661         printf ("3\n") ;
9662     }
9663     else
9664         printf ("4\n") ;
9665     fflush (stdout) ;
9666     exit(0);
9667 }
9668 EOM
9669         : Call the object file tmp-dyna.o in case dlext=o.
9670         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9671                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9672                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9673                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9674                 xxx=`$run ./fred`
9675                 case $xxx in
9676                 1)      echo "Test program failed using dlopen." >&4
9677                         echo "Perhaps you should not use dynamic loading." >&4;;
9678                 2)      echo "Test program failed using dlsym." >&4
9679                         echo "Perhaps you should not use dynamic loading." >&4;;
9680                 3)      echo "dlsym needs a leading underscore" >&4
9681                         val="$define" ;;
9682                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9683                 esac
9684         else
9685                 echo "I can't compile and run the test program." >&4
9686                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9687         fi
9688         ;;
9689 esac
9690                 
9691 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9692
9693 set d_dlsymun
9694 eval $setvar
9695
9696 : see if prototype for drand48 is available
9697 echo " "
9698 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9699 eval $hasproto
9700
9701 : see if dup2 exists
9702 set dup2 d_dup2
9703 eval $inlibc
9704
9705 : see if eaccess exists
9706 set eaccess d_eaccess
9707 eval $inlibc
9708
9709 : see if endgrent exists
9710 set endgrent d_endgrent
9711 eval $inlibc
9712
9713 : see if endhostent exists
9714 set endhostent d_endhent
9715 eval $inlibc
9716
9717 : see if endnetent exists
9718 set endnetent d_endnent
9719 eval $inlibc
9720
9721 : see if endprotoent exists
9722 set endprotoent d_endpent
9723 eval $inlibc
9724
9725 : see if endpwent exists
9726 set endpwent d_endpwent
9727 eval $inlibc
9728
9729 : see if endservent exists
9730 set endservent d_endsent
9731 eval $inlibc
9732
9733 : Locate the flags for 'open()'
9734 echo " "
9735 $cat >try.c <<'EOCP'
9736 #include <sys/types.h>
9737 #ifdef I_FCNTL
9738 #include <fcntl.h>
9739 #endif
9740 #ifdef I_SYS_FILE
9741 #include <sys/file.h>
9742 #endif
9743 int main() {
9744         if(O_RDONLY);
9745 #ifdef O_TRUNC
9746         exit(0);
9747 #else
9748         exit(1);
9749 #endif
9750 }
9751 EOCP
9752 : check sys/file.h first to get FREAD on Sun
9753 if $test `./findhdr sys/file.h` && \
9754                 set try -DI_SYS_FILE && eval $compile; then
9755         h_sysfile=true;
9756         echo "<sys/file.h> defines the O_* constants..." >&4
9757         if $run ./try; then
9758                 echo "and you have the 3 argument form of open()." >&4
9759                 val="$define"
9760         else
9761                 echo "but not the 3 argument form of open().  Oh, well." >&4
9762                 val="$undef"
9763         fi
9764 elif $test `./findhdr fcntl.h` && \
9765                 set try -DI_FCNTL && eval $compile; then
9766         h_fcntl=true;
9767         echo "<fcntl.h> defines the O_* constants..." >&4
9768         if $run ./try; then
9769                 echo "and you have the 3 argument form of open()." >&4
9770                 val="$define"
9771         else
9772                 echo "but not the 3 argument form of open().  Oh, well." >&4
9773                 val="$undef"
9774         fi
9775 else
9776         val="$undef"
9777         echo "I can't find the O_* constant definitions!  You got problems." >&4
9778 fi
9779 set d_open3
9780 eval $setvar
9781 $rm -f try try.*
9782
9783 : see which of string.h or strings.h is needed
9784 echo " "
9785 strings=`./findhdr string.h`
9786 if $test "$strings" && $test -r "$strings"; then
9787         echo "Using <string.h> instead of <strings.h>." >&4
9788         val="$define"
9789 else
9790         val="$undef"
9791         strings=`./findhdr strings.h`
9792         if $test "$strings" && $test -r "$strings"; then
9793                 echo "Using <strings.h> instead of <string.h>." >&4
9794         else
9795                 echo "No string header found -- You'll surely have problems." >&4
9796         fi
9797 fi
9798 set i_string
9799 eval $setvar
9800 case "$i_string" in
9801 "$undef") strings=`./findhdr strings.h`;;
9802 *)        strings=`./findhdr string.h`;;
9803 esac
9804
9805 : check for non-blocking I/O stuff
9806 case "$h_sysfile" in
9807 true) echo "#include <sys/file.h>" > head.c;;
9808 *)
9809        case "$h_fcntl" in
9810        true) echo "#include <fcntl.h>" > head.c;;
9811        *) echo "#include <sys/fcntl.h>" > head.c;;
9812        esac
9813        ;;
9814 esac
9815 echo " "
9816 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9817 case "$o_nonblock" in
9818 '')
9819         $cat head.c > try.c
9820         $cat >>try.c <<'EOCP'
9821 #include <stdio.h>
9822 #include <stdlib.h>
9823 int main() {
9824 #ifdef O_NONBLOCK
9825         printf("O_NONBLOCK\n");
9826         exit(0);
9827 #endif
9828 #ifdef O_NDELAY
9829         printf("O_NDELAY\n");
9830         exit(0);
9831 #endif
9832 #ifdef FNDELAY
9833         printf("FNDELAY\n");
9834         exit(0);
9835 #endif
9836         exit(0);
9837 }
9838 EOCP
9839         set try
9840         if eval $compile_ok; then
9841                 o_nonblock=`$run ./try`
9842                 case "$o_nonblock" in
9843                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9844                 *) echo "Seems like we can use $o_nonblock.";;
9845                 esac
9846         else
9847                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9848         fi
9849         ;;
9850 *) echo "Using $hint value $o_nonblock.";;
9851 esac
9852 $rm -f try try.* .out core
9853
9854 echo " "
9855 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9856 case "$eagain" in
9857 '')
9858         $cat head.c > try.c
9859         $cat >>try.c <<EOCP
9860 #include <errno.h>
9861 #include <sys/types.h>
9862 #include <signal.h>
9863 #include <stdio.h> 
9864 #include <stdlib.h> 
9865 #define MY_O_NONBLOCK $o_nonblock
9866 #ifndef errno  /* XXX need better Configure test */
9867 extern int errno;
9868 #endif
9869 #$i_unistd I_UNISTD
9870 #ifdef I_UNISTD
9871 #include <unistd.h>
9872 #endif
9873 #$i_string I_STRING
9874 #ifdef I_STRING
9875 #include <string.h>
9876 #else
9877 #include <strings.h>
9878 #endif
9879 $signal_t blech(x) int x; { exit(3); }
9880 EOCP
9881         $cat >> try.c <<'EOCP'
9882 int main()
9883 {
9884         int pd[2];
9885         int pu[2];
9886         char buf[1];
9887         char string[100];
9888
9889         pipe(pd);       /* Down: child -> parent */
9890         pipe(pu);       /* Up: parent -> child */
9891         if (0 != fork()) {
9892                 int ret;
9893                 close(pd[1]);   /* Parent reads from pd[0] */
9894                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9895 #ifdef F_SETFL
9896                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9897                         exit(1);
9898 #else
9899                 exit(4);
9900 #endif
9901                 signal(SIGALRM, blech);
9902                 alarm(5);
9903                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9904                         exit(2);
9905                 sprintf(string, "%d\n", ret);
9906                 write(2, string, strlen(string));
9907                 alarm(0);
9908 #ifdef EAGAIN
9909                 if (errno == EAGAIN) {
9910                         printf("EAGAIN\n");
9911                         goto ok;
9912                 }
9913 #endif
9914 #ifdef EWOULDBLOCK
9915                 if (errno == EWOULDBLOCK)
9916                         printf("EWOULDBLOCK\n");
9917 #endif
9918         ok:
9919                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9920                 sleep(2);                               /* Give it time to close our pipe */
9921                 alarm(5);
9922                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9923                 alarm(0);
9924                 sprintf(string, "%d\n", ret);
9925                 write(3, string, strlen(string));
9926                 exit(0);
9927         }
9928
9929         close(pd[0]);                   /* We write to pd[1] */
9930         close(pu[1]);                   /* We read from pu[0] */
9931         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9932         close(pd[1]);                   /* Pipe pd is now fully closed! */
9933         exit(0);                                /* Bye bye, thank you for playing! */
9934 }
9935 EOCP
9936         set try
9937         if eval $compile_ok; then
9938                 echo "$startsh" >mtry
9939                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9940                 chmod +x mtry
9941                 ./mtry >/dev/null 2>&1
9942                 case $? in
9943                 0) eagain=`$cat try.out`;;
9944                 1) echo "Could not perform non-blocking setting!";;
9945                 2) echo "I did a successful read() for something that was not there!";;
9946                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9947                 4) echo "Could not find F_SETFL!";;
9948                 *) echo "Something terribly wrong happened during testing.";;
9949                 esac
9950                 rd_nodata=`$cat try.ret`
9951                 echo "A read() system call with no data present returns $rd_nodata."
9952                 case "$rd_nodata" in
9953                 0|-1) ;;
9954                 *)
9955                         echo "(That's peculiar, fixing that to be -1.)"
9956                         rd_nodata=-1
9957                         ;;
9958                 esac
9959                 case "$eagain" in
9960                 '')
9961                         echo "Forcing errno EAGAIN on read() with no data available."
9962                         eagain=EAGAIN
9963                         ;;
9964                 *)
9965                         echo "Your read() sets errno to $eagain when no data is available."
9966                         ;;
9967                 esac
9968                 status=`$cat try.err`
9969                 case "$status" in
9970                 0) echo "And it correctly returns 0 to signal EOF.";;
9971                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9972                 *) echo "However, your read() returns '$status' on EOF??";;
9973                 esac
9974                 val="$define"
9975                 if test "$status" = "$rd_nodata"; then
9976                         echo "WARNING: you can't distinguish between EOF and no data!"
9977                         val="$undef"
9978                 fi
9979         else
9980                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9981                 eagain=EAGAIN
9982         fi
9983         set d_eofnblk
9984         eval $setvar
9985         ;;
9986 *)
9987         echo "Using $hint value $eagain."
9988         echo "Your read() returns $rd_nodata when no data is present."
9989         case "$d_eofnblk" in
9990         "$define") echo "And you can see EOF because read() returns 0.";;
9991         "$undef") echo "But you can't see EOF status from read() returned value.";;
9992         *)
9993                 echo "(Assuming you can't see EOF status from read anyway.)"
9994                 d_eofnblk=$undef
9995                 ;;
9996         esac
9997         ;;
9998 esac
9999 $rm -f try try.* .out core head.c mtry
10000
10001 : see if fchdir exists
10002 set fchdir d_fchdir
10003 eval $inlibc
10004
10005 : see if fchmod exists
10006 set fchmod d_fchmod
10007 eval $inlibc
10008
10009 : see if fchown exists
10010 set fchown d_fchown
10011 eval $inlibc
10012
10013 : see if this is an fcntl system
10014 set fcntl d_fcntl
10015 eval $inlibc
10016
10017 echo " "
10018 : See if fcntl-based locking works.
10019 $cat >try.c <<EOCP
10020 #include <stdlib.h>
10021 #include <unistd.h>
10022 #include <fcntl.h>
10023 #include <signal.h>
10024 $signal_t blech(x) int x; { exit(3); }
10025 int main() {
10026 #if defined(F_SETLK) && defined(F_SETLKW)
10027      struct flock flock;
10028      int retval, fd;
10029      fd = open("try.c", O_RDONLY);
10030      flock.l_type = F_RDLCK;
10031      flock.l_whence = SEEK_SET;
10032      flock.l_start = flock.l_len = 0;
10033      signal(SIGALRM, blech);
10034      alarm(10);
10035      retval = fcntl(fd, F_SETLK, &flock);
10036      close(fd);
10037      (retval < 0 ? exit(2) : exit(0));
10038 #else
10039      exit(2);
10040 #endif
10041 }
10042 EOCP
10043 echo "Checking if fcntl-based file locking works... "
10044 case "$d_fcntl" in
10045 "$define")
10046         set try
10047         if eval $compile_ok; then
10048                 if $run ./try; then
10049                         echo "Yes, it seems to work."
10050                         val="$define"
10051                 else
10052                         echo "Nope, it didn't work."
10053                         val="$undef"
10054                         case "$?" in
10055                         3) $cat >&4 <<EOM
10056 ***
10057 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10058 *** This is (almost) impossible.
10059 *** If your NFS lock daemons are not feeling well, something like
10060 *** this may happen, please investigate.  Cannot continue, aborting.
10061 ***
10062 EOM
10063                                 exit 1
10064                                 ;;
10065                         esac
10066                 fi
10067         else
10068                 echo "I'm unable to compile the test program, so I'll assume not."
10069                 val="$undef"
10070         fi
10071         ;;
10072 *) val="$undef";
10073         echo "Nope, since you don't even have fcntl()."
10074         ;;
10075 esac
10076 set d_fcntl_can_lock
10077 eval $setvar
10078 $rm -f try*
10079
10080
10081 : see if sys/select.h has to be included
10082 set sys/select.h i_sysselct
10083 eval $inhdr
10084
10085 : see if we should include time.h, sys/time.h, or both
10086 echo " "
10087 if test "X$timeincl" = X; then
10088         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10089         $echo $n "I'm now running the test program...$c"
10090         $cat >try.c <<'EOCP'
10091 #include <sys/types.h>
10092 #ifdef I_TIME
10093 #include <time.h>
10094 #endif
10095 #ifdef I_SYSTIME
10096 #ifdef SYSTIMEKERNEL
10097 #define KERNEL
10098 #endif
10099 #include <sys/time.h>
10100 #endif
10101 #ifdef I_SYSSELECT
10102 #include <sys/select.h>
10103 #endif
10104 int main()
10105 {
10106         struct tm foo;
10107 #ifdef S_TIMEVAL
10108         struct timeval bar;
10109 #endif
10110 #ifdef S_TIMEZONE
10111         struct timezone tzp;
10112 #endif
10113         if (foo.tm_sec == foo.tm_sec)
10114                 exit(0);
10115 #ifdef S_TIMEVAL
10116         if (bar.tv_sec == bar.tv_sec)
10117                 exit(0);
10118 #endif
10119         exit(1);
10120 }
10121 EOCP
10122         flags=''
10123         for s_timezone in '-DS_TIMEZONE' ''; do
10124         sysselect=''
10125         for s_timeval in '-DS_TIMEVAL' ''; do
10126         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10127         for i_time in '' '-DI_TIME'; do
10128         for i_systime in '-DI_SYSTIME' ''; do
10129                 case "$flags" in
10130                 '') $echo $n ".$c"
10131                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10132                         if eval $compile; then
10133                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10134                                 shift
10135                                 flags="$*"
10136                                 echo " "
10137                                 $echo $n "Succeeded with $flags$c"
10138                         fi
10139                         ;;
10140                 esac
10141         done
10142         done
10143         done
10144         done
10145         done
10146         timeincl=''
10147         echo " "
10148         case "$flags" in
10149         *SYSTIMEKERNEL*) i_systimek="$define"
10150                 timeincl=`./findhdr sys/time.h`
10151                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10152         *) i_systimek="$undef";;
10153         esac
10154         case "$flags" in
10155         *I_TIME*) i_time="$define"
10156                 timeincl=`./findhdr time.h`" $timeincl"
10157                 echo "We'll include <time.h>." >&4;;
10158         *) i_time="$undef";;
10159         esac
10160         case "$flags" in
10161         *I_SYSTIME*) i_systime="$define"
10162                 timeincl=`./findhdr sys/time.h`" $timeincl"
10163                 echo "We'll include <sys/time.h>." >&4;;
10164         *) i_systime="$undef";;
10165         esac
10166         $rm -f try.c try
10167 fi
10168
10169 : check for fd_set items
10170 $cat <<EOM
10171
10172 Checking to see how well your C compiler handles fd_set and friends ...
10173 EOM
10174 $cat >try.c <<EOCP
10175 #$i_systime I_SYS_TIME
10176 #$i_sysselct I_SYS_SELECT
10177 #$d_socket HAS_SOCKET
10178 #include <sys/types.h>
10179 #ifdef HAS_SOCKET
10180 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10181 #endif
10182 #ifdef I_SYS_TIME
10183 #include <sys/time.h>
10184 #endif
10185 #ifdef I_SYS_SELECT
10186 #include <sys/select.h>
10187 #endif
10188 int main() {
10189         fd_set fds;
10190
10191 #ifdef TRYBITS
10192         if(fds.fds_bits);
10193 #endif
10194
10195 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10196         exit(0);
10197 #else
10198         exit(1);
10199 #endif
10200 }
10201 EOCP
10202 set try -DTRYBITS
10203 if eval $compile; then
10204         d_fds_bits="$define"
10205         d_fd_set="$define"
10206         echo "Well, your system knows about the normal fd_set typedef..." >&4
10207         if $run ./try; then
10208                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10209                 d_fd_macros="$define"
10210         else
10211                 $cat >&4 <<'EOM'
10212 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10213 EOM
10214                 d_fd_macros="$undef"
10215         fi
10216 else
10217         $cat <<'EOM'
10218 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10219 EOM
10220         set try
10221         if eval $compile; then
10222                 d_fds_bits="$undef"
10223                 d_fd_set="$define"
10224                 echo "Well, your system has some sort of fd_set available..." >&4
10225                 if $run ./try; then
10226                         echo "and you have the normal fd_set macros." >&4
10227                         d_fd_macros="$define"
10228                 else
10229                         $cat <<'EOM'
10230 but not the normal fd_set macros!  Gross!  More work for me...
10231 EOM
10232                         d_fd_macros="$undef"
10233                 fi
10234         else
10235         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10236                 d_fd_set="$undef"
10237                 d_fds_bits="$undef"
10238                 d_fd_macros="$undef"
10239         fi
10240 fi
10241 $rm -f try try.*
10242
10243 : see if fgetpos exists
10244 set fgetpos d_fgetpos
10245 eval $inlibc
10246
10247 : see if finite exists
10248 set finite d_finite
10249 eval $inlibc
10250
10251 : see if finitel exists
10252 set finitel d_finitel
10253 eval $inlibc
10254
10255 : see if flock exists
10256 set flock d_flock
10257 eval $inlibc
10258
10259 : see if this is a sys/file.h system
10260 val=''
10261 set sys/file.h val
10262 eval $inhdr
10263
10264 : do we need to include sys/file.h ?
10265 case "$val" in
10266 "$define")
10267         echo " "
10268         if $h_sysfile; then
10269                 val="$define"
10270                 echo "We'll be including <sys/file.h>." >&4
10271         else
10272                 val="$undef"
10273                 echo "We won't be including <sys/file.h>." >&4
10274         fi
10275         ;;
10276 *)
10277         h_sysfile=false
10278         ;;
10279 esac
10280 set i_sysfile
10281 eval $setvar
10282
10283 : see if prototype for flock is available
10284 echo " "
10285 set d_flockproto flock $i_sysfile sys/file.h
10286 eval $hasproto
10287
10288 : see if fork exists
10289 set fork d_fork
10290 eval $inlibc
10291
10292 : see if fp_class exists
10293 set fp_class d_fp_class
10294 eval $inlibc
10295
10296 : see if pathconf exists
10297 set pathconf d_pathconf
10298 eval $inlibc
10299
10300 : see if fpathconf exists
10301 set fpathconf d_fpathconf
10302 eval $inlibc
10303
10304 : see if fpclass exists
10305 set fpclass d_fpclass
10306 eval $inlibc
10307
10308 : see if fpclassify exists
10309 set fpclassify d_fpclassify
10310 eval $inlibc
10311
10312 : see if fpclassl exists
10313 set fpclassl d_fpclassl
10314 eval $inlibc
10315
10316
10317 : check for fpos64_t
10318 echo " "
10319 echo "Checking to see if you have fpos64_t..." >&4
10320 $cat >try.c <<EOCP
10321 #include <stdio.h>
10322 int main() { fpos64_t x = 7; }
10323 EOCP
10324 set try
10325 if eval $compile; then
10326         val="$define"
10327         echo "You have fpos64_t."
10328 else
10329         val="$undef"
10330         echo "You do not have fpos64_t."
10331         case "$fpossize" in
10332         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10333         esac
10334 fi
10335 $rm -f try.* try
10336 set d_fpos64_t
10337 eval $setvar
10338
10339 : see if frexpl exists
10340 set frexpl d_frexpl
10341 eval $inlibc
10342
10343 : see if this is a sys/param system
10344 set sys/param.h i_sysparam
10345 eval $inhdr
10346
10347 : see if this is a sys/mount.h system
10348 set sys/mount.h i_sysmount
10349 eval $inhdr
10350
10351
10352 echo " "
10353 echo "Checking to see if your system supports struct fs_data..." >&4
10354 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10355 eval $hasstruct
10356 case "$d_fs_data_s" in
10357 "$define")      echo "Yes, it does."   ;;
10358 *)              echo "No, it doesn't." ;;
10359 esac
10360
10361 : see if fseeko exists
10362 set fseeko d_fseeko
10363 eval $inlibc
10364 case "$longsize" in
10365 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10366 esac
10367
10368 : see if fsetpos exists
10369 set fsetpos d_fsetpos
10370 eval $inlibc
10371
10372
10373 : see if fstatfs exists
10374 set fstatfs d_fstatfs
10375 eval $inlibc
10376
10377
10378 : see if statvfs exists
10379 set statvfs d_statvfs
10380 eval $inlibc
10381
10382 : see if fstatvfs exists
10383 set fstatvfs d_fstatvfs
10384 eval $inlibc
10385
10386
10387 : see if fsync exists
10388 set fsync d_fsync
10389 eval $inlibc
10390
10391 : see if ftello exists
10392 set ftello d_ftello
10393 eval $inlibc
10394 case "$longsize" in
10395 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10396 esac
10397
10398 : see if getcwd exists
10399 set getcwd d_getcwd
10400 eval $inlibc
10401
10402 : see if getespwnam exists
10403 set getespwnam d_getespwnam
10404 eval $inlibc
10405
10406
10407 : see if getfsstat exists
10408 set getfsstat d_getfsstat
10409 eval $inlibc
10410
10411 : see if getgrent exists
10412 set getgrent d_getgrent
10413 eval $inlibc
10414
10415 : see if gethostbyaddr exists
10416 set gethostbyaddr d_gethbyaddr
10417 eval $inlibc
10418
10419 : see if gethostbyname exists
10420 set gethostbyname d_gethbyname
10421 eval $inlibc
10422
10423 : see if gethostent exists
10424 set gethostent d_gethent
10425 eval $inlibc
10426
10427 : see how we will look up host name
10428 echo " "
10429 call=''
10430 if set gethostname val -f d_gethname; eval $csym; $val; then
10431         echo 'gethostname() found.' >&4
10432         d_gethname="$define"
10433         call=gethostname
10434 fi
10435 if set uname val -f d_uname; eval $csym; $val; then
10436         if ./xenix; then
10437                 $cat <<'EOM'
10438 uname() was found, but you're running xenix, and older versions of xenix
10439 have a broken uname(). If you don't really know whether your xenix is old
10440 enough to have a broken system call, use the default answer.
10441
10442 EOM
10443                 dflt=y
10444                 case "$d_uname" in
10445                 "$define") dflt=n;;
10446                 esac
10447                 rp='Is your uname() broken?'
10448                 . ./myread
10449                 case "$ans" in
10450                 n*) d_uname="$define"; call=uname;;
10451                 esac
10452         else
10453                 echo 'uname() found.' >&4
10454                 d_uname="$define"
10455                 case "$call" in
10456                 '') call=uname ;;
10457                 esac
10458         fi
10459 fi
10460 case "$d_gethname" in
10461 '') d_gethname="$undef";;
10462 esac
10463 case "$d_uname" in
10464 '') d_uname="$undef";;
10465 esac
10466 case "$d_uname$d_gethname" in
10467 *define*)
10468         dflt=n
10469         cat <<EOM
10470  
10471 Every now and then someone has a $call() that lies about the hostname
10472 but can't be fixed for political or economic reasons.  If you wish, I can
10473 pretend $call() isn't there and maybe compute hostname at run-time
10474 thanks to the '$phostname' command.
10475
10476 EOM
10477         rp="Shall I ignore $call() from now on?"
10478         . ./myread
10479         case "$ans" in
10480         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10481         esac;;
10482 esac
10483 case "$phostname" in
10484 '') aphostname='';;
10485 *) case "$aphostname" in
10486         /*) ;;
10487         *) set X $phostname
10488                 shift
10489                 file=$1
10490                 shift
10491                 file=`./loc $file $file $pth`
10492                 aphostname=`echo $file $*`
10493                 ;;
10494         esac
10495         ;;
10496 esac
10497 case "$d_uname$d_gethname" in
10498 *define*) ;;
10499 *)
10500         case "$phostname" in
10501         '')
10502                 echo "There will be no way for $package to get your hostname." >&4;;
10503         *)
10504         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10505                 ;;
10506         esac;;
10507 esac
10508 case "$d_phostname" in
10509 '') d_phostname="$undef";;
10510 esac
10511
10512 : see if this is a netdb.h system
10513 set netdb.h i_netdb
10514 eval $inhdr
10515
10516 : see if prototypes for various gethostxxx netdb.h functions are available
10517 echo " "
10518 set d_gethostprotos gethostent $i_netdb netdb.h
10519 eval $hasproto
10520
10521 : see if getitimer exists
10522 set getitimer d_getitimer
10523 eval $inlibc
10524
10525 : see if getlogin exists
10526 set getlogin d_getlogin
10527 eval $inlibc
10528
10529 : see if getmnt exists
10530 set getmnt d_getmnt
10531 eval $inlibc
10532
10533 : see if getmntent exists
10534 set getmntent d_getmntent
10535 eval $inlibc
10536
10537 : see if getnetbyaddr exists
10538 set getnetbyaddr d_getnbyaddr
10539 eval $inlibc
10540
10541 : see if getnetbyname exists
10542 set getnetbyname d_getnbyname
10543 eval $inlibc
10544
10545 : see if getnetent exists
10546 set getnetent d_getnent
10547 eval $inlibc
10548
10549 : see if prototypes for various getnetxxx netdb.h functions are available
10550 echo " "
10551 set d_getnetprotos getnetent $i_netdb netdb.h
10552 eval $hasproto
10553
10554 : see if getpagesize exists
10555 set getpagesize d_getpagsz
10556 eval $inlibc
10557
10558
10559 : see if getprotobyname exists
10560 set getprotobyname d_getpbyname
10561 eval $inlibc
10562
10563 : see if getprotobynumber exists
10564 set getprotobynumber d_getpbynumber
10565 eval $inlibc
10566
10567 : see if getprotoent exists
10568 set getprotoent d_getpent
10569 eval $inlibc
10570
10571 : see if getpgid exists
10572 set getpgid d_getpgid
10573 eval $inlibc
10574
10575 : see if getpgrp2 exists
10576 set getpgrp2 d_getpgrp2
10577 eval $inlibc
10578
10579 : see if getppid exists
10580 set getppid d_getppid
10581 eval $inlibc
10582
10583 : see if getpriority exists
10584 set getpriority d_getprior
10585 eval $inlibc
10586
10587 : see if prototypes for various getprotoxxx netdb.h functions are available
10588 echo " "
10589 set d_getprotoprotos getprotoent $i_netdb netdb.h
10590 eval $hasproto
10591
10592 : see if getprpwnam exists
10593 set getprpwnam d_getprpwnam
10594 eval $inlibc
10595
10596 : see if getpwent exists
10597 set getpwent d_getpwent
10598 eval $inlibc
10599
10600
10601 : see if getservbyname exists
10602 set getservbyname d_getsbyname
10603 eval $inlibc
10604
10605 : see if getservbyport exists
10606 set getservbyport d_getsbyport
10607 eval $inlibc
10608
10609 : see if getservent exists
10610 set getservent d_getsent
10611 eval $inlibc
10612
10613 : see if prototypes for various getservxxx netdb.h functions are available
10614 echo " "
10615 set d_getservprotos getservent $i_netdb netdb.h
10616 eval $hasproto
10617
10618 : see if getspnam exists
10619 set getspnam d_getspnam
10620 eval $inlibc
10621
10622 : see if gettimeofday or ftime exists
10623 set gettimeofday d_gettimeod
10624 eval $inlibc
10625 case "$d_gettimeod" in
10626 "$undef")
10627         set ftime d_ftime 
10628         eval $inlibc
10629         ;;
10630 *)
10631         val="$undef"; set d_ftime; eval $setvar
10632         ;;
10633 esac
10634 case "$d_gettimeod$d_ftime" in
10635 "$undef$undef")
10636         echo " "
10637         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10638         ;;
10639 esac
10640
10641 : see if this is an grp system
10642 set grp.h i_grp
10643 eval $inhdr
10644
10645 case "$i_grp" in
10646 $define)
10647         xxx=`./findhdr grp.h`
10648         $cppstdin $cppflags $cppminus < $xxx >$$.h
10649
10650         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10651                 val="$define"
10652         else
10653                 val="$undef"
10654         fi
10655         set d_grpasswd
10656         eval $setvar
10657
10658         $rm -f $$.h
10659         ;;
10660 *)
10661         val="$undef";
10662         set d_grpasswd; eval $setvar
10663         ;;
10664 esac
10665
10666 : see if hasmntopt exists
10667 set hasmntopt d_hasmntopt
10668 eval $inlibc
10669
10670 : see if this is a netinet/in.h or sys/in.h system
10671 set netinet/in.h i_niin sys/in.h i_sysin
10672 eval $inhdr
10673
10674 : see if arpa/inet.h has to be included
10675 set arpa/inet.h i_arpainet
10676 eval $inhdr
10677
10678 : see if htonl --and friends-- exists
10679 val=''
10680 set htonl val
10681 eval $inlibc
10682
10683 : Maybe they are macros.
10684 case "$val" in
10685 $undef)
10686         $cat >htonl.c <<EOM
10687 #include <stdio.h>
10688 #include <sys/types.h>
10689 #$i_niin I_NETINET_IN
10690 #$i_sysin I_SYS_IN
10691 #$i_arpainet I_ARPA_INET
10692 #ifdef I_NETINET_IN
10693 #include <netinet/in.h>
10694 #endif
10695 #ifdef I_SYS_IN
10696 #include <sys/in.h>
10697 #endif
10698 #ifdef I_ARPA_INET
10699 #include <arpa/inet.h>
10700 #endif
10701 #ifdef htonl
10702 printf("Defined as a macro.");
10703 #endif
10704 EOM
10705         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10706         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10707                 val="$define"
10708                 echo "But it seems to be defined as a macro." >&4
10709         fi
10710         $rm -f htonl.?
10711         ;;
10712 esac
10713 set d_htonl
10714 eval $setvar
10715
10716 : index or strchr
10717 echo " "
10718 if set index val -f; eval $csym; $val; then
10719         if set strchr val -f d_strchr; eval $csym; $val; then
10720                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10721                         val="$define"
10722                         vali="$undef"
10723                         echo "strchr() found." >&4
10724                 else
10725                         val="$undef"
10726                         vali="$define"
10727                         echo "index() found." >&4
10728                 fi
10729         else
10730                 val="$undef"
10731                 vali="$define"
10732                 echo "index() found." >&4
10733         fi
10734 else
10735         if set strchr val -f d_strchr; eval $csym; $val; then
10736                 val="$define"
10737                 vali="$undef"
10738                 echo "strchr() found." >&4
10739         else
10740                 echo "No index() or strchr() found!" >&4
10741                 val="$undef"
10742                 vali="$undef"
10743         fi
10744 fi
10745 set d_strchr; eval $setvar
10746 val="$vali"
10747 set d_index; eval $setvar
10748
10749 : check whether inet_aton exists
10750 set inet_aton d_inetaton
10751 eval $inlibc
10752
10753 : Look for isascii
10754 echo " "
10755 $cat >isascii.c <<'EOCP'
10756 #include <stdio.h>
10757 #include <ctype.h>
10758 int main() {
10759         int c = 'A';
10760         if (isascii(c))
10761                 exit(0);
10762         else
10763                 exit(1);
10764 }
10765 EOCP
10766 set isascii
10767 if eval $compile; then
10768         echo "isascii() found." >&4
10769         val="$define"
10770 else
10771         echo "isascii() NOT found." >&4
10772         val="$undef"
10773 fi
10774 set d_isascii
10775 eval $setvar
10776 $rm -f isascii*
10777
10778 : see if isfinite exists
10779 set isfinite d_isfinite
10780 eval $inlibc
10781
10782 : see if isinf exists
10783 set isinf d_isinf
10784 eval $inlibc
10785
10786 : see if isnan exists
10787 set isnan d_isnan
10788 eval $inlibc
10789
10790 : see if isnanl exists
10791 set isnanl d_isnanl
10792 eval $inlibc
10793
10794 : see if killpg exists
10795 set killpg d_killpg
10796 eval $inlibc
10797
10798 : see if lchown exists
10799 echo " "
10800 $cat > try.c <<'EOCP'
10801 /* System header to define __stub macros and hopefully few prototypes,
10802     which can conflict with char lchown(); below.  */
10803 #include <assert.h>
10804 /* Override any gcc2 internal prototype to avoid an error.  */
10805 /* We use char because int might match the return type of a gcc2
10806    builtin and then its argument prototype would still apply.  */
10807 char lchown();
10808 int main() {
10809     /*  The GNU C library defines this for functions which it implements
10810         to always fail with ENOSYS.  Some functions are actually named
10811         something starting with __ and the normal name is an alias.  */
10812 #if defined (__stub_lchown) || defined (__stub___lchown)
10813 choke me
10814 #else
10815 lchown();
10816 #endif
10817 ; return 0; }
10818 EOCP
10819 set try
10820 if eval $compile; then
10821     $echo "lchown() found." >&4
10822     val="$define"
10823 else
10824     $echo "lchown() NOT found." >&4
10825     val="$undef"
10826 fi
10827 set d_lchown
10828 eval $setvar
10829
10830 : See if number of significant digits in a double precision number is known
10831 echo " "
10832 $cat >ldbl_dig.c <<EOM
10833 #$i_limits I_LIMITS
10834 #$i_float I_FLOAT
10835 #ifdef I_LIMITS
10836 #include <limits.h>
10837 #endif
10838 #ifdef I_FLOAT
10839 #include <float.h>
10840 #endif
10841 #ifdef LDBL_DIG
10842 printf("Contains LDBL_DIG");
10843 #endif
10844 EOM
10845 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10846 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10847         echo "LDBL_DIG found." >&4
10848         val="$define"
10849 else
10850         echo "LDBL_DIG NOT found." >&4
10851         val="$undef"
10852 fi
10853 $rm -f ldbl_dig.?
10854 set d_ldbl_dig
10855 eval $setvar
10856
10857 : see if link exists
10858 set link d_link
10859 eval $inlibc
10860
10861 : see if localeconv exists
10862 set localeconv d_locconv
10863 eval $inlibc
10864
10865 : see if lockf exists
10866 set lockf d_lockf
10867 eval $inlibc
10868
10869 : see if prototype for lseek is available
10870 echo " "
10871 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10872 eval $hasproto
10873
10874 : see if lstat exists
10875 set lstat d_lstat
10876 eval $inlibc
10877
10878 : see if madvise exists
10879 set madvise d_madvise
10880 eval $inlibc
10881
10882 : see if mblen exists
10883 set mblen d_mblen
10884 eval $inlibc
10885
10886 : see if mbstowcs exists
10887 set mbstowcs d_mbstowcs
10888 eval $inlibc
10889
10890 : see if mbtowc exists
10891 set mbtowc d_mbtowc
10892 eval $inlibc
10893
10894 : see if memchr exists
10895 set memchr d_memchr
10896 eval $inlibc
10897
10898 : see if memcmp exists
10899 set memcmp d_memcmp
10900 eval $inlibc
10901
10902 : see if memcpy exists
10903 set memcpy d_memcpy
10904 eval $inlibc
10905
10906 : see if memmove exists
10907 set memmove d_memmove
10908 eval $inlibc
10909
10910 : see if memset exists
10911 set memset d_memset
10912 eval $inlibc
10913
10914 : see if mkdir exists
10915 set mkdir d_mkdir
10916 eval $inlibc
10917
10918 : see if mkdtemp exists
10919 set mkdtemp d_mkdtemp
10920 eval $inlibc
10921
10922 : see if mkfifo exists
10923 set mkfifo d_mkfifo
10924 eval $inlibc
10925
10926 : see if mkstemp exists
10927 set mkstemp d_mkstemp
10928 eval $inlibc
10929
10930 : see if mkstemps exists
10931 set mkstemps d_mkstemps
10932 eval $inlibc
10933
10934 : see if mktime exists
10935 set mktime d_mktime
10936 eval $inlibc
10937
10938 : see if this is a sys/mman.h system
10939 set sys/mman.h i_sysmman
10940 eval $inhdr
10941
10942 : see if mmap exists
10943 set mmap d_mmap
10944 eval $inlibc
10945 : see what shmat returns
10946 : default to something harmless
10947 mmaptype='void *'
10948 case "$i_sysmman$d_mmap" in
10949 "$define$define")
10950         $cat >mmap.c <<'END'
10951 #include <sys/mman.h>
10952 void *mmap();
10953 END
10954         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10955                 mmaptype='void *'
10956         else
10957                 mmaptype='caddr_t'
10958         fi
10959         echo "and it returns ($mmaptype)." >&4
10960         ;;
10961 esac
10962
10963
10964
10965 : see if modfl exists
10966 set modfl d_modfl
10967 eval $inlibc
10968
10969 d_modfl_pow32_bug="$undef"
10970
10971 case "$d_longdbl$d_modfl" in
10972 $define$define)
10973         $cat <<EOM
10974 Checking to see whether your modfl() is okay for large values...
10975 EOM
10976 $cat >try.c <<EOCP
10977 #include <math.h> 
10978 #include <stdio.h>
10979 int main() {
10980     long double nv = 4294967303.15;
10981     long double v, w;
10982     v = modfl(nv, &w);         
10983 #ifdef __GLIBC__
10984     printf("glibc");
10985 #endif
10986     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10987     return 0;
10988 }
10989 EOCP
10990         case "$osname:$gccversion" in
10991         aix:)   saveccflags="$ccflags"
10992                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10993         esac
10994         set try
10995         if eval $compile; then
10996                 foo=`$run ./try`
10997                 case "$foo" in
10998                 *" 4294967303.150000 1.150000 4294967302.000000")
10999                         echo >&4 "Your modfl() is broken for large values."
11000                         d_modfl_pow32_bug="$define"
11001                         case "$foo" in
11002                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11003                         ;;
11004                         esac
11005                         ;;
11006                 *" 4294967303.150000 0.150000 4294967303.000000")
11007                         echo >&4 "Your modfl() seems okay for large values."
11008                         ;;
11009                 *)      echo >&4 "I don't understand your modfl() at all."
11010                         d_modfl="$undef"
11011                         ;;
11012                 esac
11013                 $rm -f try.* try core core.try.*
11014         else
11015                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11016                 d_modfl="$undef"
11017         fi
11018         case "$osname:$gccversion" in
11019         aix:)   ccflags="$saveccflags" ;; # restore
11020         esac
11021         ;;
11022 esac
11023
11024 : see if mprotect exists
11025 set mprotect d_mprotect
11026 eval $inlibc
11027
11028 : see if msgctl exists
11029 set msgctl d_msgctl
11030 eval $inlibc
11031
11032 : see if msgget exists
11033 set msgget d_msgget
11034 eval $inlibc
11035
11036 : see if msgsnd exists
11037 set msgsnd d_msgsnd
11038 eval $inlibc
11039
11040 : see if msgrcv exists
11041 set msgrcv d_msgrcv
11042 eval $inlibc
11043
11044 : see how much of the 'msg*(2)' library is present.
11045 h_msg=true
11046 echo " "
11047 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11048 *"$undef"*) h_msg=false;;
11049 esac
11050 case "$osname" in
11051 freebsd)
11052     case "`ipcs 2>&1`" in
11053     "SVID messages"*"not configured"*)
11054         echo "Your $osname does not have the msg*(2) configured." >&4
11055         h_msg=false
11056         val="$undef"
11057         set msgctl d_msgctl
11058         eval $setvar
11059         set msgget d_msgget
11060         eval $setvar
11061         set msgsnd d_msgsnd
11062         eval $setvar
11063         set msgrcv d_msgrcv
11064         eval $setvar
11065         ;;
11066     esac
11067     ;;
11068 esac
11069 : we could also check for sys/ipc.h ...
11070 if $h_msg && $test `./findhdr sys/msg.h`; then
11071         echo "You have the full msg*(2) library." >&4
11072         val="$define"
11073 else
11074         echo "You don't have the full msg*(2) library." >&4
11075         val="$undef"
11076 fi
11077 set d_msg
11078 eval $setvar
11079
11080
11081 echo " "
11082 echo "Checking to see if your system supports struct msghdr..." >&4
11083 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11084 eval $hasstruct
11085 case "$d_msghdr_s" in
11086 "$define")      echo "Yes, it does."   ;;
11087 *)              echo "No, it doesn't." ;;
11088 esac
11089
11090
11091 : see if msync exists
11092 set msync d_msync
11093 eval $inlibc
11094
11095 : see if munmap exists
11096 set munmap d_munmap
11097 eval $inlibc
11098
11099 : see if nice exists
11100 set nice d_nice
11101 eval $inlibc
11102
11103 : see if this is a langinfo.h system
11104 set langinfo.h i_langinfo
11105 eval $inhdr
11106
11107 : see if nl_langinfo exists
11108 set nl_langinfo d_nl_langinfo
11109 eval $inlibc
11110
11111 : check for length of character
11112 echo " "
11113 case "$charsize" in
11114 '')
11115         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11116         $cat >try.c <<'EOCP'
11117 #include <stdio.h>
11118 int main()
11119 {
11120     printf("%d\n", (int)sizeof(char));
11121     exit(0);
11122 }
11123 EOCP
11124         set try
11125         if eval $compile_ok; then
11126                 dflt=`$run ./try`
11127         else
11128                 dflt='1'
11129                 echo "(I can't seem to compile the test program.  Guessing...)"
11130         fi
11131         ;;
11132 *)
11133         dflt="$charsize"
11134         ;;
11135 esac
11136 rp="What is the size of a character (in bytes)?"
11137 . ./myread
11138 charsize="$ans"
11139 $rm -f try.c try
11140
11141 : check for volatile keyword
11142 echo " "
11143 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11144 $cat >try.c <<'EOCP'
11145 int main()
11146 {
11147         typedef struct _goo_struct goo_struct;
11148         goo_struct * volatile goo = ((goo_struct *)0);
11149         struct _goo_struct {
11150                 long long_int;
11151                 int reg_int;
11152                 char char_var;
11153         };
11154         typedef unsigned short foo_t;
11155         char *volatile foo;
11156         volatile int bar;
11157         volatile foo_t blech;
11158         foo = foo;
11159 }
11160 EOCP
11161 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11162         val="$define"
11163         echo "Yup, it does."
11164 else
11165         val="$undef"
11166         echo "Nope, it doesn't."
11167 fi
11168 set d_volatile
11169 eval $setvar
11170 $rm -f try.*
11171
11172
11173 echo " "
11174 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11175
11176 case "$use64bitint:$d_quad:$quadtype" in
11177 define:define:?*)
11178         ivtype="$quadtype"
11179         uvtype="$uquadtype"
11180         ivsize=8
11181         uvsize=8
11182         ;;
11183 *)      ivtype="long"
11184         uvtype="unsigned long"
11185         ivsize=$longsize
11186         uvsize=$longsize
11187         ;;
11188 esac
11189
11190 case "$uselongdouble:$d_longdbl" in
11191 define:define)
11192         nvtype="long double"
11193         nvsize=$longdblsize
11194         ;;
11195 *)      nvtype=double
11196         nvsize=$doublesize
11197         ;;
11198 esac
11199
11200 $echo "(IV will be "$ivtype", $ivsize bytes)"
11201 $echo "(UV will be "$uvtype", $uvsize bytes)"
11202 $echo "(NV will be "$nvtype", $nvsize bytes)"
11203
11204 $cat >try.c <<EOCP
11205 #$i_inttypes I_INTTYPES
11206 #ifdef I_INTTYPES
11207 #include <inttypes.h>
11208 #endif
11209 #include <stdio.h>
11210 int main() {
11211 #ifdef INT8
11212    int8_t i =  INT8_MAX;
11213   uint8_t u = UINT8_MAX;
11214   printf("int8_t\n");
11215 #endif
11216 #ifdef INT16
11217    int16_t i =  INT16_MAX;
11218   uint16_t i = UINT16_MAX;
11219   printf("int16_t\n");
11220 #endif
11221 #ifdef INT32
11222    int32_t i =  INT32_MAX;
11223   uint32_t u = UINT32_MAX;
11224   printf("int32_t\n");
11225 #endif
11226 }
11227 EOCP
11228
11229 case "$i8type" in
11230 '')     case "$charsize" in
11231         1)      i8type=char
11232                 u8type="unsigned char"
11233                 i8size=$charsize
11234                 u8size=$charsize
11235                 ;;
11236         esac
11237         ;;
11238 esac
11239 case "$i8type" in
11240 '')     set try -DINT8
11241         if eval $compile; then
11242                 case "`$run ./try`" in
11243                 int8_t) i8type=int8_t
11244                         u8type=uint8_t
11245                         i8size=1
11246                         u8size=1
11247                         ;;
11248                 esac
11249         fi
11250         ;;
11251 esac
11252 case "$i8type" in
11253 '')     if $test $charsize -ge 1; then
11254                 i8type=char
11255                 u8type="unsigned char"
11256                 i8size=$charsize
11257                 u8size=$charsize
11258         fi
11259         ;;
11260 esac
11261
11262 case "$i16type" in
11263 '')     case "$shortsize" in
11264         2)      i16type=short
11265                 u16type="unsigned short"
11266                 i16size=$shortsize
11267                 u16size=$shortsize
11268                 ;;
11269         esac
11270         ;;
11271 esac
11272 case "$i16type" in
11273 '')     set try -DINT16
11274         if eval $compile; then
11275                 case "`$run ./try`" in
11276                 int16_t)
11277                         i16type=int16_t
11278                         u16type=uint16_t
11279                         i16size=2
11280                         u16size=2
11281                         ;;
11282                 esac
11283         fi
11284         ;;
11285 esac
11286 case "$i16type" in
11287 '')     if $test $shortsize -ge 2; then
11288                 i16type=short
11289                 u16type="unsigned short"
11290                 i16size=$shortsize
11291                 u16size=$shortsize
11292         fi
11293         ;;
11294 esac
11295
11296 case "$i32type" in
11297 '')     case "$longsize" in
11298         4)      i32type=long
11299                 u32type="unsigned long"
11300                 i32size=$longsize
11301                 u32size=$longsize
11302                 ;;
11303         *)      case "$intsize" in
11304                 4)      i32type=int
11305                         u32type="unsigned int"
11306                         i32size=$intsize
11307                         u32size=$intsize
11308                         ;;
11309                 esac
11310                 ;;
11311         esac
11312         ;;
11313 esac
11314 case "$i32type" in
11315 '')     set try -DINT32
11316         if eval $compile; then
11317                 case "`$run ./try`" in
11318                 int32_t)
11319                         i32type=int32_t
11320                         u32type=uint32_t
11321                         i32size=4
11322                         u32size=4
11323                         ;;
11324                 esac
11325         fi
11326         ;;
11327 esac
11328 case "$i32type" in
11329 '')     if $test $intsize -ge 4; then
11330                 i32type=int
11331                 u32type="unsigned int"
11332                 i32size=$intsize
11333                 u32size=$intsize
11334         fi
11335         ;;
11336 esac
11337
11338 case "$i64type" in
11339 '')     case "$d_quad:$quadtype" in
11340         define:?*)
11341                 i64type="$quadtype"
11342                 u64type="$uquadtype"
11343                 i64size=8
11344                 u64size=8
11345                 ;;
11346         esac
11347         ;;
11348 esac
11349
11350 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11351 : volatile so that the compiler has to store it out to memory.
11352 if test X"$d_volatile" = X"$define"; then
11353         volatile=volatile
11354 fi
11355 $cat <<EOP >try.c
11356 #include <stdio.h>
11357 #include <sys/types.h>
11358 #include <signal.h>
11359 #ifdef SIGFPE
11360 $volatile int bletched = 0;
11361 $signal_t blech(s) int s; { bletched = 1; }
11362 #endif
11363 int main() {
11364     $uvtype u = 0;
11365     $nvtype d;
11366     int     n = 8 * $uvsize;
11367     int     i;
11368 #ifdef SIGFPE
11369     signal(SIGFPE, blech);
11370 #endif
11371
11372     for (i = 0; i < n; i++) {
11373       u = u << 1 | ($uvtype)1;
11374       d = ($nvtype)u;
11375       if (($uvtype)d != u)
11376         break;
11377       if (d <= 0)
11378         break;
11379       d = ($nvtype)(u - 1);
11380       if (($uvtype)d != (u - 1))
11381         break;
11382 #ifdef SIGFPE
11383       if (bletched) {
11384         break;
11385 #endif
11386       } 
11387     }
11388     printf("%d\n", ((i == n) ? -n : i));
11389     exit(0);
11390 }
11391 EOP
11392 set try
11393
11394 d_nv_preserves_uv="$undef"
11395 if eval $compile; then
11396         d_nv_preserves_uv_bits="`$run ./try`"
11397 fi
11398 case "$d_nv_preserves_uv_bits" in
11399 \-[1-9]*)       
11400         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11401         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11402         d_nv_preserves_uv="$define"
11403         ;;
11404 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11405         d_nv_preserves_uv="$undef" ;;
11406 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11407         d_nv_preserves_uv_bits="$undef" ;;
11408 esac
11409
11410 $rm -f try.* try
11411
11412
11413 : check for off64_t
11414 echo " "
11415 echo "Checking to see if you have off64_t..." >&4
11416 $cat >try.c <<EOCP
11417 #include <sys/types.h>
11418 #include <unistd.h>
11419 int main() { off64_t x = 7; }
11420 EOCP
11421 set try
11422 if eval $compile; then
11423         val="$define"
11424         echo "You have off64_t."
11425 else
11426         val="$undef"
11427         echo "You do not have off64_t."
11428         case "$lseeksize" in
11429         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11430         esac
11431 fi
11432 $rm -f try.* try
11433 set d_off64_t
11434 eval $setvar
11435
11436 : see if POSIX threads are available
11437 set pthread.h i_pthread
11438 eval $inhdr
11439
11440
11441
11442
11443 : how to create joinable pthreads
11444 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11445         echo " "
11446         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11447         $cat >try.c <<'EOCP'
11448 #include <pthread.h>
11449 int main() {
11450     int detachstate = JOINABLE;
11451 }
11452 EOCP
11453         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11454         if eval $compile; then
11455                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11456                 val="$undef" # Yes, undef.
11457                 set d_old_pthread_create_joinable
11458                 eval $setvar
11459                 val=""
11460                 set old_pthread_create_joinable
11461                 eval $setvar
11462         else
11463                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11464                 if eval $compile; then
11465                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11466                         val="$define"
11467                         set d_old_pthread_create_joinable
11468                         eval $setvar
11469                         val=PTHREAD_CREATE_UNDETACHED
11470                         set old_pthread_create_joinable
11471                         eval $setvar
11472                 else            
11473                         set try -DJOINABLE=__UNDETACHED
11474                         if eval $compile; then
11475                                 echo "You seem to use __UNDETACHED." >&4
11476                                 val="$define"
11477                                 set d_old_pthread_create_joinable
11478                                 eval $setvar
11479                                 val=__UNDETACHED
11480                                 set old_pthread_create_joinable
11481                                 eval $setvar
11482                         else
11483                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11484                                 val="$define"
11485                                 set d_old_pthread_create_joinable
11486                                 eval $setvar
11487                                 val=0
11488                                 set old_pthread_create_joinable
11489                                 eval $setvar
11490                         fi
11491                 fi
11492         fi
11493         $rm -f try try.*
11494 else
11495     d_old_pthread_create_joinable="$undef"
11496     old_pthread_create_joinable=""
11497 fi
11498
11499 : see if pause exists
11500 set pause d_pause
11501 eval $inlibc
11502
11503 : see if pipe exists
11504 set pipe d_pipe
11505 eval $inlibc
11506
11507 : see if poll exists
11508 set poll d_poll
11509 eval $inlibc
11510
11511 : see if readlink exists
11512 set readlink d_readlink
11513 eval $inlibc
11514
11515 echo " "
11516 procselfexe=''
11517 val="$undef"
11518 case "$d_readlink" in
11519 "$define")
11520         if $issymlink /proc/self/exe ; then
11521                 $ls -l /proc/self/exe > reflect
11522                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11523                         echo "You have Linux-like /proc/self/exe."
11524                         procselfexe='"/proc/self/exe"'
11525                         val="$define"
11526                         break
11527                 fi
11528         fi
11529         if $issymlink /proc/curproc/file ; then
11530                 $ls -l /proc/curproc/file > reflect
11531                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11532                         echo "You have BSD-like /proc/curproc/file."
11533                         procselfexe='"/proc/curproc/file"'
11534                         val="$define"
11535                         break
11536                 fi
11537         fi
11538         ;;
11539 esac
11540 $rm reflect
11541 set d_procselfexe
11542 eval $setvar
11543
11544 : see if pthread_atfork exists
11545 set pthread_atfork d_pthread_atfork
11546 eval $inlibc
11547
11548
11549 : see whether the various POSIXish _yields exist
11550 $cat >try.c <<EOP
11551 #include <pthread.h>
11552 #include <stdio.h>
11553 int main() {
11554 #ifdef SCHED_YIELD
11555         sched_yield();
11556 #else
11557 #ifdef PTHREAD_YIELD
11558         pthread_yield();
11559 #else
11560 #ifdef PTHREAD_YIELD_NULL
11561         pthread_yield(NULL);
11562 #endif
11563 #endif
11564 #endif
11565 }
11566 EOP
11567 : see if sched_yield exists
11568 set try -DSCHED_YIELD
11569 if eval $compile; then
11570     val="$define"
11571     sched_yield='sched_yield()'
11572 else
11573     val="$undef"
11574 fi
11575 case "$usethreads" in
11576 $define)
11577         case "$val" in
11578         $define) echo 'sched_yield() found.' >&4        ;;
11579         *)       echo 'sched_yield() NOT found.' >&4    ;;
11580         esac
11581 esac
11582 set d_sched_yield
11583 eval $setvar
11584
11585 : see if pthread_yield exists
11586 set try -DPTHREAD_YIELD
11587 if eval $compile; then
11588     val="$define"
11589     case "$sched_yield" in
11590     '') sched_yield='pthread_yield()' ;;
11591     esac
11592 else
11593     set try -DPTHREAD_YIELD_NULL
11594     if eval $compile; then
11595         val="$define"
11596         case "$sched_yield" in
11597         '') sched_yield='pthread_yield(NULL)' ;;
11598         esac
11599     else
11600         val="$undef"
11601     fi
11602 fi
11603 case "$usethreads" in
11604 $define)
11605         case "$val" in
11606         $define) echo 'pthread_yield() found.' >&4      ;;
11607         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11608         esac
11609         ;;
11610 esac
11611 set d_pthread_yield
11612 eval $setvar
11613
11614 case "$sched_yield" in
11615 '') sched_yield=undef ;;
11616 esac
11617
11618 $rm -f try try.*
11619
11620 : see if this is a pwd.h system
11621 set pwd.h i_pwd
11622 eval $inhdr
11623
11624 case "$i_pwd" in
11625 $define)
11626         xxx=`./findhdr pwd.h`
11627         $cppstdin $cppflags $cppminus < $xxx >$$.h
11628
11629         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11630                 val="$define"
11631         else
11632                 val="$undef"
11633         fi
11634         set d_pwquota
11635         eval $setvar
11636
11637         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11638                 val="$define"
11639         else
11640                 val="$undef"
11641         fi
11642         set d_pwage
11643         eval $setvar
11644
11645         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11646                 val="$define"
11647         else
11648                 val="$undef"
11649         fi
11650         set d_pwchange
11651         eval $setvar
11652
11653         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11654                 val="$define"
11655         else
11656                 val="$undef"
11657         fi
11658         set d_pwclass
11659         eval $setvar
11660
11661         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11662                 val="$define"
11663         else
11664                 val="$undef"
11665         fi
11666         set d_pwexpire
11667         eval $setvar
11668
11669         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11670                 val="$define"
11671         else
11672                 val="$undef"
11673         fi
11674         set d_pwcomment
11675         eval $setvar
11676
11677         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11678                 val="$define"
11679         else
11680                 val="$undef"
11681         fi
11682         set d_pwgecos
11683         eval $setvar
11684
11685         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11686                 val="$define"
11687         else
11688                 val="$undef"
11689         fi
11690         set d_pwpasswd
11691         eval $setvar
11692
11693         $rm -f $$.h
11694         ;;
11695 *)
11696         val="$undef"; 
11697         set d_pwquota; eval $setvar
11698         set d_pwage; eval $setvar
11699         set d_pwchange; eval $setvar
11700         set d_pwclass; eval $setvar
11701         set d_pwexpire; eval $setvar
11702         set d_pwcomment; eval $setvar
11703         set d_pwgecos; eval $setvar
11704         set d_pwpasswd; eval $setvar
11705         ;;
11706 esac
11707
11708 : see if readdir and friends exist
11709 set readdir d_readdir
11710 eval $inlibc
11711 set seekdir d_seekdir
11712 eval $inlibc
11713 set telldir d_telldir
11714 eval $inlibc
11715 set rewinddir d_rewinddir
11716 eval $inlibc
11717
11718 : see if readv exists
11719 set readv d_readv
11720 eval $inlibc
11721
11722 : see if recvmsg exists
11723 set recvmsg d_recvmsg
11724 eval $inlibc
11725
11726 : see if rename exists
11727 set rename d_rename
11728 eval $inlibc
11729
11730 : see if rmdir exists
11731 set rmdir d_rmdir
11732 eval $inlibc
11733
11734 : see if memory.h is available.
11735 val=''
11736 set memory.h val
11737 eval $inhdr
11738
11739 : See if it conflicts with string.h
11740 case "$val" in
11741 $define)
11742         case "$strings" in
11743         '') ;;
11744         *)
11745                 $cppstdin $cppflags $cppminus < $strings > mem.h
11746                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11747                         echo " "
11748                         echo "We won't be including <memory.h>."
11749                         val="$undef"
11750                 fi
11751                 $rm -f mem.h
11752                 ;;
11753         esac
11754 esac
11755 set i_memory
11756 eval $setvar
11757
11758 : can bcopy handle overlapping blocks?
11759 echo " "
11760 val="$undef"
11761 case "$d_memmove" in
11762 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11763 *)      case "$d_bcopy" in
11764         "$define")
11765                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11766                 $cat >try.c <<EOCP
11767 #$i_memory I_MEMORY
11768 #$i_stdlib I_STDLIB
11769 #$i_string I_STRING
11770 #$i_unistd I_UNISTD
11771 EOCP
11772         $cat >>try.c <<'EOCP'
11773 #include <stdio.h>
11774 #ifdef I_MEMORY
11775 #  include <memory.h>
11776 #endif
11777 #ifdef I_STDLIB
11778 #  include <stdlib.h>
11779 #endif
11780 #ifdef I_STRING
11781 #  include <string.h>
11782 #else
11783 #  include <strings.h>
11784 #endif
11785 #ifdef I_UNISTD
11786 #  include <unistd.h>  /* Needed for NetBSD */
11787 #endif
11788 int main()
11789 {
11790 char buf[128], abc[128];
11791 char *b;
11792 int len;
11793 int off;
11794 int align;
11795
11796 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11797    try to store the string in read-only memory. */
11798 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11799
11800 for (align = 7; align >= 0; align--) {
11801         for (len = 36; len; len--) {
11802                 b = buf+align;
11803                 bcopy(abc, b, len);
11804                 for (off = 1; off <= len; off++) {
11805                         bcopy(b, b+off, len);
11806                         bcopy(b+off, b, len);
11807                         if (bcmp(b, abc, len))
11808                                 exit(1);
11809                 }
11810         }
11811 }
11812 exit(0);
11813 }
11814 EOCP
11815                 set try
11816                 if eval $compile_ok; then
11817                         if ./try 2>/dev/null; then
11818                                 echo "Yes, it can."
11819                                 val="$define"
11820                         else
11821                                 echo "It can't, sorry."
11822                         fi
11823                 else
11824                         echo "(I can't compile the test program, so we'll assume not...)"
11825                 fi
11826                 ;;
11827         esac
11828         $rm -f try.* try core
11829         ;;
11830 esac
11831 set d_safebcpy
11832 eval $setvar
11833
11834 : can memcpy handle overlapping blocks?
11835 echo " "
11836 val="$undef"
11837 case "$d_memmove" in
11838 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11839 *)      case "$d_memcpy" in
11840         "$define")
11841                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11842                 $cat >try.c <<EOCP
11843 #$i_memory I_MEMORY
11844 #$i_stdlib I_STDLIB
11845 #$i_string I_STRING
11846 #$i_unistd I_UNISTD
11847 EOCP
11848         $cat >>try.c <<'EOCP'
11849 #include <stdio.h>
11850 #ifdef I_MEMORY
11851 #  include <memory.h>
11852 #endif
11853 #ifdef I_STDLIB
11854 #  include <stdlib.h>
11855 #endif
11856 #ifdef I_STRING
11857 #  include <string.h>
11858 #else
11859 #  include <strings.h>
11860 #endif
11861 #ifdef I_UNISTD
11862 #  include <unistd.h>  /* Needed for NetBSD */
11863 #endif
11864 int main()
11865 {
11866 char buf[128], abc[128];
11867 char *b;
11868 int len;
11869 int off;
11870 int align;
11871
11872 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11873    try to store the string in read-only memory. */
11874 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11875
11876 for (align = 7; align >= 0; align--) {
11877         for (len = 36; len; len--) {
11878                 b = buf+align;
11879                 memcpy(b, abc, len);
11880                 for (off = 1; off <= len; off++) {
11881                         memcpy(b+off, b, len);
11882                         memcpy(b, b+off, len);
11883                         if (memcmp(b, abc, len))
11884                                 exit(1);
11885                 }
11886         }
11887 }
11888 exit(0);
11889 }
11890 EOCP
11891                 set try
11892                 if eval $compile_ok; then
11893                         if ./try 2>/dev/null; then
11894                                 echo "Yes, it can."
11895                                 val="$define"
11896                         else
11897                                 echo "It can't, sorry."
11898                         fi
11899                 else
11900                         echo "(I can't compile the test program, so we'll assume not...)"
11901                 fi
11902                 ;;
11903         esac
11904         $rm -f try.* try core
11905         ;;
11906 esac
11907 set d_safemcpy
11908 eval $setvar
11909
11910 : can memcmp be trusted to compare relative magnitude?
11911 val="$undef"
11912 case "$d_memcmp" in
11913 "$define")
11914         echo " "
11915         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11916         $cat >try.c <<EOCP
11917 #$i_memory I_MEMORY
11918 #$i_stdlib I_STDLIB
11919 #$i_string I_STRING
11920 #$i_unistd I_UNISTD
11921 EOCP
11922         $cat >>try.c <<'EOCP'
11923 #include <stdio.h>
11924 #ifdef I_MEMORY
11925 #  include <memory.h>
11926 #endif
11927 #ifdef I_STDLIB
11928 #  include <stdlib.h>
11929 #endif
11930 #ifdef I_STRING
11931 #  include <string.h>
11932 #else
11933 #  include <strings.h>
11934 #endif
11935 #ifdef I_UNISTD
11936 #  include <unistd.h>  /* Needed for NetBSD */
11937 #endif
11938 int main()
11939 {
11940 char a = -1;
11941 char b = 0;
11942 if ((a < b) && memcmp(&a, &b, 1) < 0)
11943         exit(1);
11944 exit(0);
11945 }
11946 EOCP
11947         set try
11948         if eval $compile_ok; then
11949                 if $run ./try 2>/dev/null; then
11950                         echo "Yes, it can."
11951                         val="$define"
11952                 else
11953                         echo "No, it can't (it uses signed chars)."
11954                 fi
11955         else
11956                 echo "(I can't compile the test program, so we'll assume not...)"
11957         fi
11958         ;;
11959 esac
11960 $rm -f try.* try core
11961 set d_sanemcmp
11962 eval $setvar
11963
11964 : see if prototype for sbrk is available
11965 echo " "
11966 set d_sbrkproto sbrk $i_unistd unistd.h
11967 eval $hasproto
11968
11969 : see if select exists
11970 set select d_select
11971 eval $inlibc
11972
11973 : see if semctl exists
11974 set semctl d_semctl
11975 eval $inlibc
11976
11977 : see if semget exists
11978 set semget d_semget
11979 eval $inlibc
11980
11981 : see if semop exists
11982 set semop d_semop
11983 eval $inlibc
11984
11985 : see how much of the 'sem*(2)' library is present.
11986 h_sem=true
11987 echo " "
11988 case "$d_semctl$d_semget$d_semop" in
11989 *"$undef"*) h_sem=false;;
11990 esac
11991 case "$osname" in
11992 freebsd)
11993     case "`ipcs 2>&1`" in
11994     "SVID messages"*"not configured"*)
11995         echo "Your $osname does not have the sem*(2) configured." >&4
11996         h_sem=false
11997         val="$undef"
11998         set semctl d_semctl
11999         eval $setvar
12000         set semget d_semget
12001         eval $setvar
12002         set semop d_semop
12003         eval $setvar
12004         ;;
12005     esac
12006     ;;
12007 esac
12008 : we could also check for sys/ipc.h ...
12009 if $h_sem && $test `./findhdr sys/sem.h`; then
12010         echo "You have the full sem*(2) library." >&4
12011         val="$define"
12012 else
12013         echo "You don't have the full sem*(2) library." >&4
12014         val="$undef"
12015 fi
12016 set d_sem
12017 eval $setvar
12018
12019 : see whether sys/sem.h defines union semun
12020 echo " "
12021 $cat > try.c <<'END'
12022 #include <sys/types.h>
12023 #include <sys/ipc.h>
12024 #include <sys/sem.h>
12025 int main () { union semun semun; semun.buf = 0; }
12026 END
12027 set try
12028 if eval $compile; then
12029     echo "You have union semun in <sys/sem.h>." >&4
12030     val="$define"
12031 else
12032     echo "You do not have union semun in <sys/sem.h>." >&4
12033     val="$undef"
12034 fi
12035 $rm -f try try.c try.h
12036 set d_union_semun
12037 eval $setvar
12038
12039 : see how to do semctl IPC_STAT
12040 case "$d_sem" in
12041 $define)
12042     : see whether semctl IPC_STAT can use union semun
12043     echo " "
12044     $cat > try.h <<END
12045 #ifndef S_IRUSR
12046 #   ifdef S_IREAD
12047 #       define S_IRUSR S_IREAD
12048 #       define S_IWUSR S_IWRITE
12049 #       define S_IXUSR S_IEXEC
12050 #   else
12051 #       define S_IRUSR 0400
12052 #       define S_IWUSR 0200
12053 #       define S_IXUSR 0100
12054 #   endif
12055 #   define S_IRGRP (S_IRUSR>>3)
12056 #   define S_IWGRP (S_IWUSR>>3)
12057 #   define S_IXGRP (S_IXUSR>>3)
12058 #   define S_IROTH (S_IRUSR>>6)
12059 #   define S_IWOTH (S_IWUSR>>6)
12060 #   define S_IXOTH (S_IXUSR>>6)
12061 #endif
12062 #ifndef S_IRWXU
12063 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12064 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12065 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12066 #endif
12067 END
12068
12069     $cat > try.c <<END
12070 #include <sys/types.h>
12071 #include <sys/ipc.h>
12072 #include <sys/sem.h>
12073 #include <sys/stat.h>
12074 #include <stdio.h>
12075 #include <errno.h>
12076 #include "try.h"
12077 #ifndef errno
12078 extern int errno;
12079 #endif
12080 #$d_union_semun HAS_UNION_SEMUN
12081 int main() {
12082     union semun
12083 #ifndef HAS_UNION_SEMUN
12084     {
12085         int val;
12086         struct semid_ds *buf;
12087         unsigned short *array;
12088     }
12089 #endif
12090     arg;
12091     int sem, st;
12092
12093 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12094     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12095     if (sem > -1) {
12096         struct semid_ds argbuf;
12097         arg.buf = &argbuf;
12098 #       ifdef IPC_STAT
12099         st = semctl(sem, 0, IPC_STAT, arg);
12100         if (st == 0)
12101             printf("semun\n");
12102         else
12103 #       endif /* IPC_STAT */
12104             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12105 #       ifdef IPC_RMID
12106         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12107 #       endif /* IPC_RMID */
12108             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12109     } else
12110 #endif /* IPC_PRIVATE && ... */
12111         printf("semget failed: errno = %d\n", errno);
12112   return 0;
12113 }
12114 END
12115     val="$undef"
12116     set try
12117     if eval $compile; then
12118         xxx=`$run ./try`
12119         case "$xxx" in
12120         semun) val="$define" ;;
12121         esac
12122     fi
12123     $rm -f try try.c
12124     set d_semctl_semun
12125     eval $setvar
12126     case "$d_semctl_semun" in
12127     $define)
12128         echo "You can use union semun for semctl IPC_STAT." >&4
12129         also='also'
12130         ;;
12131     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12132         also=''
12133         ;;
12134     esac
12135
12136     : see whether semctl IPC_STAT can use struct semid_ds pointer
12137     $cat > try.c <<'END'
12138 #include <sys/types.h>
12139 #include <sys/ipc.h>
12140 #include <sys/sem.h>
12141 #include <sys/stat.h>
12142 #include "try.h"
12143 #include <stdio.h>
12144 #include <errno.h>
12145 #ifndef errno
12146 extern int errno;
12147 #endif
12148 int main() {
12149     struct semid_ds arg;
12150     int sem, st;
12151
12152 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12153     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12154     if (sem > -1) {
12155 #       ifdef IPC_STAT
12156         st = semctl(sem, 0, IPC_STAT, &arg);
12157         if (st == 0)
12158             printf("semid_ds\n");
12159         else
12160 #       endif /* IPC_STAT */
12161             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12162 #       ifdef IPC_RMID
12163         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12164 #       endif /* IPC_RMID */
12165             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12166     } else
12167 #endif /* IPC_PRIVATE && ... */
12168         printf("semget failed: errno = %d\n", errno);
12169
12170     return 0;
12171 }
12172 END
12173     val="$undef"
12174     set try
12175     if eval $compile; then
12176         xxx=`$run ./try`
12177         case "$xxx" in
12178         semid_ds) val="$define" ;;
12179         esac
12180     fi
12181     $rm -f try try.c
12182     set d_semctl_semid_ds
12183     eval $setvar
12184     case "$d_semctl_semid_ds" in
12185     $define)
12186         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12187         ;;
12188     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12189         ;;
12190     esac
12191     $rm -f try.h
12192     ;;
12193 *)  val="$undef"
12194
12195     # We do not have the full sem*(2) library, so assume we can not
12196     # use either.
12197
12198     set d_semctl_semun
12199     eval $setvar
12200
12201     set d_semctl_semid_ds
12202     eval $setvar
12203     ;;
12204 esac
12205
12206 : see if sendmsg exists
12207 set sendmsg d_sendmsg
12208 eval $inlibc
12209
12210 : see if setegid exists
12211 set setegid d_setegid
12212 eval $inlibc
12213
12214 : see if seteuid exists
12215 set seteuid d_seteuid
12216 eval $inlibc
12217
12218 : see if setgrent exists
12219 set setgrent d_setgrent
12220 eval $inlibc
12221
12222 : see if sethostent exists
12223 set sethostent d_sethent
12224 eval $inlibc
12225
12226 : see if setitimer exists
12227 set setitimer d_setitimer
12228 eval $inlibc
12229
12230 : see if setlinebuf exists
12231 set setlinebuf d_setlinebuf
12232 eval $inlibc
12233
12234 : see if setlocale exists
12235 set setlocale d_setlocale
12236 eval $inlibc
12237
12238 : see if setnetent exists
12239 set setnetent d_setnent
12240 eval $inlibc
12241
12242 : see if setprotoent exists
12243 set setprotoent d_setpent
12244 eval $inlibc
12245
12246 : see if setpgid exists
12247 set setpgid d_setpgid
12248 eval $inlibc
12249
12250 : see if setpgrp2 exists
12251 set setpgrp2 d_setpgrp2
12252 eval $inlibc
12253
12254 : see if setpriority exists
12255 set setpriority d_setprior
12256 eval $inlibc
12257
12258 : see if setproctitle exists
12259 set setproctitle d_setproctitle
12260 eval $inlibc
12261
12262 : see if setpwent exists
12263 set setpwent d_setpwent
12264 eval $inlibc
12265
12266 : see if setregid exists
12267 set setregid d_setregid
12268 eval $inlibc
12269 set setresgid d_setresgid
12270 eval $inlibc
12271
12272 : see if setreuid exists
12273 set setreuid d_setreuid
12274 eval $inlibc
12275 set setresuid d_setresuid
12276 eval $inlibc
12277
12278 : see if setrgid exists
12279 set setrgid d_setrgid
12280 eval $inlibc
12281
12282 : see if setruid exists
12283 set setruid d_setruid
12284 eval $inlibc
12285
12286 : see if setservent exists
12287 set setservent d_setsent
12288 eval $inlibc
12289
12290 : see if setsid exists
12291 set setsid d_setsid
12292 eval $inlibc
12293
12294 : see if setvbuf exists
12295 set setvbuf d_setvbuf
12296 eval $inlibc
12297
12298 : see if sfio.h is available
12299 set sfio.h i_sfio
12300 eval $inhdr
12301
12302
12303 : see if sfio library is available
12304 case "$i_sfio" in
12305 $define)
12306         val=''
12307         set sfreserve val
12308         eval $inlibc
12309         ;;
12310 *)
12311         val="$undef"
12312         ;;
12313 esac
12314 : Ok, but do we want to use it.
12315 case "$val" in
12316 $define)
12317         case "$usesfio" in
12318         true|$define|[yY]*) dflt='y';;
12319         *) dflt='n';;
12320         esac
12321         echo "$package can use the sfio library, but it is experimental."
12322         case "$useperlio" in
12323         "$undef")
12324             echo "For sfio also the PerlIO abstraction layer is needed."
12325             echo "Earlier you said you wouldn't want that."
12326             ;;
12327         esac
12328         rp="You seem to have sfio available, do you want to try using it?"
12329         . ./myread
12330         case "$ans" in
12331         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12332                 useperlio="$define"
12333                 val="$define"
12334                 ;;
12335         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12336                 val="$undef"
12337                 ;;
12338         esac
12339         ;;
12340 *)      case "$usesfio" in
12341         true|$define|[yY]*)
12342                 echo "Sorry, cannot find sfio on this machine." >&4
12343                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12344                 val="$undef"
12345                 ;;
12346         esac
12347         ;;
12348 esac
12349 set d_sfio
12350 eval $setvar
12351 case "$d_sfio" in
12352 $define) usesfio='true';;
12353 *) usesfio='false';;
12354 esac
12355 case "$d_sfio" in
12356 $define) ;;
12357 *)      : Remove sfio from list of libraries to use
12358         case "$libs" in
12359         *-lsfio*)
12360                 echo "Removing unneeded -lsfio from library list" >&4
12361                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12362                 shift
12363                 libs="$*"
12364                 echo "libs = $libs" >&4
12365                 ;;
12366         esac
12367 ;;
12368 esac
12369
12370
12371 : see if shmctl exists
12372 set shmctl d_shmctl
12373 eval $inlibc
12374
12375 : see if shmget exists
12376 set shmget d_shmget
12377 eval $inlibc
12378
12379 : see if shmat exists
12380 set shmat d_shmat
12381 eval $inlibc
12382 : see what shmat returns
12383 case "$d_shmat" in
12384 "$define")
12385         $cat >shmat.c <<'END'
12386 #include <sys/shm.h>
12387 void *shmat();
12388 END
12389         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12390                 shmattype='void *'
12391         else
12392                 shmattype='char *'
12393         fi
12394         echo "and it returns ($shmattype)." >&4
12395         : see if a prototype for shmat is available
12396         xxx=`./findhdr sys/shm.h`
12397         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12398         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12399                 val="$define"
12400         else
12401                 val="$undef"
12402         fi
12403         $rm -f shmat.[co]
12404         ;;
12405 *)
12406         val="$undef"
12407         ;;
12408 esac
12409 set d_shmatprototype
12410 eval $setvar
12411
12412 : see if shmdt exists
12413 set shmdt d_shmdt
12414 eval $inlibc
12415
12416 : see how much of the 'shm*(2)' library is present.
12417 h_shm=true
12418 echo " "
12419 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12420 *"$undef"*) h_shm=false;;
12421 esac
12422 case "$osname" in
12423 freebsd)
12424     case "`ipcs 2>&1`" in
12425     "SVID shared memory"*"not configured"*)
12426         echo "Your $osname does not have the shm*(2) configured." >&4
12427         h_shm=false
12428         val="$undef"
12429         set shmctl d_shmctl
12430         evat $setvar
12431         set shmget d_shmget
12432         evat $setvar
12433         set shmat d_shmat
12434         evat $setvar
12435         set shmdt d_shmdt
12436         evat $setvar
12437         ;;
12438     esac
12439     ;;
12440 esac
12441 : we could also check for sys/ipc.h ...
12442 if $h_shm && $test `./findhdr sys/shm.h`; then
12443         echo "You have the full shm*(2) library." >&4
12444         val="$define"
12445 else
12446         echo "You don't have the full shm*(2) library." >&4
12447         val="$undef"
12448 fi
12449 set d_shm
12450 eval $setvar
12451
12452 echo " "
12453 : see if we have sigaction
12454 if set sigaction val -f d_sigaction; eval $csym; $val; then
12455         echo 'sigaction() found.' >&4
12456         $cat > try.c <<'EOP'
12457 #include <stdio.h>
12458 #include <sys/types.h>
12459 #include <signal.h>
12460 int main()
12461 {
12462     struct sigaction act, oact;
12463     act.sa_flags = 0;
12464     oact.sa_handler = 0;
12465     /* so that act and oact are used */
12466     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12467 }
12468 EOP
12469         set try
12470         if eval $compile_ok; then
12471                 val="$define"
12472         else
12473                 echo "But you don't seem to have a useable struct sigaction." >&4
12474                 val="$undef"
12475         fi
12476 else
12477         echo 'sigaction NOT found.' >&4
12478         val="$undef"
12479 fi
12480 set d_sigaction; eval $setvar
12481 $rm -f try try$_o try.c
12482
12483 : see if sigprocmask exists
12484 set sigprocmask d_sigprocmask
12485 eval $inlibc
12486
12487 : see if sigsetjmp exists
12488 echo " "
12489 case "$d_sigsetjmp" in
12490 '')
12491         $cat >try.c <<'EOP'
12492 #include <setjmp.h>
12493 sigjmp_buf env;
12494 int set = 1;
12495 int main()
12496 {
12497         if (sigsetjmp(env,1))
12498                 exit(set);
12499         set = 0;
12500         siglongjmp(env, 1);
12501         exit(1);
12502 }
12503 EOP
12504         set try
12505         if eval $compile; then
12506                 if $run ./try >/dev/null 2>&1; then
12507                         echo "POSIX sigsetjmp found." >&4
12508                         val="$define"
12509                 else
12510                         $cat >&4 <<EOM
12511 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12512 I'll ignore them.
12513 EOM
12514                         val="$undef"
12515                 fi
12516         else
12517                 echo "sigsetjmp not found." >&4
12518                 val="$undef"
12519         fi
12520         ;;
12521 *) val="$d_sigsetjmp"
12522         case "$d_sigsetjmp" in
12523         $define) echo "POSIX sigsetjmp found." >&4;;
12524         $undef) echo "sigsetjmp not found." >&4;;
12525         esac
12526         ;;
12527 esac
12528 set d_sigsetjmp
12529 eval $setvar
12530 $rm -f try.c try
12531
12532 : see if sockatmark exists
12533 set sockatmark d_sockatmark
12534 eval $inlibc
12535
12536 : see if prototype for sockatmark is available
12537 echo " "
12538 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12539 eval $hasproto
12540
12541 : see if socks5_init exists
12542 set socks5_init d_socks5_init
12543 eval $inlibc
12544
12545 : see if prototype for setresgid is available
12546 echo " "
12547 set d_sresgproto setresgid $i_unistd unistd.h
12548 eval $hasproto
12549
12550 : see if prototype for setresuid is available
12551 echo " "
12552 set d_sresuproto setresuid $i_unistd unistd.h
12553 eval $hasproto
12554
12555 : see if sys/stat.h is available
12556 set sys/stat.h i_sysstat
12557 eval $inhdr
12558
12559
12560 : see if stat knows about block sizes
12561 echo " "
12562 echo "Checking to see if your struct stat has st_blocks field..." >&4
12563 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12564 eval $hasfield
12565
12566
12567 : see if this is a sys/vfs.h system
12568 set sys/vfs.h i_sysvfs
12569 eval $inhdr
12570
12571
12572 : see if this is a sys/statfs.h system
12573 set sys/statfs.h i_sysstatfs
12574 eval $inhdr
12575
12576
12577 echo " "
12578 echo "Checking to see if your system supports struct statfs..." >&4
12579 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
12580 eval $hasstruct
12581 case "$d_statfs_s" in
12582 "$define")      echo "Yes, it does."   ;;
12583 *)              echo "No, it doesn't." ;;
12584 esac
12585
12586
12587
12588 : see if struct statfs knows about f_flags
12589 case "$d_statfs_s" in
12590 define) 
12591         echo " "
12592         echo "Checking to see if your struct statfs has f_flags field..." >&4
12593         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
12594         eval $hasfield
12595         ;;
12596 *)      val="$undef"
12597         set d_statfs_f_flags
12598         eval $setvar
12599         ;;
12600 esac
12601 case "$d_statfs_f_flags" in
12602 "$define")      echo "Yes, it does."   ;;
12603 *)              echo "No, it doesn't." ;;
12604 esac
12605
12606 : see if _ptr and _cnt from stdio act std
12607 echo " "
12608
12609 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12610         echo "(Looks like you have stdio.h from BSD.)"
12611         case "$stdio_ptr" in
12612         '') stdio_ptr='((fp)->_p)'
12613                 ptr_lval=$define
12614                 ;;
12615         *)      ptr_lval=$d_stdio_ptr_lval;;
12616         esac
12617         case "$stdio_cnt" in
12618         '') stdio_cnt='((fp)->_r)'
12619                 cnt_lval=$define
12620                 ;;
12621         *)      cnt_lval=$d_stdio_cnt_lval;;
12622         esac
12623         case "$stdio_base" in
12624         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12625         esac
12626         case "$stdio_bufsiz" in
12627         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12628         esac
12629 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12630         echo "(Looks like you have stdio.h from Linux.)"
12631         case "$stdio_ptr" in
12632         '') stdio_ptr='((fp)->_IO_read_ptr)'
12633                 ptr_lval=$define
12634                 ;;
12635         *)      ptr_lval=$d_stdio_ptr_lval;;
12636         esac
12637         case "$stdio_cnt" in
12638         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12639                 cnt_lval=$undef
12640                 ;;
12641         *)      cnt_lval=$d_stdio_cnt_lval;;
12642         esac
12643         case "$stdio_base" in
12644         '') stdio_base='((fp)->_IO_read_base)';;
12645         esac
12646         case "$stdio_bufsiz" in
12647         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12648         esac
12649 else
12650         case "$stdio_ptr" in
12651         '') stdio_ptr='((fp)->_ptr)'
12652                 ptr_lval=$define
12653                 ;;
12654         *)      ptr_lval=$d_stdio_ptr_lval;;
12655         esac
12656         case "$stdio_cnt" in
12657         '') stdio_cnt='((fp)->_cnt)'
12658                 cnt_lval=$define
12659                 ;;
12660         *)      cnt_lval=$d_stdio_cnt_lval;;
12661         esac
12662         case "$stdio_base" in
12663         '') stdio_base='((fp)->_base)';;
12664         esac
12665         case "$stdio_bufsiz" in
12666         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12667         esac
12668 fi
12669
12670 : test whether _ptr and _cnt really work
12671 echo "Checking how std your stdio is..." >&4
12672 $cat >try.c <<EOP
12673 #include <stdio.h>
12674 #define FILE_ptr(fp)    $stdio_ptr
12675 #define FILE_cnt(fp)    $stdio_cnt
12676 int main() {
12677         FILE *fp = fopen("try.c", "r");
12678         char c = getc(fp);
12679         if (
12680                 18 <= FILE_cnt(fp) &&
12681                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12682         )
12683                 exit(0);
12684         exit(1);
12685 }
12686 EOP
12687 val="$undef"
12688 set try
12689 if eval $compile && $to try.c; then
12690         if $run ./try; then
12691                 echo "Your stdio acts pretty std."
12692                 val="$define"
12693         else
12694                 echo "Your stdio isn't very std."
12695         fi
12696 else
12697         echo "Your stdio doesn't appear very std."
12698 fi
12699 $rm -f try.c try
12700 set d_stdstdio
12701 eval $setvar
12702
12703 : Can _ptr be used as an lvalue?
12704 case "$d_stdstdio$ptr_lval" in
12705 $define$define) val=$define ;;
12706 *) val=$undef ;;
12707 esac
12708 set d_stdio_ptr_lval
12709 eval $setvar
12710
12711 : Can _cnt be used as an lvalue?
12712 case "$d_stdstdio$cnt_lval" in
12713 $define$define) val=$define ;;
12714 *) val=$undef ;;
12715 esac
12716 set d_stdio_cnt_lval
12717 eval $setvar
12718
12719
12720 : test whether setting _ptr sets _cnt as a side effect
12721 d_stdio_ptr_lval_sets_cnt="$undef"
12722 d_stdio_ptr_lval_nochange_cnt="$undef"
12723 case "$d_stdio_ptr_lval$d_stdstdio" in
12724 $define$define)
12725         echo "Checking to see what happens if we set the stdio ptr..." >&4
12726 $cat >try.c <<EOP
12727 #include <stdio.h>
12728 /* Can we scream? */
12729 /* Eat dust sed :-) */
12730 /* In the buffer space, no one can hear you scream. */
12731 #define FILE_ptr(fp)    $stdio_ptr
12732 #define FILE_cnt(fp)    $stdio_cnt
12733 #include <sys/types.h>
12734 int main() {
12735         FILE *fp = fopen("try.c", "r");
12736         int c;
12737         char *ptr;
12738         size_t cnt;
12739         if (!fp) {
12740             puts("Fail even to read");
12741             exit(1);
12742         }
12743         c = getc(fp); /* Read away the first # */
12744         if (c == EOF) {
12745             puts("Fail even to read");
12746             exit(1);
12747         }
12748         if (!(
12749                 18 <= FILE_cnt(fp) &&
12750                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12751         )) {
12752                 puts("Fail even to read");
12753                 exit (1);
12754         }
12755         ptr = (char*) FILE_ptr(fp);
12756         cnt = (size_t)FILE_cnt(fp);
12757
12758         FILE_ptr(fp) += 42;
12759
12760         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12761                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12762                 exit (1);
12763         }
12764         if (FILE_cnt(fp) <= 20) {
12765                 printf ("Fail (<20 chars to test)");
12766                 exit (1);
12767         }
12768         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12769                 puts("Fail compare");
12770                 exit (1);
12771         }
12772         if (cnt == FILE_cnt(fp)) {
12773                 puts("Pass_unchanged");
12774                 exit (0);
12775         }       
12776         if (FILE_cnt(fp) == (cnt - 42)) {
12777                 puts("Pass_changed");
12778                 exit (0);
12779         }
12780         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12781         return 1;
12782
12783 }
12784 EOP
12785         set try
12786         if eval $compile && $to try.c; then
12787                 case `$run ./try` in
12788                 Pass_changed)
12789                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12790                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12791                 Pass_unchanged)
12792                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12793                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12794                 Fail*)
12795                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12796                 *)
12797                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12798         esac
12799         else
12800                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12801         fi
12802         $rm -f try.c try
12803         ;;
12804 esac
12805
12806 : see if _base is also standard
12807 val="$undef"
12808 case "$d_stdstdio" in
12809 $define)
12810         $cat >try.c <<EOP
12811 #include <stdio.h>
12812 #define FILE_base(fp)   $stdio_base
12813 #define FILE_bufsiz(fp) $stdio_bufsiz
12814 int main() {
12815         FILE *fp = fopen("try.c", "r");
12816         char c = getc(fp);
12817         if (
12818                 19 <= FILE_bufsiz(fp) &&
12819                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12820         )
12821                 exit(0);
12822         exit(1);
12823 }
12824 EOP
12825         set try
12826         if eval $compile && $to try.c; then
12827                 if $run ./try; then
12828                         echo "And its _base field acts std."
12829                         val="$define"
12830                 else
12831                         echo "But its _base field isn't std."
12832                 fi
12833         else
12834                 echo "However, it seems to be lacking the _base field."
12835         fi
12836         $rm -f try.c try
12837         ;;
12838 esac
12839 set d_stdiobase
12840 eval $setvar
12841
12842 $cat >&4 <<EOM
12843 Checking how to access stdio streams by file descriptor number...
12844 EOM
12845 case "$stdio_stream_array" in
12846 '')     $cat >try.c <<EOCP
12847 #include <stdio.h>
12848 int main() {
12849   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12850     printf("yes\n");
12851 }
12852 EOCP
12853         for s in _iob __iob __sF
12854         do
12855                 set try -DSTDIO_STREAM_ARRAY=$s
12856                 if eval $compile; then
12857                         case "`$run ./try`" in
12858                         yes)    stdio_stream_array=$s; break ;;
12859                         esac
12860                 fi
12861         done
12862         $rm -f try.* try$exe_ext
12863 esac
12864 case "$stdio_stream_array" in
12865 '')     $cat >&4 <<EOM
12866 I can't figure out how to access stdio streams by file descriptor number.
12867 EOM
12868         d_stdio_stream_array="$undef"
12869         ;;
12870 *)      $cat >&4 <<EOM
12871 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12872 EOM
12873         d_stdio_stream_array="$define"
12874         ;;
12875 esac
12876
12877 : see if strcoll exists
12878 set strcoll d_strcoll
12879 eval $inlibc
12880
12881 : check for structure copying
12882 echo " "
12883 echo "Checking to see if your C compiler can copy structs..." >&4
12884 $cat >try.c <<'EOCP'
12885 int main()
12886 {
12887         struct blurfl {
12888                 int dyick;
12889         } foo, bar;
12890
12891         foo = bar;
12892 }
12893 EOCP
12894 if $cc -c try.c >/dev/null 2>&1 ; then
12895         val="$define"
12896         echo "Yup, it can."
12897 else
12898         val="$undef"
12899         echo "Nope, it can't."
12900 fi
12901 set d_strctcpy
12902 eval $setvar
12903 $rm -f try.*
12904
12905 : see if strerror and/or sys_errlist[] exist
12906 echo " "
12907 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12908     if set strerror val -f d_strerror; eval $csym; $val; then
12909                 echo 'strerror() found.' >&4
12910                 d_strerror="$define"
12911                 d_strerrm='strerror(e)'
12912                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12913                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12914                         d_syserrlst="$define"
12915                 else
12916                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12917                         d_syserrlst="$undef"
12918                 fi
12919     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12920                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12921                 echo 'strerror() found in string header.' >&4
12922                 d_strerror="$define"
12923                 d_strerrm='strerror(e)'
12924                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12925                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12926                                 d_syserrlst="$define"
12927                 else
12928                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12929                         d_syserrlst="$undef"
12930                 fi
12931     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12932                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12933                 d_strerror="$undef"
12934                 d_syserrlst="$define"
12935                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12936     else
12937                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12938                 d_strerror="$undef"
12939                 d_syserrlst="$undef"
12940                 d_strerrm='"unknown"'
12941     fi
12942 fi
12943
12944 : see if strftime exists
12945 set strftime d_strftime
12946 eval $inlibc
12947
12948 : see if strtod exists
12949 set strtod d_strtod
12950 eval $inlibc
12951
12952 : see if strtol exists
12953 set strtol d_strtol
12954 eval $inlibc
12955
12956 : see if strtold exists
12957 set strtold d_strtold
12958 eval $inlibc
12959
12960 : see if strtoll exists
12961 set strtoll d_strtoll
12962 eval $inlibc
12963
12964 case "$d_longlong-$d_strtoll" in
12965 "$define-$define")
12966         $cat <<EOM
12967 Checking whether your strtoll() works okay...
12968 EOM
12969         $cat >try.c <<'EOCP'
12970 #include <errno.h>
12971 #ifdef __hpux
12972 #define strtoll __strtoll
12973 #endif
12974 #ifdef __EMX__
12975 #define strtoll _strtoll
12976 #endif
12977 #include <stdio.h>
12978 extern long long int strtoll(char *s, char **, int); 
12979 static int bad = 0;
12980 int check(char *s, long long ell, int een) {
12981         long long gll;
12982         errno = 0;
12983         gll = strtoll(s, 0, 10);
12984         if (!((gll == ell) && (errno == een)))
12985                 bad++;
12986 }
12987 int main() {
12988         check(" 1",                                      1LL, 0);
12989         check(" 0",                                      0LL, 0);
12990         check("-1",                                     -1LL, 0);
12991         check("-9223372036854775808", -9223372036854775808LL, 0);
12992         check("-9223372036854775808", -9223372036854775808LL, 0);
12993         check(" 9223372036854775807",  9223372036854775807LL, 0);
12994         check("-9223372036854775808", -9223372036854775808LL, 0);
12995         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12996         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12997         if (!bad)
12998                 printf("ok\n");
12999 }
13000 EOCP
13001         set try
13002         if eval $compile; then
13003                 yyy=`$run ./try`
13004                 case "$yyy" in
13005                 ok) echo "Your strtoll() seems to be working okay." ;;
13006                 *) cat <<EOM >&4
13007 Your strtoll() doesn't seem to be working okay.
13008 EOM
13009                    d_strtoll="$undef"
13010                    ;;
13011                 esac
13012         else
13013                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13014                 d_strtoll="$undef"
13015         fi
13016         ;;
13017 esac
13018
13019 : see if strtoq exists
13020 set strtoq d_strtoq
13021 eval $inlibc
13022
13023 : see if strtoul exists
13024 set strtoul d_strtoul
13025 eval $inlibc
13026
13027 case "$d_strtoul" in
13028 "$define")
13029         $cat <<EOM
13030 Checking whether your strtoul() works okay...
13031 EOM
13032         $cat >try.c <<'EOCP'
13033 #include <errno.h>
13034 #include <stdio.h>
13035 extern unsigned long int strtoul(char *s, char **, int); 
13036 static int bad = 0;
13037 void check(char *s, unsigned long eul, int een) {
13038         unsigned long gul;
13039         errno = 0;
13040         gul = strtoul(s, 0, 10);
13041         if (!((gul == eul) && (errno == een)))
13042                 bad++;
13043 }
13044 int main() {
13045         check(" 1", 1L, 0);
13046         check(" 0", 0L, 0);
13047 EOCP
13048         case "$longsize" in
13049         8)
13050             $cat >>try.c <<'EOCP'
13051         check("18446744073709551615", 18446744073709551615UL, 0);
13052         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13053 #if 0 /* strtoul() for /^-/ strings is undefined. */
13054         check("-1", 18446744073709551615UL, 0);
13055         check("-18446744073709551614", 2, 0);
13056         check("-18446744073709551615", 1, 0);
13057         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13058         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13059 #endif
13060 EOCP
13061                 ;;
13062         4)
13063                     $cat >>try.c <<'EOCP'
13064         check("4294967295", 4294967295UL, 0);
13065         check("4294967296", 4294967295UL, ERANGE);
13066 #if 0 /* strtoul() for /^-/ strings is undefined. */
13067         check("-1", 4294967295UL, 0);
13068         check("-4294967294", 2, 0);
13069         check("-4294967295", 1, 0);
13070         check("-4294967296", 4294967295UL, ERANGE);
13071         check("-4294967297", 4294967295UL, ERANGE);
13072 #endif
13073 EOCP
13074                 ;;
13075         *)
13076 : Should we write these tests to be more portable by sprintf-ing
13077 : ~0 and then manipulating that char string as input for strtol?
13078                 ;;
13079         esac
13080         $cat >>try.c <<'EOCP'
13081         if (!bad)
13082                 printf("ok\n");
13083         return 0;
13084 }
13085 EOCP
13086         set try
13087         if eval $compile; then
13088                 case "`$run ./try`" in
13089                 ok) echo "Your strtoul() seems to be working okay." ;;
13090                 *) cat <<EOM >&4
13091 Your strtoul() doesn't seem to be working okay.
13092 EOM
13093                    d_strtoul="$undef"
13094                    ;;
13095                 esac
13096         fi
13097         ;;
13098 esac
13099
13100 : see if strtoull exists
13101 set strtoull d_strtoull
13102 eval $inlibc
13103
13104 case "$d_longlong-$d_strtoull" in
13105 "$define-$define")
13106         $cat <<EOM
13107 Checking whether your strtoull() works okay...
13108 EOM
13109         $cat >try.c <<'EOCP'
13110 #include <errno.h>
13111 #ifdef __hpux
13112 #define strtoull __strtoull
13113 #endif
13114 #include <stdio.h>
13115 extern unsigned long long int strtoull(char *s, char **, int); 
13116 static int bad = 0;
13117 int check(char *s, long long eull, int een) {
13118         long long gull;
13119         errno = 0;
13120         gull = strtoull(s, 0, 10);
13121         if (!((gull == eull) && (errno == een)))
13122                 bad++;
13123 }
13124 int main() {
13125         check(" 1",                                        1LL, 0);
13126         check(" 0",                                        0LL, 0);
13127         check("18446744073709551615",  18446744073709551615ULL, 0);
13128         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13129 #if 0 /* strtoull() for /^-/ strings is undefined. */
13130         check("-1",                    18446744073709551615ULL, 0);
13131         check("-18446744073709551614",                     2LL, 0);
13132         check("-18446744073709551615",                     1LL, 0);
13133         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13134         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13135 #endif
13136         if (!bad)
13137                 printf("ok\n");
13138 }
13139 EOCP
13140         set try
13141         if eval $compile; then
13142                 case "`$run ./try`" in
13143                 ok) echo "Your strtoull() seems to be working okay." ;;
13144                 *) cat <<EOM >&4
13145 Your strtoull() doesn't seem to be working okay.
13146 EOM
13147                    d_strtoull="$undef"
13148                    ;;
13149                 esac
13150         fi
13151         ;;
13152 esac
13153
13154 : see if strtouq exists
13155 set strtouq d_strtouq
13156 eval $inlibc
13157
13158 case "$d_strtouq" in
13159 "$define")
13160         $cat <<EOM
13161 Checking whether your strtouq() works okay...
13162 EOM
13163         $cat >try.c <<'EOCP'
13164 #include <errno.h>
13165 #include <stdio.h>
13166 extern unsigned long long int strtouq(char *s, char **, int); 
13167 static int bad = 0;
13168 void check(char *s, unsigned long long eull, int een) {
13169         unsigned long long gull;
13170         errno = 0;
13171         gull = strtouq(s, 0, 10);
13172         if (!((gull == eull) && (errno == een)))
13173                 bad++;
13174 }
13175 int main() {
13176         check(" 1",                                        1LL, 0);
13177         check(" 0",                                        0LL, 0);
13178         check("18446744073709551615",  18446744073709551615ULL, 0);
13179         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13180 #if 0 /* strtouq() for /^-/ strings is undefined. */
13181         check("-1",                    18446744073709551615ULL, 0);
13182         check("-18446744073709551614",                     2LL, 0);
13183         check("-18446744073709551615",                     1LL, 0);
13184         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13185         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13186 #endif
13187         if (!bad)
13188                 printf("ok\n");
13189         return 0;
13190 }
13191 EOCP
13192         set try
13193         if eval $compile; then
13194                 case "`$run ./try`" in
13195                 ok) echo "Your strtouq() seems to be working okay." ;;
13196                 *) cat <<EOM >&4
13197 Your strtouq() doesn't seem to be working okay.
13198 EOM
13199                    d_strtouq="$undef"
13200                    ;;
13201                 esac
13202         fi
13203         ;;
13204 esac
13205
13206 : see if strxfrm exists
13207 set strxfrm d_strxfrm
13208 eval $inlibc
13209
13210 : see if symlink exists
13211 set symlink d_symlink
13212 eval $inlibc
13213
13214 : see if syscall exists
13215 set syscall d_syscall
13216 eval $inlibc
13217
13218 : see if prototype for syscall is available
13219 echo " "
13220 set d_syscallproto syscall $i_unistd unistd.h
13221 eval $hasproto
13222
13223 : see if sysconf exists
13224 set sysconf d_sysconf
13225 eval $inlibc
13226
13227 : see if system exists
13228 set system d_system
13229 eval $inlibc
13230
13231 : see if tcgetpgrp exists
13232 set tcgetpgrp d_tcgetpgrp
13233 eval $inlibc
13234
13235 : see if tcsetpgrp exists
13236 set tcsetpgrp d_tcsetpgrp
13237 eval $inlibc
13238
13239 : see if prototype for telldir is available
13240 echo " "
13241 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13242 eval $hasproto
13243
13244 : see if this is a sys/times.h system
13245 set sys/times.h i_systimes
13246 eval $inhdr
13247
13248 : see if times exists
13249 echo " "
13250 if set times val -f d_times; eval $csym; $val; then
13251         echo 'times() found.' >&4
13252         d_times="$define"
13253         inc=''
13254         case "$i_systimes" in
13255         "$define") inc='sys/times.h';;
13256         esac
13257         rp="What is the type returned by times() on this system?"
13258         set clock_t clocktype long stdio.h sys/types.h $inc
13259         eval $typedef_ask
13260 else
13261         echo 'times() NOT found, hope that will do.' >&4
13262         d_times="$undef"
13263         clocktype='int'
13264 fi
13265
13266 : see if truncate exists
13267 set truncate d_truncate
13268 eval $inlibc
13269
13270 : see if tzname[] exists
13271 echo " "
13272 if set tzname val -a d_tzname; eval $csym; $val; then
13273         val="$define"
13274         echo 'tzname[] found.' >&4
13275 else
13276         val="$undef"
13277         echo 'tzname[] NOT found.' >&4
13278 fi
13279 set d_tzname
13280 eval $setvar
13281
13282 case "$osname" in
13283 next|rhapsody|darwin) multiarch="$define" ;;
13284 esac
13285 case "$multiarch" in
13286 ''|[nN]*) multiarch="$undef" ;;
13287 esac
13288
13289 : check for ordering of bytes in a long
13290 echo " "
13291 case "$usecrosscompile$multiarch" in
13292 *$define*)
13293         $cat <<EOM
13294 You seem to be either cross-compiling or doing a multiarchitecture build,
13295 skipping the byteorder check.
13296
13297 EOM
13298         byteorder='ffff'
13299         ;;
13300 *)
13301         case "$byteorder" in
13302         '')
13303                 $cat <<'EOM'
13304 In the following, larger digits indicate more significance.  A big-endian
13305 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13306 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13307 machines may have weird orders like 3412.  A Cray will report 87654321,
13308 an Alpha will report 12345678. If the test program works the default is
13309 probably right.
13310 I'm now running the test program...
13311 EOM
13312                 $cat >try.c <<'EOCP'
13313 #include <stdio.h>
13314 int main()
13315 {
13316         int i;
13317         union {
13318                 unsigned long l;
13319                 char c[sizeof(long)];
13320         } u;
13321
13322         if (sizeof(long) > 4)
13323                 u.l = (0x08070605L << 32) | 0x04030201L;
13324         else
13325                 u.l = 0x04030201L;
13326         for (i = 0; i < sizeof(long); i++)
13327                 printf("%c", u.c[i]+'0');
13328         printf("\n");
13329         exit(0);
13330 }
13331 EOCP
13332                 xxx_prompt=y
13333                 set try
13334                 if eval $compile && ./try > /dev/null; then
13335                         dflt=`$run ./try`
13336                         case "$dflt" in
13337                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13338                                 echo "(The test program ran ok.)"
13339                                 echo "byteorder=$dflt"
13340                                 xxx_prompt=n
13341                         ;;
13342                         ????|????????) echo "(The test program ran ok.)" ;;
13343                         *) echo "(The test program didn't run right for some reason.)" ;;
13344                         esac
13345                 else
13346                         dflt='4321'
13347                         cat <<'EOM'
13348 (I can't seem to compile the test program.  Guessing big-endian...)
13349 EOM
13350                 fi
13351                 case "$xxx_prompt" in
13352                 y)
13353                         rp="What is the order of bytes in a long?"
13354                         . ./myread
13355                         byteorder="$ans"
13356                         ;;
13357                 *)      byteorder=$dflt
13358                         ;;
13359                 esac
13360                 ;;
13361         esac
13362         $rm -f try.c try
13363         ;;
13364 esac
13365
13366
13367 $cat <<EOM
13368
13369 Checking to see whether you can access character data unalignedly...
13370 EOM
13371 $cat >try.c <<EOCP
13372 #include <stdio.h>
13373 #define U32 $u32type
13374 #define BYTEORDER $byteorder
13375 int main() {
13376 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13377     U8 buf[] = "\0\0\0\1\0\0\0\0";
13378     U32 *up;
13379     int i;
13380
13381     if (sizeof(U32) != 4) {
13382         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13383         exit(1);
13384     }
13385
13386     fflush(stdout);
13387
13388     for (i = 0; i < 4; i++) {
13389         up = (U32*)(buf + i);
13390         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13391                (*up == 1 << (8*(3-i)))  /* little-endian */
13392               )
13393            )
13394         {
13395             printf("read failed (%x)\n", *up);
13396             exit(2);
13397         }
13398     }
13399
13400     /* write test */
13401     for (i = 0; i < 4; i++) {
13402         up = (U32*)(buf + i);
13403         *up = 0xBeef;
13404         if (*up != 0xBeef) {
13405             printf("write failed (%x)\n", *up);
13406             exit(3);
13407         }
13408     }
13409
13410     exit(0);
13411 #else
13412     printf("1\n");
13413     exit(1);
13414 #endif
13415     return 0;
13416 }
13417 EOCP
13418 set try
13419 if eval $compile_ok; then
13420         echo "(Testing for character data alignment may dump core.)" >&4
13421         $run ./try 2>&1 >/dev/null
13422         case "$?" in
13423         0)      cat >&4 <<EOM
13424 You can access character data pretty unalignedly.
13425 EOM
13426                 d_u32align="$undef"
13427                 ;;
13428         *)      cat >&4 <<EOM
13429 It seems that you must access character data in an aligned manner.
13430 EOM
13431                 d_u32align="$define"
13432                 ;;
13433         esac
13434         $rm -f core core.try.* try.core
13435 else
13436         rp='Can you access character data at unaligned addresses?'
13437         dflt='n'
13438         . ./myread
13439         case "$ans" in
13440         [yY]*)  d_u32align="$undef"  ;;
13441         *)      d_u32align="$define" ;;
13442         esac
13443 fi
13444
13445 : see if ualarm exists
13446 set ualarm d_ualarm
13447 eval $inlibc
13448
13449 : see if umask exists
13450 set umask d_umask
13451 eval $inlibc
13452
13453 : see if unordered exists
13454 set unordered d_unordered
13455 eval $inlibc
13456
13457 : see if usleep exists
13458 set usleep d_usleep
13459 eval $inlibc
13460
13461 : see if prototype for usleep is available
13462 echo " "
13463 set d_usleepproto usleep $i_unistd unistd.h
13464 eval $hasproto
13465
13466 : see if ustat exists
13467 set ustat d_ustat
13468 eval $inlibc
13469
13470 : backward compatibility for d_hvfork
13471 if test X$d_hvfork != X; then
13472         d_vfork="$d_hvfork"
13473         d_hvfork=''
13474 fi
13475 : see if there is a vfork
13476 val=''
13477 set vfork val
13478 eval $inlibc
13479
13480 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13481 : perl on Solaris 2.x, and probably elsewhere.
13482 case "$val" in
13483 $define)
13484         echo " "
13485         case "$usevfork" in
13486         false) dflt='n';;
13487         *) dflt='y';;
13488         esac
13489         cat <<'EOM'
13490  
13491 Perl can only use a vfork() that doesn't suffer from strict
13492 restrictions on calling functions or modifying global data in
13493 the child.  For example, glibc-2.1 contains such a vfork()
13494 that is unsuitable.  If your system provides a proper fork()
13495 call, chances are that you do NOT want perl to use vfork().
13496
13497 EOM
13498         rp="Do you still want to use vfork()?"
13499         . ./myread
13500         case "$ans" in
13501         y|Y) ;;
13502         *)
13503                 echo "Ok, we won't use vfork()."
13504                 val="$undef"
13505                 ;;
13506         esac
13507         ;;
13508 esac
13509 set d_vfork
13510 eval $setvar
13511 case "$d_vfork" in
13512 $define) usevfork='true';;
13513 *) usevfork='false';;
13514 esac
13515
13516 : see if closedir exists
13517 set closedir d_closedir
13518 eval $inlibc
13519
13520 case "$d_closedir" in
13521 "$define")
13522         echo " "
13523         echo "Checking whether closedir() returns a status..." >&4
13524         cat > try.c <<EOM
13525 #$i_dirent I_DIRENT             /**/
13526 #$i_sysdir I_SYS_DIR            /**/
13527 #$i_sysndir I_SYS_NDIR          /**/
13528 #$i_systypes I_SYS_TYPES        /**/
13529
13530 #if defined(I_SYS_TYPES)
13531 #include <sys/types.h>
13532 #endif
13533 #if defined(I_DIRENT)
13534 #include <dirent.h>
13535 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13536 #include <sys/dir.h>
13537 #endif
13538 #else
13539 #ifdef I_SYS_NDIR
13540 #include <sys/ndir.h>
13541 #else
13542 #ifdef I_SYS_DIR
13543 #ifdef hp9000s500
13544 #include <ndir.h>       /* may be wrong in the future */
13545 #else
13546 #include <sys/dir.h>
13547 #endif
13548 #endif
13549 #endif
13550 #endif 
13551 int main() { return closedir(opendir(".")); }
13552 EOM
13553         set try
13554         if eval $compile_ok; then
13555                 if $run ./try > /dev/null 2>&1 ; then
13556                         echo "Yes, it does."
13557                         val="$undef"
13558                 else
13559                         echo "No, it doesn't."
13560                         val="$define"
13561                 fi
13562         else
13563                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13564                 val="$define"
13565         fi
13566         ;;
13567 *)
13568         val="$undef";
13569         ;;
13570 esac
13571 set d_void_closedir
13572 eval $setvar
13573 $rm -f try try.*
13574 : see if there is a wait4
13575 set wait4 d_wait4
13576 eval $inlibc
13577
13578 : see if waitpid exists
13579 set waitpid d_waitpid
13580 eval $inlibc
13581
13582 : see if wcstombs exists
13583 set wcstombs d_wcstombs
13584 eval $inlibc
13585
13586 : see if wctomb exists
13587 set wctomb d_wctomb
13588 eval $inlibc
13589
13590 : see if writev exists
13591 set writev d_writev
13592 eval $inlibc
13593
13594 : preserve RCS keywords in files with variable substitution, grrr
13595 Date='$Date'
13596 Id='$Id'
13597 Log='$Log'
13598 RCSfile='$RCSfile'
13599 Revision='$Revision'
13600
13601 : check for alignment requirements
13602 echo " "
13603 case "$usecrosscompile$multiarch" in
13604 *$define*)
13605         $cat <<EOM
13606 You seem to be either cross-compiling or doing a multiarchitecture build,
13607 skipping the memory alignment check.
13608
13609 EOM
13610         case "$alignbytes" in
13611         '') alignbytes=8 ;;
13612         esac
13613         ;;
13614 *)
13615         case "$alignbytes" in
13616         '') echo "Checking alignment constraints..." >&4
13617                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13618                         $cat >try.c <<'EOCP'
13619 typedef long double NV;
13620 EOCP
13621                 else
13622                         $cat >try.c <<'EOCP'
13623 typedef double NV;
13624 EOCP
13625                 fi
13626                 $cat >>try.c <<'EOCP'
13627 #include <stdio.h>
13628 struct foobar {
13629         char foo;
13630         NV bar;
13631 } try_algn;
13632 int main()
13633 {
13634     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13635     return(0);
13636 }
13637 EOCP
13638                 set try
13639                 if eval $compile_ok; then
13640                         dflt=`$run ./try`
13641                 else
13642                         dflt='8'
13643                         echo "(I can't seem to compile the test program...)"
13644                 fi
13645                 ;;
13646         *) dflt="$alignbytes"
13647                 ;;
13648         esac
13649         rp="Doubles must be aligned on a how-many-byte boundary?"
13650         . ./myread
13651         alignbytes="$ans"
13652         $rm -f try.c try
13653         ;;
13654 esac
13655
13656
13657 : set the base revision
13658 baserev=5.0
13659
13660 : how do we catenate cpp tokens here?
13661 echo " "
13662 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13663 $cat >cpp_stuff.c <<'EOCP'
13664 #define RCAT(a,b)a/**/b
13665 #define ACAT(a,b)a ## b
13666 RCAT(Rei,ser)
13667 ACAT(Cir,cus)
13668 EOCP
13669 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13670 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13671         echo "Oh!  Smells like ANSI's been here." >&4
13672         echo "We can catify or stringify, separately or together!"
13673         cpp_stuff=42
13674 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13675         echo "Ah, yes!  The good old days!" >&4
13676         echo "However, in the good old days we don't know how to stringify and"
13677         echo "catify at the same time."
13678         cpp_stuff=1
13679 else
13680         $cat >&4 <<EOM
13681 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13682 to have to edit the values of CAT[2-5] in config.h...
13683 EOM
13684         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13685 fi
13686 $rm -f cpp_stuff.*
13687
13688 : see if this is a db.h system
13689 set db.h i_db
13690 eval $inhdr
13691
13692 case "$i_db" in
13693 $define)
13694         : Check db version.
13695         echo " "
13696         echo "Checking Berkeley DB version ..." >&4
13697         $cat >try.c <<EOCP
13698 #$d_const HASCONST
13699 #ifndef HASCONST
13700 #define const
13701 #endif
13702 #include <sys/types.h>
13703 #include <stdio.h>
13704 #include <db.h>
13705 int main(int argc, char *argv[])
13706 {
13707 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13708     int Major, Minor, Patch ;
13709     unsigned long Version ;
13710     (void)db_version(&Major, &Minor, &Patch) ;
13711     if (argc == 2) {
13712         printf("%d %d %d %d %d %d\n",
13713                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13714                Major, Minor, Patch);
13715         exit(0);
13716     }
13717     printf("You have Berkeley DB Version 2 or greater.\n");
13718
13719     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13720                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13721     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13722                 Major, Minor, Patch) ;
13723
13724     /* check that db.h & libdb are compatible */
13725     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13726         printf("db.h and libdb are incompatible.\n") ;
13727         exit(3);        
13728     }
13729
13730     printf("db.h and libdb are compatible.\n") ;
13731
13732     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13733                 + DB_VERSION_PATCH ;
13734
13735     /* needs to be >= 2.3.4 */
13736     if (Version < 2003004) {
13737     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13738         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13739         exit(2);        
13740     }
13741
13742     exit(0);
13743 #else
13744 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13745     if (argc == 2) {
13746         printf("1 0 0\n");
13747         exit(0);
13748     }
13749     printf("You have Berkeley DB Version 1.\n");
13750     exit(0);    /* DB version < 2: the coast is clear. */
13751 #else
13752     exit(1);    /* <db.h> not Berkeley DB? */
13753 #endif
13754 #endif
13755 }
13756 EOCP
13757         set try
13758         if eval $compile_ok && $run ./try; then
13759                 echo 'Looks OK.' >&4
13760                 set `$run ./try 1`
13761                 db_version_major=$1
13762                 db_version_minor=$2
13763                 db_version_patch=$3
13764         else
13765                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13766                 i_db=$undef
13767                 case " $libs " in
13768                 *"-ldb "*)
13769                         : Remove db from list of libraries to use
13770                         echo "Removing unusable -ldb from library list" >&4
13771                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13772                         shift
13773                         libs="$*"
13774                         echo "libs = $libs" >&4
13775                         ;;
13776                 esac
13777         fi
13778         $rm -f try.*
13779         ;;
13780 esac
13781
13782 case "$i_db" in
13783 define)
13784         : Check the return type needed for hash 
13785         echo " "
13786         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13787         $cat >try.c <<EOCP
13788 #$d_const HASCONST
13789 #ifndef HASCONST
13790 #define const
13791 #endif
13792 #include <sys/types.h>
13793 #include <db.h>
13794
13795 #ifndef DB_VERSION_MAJOR
13796 u_int32_t hash_cb (ptr, size)
13797 const void *ptr;
13798 size_t size;
13799 {
13800 }
13801 HASHINFO info;
13802 int main()
13803 {
13804         info.hash = hash_cb;
13805 }
13806 #endif
13807 EOCP
13808         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13809                 if $contains warning try.out >>/dev/null 2>&1 ; then
13810                         db_hashtype='int'
13811                 else
13812                         db_hashtype='u_int32_t'
13813                 fi
13814         else
13815                 : XXX Maybe we should just give up here.
13816                 db_hashtype=u_int32_t
13817                 $cat try.out >&4
13818                 echo "Help:  I can't seem to compile the db test program." >&4
13819                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13820         fi
13821         $rm -f try.*
13822         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13823         ;;
13824 *)      db_hashtype=u_int32_t
13825         ;;
13826 esac
13827 case "$i_db" in
13828 define)
13829         : Check the return type needed for prefix 
13830         echo " "
13831         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13832         cat >try.c <<EOCP
13833 #$d_const HASCONST
13834 #ifndef HASCONST
13835 #define const
13836 #endif
13837 #include <sys/types.h>
13838 #include <db.h>
13839
13840 #ifndef DB_VERSION_MAJOR
13841 size_t prefix_cb (key1, key2)
13842 const DBT *key1;
13843 const DBT *key2;
13844 {
13845 }
13846 BTREEINFO info;
13847 int main()
13848 {
13849         info.prefix = prefix_cb;
13850 }
13851 #endif
13852 EOCP
13853         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13854                 if $contains warning try.out >>/dev/null 2>&1 ; then
13855                         db_prefixtype='int'
13856                 else
13857                         db_prefixtype='size_t'
13858                 fi
13859         else
13860                 db_prefixtype='size_t'
13861                 : XXX Maybe we should just give up here.
13862                 $cat try.out >&4
13863                 echo "Help:  I can't seem to compile the db test program." >&4
13864                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13865         fi
13866         $rm -f try.*
13867         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13868         ;;
13869 *)      db_prefixtype='size_t'
13870         ;;
13871 esac
13872
13873
13874 : How can we generate normalized random numbers ?
13875 echo " "
13876 echo "Looking for a random number function..." >&4
13877 case "$randfunc" in
13878 '')
13879         if set drand48 val -f; eval $csym; $val; then
13880                 dflt="drand48"
13881                 echo "Good, found drand48()." >&4
13882         elif set random val -f; eval $csym; $val; then
13883                 dflt="random"
13884                 echo "OK, found random()." >&4
13885         else
13886                 dflt="rand"
13887                 echo "Yick, looks like I have to use rand()." >&4
13888         fi
13889         echo " "
13890         ;;
13891 *)
13892         dflt="$randfunc"
13893         ;;
13894 esac
13895 cont=true
13896
13897 case "$ccflags" in
13898 *-Dmy_rand=*|*-Dmy_srand=*)
13899         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13900         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13901         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13902         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13903         ;;
13904 esac
13905
13906 while $test "$cont"; do
13907         rp="Use which function to generate random numbers?"
13908         . ./myread
13909         if $test "$ans" = "$dflt"; then
13910                 : null
13911         else
13912                 randbits=''
13913         fi
13914         randfunc="$ans"
13915         if set $ans val -f; eval $csym; $val; then
13916                 cont=''
13917         else
13918                 dflt=y
13919                 rp="I cannot find function $ans. Use that name anyway?"
13920                 . ./myread
13921                 dflt=rand
13922                 case "$ans" in
13923                         [yY]*) cont='';;
13924                 esac
13925         fi
13926         case "$cont" in
13927         '')
13928                 case "$randfunc" in
13929                 drand48)
13930                         drand01="drand48()"
13931                         seedfunc="srand48"
13932                         randbits=48
13933                         randseedtype=long
13934                         ;;
13935                 rand|random)
13936                         case "$randbits" in
13937                         '')
13938 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13939                                 $cat >try.c <<EOCP
13940 #$i_unistd I_UNISTD
13941 #$i_stdlib I_STDLIB
13942 #include <stdio.h>
13943 #ifdef I_UNISTD
13944 #  include <unistd.h>
13945 #endif
13946 #ifdef I_STDLIB
13947 #  include <stdlib.h>
13948 #endif
13949 int main()
13950 {
13951         register int i;
13952         register unsigned long tmp;
13953         register unsigned long max = 0L;
13954
13955         for (i = 1000; i; i--) {
13956                 tmp = (unsigned long) $randfunc();
13957                 if (tmp > max) max = tmp;
13958         }
13959         for (i = 0; max; i++)
13960                 max /= 2;
13961         printf("%d\n",i);
13962 }
13963 EOCP
13964                                 set try
13965                                 if eval $compile_ok; then
13966                                         dflt=`try`
13967                                 else
13968                                         dflt='?'
13969                                         echo "(I can't seem to compile the test program...)"
13970                                 fi
13971                                 ;;
13972                         *)
13973                                 dflt="$randbits"
13974                                 ;;
13975                         esac
13976                         rp="How many bits does your $randfunc() function produce?"
13977                         . ./myread
13978                         randbits="$ans"
13979                         $rm -f try.c try
13980                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13981                         seedfunc="s$randfunc"
13982                         randseedtype=unsigned
13983                         ;;
13984                 *)
13985                         dflt="31"
13986                         rp="How many bits does your $randfunc() function produce?"
13987                         . ./myread
13988                         randbits="$ans"
13989                         seedfunc="s$randfunc"
13990                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13991                         if set $seedfunc val -f; eval $csym; $val; then
13992                                 echo "(Using $seedfunc() to seed random generator)"
13993                         else
13994                                 echo "(Warning: no $seedfunc() to seed random generator)"
13995                                 seedfunc=rand
13996                         fi
13997                         randseedtype=unsigned
13998                         ;;
13999                 esac
14000                 ;;
14001         esac
14002 done
14003
14004 echo " "
14005 echo "Determining whether or not we are on an EBCDIC system..." >&4
14006 $cat >try.c <<'EOM'
14007 int main()
14008 {
14009   if ('M'==0xd4) return 0;
14010   return 1;
14011 }
14012 EOM
14013
14014 val=$undef
14015 set try
14016 if eval $compile_ok; then
14017         if $run ./try; then
14018                 echo "You seem to speak EBCDIC." >&4
14019                 val="$define"
14020         else
14021                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14022         fi
14023 else
14024         echo "I'm unable to compile the test program." >&4
14025         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14026 fi
14027 $rm -f try try.*
14028 set ebcdic
14029 eval $setvar
14030
14031 echo " "
14032 $cat >&4 <<EOM
14033 Checking how to flush all pending stdio output...
14034 EOM
14035 # I only know how to find the first 32 possibly open files on SunOS.
14036 # See also hints/sunos_4_1.sh and util.c  --AD
14037 case "$osname" in
14038 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14039 esac
14040 $cat >>try.c <<EOCP
14041 #include <stdio.h>
14042 #$i_unistd I_UNISTD
14043 #ifdef I_UNISTD
14044 # include <unistd.h>
14045 #endif
14046 #$d_sysconf HAS_SYSCONF
14047 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14048 #ifdef HAS_STDIO_STREAM_ARRAY
14049 # define STDIO_STREAM_ARRAY $stdio_stream_array
14050 #endif
14051 int main() {
14052   FILE* p;
14053   unlink("try.out");
14054   p = fopen("try.out", "w");
14055 #ifdef TRY_FPUTC
14056   fputc('x', p);
14057 #else
14058 # ifdef TRY_FPRINTF
14059   fprintf(p, "x");
14060 # endif
14061 #endif
14062 #ifdef TRY_FFLUSH_NULL
14063   fflush(NULL);
14064 #endif
14065 #ifdef TRY_FFLUSH_ALL
14066   {
14067     long open_max = -1;
14068 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14069     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14070 # else
14071 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14072     open_max = sysconf(_SC_OPEN_MAX);
14073 #  else
14074 #   ifdef FOPEN_MAX
14075     open_max = FOPEN_MAX;
14076 #   else
14077 #    ifdef OPEN_MAX
14078     open_max = OPEN_MAX;
14079 #    else
14080 #     ifdef _NFILE
14081     open_max = _NFILE;
14082 #     endif
14083 #    endif
14084 #   endif
14085 #  endif
14086 # endif 
14087 # ifdef HAS_STDIO_STREAM_ARRAY
14088     if (open_max > 0) {
14089       long i;
14090       for (i = 0; i < open_max; i++)
14091             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14092                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14093                 STDIO_STREAM_ARRAY[i]._flag)
14094                 fflush(&STDIO_STREAM_ARRAY[i]);
14095     }   
14096   }
14097 # endif
14098 #endif
14099   _exit(42);
14100 }
14101 EOCP
14102 : first we have to find out how _not_ to flush
14103 $to try.c
14104 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14105     output=''
14106     set try -DTRY_FPUTC
14107     if eval $compile; then
14108             $run ./try 2>/dev/null
14109             code="$?"
14110             $from try.out
14111             if $test ! -s try.out -a "X$code" = X42; then
14112                 output=-DTRY_FPUTC
14113             fi
14114     fi
14115     case "$output" in
14116     '')
14117             set try -DTRY_FPRINTF
14118             if eval $compile; then
14119                     $run ./try 2>/dev/null
14120                     code="$?"
14121                     $from try.out
14122                     if $test ! -s try.out -a "X$code" = X42; then
14123                         output=-DTRY_FPRINTF
14124                     fi
14125             fi
14126         ;;
14127     esac
14128 fi
14129 : check for fflush NULL behaviour
14130 case "$fflushNULL" in
14131 '')     set try -DTRY_FFLUSH_NULL $output
14132         if eval $compile; then
14133                 $run ./try 2>/dev/null
14134                 code="$?"
14135                 $from try.out
14136                 if $test -s try.out -a "X$code" = X42; then
14137                         fflushNULL="`$cat try.out`"
14138                 else
14139                         if $test "X$code" != X42; then
14140                                 $cat >&4 <<EOM
14141 (If this test failed, don't worry, we'll try another method shortly.)
14142 EOM
14143                         fi
14144                 fi
14145         fi
14146         $rm -f core try.core core.try.*
14147         case "$fflushNULL" in
14148         x)      $cat >&4 <<EOM
14149 Your fflush(NULL) works okay for output streams.
14150 Let's see if it clobbers input pipes...
14151 EOM
14152 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14153 # bug that improperly flushes the input end of pipes.  So we avoid the
14154 # autoflush on fork/system/exec support for now. :-(
14155 $cat >tryp.c <<EOCP
14156 #include <stdio.h>
14157 int
14158 main(int argc, char **argv)
14159 {
14160     char buf[1024];
14161     int i;
14162     char *bp = buf;
14163     while (1) {
14164         while ((i = getc(stdin)) != -1
14165                && (*bp++ = i) != '\n'
14166                && bp < &buf[1024])
14167         /* DO NOTHING */ ;
14168         *bp = '\0';
14169         fprintf(stdout, "%s", buf);
14170         fflush(NULL);
14171         if (i == -1)
14172             return 0;
14173         bp = buf;
14174     }
14175 }
14176 EOCP
14177                 fflushNULL="$define"
14178                 set tryp
14179                 if eval $compile; then
14180                     $rm -f tryp.out
14181                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14182                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14183                        $cat >&4 <<EOM
14184 fflush(NULL) seems to behave okay with input streams.
14185 EOM
14186                         fflushNULL="$define"
14187                     else
14188                         $cat >&4 <<EOM
14189 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14190 EOM
14191                         fflushNULL="$undef"
14192                     fi
14193                 fi
14194                 $rm -f core tryp.c tryp.core core.tryp.*
14195                 ;;
14196         '')     $cat >&4 <<EOM
14197 Your fflush(NULL) isn't working (contrary to ANSI C).
14198 EOM
14199                 fflushNULL="$undef"
14200                 ;;
14201         *)      $cat >&4 <<EOM
14202 Cannot figure out whether your fflush(NULL) works or not.
14203 I'm assuming it doesn't (contrary to ANSI C).
14204 EOM
14205                 fflushNULL="$undef"
14206                 ;;
14207         esac
14208         ;;
14209 $define|true|[yY]*)
14210         fflushNULL="$define"
14211         ;;
14212 *)
14213         fflushNULL="$undef"
14214         ;;
14215 esac
14216 : check explicit looping only if NULL did not work, and if the pipe
14217 : bug does not show up on an explicit flush too
14218 case "$fflushNULL" in
14219 "$undef")
14220         $cat >tryp.c <<EOCP
14221 #include <stdio.h>
14222 int
14223 main(int argc, char **argv)
14224 {
14225     char buf[1024];
14226     int i;
14227     char *bp = buf;
14228     while (1) {
14229         while ((i = getc(stdin)) != -1
14230                && (*bp++ = i) != '\n'
14231                && bp < &buf[1024])
14232         /* DO NOTHING */ ;
14233         *bp = '\0';
14234         fprintf(stdout, "%s", buf);
14235         fflush(stdin);
14236         if (i == -1)
14237             return 0;
14238         bp = buf;
14239     }
14240 }
14241 EOCP
14242         set tryp
14243         if eval $compile; then
14244             $rm -f tryp.out
14245             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14246             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14247                $cat >&4 <<EOM
14248 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14249 EOM
14250                 : now check for fflushall behaviour
14251                 case "$fflushall" in
14252                 '')     set try -DTRY_FFLUSH_ALL $output
14253                         if eval $compile; then
14254                                 $cat >&4 <<EOM
14255 (Now testing the other method--but note that this also may fail.)
14256 EOM
14257                                 $run ./try 2>/dev/null
14258                                 code=$?
14259                                 $from try.out
14260                                 if $test -s try.out -a "X$code" = X42; then
14261                                         fflushall="`$cat try.out`"
14262                                 fi
14263                         fi
14264                         $rm -f core try.core core.try.*
14265                         case "$fflushall" in
14266                         x)      $cat >&4 <<EOM
14267 Whew. Flushing explicitly all the stdio streams works.
14268 EOM
14269                                 fflushall="$define"
14270                                 ;;
14271                         '')     $cat >&4 <<EOM
14272 Sigh. Flushing explicitly all the stdio streams doesn't work.
14273 EOM
14274                                 fflushall="$undef"
14275                                 ;;
14276                         *)      $cat >&4 <<EOM
14277 Cannot figure out whether flushing stdio streams explicitly works or not.
14278 I'm assuming it doesn't.
14279 EOM
14280                                 fflushall="$undef"
14281                                 ;;
14282                         esac
14283                         ;;
14284                 "$define"|true|[yY]*)
14285                         fflushall="$define"
14286                         ;;
14287                 *)
14288                         fflushall="$undef"
14289                         ;;
14290                 esac
14291             else
14292                 $cat >&4 <<EOM
14293 All is futile.  Even fflush(stdin) clobbers input pipes!
14294 EOM
14295                 fflushall="$undef"
14296             fi
14297         else
14298             fflushall="$undef"
14299         fi
14300         $rm -f core tryp.c tryp.core core.tryp.*
14301         ;;
14302 *)      fflushall="$undef"
14303         ;;
14304 esac
14305
14306 case "$fflushNULL$fflushall" in
14307 undefundef)
14308         $cat <<EOM
14309 OK, I give up.  I cannot figure out how to flush pending stdio output.
14310 We won't be flushing handles at all before fork/exec/popen.
14311 EOM
14312         ;;
14313 esac
14314 $rm -f try.* try$exe_ext
14315
14316 : Store the full pathname to the ar program for use in the C program
14317 : Respect a hint or command line value for full_ar.
14318 case "$full_ar" in
14319 '') full_ar=$ar ;;
14320 esac
14321
14322 : Store the full pathname to the sed program for use in the C program
14323 full_sed=$sed
14324
14325 : see what type gids are declared as in the kernel
14326 echo " "
14327 echo "Looking for the type for group ids returned by getgid()."
14328 set gid_t gidtype xxx stdio.h sys/types.h
14329 eval $typedef
14330 case "$gidtype" in
14331 xxx)
14332         xxx=`./findhdr sys/user.h`
14333         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14334         case $1 in
14335         unsigned) dflt="$1 $2" ;;
14336         *) dflt="$1" ;;
14337         esac
14338         ;;
14339 *) dflt="$gidtype";;
14340 esac
14341 case "$gidtype" in
14342 gid_t) echo "gid_t found." ;;
14343 *)      rp="What is the type for group ids returned by getgid()?"
14344         . ./myread
14345         gidtype="$ans"
14346         ;;
14347 esac
14348
14349 echo " "
14350 case "$gidtype" in
14351 *_t) zzz="$gidtype"     ;;
14352 *)   zzz="gid"          ;;
14353 esac
14354 echo "Checking the size of $zzz..." >&4 
14355 cat > try.c <<EOCP
14356 #include <sys/types.h>
14357 #include <stdio.h>
14358 int main() {
14359     printf("%d\n", (int)sizeof($gidtype));
14360     exit(0);
14361 }
14362 EOCP
14363 set try
14364 if eval $compile_ok; then
14365         yyy=`$run ./try`
14366         case "$yyy" in
14367         '')     gidsize=4
14368                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14369                 ;;
14370         *)      gidsize=$yyy
14371                 echo "Your $zzz is $gidsize bytes long."
14372                 ;;
14373         esac
14374 else
14375         gidsize=4
14376         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14377 fi
14378
14379
14380 echo " "
14381 case "$gidtype" in
14382 *_t) zzz="$gidtype"     ;;
14383 *)   zzz="gid"          ;;
14384 esac
14385 echo "Checking the sign of $zzz..." >&4 
14386 cat > try.c <<EOCP
14387 #include <sys/types.h>
14388 #include <stdio.h>
14389 int main() {
14390         $gidtype foo = -1;
14391         if (foo < 0)
14392                 printf("-1\n");
14393         else
14394                 printf("1\n");
14395 }
14396 EOCP
14397 set try
14398 if eval $compile; then
14399         yyy=`$run ./try`
14400         case "$yyy" in
14401         '')     gidsign=1
14402                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14403                 ;;
14404         *)      gidsign=$yyy
14405                 case "$gidsign" in
14406                  1) echo "Your $zzz is unsigned." ;;
14407                 -1) echo "Your $zzz is signed."   ;;
14408                 esac
14409                 ;;
14410         esac
14411 else
14412         gidsign=1
14413         echo "(I can't compile the test program--guessing unsigned.)" >&4
14414 fi
14415
14416
14417 echo " "
14418
14419 if $test X"$quadtype" != X; then
14420
14421 echo "Checking how to print 64-bit integers..." >&4
14422
14423 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14424         $cat >try.c <<'EOCP'
14425 #include <sys/types.h>
14426 #include <stdio.h>
14427 int main() {
14428   int q = 12345678901;
14429   printf("%ld\n", q);
14430 }
14431 EOCP
14432         set try
14433         if eval $compile; then
14434                 yyy=`$run ./try`
14435                 case "$yyy" in
14436                 12345678901)
14437                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14438                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14439                         echo "We will use %d."
14440                         ;;
14441                 esac
14442         fi
14443 fi
14444
14445 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14446         $cat >try.c <<'EOCP'
14447 #include <sys/types.h>
14448 #include <stdio.h>
14449 int main() {
14450   long q = 12345678901;
14451   printf("%ld\n", q);
14452 }
14453 EOCP
14454         set try
14455         if eval $compile; then
14456                 yyy=`$run ./try`
14457                 case "$yyy" in
14458                 12345678901)
14459                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14460                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14461                         echo "We will use %ld."
14462                         ;;
14463                 esac
14464         fi
14465 fi
14466
14467 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14468         $cat >try.c <<'EOCP'
14469 #include <sys/types.h>
14470 #include <inttypes.h>
14471 #include <stdio.h>
14472 int main() {
14473   int64_t q = 12345678901;
14474   printf("%" PRId64 "\n", q);
14475 }
14476 EOCP
14477         set try
14478         if eval $compile; then
14479                 yyy=`$run ./try`
14480                 case "$yyy" in
14481                 12345678901)
14482                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14483                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14484                         echo "We will use the C9X style."
14485                         ;;
14486                 esac
14487         fi
14488 fi
14489
14490 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14491         $cat >try.c <<EOCP
14492 #include <sys/types.h>
14493 #include <stdio.h>
14494 int main() {
14495   $quadtype q = 12345678901;
14496   printf("%Ld\n", q);
14497 }
14498 EOCP
14499         set try
14500         if eval $compile; then
14501                 yyy=`$run ./try`
14502                 case "$yyy" in
14503                 12345678901)
14504                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14505                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14506                         echo "We will use %Ld."
14507                         ;;
14508                 esac
14509         fi
14510 fi
14511
14512 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14513         $cat >try.c <<'EOCP'
14514 #include <sys/types.h>
14515 #include <stdio.h>
14516 int main() {
14517   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14518   printf("%lld\n", q);
14519 }
14520 EOCP
14521         set try
14522         if eval $compile; then
14523                 yyy=`$run ./try`
14524                 case "$yyy" in
14525                 12345678901)
14526                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14527                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14528                         echo "We will use the %lld style."
14529                         ;;
14530                 esac
14531         fi
14532 fi
14533
14534 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14535         $cat >try.c <<EOCP
14536 #include <sys/types.h>
14537 #include <stdio.h>
14538 int main() {
14539   $quadtype q = 12345678901;
14540   printf("%qd\n", q);
14541 }
14542 EOCP
14543         set try
14544         if eval $compile; then
14545                 yyy=`$run ./try`
14546                 case "$yyy" in
14547                 12345678901)
14548                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14549                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14550                         echo "We will use %qd."
14551                         ;;
14552                 esac
14553         fi
14554 fi
14555
14556 if $test X"$sPRId64" = X; then
14557         echo "Cannot figure out how to print 64-bit integers." >&4
14558 fi
14559
14560 $rm -f try try.*
14561
14562 fi
14563
14564 case "$sPRId64" in
14565 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14566         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14567         ;;
14568 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14569         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14570         ;;
14571 esac
14572
14573
14574 echo " "
14575 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14576
14577 if $test X"$ivsize" = X8; then
14578         ivdformat="$sPRId64"
14579         uvuformat="$sPRIu64"
14580         uvoformat="$sPRIo64"
14581         uvxformat="$sPRIx64"
14582         uvXUformat="$sPRIXU64"
14583 else
14584         if $test X"$ivsize" = X"$longsize"; then
14585                 ivdformat='"ld"'
14586                 uvuformat='"lu"'
14587                 uvoformat='"lo"'
14588                 uvxformat='"lx"'
14589                 uvXUformat='"lX"'
14590         else
14591                 if $test X"$ivsize" = X"$intsize"; then
14592                         ivdformat='"d"'
14593                         uvuformat='"u"'
14594                         uvoformat='"o"'
14595                         uvxformat='"x"'
14596                         uvXUformat='"X"'
14597                 else
14598                         : far out
14599                         if $test X"$ivsize" = X"$shortsize"; then
14600                                 ivdformat='"hd"'
14601                                 uvuformat='"hu"'
14602                                 uvoformat='"ho"'
14603                                 uvxformat='"hx"'
14604                                 uvXUformat='"hX"'
14605                         fi
14606                 fi
14607         fi
14608 fi
14609
14610 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14611         nveformat="$sPRIeldbl"
14612         nvfformat="$sPRIfldbl"
14613         nvgformat="$sPRIgldbl"
14614         nvEUformat="$sPRIEUldbl"
14615         nvFUformat="$sPRIFUldbl"
14616         nvGUformat="$sPRIGUldbl"
14617 else
14618         nveformat='"e"'
14619         nvfformat='"f"'
14620         nvgformat='"g"'
14621         nvEUformat='"E"'
14622         nvFUformat='"F"'
14623         nvGUformat='"G"'
14624 fi
14625
14626 case "$ivdformat" in
14627 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14628     exit 1
14629     ;;
14630 esac
14631
14632
14633 echo " "
14634 $echo "Checking the format string to be used for gids..." >&4
14635
14636 case "$gidsign" in
14637 -1)     if $test X"$gidsize" = X"$ivsize"; then
14638                 gidformat="$ivdformat"
14639         else
14640                 if $test X"$gidsize" = X"$longsize"; then
14641                         gidformat='"ld"'
14642                 else
14643                         if $test X"$gidsize" = X"$intsize"; then
14644                                 gidformat='"d"'
14645                         else
14646                                 if $test X"$gidsize" = X"$shortsize"; then
14647                                         gidformat='"hd"'
14648                                 fi
14649                         fi
14650                 fi
14651         fi
14652         ;;
14653 *)      if $test X"$gidsize" = X"$uvsize"; then
14654                 gidformat="$uvuformat"
14655         else
14656                 if $test X"$gidsize" = X"$longsize"; then
14657                         gidformat='"lu"'
14658                 else
14659                         if $test X"$gidsize" = X"$intsize"; then
14660                                 gidformat='"u"'
14661                         else
14662                                 if $test X"$gidsize" = X"$shortsize"; then
14663                                         gidformat='"hu"'
14664                                 fi
14665                         fi
14666                 fi
14667         fi
14668         ;;
14669 esac
14670
14671 : see if getgroups exists
14672 set getgroups d_getgrps
14673 eval $inlibc
14674
14675 : see if setgroups exists
14676 set setgroups d_setgrps
14677 eval $inlibc
14678
14679
14680 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14681 echo " "
14682 case "$d_getgrps$d_setgrps" in
14683 *define*)
14684         case "$groupstype" in
14685         '') dflt="$gidtype" ;;
14686         *)  dflt="$groupstype" ;;
14687         esac
14688         $cat <<EOM
14689 What type of pointer is the second argument to getgroups() and setgroups()?
14690 Usually this is the same as group ids, $gidtype, but not always.
14691
14692 EOM
14693         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14694         . ./myread
14695         groupstype="$ans"
14696         ;;
14697 *)  groupstype="$gidtype";;
14698 esac
14699
14700 echo " "
14701 echo "Checking if your $make program sets \$(MAKE)..." >&4
14702 case "$make_set_make" in
14703 '')
14704         $sed 's/^X //' > testmake.mak << 'EOF'
14705 Xall:
14706 X       @echo 'maketemp="$(MAKE)"'
14707 EOF
14708         case "`$make -f testmake.mak 2>/dev/null`" in
14709         *maketemp=*) make_set_make='#' ;;
14710         *)      make_set_make="MAKE=$make" ;;
14711         esac
14712         $rm -f testmake.mak
14713         ;;
14714 esac
14715 case "$make_set_make" in
14716 '#') echo "Yup, it does.";;
14717 *) echo "Nope, it doesn't.";;
14718 esac
14719
14720 : see what type is used for mode_t
14721 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14722 set mode_t modetype int stdio.h sys/types.h
14723 eval $typedef_ask
14724
14725 : see if stdarg is available
14726 echo " "
14727 if $test `./findhdr stdarg.h`; then
14728         echo "<stdarg.h> found." >&4
14729         valstd="$define"
14730 else
14731         echo "<stdarg.h> NOT found." >&4
14732         valstd="$undef"
14733 fi
14734
14735 : see if varags is available
14736 echo " "
14737 if $test `./findhdr varargs.h`; then
14738         echo "<varargs.h> found." >&4
14739 else
14740         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14741 fi
14742
14743 : set up the varargs testing programs
14744 $cat > varargs.c <<EOP
14745 #ifdef I_STDARG
14746 #include <stdarg.h>
14747 #endif
14748 #ifdef I_VARARGS
14749 #include <varargs.h>
14750 #endif
14751
14752 #ifdef I_STDARG
14753 int f(char *p, ...)
14754 #else
14755 int f(va_alist)
14756 va_dcl
14757 #endif
14758 {
14759         va_list ap;
14760 #ifndef I_STDARG
14761         char *p;
14762 #endif
14763 #ifdef I_STDARG
14764         va_start(ap,p);
14765 #else
14766         va_start(ap);
14767         p = va_arg(ap, char *);
14768 #endif
14769         va_end(ap);
14770 }
14771 EOP
14772 $cat > varargs <<EOP
14773 $startsh
14774 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14775         echo "true"
14776 else
14777         echo "false"
14778 fi
14779 $rm -f varargs$_o
14780 EOP
14781 chmod +x varargs
14782
14783 : now check which varargs header should be included
14784 echo " "
14785 i_varhdr=''
14786 case "$valstd" in
14787 "$define")
14788         if `./varargs I_STDARG`; then
14789                 val='stdarg.h'
14790         elif `./varargs I_VARARGS`; then
14791                 val='varargs.h'
14792         fi
14793         ;;
14794 *)
14795         if `./varargs I_VARARGS`; then
14796                 val='varargs.h'
14797         fi
14798         ;;
14799 esac
14800 case "$val" in
14801 '')
14802 echo "I could not find the definition for va_dcl... You have problems..." >&4
14803         val="$undef"; set i_stdarg; eval $setvar
14804         val="$undef"; set i_varargs; eval $setvar
14805         ;;
14806 *) 
14807         set i_varhdr
14808         eval $setvar
14809         case "$i_varhdr" in
14810         stdarg.h)
14811                 val="$define"; set i_stdarg; eval $setvar
14812                 val="$undef"; set i_varargs; eval $setvar
14813                 ;;
14814         varargs.h)
14815                 val="$undef"; set i_stdarg; eval $setvar
14816                 val="$define"; set i_varargs; eval $setvar
14817                 ;;
14818         esac
14819         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14820 esac
14821 $rm -f varargs*
14822
14823 : see if we need va_copy
14824 echo " "
14825 case "$i_stdarg" in
14826 "$define")
14827         $cat >try.c <<EOCP
14828 #include <stdarg.h>
14829 #include <stdio.h>
14830 #$i_stdlib I_STDLIB
14831 #ifdef I_STDLIB
14832 #include <stdlib.h>
14833 #endif
14834 #include <signal.h>
14835
14836 int
14837 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14838 {
14839   return vfprintf(f, fmt, *valp);
14840 }
14841  
14842 int    
14843 myvfprintf(FILE *f, const  char *fmt, va_list val)
14844 {
14845   return ivfprintf(f, fmt, &val);
14846 }
14847       
14848 int
14849 myprintf(char *fmt, ...) 
14850 {
14851   va_list val;
14852   va_start(val, fmt);
14853   return myvfprintf(stdout, fmt, val); 
14854 }         
14855
14856 int
14857 main(int ac, char **av)
14858 {
14859   signal(SIGSEGV, exit);
14860
14861   myprintf("%s%cs all right, then\n", "that", '\'');                            
14862   exit(0);      
14863 }
14864 EOCP
14865         set try
14866         if eval $compile && $run ./try 2>&1 >/dev/null; then
14867                 case "`$run ./try`" in
14868                 "that's all right, then")
14869                         okay=yes
14870                         ;;
14871                 esac
14872         fi
14873         case "$okay" in
14874         yes)    echo "It seems that you don't need va_copy()." >&4
14875                 need_va_copy="$undef"
14876                 ;;
14877         *)      echo "It seems that va_copy() or similar will be needed." >&4
14878                 need_va_copy="$define"
14879                 ;;
14880         esac
14881         $rm -f try.* core core.* *.core *.core.*
14882         ;;
14883 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14884         ;;
14885 esac
14886
14887 : define a fucntion to check prototypes
14888 $cat > protochk <<EOSH
14889 $startsh
14890 cc="$cc"
14891 optimize="$optimize"
14892 ccflags="$ccflags"
14893 prototype="$prototype"
14894 define="$define"
14895 rm=$rm
14896 EOSH
14897
14898 $cat >> protochk <<'EOSH'
14899
14900 $rm -f try.c
14901 foo="$1"
14902 shift
14903 while test $# -ge 2; do
14904         case "$1" in
14905                 $define) echo "#include <$2>" >> try.c ;;
14906                 literal) echo "$2" >> try.c ;;
14907         esac
14908     shift 2
14909 done
14910 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14911 cat >> try.c <<'EOCP'
14912 #ifdef CAN_PROTOTYPE
14913 #define _(args) args
14914 #else
14915 #define _(args) ()
14916 #endif
14917 EOCP
14918 echo "$foo" >> try.c
14919 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14920 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14921 status=$?
14922 $rm -f try.[co]
14923 exit $status
14924 EOSH
14925 chmod +x protochk
14926 $eunicefix protochk
14927
14928 : see what type is used for size_t
14929 rp="What is the type used for the length parameter for string functions?"
14930 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14931 eval $typedef_ask
14932
14933 : check for type of arguments to gethostbyaddr. 
14934 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14935         case "$d_gethbyaddr" in
14936         $define)
14937                 $cat <<EOM
14938
14939 Checking to see what type of arguments are accepted by gethostbyaddr().
14940 EOM
14941                 hdrs="$define sys/types.h
14942                         $d_socket sys/socket.h 
14943                         $i_niin netinet/in.h 
14944                         $i_netdb netdb.h
14945                         $i_unistd unistd.h"
14946                 : The first arg can 'char *' or 'void *'
14947                 : The second arg is some of integral type
14948                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14949                         for yyy in size_t long int; do
14950                                 case "$netdb_host_type" in
14951                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14952                                         if ./protochk "$try" $hdrs; then
14953                                                 echo "Your system accepts $xxx for the first arg."
14954                                                 echo "...and $yyy for the second arg."
14955                                                 netdb_host_type="$xxx"
14956                                                 netdb_hlen_type="$yyy"
14957                                         fi
14958                                         ;;
14959                                 esac
14960                         done
14961                 done
14962                 : In case none of those worked, prompt the user.
14963                 case "$netdb_host_type" in
14964                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14965                         dflt='char *'
14966                         . ./myread
14967                         netdb_host_type=$ans
14968                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14969                         dflt="$sizetype"
14970                         . ./myread
14971                         netdb_hlen_type=$ans
14972                         ;;
14973                 esac
14974                 ;;
14975         *)      : no gethostbyaddr, so pick harmless defaults
14976                 netdb_host_type='char *'
14977                 netdb_hlen_type="$sizetype"
14978                 ;;
14979         esac
14980         # Remove the "const" if needed. -- but then we'll have a 
14981         # prototype clash!
14982         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14983 fi
14984
14985 : check for type of argument to gethostbyname. 
14986 if test "X$netdb_name_type" = X ; then
14987         case "$d_gethbyname" in
14988         $define)
14989                 $cat <<EOM
14990
14991 Checking to see what type of argument is accepted by gethostbyname().
14992 EOM
14993                 hdrs="$define sys/types.h
14994                         $d_socket sys/socket.h 
14995                         $i_niin netinet/in.h 
14996                         $i_netdb netdb.h
14997                         $i_unistd unistd.h"
14998                 for xxx in "const char *" "char *"; do
14999                         case "$netdb_name_type" in
15000                         '')     try="extern struct hostent *gethostbyname($xxx);"
15001                                 if ./protochk "$try" $hdrs; then
15002                                         echo "Your system accepts $xxx."
15003                                         netdb_name_type="$xxx"
15004                                 fi
15005                                 ;;
15006                         esac
15007                 done
15008                 : In case none of those worked, prompt the user.
15009                 case "$netdb_name_type" in
15010                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15011                         dflt='char *'
15012                         . ./myread
15013                         netdb_name_type=$ans
15014                         ;;
15015                 esac
15016                 ;;
15017         *)      : no gethostbyname, so pick harmless default
15018                 netdb_name_type='char *'
15019                 ;;
15020         esac
15021 fi
15022
15023 : check for type of 1st argument to getnetbyaddr. 
15024 if test "X$netdb_net_type" = X ; then
15025         case "$d_getnbyaddr" in
15026         $define)
15027                 $cat <<EOM
15028
15029 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15030 EOM
15031                 hdrs="$define sys/types.h
15032                         $d_socket sys/socket.h 
15033                         $i_niin netinet/in.h 
15034                         $i_netdb netdb.h
15035                         $i_unistd unistd.h"
15036                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15037                         case "$netdb_net_type" in
15038                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15039                                 if ./protochk "$try" $hdrs; then
15040                                         echo "Your system accepts $xxx."
15041                                         netdb_net_type="$xxx"
15042                                 fi
15043                                 ;;
15044                         esac
15045                 done
15046                 : In case none of those worked, prompt the user.
15047                 case "$netdb_net_type" in
15048                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15049                         dflt='long'
15050                         . ./myread
15051                         netdb_net_type=$ans
15052                         ;;
15053                 esac
15054                 ;;
15055         *)      : no getnetbyaddr, so pick harmless default
15056                 netdb_net_type='long'
15057                 ;;
15058         esac
15059 fi
15060 : locate the preferred pager for this system
15061 case "$pager" in
15062 '')
15063         dflt=''
15064         case "$pg" in
15065         /*) dflt=$pg;;
15066         [a-zA-Z]:/*) dflt=$pg;;
15067         esac
15068         case "$more" in
15069         /*) dflt=$more;;
15070         [a-zA-Z]:/*) dflt=$more;;
15071         esac
15072         case "$less" in
15073         /*) dflt=$less;;
15074         [a-zA-Z]:/*) dflt=$less;;
15075         esac
15076         case "$dflt" in
15077         '') dflt=/usr/ucb/more;;
15078         esac
15079         ;;
15080 *) dflt="$pager";;
15081 esac
15082 echo " "
15083 fn=f/
15084 rp='What pager is used on your system?'
15085 . ./getfile
15086 pager="$ans"
15087
15088 : see what type pids are declared as in the kernel
15089 rp="What is the type of process ids on this system?"
15090 set pid_t pidtype int stdio.h sys/types.h
15091 eval $typedef_ask
15092
15093 : Find earliest binary compatible site_perl subdirectory perl can use.
15094 case "$bincompat5005" in
15095 "$define") xs_apiversion='5.005' ;;
15096 *) xs_apiversion=$version ;;   # The current site_perl version.
15097 esac
15098 : Find earliest pure perl site_perl subdirectory perl can use.
15099 : The versioned directories started at 5.005.
15100 pm_apiversion='5.005'
15101
15102 : see if ar generates random libraries by itself
15103 echo " "
15104 echo "Checking how to generate random libraries on your machine..." >&4
15105 echo 'int bar1() { return bar2(); }' > bar1.c
15106 echo 'int bar2() { return 2; }' > bar2.c
15107 $cat > foo.c <<'EOP'
15108 int main() { printf("%d\n", bar1()); exit(0); }
15109 EOP
15110 $cc $ccflags -c bar1.c >/dev/null 2>&1
15111 $cc $ccflags -c bar2.c >/dev/null 2>&1
15112 $cc $ccflags -c foo.c >/dev/null 2>&1
15113 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15114 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15115         $run ./foobar >/dev/null 2>&1; then
15116         echo "$ar appears to generate random libraries itself."
15117         orderlib=false
15118         ranlib=":"
15119 elif $ar ts bar$_a >/dev/null 2>&1 &&
15120         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15121         $run ./foobar >/dev/null 2>&1; then
15122                 echo "a table of contents needs to be added with '$ar ts'."
15123                 orderlib=false
15124                 ranlib="$ar ts"
15125 else
15126         case "$ranlib" in
15127         :) ranlib='';;
15128         '')
15129                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15130                 $test -f $ranlib || ranlib=''
15131                 ;;
15132         esac
15133         if $test -n "$ranlib"; then
15134                 echo "your system has '$ranlib'; we'll use that."
15135                 orderlib=false
15136         else
15137                 echo "your system doesn't seem to support random libraries"
15138                 echo "so we'll use lorder and tsort to order the libraries."
15139                 orderlib=true
15140                 ranlib=":"
15141         fi
15142 fi
15143 $rm -f foo* bar* 
15144
15145 : check for type of arguments to select. 
15146 case "$selecttype" in
15147 '') case "$d_select" in
15148         $define)
15149                 echo " "
15150                 $cat <<EOM
15151 Checking to see what type of arguments are accepted by select().
15152 EOM
15153                 hdrs="$define sys/types.h
15154                         $i_systime sys/time.h 
15155                         $i_sysselct sys/select.h
15156                         $d_socket sys/socket.h"
15157                 : The first arg can be int, unsigned, or size_t
15158                 : The last arg may or may not be 'const'
15159                 val=''
15160                 : void pointer has been seen but using that
15161                 : breaks the selectminbits test
15162                 for xxx in 'fd_set *' 'int *'; do
15163                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15164                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15165                                         case "$val" in
15166                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15167                                                 if ./protochk "$try" $hdrs; then
15168                                                         echo "Your system accepts $xxx."
15169                                                         val="$xxx"
15170                                                 fi
15171                                                 ;;
15172                                         esac
15173                                 done
15174                         done
15175                 done
15176                 case "$val" in
15177                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15178                         case "$d_fd_set" in
15179                                 $define) dflt="fd_set *" ;;
15180                                 *)              dflt="int *" ;;
15181                         esac
15182                         . ./myread
15183                         val=$ans
15184                         ;;
15185                 esac
15186                 selecttype="$val"
15187                 ;;
15188         *)      : no select, so pick a harmless default
15189                 selecttype='int *'
15190                 ;;
15191         esac
15192         ;;
15193 esac
15194
15195 : check for the select 'width'
15196 case "$selectminbits" in
15197 '') case "$d_select" in
15198         $define)
15199                 $cat <<EOM
15200
15201 Checking to see on how many bits at a time your select() operates...
15202 EOM
15203                 $cat >try.c <<EOCP
15204 #include <sys/types.h>
15205 #$i_time I_TIME
15206 #$i_systime I_SYS_TIME
15207 #$i_systimek I_SYS_TIME_KERNEL
15208 #ifdef I_TIME
15209 #   include <time.h>
15210 #endif
15211 #ifdef I_SYS_TIME
15212 #   ifdef I_SYS_TIME_KERNEL
15213 #       define KERNEL
15214 #   endif
15215 #   include <sys/time.h>
15216 #   ifdef I_SYS_TIME_KERNEL
15217 #       undef KERNEL
15218 #   endif
15219 #endif
15220 #$i_sysselct I_SYS_SELECT
15221 #ifdef I_SYS_SELECT
15222 #include <sys/select.h>
15223 #endif
15224 #$d_socket HAS_SOCKET
15225 #ifdef HAS_SOCKET
15226 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15227 #endif
15228 #include <stdio.h>
15229 $selecttype b;
15230 #define S sizeof(*(b))
15231 #define MINBITS 64
15232 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15233 #define NBITS  (NBYTES * 8)
15234 int main() {
15235     char s[NBYTES];
15236     struct timeval t;
15237     int i;
15238     FILE* fp;
15239     int fd;
15240
15241     fclose(stdin);
15242     fp = fopen("try.c", "r");
15243     if (fp == 0)
15244       exit(1);
15245     fd = fileno(fp);
15246     if (fd < 0)
15247       exit(2);
15248     b = ($selecttype)s;
15249     for (i = 0; i < NBITS; i++)
15250         FD_SET(i, b);
15251     t.tv_sec  = 0;
15252     t.tv_usec = 0;
15253     select(fd + 1, b, 0, 0, &t);
15254     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15255     printf("%d\n", i + 1);
15256     return 0;
15257 }
15258 EOCP
15259                 set try
15260                 if eval $compile_ok; then
15261                         selectminbits=`$run ./try`
15262                         case "$selectminbits" in
15263                         '')     cat >&4 <<EOM
15264 Cannot figure out on how many bits at a time your select() operates.
15265 I'll play safe and guess it is 32 bits.
15266 EOM
15267                                 selectminbits=32
15268                                 bits="32 bits"
15269                                 ;;
15270                         1)      bits="1 bit" ;;
15271                         *)      bits="$selectminbits bits" ;;
15272                         esac
15273                         echo "Your select() operates on $bits at a time." >&4
15274                 else
15275                         rp='What is the minimum number of bits your select() operates on?'
15276                         case "$byteorder" in
15277                         1234|12345678)  dflt=32 ;;
15278                         *)              dflt=1  ;;
15279                         esac
15280                         . ./myread
15281                         val=$ans
15282                         selectminbits="$val"
15283                 fi
15284                 $rm -f try.* try
15285                 ;;
15286         *)      : no select, so pick a harmless default
15287                 selectminbits='32'
15288                 ;;
15289         esac
15290         ;;
15291 esac
15292
15293 : Trace out the files included by signal.h, then look for SIGxxx names.
15294 : Remove SIGARRAYSIZE used by HPUX.
15295 : Remove SIGSTKSIZE used by Linux.
15296 : Remove SIGSTKSZ used by Posix.
15297 : Remove SIGTYP void lines used by OS2.
15298 : Some cpps, like os390, dont give the file name anywhere
15299 if [ "X$fieldn" = X ]; then
15300         : Just make some guesses.  We check them later.
15301         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15302 else
15303         xxx=`echo '#include <signal.h>' |
15304         $cppstdin $cppminus $cppflags 2>/dev/null |
15305         $grep '^[       ]*#.*include' | 
15306         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15307 fi
15308 : Check this list of files to be sure we have parsed the cpp output ok.
15309 : This will also avoid potentially non-existent files, such 
15310 : as ../foo/bar.h
15311 xxxfiles=''
15312 for xx in $xxx /dev/null ; do
15313         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15314 done
15315 : If we have found no files, at least try signal.h
15316 case "$xxxfiles" in
15317 '')     xxxfiles=`./findhdr signal.h` ;;
15318 esac
15319 xxx=`awk '
15320 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15321         print substr($2, 4, 20)
15322 }
15323 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15324         print substr($3, 4, 20)
15325 }' $xxxfiles`
15326 : Append some common names just in case the awk scan failed.
15327 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15328 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15329 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15330 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15331 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15332
15333 : generate a few handy files for later
15334 $cat > signal.c <<'EOCP'
15335 #include <sys/types.h>
15336 #include <signal.h>
15337 #include <stdio.h>
15338 int main() {
15339
15340 /* Strange style to avoid deeply-nested #if/#else/#endif */
15341 #ifndef NSIG
15342 #  ifdef _NSIG
15343 #    define NSIG (_NSIG)
15344 #  endif
15345 #endif
15346
15347 #ifndef NSIG
15348 #  ifdef SIGMAX
15349 #    define NSIG (SIGMAX+1)
15350 #  endif
15351 #endif
15352
15353 #ifndef NSIG
15354 #  ifdef SIG_MAX
15355 #    define NSIG (SIG_MAX+1)
15356 #  endif
15357 #endif
15358
15359 #ifndef NSIG
15360 #  ifdef MAXSIG
15361 #    define NSIG (MAXSIG+1)
15362 #  endif
15363 #endif
15364
15365 #ifndef NSIG
15366 #  ifdef MAX_SIG
15367 #    define NSIG (MAX_SIG+1)
15368 #  endif
15369 #endif
15370
15371 #ifndef NSIG
15372 #  ifdef SIGARRAYSIZE
15373 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15374 #  endif
15375 #endif
15376
15377 #ifndef NSIG
15378 #  ifdef _sys_nsig
15379 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15380 #  endif
15381 #endif
15382
15383 /* Default to some arbitrary number that's big enough to get most
15384    of the common signals.
15385 */
15386 #ifndef NSIG
15387 #    define NSIG 50
15388 #endif
15389
15390 printf("NSIG %d\n", NSIG);
15391
15392 #ifndef JUST_NSIG
15393
15394 EOCP
15395
15396 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15397 {
15398         printf "#ifdef SIG"; printf $1; printf "\n"
15399         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15400         printf $1; printf ");\n"
15401         printf "#endif\n"
15402 }
15403 END {
15404         printf "#endif /* JUST_NSIG */\n";
15405         printf "exit(0);\n}\n";
15406 }
15407 ' >>signal.c
15408 $cat >signal.awk <<'EOP'
15409 BEGIN { ndups = 0 }
15410 $1 ~ /^NSIG$/ { nsig = $2 }
15411 ($1 !~ /^NSIG$/) && (NF == 2) {
15412     if ($2 > maxsig) { maxsig = $2 }
15413     if (sig_name[$2]) {
15414         dup_name[ndups] = $1
15415         dup_num[ndups] = $2
15416         ndups++ 
15417     }
15418     else {
15419         sig_name[$2] = $1
15420         sig_num[$2] = $2
15421     }
15422 }
15423 END { 
15424     if (nsig == 0) {
15425         nsig = maxsig + 1
15426     }
15427     printf("NSIG %d\n", nsig);
15428     for (n = 1; n < nsig; n++) {
15429         if (sig_name[n]) {
15430             printf("%s %d\n", sig_name[n], sig_num[n])
15431         }
15432         else {
15433             printf("NUM%d %d\n", n, n) 
15434         }
15435     }
15436     for (n = 0; n < ndups; n++) {
15437         printf("%s %d\n", dup_name[n], dup_num[n])
15438     }
15439 }
15440 EOP
15441 $cat >signal_cmd <<EOS
15442 $startsh
15443 if $test -s signal.lst; then
15444     echo "Using your existing signal.lst file"
15445         exit 0
15446 fi
15447 xxx="$xxx"
15448 EOS
15449 $cat >>signal_cmd <<'EOS'
15450
15451 set signal
15452 if eval $compile_ok; then
15453         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15454 else
15455         echo "(I can't seem be able to compile the whole test program)" >&4
15456         echo "(I'll try it in little pieces.)" >&4
15457         set signal -DJUST_NSIG
15458         if eval $compile_ok; then
15459                 $run ./signal$_exe > signal.nsg
15460                 $cat signal.nsg
15461         else
15462                 echo "I can't seem to figure out how many signals you have." >&4
15463                 echo "Guessing 50." >&4
15464                 echo 'NSIG 50' > signal.nsg
15465         fi
15466         : Now look at all the signal names, one at a time.
15467         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15468                 $cat > signal.c <<EOCP
15469 #include <sys/types.h>
15470 #include <signal.h>
15471 #include <stdio.h>
15472 int main() {
15473 printf("$xx %d\n", SIG${xx});
15474 return 0;
15475 }
15476 EOCP
15477                 set signal
15478                 if eval $compile; then
15479                         echo "SIG${xx} found."
15480                         $run ./signal$_exe  >> signal.ls1
15481                 else
15482                         echo "SIG${xx} NOT found."
15483                 fi
15484         done
15485         if $test -s signal.ls1; then
15486                 $cat signal.nsg signal.ls1 |
15487                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15488         fi
15489
15490 fi
15491 if $test -s signal.lst; then
15492         :
15493 else
15494         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15495         echo 'kill -l' >signal
15496         set X `csh -f <signal`
15497         $rm -f signal
15498         shift
15499         case $# in
15500         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15501         esac
15502         echo $@ | $tr ' ' $trnl | \
15503             $awk '{ printf "%s %d\n", $1, ++s; }
15504                   END { printf "NSIG %d\n", ++s }' >signal.lst
15505 fi
15506 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15507 EOS
15508 chmod a+x signal_cmd
15509 $eunicefix signal_cmd
15510
15511 : generate list of signal names
15512 echo " "
15513 case "$sig_name_init" in
15514 '') doinit=yes ;;
15515 *)  case "$sig_num_init" in
15516     ''|*,*) doinit=yes ;;
15517     esac ;;
15518 esac
15519 case "$doinit" in
15520 yes)
15521         echo "Generating a list of signal names and numbers..." >&4
15522         . ./signal_cmd
15523         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15524         sig_name=`$awk 'BEGIN { printf "ZERO " }
15525                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15526         sig_num=`$awk  'BEGIN { printf "0 " }
15527                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15528         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15529                              !/^NSIG/   { printf "\"%s\", ", $1 }
15530                              END        { printf "0\n" }' signal.lst`
15531         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15532                              !/^NSIG/   { printf "%d, ", $2}
15533                              END        { printf "0\n"}' signal.lst`
15534         ;;
15535 esac
15536 echo "The following $sig_count signals are available:"
15537 echo " "
15538 echo $sig_name | $awk \
15539 'BEGIN { linelen = 0 }
15540 {
15541         for (i = 1; i <= NF; i++) {
15542                 name = "SIG" $i " "
15543                 linelen = linelen + length(name)
15544                 if (linelen > 70) {
15545                         printf "\n"
15546                         linelen = length(name)
15547                 }
15548                 printf "%s", name
15549         }
15550         printf "\n"
15551 }'
15552 sig_size=`echo $sig_name | awk '{print NF}'`
15553 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15554
15555 echo " "
15556 case "$sizetype" in
15557 *_t) zzz="$sizetype"    ;;
15558 *)   zzz="filesize"     ;;
15559 esac
15560 echo "Checking the size of $zzz..." >&4 
15561 cat > try.c <<EOCP
15562 #include <sys/types.h>
15563 #include <stdio.h>
15564 int main() {
15565     printf("%d\n", (int)sizeof($sizetype));
15566     exit(0);
15567 }
15568 EOCP
15569 set try
15570 if eval $compile_ok; then
15571         yyy=`$run ./try`
15572         case "$yyy" in
15573         '')     sizesize=4
15574                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15575                 ;;
15576         *)      sizesize=$yyy
15577                 echo "Your $zzz size is $sizesize bytes."
15578                 ;;
15579         esac
15580 else
15581         sizesize=4
15582         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15583 fi
15584
15585
15586 : check for socklen_t
15587 echo " "
15588 echo "Checking to see if you have socklen_t..." >&4
15589 $cat >try.c <<EOCP
15590 #include <sys/types.h>
15591 #$d_socket HAS_SOCKET
15592 #ifdef HAS_SOCKET
15593 #include <sys/socket.h>
15594 #endif
15595 int main() { socklen_t x = 16; }
15596 EOCP
15597 set try
15598 if eval $compile; then
15599         val="$define"
15600         echo "You have socklen_t."
15601 else
15602         val="$undef"
15603         echo "You do not have socklen_t."
15604         case "$sizetype" in
15605         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15606         esac
15607 fi
15608 $rm -f try try.*
15609 set d_socklen_t
15610 eval $setvar
15611
15612 : see if this is a socks.h system
15613 set socks.h i_socks
15614 eval $inhdr
15615
15616 : check for type of the size argument to socket calls
15617 case "$d_socket" in
15618 "$define")
15619         $cat <<EOM
15620
15621 Checking to see what type is the last argument of accept().
15622 EOM
15623         yyy=''
15624         case "$d_socklen_t" in
15625         "$define") yyy="$yyy socklen_t"
15626         esac
15627         yyy="$yyy $sizetype int long unsigned"
15628         for xxx in $yyy; do
15629                 case "$socksizetype" in
15630                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15631                         case "$usesocks" in
15632                         "$define")
15633                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15634                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15635                                         socksizetype="$xxx"
15636                                 fi
15637                                 ;;
15638                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15639                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15640                                         socksizetype="$xxx"
15641                                 fi
15642                                 ;;
15643                         esac
15644                         ;;
15645                 esac
15646         done
15647 : In case none of those worked, prompt the user.
15648         case "$socksizetype" in
15649         '')     rp='What is the type for socket address structure sizes?'
15650                 dflt='int'
15651                 . ./myread
15652                 socksizetype=$ans
15653                 ;;
15654         esac
15655         ;;
15656 *)      : no sockets, so pick relatively harmless default
15657         socksizetype='int'
15658         ;;
15659 esac
15660
15661 : see what type is used for signed size_t
15662 set ssize_t ssizetype int stdio.h sys/types.h
15663 eval $typedef
15664 dflt="$ssizetype"
15665 $cat > try.c <<EOM
15666 #include <stdio.h>
15667 #include <sys/types.h>
15668 #define Size_t $sizetype
15669 #define SSize_t $dflt
15670 int main()
15671 {
15672         if (sizeof(Size_t) == sizeof(SSize_t))
15673                 printf("$dflt\n");
15674         else if (sizeof(Size_t) == sizeof(int))
15675                 printf("int\n");
15676         else 
15677                 printf("long\n");
15678         exit(0);
15679 }
15680 EOM
15681 echo " "
15682 set try
15683 if eval $compile_ok && $run ./try > /dev/null; then
15684         ssizetype=`$run ./try`
15685         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15686 else
15687         $cat >&4 <<EOM
15688 Help! I can't compile and run the ssize_t test program: please enlighten me!
15689 (This is probably a misconfiguration in your system or libraries, and
15690 you really ought to fix it.  Still, I'll try anyway.)
15691
15692 I need a type that is the same size as $sizetype, but is guaranteed to
15693 be signed.  Common values are ssize_t, int and long.
15694
15695 EOM
15696         rp="What signed type is the same size as $sizetype?"
15697         . ./myread
15698         ssizetype="$ans"
15699 fi
15700 $rm -f try try.*
15701
15702 : see what type of char stdio uses.
15703 echo " "
15704 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15705 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15706         echo "Your stdio uses unsigned chars." >&4
15707         stdchar="unsigned char"
15708 else
15709         echo "Your stdio uses signed chars." >&4
15710         stdchar="char"
15711 fi
15712 $rm -f stdioh
15713
15714
15715
15716 : see if time exists
15717 echo " "
15718 if test "X$d_time" = X -o X"$timetype" = X; then
15719     if set time val -f d_time; eval $csym; $val; then
15720                 echo 'time() found.' >&4
15721                 val="$define"
15722                 rp="What is the type returned by time() on this system?"
15723                 set time_t timetype long stdio.h sys/types.h
15724                 eval $typedef_ask
15725     else
15726                 echo 'time() not found, hope that will do.' >&4
15727                 val="$undef"
15728                 timetype='int';
15729     fi
15730     set d_time
15731     eval $setvar
15732 fi
15733
15734 : see what type uids are declared as in the kernel
15735 echo " "
15736 echo "Looking for the type for user ids returned by getuid()."
15737 set uid_t uidtype xxx stdio.h sys/types.h
15738 eval $typedef
15739 case "$uidtype" in
15740 xxx)
15741         xxx=`./findhdr sys/user.h`
15742         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15743         case $1 in
15744         unsigned) dflt="$1 $2" ;;
15745         *) dflt="$1" ;;
15746         esac
15747         ;;
15748 *) dflt="$uidtype";;
15749 esac
15750 case "$uidtype" in
15751 uid_t)  echo "uid_t found." ;;
15752 *)      rp="What is the type for user ids returned by getuid()?"
15753         . ./myread
15754         uidtype="$ans"
15755         ;;
15756 esac
15757
15758 echo " "
15759 case "$uidtype" in
15760 *_t) zzz="$uidtype"     ;;
15761 *)   zzz="uid"          ;;
15762 esac
15763 echo "Checking the size of $zzz..." >&4 
15764 cat > try.c <<EOCP
15765 #include <sys/types.h>
15766 #include <stdio.h>
15767 int main() {
15768     printf("%d\n", (int)sizeof($uidtype));
15769     exit(0);
15770 }
15771 EOCP
15772 set try
15773 if eval $compile_ok; then
15774         yyy=`$run ./try`
15775         case "$yyy" in
15776         '')     uidsize=4
15777                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15778                 ;;
15779         *)      uidsize=$yyy
15780                 echo "Your $zzz is $uidsize bytes long."
15781                 ;;
15782         esac
15783 else
15784         uidsize=4
15785         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15786 fi
15787
15788 echo " "
15789 case "$uidtype" in
15790 *_t) zzz="$uidtype"     ;;
15791 *)   zzz="uid"          ;;
15792 esac
15793 echo "Checking the sign of $zzz..." >&4
15794 cat > try.c <<EOCP
15795 #include <sys/types.h>
15796 #include <stdio.h>
15797 int main() {
15798         $uidtype foo = -1;
15799         if (foo < 0)
15800                 printf("-1\n");
15801         else
15802                 printf("1\n");
15803 }
15804 EOCP
15805 set try
15806 if eval $compile; then
15807         yyy=`$run ./try`
15808         case "$yyy" in
15809         '')     uidsign=1
15810                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15811                 ;;
15812         *)      uidsign=$yyy
15813                 case "$uidsign" in
15814                  1) echo "Your $zzz is unsigned." ;;
15815                 -1) echo "Your $zzz is signed."   ;;
15816                 esac
15817                 ;;
15818         esac
15819 else
15820         uidsign=1
15821         echo "(I can't compile the test program--guessing unsigned.)" >&4
15822 fi
15823
15824
15825
15826 echo " "
15827 $echo "Checking the format string to be used for uids..." >&4
15828
15829 case "$uidsign" in
15830 -1)     if $test X"$uidsize" = X"$ivsize"; then
15831                 uidformat="$ivdformat"
15832         else
15833                 if $test X"$uidsize" = X"$longsize"; then
15834                         uidformat='"ld"'
15835                 else
15836                         if $test X"$uidsize" = X"$intsize"; then
15837                                 uidformat='"d"'
15838                         else
15839                                 if $test X"$uidsize" = X"$shortsize"; then
15840                                         uidformat='"hd"'
15841                                 fi
15842                         fi
15843                 fi
15844         fi
15845         ;;
15846 *)      if $test X"$uidsize" = X"$uvsize"; then
15847                 uidformat="$uvuformat"
15848         else
15849                 if $test X"$uidsize" = X"$longsize"; then
15850                         uidformat='"lu"'
15851                 else
15852                         if $test X"$uidsize" = X"$intsize"; then
15853                                 uidformat='"u"'
15854                         else
15855                                 if $test X"$uidsize" = X"$shortsize"; then
15856                                         uidformat='"hu"'
15857                                 fi
15858                         fi
15859                 fi
15860         fi
15861         ;;
15862 esac
15863
15864 : determine compiler compiler
15865 case "$yacc" in
15866 '')
15867         dflt=yacc;;
15868 *)
15869         dflt="$yacc";;
15870 esac
15871 echo " "
15872 comp='yacc'
15873 if $test -f "$byacc"; then
15874         dflt="$byacc"
15875         comp="byacc or $comp"
15876 fi
15877 if $test -f "$bison"; then
15878         comp="$comp or bison -y"
15879 fi
15880 rp="Which compiler compiler ($comp) shall I use?"
15881 . ./myread
15882 yacc="$ans"
15883 case "$yacc" in
15884 *bis*)
15885         case "$yacc" in
15886         *-y*) ;;
15887         *)
15888                 yacc="$yacc -y"
15889                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15890                 ;;
15891         esac
15892         ;;
15893 esac
15894
15895 : see if fcntl.h is there
15896 val=''
15897 set fcntl.h val
15898 eval $inhdr
15899
15900 : see if we can include fcntl.h
15901 case "$val" in
15902 "$define")
15903         echo " "
15904         if $h_fcntl; then
15905                 val="$define"
15906                 echo "We'll be including <fcntl.h>." >&4
15907         else
15908                 val="$undef"
15909                 if $h_sysfile; then
15910         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15911                 else
15912                         echo "We won't be including <fcntl.h>." >&4
15913                 fi
15914         fi
15915         ;;
15916 *)
15917         h_fcntl=false
15918         val="$undef"
15919         ;;
15920 esac
15921 set i_fcntl
15922 eval $setvar
15923
15924 : see if this is a fp.h system
15925 set fp.h i_fp
15926 eval $inhdr
15927
15928 : see if this is a fp_class.h system
15929 set fp_class.h i_fp_class
15930 eval $inhdr
15931
15932 : see if this is a ieeefp.h system
15933 set ieeefp.h i_ieeefp
15934 eval $inhdr
15935
15936 : see if this is a libutil.h system
15937 set libutil.h i_libutil
15938 eval $inhdr
15939
15940 : see if locale.h is available
15941 set locale.h i_locale
15942 eval $inhdr
15943
15944 : see if mach cthreads are available
15945 if test "X$usethreads" = "X$define"; then
15946         set mach/cthreads.h i_machcthr
15947         eval $inhdr
15948 else
15949         i_machcthr="$undef"
15950 fi
15951
15952
15953
15954 : see if this is a math.h system
15955 set math.h i_math
15956 eval $inhdr
15957
15958 : see if this is a mntent.h system
15959 set mntent.h i_mntent
15960 eval $inhdr
15961
15962 : see if ndbm.h is available
15963 set ndbm.h t_ndbm
15964 eval $inhdr
15965 case "$t_ndbm" in
15966 $define)
15967         : see if dbm_open exists
15968         set dbm_open d_dbm_open
15969         eval $inlibc
15970         case "$d_dbm_open" in
15971         $undef)
15972                 t_ndbm="$undef"
15973                 echo "We won't be including <ndbm.h>"
15974                 ;;
15975         esac
15976         ;;
15977 esac
15978 val="$t_ndbm"
15979 set i_ndbm
15980 eval $setvar
15981
15982 : see if net/errno.h is available
15983 val=''
15984 set net/errno.h val
15985 eval $inhdr
15986
15987 : Unfortunately, it causes problems on some systems.  Arrgh.
15988 case "$val" in
15989 $define)
15990         cat > try.c <<'EOM'
15991 #include <stdio.h>
15992 #include <errno.h>
15993 #include <net/errno.h>
15994 int func()
15995 {
15996         return ENOTSOCK;
15997 }
15998 EOM
15999         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16000                 echo "We'll be including <net/errno.h>." >&4
16001         else
16002                 echo "We won't be including <net/errno.h>." >&4
16003                 val="$undef"
16004         fi
16005         $rm -f try.* try
16006         ;;
16007 esac
16008 set i_neterrno
16009 eval $setvar
16010
16011 : see if netinet/tcp.h is available
16012 set netinet/tcp.h i_netinettcp
16013 eval $inhdr
16014
16015 : see if this is a poll.h system
16016 set poll.h i_poll
16017 eval $inhdr
16018
16019 : see if this is a prot.h system
16020 set prot.h i_prot
16021 eval $inhdr
16022
16023 echo " "
16024 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16025 $cat <<'EOSH' > Cppsym.know
16026 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16027 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16028 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16029 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16030 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16031 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16032 bull c cadmus clipper CMU COFF COMPILER_VERSION
16033 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16034 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16035 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16036 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16037 GLIBC GLIBC_MINOR
16038 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16039 H3050R H3050RX hbullx20 hcx host_mips
16040 hp200 hp300 hp700 HP700 hp800 hp9000
16041 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16042 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16043 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16044 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16045 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16046 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16047 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16048 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16049 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16050 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16051 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16052 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16053 MATH_HAS_NO_SIDE_EFFECTS
16054 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16055 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16056 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16057 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16058 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16059 NetBSD news1500 news1700 news1800 news1900 news3700
16060 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16061 ns32016 ns32332 ns32k nsc32000
16062 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16063 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16064 pc532 pdp11 PGC PIC plexus PORTAR posix
16065 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16066 POSIX_C_SOURCE POSIX_SOURCE POWER
16067 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16068 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16069 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16070 sony sony_news sonyrisc sparc sparclite spectrum
16071 stardent stdc STDC_EXT stratos sun sun3 sun386
16072 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16073 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16074 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16075 sysV68 sysV88 Tek4132 Tek4300 titan
16076 TM3200 TM5400 TM5600
16077 tower tower32 tower32_200 tower32_600 tower32_700
16078 tower32_800 tower32_850 tss
16079 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16080 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16081 unix UNIX95 UNIX99 unixpc unos
16082 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16083 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16084 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16085 USGr4 USGr4_2
16086 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16087 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16088 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16089 z8000
16090 EOSH
16091 # Maybe put other stuff here too.
16092 cat <<EOSH >>Cppsym.know
16093 $osname
16094 EOSH
16095 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16096 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16097 $cat Cppsym.know > Cppsym.c
16098 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16099 $rm -f Cppsym.a Cppsym.b Cppsym.c
16100 cat <<EOSH > Cppsym
16101 $startsh
16102 if $test \$# -gt 0; then
16103     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16104     if $test -s Cppsym.got; then
16105         $rm -f Cppsym.got
16106         exit 0
16107     fi
16108     $rm -f Cppsym.got
16109     exit 1
16110 else
16111     $tr " " "$trnl" | ./Cppsym.try
16112     exit 0
16113 fi
16114 EOSH
16115 chmod +x Cppsym
16116 $eunicefix Cppsym
16117 cat <<EOSH > Cppsym.try
16118 $startsh
16119 cat <<'EOCP' > try.c
16120 #include <stdio.h>
16121 int main() {
16122 EOCP
16123 $awk \\
16124 EOSH
16125 cat <<'EOSH' >> Cppsym.try
16126 'length($1) > 0 {
16127     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
16128     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
16129     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
16130     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
16131 }'       >> try.c
16132 echo 'return 0;}' >> try.c
16133 EOSH
16134 cat <<EOSH >> Cppsym.try
16135 ccflags="$ccflags"
16136 case "$osname-$gccversion" in
16137 irix-) ccflags="\$ccflags -woff 1178" ;;
16138 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16139 esac
16140 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16141 EOSH
16142 chmod +x Cppsym.try
16143 $eunicefix Cppsym.try
16144 ./Cppsym < Cppsym.know > Cppsym.true
16145 : now check the C compiler for additional symbols
16146 postprocess_cc_v=''
16147 case "$osname" in
16148 aix) postprocess_cc_v="|$tr , ' '" ;;
16149 esac
16150 $cat >ccsym <<EOS
16151 $startsh
16152 $cat >tmp.c <<EOF
16153 extern int foo;
16154 EOF
16155 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16156 do
16157         case "\$i" in
16158         -D*) echo "\$i" | $sed 's/^-D//';;
16159         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16160         esac
16161 done
16162 $rm -f try.c
16163 EOS
16164 postprocess_cc_v=''
16165 chmod +x ccsym
16166 $eunicefix ccsym
16167 ./ccsym > ccsym1.raw
16168 if $test -s ccsym1.raw; then
16169        $sort ccsym1.raw | $uniq >ccsym.raw
16170 else
16171        mv ccsym1.raw ccsym.raw
16172 fi
16173
16174 $awk '/\=/ { print $0; next }
16175         { print $0"=1" }' ccsym.raw >ccsym.list
16176 $awk '/\=/ { print $0; next }
16177         { print $0"=1" }' Cppsym.true >ccsym.true
16178 $comm -13 ccsym.true ccsym.list >ccsym.own
16179 $comm -12 ccsym.true ccsym.list >ccsym.com
16180 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16181 also=''
16182 if $test -z ccsym.raw; then
16183         echo "Your C compiler doesn't seem to define any symbols!" >&4
16184         echo " "
16185         echo "However, your C preprocessor defines the following symbols:"
16186         $cat Cppsym.true
16187         ccsymbols=''
16188         cppsymbols=`$cat Cppsym.true`
16189         cppsymbols=`echo $cppsymbols`
16190         cppccsymbols="$cppsymbols"
16191 else
16192         if $test -s ccsym.com; then
16193                 echo "Your C compiler and pre-processor define these symbols:"
16194                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16195                 also='also '
16196                 symbols='ones'
16197                 cppccsymbols=`$cat ccsym.com`
16198                 cppccsymbols=`echo $cppccsymbols`
16199                 $test "$silent" || sleep 1
16200         fi
16201         if $test -s ccsym.cpp; then
16202                 $test "$also" && echo " "
16203                 echo "Your C pre-processor ${also}defines the following symbols:"
16204                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16205                 also='further '
16206                 cppsymbols=`$cat ccsym.cpp`
16207                 cppsymbols=`echo $cppsymbols`
16208                 $test "$silent" || sleep 1
16209         fi
16210         if $test -s ccsym.own; then
16211                 $test "$also" && echo " "
16212                 echo "Your C compiler ${also}defines the following cpp symbols:"
16213                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16214                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16215                 ccsymbols=`$cat ccsym.own`
16216                 ccsymbols=`echo $ccsymbols`
16217                 $test "$silent" || sleep 1
16218         fi
16219 fi
16220
16221 : see if this is a termio system
16222 val="$undef"
16223 val2="$undef"
16224 val3="$undef"
16225 if $test `./findhdr termios.h`; then
16226         set tcsetattr i_termios
16227         eval $inlibc
16228         val3="$i_termios"
16229 fi
16230 echo " "
16231 case "$val3" in
16232 "$define") echo "You have POSIX termios.h... good!" >&4;;
16233 *) if ./Cppsym pyr; then
16234                 case "`/bin/universe`" in
16235                 ucb) if $test `./findhdr sgtty.h`; then
16236                                 val2="$define"
16237                                 echo "<sgtty.h> found." >&4
16238                         else
16239                                 echo "System is pyramid with BSD universe."
16240                                 echo "<sgtty.h> not found--you could have problems." >&4
16241                         fi;;
16242                 *) if $test `./findhdr termio.h`; then
16243                                 val="$define"
16244                                 echo "<termio.h> found." >&4
16245                         else
16246                                 echo "System is pyramid with USG universe."
16247                                 echo "<termio.h> not found--you could have problems." >&4
16248                         fi;;
16249                 esac
16250         elif ./usg; then
16251                 if $test `./findhdr termio.h`; then
16252                         echo "<termio.h> found." >&4
16253                         val="$define"
16254                 elif $test `./findhdr sgtty.h`; then
16255                         echo "<sgtty.h> found." >&4
16256                         val2="$define"
16257                 else
16258 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16259                 fi
16260         else
16261                 if $test `./findhdr sgtty.h`; then
16262                         echo "<sgtty.h> found." >&4
16263                         val2="$define"
16264                 elif $test `./findhdr termio.h`; then
16265                         echo "<termio.h> found." >&4
16266                         val="$define"
16267                 else
16268 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16269                 fi
16270         fi;;
16271 esac
16272 set i_termio; eval $setvar
16273 val=$val2; set i_sgtty; eval $setvar
16274 val=$val3; set i_termios; eval $setvar
16275
16276 : see if this is a shadow.h system
16277 set shadow.h i_shadow
16278 eval $inhdr
16279
16280 : see if stddef is available
16281 set stddef.h i_stddef
16282 eval $inhdr
16283
16284 : see if this is a sunmath.h system
16285 set sunmath.h i_sunmath
16286 eval $inhdr
16287
16288 : see if sys/access.h is available
16289 set sys/access.h i_sysaccess
16290 eval $inhdr
16291
16292 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16293 set sys/filio.h i_sysfilio
16294 eval $inhdr
16295 echo " "
16296 if $test `./findhdr sys/ioctl.h`; then
16297         val="$define"
16298         echo '<sys/ioctl.h> found.' >&4
16299 else
16300         val="$undef"
16301         if $test $i_sysfilio = "$define"; then
16302             echo '<sys/ioctl.h> NOT found.' >&4
16303         else
16304                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16305                 $test $i_termio = "$define" && xxx="termio.h"
16306                 $test $i_termios = "$define" && xxx="termios.h"
16307 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16308         fi
16309 fi
16310 set i_sysioctl
16311 eval $setvar
16312
16313 : see if socket ioctl defs are in sys/sockio.h
16314 echo " "
16315 xxx=`./findhdr sys/sockio.h`
16316 if $test "$xxx"; then
16317         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16318                 val="$define"
16319                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16320         else
16321                 val="$undef"
16322                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16323         fi
16324 else
16325         val="$undef"
16326         $cat <<EOM
16327 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16328 EOM
16329 fi
16330 set i_syssockio
16331 eval $setvar
16332
16333
16334 : see if this is a syslog.h system
16335 set syslog.h i_syslog
16336 eval $inhdr
16337
16338
16339 : see if this is a sys/mode.h system
16340 set sys/mode.h i_sysmode
16341 eval $inhdr
16342
16343 : see if sys/resource.h has to be included
16344 set sys/resource.h i_sysresrc
16345 eval $inhdr
16346
16347 : see if sys/security.h is available
16348 set sys/security.h i_syssecrt
16349 eval $inhdr
16350
16351 : see if this is a sys/statvfs.h system
16352 set sys/statvfs.h i_sysstatvfs
16353 eval $inhdr
16354
16355 : see if this is a sys/un.h system
16356 set sys/un.h i_sysun
16357 eval $inhdr
16358
16359
16360 : see if this is a sys/utsname.h system
16361 set sys/utsname.h i_sysutsname
16362 eval $inhdr
16363
16364 : see if this is a syswait system
16365 set sys/wait.h i_syswait
16366 eval $inhdr
16367
16368 : see if this is a ustat.h system
16369 set ustat.h i_ustat
16370 eval $inhdr
16371
16372 : see if this is an utime system
16373 set utime.h i_utime
16374 eval $inhdr
16375
16376 : see if this is a values.h system
16377 set values.h i_values
16378 eval $inhdr
16379
16380 : see if this is a vfork system
16381 case "$d_vfork" in
16382 "$define")
16383         set vfork.h i_vfork
16384         eval $inhdr
16385         ;;
16386 *)
16387         i_vfork="$undef"
16388         ;;
16389 esac
16390
16391 : see if gdbm.h is available
16392 set gdbm.h t_gdbm
16393 eval $inhdr
16394 case "$t_gdbm" in
16395 $define)
16396         : see if gdbm_open exists
16397         set gdbm_open d_gdbm_open
16398         eval $inlibc
16399         case "$d_gdbm_open" in
16400         $undef)
16401                 t_gdbm="$undef"
16402                 echo "We won't be including <gdbm.h>"
16403                 ;;
16404         esac
16405         ;;
16406 esac
16407 val="$t_gdbm"
16408 set i_gdbm
16409 eval $setvar
16410
16411 echo " "
16412 echo "Looking for extensions..." >&4
16413 : If we are using the old config.sh, known_extensions may contain
16414 : old or inaccurate or duplicate values.
16415 known_extensions=''
16416 nonxs_extensions=''
16417 : We do not use find because it might not be available.
16418 : We do not just use MANIFEST because the user may have dropped
16419 : some additional extensions into the source tree and expect them
16420 : to be built.
16421
16422 : Function to recursively find available extensions, ignoring DynaLoader
16423 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16424 find_extensions='
16425     for xxx in *; do
16426        case "$xxx" in
16427            DynaLoader|dynaload) ;;
16428            *)
16429            if $test -f $xxx/$xxx.xs; then
16430                known_extensions="$known_extensions $1$xxx";
16431            elif $test -f $xxx/Makefile.PL; then
16432                nonxs_extensions="$nonxs_extensions $1$xxx";
16433            else
16434                if $test -d $xxx -a $# -lt 10; then
16435                    set $1$xxx/ $*;
16436                    cd $xxx;
16437                    eval $find_extensions;
16438                    cd ..;
16439                    shift;
16440                fi;
16441            fi
16442            ;;
16443        esac;
16444     done'
16445 tdir=`pwd`
16446 cd $rsrc/ext
16447 set X
16448 shift
16449 eval $find_extensions
16450 # Special case:  Add in threads/shared since it is not picked up by the
16451 # recursive find above (and adding in general recursive finding breaks
16452 # SDBM_File/sdbm).  A.D.  10/25/2001.
16453 known_extensions="$known_extensions threads/shared"
16454 set X $nonxs_extensions
16455 shift
16456 nonxs_extensions="$*"
16457 set X $known_extensions
16458 shift
16459 known_extensions="$*"
16460 cd $tdir
16461
16462 : Now see which are supported on this system.
16463 avail_ext=''
16464 for xxx in $known_extensions ; do
16465         case "$xxx" in
16466         DB_File|db_file)
16467                 case "$i_db" in
16468                 $define) avail_ext="$avail_ext $xxx" ;;
16469                 esac
16470                 ;;
16471         GDBM_File|gdbm_fil)
16472                 case "$i_gdbm" in 
16473                 $define) avail_ext="$avail_ext $xxx" ;;
16474                 esac
16475                 ;;
16476         I18N/Langinfo|i18n_lan)
16477                 case "$i_langinfo$d_nl_langinfo" in 
16478                 $define$define) avail_ext="$avail_ext $xxx" ;;
16479                 esac
16480                 ;;
16481         NDBM_File|ndbm_fil)
16482                 case "$i_ndbm" in
16483                 $define)
16484                     case "$osname-$use64bitint" in
16485                     cygwin-*|hpux-define)
16486                         case "$libs" in
16487                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16488                         esac
16489                         ;;
16490                     *) avail_ext="$avail_ext $xxx" ;;
16491                     esac
16492                     ;;
16493                 esac
16494                 ;;
16495         ODBM_File|odbm_fil) 
16496                 case "${i_dbm}${i_rpcsvcdbm}" in
16497                 *"${define}"*)
16498                     case "$osname-$use64bitint" in
16499                     cygwin-*|hpux-define)
16500                         case "$libs" in
16501                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16502                         esac
16503                         ;;
16504                     *) avail_ext="$avail_ext $xxx" ;;
16505                     esac
16506                     ;;
16507                 esac
16508                 ;;
16509         POSIX|posix)
16510                 case "$useposix" in
16511                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16512                 esac
16513                 ;;
16514         Opcode|opcode)
16515                 case "$useopcode" in
16516                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16517                 esac
16518                 ;;
16519         Socket|socket)
16520                 case "$d_socket" in 
16521                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16522                 esac
16523                 ;;
16524         Sys/Syslog|sys/syslog)
16525                 : XXX syslog requires socket
16526                 case "$d_socket" in 
16527                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16528                 esac
16529                 ;;
16530         Thread|thread)
16531                 case "$usethreads" in
16532                 true|$define|y)
16533                         case "$useithreads" in
16534                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16535                         esac
16536                 esac
16537                 ;;
16538         threads|threads/shared)
16539                 case "$usethreads" in
16540                 true|$define|y)
16541                         case "$useithreads" in
16542                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16543                         esac
16544                 esac
16545                 ;;
16546         IPC/SysV|ipc/sysv)
16547                 : XXX Do we need a useipcsysv variable here
16548                 case "${d_msg}${d_sem}${d_shm}" in 
16549                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16550                 esac
16551                 ;;
16552         *)      avail_ext="$avail_ext $xxx"
16553                 ;;
16554         esac
16555 done
16556
16557 set X $avail_ext
16558 shift
16559 avail_ext="$*"
16560
16561 : Now see which nonxs extensions are supported on this system.
16562 : For now assume all are.
16563 nonxs_ext=''
16564 for xxx in $nonxs_extensions ; do
16565         case "$xxx" in
16566         *)      nonxs_ext="$nonxs_ext $xxx"
16567                 ;;
16568         esac
16569 done
16570
16571 set X $nonxs_ext
16572 shift
16573 nonxs_ext="$*"
16574
16575 case $usedl in
16576 $define)
16577         $cat <<EOM
16578 A number of extensions are supplied with $package.  You may choose to
16579 compile these extensions for dynamic loading (the default), compile
16580 them into the $package executable (static loading), or not include
16581 them at all.  Answer "none" to include no extensions.
16582 Note that DynaLoader is always built and need not be mentioned here.
16583
16584 EOM
16585         case "$dynamic_ext" in
16586         '') dflt="$avail_ext" ;;
16587         *)      dflt="$dynamic_ext"
16588                 # Perhaps we are reusing an old out-of-date config.sh.
16589                 case "$hint" in
16590                 previous)
16591                         if test X"$dynamic_ext" != X"$avail_ext"; then
16592                                 $cat <<EOM
16593 NOTICE:  Your previous config.sh list may be incorrect. 
16594 The extensions now available to you are 
16595         ${avail_ext}
16596 but the default list from your previous config.sh is
16597         ${dynamic_ext} 
16598
16599 EOM
16600                         fi
16601                         ;;
16602                 esac
16603                 ;;
16604         esac
16605         case "$dflt" in
16606         '')     dflt=none;;
16607         esac
16608         rp="What extensions do you wish to load dynamically?"
16609         . ./myread
16610         case "$ans" in
16611         none) dynamic_ext=' ' ;;
16612         *) dynamic_ext="$ans" ;;
16613         esac
16614
16615         case "$static_ext" in
16616         '')
16617                 : Exclude those already listed in dynamic linking
16618                 dflt=''
16619                 for xxx in $avail_ext; do
16620                         case " $dynamic_ext " in
16621                         *" $xxx "*) ;;
16622                         *) dflt="$dflt $xxx" ;;
16623                         esac
16624                 done
16625                 set X $dflt
16626                 shift
16627                 dflt="$*"
16628                 ;;
16629         *)  dflt="$static_ext" 
16630                 ;;
16631         esac
16632
16633         case "$dflt" in
16634         '')     dflt=none;;
16635         esac
16636         rp="What extensions do you wish to load statically?"
16637         . ./myread
16638         case "$ans" in
16639         none) static_ext=' ' ;;
16640         *) static_ext="$ans" ;;
16641         esac
16642         ;;
16643 *)
16644         $cat <<EOM
16645 A number of extensions are supplied with $package.  Answer "none" 
16646 to include no extensions. 
16647 Note that DynaLoader is always built and need not be mentioned here.
16648
16649 EOM
16650         case "$static_ext" in
16651         '') dflt="$avail_ext" ;;
16652         *)      dflt="$static_ext"
16653                 # Perhaps we are reusing an old out-of-date config.sh.
16654                 case "$hint" in
16655                 previous)
16656                         if test X"$static_ext" != X"$avail_ext"; then
16657                                 $cat <<EOM
16658 NOTICE:  Your previous config.sh list may be incorrect. 
16659 The extensions now available to you are 
16660         ${avail_ext}
16661 but the default list from your previous config.sh is
16662         ${static_ext} 
16663
16664 EOM
16665                         fi
16666                         ;;
16667                 esac
16668                 ;;
16669         esac
16670         : Exclude those that are not xs extensions
16671         case "$dflt" in
16672         '')     dflt=none;;
16673         esac
16674         rp="What extensions do you wish to include?"
16675         . ./myread
16676         case "$ans" in
16677         none) static_ext=' ' ;;
16678         *) static_ext="$ans" ;;
16679         esac
16680         ;;
16681 esac
16682
16683 set X $dynamic_ext $static_ext $nonxs_ext
16684 shift
16685 extensions="$*"
16686
16687 : Remove libraries needed only for extensions
16688 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16689 : The exception is SunOS 4.x, which needs them.
16690 case "${osname}X${osvers}" in
16691 sunos*X4*)
16692     perllibs="$libs"
16693     ;;
16694 *) case "$usedl" in
16695     $define|true|[yY]*)
16696             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16697             shift
16698             perllibs="$*"
16699             ;;
16700     *)  perllibs="$libs"
16701             ;;
16702     esac
16703     ;;
16704 esac
16705
16706 : Remove build directory name from cppstdin so it can be used from
16707 : either the present location or the final installed location.
16708 echo " "
16709 : Get out of the UU directory to get correct path name.
16710 cd ..
16711 case "$cppstdin" in
16712 `pwd`/cppstdin)
16713         echo "Stripping down cppstdin path name"
16714         cppstdin=cppstdin
16715         ;;
16716 esac
16717 cd UU
16718
16719 : end of configuration questions
16720 echo " "
16721 echo "End of configuration questions."
16722 echo " "
16723
16724 : back to where it started
16725 if test -d ../UU; then
16726         cd ..
16727 fi
16728
16729 : configuration may be patched via a 'config.arch' file
16730 if $test -f config.arch; then
16731         echo "I see a config.arch file, loading it."
16732         . ./config.arch
16733 fi
16734
16735 : configuration may be patched via a 'config.over' file
16736 if $test -f config.over; then
16737         echo " "
16738         dflt=y
16739         rp='I see a config.over file.  Do you wish to load it?'
16740         . UU/myread
16741         case "$ans" in
16742         n*) echo "OK, I'll ignore it.";;
16743         *)      . ./config.over
16744                 echo "Configuration override changes have been loaded."
16745                 ;;
16746         esac
16747 fi
16748
16749 : in case they want portability, strip down executable paths
16750 case "$d_portable" in
16751 "$define")
16752         echo " "
16753         echo "Stripping down executable paths..." >&4
16754         for file in $loclist $trylist; do
16755                 eval temp=\$$file
16756                 eval $file=`basename $temp`
16757         done
16758         ;;
16759 esac
16760
16761 : create config.sh file
16762 echo " "
16763 echo "Creating config.sh..." >&4
16764 $spitshell <<EOT >config.sh
16765 $startsh
16766 #
16767 # This file was produced by running the Configure script. It holds all the
16768 # definitions figured out by Configure. Should you modify one of these values,
16769 # do not forget to propagate your changes by running "Configure -der". You may
16770 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16771 #
16772
16773 # Package name      : $package
16774 # Source directory  : $src
16775 # Configuration time: $cf_time
16776 # Configured by     : $cf_by
16777 # Target system     : $myuname
16778
16779 Author='$Author'
16780 Date='$Date'
16781 Header='$Header'
16782 Id='$Id'
16783 Locker='$Locker'
16784 Log='$Log'
16785 Mcc='$Mcc'
16786 RCSfile='$RCSfile'
16787 Revision='$Revision'
16788 Source='$Source'
16789 State='$State'
16790 _a='$_a'
16791 _exe='$_exe'
16792 _o='$_o'
16793 afs='$afs'
16794 afsroot='$afsroot'
16795 alignbytes='$alignbytes'
16796 ansi2knr='$ansi2knr'
16797 aphostname='$aphostname'
16798 api_revision='$api_revision'
16799 api_subversion='$api_subversion'
16800 api_version='$api_version'
16801 api_versionstring='$api_versionstring'
16802 ar='$ar'
16803 archlib='$archlib'
16804 archlibexp='$archlibexp'
16805 archname64='$archname64'
16806 archname='$archname'
16807 archobjs='$archobjs'
16808 awk='$awk'
16809 baserev='$baserev'
16810 bash='$bash'
16811 bin='$bin'
16812 bincompat5005='$bincompat5005'
16813 binexp='$binexp'
16814 bison='$bison'
16815 byacc='$byacc'
16816 byteorder='$byteorder'
16817 c='$c'
16818 castflags='$castflags'
16819 cat='$cat'
16820 cc='$cc'
16821 cccdlflags='$cccdlflags'
16822 ccdlflags='$ccdlflags'
16823 ccflags='$ccflags'
16824 ccflags_uselargefiles='$ccflags_uselargefiles'
16825 ccname='$ccname'
16826 ccsymbols='$ccsymbols'
16827 ccversion='$ccversion'
16828 cf_by='$cf_by'
16829 cf_email='$cf_email'
16830 cf_time='$cf_time'
16831 charsize='$charsize'
16832 chgrp='$chgrp'
16833 chmod='$chmod'
16834 chown='$chown'
16835 clocktype='$clocktype'
16836 comm='$comm'
16837 compress='$compress'
16838 contains='$contains'
16839 cp='$cp'
16840 cpio='$cpio'
16841 cpp='$cpp'
16842 cpp_stuff='$cpp_stuff'
16843 cppccsymbols='$cppccsymbols'
16844 cppflags='$cppflags'
16845 cpplast='$cpplast'
16846 cppminus='$cppminus'
16847 cpprun='$cpprun'
16848 cppstdin='$cppstdin'
16849 cppsymbols='$cppsymbols'
16850 cryptlib='$cryptlib'
16851 csh='$csh'
16852 d_Gconvert='$d_Gconvert'
16853 d_PRIEUldbl='$d_PRIEUldbl'
16854 d_PRIFUldbl='$d_PRIFUldbl'
16855 d_PRIGUldbl='$d_PRIGUldbl'
16856 d_PRIXU64='$d_PRIXU64'
16857 d_PRId64='$d_PRId64'
16858 d_PRIeldbl='$d_PRIeldbl'
16859 d_PRIfldbl='$d_PRIfldbl'
16860 d_PRIgldbl='$d_PRIgldbl'
16861 d_PRIi64='$d_PRIi64'
16862 d_PRIo64='$d_PRIo64'
16863 d_PRIu64='$d_PRIu64'
16864 d_PRIx64='$d_PRIx64'
16865 d_SCNfldbl='$d_SCNfldbl'
16866 d__fwalk='$d__fwalk'
16867 d_access='$d_access'
16868 d_accessx='$d_accessx'
16869 d_alarm='$d_alarm'
16870 d_archlib='$d_archlib'
16871 d_atolf='$d_atolf'
16872 d_atoll='$d_atoll'
16873 d_attribut='$d_attribut'
16874 d_bcmp='$d_bcmp'
16875 d_bcopy='$d_bcopy'
16876 d_bincompat5005='$d_bincompat5005'
16877 d_bsd='$d_bsd'
16878 d_bsdgetpgrp='$d_bsdgetpgrp'
16879 d_bsdsetpgrp='$d_bsdsetpgrp'
16880 d_bzero='$d_bzero'
16881 d_casti32='$d_casti32'
16882 d_castneg='$d_castneg'
16883 d_charvspr='$d_charvspr'
16884 d_chown='$d_chown'
16885 d_chroot='$d_chroot'
16886 d_chsize='$d_chsize'
16887 d_class='$d_class'
16888 d_closedir='$d_closedir'
16889 d_cmsghdr_s='$d_cmsghdr_s'
16890 d_const='$d_const'
16891 d_crypt='$d_crypt'
16892 d_csh='$d_csh'
16893 d_cuserid='$d_cuserid'
16894 d_dbl_dig='$d_dbl_dig'
16895 d_dbminitproto='$d_dbminitproto'
16896 d_difftime='$d_difftime'
16897 d_dirfd='$d_dirfd'
16898 d_dirnamlen='$d_dirnamlen'
16899 d_dlerror='$d_dlerror'
16900 d_dlopen='$d_dlopen'
16901 d_dlsymun='$d_dlsymun'
16902 d_dosuid='$d_dosuid'
16903 d_drand48proto='$d_drand48proto'
16904 d_dup2='$d_dup2'
16905 d_eaccess='$d_eaccess'
16906 d_endgrent='$d_endgrent'
16907 d_endhent='$d_endhent'
16908 d_endnent='$d_endnent'
16909 d_endpent='$d_endpent'
16910 d_endpwent='$d_endpwent'
16911 d_endsent='$d_endsent'
16912 d_eofnblk='$d_eofnblk'
16913 d_eunice='$d_eunice'
16914 d_fchdir='$d_fchdir'
16915 d_fchmod='$d_fchmod'
16916 d_fchown='$d_fchown'
16917 d_fcntl='$d_fcntl'
16918 d_fcntl_can_lock='$d_fcntl_can_lock'
16919 d_fd_macros='$d_fd_macros'
16920 d_fd_set='$d_fd_set'
16921 d_fds_bits='$d_fds_bits'
16922 d_fgetpos='$d_fgetpos'
16923 d_finite='$d_finite'
16924 d_finitel='$d_finitel'
16925 d_flexfnam='$d_flexfnam'
16926 d_flock='$d_flock'
16927 d_flockproto='$d_flockproto'
16928 d_fork='$d_fork'
16929 d_fp_class='$d_fp_class'
16930 d_fpathconf='$d_fpathconf'
16931 d_fpclass='$d_fpclass'
16932 d_fpclassify='$d_fpclassify'
16933 d_fpclassl='$d_fpclassl'
16934 d_fpos64_t='$d_fpos64_t'
16935 d_frexpl='$d_frexpl'
16936 d_fs_data_s='$d_fs_data_s'
16937 d_fseeko='$d_fseeko'
16938 d_fsetpos='$d_fsetpos'
16939 d_fstatfs='$d_fstatfs'
16940 d_fstatvfs='$d_fstatvfs'
16941 d_fsync='$d_fsync'
16942 d_ftello='$d_ftello'
16943 d_ftime='$d_ftime'
16944 d_getcwd='$d_getcwd'
16945 d_getespwnam='$d_getespwnam'
16946 d_getfsstat='$d_getfsstat'
16947 d_getgrent='$d_getgrent'
16948 d_getgrps='$d_getgrps'
16949 d_gethbyaddr='$d_gethbyaddr'
16950 d_gethbyname='$d_gethbyname'
16951 d_gethent='$d_gethent'
16952 d_gethname='$d_gethname'
16953 d_gethostprotos='$d_gethostprotos'
16954 d_getitimer='$d_getitimer'
16955 d_getlogin='$d_getlogin'
16956 d_getmnt='$d_getmnt'
16957 d_getmntent='$d_getmntent'
16958 d_getnbyaddr='$d_getnbyaddr'
16959 d_getnbyname='$d_getnbyname'
16960 d_getnent='$d_getnent'
16961 d_getnetprotos='$d_getnetprotos'
16962 d_getpagsz='$d_getpagsz'
16963 d_getpbyname='$d_getpbyname'
16964 d_getpbynumber='$d_getpbynumber'
16965 d_getpent='$d_getpent'
16966 d_getpgid='$d_getpgid'
16967 d_getpgrp2='$d_getpgrp2'
16968 d_getpgrp='$d_getpgrp'
16969 d_getppid='$d_getppid'
16970 d_getprior='$d_getprior'
16971 d_getprotoprotos='$d_getprotoprotos'
16972 d_getprpwnam='$d_getprpwnam'
16973 d_getpwent='$d_getpwent'
16974 d_getsbyname='$d_getsbyname'
16975 d_getsbyport='$d_getsbyport'
16976 d_getsent='$d_getsent'
16977 d_getservprotos='$d_getservprotos'
16978 d_getspnam='$d_getspnam'
16979 d_gettimeod='$d_gettimeod'
16980 d_gnulibc='$d_gnulibc'
16981 d_grpasswd='$d_grpasswd'
16982 d_hasmntopt='$d_hasmntopt'
16983 d_htonl='$d_htonl'
16984 d_index='$d_index'
16985 d_inetaton='$d_inetaton'
16986 d_int64_t='$d_int64_t'
16987 d_isascii='$d_isascii'
16988 d_isfinite='$d_isfinite'
16989 d_isinf='$d_isinf'
16990 d_isnan='$d_isnan'
16991 d_isnanl='$d_isnanl'
16992 d_killpg='$d_killpg'
16993 d_lchown='$d_lchown'
16994 d_ldbl_dig='$d_ldbl_dig'
16995 d_link='$d_link'
16996 d_locconv='$d_locconv'
16997 d_lockf='$d_lockf'
16998 d_longdbl='$d_longdbl'
16999 d_longlong='$d_longlong'
17000 d_lseekproto='$d_lseekproto'
17001 d_lstat='$d_lstat'
17002 d_madvise='$d_madvise'
17003 d_mblen='$d_mblen'
17004 d_mbstowcs='$d_mbstowcs'
17005 d_mbtowc='$d_mbtowc'
17006 d_memchr='$d_memchr'
17007 d_memcmp='$d_memcmp'
17008 d_memcpy='$d_memcpy'
17009 d_memmove='$d_memmove'
17010 d_memset='$d_memset'
17011 d_mkdir='$d_mkdir'
17012 d_mkdtemp='$d_mkdtemp'
17013 d_mkfifo='$d_mkfifo'
17014 d_mkstemp='$d_mkstemp'
17015 d_mkstemps='$d_mkstemps'
17016 d_mktime='$d_mktime'
17017 d_mmap='$d_mmap'
17018 d_modfl='$d_modfl'
17019 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17020 d_mprotect='$d_mprotect'
17021 d_msg='$d_msg'
17022 d_msg_ctrunc='$d_msg_ctrunc'
17023 d_msg_dontroute='$d_msg_dontroute'
17024 d_msg_oob='$d_msg_oob'
17025 d_msg_peek='$d_msg_peek'
17026 d_msg_proxy='$d_msg_proxy'
17027 d_msgctl='$d_msgctl'
17028 d_msgget='$d_msgget'
17029 d_msghdr_s='$d_msghdr_s'
17030 d_msgrcv='$d_msgrcv'
17031 d_msgsnd='$d_msgsnd'
17032 d_msync='$d_msync'
17033 d_munmap='$d_munmap'
17034 d_mymalloc='$d_mymalloc'
17035 d_nice='$d_nice'
17036 d_nl_langinfo='$d_nl_langinfo'
17037 d_nv_preserves_uv='$d_nv_preserves_uv'
17038 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17039 d_off64_t='$d_off64_t'
17040 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17041 d_oldpthreads='$d_oldpthreads'
17042 d_oldsock='$d_oldsock'
17043 d_open3='$d_open3'
17044 d_pathconf='$d_pathconf'
17045 d_pause='$d_pause'
17046 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17047 d_phostname='$d_phostname'
17048 d_pipe='$d_pipe'
17049 d_poll='$d_poll'
17050 d_portable='$d_portable'
17051 d_procselfexe='$d_procselfexe'
17052 d_pthread_atfork='$d_pthread_atfork'
17053 d_pthread_yield='$d_pthread_yield'
17054 d_pwage='$d_pwage'
17055 d_pwchange='$d_pwchange'
17056 d_pwclass='$d_pwclass'
17057 d_pwcomment='$d_pwcomment'
17058 d_pwexpire='$d_pwexpire'
17059 d_pwgecos='$d_pwgecos'
17060 d_pwpasswd='$d_pwpasswd'
17061 d_pwquota='$d_pwquota'
17062 d_qgcvt='$d_qgcvt'
17063 d_quad='$d_quad'
17064 d_readdir='$d_readdir'
17065 d_readlink='$d_readlink'
17066 d_readv='$d_readv'
17067 d_recvmsg='$d_recvmsg'
17068 d_rename='$d_rename'
17069 d_rewinddir='$d_rewinddir'
17070 d_rmdir='$d_rmdir'
17071 d_safebcpy='$d_safebcpy'
17072 d_safemcpy='$d_safemcpy'
17073 d_sanemcmp='$d_sanemcmp'
17074 d_sbrkproto='$d_sbrkproto'
17075 d_sched_yield='$d_sched_yield'
17076 d_scm_rights='$d_scm_rights'
17077 d_seekdir='$d_seekdir'
17078 d_select='$d_select'
17079 d_sem='$d_sem'
17080 d_semctl='$d_semctl'
17081 d_semctl_semid_ds='$d_semctl_semid_ds'
17082 d_semctl_semun='$d_semctl_semun'
17083 d_semget='$d_semget'
17084 d_semop='$d_semop'
17085 d_sendmsg='$d_sendmsg'
17086 d_setegid='$d_setegid'
17087 d_seteuid='$d_seteuid'
17088 d_setgrent='$d_setgrent'
17089 d_setgrps='$d_setgrps'
17090 d_sethent='$d_sethent'
17091 d_setitimer='$d_setitimer'
17092 d_setlinebuf='$d_setlinebuf'
17093 d_setlocale='$d_setlocale'
17094 d_setnent='$d_setnent'
17095 d_setpent='$d_setpent'
17096 d_setpgid='$d_setpgid'
17097 d_setpgrp2='$d_setpgrp2'
17098 d_setpgrp='$d_setpgrp'
17099 d_setprior='$d_setprior'
17100 d_setproctitle='$d_setproctitle'
17101 d_setpwent='$d_setpwent'
17102 d_setregid='$d_setregid'
17103 d_setresgid='$d_setresgid'
17104 d_setresuid='$d_setresuid'
17105 d_setreuid='$d_setreuid'
17106 d_setrgid='$d_setrgid'
17107 d_setruid='$d_setruid'
17108 d_setsent='$d_setsent'
17109 d_setsid='$d_setsid'
17110 d_setvbuf='$d_setvbuf'
17111 d_sfio='$d_sfio'
17112 d_shm='$d_shm'
17113 d_shmat='$d_shmat'
17114 d_shmatprototype='$d_shmatprototype'
17115 d_shmctl='$d_shmctl'
17116 d_shmdt='$d_shmdt'
17117 d_shmget='$d_shmget'
17118 d_sigaction='$d_sigaction'
17119 d_sigprocmask='$d_sigprocmask'
17120 d_sigsetjmp='$d_sigsetjmp'
17121 d_sockatmark='$d_sockatmark'
17122 d_sockatmarkproto='$d_sockatmarkproto'
17123 d_socket='$d_socket'
17124 d_socklen_t='$d_socklen_t'
17125 d_sockpair='$d_sockpair'
17126 d_socks5_init='$d_socks5_init'
17127 d_sqrtl='$d_sqrtl'
17128 d_sresgproto='$d_sresgproto'
17129 d_sresuproto='$d_sresuproto'
17130 d_statblks='$d_statblks'
17131 d_statfs_f_flags='$d_statfs_f_flags'
17132 d_statfs_s='$d_statfs_s'
17133 d_statvfs='$d_statvfs'
17134 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17135 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17136 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17137 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17138 d_stdio_stream_array='$d_stdio_stream_array'
17139 d_stdiobase='$d_stdiobase'
17140 d_stdstdio='$d_stdstdio'
17141 d_strchr='$d_strchr'
17142 d_strcoll='$d_strcoll'
17143 d_strctcpy='$d_strctcpy'
17144 d_strerrm='$d_strerrm'
17145 d_strerror='$d_strerror'
17146 d_strftime='$d_strftime'
17147 d_strtod='$d_strtod'
17148 d_strtol='$d_strtol'
17149 d_strtold='$d_strtold'
17150 d_strtoll='$d_strtoll'
17151 d_strtoq='$d_strtoq'
17152 d_strtoul='$d_strtoul'
17153 d_strtoull='$d_strtoull'
17154 d_strtouq='$d_strtouq'
17155 d_strxfrm='$d_strxfrm'
17156 d_suidsafe='$d_suidsafe'
17157 d_symlink='$d_symlink'
17158 d_syscall='$d_syscall'
17159 d_syscallproto='$d_syscallproto'
17160 d_sysconf='$d_sysconf'
17161 d_sysernlst='$d_sysernlst'
17162 d_syserrlst='$d_syserrlst'
17163 d_system='$d_system'
17164 d_tcgetpgrp='$d_tcgetpgrp'
17165 d_tcsetpgrp='$d_tcsetpgrp'
17166 d_telldir='$d_telldir'
17167 d_telldirproto='$d_telldirproto'
17168 d_time='$d_time'
17169 d_times='$d_times'
17170 d_truncate='$d_truncate'
17171 d_tzname='$d_tzname'
17172 d_u32align='$d_u32align'
17173 d_ualarm='$d_ualarm'
17174 d_umask='$d_umask'
17175 d_uname='$d_uname'
17176 d_union_semun='$d_union_semun'
17177 d_unordered='$d_unordered'
17178 d_usleep='$d_usleep'
17179 d_usleepproto='$d_usleepproto'
17180 d_ustat='$d_ustat'
17181 d_vendorarch='$d_vendorarch'
17182 d_vendorbin='$d_vendorbin'
17183 d_vendorlib='$d_vendorlib'
17184 d_vfork='$d_vfork'
17185 d_void_closedir='$d_void_closedir'
17186 d_voidsig='$d_voidsig'
17187 d_voidtty='$d_voidtty'
17188 d_volatile='$d_volatile'
17189 d_vprintf='$d_vprintf'
17190 d_wait4='$d_wait4'
17191 d_waitpid='$d_waitpid'
17192 d_wcstombs='$d_wcstombs'
17193 d_wctomb='$d_wctomb'
17194 d_writev='$d_writev'
17195 d_xenix='$d_xenix'
17196 date='$date'
17197 db_hashtype='$db_hashtype'
17198 db_prefixtype='$db_prefixtype'
17199 db_version_major='$db_version_major'
17200 db_version_minor='$db_version_minor'
17201 db_version_patch='$db_version_patch'
17202 defvoidused='$defvoidused'
17203 direntrytype='$direntrytype'
17204 dlext='$dlext'
17205 dlsrc='$dlsrc'
17206 doublesize='$doublesize'
17207 drand01='$drand01'
17208 dynamic_ext='$dynamic_ext'
17209 eagain='$eagain'
17210 ebcdic='$ebcdic'
17211 echo='$echo'
17212 egrep='$egrep'
17213 emacs='$emacs'
17214 eunicefix='$eunicefix'
17215 exe_ext='$exe_ext'
17216 expr='$expr'
17217 extensions='$extensions'
17218 extras='$extras'
17219 fflushNULL='$fflushNULL'
17220 fflushall='$fflushall'
17221 find='$find'
17222 firstmakefile='$firstmakefile'
17223 flex='$flex'
17224 fpossize='$fpossize'
17225 fpostype='$fpostype'
17226 freetype='$freetype'
17227 from='$from'
17228 full_ar='$full_ar'
17229 full_csh='$full_csh'
17230 full_sed='$full_sed'
17231 gccosandvers='$gccosandvers'
17232 gccversion='$gccversion'
17233 gidformat='$gidformat'
17234 gidsign='$gidsign'
17235 gidsize='$gidsize'
17236 gidtype='$gidtype'
17237 glibpth='$glibpth'
17238 grep='$grep'
17239 groupcat='$groupcat'
17240 groupstype='$groupstype'
17241 gzip='$gzip'
17242 h_fcntl='$h_fcntl'
17243 h_sysfile='$h_sysfile'
17244 hint='$hint'
17245 hostcat='$hostcat'
17246 i16size='$i16size'
17247 i16type='$i16type'
17248 i32size='$i32size'
17249 i32type='$i32type'
17250 i64size='$i64size'
17251 i64type='$i64type'
17252 i8size='$i8size'
17253 i8type='$i8type'
17254 i_arpainet='$i_arpainet'
17255 i_bsdioctl='$i_bsdioctl'
17256 i_db='$i_db'
17257 i_dbm='$i_dbm'
17258 i_dirent='$i_dirent'
17259 i_dld='$i_dld'
17260 i_dlfcn='$i_dlfcn'
17261 i_fcntl='$i_fcntl'
17262 i_float='$i_float'
17263 i_fp='$i_fp'
17264 i_fp_class='$i_fp_class'
17265 i_gdbm='$i_gdbm'
17266 i_grp='$i_grp'
17267 i_ieeefp='$i_ieeefp'
17268 i_inttypes='$i_inttypes'
17269 i_langinfo='$i_langinfo'
17270 i_libutil='$i_libutil'
17271 i_limits='$i_limits'
17272 i_locale='$i_locale'
17273 i_machcthr='$i_machcthr'
17274 i_malloc='$i_malloc'
17275 i_math='$i_math'
17276 i_memory='$i_memory'
17277 i_mntent='$i_mntent'
17278 i_ndbm='$i_ndbm'
17279 i_netdb='$i_netdb'
17280 i_neterrno='$i_neterrno'
17281 i_netinettcp='$i_netinettcp'
17282 i_niin='$i_niin'
17283 i_poll='$i_poll'
17284 i_prot='$i_prot'
17285 i_pthread='$i_pthread'
17286 i_pwd='$i_pwd'
17287 i_rpcsvcdbm='$i_rpcsvcdbm'
17288 i_sfio='$i_sfio'
17289 i_sgtty='$i_sgtty'
17290 i_shadow='$i_shadow'
17291 i_socks='$i_socks'
17292 i_stdarg='$i_stdarg'
17293 i_stddef='$i_stddef'
17294 i_stdlib='$i_stdlib'
17295 i_string='$i_string'
17296 i_sunmath='$i_sunmath'
17297 i_sysaccess='$i_sysaccess'
17298 i_sysdir='$i_sysdir'
17299 i_sysfile='$i_sysfile'
17300 i_sysfilio='$i_sysfilio'
17301 i_sysin='$i_sysin'
17302 i_sysioctl='$i_sysioctl'
17303 i_syslog='$i_syslog'
17304 i_sysmman='$i_sysmman'
17305 i_sysmode='$i_sysmode'
17306 i_sysmount='$i_sysmount'
17307 i_sysndir='$i_sysndir'
17308 i_sysparam='$i_sysparam'
17309 i_sysresrc='$i_sysresrc'
17310 i_syssecrt='$i_syssecrt'
17311 i_sysselct='$i_sysselct'
17312 i_syssockio='$i_syssockio'
17313 i_sysstat='$i_sysstat'
17314 i_sysstatfs='$i_sysstatfs'
17315 i_sysstatvfs='$i_sysstatvfs'
17316 i_systime='$i_systime'
17317 i_systimek='$i_systimek'
17318 i_systimes='$i_systimes'
17319 i_systypes='$i_systypes'
17320 i_sysuio='$i_sysuio'
17321 i_sysun='$i_sysun'
17322 i_sysutsname='$i_sysutsname'
17323 i_sysvfs='$i_sysvfs'
17324 i_syswait='$i_syswait'
17325 i_termio='$i_termio'
17326 i_termios='$i_termios'
17327 i_time='$i_time'
17328 i_unistd='$i_unistd'
17329 i_ustat='$i_ustat'
17330 i_utime='$i_utime'
17331 i_values='$i_values'
17332 i_varargs='$i_varargs'
17333 i_varhdr='$i_varhdr'
17334 i_vfork='$i_vfork'
17335 ignore_versioned_solibs='$ignore_versioned_solibs'
17336 inc_version_list='$inc_version_list'
17337 inc_version_list_init='$inc_version_list_init'
17338 incpath='$incpath'
17339 inews='$inews'
17340 installarchlib='$installarchlib'
17341 installbin='$installbin'
17342 installman1dir='$installman1dir'
17343 installman3dir='$installman3dir'
17344 installprefix='$installprefix'
17345 installprefixexp='$installprefixexp'
17346 installprivlib='$installprivlib'
17347 installscript='$installscript'
17348 installsitearch='$installsitearch'
17349 installsitebin='$installsitebin'
17350 installsitelib='$installsitelib'
17351 installstyle='$installstyle'
17352 installusrbinperl='$installusrbinperl'
17353 installvendorarch='$installvendorarch'
17354 installvendorbin='$installvendorbin'
17355 installvendorlib='$installvendorlib'
17356 intsize='$intsize'
17357 issymlink='$issymlink'
17358 ivdformat='$ivdformat'
17359 ivsize='$ivsize'
17360 ivtype='$ivtype'
17361 known_extensions='$known_extensions'
17362 ksh='$ksh'
17363 ld='$ld'
17364 lddlflags='$lddlflags'
17365 ldflags='$ldflags'
17366 ldflags_uselargefiles='$ldflags_uselargefiles'
17367 ldlibpthname='$ldlibpthname'
17368 less='$less'
17369 lib_ext='$lib_ext'
17370 libc='$libc'
17371 libperl='$libperl'
17372 libpth='$libpth'
17373 libs='$libs'
17374 libsdirs='$libsdirs'
17375 libsfiles='$libsfiles'
17376 libsfound='$libsfound'
17377 libspath='$libspath'
17378 libswanted='$libswanted'
17379 libswanted_uselargefiles='$libswanted_uselargefiles'
17380 line='$line'
17381 lint='$lint'
17382 lkflags='$lkflags'
17383 ln='$ln'
17384 lns='$lns'
17385 locincpth='$locincpth'
17386 loclibpth='$loclibpth'
17387 longdblsize='$longdblsize'
17388 longlongsize='$longlongsize'
17389 longsize='$longsize'
17390 lp='$lp'
17391 lpr='$lpr'
17392 ls='$ls'
17393 lseeksize='$lseeksize'
17394 lseektype='$lseektype'
17395 mail='$mail'
17396 mailx='$mailx'
17397 make='$make'
17398 make_set_make='$make_set_make'
17399 mallocobj='$mallocobj'
17400 mallocsrc='$mallocsrc'
17401 malloctype='$malloctype'
17402 man1dir='$man1dir'
17403 man1direxp='$man1direxp'
17404 man1ext='$man1ext'
17405 man3dir='$man3dir'
17406 man3direxp='$man3direxp'
17407 man3ext='$man3ext'
17408 mips_type='$mips_type'
17409 mkdir='$mkdir'
17410 mmaptype='$mmaptype'
17411 modetype='$modetype'
17412 more='$more'
17413 multiarch='$multiarch'
17414 mv='$mv'
17415 myarchname='$myarchname'
17416 mydomain='$mydomain'
17417 myhostname='$myhostname'
17418 myuname='$myuname'
17419 n='$n'
17420 need_va_copy='$need_va_copy'
17421 netdb_hlen_type='$netdb_hlen_type'
17422 netdb_host_type='$netdb_host_type'
17423 netdb_name_type='$netdb_name_type'
17424 netdb_net_type='$netdb_net_type'
17425 nm='$nm'
17426 nm_opt='$nm_opt'
17427 nm_so_opt='$nm_so_opt'
17428 nonxs_ext='$nonxs_ext'
17429 nroff='$nroff'
17430 nvEUformat='$nvEUformat'
17431 nvFUformat='$nvFUformat'
17432 nvGUformat='$nvGUformat'
17433 nveformat='$nveformat'
17434 nvfformat='$nvfformat'
17435 nvgformat='$nvgformat'
17436 nvsize='$nvsize'
17437 nvtype='$nvtype'
17438 o_nonblock='$o_nonblock'
17439 obj_ext='$obj_ext'
17440 old_pthread_create_joinable='$old_pthread_create_joinable'
17441 optimize='$optimize'
17442 orderlib='$orderlib'
17443 osname='$osname'
17444 osvers='$osvers'
17445 otherlibdirs='$otherlibdirs'
17446 package='$package'
17447 pager='$pager'
17448 passcat='$passcat'
17449 patchlevel='$patchlevel'
17450 path_sep='$path_sep'
17451 perl5='$perl5'
17452 perl='$perl'
17453 perl_patchlevel='$perl_patchlevel'
17454 perladmin='$perladmin'
17455 perllibs='$perllibs'
17456 perlpath='$perlpath'
17457 pg='$pg'
17458 phostname='$phostname'
17459 pidtype='$pidtype'
17460 plibpth='$plibpth'
17461 pm_apiversion='$pm_apiversion'
17462 pmake='$pmake'
17463 pr='$pr'
17464 prefix='$prefix'
17465 prefixexp='$prefixexp'
17466 privlib='$privlib'
17467 privlibexp='$privlibexp'
17468 procselfexe='$procselfexe'
17469 prototype='$prototype'
17470 ptrsize='$ptrsize'
17471 quadkind='$quadkind'
17472 quadtype='$quadtype'
17473 randbits='$randbits'
17474 randfunc='$randfunc'
17475 randseedtype='$randseedtype'
17476 ranlib='$ranlib'
17477 rd_nodata='$rd_nodata'
17478 revision='$revision'
17479 rm='$rm'
17480 rmail='$rmail'
17481 run='$run'
17482 runnm='$runnm'
17483 sPRIEUldbl='$sPRIEUldbl'
17484 sPRIFUldbl='$sPRIFUldbl'
17485 sPRIGUldbl='$sPRIGUldbl'
17486 sPRIXU64='$sPRIXU64'
17487 sPRId64='$sPRId64'
17488 sPRIeldbl='$sPRIeldbl'
17489 sPRIfldbl='$sPRIfldbl'
17490 sPRIgldbl='$sPRIgldbl'
17491 sPRIi64='$sPRIi64'
17492 sPRIo64='$sPRIo64'
17493 sPRIu64='$sPRIu64'
17494 sPRIx64='$sPRIx64'
17495 sSCNfldbl='$sSCNfldbl'
17496 sched_yield='$sched_yield'
17497 scriptdir='$scriptdir'
17498 scriptdirexp='$scriptdirexp'
17499 sed='$sed'
17500 seedfunc='$seedfunc'
17501 selectminbits='$selectminbits'
17502 selecttype='$selecttype'
17503 sendmail='$sendmail'
17504 sh='$sh'
17505 shar='$shar'
17506 sharpbang='$sharpbang'
17507 shmattype='$shmattype'
17508 shortsize='$shortsize'
17509 shrpenv='$shrpenv'
17510 shsharp='$shsharp'
17511 sig_count='$sig_count'
17512 sig_name='$sig_name'
17513 sig_name_init='$sig_name_init'
17514 sig_num='$sig_num'
17515 sig_num_init='$sig_num_init'
17516 sig_size='$sig_size'
17517 signal_t='$signal_t'
17518 sitearch='$sitearch'
17519 sitearchexp='$sitearchexp'
17520 sitebin='$sitebin'
17521 sitebinexp='$sitebinexp'
17522 sitelib='$sitelib'
17523 sitelib_stem='$sitelib_stem'
17524 sitelibexp='$sitelibexp'
17525 siteprefix='$siteprefix'
17526 siteprefixexp='$siteprefixexp'
17527 sizesize='$sizesize'
17528 sizetype='$sizetype'
17529 sleep='$sleep'
17530 smail='$smail'
17531 so='$so'
17532 sockethdr='$sockethdr'
17533 socketlib='$socketlib'
17534 socksizetype='$socksizetype'
17535 sort='$sort'
17536 spackage='$spackage'
17537 spitshell='$spitshell'
17538 src='$src'
17539 ssizetype='$ssizetype'
17540 startperl='$startperl'
17541 startsh='$startsh'
17542 static_ext='$static_ext'
17543 stdchar='$stdchar'
17544 stdio_base='$stdio_base'
17545 stdio_bufsiz='$stdio_bufsiz'
17546 stdio_cnt='$stdio_cnt'
17547 stdio_filbuf='$stdio_filbuf'
17548 stdio_ptr='$stdio_ptr'
17549 stdio_stream_array='$stdio_stream_array'
17550 strings='$strings'
17551 submit='$submit'
17552 subversion='$subversion'
17553 sysman='$sysman'
17554 tail='$tail'
17555 tar='$tar'
17556 targetarch='$targetarch'
17557 tbl='$tbl'
17558 tee='$tee'
17559 test='$test'
17560 timeincl='$timeincl'
17561 timetype='$timetype'
17562 to='$to'
17563 touch='$touch'
17564 tr='$tr'
17565 trnl='$trnl'
17566 troff='$troff'
17567 u16size='$u16size'
17568 u16type='$u16type'
17569 u32size='$u32size'
17570 u32type='$u32type'
17571 u64size='$u64size'
17572 u64type='$u64type'
17573 u8size='$u8size'
17574 u8type='$u8type'
17575 uidformat='$uidformat'
17576 uidsign='$uidsign'
17577 uidsize='$uidsize'
17578 uidtype='$uidtype'
17579 uname='$uname'
17580 uniq='$uniq'
17581 uquadtype='$uquadtype'
17582 use5005threads='$use5005threads'
17583 use64bitall='$use64bitall'
17584 use64bitint='$use64bitint'
17585 usecrosscompile='$usecrosscompile'
17586 usedl='$usedl'
17587 useithreads='$useithreads'
17588 uselargefiles='$uselargefiles'
17589 uselongdouble='$uselongdouble'
17590 usemorebits='$usemorebits'
17591 usemultiplicity='$usemultiplicity'
17592 usemymalloc='$usemymalloc'
17593 usenm='$usenm'
17594 useopcode='$useopcode'
17595 useperlio='$useperlio'
17596 useposix='$useposix'
17597 usereentrant='$usereentrant'
17598 usesfio='$usesfio'
17599 useshrplib='$useshrplib'
17600 usesocks='$usesocks'
17601 usethreads='$usethreads'
17602 usevendorprefix='$usevendorprefix'
17603 usevfork='$usevfork'
17604 usrinc='$usrinc'
17605 uuname='$uuname'
17606 uvXUformat='$uvXUformat'
17607 uvoformat='$uvoformat'
17608 uvsize='$uvsize'
17609 uvtype='$uvtype'
17610 uvuformat='$uvuformat'
17611 uvxformat='$uvxformat'
17612 vendorarch='$vendorarch'
17613 vendorarchexp='$vendorarchexp'
17614 vendorbin='$vendorbin'
17615 vendorbinexp='$vendorbinexp'
17616 vendorlib='$vendorlib'
17617 vendorlib_stem='$vendorlib_stem'
17618 vendorlibexp='$vendorlibexp'
17619 vendorprefix='$vendorprefix'
17620 vendorprefixexp='$vendorprefixexp'
17621 version='$version'
17622 version_patchlevel_string='$version_patchlevel_string'
17623 versiononly='$versiononly'
17624 vi='$vi'
17625 voidflags='$voidflags'
17626 xlibpth='$xlibpth'
17627 xs_apiversion='$xs_apiversion'
17628 yacc='$yacc'
17629 yaccflags='$yaccflags'
17630 zcat='$zcat'
17631 zip='$zip'
17632 EOT
17633
17634 : Add in command line options if available
17635 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17636
17637 : add special variables
17638 $test -f $src/patchlevel.h && \
17639 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17640 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17641 echo "PERL_CONFIG_SH=true" >>config.sh
17642
17643 : propagate old symbols
17644 if $test -f UU/config.sh; then
17645         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17646         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17647         $sort | $uniq -u >UU/oldsyms
17648         set X `cat UU/oldsyms`
17649         shift
17650         case $# in
17651         0) ;;
17652         *)
17653                 cat <<EOM
17654 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17655 EOM
17656                 echo "# Variables propagated from previous config.sh file." >>config.sh
17657                 for sym in `cat UU/oldsyms`; do
17658                         echo "    Propagating $hint variable "'$'"$sym..."
17659                         eval 'tmp="$'"${sym}"'"'
17660                         echo "$tmp" | \
17661                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17662                 done
17663                 ;;
17664         esac
17665 fi
17666
17667 : Finish up by extracting the .SH files
17668 case "$alldone" in
17669 exit)
17670         $rm -rf UU
17671         echo "Extraction done."
17672         exit 0
17673         ;;
17674 cont)
17675         ;;
17676 '')
17677         dflt=''
17678         nostick=true
17679         $cat <<EOM
17680
17681 If you'd like to make any changes to the config.sh file before I begin
17682 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17683
17684 EOM
17685         rp="Press return or use a shell escape to edit config.sh:"
17686         . UU/myread
17687         nostick=''
17688         case "$ans" in
17689         '') ;;
17690         *) : in case they cannot read
17691                 sh 1>&4 -c "$ans";;
17692         esac
17693         ;;
17694 esac
17695
17696 : if this fails, just run all the .SH files by hand
17697 . ./config.sh
17698
17699 echo " "
17700 exec 1>&4
17701 pwd=`pwd`
17702 . ./UU/extract
17703 cd $pwd
17704
17705 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17706         dflt=y
17707         case "$silent" in
17708         true) ;;
17709         *)
17710                 $cat <<EOM
17711
17712 Now you need to generate make dependencies by running "$make depend".
17713 You might prefer to run it in background: "$make depend > makedepend.out &"
17714 It can take a while, so you might not want to run it right now.
17715
17716 EOM
17717                 ;;
17718         esac
17719         rp="Run $make depend now?"
17720         . UU/myread
17721         case "$ans" in
17722         y*)
17723                 $make depend && echo "Now you must run '$make'."
17724                 ;;
17725         *)
17726                 echo "You must run '$make depend' then '$make'."
17727                 ;;
17728         esac
17729 elif test -f [Mm]akefile; then
17730         echo " "
17731         echo "Now you must run a $make."
17732 else
17733         echo "Configure done."
17734 fi
17735
17736 if $test -f Policy.sh; then
17737     $cat <<EOM
17738
17739 If you compile $package on a different machine or from a different object
17740 directory, copy the Policy.sh file from this object directory to the
17741 new one before you run Configure -- this will help you with most of
17742 the policy defaults.
17743
17744 EOM
17745 fi
17746 if $test -f config.msg; then
17747     echo "Hmm.  I also noted the following information while running:"
17748     echo " "
17749     $cat config.msg >&4
17750     $rm -f config.msg
17751 fi
17752 $rm -f kit*isdone ark*isdone
17753 $rm -rf UU
17754
17755 : End of Configure
17756