This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Socket::my_inet_aton() tweak
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Sun Nov 25 08:58:37 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                 fi
11527         fi
11528         if $issymlink /proc/curproc/file ; then
11529                 $ls -l /proc/curproc/file > reflect
11530                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11531                         echo "You have BSD-like /proc/curproc/file."
11532                         procselfexe='"/proc/curproc/file"'
11533                         val="$define"
11534                 fi
11535         fi
11536         ;;
11537 esac
11538 $rm -f reflect
11539 set d_procselfexe
11540 eval $setvar
11541
11542 : see if pthread_atfork exists
11543 set pthread_atfork d_pthread_atfork
11544 eval $inlibc
11545
11546
11547 : see whether the various POSIXish _yields exist
11548 $cat >try.c <<EOP
11549 #include <pthread.h>
11550 #include <stdio.h>
11551 int main() {
11552 #ifdef SCHED_YIELD
11553         sched_yield();
11554 #else
11555 #ifdef PTHREAD_YIELD
11556         pthread_yield();
11557 #else
11558 #ifdef PTHREAD_YIELD_NULL
11559         pthread_yield(NULL);
11560 #endif
11561 #endif
11562 #endif
11563 }
11564 EOP
11565 : see if sched_yield exists
11566 set try -DSCHED_YIELD
11567 if eval $compile; then
11568     val="$define"
11569     sched_yield='sched_yield()'
11570 else
11571     val="$undef"
11572 fi
11573 case "$usethreads" in
11574 $define)
11575         case "$val" in
11576         $define) echo 'sched_yield() found.' >&4        ;;
11577         *)       echo 'sched_yield() NOT found.' >&4    ;;
11578         esac
11579 esac
11580 set d_sched_yield
11581 eval $setvar
11582
11583 : see if pthread_yield exists
11584 set try -DPTHREAD_YIELD
11585 if eval $compile; then
11586     val="$define"
11587     case "$sched_yield" in
11588     '') sched_yield='pthread_yield()' ;;
11589     esac
11590 else
11591     set try -DPTHREAD_YIELD_NULL
11592     if eval $compile; then
11593         val="$define"
11594         case "$sched_yield" in
11595         '') sched_yield='pthread_yield(NULL)' ;;
11596         esac
11597     else
11598         val="$undef"
11599     fi
11600 fi
11601 case "$usethreads" in
11602 $define)
11603         case "$val" in
11604         $define) echo 'pthread_yield() found.' >&4      ;;
11605         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11606         esac
11607         ;;
11608 esac
11609 set d_pthread_yield
11610 eval $setvar
11611
11612 case "$sched_yield" in
11613 '') sched_yield=undef ;;
11614 esac
11615
11616 $rm -f try try.*
11617
11618 : see if this is a pwd.h system
11619 set pwd.h i_pwd
11620 eval $inhdr
11621
11622 case "$i_pwd" in
11623 $define)
11624         xxx=`./findhdr pwd.h`
11625         $cppstdin $cppflags $cppminus < $xxx >$$.h
11626
11627         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11628                 val="$define"
11629         else
11630                 val="$undef"
11631         fi
11632         set d_pwquota
11633         eval $setvar
11634
11635         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11636                 val="$define"
11637         else
11638                 val="$undef"
11639         fi
11640         set d_pwage
11641         eval $setvar
11642
11643         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11644                 val="$define"
11645         else
11646                 val="$undef"
11647         fi
11648         set d_pwchange
11649         eval $setvar
11650
11651         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11652                 val="$define"
11653         else
11654                 val="$undef"
11655         fi
11656         set d_pwclass
11657         eval $setvar
11658
11659         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11660                 val="$define"
11661         else
11662                 val="$undef"
11663         fi
11664         set d_pwexpire
11665         eval $setvar
11666
11667         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11668                 val="$define"
11669         else
11670                 val="$undef"
11671         fi
11672         set d_pwcomment
11673         eval $setvar
11674
11675         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11676                 val="$define"
11677         else
11678                 val="$undef"
11679         fi
11680         set d_pwgecos
11681         eval $setvar
11682
11683         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11684                 val="$define"
11685         else
11686                 val="$undef"
11687         fi
11688         set d_pwpasswd
11689         eval $setvar
11690
11691         $rm -f $$.h
11692         ;;
11693 *)
11694         val="$undef"; 
11695         set d_pwquota; eval $setvar
11696         set d_pwage; eval $setvar
11697         set d_pwchange; eval $setvar
11698         set d_pwclass; eval $setvar
11699         set d_pwexpire; eval $setvar
11700         set d_pwcomment; eval $setvar
11701         set d_pwgecos; eval $setvar
11702         set d_pwpasswd; eval $setvar
11703         ;;
11704 esac
11705
11706 : see if readdir and friends exist
11707 set readdir d_readdir
11708 eval $inlibc
11709 set seekdir d_seekdir
11710 eval $inlibc
11711 set telldir d_telldir
11712 eval $inlibc
11713 set rewinddir d_rewinddir
11714 eval $inlibc
11715
11716 : see if readv exists
11717 set readv d_readv
11718 eval $inlibc
11719
11720 : see if recvmsg exists
11721 set recvmsg d_recvmsg
11722 eval $inlibc
11723
11724 : see if rename exists
11725 set rename d_rename
11726 eval $inlibc
11727
11728 : see if rmdir exists
11729 set rmdir d_rmdir
11730 eval $inlibc
11731
11732 : see if memory.h is available.
11733 val=''
11734 set memory.h val
11735 eval $inhdr
11736
11737 : See if it conflicts with string.h
11738 case "$val" in
11739 $define)
11740         case "$strings" in
11741         '') ;;
11742         *)
11743                 $cppstdin $cppflags $cppminus < $strings > mem.h
11744                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11745                         echo " "
11746                         echo "We won't be including <memory.h>."
11747                         val="$undef"
11748                 fi
11749                 $rm -f mem.h
11750                 ;;
11751         esac
11752 esac
11753 set i_memory
11754 eval $setvar
11755
11756 : can bcopy handle overlapping blocks?
11757 echo " "
11758 val="$undef"
11759 case "$d_memmove" in
11760 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11761 *)      case "$d_bcopy" in
11762         "$define")
11763                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11764                 $cat >try.c <<EOCP
11765 #$i_memory I_MEMORY
11766 #$i_stdlib I_STDLIB
11767 #$i_string I_STRING
11768 #$i_unistd I_UNISTD
11769 EOCP
11770         $cat >>try.c <<'EOCP'
11771 #include <stdio.h>
11772 #ifdef I_MEMORY
11773 #  include <memory.h>
11774 #endif
11775 #ifdef I_STDLIB
11776 #  include <stdlib.h>
11777 #endif
11778 #ifdef I_STRING
11779 #  include <string.h>
11780 #else
11781 #  include <strings.h>
11782 #endif
11783 #ifdef I_UNISTD
11784 #  include <unistd.h>  /* Needed for NetBSD */
11785 #endif
11786 int main()
11787 {
11788 char buf[128], abc[128];
11789 char *b;
11790 int len;
11791 int off;
11792 int align;
11793
11794 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11795    try to store the string in read-only memory. */
11796 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11797
11798 for (align = 7; align >= 0; align--) {
11799         for (len = 36; len; len--) {
11800                 b = buf+align;
11801                 bcopy(abc, b, len);
11802                 for (off = 1; off <= len; off++) {
11803                         bcopy(b, b+off, len);
11804                         bcopy(b+off, b, len);
11805                         if (bcmp(b, abc, len))
11806                                 exit(1);
11807                 }
11808         }
11809 }
11810 exit(0);
11811 }
11812 EOCP
11813                 set try
11814                 if eval $compile_ok; then
11815                         if ./try 2>/dev/null; then
11816                                 echo "Yes, it can."
11817                                 val="$define"
11818                         else
11819                                 echo "It can't, sorry."
11820                         fi
11821                 else
11822                         echo "(I can't compile the test program, so we'll assume not...)"
11823                 fi
11824                 ;;
11825         esac
11826         $rm -f try.* try core
11827         ;;
11828 esac
11829 set d_safebcpy
11830 eval $setvar
11831
11832 : can memcpy handle overlapping blocks?
11833 echo " "
11834 val="$undef"
11835 case "$d_memmove" in
11836 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11837 *)      case "$d_memcpy" in
11838         "$define")
11839                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11840                 $cat >try.c <<EOCP
11841 #$i_memory I_MEMORY
11842 #$i_stdlib I_STDLIB
11843 #$i_string I_STRING
11844 #$i_unistd I_UNISTD
11845 EOCP
11846         $cat >>try.c <<'EOCP'
11847 #include <stdio.h>
11848 #ifdef I_MEMORY
11849 #  include <memory.h>
11850 #endif
11851 #ifdef I_STDLIB
11852 #  include <stdlib.h>
11853 #endif
11854 #ifdef I_STRING
11855 #  include <string.h>
11856 #else
11857 #  include <strings.h>
11858 #endif
11859 #ifdef I_UNISTD
11860 #  include <unistd.h>  /* Needed for NetBSD */
11861 #endif
11862 int main()
11863 {
11864 char buf[128], abc[128];
11865 char *b;
11866 int len;
11867 int off;
11868 int align;
11869
11870 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11871    try to store the string in read-only memory. */
11872 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11873
11874 for (align = 7; align >= 0; align--) {
11875         for (len = 36; len; len--) {
11876                 b = buf+align;
11877                 memcpy(b, abc, len);
11878                 for (off = 1; off <= len; off++) {
11879                         memcpy(b+off, b, len);
11880                         memcpy(b, b+off, len);
11881                         if (memcmp(b, abc, len))
11882                                 exit(1);
11883                 }
11884         }
11885 }
11886 exit(0);
11887 }
11888 EOCP
11889                 set try
11890                 if eval $compile_ok; then
11891                         if ./try 2>/dev/null; then
11892                                 echo "Yes, it can."
11893                                 val="$define"
11894                         else
11895                                 echo "It can't, sorry."
11896                         fi
11897                 else
11898                         echo "(I can't compile the test program, so we'll assume not...)"
11899                 fi
11900                 ;;
11901         esac
11902         $rm -f try.* try core
11903         ;;
11904 esac
11905 set d_safemcpy
11906 eval $setvar
11907
11908 : can memcmp be trusted to compare relative magnitude?
11909 val="$undef"
11910 case "$d_memcmp" in
11911 "$define")
11912         echo " "
11913         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11914         $cat >try.c <<EOCP
11915 #$i_memory I_MEMORY
11916 #$i_stdlib I_STDLIB
11917 #$i_string I_STRING
11918 #$i_unistd I_UNISTD
11919 EOCP
11920         $cat >>try.c <<'EOCP'
11921 #include <stdio.h>
11922 #ifdef I_MEMORY
11923 #  include <memory.h>
11924 #endif
11925 #ifdef I_STDLIB
11926 #  include <stdlib.h>
11927 #endif
11928 #ifdef I_STRING
11929 #  include <string.h>
11930 #else
11931 #  include <strings.h>
11932 #endif
11933 #ifdef I_UNISTD
11934 #  include <unistd.h>  /* Needed for NetBSD */
11935 #endif
11936 int main()
11937 {
11938 char a = -1;
11939 char b = 0;
11940 if ((a < b) && memcmp(&a, &b, 1) < 0)
11941         exit(1);
11942 exit(0);
11943 }
11944 EOCP
11945         set try
11946         if eval $compile_ok; then
11947                 if $run ./try 2>/dev/null; then
11948                         echo "Yes, it can."
11949                         val="$define"
11950                 else
11951                         echo "No, it can't (it uses signed chars)."
11952                 fi
11953         else
11954                 echo "(I can't compile the test program, so we'll assume not...)"
11955         fi
11956         ;;
11957 esac
11958 $rm -f try.* try core
11959 set d_sanemcmp
11960 eval $setvar
11961
11962 : see if prototype for sbrk is available
11963 echo " "
11964 set d_sbrkproto sbrk $i_unistd unistd.h
11965 eval $hasproto
11966
11967 : see if select exists
11968 set select d_select
11969 eval $inlibc
11970
11971 : see if semctl exists
11972 set semctl d_semctl
11973 eval $inlibc
11974
11975 : see if semget exists
11976 set semget d_semget
11977 eval $inlibc
11978
11979 : see if semop exists
11980 set semop d_semop
11981 eval $inlibc
11982
11983 : see how much of the 'sem*(2)' library is present.
11984 h_sem=true
11985 echo " "
11986 case "$d_semctl$d_semget$d_semop" in
11987 *"$undef"*) h_sem=false;;
11988 esac
11989 case "$osname" in
11990 freebsd)
11991     case "`ipcs 2>&1`" in
11992     "SVID messages"*"not configured"*)
11993         echo "Your $osname does not have the sem*(2) configured." >&4
11994         h_sem=false
11995         val="$undef"
11996         set semctl d_semctl
11997         eval $setvar
11998         set semget d_semget
11999         eval $setvar
12000         set semop d_semop
12001         eval $setvar
12002         ;;
12003     esac
12004     ;;
12005 esac
12006 : we could also check for sys/ipc.h ...
12007 if $h_sem && $test `./findhdr sys/sem.h`; then
12008         echo "You have the full sem*(2) library." >&4
12009         val="$define"
12010 else
12011         echo "You don't have the full sem*(2) library." >&4
12012         val="$undef"
12013 fi
12014 set d_sem
12015 eval $setvar
12016
12017 : see whether sys/sem.h defines union semun
12018 echo " "
12019 $cat > try.c <<'END'
12020 #include <sys/types.h>
12021 #include <sys/ipc.h>
12022 #include <sys/sem.h>
12023 int main () { union semun semun; semun.buf = 0; }
12024 END
12025 set try
12026 if eval $compile; then
12027     echo "You have union semun in <sys/sem.h>." >&4
12028     val="$define"
12029 else
12030     echo "You do not have union semun in <sys/sem.h>." >&4
12031     val="$undef"
12032 fi
12033 $rm -f try try.c try.h
12034 set d_union_semun
12035 eval $setvar
12036
12037 : see how to do semctl IPC_STAT
12038 case "$d_sem" in
12039 $define)
12040     : see whether semctl IPC_STAT can use union semun
12041     echo " "
12042     $cat > try.h <<END
12043 #ifndef S_IRUSR
12044 #   ifdef S_IREAD
12045 #       define S_IRUSR S_IREAD
12046 #       define S_IWUSR S_IWRITE
12047 #       define S_IXUSR S_IEXEC
12048 #   else
12049 #       define S_IRUSR 0400
12050 #       define S_IWUSR 0200
12051 #       define S_IXUSR 0100
12052 #   endif
12053 #   define S_IRGRP (S_IRUSR>>3)
12054 #   define S_IWGRP (S_IWUSR>>3)
12055 #   define S_IXGRP (S_IXUSR>>3)
12056 #   define S_IROTH (S_IRUSR>>6)
12057 #   define S_IWOTH (S_IWUSR>>6)
12058 #   define S_IXOTH (S_IXUSR>>6)
12059 #endif
12060 #ifndef S_IRWXU
12061 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12062 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12063 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12064 #endif
12065 END
12066
12067     $cat > try.c <<END
12068 #include <sys/types.h>
12069 #include <sys/ipc.h>
12070 #include <sys/sem.h>
12071 #include <sys/stat.h>
12072 #include <stdio.h>
12073 #include <errno.h>
12074 #include "try.h"
12075 #ifndef errno
12076 extern int errno;
12077 #endif
12078 #$d_union_semun HAS_UNION_SEMUN
12079 int main() {
12080     union semun
12081 #ifndef HAS_UNION_SEMUN
12082     {
12083         int val;
12084         struct semid_ds *buf;
12085         unsigned short *array;
12086     }
12087 #endif
12088     arg;
12089     int sem, st;
12090
12091 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12092     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12093     if (sem > -1) {
12094         struct semid_ds argbuf;
12095         arg.buf = &argbuf;
12096 #       ifdef IPC_STAT
12097         st = semctl(sem, 0, IPC_STAT, arg);
12098         if (st == 0)
12099             printf("semun\n");
12100         else
12101 #       endif /* IPC_STAT */
12102             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12103 #       ifdef IPC_RMID
12104         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12105 #       endif /* IPC_RMID */
12106             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12107     } else
12108 #endif /* IPC_PRIVATE && ... */
12109         printf("semget failed: errno = %d\n", errno);
12110   return 0;
12111 }
12112 END
12113     val="$undef"
12114     set try
12115     if eval $compile; then
12116         xxx=`$run ./try`
12117         case "$xxx" in
12118         semun) val="$define" ;;
12119         esac
12120     fi
12121     $rm -f try try.c
12122     set d_semctl_semun
12123     eval $setvar
12124     case "$d_semctl_semun" in
12125     $define)
12126         echo "You can use union semun for semctl IPC_STAT." >&4
12127         also='also'
12128         ;;
12129     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12130         also=''
12131         ;;
12132     esac
12133
12134     : see whether semctl IPC_STAT can use struct semid_ds pointer
12135     $cat > try.c <<'END'
12136 #include <sys/types.h>
12137 #include <sys/ipc.h>
12138 #include <sys/sem.h>
12139 #include <sys/stat.h>
12140 #include "try.h"
12141 #include <stdio.h>
12142 #include <errno.h>
12143 #ifndef errno
12144 extern int errno;
12145 #endif
12146 int main() {
12147     struct semid_ds arg;
12148     int sem, st;
12149
12150 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12151     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12152     if (sem > -1) {
12153 #       ifdef IPC_STAT
12154         st = semctl(sem, 0, IPC_STAT, &arg);
12155         if (st == 0)
12156             printf("semid_ds\n");
12157         else
12158 #       endif /* IPC_STAT */
12159             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12160 #       ifdef IPC_RMID
12161         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12162 #       endif /* IPC_RMID */
12163             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12164     } else
12165 #endif /* IPC_PRIVATE && ... */
12166         printf("semget failed: errno = %d\n", errno);
12167
12168     return 0;
12169 }
12170 END
12171     val="$undef"
12172     set try
12173     if eval $compile; then
12174         xxx=`$run ./try`
12175         case "$xxx" in
12176         semid_ds) val="$define" ;;
12177         esac
12178     fi
12179     $rm -f try try.c
12180     set d_semctl_semid_ds
12181     eval $setvar
12182     case "$d_semctl_semid_ds" in
12183     $define)
12184         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12185         ;;
12186     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12187         ;;
12188     esac
12189     $rm -f try.h
12190     ;;
12191 *)  val="$undef"
12192
12193     # We do not have the full sem*(2) library, so assume we can not
12194     # use either.
12195
12196     set d_semctl_semun
12197     eval $setvar
12198
12199     set d_semctl_semid_ds
12200     eval $setvar
12201     ;;
12202 esac
12203
12204 : see if sendmsg exists
12205 set sendmsg d_sendmsg
12206 eval $inlibc
12207
12208 : see if setegid exists
12209 set setegid d_setegid
12210 eval $inlibc
12211
12212 : see if seteuid exists
12213 set seteuid d_seteuid
12214 eval $inlibc
12215
12216 : see if setgrent exists
12217 set setgrent d_setgrent
12218 eval $inlibc
12219
12220 : see if sethostent exists
12221 set sethostent d_sethent
12222 eval $inlibc
12223
12224 : see if setitimer exists
12225 set setitimer d_setitimer
12226 eval $inlibc
12227
12228 : see if setlinebuf exists
12229 set setlinebuf d_setlinebuf
12230 eval $inlibc
12231
12232 : see if setlocale exists
12233 set setlocale d_setlocale
12234 eval $inlibc
12235
12236 : see if setnetent exists
12237 set setnetent d_setnent
12238 eval $inlibc
12239
12240 : see if setprotoent exists
12241 set setprotoent d_setpent
12242 eval $inlibc
12243
12244 : see if setpgid exists
12245 set setpgid d_setpgid
12246 eval $inlibc
12247
12248 : see if setpgrp2 exists
12249 set setpgrp2 d_setpgrp2
12250 eval $inlibc
12251
12252 : see if setpriority exists
12253 set setpriority d_setprior
12254 eval $inlibc
12255
12256 : see if setproctitle exists
12257 set setproctitle d_setproctitle
12258 eval $inlibc
12259
12260 : see if setpwent exists
12261 set setpwent d_setpwent
12262 eval $inlibc
12263
12264 : see if setregid exists
12265 set setregid d_setregid
12266 eval $inlibc
12267 set setresgid d_setresgid
12268 eval $inlibc
12269
12270 : see if setreuid exists
12271 set setreuid d_setreuid
12272 eval $inlibc
12273 set setresuid d_setresuid
12274 eval $inlibc
12275
12276 : see if setrgid exists
12277 set setrgid d_setrgid
12278 eval $inlibc
12279
12280 : see if setruid exists
12281 set setruid d_setruid
12282 eval $inlibc
12283
12284 : see if setservent exists
12285 set setservent d_setsent
12286 eval $inlibc
12287
12288 : see if setsid exists
12289 set setsid d_setsid
12290 eval $inlibc
12291
12292 : see if setvbuf exists
12293 set setvbuf d_setvbuf
12294 eval $inlibc
12295
12296 : see if sfio.h is available
12297 set sfio.h i_sfio
12298 eval $inhdr
12299
12300
12301 : see if sfio library is available
12302 case "$i_sfio" in
12303 $define)
12304         val=''
12305         set sfreserve val
12306         eval $inlibc
12307         ;;
12308 *)
12309         val="$undef"
12310         ;;
12311 esac
12312 : Ok, but do we want to use it.
12313 case "$val" in
12314 $define)
12315         case "$usesfio" in
12316         true|$define|[yY]*) dflt='y';;
12317         *) dflt='n';;
12318         esac
12319         echo "$package can use the sfio library, but it is experimental."
12320         case "$useperlio" in
12321         "$undef")
12322             echo "For sfio also the PerlIO abstraction layer is needed."
12323             echo "Earlier you said you wouldn't want that."
12324             ;;
12325         esac
12326         rp="You seem to have sfio available, do you want to try using it?"
12327         . ./myread
12328         case "$ans" in
12329         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12330                 useperlio="$define"
12331                 val="$define"
12332                 ;;
12333         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12334                 val="$undef"
12335                 ;;
12336         esac
12337         ;;
12338 *)      case "$usesfio" in
12339         true|$define|[yY]*)
12340                 echo "Sorry, cannot find sfio on this machine." >&4
12341                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12342                 val="$undef"
12343                 ;;
12344         esac
12345         ;;
12346 esac
12347 set d_sfio
12348 eval $setvar
12349 case "$d_sfio" in
12350 $define) usesfio='true';;
12351 *) usesfio='false';;
12352 esac
12353 case "$d_sfio" in
12354 $define) ;;
12355 *)      : Remove sfio from list of libraries to use
12356         case "$libs" in
12357         *-lsfio*)
12358                 echo "Removing unneeded -lsfio from library list" >&4
12359                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12360                 shift
12361                 libs="$*"
12362                 echo "libs = $libs" >&4
12363                 ;;
12364         esac
12365 ;;
12366 esac
12367
12368
12369 : see if shmctl exists
12370 set shmctl d_shmctl
12371 eval $inlibc
12372
12373 : see if shmget exists
12374 set shmget d_shmget
12375 eval $inlibc
12376
12377 : see if shmat exists
12378 set shmat d_shmat
12379 eval $inlibc
12380 : see what shmat returns
12381 case "$d_shmat" in
12382 "$define")
12383         $cat >shmat.c <<'END'
12384 #include <sys/shm.h>
12385 void *shmat();
12386 END
12387         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12388                 shmattype='void *'
12389         else
12390                 shmattype='char *'
12391         fi
12392         echo "and it returns ($shmattype)." >&4
12393         : see if a prototype for shmat is available
12394         xxx=`./findhdr sys/shm.h`
12395         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12396         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12397                 val="$define"
12398         else
12399                 val="$undef"
12400         fi
12401         $rm -f shmat.[co]
12402         ;;
12403 *)
12404         val="$undef"
12405         ;;
12406 esac
12407 set d_shmatprototype
12408 eval $setvar
12409
12410 : see if shmdt exists
12411 set shmdt d_shmdt
12412 eval $inlibc
12413
12414 : see how much of the 'shm*(2)' library is present.
12415 h_shm=true
12416 echo " "
12417 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12418 *"$undef"*) h_shm=false;;
12419 esac
12420 case "$osname" in
12421 freebsd)
12422     case "`ipcs 2>&1`" in
12423     "SVID shared memory"*"not configured"*)
12424         echo "Your $osname does not have the shm*(2) configured." >&4
12425         h_shm=false
12426         val="$undef"
12427         set shmctl d_shmctl
12428         evat $setvar
12429         set shmget d_shmget
12430         evat $setvar
12431         set shmat d_shmat
12432         evat $setvar
12433         set shmdt d_shmdt
12434         evat $setvar
12435         ;;
12436     esac
12437     ;;
12438 esac
12439 : we could also check for sys/ipc.h ...
12440 if $h_shm && $test `./findhdr sys/shm.h`; then
12441         echo "You have the full shm*(2) library." >&4
12442         val="$define"
12443 else
12444         echo "You don't have the full shm*(2) library." >&4
12445         val="$undef"
12446 fi
12447 set d_shm
12448 eval $setvar
12449
12450 echo " "
12451 : see if we have sigaction
12452 if set sigaction val -f d_sigaction; eval $csym; $val; then
12453         echo 'sigaction() found.' >&4
12454         $cat > try.c <<'EOP'
12455 #include <stdio.h>
12456 #include <sys/types.h>
12457 #include <signal.h>
12458 int main()
12459 {
12460     struct sigaction act, oact;
12461     act.sa_flags = 0;
12462     oact.sa_handler = 0;
12463     /* so that act and oact are used */
12464     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12465 }
12466 EOP
12467         set try
12468         if eval $compile_ok; then
12469                 val="$define"
12470         else
12471                 echo "But you don't seem to have a useable struct sigaction." >&4
12472                 val="$undef"
12473         fi
12474 else
12475         echo 'sigaction NOT found.' >&4
12476         val="$undef"
12477 fi
12478 set d_sigaction; eval $setvar
12479 $rm -f try try$_o try.c
12480
12481 : see if sigprocmask exists
12482 set sigprocmask d_sigprocmask
12483 eval $inlibc
12484
12485 : see if sigsetjmp exists
12486 echo " "
12487 case "$d_sigsetjmp" in
12488 '')
12489         $cat >try.c <<'EOP'
12490 #include <setjmp.h>
12491 sigjmp_buf env;
12492 int set = 1;
12493 int main()
12494 {
12495         if (sigsetjmp(env,1))
12496                 exit(set);
12497         set = 0;
12498         siglongjmp(env, 1);
12499         exit(1);
12500 }
12501 EOP
12502         set try
12503         if eval $compile; then
12504                 if $run ./try >/dev/null 2>&1; then
12505                         echo "POSIX sigsetjmp found." >&4
12506                         val="$define"
12507                 else
12508                         $cat >&4 <<EOM
12509 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12510 I'll ignore them.
12511 EOM
12512                         val="$undef"
12513                 fi
12514         else
12515                 echo "sigsetjmp not found." >&4
12516                 val="$undef"
12517         fi
12518         ;;
12519 *) val="$d_sigsetjmp"
12520         case "$d_sigsetjmp" in
12521         $define) echo "POSIX sigsetjmp found." >&4;;
12522         $undef) echo "sigsetjmp not found." >&4;;
12523         esac
12524         ;;
12525 esac
12526 set d_sigsetjmp
12527 eval $setvar
12528 $rm -f try.c try
12529
12530 : see if sockatmark exists
12531 set sockatmark d_sockatmark
12532 eval $inlibc
12533
12534 : see if prototype for sockatmark is available
12535 echo " "
12536 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12537 eval $hasproto
12538
12539 : see if socks5_init exists
12540 set socks5_init d_socks5_init
12541 eval $inlibc
12542
12543 : see if prototype for setresgid is available
12544 echo " "
12545 set d_sresgproto setresgid $i_unistd unistd.h
12546 eval $hasproto
12547
12548 : see if prototype for setresuid is available
12549 echo " "
12550 set d_sresuproto setresuid $i_unistd unistd.h
12551 eval $hasproto
12552
12553 : see if sys/stat.h is available
12554 set sys/stat.h i_sysstat
12555 eval $inhdr
12556
12557
12558 : see if stat knows about block sizes
12559 echo " "
12560 echo "Checking to see if your struct stat has st_blocks field..." >&4
12561 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12562 eval $hasfield
12563
12564
12565 : see if this is a sys/vfs.h system
12566 set sys/vfs.h i_sysvfs
12567 eval $inhdr
12568
12569
12570 : see if this is a sys/statfs.h system
12571 set sys/statfs.h i_sysstatfs
12572 eval $inhdr
12573
12574
12575 echo " "
12576 echo "Checking to see if your system supports struct statfs..." >&4
12577 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
12578 eval $hasstruct
12579 case "$d_statfs_s" in
12580 "$define")      echo "Yes, it does."   ;;
12581 *)              echo "No, it doesn't." ;;
12582 esac
12583
12584
12585
12586 : see if struct statfs knows about f_flags
12587 case "$d_statfs_s" in
12588 define) 
12589         echo " "
12590         echo "Checking to see if your struct statfs has f_flags field..." >&4
12591         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
12592         eval $hasfield
12593         ;;
12594 *)      val="$undef"
12595         set d_statfs_f_flags
12596         eval $setvar
12597         ;;
12598 esac
12599 case "$d_statfs_f_flags" in
12600 "$define")      echo "Yes, it does."   ;;
12601 *)              echo "No, it doesn't." ;;
12602 esac
12603
12604 : see if _ptr and _cnt from stdio act std
12605 echo " "
12606
12607 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12608         echo "(Looks like you have stdio.h from BSD.)"
12609         case "$stdio_ptr" in
12610         '') stdio_ptr='((fp)->_p)'
12611                 ptr_lval=$define
12612                 ;;
12613         *)      ptr_lval=$d_stdio_ptr_lval;;
12614         esac
12615         case "$stdio_cnt" in
12616         '') stdio_cnt='((fp)->_r)'
12617                 cnt_lval=$define
12618                 ;;
12619         *)      cnt_lval=$d_stdio_cnt_lval;;
12620         esac
12621         case "$stdio_base" in
12622         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12623         esac
12624         case "$stdio_bufsiz" in
12625         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12626         esac
12627 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12628         echo "(Looks like you have stdio.h from Linux.)"
12629         case "$stdio_ptr" in
12630         '') stdio_ptr='((fp)->_IO_read_ptr)'
12631                 ptr_lval=$define
12632                 ;;
12633         *)      ptr_lval=$d_stdio_ptr_lval;;
12634         esac
12635         case "$stdio_cnt" in
12636         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12637                 cnt_lval=$undef
12638                 ;;
12639         *)      cnt_lval=$d_stdio_cnt_lval;;
12640         esac
12641         case "$stdio_base" in
12642         '') stdio_base='((fp)->_IO_read_base)';;
12643         esac
12644         case "$stdio_bufsiz" in
12645         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12646         esac
12647 else
12648         case "$stdio_ptr" in
12649         '') stdio_ptr='((fp)->_ptr)'
12650                 ptr_lval=$define
12651                 ;;
12652         *)      ptr_lval=$d_stdio_ptr_lval;;
12653         esac
12654         case "$stdio_cnt" in
12655         '') stdio_cnt='((fp)->_cnt)'
12656                 cnt_lval=$define
12657                 ;;
12658         *)      cnt_lval=$d_stdio_cnt_lval;;
12659         esac
12660         case "$stdio_base" in
12661         '') stdio_base='((fp)->_base)';;
12662         esac
12663         case "$stdio_bufsiz" in
12664         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12665         esac
12666 fi
12667
12668 : test whether _ptr and _cnt really work
12669 echo "Checking how std your stdio is..." >&4
12670 $cat >try.c <<EOP
12671 #include <stdio.h>
12672 #define FILE_ptr(fp)    $stdio_ptr
12673 #define FILE_cnt(fp)    $stdio_cnt
12674 int main() {
12675         FILE *fp = fopen("try.c", "r");
12676         char c = getc(fp);
12677         if (
12678                 18 <= FILE_cnt(fp) &&
12679                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12680         )
12681                 exit(0);
12682         exit(1);
12683 }
12684 EOP
12685 val="$undef"
12686 set try
12687 if eval $compile && $to try.c; then
12688         if $run ./try; then
12689                 echo "Your stdio acts pretty std."
12690                 val="$define"
12691         else
12692                 echo "Your stdio isn't very std."
12693         fi
12694 else
12695         echo "Your stdio doesn't appear very std."
12696 fi
12697 $rm -f try.c try
12698 set d_stdstdio
12699 eval $setvar
12700
12701 : Can _ptr be used as an lvalue?
12702 case "$d_stdstdio$ptr_lval" in
12703 $define$define) val=$define ;;
12704 *) val=$undef ;;
12705 esac
12706 set d_stdio_ptr_lval
12707 eval $setvar
12708
12709 : Can _cnt be used as an lvalue?
12710 case "$d_stdstdio$cnt_lval" in
12711 $define$define) val=$define ;;
12712 *) val=$undef ;;
12713 esac
12714 set d_stdio_cnt_lval
12715 eval $setvar
12716
12717
12718 : test whether setting _ptr sets _cnt as a side effect
12719 d_stdio_ptr_lval_sets_cnt="$undef"
12720 d_stdio_ptr_lval_nochange_cnt="$undef"
12721 case "$d_stdio_ptr_lval$d_stdstdio" in
12722 $define$define)
12723         echo "Checking to see what happens if we set the stdio ptr..." >&4
12724 $cat >try.c <<EOP
12725 #include <stdio.h>
12726 /* Can we scream? */
12727 /* Eat dust sed :-) */
12728 /* In the buffer space, no one can hear you scream. */
12729 #define FILE_ptr(fp)    $stdio_ptr
12730 #define FILE_cnt(fp)    $stdio_cnt
12731 #include <sys/types.h>
12732 int main() {
12733         FILE *fp = fopen("try.c", "r");
12734         int c;
12735         char *ptr;
12736         size_t cnt;
12737         if (!fp) {
12738             puts("Fail even to read");
12739             exit(1);
12740         }
12741         c = getc(fp); /* Read away the first # */
12742         if (c == EOF) {
12743             puts("Fail even to read");
12744             exit(1);
12745         }
12746         if (!(
12747                 18 <= FILE_cnt(fp) &&
12748                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12749         )) {
12750                 puts("Fail even to read");
12751                 exit (1);
12752         }
12753         ptr = (char*) FILE_ptr(fp);
12754         cnt = (size_t)FILE_cnt(fp);
12755
12756         FILE_ptr(fp) += 42;
12757
12758         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12759                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12760                 exit (1);
12761         }
12762         if (FILE_cnt(fp) <= 20) {
12763                 printf ("Fail (<20 chars to test)");
12764                 exit (1);
12765         }
12766         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12767                 puts("Fail compare");
12768                 exit (1);
12769         }
12770         if (cnt == FILE_cnt(fp)) {
12771                 puts("Pass_unchanged");
12772                 exit (0);
12773         }       
12774         if (FILE_cnt(fp) == (cnt - 42)) {
12775                 puts("Pass_changed");
12776                 exit (0);
12777         }
12778         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12779         return 1;
12780
12781 }
12782 EOP
12783         set try
12784         if eval $compile && $to try.c; then
12785                 case `$run ./try` in
12786                 Pass_changed)
12787                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12788                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12789                 Pass_unchanged)
12790                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12791                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12792                 Fail*)
12793                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12794                 *)
12795                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12796         esac
12797         else
12798                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12799         fi
12800         $rm -f try.c try
12801         ;;
12802 esac
12803
12804 : see if _base is also standard
12805 val="$undef"
12806 case "$d_stdstdio" in
12807 $define)
12808         $cat >try.c <<EOP
12809 #include <stdio.h>
12810 #define FILE_base(fp)   $stdio_base
12811 #define FILE_bufsiz(fp) $stdio_bufsiz
12812 int main() {
12813         FILE *fp = fopen("try.c", "r");
12814         char c = getc(fp);
12815         if (
12816                 19 <= FILE_bufsiz(fp) &&
12817                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12818         )
12819                 exit(0);
12820         exit(1);
12821 }
12822 EOP
12823         set try
12824         if eval $compile && $to try.c; then
12825                 if $run ./try; then
12826                         echo "And its _base field acts std."
12827                         val="$define"
12828                 else
12829                         echo "But its _base field isn't std."
12830                 fi
12831         else
12832                 echo "However, it seems to be lacking the _base field."
12833         fi
12834         $rm -f try.c try
12835         ;;
12836 esac
12837 set d_stdiobase
12838 eval $setvar
12839
12840 $cat >&4 <<EOM
12841 Checking how to access stdio streams by file descriptor number...
12842 EOM
12843 case "$stdio_stream_array" in
12844 '')     $cat >try.c <<EOCP
12845 #include <stdio.h>
12846 int main() {
12847   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12848     printf("yes\n");
12849 }
12850 EOCP
12851         for s in _iob __iob __sF
12852         do
12853                 set try -DSTDIO_STREAM_ARRAY=$s
12854                 if eval $compile; then
12855                         case "`$run ./try`" in
12856                         yes)    stdio_stream_array=$s; break ;;
12857                         esac
12858                 fi
12859         done
12860         $rm -f try.* try$exe_ext
12861 esac
12862 case "$stdio_stream_array" in
12863 '')     $cat >&4 <<EOM
12864 I can't figure out how to access stdio streams by file descriptor number.
12865 EOM
12866         d_stdio_stream_array="$undef"
12867         ;;
12868 *)      $cat >&4 <<EOM
12869 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12870 EOM
12871         d_stdio_stream_array="$define"
12872         ;;
12873 esac
12874
12875 : see if strcoll exists
12876 set strcoll d_strcoll
12877 eval $inlibc
12878
12879 : check for structure copying
12880 echo " "
12881 echo "Checking to see if your C compiler can copy structs..." >&4
12882 $cat >try.c <<'EOCP'
12883 int main()
12884 {
12885         struct blurfl {
12886                 int dyick;
12887         } foo, bar;
12888
12889         foo = bar;
12890 }
12891 EOCP
12892 if $cc -c try.c >/dev/null 2>&1 ; then
12893         val="$define"
12894         echo "Yup, it can."
12895 else
12896         val="$undef"
12897         echo "Nope, it can't."
12898 fi
12899 set d_strctcpy
12900 eval $setvar
12901 $rm -f try.*
12902
12903 : see if strerror and/or sys_errlist[] exist
12904 echo " "
12905 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12906     if set strerror val -f d_strerror; eval $csym; $val; then
12907                 echo 'strerror() found.' >&4
12908                 d_strerror="$define"
12909                 d_strerrm='strerror(e)'
12910                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12911                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12912                         d_syserrlst="$define"
12913                 else
12914                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12915                         d_syserrlst="$undef"
12916                 fi
12917     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12918                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12919                 echo 'strerror() found in string header.' >&4
12920                 d_strerror="$define"
12921                 d_strerrm='strerror(e)'
12922                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12923                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12924                                 d_syserrlst="$define"
12925                 else
12926                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12927                         d_syserrlst="$undef"
12928                 fi
12929     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12930                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12931                 d_strerror="$undef"
12932                 d_syserrlst="$define"
12933                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12934     else
12935                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12936                 d_strerror="$undef"
12937                 d_syserrlst="$undef"
12938                 d_strerrm='"unknown"'
12939     fi
12940 fi
12941
12942 : see if strftime exists
12943 set strftime d_strftime
12944 eval $inlibc
12945
12946 : see if strtod exists
12947 set strtod d_strtod
12948 eval $inlibc
12949
12950 : see if strtol exists
12951 set strtol d_strtol
12952 eval $inlibc
12953
12954 : see if strtold exists
12955 set strtold d_strtold
12956 eval $inlibc
12957
12958 : see if strtoll exists
12959 set strtoll d_strtoll
12960 eval $inlibc
12961
12962 case "$d_longlong-$d_strtoll" in
12963 "$define-$define")
12964         $cat <<EOM
12965 Checking whether your strtoll() works okay...
12966 EOM
12967         $cat >try.c <<'EOCP'
12968 #include <errno.h>
12969 #ifdef __hpux
12970 #define strtoll __strtoll
12971 #endif
12972 #ifdef __EMX__
12973 #define strtoll _strtoll
12974 #endif
12975 #include <stdio.h>
12976 extern long long int strtoll(char *s, char **, int); 
12977 static int bad = 0;
12978 int check(char *s, long long ell, int een) {
12979         long long gll;
12980         errno = 0;
12981         gll = strtoll(s, 0, 10);
12982         if (!((gll == ell) && (errno == een)))
12983                 bad++;
12984 }
12985 int main() {
12986         check(" 1",                                      1LL, 0);
12987         check(" 0",                                      0LL, 0);
12988         check("-1",                                     -1LL, 0);
12989         check("-9223372036854775808", -9223372036854775808LL, 0);
12990         check("-9223372036854775808", -9223372036854775808LL, 0);
12991         check(" 9223372036854775807",  9223372036854775807LL, 0);
12992         check("-9223372036854775808", -9223372036854775808LL, 0);
12993         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12994         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12995         if (!bad)
12996                 printf("ok\n");
12997 }
12998 EOCP
12999         set try
13000         if eval $compile; then
13001                 yyy=`$run ./try`
13002                 case "$yyy" in
13003                 ok) echo "Your strtoll() seems to be working okay." ;;
13004                 *) cat <<EOM >&4
13005 Your strtoll() doesn't seem to be working okay.
13006 EOM
13007                    d_strtoll="$undef"
13008                    ;;
13009                 esac
13010         else
13011                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13012                 d_strtoll="$undef"
13013         fi
13014         ;;
13015 esac
13016
13017 : see if strtoq exists
13018 set strtoq d_strtoq
13019 eval $inlibc
13020
13021 : see if strtoul exists
13022 set strtoul d_strtoul
13023 eval $inlibc
13024
13025 case "$d_strtoul" in
13026 "$define")
13027         $cat <<EOM
13028 Checking whether your strtoul() works okay...
13029 EOM
13030         $cat >try.c <<'EOCP'
13031 #include <errno.h>
13032 #include <stdio.h>
13033 extern unsigned long int strtoul(char *s, char **, int); 
13034 static int bad = 0;
13035 void check(char *s, unsigned long eul, int een) {
13036         unsigned long gul;
13037         errno = 0;
13038         gul = strtoul(s, 0, 10);
13039         if (!((gul == eul) && (errno == een)))
13040                 bad++;
13041 }
13042 int main() {
13043         check(" 1", 1L, 0);
13044         check(" 0", 0L, 0);
13045 EOCP
13046         case "$longsize" in
13047         8)
13048             $cat >>try.c <<'EOCP'
13049         check("18446744073709551615", 18446744073709551615UL, 0);
13050         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13051 #if 0 /* strtoul() for /^-/ strings is undefined. */
13052         check("-1", 18446744073709551615UL, 0);
13053         check("-18446744073709551614", 2, 0);
13054         check("-18446744073709551615", 1, 0);
13055         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13056         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13057 #endif
13058 EOCP
13059                 ;;
13060         4)
13061                     $cat >>try.c <<'EOCP'
13062         check("4294967295", 4294967295UL, 0);
13063         check("4294967296", 4294967295UL, ERANGE);
13064 #if 0 /* strtoul() for /^-/ strings is undefined. */
13065         check("-1", 4294967295UL, 0);
13066         check("-4294967294", 2, 0);
13067         check("-4294967295", 1, 0);
13068         check("-4294967296", 4294967295UL, ERANGE);
13069         check("-4294967297", 4294967295UL, ERANGE);
13070 #endif
13071 EOCP
13072                 ;;
13073         *)
13074 : Should we write these tests to be more portable by sprintf-ing
13075 : ~0 and then manipulating that char string as input for strtol?
13076                 ;;
13077         esac
13078         $cat >>try.c <<'EOCP'
13079         if (!bad)
13080                 printf("ok\n");
13081         return 0;
13082 }
13083 EOCP
13084         set try
13085         if eval $compile; then
13086                 case "`$run ./try`" in
13087                 ok) echo "Your strtoul() seems to be working okay." ;;
13088                 *) cat <<EOM >&4
13089 Your strtoul() doesn't seem to be working okay.
13090 EOM
13091                    d_strtoul="$undef"
13092                    ;;
13093                 esac
13094         fi
13095         ;;
13096 esac
13097
13098 : see if strtoull exists
13099 set strtoull d_strtoull
13100 eval $inlibc
13101
13102 case "$d_longlong-$d_strtoull" in
13103 "$define-$define")
13104         $cat <<EOM
13105 Checking whether your strtoull() works okay...
13106 EOM
13107         $cat >try.c <<'EOCP'
13108 #include <errno.h>
13109 #ifdef __hpux
13110 #define strtoull __strtoull
13111 #endif
13112 #include <stdio.h>
13113 extern unsigned long long int strtoull(char *s, char **, int); 
13114 static int bad = 0;
13115 int check(char *s, long long eull, int een) {
13116         long long gull;
13117         errno = 0;
13118         gull = strtoull(s, 0, 10);
13119         if (!((gull == eull) && (errno == een)))
13120                 bad++;
13121 }
13122 int main() {
13123         check(" 1",                                        1LL, 0);
13124         check(" 0",                                        0LL, 0);
13125         check("18446744073709551615",  18446744073709551615ULL, 0);
13126         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13127 #if 0 /* strtoull() for /^-/ strings is undefined. */
13128         check("-1",                    18446744073709551615ULL, 0);
13129         check("-18446744073709551614",                     2LL, 0);
13130         check("-18446744073709551615",                     1LL, 0);
13131         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13132         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13133 #endif
13134         if (!bad)
13135                 printf("ok\n");
13136 }
13137 EOCP
13138         set try
13139         if eval $compile; then
13140                 case "`$run ./try`" in
13141                 ok) echo "Your strtoull() seems to be working okay." ;;
13142                 *) cat <<EOM >&4
13143 Your strtoull() doesn't seem to be working okay.
13144 EOM
13145                    d_strtoull="$undef"
13146                    ;;
13147                 esac
13148         fi
13149         ;;
13150 esac
13151
13152 : see if strtouq exists
13153 set strtouq d_strtouq
13154 eval $inlibc
13155
13156 case "$d_strtouq" in
13157 "$define")
13158         $cat <<EOM
13159 Checking whether your strtouq() works okay...
13160 EOM
13161         $cat >try.c <<'EOCP'
13162 #include <errno.h>
13163 #include <stdio.h>
13164 extern unsigned long long int strtouq(char *s, char **, int); 
13165 static int bad = 0;
13166 void check(char *s, unsigned long long eull, int een) {
13167         unsigned long long gull;
13168         errno = 0;
13169         gull = strtouq(s, 0, 10);
13170         if (!((gull == eull) && (errno == een)))
13171                 bad++;
13172 }
13173 int main() {
13174         check(" 1",                                        1LL, 0);
13175         check(" 0",                                        0LL, 0);
13176         check("18446744073709551615",  18446744073709551615ULL, 0);
13177         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13178 #if 0 /* strtouq() for /^-/ strings is undefined. */
13179         check("-1",                    18446744073709551615ULL, 0);
13180         check("-18446744073709551614",                     2LL, 0);
13181         check("-18446744073709551615",                     1LL, 0);
13182         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13183         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13184 #endif
13185         if (!bad)
13186                 printf("ok\n");
13187         return 0;
13188 }
13189 EOCP
13190         set try
13191         if eval $compile; then
13192                 case "`$run ./try`" in
13193                 ok) echo "Your strtouq() seems to be working okay." ;;
13194                 *) cat <<EOM >&4
13195 Your strtouq() doesn't seem to be working okay.
13196 EOM
13197                    d_strtouq="$undef"
13198                    ;;
13199                 esac
13200         fi
13201         ;;
13202 esac
13203
13204 : see if strxfrm exists
13205 set strxfrm d_strxfrm
13206 eval $inlibc
13207
13208 : see if symlink exists
13209 set symlink d_symlink
13210 eval $inlibc
13211
13212 : see if syscall exists
13213 set syscall d_syscall
13214 eval $inlibc
13215
13216 : see if prototype for syscall is available
13217 echo " "
13218 set d_syscallproto syscall $i_unistd unistd.h
13219 eval $hasproto
13220
13221 : see if sysconf exists
13222 set sysconf d_sysconf
13223 eval $inlibc
13224
13225 : see if system exists
13226 set system d_system
13227 eval $inlibc
13228
13229 : see if tcgetpgrp exists
13230 set tcgetpgrp d_tcgetpgrp
13231 eval $inlibc
13232
13233 : see if tcsetpgrp exists
13234 set tcsetpgrp d_tcsetpgrp
13235 eval $inlibc
13236
13237 : see if prototype for telldir is available
13238 echo " "
13239 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13240 eval $hasproto
13241
13242 : see if this is a sys/times.h system
13243 set sys/times.h i_systimes
13244 eval $inhdr
13245
13246 : see if times exists
13247 echo " "
13248 if set times val -f d_times; eval $csym; $val; then
13249         echo 'times() found.' >&4
13250         d_times="$define"
13251         inc=''
13252         case "$i_systimes" in
13253         "$define") inc='sys/times.h';;
13254         esac
13255         rp="What is the type returned by times() on this system?"
13256         set clock_t clocktype long stdio.h sys/types.h $inc
13257         eval $typedef_ask
13258 else
13259         echo 'times() NOT found, hope that will do.' >&4
13260         d_times="$undef"
13261         clocktype='int'
13262 fi
13263
13264 : see if truncate exists
13265 set truncate d_truncate
13266 eval $inlibc
13267
13268 : see if tzname[] exists
13269 echo " "
13270 if set tzname val -a d_tzname; eval $csym; $val; then
13271         val="$define"
13272         echo 'tzname[] found.' >&4
13273 else
13274         val="$undef"
13275         echo 'tzname[] NOT found.' >&4
13276 fi
13277 set d_tzname
13278 eval $setvar
13279
13280 case "$osname" in
13281 next|rhapsody|darwin) multiarch="$define" ;;
13282 esac
13283 case "$multiarch" in
13284 ''|[nN]*) multiarch="$undef" ;;
13285 esac
13286
13287 : check for ordering of bytes in a long
13288 echo " "
13289 case "$usecrosscompile$multiarch" in
13290 *$define*)
13291         $cat <<EOM
13292 You seem to be either cross-compiling or doing a multiarchitecture build,
13293 skipping the byteorder check.
13294
13295 EOM
13296         byteorder='ffff'
13297         ;;
13298 *)
13299         case "$byteorder" in
13300         '')
13301                 $cat <<'EOM'
13302 In the following, larger digits indicate more significance.  A big-endian
13303 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13304 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13305 machines may have weird orders like 3412.  A Cray will report 87654321,
13306 an Alpha will report 12345678. If the test program works the default is
13307 probably right.
13308 I'm now running the test program...
13309 EOM
13310                 $cat >try.c <<'EOCP'
13311 #include <stdio.h>
13312 int main()
13313 {
13314         int i;
13315         union {
13316                 unsigned long l;
13317                 char c[sizeof(long)];
13318         } u;
13319
13320         if (sizeof(long) > 4)
13321                 u.l = (0x08070605L << 32) | 0x04030201L;
13322         else
13323                 u.l = 0x04030201L;
13324         for (i = 0; i < sizeof(long); i++)
13325                 printf("%c", u.c[i]+'0');
13326         printf("\n");
13327         exit(0);
13328 }
13329 EOCP
13330                 xxx_prompt=y
13331                 set try
13332                 if eval $compile && ./try > /dev/null; then
13333                         dflt=`$run ./try`
13334                         case "$dflt" in
13335                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13336                                 echo "(The test program ran ok.)"
13337                                 echo "byteorder=$dflt"
13338                                 xxx_prompt=n
13339                         ;;
13340                         ????|????????) echo "(The test program ran ok.)" ;;
13341                         *) echo "(The test program didn't run right for some reason.)" ;;
13342                         esac
13343                 else
13344                         dflt='4321'
13345                         cat <<'EOM'
13346 (I can't seem to compile the test program.  Guessing big-endian...)
13347 EOM
13348                 fi
13349                 case "$xxx_prompt" in
13350                 y)
13351                         rp="What is the order of bytes in a long?"
13352                         . ./myread
13353                         byteorder="$ans"
13354                         ;;
13355                 *)      byteorder=$dflt
13356                         ;;
13357                 esac
13358                 ;;
13359         esac
13360         $rm -f try.c try
13361         ;;
13362 esac
13363
13364
13365 $cat <<EOM
13366
13367 Checking to see whether you can access character data unalignedly...
13368 EOM
13369 $cat >try.c <<EOCP
13370 #include <stdio.h>
13371 #define U32 $u32type
13372 #define BYTEORDER $byteorder
13373 int main() {
13374 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13375     U8 buf[] = "\0\0\0\1\0\0\0\0";
13376     U32 *up;
13377     int i;
13378
13379     if (sizeof(U32) != 4) {
13380         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13381         exit(1);
13382     }
13383
13384     fflush(stdout);
13385
13386     for (i = 0; i < 4; i++) {
13387         up = (U32*)(buf + i);
13388         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13389                (*up == 1 << (8*(3-i)))  /* little-endian */
13390               )
13391            )
13392         {
13393             printf("read failed (%x)\n", *up);
13394             exit(2);
13395         }
13396     }
13397
13398     /* write test */
13399     for (i = 0; i < 4; i++) {
13400         up = (U32*)(buf + i);
13401         *up = 0xBeef;
13402         if (*up != 0xBeef) {
13403             printf("write failed (%x)\n", *up);
13404             exit(3);
13405         }
13406     }
13407
13408     exit(0);
13409 #else
13410     printf("1\n");
13411     exit(1);
13412 #endif
13413     return 0;
13414 }
13415 EOCP
13416 set try
13417 if eval $compile_ok; then
13418         echo "(Testing for character data alignment may dump core.)" >&4
13419         $run ./try 2>&1 >/dev/null
13420         case "$?" in
13421         0)      cat >&4 <<EOM
13422 You can access character data pretty unalignedly.
13423 EOM
13424                 d_u32align="$undef"
13425                 ;;
13426         *)      cat >&4 <<EOM
13427 It seems that you must access character data in an aligned manner.
13428 EOM
13429                 d_u32align="$define"
13430                 ;;
13431         esac
13432         $rm -f core core.try.* try.core
13433 else
13434         rp='Can you access character data at unaligned addresses?'
13435         dflt='n'
13436         . ./myread
13437         case "$ans" in
13438         [yY]*)  d_u32align="$undef"  ;;
13439         *)      d_u32align="$define" ;;
13440         esac
13441 fi
13442
13443 : see if ualarm exists
13444 set ualarm d_ualarm
13445 eval $inlibc
13446
13447 : see if umask exists
13448 set umask d_umask
13449 eval $inlibc
13450
13451 : see if unordered exists
13452 set unordered d_unordered
13453 eval $inlibc
13454
13455 : see if usleep exists
13456 set usleep d_usleep
13457 eval $inlibc
13458
13459 : see if prototype for usleep is available
13460 echo " "
13461 set d_usleepproto usleep $i_unistd unistd.h
13462 eval $hasproto
13463
13464 : see if ustat exists
13465 set ustat d_ustat
13466 eval $inlibc
13467
13468 : backward compatibility for d_hvfork
13469 if test X$d_hvfork != X; then
13470         d_vfork="$d_hvfork"
13471         d_hvfork=''
13472 fi
13473 : see if there is a vfork
13474 val=''
13475 set vfork val
13476 eval $inlibc
13477
13478 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13479 : perl on Solaris 2.x, and probably elsewhere.
13480 case "$val" in
13481 $define)
13482         echo " "
13483         case "$usevfork" in
13484         false) dflt='n';;
13485         *) dflt='y';;
13486         esac
13487         cat <<'EOM'
13488  
13489 Perl can only use a vfork() that doesn't suffer from strict
13490 restrictions on calling functions or modifying global data in
13491 the child.  For example, glibc-2.1 contains such a vfork()
13492 that is unsuitable.  If your system provides a proper fork()
13493 call, chances are that you do NOT want perl to use vfork().
13494
13495 EOM
13496         rp="Do you still want to use vfork()?"
13497         . ./myread
13498         case "$ans" in
13499         y|Y) ;;
13500         *)
13501                 echo "Ok, we won't use vfork()."
13502                 val="$undef"
13503                 ;;
13504         esac
13505         ;;
13506 esac
13507 set d_vfork
13508 eval $setvar
13509 case "$d_vfork" in
13510 $define) usevfork='true';;
13511 *) usevfork='false';;
13512 esac
13513
13514 : see if closedir exists
13515 set closedir d_closedir
13516 eval $inlibc
13517
13518 case "$d_closedir" in
13519 "$define")
13520         echo " "
13521         echo "Checking whether closedir() returns a status..." >&4
13522         cat > try.c <<EOM
13523 #$i_dirent I_DIRENT             /**/
13524 #$i_sysdir I_SYS_DIR            /**/
13525 #$i_sysndir I_SYS_NDIR          /**/
13526 #$i_systypes I_SYS_TYPES        /**/
13527
13528 #if defined(I_SYS_TYPES)
13529 #include <sys/types.h>
13530 #endif
13531 #if defined(I_DIRENT)
13532 #include <dirent.h>
13533 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13534 #include <sys/dir.h>
13535 #endif
13536 #else
13537 #ifdef I_SYS_NDIR
13538 #include <sys/ndir.h>
13539 #else
13540 #ifdef I_SYS_DIR
13541 #ifdef hp9000s500
13542 #include <ndir.h>       /* may be wrong in the future */
13543 #else
13544 #include <sys/dir.h>
13545 #endif
13546 #endif
13547 #endif
13548 #endif 
13549 int main() { return closedir(opendir(".")); }
13550 EOM
13551         set try
13552         if eval $compile_ok; then
13553                 if $run ./try > /dev/null 2>&1 ; then
13554                         echo "Yes, it does."
13555                         val="$undef"
13556                 else
13557                         echo "No, it doesn't."
13558                         val="$define"
13559                 fi
13560         else
13561                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13562                 val="$define"
13563         fi
13564         ;;
13565 *)
13566         val="$undef";
13567         ;;
13568 esac
13569 set d_void_closedir
13570 eval $setvar
13571 $rm -f try try.*
13572 : see if there is a wait4
13573 set wait4 d_wait4
13574 eval $inlibc
13575
13576 : see if waitpid exists
13577 set waitpid d_waitpid
13578 eval $inlibc
13579
13580 : see if wcstombs exists
13581 set wcstombs d_wcstombs
13582 eval $inlibc
13583
13584 : see if wctomb exists
13585 set wctomb d_wctomb
13586 eval $inlibc
13587
13588 : see if writev exists
13589 set writev d_writev
13590 eval $inlibc
13591
13592 : preserve RCS keywords in files with variable substitution, grrr
13593 Date='$Date'
13594 Id='$Id'
13595 Log='$Log'
13596 RCSfile='$RCSfile'
13597 Revision='$Revision'
13598
13599 : check for alignment requirements
13600 echo " "
13601 case "$usecrosscompile$multiarch" in
13602 *$define*)
13603         $cat <<EOM
13604 You seem to be either cross-compiling or doing a multiarchitecture build,
13605 skipping the memory alignment check.
13606
13607 EOM
13608         case "$alignbytes" in
13609         '') alignbytes=8 ;;
13610         esac
13611         ;;
13612 *)
13613         case "$alignbytes" in
13614         '') echo "Checking alignment constraints..." >&4
13615                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13616                         $cat >try.c <<'EOCP'
13617 typedef long double NV;
13618 EOCP
13619                 else
13620                         $cat >try.c <<'EOCP'
13621 typedef double NV;
13622 EOCP
13623                 fi
13624                 $cat >>try.c <<'EOCP'
13625 #include <stdio.h>
13626 struct foobar {
13627         char foo;
13628         NV bar;
13629 } try_algn;
13630 int main()
13631 {
13632     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13633     return(0);
13634 }
13635 EOCP
13636                 set try
13637                 if eval $compile_ok; then
13638                         dflt=`$run ./try`
13639                 else
13640                         dflt='8'
13641                         echo "(I can't seem to compile the test program...)"
13642                 fi
13643                 ;;
13644         *) dflt="$alignbytes"
13645                 ;;
13646         esac
13647         rp="Doubles must be aligned on a how-many-byte boundary?"
13648         . ./myread
13649         alignbytes="$ans"
13650         $rm -f try.c try
13651         ;;
13652 esac
13653
13654
13655 : set the base revision
13656 baserev=5.0
13657
13658 : how do we catenate cpp tokens here?
13659 echo " "
13660 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13661 $cat >cpp_stuff.c <<'EOCP'
13662 #define RCAT(a,b)a/**/b
13663 #define ACAT(a,b)a ## b
13664 RCAT(Rei,ser)
13665 ACAT(Cir,cus)
13666 EOCP
13667 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13668 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13669         echo "Oh!  Smells like ANSI's been here." >&4
13670         echo "We can catify or stringify, separately or together!"
13671         cpp_stuff=42
13672 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13673         echo "Ah, yes!  The good old days!" >&4
13674         echo "However, in the good old days we don't know how to stringify and"
13675         echo "catify at the same time."
13676         cpp_stuff=1
13677 else
13678         $cat >&4 <<EOM
13679 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13680 to have to edit the values of CAT[2-5] in config.h...
13681 EOM
13682         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13683 fi
13684 $rm -f cpp_stuff.*
13685
13686 : see if this is a db.h system
13687 set db.h i_db
13688 eval $inhdr
13689
13690 case "$i_db" in
13691 $define)
13692         : Check db version.
13693         echo " "
13694         echo "Checking Berkeley DB version ..." >&4
13695         $cat >try.c <<EOCP
13696 #$d_const HASCONST
13697 #ifndef HASCONST
13698 #define const
13699 #endif
13700 #include <sys/types.h>
13701 #include <stdio.h>
13702 #include <db.h>
13703 int main(int argc, char *argv[])
13704 {
13705 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13706     int Major, Minor, Patch ;
13707     unsigned long Version ;
13708     (void)db_version(&Major, &Minor, &Patch) ;
13709     if (argc == 2) {
13710         printf("%d %d %d %d %d %d\n",
13711                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13712                Major, Minor, Patch);
13713         exit(0);
13714     }
13715     printf("You have Berkeley DB Version 2 or greater.\n");
13716
13717     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13718                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13719     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13720                 Major, Minor, Patch) ;
13721
13722     /* check that db.h & libdb are compatible */
13723     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13724         printf("db.h and libdb are incompatible.\n") ;
13725         exit(3);        
13726     }
13727
13728     printf("db.h and libdb are compatible.\n") ;
13729
13730     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13731                 + DB_VERSION_PATCH ;
13732
13733     /* needs to be >= 2.3.4 */
13734     if (Version < 2003004) {
13735     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13736         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13737         exit(2);        
13738     }
13739
13740     exit(0);
13741 #else
13742 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13743     if (argc == 2) {
13744         printf("1 0 0\n");
13745         exit(0);
13746     }
13747     printf("You have Berkeley DB Version 1.\n");
13748     exit(0);    /* DB version < 2: the coast is clear. */
13749 #else
13750     exit(1);    /* <db.h> not Berkeley DB? */
13751 #endif
13752 #endif
13753 }
13754 EOCP
13755         set try
13756         if eval $compile_ok && $run ./try; then
13757                 echo 'Looks OK.' >&4
13758                 set `$run ./try 1`
13759                 db_version_major=$1
13760                 db_version_minor=$2
13761                 db_version_patch=$3
13762         else
13763                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13764                 i_db=$undef
13765                 case " $libs " in
13766                 *"-ldb "*)
13767                         : Remove db from list of libraries to use
13768                         echo "Removing unusable -ldb from library list" >&4
13769                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13770                         shift
13771                         libs="$*"
13772                         echo "libs = $libs" >&4
13773                         ;;
13774                 esac
13775         fi
13776         $rm -f try.*
13777         ;;
13778 esac
13779
13780 case "$i_db" in
13781 define)
13782         : Check the return type needed for hash 
13783         echo " "
13784         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13785         $cat >try.c <<EOCP
13786 #$d_const HASCONST
13787 #ifndef HASCONST
13788 #define const
13789 #endif
13790 #include <sys/types.h>
13791 #include <db.h>
13792
13793 #ifndef DB_VERSION_MAJOR
13794 u_int32_t hash_cb (ptr, size)
13795 const void *ptr;
13796 size_t size;
13797 {
13798 }
13799 HASHINFO info;
13800 int main()
13801 {
13802         info.hash = hash_cb;
13803 }
13804 #endif
13805 EOCP
13806         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13807                 if $contains warning try.out >>/dev/null 2>&1 ; then
13808                         db_hashtype='int'
13809                 else
13810                         db_hashtype='u_int32_t'
13811                 fi
13812         else
13813                 : XXX Maybe we should just give up here.
13814                 db_hashtype=u_int32_t
13815                 $cat try.out >&4
13816                 echo "Help:  I can't seem to compile the db test program." >&4
13817                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13818         fi
13819         $rm -f try.*
13820         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13821         ;;
13822 *)      db_hashtype=u_int32_t
13823         ;;
13824 esac
13825 case "$i_db" in
13826 define)
13827         : Check the return type needed for prefix 
13828         echo " "
13829         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13830         cat >try.c <<EOCP
13831 #$d_const HASCONST
13832 #ifndef HASCONST
13833 #define const
13834 #endif
13835 #include <sys/types.h>
13836 #include <db.h>
13837
13838 #ifndef DB_VERSION_MAJOR
13839 size_t prefix_cb (key1, key2)
13840 const DBT *key1;
13841 const DBT *key2;
13842 {
13843 }
13844 BTREEINFO info;
13845 int main()
13846 {
13847         info.prefix = prefix_cb;
13848 }
13849 #endif
13850 EOCP
13851         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13852                 if $contains warning try.out >>/dev/null 2>&1 ; then
13853                         db_prefixtype='int'
13854                 else
13855                         db_prefixtype='size_t'
13856                 fi
13857         else
13858                 db_prefixtype='size_t'
13859                 : XXX Maybe we should just give up here.
13860                 $cat try.out >&4
13861                 echo "Help:  I can't seem to compile the db test program." >&4
13862                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13863         fi
13864         $rm -f try.*
13865         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13866         ;;
13867 *)      db_prefixtype='size_t'
13868         ;;
13869 esac
13870
13871
13872 : How can we generate normalized random numbers ?
13873 echo " "
13874 echo "Looking for a random number function..." >&4
13875 case "$randfunc" in
13876 '')
13877         if set drand48 val -f; eval $csym; $val; then
13878                 dflt="drand48"
13879                 echo "Good, found drand48()." >&4
13880         elif set random val -f; eval $csym; $val; then
13881                 dflt="random"
13882                 echo "OK, found random()." >&4
13883         else
13884                 dflt="rand"
13885                 echo "Yick, looks like I have to use rand()." >&4
13886         fi
13887         echo " "
13888         ;;
13889 *)
13890         dflt="$randfunc"
13891         ;;
13892 esac
13893 cont=true
13894
13895 case "$ccflags" in
13896 *-Dmy_rand=*|*-Dmy_srand=*)
13897         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13898         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13899         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13900         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13901         ;;
13902 esac
13903
13904 while $test "$cont"; do
13905         rp="Use which function to generate random numbers?"
13906         . ./myread
13907         if $test "$ans" = "$dflt"; then
13908                 : null
13909         else
13910                 randbits=''
13911         fi
13912         randfunc="$ans"
13913         if set $ans val -f; eval $csym; $val; then
13914                 cont=''
13915         else
13916                 dflt=y
13917                 rp="I cannot find function $ans. Use that name anyway?"
13918                 . ./myread
13919                 dflt=rand
13920                 case "$ans" in
13921                         [yY]*) cont='';;
13922                 esac
13923         fi
13924         case "$cont" in
13925         '')
13926                 case "$randfunc" in
13927                 drand48)
13928                         drand01="drand48()"
13929                         seedfunc="srand48"
13930                         randbits=48
13931                         randseedtype=long
13932                         ;;
13933                 rand|random)
13934                         case "$randbits" in
13935                         '')
13936 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13937                                 $cat >try.c <<EOCP
13938 #$i_unistd I_UNISTD
13939 #$i_stdlib I_STDLIB
13940 #include <stdio.h>
13941 #ifdef I_UNISTD
13942 #  include <unistd.h>
13943 #endif
13944 #ifdef I_STDLIB
13945 #  include <stdlib.h>
13946 #endif
13947 int main()
13948 {
13949         register int i;
13950         register unsigned long tmp;
13951         register unsigned long max = 0L;
13952
13953         for (i = 1000; i; i--) {
13954                 tmp = (unsigned long) $randfunc();
13955                 if (tmp > max) max = tmp;
13956         }
13957         for (i = 0; max; i++)
13958                 max /= 2;
13959         printf("%d\n",i);
13960 }
13961 EOCP
13962                                 set try
13963                                 if eval $compile_ok; then
13964                                         dflt=`try`
13965                                 else
13966                                         dflt='?'
13967                                         echo "(I can't seem to compile the test program...)"
13968                                 fi
13969                                 ;;
13970                         *)
13971                                 dflt="$randbits"
13972                                 ;;
13973                         esac
13974                         rp="How many bits does your $randfunc() function produce?"
13975                         . ./myread
13976                         randbits="$ans"
13977                         $rm -f try.c try
13978                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13979                         seedfunc="s$randfunc"
13980                         randseedtype=unsigned
13981                         ;;
13982                 *)
13983                         dflt="31"
13984                         rp="How many bits does your $randfunc() function produce?"
13985                         . ./myread
13986                         randbits="$ans"
13987                         seedfunc="s$randfunc"
13988                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13989                         if set $seedfunc val -f; eval $csym; $val; then
13990                                 echo "(Using $seedfunc() to seed random generator)"
13991                         else
13992                                 echo "(Warning: no $seedfunc() to seed random generator)"
13993                                 seedfunc=rand
13994                         fi
13995                         randseedtype=unsigned
13996                         ;;
13997                 esac
13998                 ;;
13999         esac
14000 done
14001
14002 echo " "
14003 echo "Determining whether or not we are on an EBCDIC system..." >&4
14004 $cat >try.c <<'EOM'
14005 int main()
14006 {
14007   if ('M'==0xd4) return 0;
14008   return 1;
14009 }
14010 EOM
14011
14012 val=$undef
14013 set try
14014 if eval $compile_ok; then
14015         if $run ./try; then
14016                 echo "You seem to speak EBCDIC." >&4
14017                 val="$define"
14018         else
14019                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14020         fi
14021 else
14022         echo "I'm unable to compile the test program." >&4
14023         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14024 fi
14025 $rm -f try try.*
14026 set ebcdic
14027 eval $setvar
14028
14029 echo " "
14030 $cat >&4 <<EOM
14031 Checking how to flush all pending stdio output...
14032 EOM
14033 # I only know how to find the first 32 possibly open files on SunOS.
14034 # See also hints/sunos_4_1.sh and util.c  --AD
14035 case "$osname" in
14036 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14037 esac
14038 $cat >>try.c <<EOCP
14039 #include <stdio.h>
14040 #$i_unistd I_UNISTD
14041 #ifdef I_UNISTD
14042 # include <unistd.h>
14043 #endif
14044 #$d_sysconf HAS_SYSCONF
14045 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14046 #ifdef HAS_STDIO_STREAM_ARRAY
14047 # define STDIO_STREAM_ARRAY $stdio_stream_array
14048 #endif
14049 int main() {
14050   FILE* p;
14051   unlink("try.out");
14052   p = fopen("try.out", "w");
14053 #ifdef TRY_FPUTC
14054   fputc('x', p);
14055 #else
14056 # ifdef TRY_FPRINTF
14057   fprintf(p, "x");
14058 # endif
14059 #endif
14060 #ifdef TRY_FFLUSH_NULL
14061   fflush(NULL);
14062 #endif
14063 #ifdef TRY_FFLUSH_ALL
14064   {
14065     long open_max = -1;
14066 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14067     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14068 # else
14069 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14070     open_max = sysconf(_SC_OPEN_MAX);
14071 #  else
14072 #   ifdef FOPEN_MAX
14073     open_max = FOPEN_MAX;
14074 #   else
14075 #    ifdef OPEN_MAX
14076     open_max = OPEN_MAX;
14077 #    else
14078 #     ifdef _NFILE
14079     open_max = _NFILE;
14080 #     endif
14081 #    endif
14082 #   endif
14083 #  endif
14084 # endif 
14085 # ifdef HAS_STDIO_STREAM_ARRAY
14086     if (open_max > 0) {
14087       long i;
14088       for (i = 0; i < open_max; i++)
14089             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14090                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14091                 STDIO_STREAM_ARRAY[i]._flag)
14092                 fflush(&STDIO_STREAM_ARRAY[i]);
14093     }   
14094   }
14095 # endif
14096 #endif
14097   _exit(42);
14098 }
14099 EOCP
14100 : first we have to find out how _not_ to flush
14101 $to try.c
14102 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14103     output=''
14104     set try -DTRY_FPUTC
14105     if eval $compile; then
14106             $run ./try 2>/dev/null
14107             code="$?"
14108             $from try.out
14109             if $test ! -s try.out -a "X$code" = X42; then
14110                 output=-DTRY_FPUTC
14111             fi
14112     fi
14113     case "$output" in
14114     '')
14115             set try -DTRY_FPRINTF
14116             if eval $compile; then
14117                     $run ./try 2>/dev/null
14118                     code="$?"
14119                     $from try.out
14120                     if $test ! -s try.out -a "X$code" = X42; then
14121                         output=-DTRY_FPRINTF
14122                     fi
14123             fi
14124         ;;
14125     esac
14126 fi
14127 : check for fflush NULL behaviour
14128 case "$fflushNULL" in
14129 '')     set try -DTRY_FFLUSH_NULL $output
14130         if eval $compile; then
14131                 $run ./try 2>/dev/null
14132                 code="$?"
14133                 $from try.out
14134                 if $test -s try.out -a "X$code" = X42; then
14135                         fflushNULL="`$cat try.out`"
14136                 else
14137                         if $test "X$code" != X42; then
14138                                 $cat >&4 <<EOM
14139 (If this test failed, don't worry, we'll try another method shortly.)
14140 EOM
14141                         fi
14142                 fi
14143         fi
14144         $rm -f core try.core core.try.*
14145         case "$fflushNULL" in
14146         x)      $cat >&4 <<EOM
14147 Your fflush(NULL) works okay for output streams.
14148 Let's see if it clobbers input pipes...
14149 EOM
14150 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14151 # bug that improperly flushes the input end of pipes.  So we avoid the
14152 # autoflush on fork/system/exec support for now. :-(
14153 $cat >tryp.c <<EOCP
14154 #include <stdio.h>
14155 int
14156 main(int argc, char **argv)
14157 {
14158     char buf[1024];
14159     int i;
14160     char *bp = buf;
14161     while (1) {
14162         while ((i = getc(stdin)) != -1
14163                && (*bp++ = i) != '\n'
14164                && bp < &buf[1024])
14165         /* DO NOTHING */ ;
14166         *bp = '\0';
14167         fprintf(stdout, "%s", buf);
14168         fflush(NULL);
14169         if (i == -1)
14170             return 0;
14171         bp = buf;
14172     }
14173 }
14174 EOCP
14175                 fflushNULL="$define"
14176                 set tryp
14177                 if eval $compile; then
14178                     $rm -f tryp.out
14179                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14180                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14181                        $cat >&4 <<EOM
14182 fflush(NULL) seems to behave okay with input streams.
14183 EOM
14184                         fflushNULL="$define"
14185                     else
14186                         $cat >&4 <<EOM
14187 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14188 EOM
14189                         fflushNULL="$undef"
14190                     fi
14191                 fi
14192                 $rm -f core tryp.c tryp.core core.tryp.*
14193                 ;;
14194         '')     $cat >&4 <<EOM
14195 Your fflush(NULL) isn't working (contrary to ANSI C).
14196 EOM
14197                 fflushNULL="$undef"
14198                 ;;
14199         *)      $cat >&4 <<EOM
14200 Cannot figure out whether your fflush(NULL) works or not.
14201 I'm assuming it doesn't (contrary to ANSI C).
14202 EOM
14203                 fflushNULL="$undef"
14204                 ;;
14205         esac
14206         ;;
14207 $define|true|[yY]*)
14208         fflushNULL="$define"
14209         ;;
14210 *)
14211         fflushNULL="$undef"
14212         ;;
14213 esac
14214 : check explicit looping only if NULL did not work, and if the pipe
14215 : bug does not show up on an explicit flush too
14216 case "$fflushNULL" in
14217 "$undef")
14218         $cat >tryp.c <<EOCP
14219 #include <stdio.h>
14220 int
14221 main(int argc, char **argv)
14222 {
14223     char buf[1024];
14224     int i;
14225     char *bp = buf;
14226     while (1) {
14227         while ((i = getc(stdin)) != -1
14228                && (*bp++ = i) != '\n'
14229                && bp < &buf[1024])
14230         /* DO NOTHING */ ;
14231         *bp = '\0';
14232         fprintf(stdout, "%s", buf);
14233         fflush(stdin);
14234         if (i == -1)
14235             return 0;
14236         bp = buf;
14237     }
14238 }
14239 EOCP
14240         set tryp
14241         if eval $compile; then
14242             $rm -f tryp.out
14243             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14244             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14245                $cat >&4 <<EOM
14246 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14247 EOM
14248                 : now check for fflushall behaviour
14249                 case "$fflushall" in
14250                 '')     set try -DTRY_FFLUSH_ALL $output
14251                         if eval $compile; then
14252                                 $cat >&4 <<EOM
14253 (Now testing the other method--but note that this also may fail.)
14254 EOM
14255                                 $run ./try 2>/dev/null
14256                                 code=$?
14257                                 $from try.out
14258                                 if $test -s try.out -a "X$code" = X42; then
14259                                         fflushall="`$cat try.out`"
14260                                 fi
14261                         fi
14262                         $rm -f core try.core core.try.*
14263                         case "$fflushall" in
14264                         x)      $cat >&4 <<EOM
14265 Whew. Flushing explicitly all the stdio streams works.
14266 EOM
14267                                 fflushall="$define"
14268                                 ;;
14269                         '')     $cat >&4 <<EOM
14270 Sigh. Flushing explicitly all the stdio streams doesn't work.
14271 EOM
14272                                 fflushall="$undef"
14273                                 ;;
14274                         *)      $cat >&4 <<EOM
14275 Cannot figure out whether flushing stdio streams explicitly works or not.
14276 I'm assuming it doesn't.
14277 EOM
14278                                 fflushall="$undef"
14279                                 ;;
14280                         esac
14281                         ;;
14282                 "$define"|true|[yY]*)
14283                         fflushall="$define"
14284                         ;;
14285                 *)
14286                         fflushall="$undef"
14287                         ;;
14288                 esac
14289             else
14290                 $cat >&4 <<EOM
14291 All is futile.  Even fflush(stdin) clobbers input pipes!
14292 EOM
14293                 fflushall="$undef"
14294             fi
14295         else
14296             fflushall="$undef"
14297         fi
14298         $rm -f core tryp.c tryp.core core.tryp.*
14299         ;;
14300 *)      fflushall="$undef"
14301         ;;
14302 esac
14303
14304 case "$fflushNULL$fflushall" in
14305 undefundef)
14306         $cat <<EOM
14307 OK, I give up.  I cannot figure out how to flush pending stdio output.
14308 We won't be flushing handles at all before fork/exec/popen.
14309 EOM
14310         ;;
14311 esac
14312 $rm -f try.* try$exe_ext
14313
14314 : Store the full pathname to the ar program for use in the C program
14315 : Respect a hint or command line value for full_ar.
14316 case "$full_ar" in
14317 '') full_ar=$ar ;;
14318 esac
14319
14320 : Store the full pathname to the sed program for use in the C program
14321 full_sed=$sed
14322
14323 : see what type gids are declared as in the kernel
14324 echo " "
14325 echo "Looking for the type for group ids returned by getgid()."
14326 set gid_t gidtype xxx stdio.h sys/types.h
14327 eval $typedef
14328 case "$gidtype" in
14329 xxx)
14330         xxx=`./findhdr sys/user.h`
14331         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14332         case $1 in
14333         unsigned) dflt="$1 $2" ;;
14334         *) dflt="$1" ;;
14335         esac
14336         ;;
14337 *) dflt="$gidtype";;
14338 esac
14339 case "$gidtype" in
14340 gid_t) echo "gid_t found." ;;
14341 *)      rp="What is the type for group ids returned by getgid()?"
14342         . ./myread
14343         gidtype="$ans"
14344         ;;
14345 esac
14346
14347 echo " "
14348 case "$gidtype" in
14349 *_t) zzz="$gidtype"     ;;
14350 *)   zzz="gid"          ;;
14351 esac
14352 echo "Checking the size of $zzz..." >&4 
14353 cat > try.c <<EOCP
14354 #include <sys/types.h>
14355 #include <stdio.h>
14356 int main() {
14357     printf("%d\n", (int)sizeof($gidtype));
14358     exit(0);
14359 }
14360 EOCP
14361 set try
14362 if eval $compile_ok; then
14363         yyy=`$run ./try`
14364         case "$yyy" in
14365         '')     gidsize=4
14366                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14367                 ;;
14368         *)      gidsize=$yyy
14369                 echo "Your $zzz is $gidsize bytes long."
14370                 ;;
14371         esac
14372 else
14373         gidsize=4
14374         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14375 fi
14376
14377
14378 echo " "
14379 case "$gidtype" in
14380 *_t) zzz="$gidtype"     ;;
14381 *)   zzz="gid"          ;;
14382 esac
14383 echo "Checking the sign of $zzz..." >&4 
14384 cat > try.c <<EOCP
14385 #include <sys/types.h>
14386 #include <stdio.h>
14387 int main() {
14388         $gidtype foo = -1;
14389         if (foo < 0)
14390                 printf("-1\n");
14391         else
14392                 printf("1\n");
14393 }
14394 EOCP
14395 set try
14396 if eval $compile; then
14397         yyy=`$run ./try`
14398         case "$yyy" in
14399         '')     gidsign=1
14400                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14401                 ;;
14402         *)      gidsign=$yyy
14403                 case "$gidsign" in
14404                  1) echo "Your $zzz is unsigned." ;;
14405                 -1) echo "Your $zzz is signed."   ;;
14406                 esac
14407                 ;;
14408         esac
14409 else
14410         gidsign=1
14411         echo "(I can't compile the test program--guessing unsigned.)" >&4
14412 fi
14413
14414
14415 echo " "
14416
14417 if $test X"$quadtype" != X; then
14418
14419 echo "Checking how to print 64-bit integers..." >&4
14420
14421 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14422         $cat >try.c <<'EOCP'
14423 #include <sys/types.h>
14424 #include <stdio.h>
14425 int main() {
14426   int q = 12345678901;
14427   printf("%ld\n", q);
14428 }
14429 EOCP
14430         set try
14431         if eval $compile; then
14432                 yyy=`$run ./try`
14433                 case "$yyy" in
14434                 12345678901)
14435                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14436                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14437                         echo "We will use %d."
14438                         ;;
14439                 esac
14440         fi
14441 fi
14442
14443 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14444         $cat >try.c <<'EOCP'
14445 #include <sys/types.h>
14446 #include <stdio.h>
14447 int main() {
14448   long q = 12345678901;
14449   printf("%ld\n", q);
14450 }
14451 EOCP
14452         set try
14453         if eval $compile; then
14454                 yyy=`$run ./try`
14455                 case "$yyy" in
14456                 12345678901)
14457                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14458                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14459                         echo "We will use %ld."
14460                         ;;
14461                 esac
14462         fi
14463 fi
14464
14465 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14466         $cat >try.c <<'EOCP'
14467 #include <sys/types.h>
14468 #include <inttypes.h>
14469 #include <stdio.h>
14470 int main() {
14471   int64_t q = 12345678901;
14472   printf("%" PRId64 "\n", q);
14473 }
14474 EOCP
14475         set try
14476         if eval $compile; then
14477                 yyy=`$run ./try`
14478                 case "$yyy" in
14479                 12345678901)
14480                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14481                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14482                         echo "We will use the C9X style."
14483                         ;;
14484                 esac
14485         fi
14486 fi
14487
14488 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14489         $cat >try.c <<EOCP
14490 #include <sys/types.h>
14491 #include <stdio.h>
14492 int main() {
14493   $quadtype q = 12345678901;
14494   printf("%Ld\n", q);
14495 }
14496 EOCP
14497         set try
14498         if eval $compile; then
14499                 yyy=`$run ./try`
14500                 case "$yyy" in
14501                 12345678901)
14502                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14503                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14504                         echo "We will use %Ld."
14505                         ;;
14506                 esac
14507         fi
14508 fi
14509
14510 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14511         $cat >try.c <<'EOCP'
14512 #include <sys/types.h>
14513 #include <stdio.h>
14514 int main() {
14515   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14516   printf("%lld\n", q);
14517 }
14518 EOCP
14519         set try
14520         if eval $compile; then
14521                 yyy=`$run ./try`
14522                 case "$yyy" in
14523                 12345678901)
14524                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14525                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14526                         echo "We will use the %lld style."
14527                         ;;
14528                 esac
14529         fi
14530 fi
14531
14532 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14533         $cat >try.c <<EOCP
14534 #include <sys/types.h>
14535 #include <stdio.h>
14536 int main() {
14537   $quadtype q = 12345678901;
14538   printf("%qd\n", q);
14539 }
14540 EOCP
14541         set try
14542         if eval $compile; then
14543                 yyy=`$run ./try`
14544                 case "$yyy" in
14545                 12345678901)
14546                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14547                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14548                         echo "We will use %qd."
14549                         ;;
14550                 esac
14551         fi
14552 fi
14553
14554 if $test X"$sPRId64" = X; then
14555         echo "Cannot figure out how to print 64-bit integers." >&4
14556 fi
14557
14558 $rm -f try try.*
14559
14560 fi
14561
14562 case "$sPRId64" in
14563 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14564         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14565         ;;
14566 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14567         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14568         ;;
14569 esac
14570
14571
14572 echo " "
14573 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14574
14575 if $test X"$ivsize" = X8; then
14576         ivdformat="$sPRId64"
14577         uvuformat="$sPRIu64"
14578         uvoformat="$sPRIo64"
14579         uvxformat="$sPRIx64"
14580         uvXUformat="$sPRIXU64"
14581 else
14582         if $test X"$ivsize" = X"$longsize"; then
14583                 ivdformat='"ld"'
14584                 uvuformat='"lu"'
14585                 uvoformat='"lo"'
14586                 uvxformat='"lx"'
14587                 uvXUformat='"lX"'
14588         else
14589                 if $test X"$ivsize" = X"$intsize"; then
14590                         ivdformat='"d"'
14591                         uvuformat='"u"'
14592                         uvoformat='"o"'
14593                         uvxformat='"x"'
14594                         uvXUformat='"X"'
14595                 else
14596                         : far out
14597                         if $test X"$ivsize" = X"$shortsize"; then
14598                                 ivdformat='"hd"'
14599                                 uvuformat='"hu"'
14600                                 uvoformat='"ho"'
14601                                 uvxformat='"hx"'
14602                                 uvXUformat='"hX"'
14603                         fi
14604                 fi
14605         fi
14606 fi
14607
14608 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14609         nveformat="$sPRIeldbl"
14610         nvfformat="$sPRIfldbl"
14611         nvgformat="$sPRIgldbl"
14612         nvEUformat="$sPRIEUldbl"
14613         nvFUformat="$sPRIFUldbl"
14614         nvGUformat="$sPRIGUldbl"
14615 else
14616         nveformat='"e"'
14617         nvfformat='"f"'
14618         nvgformat='"g"'
14619         nvEUformat='"E"'
14620         nvFUformat='"F"'
14621         nvGUformat='"G"'
14622 fi
14623
14624 case "$ivdformat" in
14625 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14626     exit 1
14627     ;;
14628 esac
14629
14630
14631 echo " "
14632 $echo "Checking the format string to be used for gids..." >&4
14633
14634 case "$gidsign" in
14635 -1)     if $test X"$gidsize" = X"$ivsize"; then
14636                 gidformat="$ivdformat"
14637         else
14638                 if $test X"$gidsize" = X"$longsize"; then
14639                         gidformat='"ld"'
14640                 else
14641                         if $test X"$gidsize" = X"$intsize"; then
14642                                 gidformat='"d"'
14643                         else
14644                                 if $test X"$gidsize" = X"$shortsize"; then
14645                                         gidformat='"hd"'
14646                                 fi
14647                         fi
14648                 fi
14649         fi
14650         ;;
14651 *)      if $test X"$gidsize" = X"$uvsize"; then
14652                 gidformat="$uvuformat"
14653         else
14654                 if $test X"$gidsize" = X"$longsize"; then
14655                         gidformat='"lu"'
14656                 else
14657                         if $test X"$gidsize" = X"$intsize"; then
14658                                 gidformat='"u"'
14659                         else
14660                                 if $test X"$gidsize" = X"$shortsize"; then
14661                                         gidformat='"hu"'
14662                                 fi
14663                         fi
14664                 fi
14665         fi
14666         ;;
14667 esac
14668
14669 : see if getgroups exists
14670 set getgroups d_getgrps
14671 eval $inlibc
14672
14673 : see if setgroups exists
14674 set setgroups d_setgrps
14675 eval $inlibc
14676
14677
14678 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14679 echo " "
14680 case "$d_getgrps$d_setgrps" in
14681 *define*)
14682         case "$groupstype" in
14683         '') dflt="$gidtype" ;;
14684         *)  dflt="$groupstype" ;;
14685         esac
14686         $cat <<EOM
14687 What type of pointer is the second argument to getgroups() and setgroups()?
14688 Usually this is the same as group ids, $gidtype, but not always.
14689
14690 EOM
14691         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14692         . ./myread
14693         groupstype="$ans"
14694         ;;
14695 *)  groupstype="$gidtype";;
14696 esac
14697
14698 echo " "
14699 echo "Checking if your $make program sets \$(MAKE)..." >&4
14700 case "$make_set_make" in
14701 '')
14702         $sed 's/^X //' > testmake.mak << 'EOF'
14703 Xall:
14704 X       @echo 'maketemp="$(MAKE)"'
14705 EOF
14706         case "`$make -f testmake.mak 2>/dev/null`" in
14707         *maketemp=*) make_set_make='#' ;;
14708         *)      make_set_make="MAKE=$make" ;;
14709         esac
14710         $rm -f testmake.mak
14711         ;;
14712 esac
14713 case "$make_set_make" in
14714 '#') echo "Yup, it does.";;
14715 *) echo "Nope, it doesn't.";;
14716 esac
14717
14718 : see what type is used for mode_t
14719 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14720 set mode_t modetype int stdio.h sys/types.h
14721 eval $typedef_ask
14722
14723 : see if stdarg is available
14724 echo " "
14725 if $test `./findhdr stdarg.h`; then
14726         echo "<stdarg.h> found." >&4
14727         valstd="$define"
14728 else
14729         echo "<stdarg.h> NOT found." >&4
14730         valstd="$undef"
14731 fi
14732
14733 : see if varags is available
14734 echo " "
14735 if $test `./findhdr varargs.h`; then
14736         echo "<varargs.h> found." >&4
14737 else
14738         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14739 fi
14740
14741 : set up the varargs testing programs
14742 $cat > varargs.c <<EOP
14743 #ifdef I_STDARG
14744 #include <stdarg.h>
14745 #endif
14746 #ifdef I_VARARGS
14747 #include <varargs.h>
14748 #endif
14749
14750 #ifdef I_STDARG
14751 int f(char *p, ...)
14752 #else
14753 int f(va_alist)
14754 va_dcl
14755 #endif
14756 {
14757         va_list ap;
14758 #ifndef I_STDARG
14759         char *p;
14760 #endif
14761 #ifdef I_STDARG
14762         va_start(ap,p);
14763 #else
14764         va_start(ap);
14765         p = va_arg(ap, char *);
14766 #endif
14767         va_end(ap);
14768 }
14769 EOP
14770 $cat > varargs <<EOP
14771 $startsh
14772 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14773         echo "true"
14774 else
14775         echo "false"
14776 fi
14777 $rm -f varargs$_o
14778 EOP
14779 chmod +x varargs
14780
14781 : now check which varargs header should be included
14782 echo " "
14783 i_varhdr=''
14784 case "$valstd" in
14785 "$define")
14786         if `./varargs I_STDARG`; then
14787                 val='stdarg.h'
14788         elif `./varargs I_VARARGS`; then
14789                 val='varargs.h'
14790         fi
14791         ;;
14792 *)
14793         if `./varargs I_VARARGS`; then
14794                 val='varargs.h'
14795         fi
14796         ;;
14797 esac
14798 case "$val" in
14799 '')
14800 echo "I could not find the definition for va_dcl... You have problems..." >&4
14801         val="$undef"; set i_stdarg; eval $setvar
14802         val="$undef"; set i_varargs; eval $setvar
14803         ;;
14804 *) 
14805         set i_varhdr
14806         eval $setvar
14807         case "$i_varhdr" in
14808         stdarg.h)
14809                 val="$define"; set i_stdarg; eval $setvar
14810                 val="$undef"; set i_varargs; eval $setvar
14811                 ;;
14812         varargs.h)
14813                 val="$undef"; set i_stdarg; eval $setvar
14814                 val="$define"; set i_varargs; eval $setvar
14815                 ;;
14816         esac
14817         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14818 esac
14819 $rm -f varargs*
14820
14821 : see if we need va_copy
14822 echo " "
14823 case "$i_stdarg" in
14824 "$define")
14825         $cat >try.c <<EOCP
14826 #include <stdarg.h>
14827 #include <stdio.h>
14828 #$i_stdlib I_STDLIB
14829 #ifdef I_STDLIB
14830 #include <stdlib.h>
14831 #endif
14832 #include <signal.h>
14833
14834 int
14835 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14836 {
14837   return vfprintf(f, fmt, *valp);
14838 }
14839  
14840 int    
14841 myvfprintf(FILE *f, const  char *fmt, va_list val)
14842 {
14843   return ivfprintf(f, fmt, &val);
14844 }
14845       
14846 int
14847 myprintf(char *fmt, ...) 
14848 {
14849   va_list val;
14850   va_start(val, fmt);
14851   return myvfprintf(stdout, fmt, val); 
14852 }         
14853
14854 int
14855 main(int ac, char **av)
14856 {
14857   signal(SIGSEGV, exit);
14858
14859   myprintf("%s%cs all right, then\n", "that", '\'');                            
14860   exit(0);      
14861 }
14862 EOCP
14863         set try
14864         if eval $compile && $run ./try 2>&1 >/dev/null; then
14865                 case "`$run ./try`" in
14866                 "that's all right, then")
14867                         okay=yes
14868                         ;;
14869                 esac
14870         fi
14871         case "$okay" in
14872         yes)    echo "It seems that you don't need va_copy()." >&4
14873                 need_va_copy="$undef"
14874                 ;;
14875         *)      echo "It seems that va_copy() or similar will be needed." >&4
14876                 need_va_copy="$define"
14877                 ;;
14878         esac
14879         $rm -f try.* core core.* *.core *.core.*
14880         ;;
14881 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14882         ;;
14883 esac
14884
14885 : define a fucntion to check prototypes
14886 $cat > protochk <<EOSH
14887 $startsh
14888 cc="$cc"
14889 optimize="$optimize"
14890 ccflags="$ccflags"
14891 prototype="$prototype"
14892 define="$define"
14893 rm=$rm
14894 EOSH
14895
14896 $cat >> protochk <<'EOSH'
14897
14898 $rm -f try.c
14899 foo="$1"
14900 shift
14901 while test $# -ge 2; do
14902         case "$1" in
14903                 $define) echo "#include <$2>" >> try.c ;;
14904                 literal) echo "$2" >> try.c ;;
14905         esac
14906     shift 2
14907 done
14908 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14909 cat >> try.c <<'EOCP'
14910 #ifdef CAN_PROTOTYPE
14911 #define _(args) args
14912 #else
14913 #define _(args) ()
14914 #endif
14915 EOCP
14916 echo "$foo" >> try.c
14917 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14918 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14919 status=$?
14920 $rm -f try.[co]
14921 exit $status
14922 EOSH
14923 chmod +x protochk
14924 $eunicefix protochk
14925
14926 : see what type is used for size_t
14927 rp="What is the type used for the length parameter for string functions?"
14928 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14929 eval $typedef_ask
14930
14931 : check for type of arguments to gethostbyaddr. 
14932 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14933         case "$d_gethbyaddr" in
14934         $define)
14935                 $cat <<EOM
14936
14937 Checking to see what type of arguments are accepted by gethostbyaddr().
14938 EOM
14939                 hdrs="$define sys/types.h
14940                         $d_socket sys/socket.h 
14941                         $i_niin netinet/in.h 
14942                         $i_netdb netdb.h
14943                         $i_unistd unistd.h"
14944                 : The first arg can 'char *' or 'void *'
14945                 : The second arg is some of integral type
14946                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14947                         for yyy in size_t long int; do
14948                                 case "$netdb_host_type" in
14949                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14950                                         if ./protochk "$try" $hdrs; then
14951                                                 echo "Your system accepts $xxx for the first arg."
14952                                                 echo "...and $yyy for the second arg."
14953                                                 netdb_host_type="$xxx"
14954                                                 netdb_hlen_type="$yyy"
14955                                         fi
14956                                         ;;
14957                                 esac
14958                         done
14959                 done
14960                 : In case none of those worked, prompt the user.
14961                 case "$netdb_host_type" in
14962                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14963                         dflt='char *'
14964                         . ./myread
14965                         netdb_host_type=$ans
14966                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14967                         dflt="$sizetype"
14968                         . ./myread
14969                         netdb_hlen_type=$ans
14970                         ;;
14971                 esac
14972                 ;;
14973         *)      : no gethostbyaddr, so pick harmless defaults
14974                 netdb_host_type='char *'
14975                 netdb_hlen_type="$sizetype"
14976                 ;;
14977         esac
14978         # Remove the "const" if needed. -- but then we'll have a 
14979         # prototype clash!
14980         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14981 fi
14982
14983 : check for type of argument to gethostbyname. 
14984 if test "X$netdb_name_type" = X ; then
14985         case "$d_gethbyname" in
14986         $define)
14987                 $cat <<EOM
14988
14989 Checking to see what type of argument is accepted by gethostbyname().
14990 EOM
14991                 hdrs="$define sys/types.h
14992                         $d_socket sys/socket.h 
14993                         $i_niin netinet/in.h 
14994                         $i_netdb netdb.h
14995                         $i_unistd unistd.h"
14996                 for xxx in "const char *" "char *"; do
14997                         case "$netdb_name_type" in
14998                         '')     try="extern struct hostent *gethostbyname($xxx);"
14999                                 if ./protochk "$try" $hdrs; then
15000                                         echo "Your system accepts $xxx."
15001                                         netdb_name_type="$xxx"
15002                                 fi
15003                                 ;;
15004                         esac
15005                 done
15006                 : In case none of those worked, prompt the user.
15007                 case "$netdb_name_type" in
15008                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15009                         dflt='char *'
15010                         . ./myread
15011                         netdb_name_type=$ans
15012                         ;;
15013                 esac
15014                 ;;
15015         *)      : no gethostbyname, so pick harmless default
15016                 netdb_name_type='char *'
15017                 ;;
15018         esac
15019 fi
15020
15021 : check for type of 1st argument to getnetbyaddr. 
15022 if test "X$netdb_net_type" = X ; then
15023         case "$d_getnbyaddr" in
15024         $define)
15025                 $cat <<EOM
15026
15027 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15028 EOM
15029                 hdrs="$define sys/types.h
15030                         $d_socket sys/socket.h 
15031                         $i_niin netinet/in.h 
15032                         $i_netdb netdb.h
15033                         $i_unistd unistd.h"
15034                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15035                         case "$netdb_net_type" in
15036                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15037                                 if ./protochk "$try" $hdrs; then
15038                                         echo "Your system accepts $xxx."
15039                                         netdb_net_type="$xxx"
15040                                 fi
15041                                 ;;
15042                         esac
15043                 done
15044                 : In case none of those worked, prompt the user.
15045                 case "$netdb_net_type" in
15046                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15047                         dflt='long'
15048                         . ./myread
15049                         netdb_net_type=$ans
15050                         ;;
15051                 esac
15052                 ;;
15053         *)      : no getnetbyaddr, so pick harmless default
15054                 netdb_net_type='long'
15055                 ;;
15056         esac
15057 fi
15058 : locate the preferred pager for this system
15059 case "$pager" in
15060 '')
15061         dflt=''
15062         case "$pg" in
15063         /*) dflt=$pg;;
15064         [a-zA-Z]:/*) dflt=$pg;;
15065         esac
15066         case "$more" in
15067         /*) dflt=$more;;
15068         [a-zA-Z]:/*) dflt=$more;;
15069         esac
15070         case "$less" in
15071         /*) dflt=$less;;
15072         [a-zA-Z]:/*) dflt=$less;;
15073         esac
15074         case "$dflt" in
15075         '') dflt=/usr/ucb/more;;
15076         esac
15077         ;;
15078 *) dflt="$pager";;
15079 esac
15080 echo " "
15081 fn=f/
15082 rp='What pager is used on your system?'
15083 . ./getfile
15084 pager="$ans"
15085
15086 : see what type pids are declared as in the kernel
15087 rp="What is the type of process ids on this system?"
15088 set pid_t pidtype int stdio.h sys/types.h
15089 eval $typedef_ask
15090
15091 : Find earliest binary compatible site_perl subdirectory perl can use.
15092 case "$bincompat5005" in
15093 "$define") xs_apiversion='5.005' ;;
15094 *) xs_apiversion=$version ;;   # The current site_perl version.
15095 esac
15096 : Find earliest pure perl site_perl subdirectory perl can use.
15097 : The versioned directories started at 5.005.
15098 pm_apiversion='5.005'
15099
15100 : see if ar generates random libraries by itself
15101 echo " "
15102 echo "Checking how to generate random libraries on your machine..." >&4
15103 echo 'int bar1() { return bar2(); }' > bar1.c
15104 echo 'int bar2() { return 2; }' > bar2.c
15105 $cat > foo.c <<'EOP'
15106 int main() { printf("%d\n", bar1()); exit(0); }
15107 EOP
15108 $cc $ccflags -c bar1.c >/dev/null 2>&1
15109 $cc $ccflags -c bar2.c >/dev/null 2>&1
15110 $cc $ccflags -c foo.c >/dev/null 2>&1
15111 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15112 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15113         $run ./foobar >/dev/null 2>&1; then
15114         echo "$ar appears to generate random libraries itself."
15115         orderlib=false
15116         ranlib=":"
15117 elif $ar ts bar$_a >/dev/null 2>&1 &&
15118         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15119         $run ./foobar >/dev/null 2>&1; then
15120                 echo "a table of contents needs to be added with '$ar ts'."
15121                 orderlib=false
15122                 ranlib="$ar ts"
15123 else
15124         case "$ranlib" in
15125         :) ranlib='';;
15126         '')
15127                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15128                 $test -f $ranlib || ranlib=''
15129                 ;;
15130         esac
15131         if $test -n "$ranlib"; then
15132                 echo "your system has '$ranlib'; we'll use that."
15133                 orderlib=false
15134         else
15135                 echo "your system doesn't seem to support random libraries"
15136                 echo "so we'll use lorder and tsort to order the libraries."
15137                 orderlib=true
15138                 ranlib=":"
15139         fi
15140 fi
15141 $rm -f foo* bar* 
15142
15143 : check for type of arguments to select. 
15144 case "$selecttype" in
15145 '') case "$d_select" in
15146         $define)
15147                 echo " "
15148                 $cat <<EOM
15149 Checking to see what type of arguments are accepted by select().
15150 EOM
15151                 hdrs="$define sys/types.h
15152                         $i_systime sys/time.h 
15153                         $i_sysselct sys/select.h
15154                         $d_socket sys/socket.h"
15155                 : The first arg can be int, unsigned, or size_t
15156                 : The last arg may or may not be 'const'
15157                 val=''
15158                 : void pointer has been seen but using that
15159                 : breaks the selectminbits test
15160                 for xxx in 'fd_set *' 'int *'; do
15161                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15162                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15163                                         case "$val" in
15164                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15165                                                 if ./protochk "$try" $hdrs; then
15166                                                         echo "Your system accepts $xxx."
15167                                                         val="$xxx"
15168                                                 fi
15169                                                 ;;
15170                                         esac
15171                                 done
15172                         done
15173                 done
15174                 case "$val" in
15175                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15176                         case "$d_fd_set" in
15177                                 $define) dflt="fd_set *" ;;
15178                                 *)              dflt="int *" ;;
15179                         esac
15180                         . ./myread
15181                         val=$ans
15182                         ;;
15183                 esac
15184                 selecttype="$val"
15185                 ;;
15186         *)      : no select, so pick a harmless default
15187                 selecttype='int *'
15188                 ;;
15189         esac
15190         ;;
15191 esac
15192
15193 : check for the select 'width'
15194 case "$selectminbits" in
15195 '') case "$d_select" in
15196         $define)
15197                 $cat <<EOM
15198
15199 Checking to see on how many bits at a time your select() operates...
15200 EOM
15201                 $cat >try.c <<EOCP
15202 #include <sys/types.h>
15203 #$i_time I_TIME
15204 #$i_systime I_SYS_TIME
15205 #$i_systimek I_SYS_TIME_KERNEL
15206 #ifdef I_TIME
15207 #   include <time.h>
15208 #endif
15209 #ifdef I_SYS_TIME
15210 #   ifdef I_SYS_TIME_KERNEL
15211 #       define KERNEL
15212 #   endif
15213 #   include <sys/time.h>
15214 #   ifdef I_SYS_TIME_KERNEL
15215 #       undef KERNEL
15216 #   endif
15217 #endif
15218 #$i_sysselct I_SYS_SELECT
15219 #ifdef I_SYS_SELECT
15220 #include <sys/select.h>
15221 #endif
15222 #$d_socket HAS_SOCKET
15223 #ifdef HAS_SOCKET
15224 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15225 #endif
15226 #include <stdio.h>
15227 $selecttype b;
15228 #define S sizeof(*(b))
15229 #define MINBITS 64
15230 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15231 #define NBITS  (NBYTES * 8)
15232 int main() {
15233     char s[NBYTES];
15234     struct timeval t;
15235     int i;
15236     FILE* fp;
15237     int fd;
15238
15239     fclose(stdin);
15240     fp = fopen("try.c", "r");
15241     if (fp == 0)
15242       exit(1);
15243     fd = fileno(fp);
15244     if (fd < 0)
15245       exit(2);
15246     b = ($selecttype)s;
15247     for (i = 0; i < NBITS; i++)
15248         FD_SET(i, b);
15249     t.tv_sec  = 0;
15250     t.tv_usec = 0;
15251     select(fd + 1, b, 0, 0, &t);
15252     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15253     printf("%d\n", i + 1);
15254     return 0;
15255 }
15256 EOCP
15257                 set try
15258                 if eval $compile_ok; then
15259                         selectminbits=`$run ./try`
15260                         case "$selectminbits" in
15261                         '')     cat >&4 <<EOM
15262 Cannot figure out on how many bits at a time your select() operates.
15263 I'll play safe and guess it is 32 bits.
15264 EOM
15265                                 selectminbits=32
15266                                 bits="32 bits"
15267                                 ;;
15268                         1)      bits="1 bit" ;;
15269                         *)      bits="$selectminbits bits" ;;
15270                         esac
15271                         echo "Your select() operates on $bits at a time." >&4
15272                 else
15273                         rp='What is the minimum number of bits your select() operates on?'
15274                         case "$byteorder" in
15275                         1234|12345678)  dflt=32 ;;
15276                         *)              dflt=1  ;;
15277                         esac
15278                         . ./myread
15279                         val=$ans
15280                         selectminbits="$val"
15281                 fi
15282                 $rm -f try.* try
15283                 ;;
15284         *)      : no select, so pick a harmless default
15285                 selectminbits='32'
15286                 ;;
15287         esac
15288         ;;
15289 esac
15290
15291 : Trace out the files included by signal.h, then look for SIGxxx names.
15292 : Remove SIGARRAYSIZE used by HPUX.
15293 : Remove SIGSTKSIZE used by Linux.
15294 : Remove SIGSTKSZ used by Posix.
15295 : Remove SIGTYP void lines used by OS2.
15296 : Some cpps, like os390, dont give the file name anywhere
15297 if [ "X$fieldn" = X ]; then
15298         : Just make some guesses.  We check them later.
15299         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15300 else
15301         xxx=`echo '#include <signal.h>' |
15302         $cppstdin $cppminus $cppflags 2>/dev/null |
15303         $grep '^[       ]*#.*include' | 
15304         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15305 fi
15306 : Check this list of files to be sure we have parsed the cpp output ok.
15307 : This will also avoid potentially non-existent files, such 
15308 : as ../foo/bar.h
15309 xxxfiles=''
15310 for xx in $xxx /dev/null ; do
15311         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15312 done
15313 : If we have found no files, at least try signal.h
15314 case "$xxxfiles" in
15315 '')     xxxfiles=`./findhdr signal.h` ;;
15316 esac
15317 xxx=`awk '
15318 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15319         print substr($2, 4, 20)
15320 }
15321 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15322         print substr($3, 4, 20)
15323 }' $xxxfiles`
15324 : Append some common names just in case the awk scan failed.
15325 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15326 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15327 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15328 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15329 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15330
15331 : generate a few handy files for later
15332 $cat > signal.c <<'EOCP'
15333 #include <sys/types.h>
15334 #include <signal.h>
15335 #include <stdio.h>
15336 int main() {
15337
15338 /* Strange style to avoid deeply-nested #if/#else/#endif */
15339 #ifndef NSIG
15340 #  ifdef _NSIG
15341 #    define NSIG (_NSIG)
15342 #  endif
15343 #endif
15344
15345 #ifndef NSIG
15346 #  ifdef SIGMAX
15347 #    define NSIG (SIGMAX+1)
15348 #  endif
15349 #endif
15350
15351 #ifndef NSIG
15352 #  ifdef SIG_MAX
15353 #    define NSIG (SIG_MAX+1)
15354 #  endif
15355 #endif
15356
15357 #ifndef NSIG
15358 #  ifdef MAXSIG
15359 #    define NSIG (MAXSIG+1)
15360 #  endif
15361 #endif
15362
15363 #ifndef NSIG
15364 #  ifdef MAX_SIG
15365 #    define NSIG (MAX_SIG+1)
15366 #  endif
15367 #endif
15368
15369 #ifndef NSIG
15370 #  ifdef SIGARRAYSIZE
15371 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15372 #  endif
15373 #endif
15374
15375 #ifndef NSIG
15376 #  ifdef _sys_nsig
15377 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15378 #  endif
15379 #endif
15380
15381 /* Default to some arbitrary number that's big enough to get most
15382    of the common signals.
15383 */
15384 #ifndef NSIG
15385 #    define NSIG 50
15386 #endif
15387
15388 printf("NSIG %d\n", NSIG);
15389
15390 #ifndef JUST_NSIG
15391
15392 EOCP
15393
15394 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15395 {
15396         printf "#ifdef SIG"; printf $1; printf "\n"
15397         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15398         printf $1; printf ");\n"
15399         printf "#endif\n"
15400 }
15401 END {
15402         printf "#endif /* JUST_NSIG */\n";
15403         printf "exit(0);\n}\n";
15404 }
15405 ' >>signal.c
15406 $cat >signal.awk <<'EOP'
15407 BEGIN { ndups = 0 }
15408 $1 ~ /^NSIG$/ { nsig = $2 }
15409 ($1 !~ /^NSIG$/) && (NF == 2) {
15410     if ($2 > maxsig) { maxsig = $2 }
15411     if (sig_name[$2]) {
15412         dup_name[ndups] = $1
15413         dup_num[ndups] = $2
15414         ndups++ 
15415     }
15416     else {
15417         sig_name[$2] = $1
15418         sig_num[$2] = $2
15419     }
15420 }
15421 END { 
15422     if (nsig == 0) {
15423         nsig = maxsig + 1
15424     }
15425     printf("NSIG %d\n", nsig);
15426     for (n = 1; n < nsig; n++) {
15427         if (sig_name[n]) {
15428             printf("%s %d\n", sig_name[n], sig_num[n])
15429         }
15430         else {
15431             printf("NUM%d %d\n", n, n) 
15432         }
15433     }
15434     for (n = 0; n < ndups; n++) {
15435         printf("%s %d\n", dup_name[n], dup_num[n])
15436     }
15437 }
15438 EOP
15439 $cat >signal_cmd <<EOS
15440 $startsh
15441 if $test -s signal.lst; then
15442     echo "Using your existing signal.lst file"
15443         exit 0
15444 fi
15445 xxx="$xxx"
15446 EOS
15447 $cat >>signal_cmd <<'EOS'
15448
15449 set signal
15450 if eval $compile_ok; then
15451         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15452 else
15453         echo "(I can't seem be able to compile the whole test program)" >&4
15454         echo "(I'll try it in little pieces.)" >&4
15455         set signal -DJUST_NSIG
15456         if eval $compile_ok; then
15457                 $run ./signal$_exe > signal.nsg
15458                 $cat signal.nsg
15459         else
15460                 echo "I can't seem to figure out how many signals you have." >&4
15461                 echo "Guessing 50." >&4
15462                 echo 'NSIG 50' > signal.nsg
15463         fi
15464         : Now look at all the signal names, one at a time.
15465         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15466                 $cat > signal.c <<EOCP
15467 #include <sys/types.h>
15468 #include <signal.h>
15469 #include <stdio.h>
15470 int main() {
15471 printf("$xx %d\n", SIG${xx});
15472 return 0;
15473 }
15474 EOCP
15475                 set signal
15476                 if eval $compile; then
15477                         echo "SIG${xx} found."
15478                         $run ./signal$_exe  >> signal.ls1
15479                 else
15480                         echo "SIG${xx} NOT found."
15481                 fi
15482         done
15483         if $test -s signal.ls1; then
15484                 $cat signal.nsg signal.ls1 |
15485                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15486         fi
15487
15488 fi
15489 if $test -s signal.lst; then
15490         :
15491 else
15492         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15493         echo 'kill -l' >signal
15494         set X `csh -f <signal`
15495         $rm -f signal
15496         shift
15497         case $# in
15498         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15499         esac
15500         echo $@ | $tr ' ' $trnl | \
15501             $awk '{ printf "%s %d\n", $1, ++s; }
15502                   END { printf "NSIG %d\n", ++s }' >signal.lst
15503 fi
15504 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15505 EOS
15506 chmod a+x signal_cmd
15507 $eunicefix signal_cmd
15508
15509 : generate list of signal names
15510 echo " "
15511 case "$sig_name_init" in
15512 '') doinit=yes ;;
15513 *)  case "$sig_num_init" in
15514     ''|*,*) doinit=yes ;;
15515     esac ;;
15516 esac
15517 case "$doinit" in
15518 yes)
15519         echo "Generating a list of signal names and numbers..." >&4
15520         . ./signal_cmd
15521         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15522         sig_name=`$awk 'BEGIN { printf "ZERO " }
15523                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15524         sig_num=`$awk  'BEGIN { printf "0 " }
15525                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15526         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15527                              !/^NSIG/   { printf "\"%s\", ", $1 }
15528                              END        { printf "0\n" }' signal.lst`
15529         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15530                              !/^NSIG/   { printf "%d, ", $2}
15531                              END        { printf "0\n"}' signal.lst`
15532         ;;
15533 esac
15534 echo "The following $sig_count signals are available:"
15535 echo " "
15536 echo $sig_name | $awk \
15537 'BEGIN { linelen = 0 }
15538 {
15539         for (i = 1; i <= NF; i++) {
15540                 name = "SIG" $i " "
15541                 linelen = linelen + length(name)
15542                 if (linelen > 70) {
15543                         printf "\n"
15544                         linelen = length(name)
15545                 }
15546                 printf "%s", name
15547         }
15548         printf "\n"
15549 }'
15550 sig_size=`echo $sig_name | awk '{print NF}'`
15551 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15552
15553 echo " "
15554 case "$sizetype" in
15555 *_t) zzz="$sizetype"    ;;
15556 *)   zzz="filesize"     ;;
15557 esac
15558 echo "Checking the size of $zzz..." >&4 
15559 cat > try.c <<EOCP
15560 #include <sys/types.h>
15561 #include <stdio.h>
15562 int main() {
15563     printf("%d\n", (int)sizeof($sizetype));
15564     exit(0);
15565 }
15566 EOCP
15567 set try
15568 if eval $compile_ok; then
15569         yyy=`$run ./try`
15570         case "$yyy" in
15571         '')     sizesize=4
15572                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15573                 ;;
15574         *)      sizesize=$yyy
15575                 echo "Your $zzz size is $sizesize bytes."
15576                 ;;
15577         esac
15578 else
15579         sizesize=4
15580         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15581 fi
15582
15583
15584 : check for socklen_t
15585 echo " "
15586 echo "Checking to see if you have socklen_t..." >&4
15587 $cat >try.c <<EOCP
15588 #include <sys/types.h>
15589 #$d_socket HAS_SOCKET
15590 #ifdef HAS_SOCKET
15591 #include <sys/socket.h>
15592 #endif
15593 int main() { socklen_t x = 16; }
15594 EOCP
15595 set try
15596 if eval $compile; then
15597         val="$define"
15598         echo "You have socklen_t."
15599 else
15600         val="$undef"
15601         echo "You do not have socklen_t."
15602         case "$sizetype" in
15603         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15604         esac
15605 fi
15606 $rm -f try try.*
15607 set d_socklen_t
15608 eval $setvar
15609
15610 : see if this is a socks.h system
15611 set socks.h i_socks
15612 eval $inhdr
15613
15614 : check for type of the size argument to socket calls
15615 case "$d_socket" in
15616 "$define")
15617         $cat <<EOM
15618
15619 Checking to see what type is the last argument of accept().
15620 EOM
15621         yyy=''
15622         case "$d_socklen_t" in
15623         "$define") yyy="$yyy socklen_t"
15624         esac
15625         yyy="$yyy $sizetype int long unsigned"
15626         for xxx in $yyy; do
15627                 case "$socksizetype" in
15628                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15629                         case "$usesocks" in
15630                         "$define")
15631                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15632                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15633                                         socksizetype="$xxx"
15634                                 fi
15635                                 ;;
15636                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15637                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15638                                         socksizetype="$xxx"
15639                                 fi
15640                                 ;;
15641                         esac
15642                         ;;
15643                 esac
15644         done
15645 : In case none of those worked, prompt the user.
15646         case "$socksizetype" in
15647         '')     rp='What is the type for socket address structure sizes?'
15648                 dflt='int'
15649                 . ./myread
15650                 socksizetype=$ans
15651                 ;;
15652         esac
15653         ;;
15654 *)      : no sockets, so pick relatively harmless default
15655         socksizetype='int'
15656         ;;
15657 esac
15658
15659 : see what type is used for signed size_t
15660 set ssize_t ssizetype int stdio.h sys/types.h
15661 eval $typedef
15662 dflt="$ssizetype"
15663 $cat > try.c <<EOM
15664 #include <stdio.h>
15665 #include <sys/types.h>
15666 #define Size_t $sizetype
15667 #define SSize_t $dflt
15668 int main()
15669 {
15670         if (sizeof(Size_t) == sizeof(SSize_t))
15671                 printf("$dflt\n");
15672         else if (sizeof(Size_t) == sizeof(int))
15673                 printf("int\n");
15674         else 
15675                 printf("long\n");
15676         exit(0);
15677 }
15678 EOM
15679 echo " "
15680 set try
15681 if eval $compile_ok && $run ./try > /dev/null; then
15682         ssizetype=`$run ./try`
15683         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15684 else
15685         $cat >&4 <<EOM
15686 Help! I can't compile and run the ssize_t test program: please enlighten me!
15687 (This is probably a misconfiguration in your system or libraries, and
15688 you really ought to fix it.  Still, I'll try anyway.)
15689
15690 I need a type that is the same size as $sizetype, but is guaranteed to
15691 be signed.  Common values are ssize_t, int and long.
15692
15693 EOM
15694         rp="What signed type is the same size as $sizetype?"
15695         . ./myread
15696         ssizetype="$ans"
15697 fi
15698 $rm -f try try.*
15699
15700 : see what type of char stdio uses.
15701 echo " "
15702 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15703 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15704         echo "Your stdio uses unsigned chars." >&4
15705         stdchar="unsigned char"
15706 else
15707         echo "Your stdio uses signed chars." >&4
15708         stdchar="char"
15709 fi
15710 $rm -f stdioh
15711
15712
15713
15714 : see if time exists
15715 echo " "
15716 if test "X$d_time" = X -o X"$timetype" = X; then
15717     if set time val -f d_time; eval $csym; $val; then
15718                 echo 'time() found.' >&4
15719                 val="$define"
15720                 rp="What is the type returned by time() on this system?"
15721                 set time_t timetype long stdio.h sys/types.h
15722                 eval $typedef_ask
15723     else
15724                 echo 'time() not found, hope that will do.' >&4
15725                 val="$undef"
15726                 timetype='int';
15727     fi
15728     set d_time
15729     eval $setvar
15730 fi
15731
15732 : see what type uids are declared as in the kernel
15733 echo " "
15734 echo "Looking for the type for user ids returned by getuid()."
15735 set uid_t uidtype xxx stdio.h sys/types.h
15736 eval $typedef
15737 case "$uidtype" in
15738 xxx)
15739         xxx=`./findhdr sys/user.h`
15740         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15741         case $1 in
15742         unsigned) dflt="$1 $2" ;;
15743         *) dflt="$1" ;;
15744         esac
15745         ;;
15746 *) dflt="$uidtype";;
15747 esac
15748 case "$uidtype" in
15749 uid_t)  echo "uid_t found." ;;
15750 *)      rp="What is the type for user ids returned by getuid()?"
15751         . ./myread
15752         uidtype="$ans"
15753         ;;
15754 esac
15755
15756 echo " "
15757 case "$uidtype" in
15758 *_t) zzz="$uidtype"     ;;
15759 *)   zzz="uid"          ;;
15760 esac
15761 echo "Checking the size of $zzz..." >&4 
15762 cat > try.c <<EOCP
15763 #include <sys/types.h>
15764 #include <stdio.h>
15765 int main() {
15766     printf("%d\n", (int)sizeof($uidtype));
15767     exit(0);
15768 }
15769 EOCP
15770 set try
15771 if eval $compile_ok; then
15772         yyy=`$run ./try`
15773         case "$yyy" in
15774         '')     uidsize=4
15775                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15776                 ;;
15777         *)      uidsize=$yyy
15778                 echo "Your $zzz is $uidsize bytes long."
15779                 ;;
15780         esac
15781 else
15782         uidsize=4
15783         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15784 fi
15785
15786 echo " "
15787 case "$uidtype" in
15788 *_t) zzz="$uidtype"     ;;
15789 *)   zzz="uid"          ;;
15790 esac
15791 echo "Checking the sign of $zzz..." >&4
15792 cat > try.c <<EOCP
15793 #include <sys/types.h>
15794 #include <stdio.h>
15795 int main() {
15796         $uidtype foo = -1;
15797         if (foo < 0)
15798                 printf("-1\n");
15799         else
15800                 printf("1\n");
15801 }
15802 EOCP
15803 set try
15804 if eval $compile; then
15805         yyy=`$run ./try`
15806         case "$yyy" in
15807         '')     uidsign=1
15808                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15809                 ;;
15810         *)      uidsign=$yyy
15811                 case "$uidsign" in
15812                  1) echo "Your $zzz is unsigned." ;;
15813                 -1) echo "Your $zzz is signed."   ;;
15814                 esac
15815                 ;;
15816         esac
15817 else
15818         uidsign=1
15819         echo "(I can't compile the test program--guessing unsigned.)" >&4
15820 fi
15821
15822
15823
15824 echo " "
15825 $echo "Checking the format string to be used for uids..." >&4
15826
15827 case "$uidsign" in
15828 -1)     if $test X"$uidsize" = X"$ivsize"; then
15829                 uidformat="$ivdformat"
15830         else
15831                 if $test X"$uidsize" = X"$longsize"; then
15832                         uidformat='"ld"'
15833                 else
15834                         if $test X"$uidsize" = X"$intsize"; then
15835                                 uidformat='"d"'
15836                         else
15837                                 if $test X"$uidsize" = X"$shortsize"; then
15838                                         uidformat='"hd"'
15839                                 fi
15840                         fi
15841                 fi
15842         fi
15843         ;;
15844 *)      if $test X"$uidsize" = X"$uvsize"; then
15845                 uidformat="$uvuformat"
15846         else
15847                 if $test X"$uidsize" = X"$longsize"; then
15848                         uidformat='"lu"'
15849                 else
15850                         if $test X"$uidsize" = X"$intsize"; then
15851                                 uidformat='"u"'
15852                         else
15853                                 if $test X"$uidsize" = X"$shortsize"; then
15854                                         uidformat='"hu"'
15855                                 fi
15856                         fi
15857                 fi
15858         fi
15859         ;;
15860 esac
15861
15862 : determine compiler compiler
15863 case "$yacc" in
15864 '')
15865         dflt=yacc;;
15866 *)
15867         dflt="$yacc";;
15868 esac
15869 echo " "
15870 comp='yacc'
15871 if $test -f "$byacc"; then
15872         dflt="$byacc"
15873         comp="byacc or $comp"
15874 fi
15875 if $test -f "$bison"; then
15876         comp="$comp or bison -y"
15877 fi
15878 rp="Which compiler compiler ($comp) shall I use?"
15879 . ./myread
15880 yacc="$ans"
15881 case "$yacc" in
15882 *bis*)
15883         case "$yacc" in
15884         *-y*) ;;
15885         *)
15886                 yacc="$yacc -y"
15887                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15888                 ;;
15889         esac
15890         ;;
15891 esac
15892
15893 : see if fcntl.h is there
15894 val=''
15895 set fcntl.h val
15896 eval $inhdr
15897
15898 : see if we can include fcntl.h
15899 case "$val" in
15900 "$define")
15901         echo " "
15902         if $h_fcntl; then
15903                 val="$define"
15904                 echo "We'll be including <fcntl.h>." >&4
15905         else
15906                 val="$undef"
15907                 if $h_sysfile; then
15908         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15909                 else
15910                         echo "We won't be including <fcntl.h>." >&4
15911                 fi
15912         fi
15913         ;;
15914 *)
15915         h_fcntl=false
15916         val="$undef"
15917         ;;
15918 esac
15919 set i_fcntl
15920 eval $setvar
15921
15922 : see if this is a fp.h system
15923 set fp.h i_fp
15924 eval $inhdr
15925
15926 : see if this is a fp_class.h system
15927 set fp_class.h i_fp_class
15928 eval $inhdr
15929
15930 : see if this is a ieeefp.h system
15931 set ieeefp.h i_ieeefp
15932 eval $inhdr
15933
15934 : see if this is a libutil.h system
15935 set libutil.h i_libutil
15936 eval $inhdr
15937
15938 : see if locale.h is available
15939 set locale.h i_locale
15940 eval $inhdr
15941
15942 : see if mach cthreads are available
15943 if test "X$usethreads" = "X$define"; then
15944         set mach/cthreads.h i_machcthr
15945         eval $inhdr
15946 else
15947         i_machcthr="$undef"
15948 fi
15949
15950
15951
15952 : see if this is a math.h system
15953 set math.h i_math
15954 eval $inhdr
15955
15956 : see if this is a mntent.h system
15957 set mntent.h i_mntent
15958 eval $inhdr
15959
15960 : see if ndbm.h is available
15961 set ndbm.h t_ndbm
15962 eval $inhdr
15963 case "$t_ndbm" in
15964 $define)
15965         : see if dbm_open exists
15966         set dbm_open d_dbm_open
15967         eval $inlibc
15968         case "$d_dbm_open" in
15969         $undef)
15970                 t_ndbm="$undef"
15971                 echo "We won't be including <ndbm.h>"
15972                 ;;
15973         esac
15974         ;;
15975 esac
15976 val="$t_ndbm"
15977 set i_ndbm
15978 eval $setvar
15979
15980 : see if net/errno.h is available
15981 val=''
15982 set net/errno.h val
15983 eval $inhdr
15984
15985 : Unfortunately, it causes problems on some systems.  Arrgh.
15986 case "$val" in
15987 $define)
15988         cat > try.c <<'EOM'
15989 #include <stdio.h>
15990 #include <errno.h>
15991 #include <net/errno.h>
15992 int func()
15993 {
15994         return ENOTSOCK;
15995 }
15996 EOM
15997         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15998                 echo "We'll be including <net/errno.h>." >&4
15999         else
16000                 echo "We won't be including <net/errno.h>." >&4
16001                 val="$undef"
16002         fi
16003         $rm -f try.* try
16004         ;;
16005 esac
16006 set i_neterrno
16007 eval $setvar
16008
16009 : see if netinet/tcp.h is available
16010 set netinet/tcp.h i_netinettcp
16011 eval $inhdr
16012
16013 : see if this is a poll.h system
16014 set poll.h i_poll
16015 eval $inhdr
16016
16017 : see if this is a prot.h system
16018 set prot.h i_prot
16019 eval $inhdr
16020
16021 echo " "
16022 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16023 $cat <<'EOSH' > Cppsym.know
16024 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16025 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16026 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16027 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16028 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16029 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16030 bull c cadmus clipper CMU COFF COMPILER_VERSION
16031 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16032 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16033 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16034 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16035 GLIBC GLIBC_MINOR
16036 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16037 H3050R H3050RX hbullx20 hcx host_mips
16038 hp200 hp300 hp700 HP700 hp800 hp9000
16039 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16040 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16041 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16042 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16043 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16044 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16045 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16046 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16047 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16048 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16049 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16050 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16051 MATH_HAS_NO_SIDE_EFFECTS
16052 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16053 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16054 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16055 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16056 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16057 NetBSD news1500 news1700 news1800 news1900 news3700
16058 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16059 ns32016 ns32332 ns32k nsc32000
16060 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16061 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16062 pc532 pdp11 PGC PIC plexus PORTAR posix
16063 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16064 POSIX_C_SOURCE POSIX_SOURCE POWER
16065 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16066 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16067 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16068 sony sony_news sonyrisc sparc sparclite spectrum
16069 stardent stdc STDC_EXT stratos sun sun3 sun386
16070 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16071 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16072 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16073 sysV68 sysV88 Tek4132 Tek4300 titan
16074 TM3200 TM5400 TM5600
16075 tower tower32 tower32_200 tower32_600 tower32_700
16076 tower32_800 tower32_850 tss
16077 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16078 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16079 unix UNIX95 UNIX99 unixpc unos
16080 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16081 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16082 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16083 USGr4 USGr4_2
16084 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16085 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16086 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16087 z8000
16088 EOSH
16089 # Maybe put other stuff here too.
16090 cat <<EOSH >>Cppsym.know
16091 $osname
16092 EOSH
16093 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16094 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16095 $cat Cppsym.know > Cppsym.c
16096 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16097 $rm -f Cppsym.a Cppsym.b Cppsym.c
16098 cat <<EOSH > Cppsym
16099 $startsh
16100 if $test \$# -gt 0; then
16101     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16102     if $test -s Cppsym.got; then
16103         $rm -f Cppsym.got
16104         exit 0
16105     fi
16106     $rm -f Cppsym.got
16107     exit 1
16108 else
16109     $tr " " "$trnl" | ./Cppsym.try
16110     exit 0
16111 fi
16112 EOSH
16113 chmod +x Cppsym
16114 $eunicefix Cppsym
16115 cat <<EOSH > Cppsym.try
16116 $startsh
16117 cat <<'EOCP' > try.c
16118 #include <stdio.h>
16119 int main() {
16120 EOCP
16121 $awk \\
16122 EOSH
16123 cat <<'EOSH' >> Cppsym.try
16124 'length($1) > 0 {
16125     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
16126     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
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 }'       >> try.c
16130 echo 'return 0;}' >> try.c
16131 EOSH
16132 cat <<EOSH >> Cppsym.try
16133 ccflags="$ccflags"
16134 case "$osname-$gccversion" in
16135 irix-) ccflags="\$ccflags -woff 1178" ;;
16136 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16137 esac
16138 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16139 EOSH
16140 chmod +x Cppsym.try
16141 $eunicefix Cppsym.try
16142 ./Cppsym < Cppsym.know > Cppsym.true
16143 : now check the C compiler for additional symbols
16144 postprocess_cc_v=''
16145 case "$osname" in
16146 aix) postprocess_cc_v="|$tr , ' '" ;;
16147 esac
16148 $cat >ccsym <<EOS
16149 $startsh
16150 $cat >tmp.c <<EOF
16151 extern int foo;
16152 EOF
16153 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16154 do
16155         case "\$i" in
16156         -D*) echo "\$i" | $sed 's/^-D//';;
16157         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16158         esac
16159 done
16160 $rm -f try.c
16161 EOS
16162 postprocess_cc_v=''
16163 chmod +x ccsym
16164 $eunicefix ccsym
16165 ./ccsym > ccsym1.raw
16166 if $test -s ccsym1.raw; then
16167        $sort ccsym1.raw | $uniq >ccsym.raw
16168 else
16169        mv ccsym1.raw ccsym.raw
16170 fi
16171
16172 $awk '/\=/ { print $0; next }
16173         { print $0"=1" }' ccsym.raw >ccsym.list
16174 $awk '/\=/ { print $0; next }
16175         { print $0"=1" }' Cppsym.true >ccsym.true
16176 $comm -13 ccsym.true ccsym.list >ccsym.own
16177 $comm -12 ccsym.true ccsym.list >ccsym.com
16178 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16179 also=''
16180 if $test -z ccsym.raw; then
16181         echo "Your C compiler doesn't seem to define any symbols!" >&4
16182         echo " "
16183         echo "However, your C preprocessor defines the following symbols:"
16184         $cat Cppsym.true
16185         ccsymbols=''
16186         cppsymbols=`$cat Cppsym.true`
16187         cppsymbols=`echo $cppsymbols`
16188         cppccsymbols="$cppsymbols"
16189 else
16190         if $test -s ccsym.com; then
16191                 echo "Your C compiler and pre-processor define these symbols:"
16192                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16193                 also='also '
16194                 symbols='ones'
16195                 cppccsymbols=`$cat ccsym.com`
16196                 cppccsymbols=`echo $cppccsymbols`
16197                 $test "$silent" || sleep 1
16198         fi
16199         if $test -s ccsym.cpp; then
16200                 $test "$also" && echo " "
16201                 echo "Your C pre-processor ${also}defines the following symbols:"
16202                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16203                 also='further '
16204                 cppsymbols=`$cat ccsym.cpp`
16205                 cppsymbols=`echo $cppsymbols`
16206                 $test "$silent" || sleep 1
16207         fi
16208         if $test -s ccsym.own; then
16209                 $test "$also" && echo " "
16210                 echo "Your C compiler ${also}defines the following cpp symbols:"
16211                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16212                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16213                 ccsymbols=`$cat ccsym.own`
16214                 ccsymbols=`echo $ccsymbols`
16215                 $test "$silent" || sleep 1
16216         fi
16217 fi
16218
16219 : see if this is a termio system
16220 val="$undef"
16221 val2="$undef"
16222 val3="$undef"
16223 if $test `./findhdr termios.h`; then
16224         set tcsetattr i_termios
16225         eval $inlibc
16226         val3="$i_termios"
16227 fi
16228 echo " "
16229 case "$val3" in
16230 "$define") echo "You have POSIX termios.h... good!" >&4;;
16231 *) if ./Cppsym pyr; then
16232                 case "`/bin/universe`" in
16233                 ucb) if $test `./findhdr sgtty.h`; then
16234                                 val2="$define"
16235                                 echo "<sgtty.h> found." >&4
16236                         else
16237                                 echo "System is pyramid with BSD universe."
16238                                 echo "<sgtty.h> not found--you could have problems." >&4
16239                         fi;;
16240                 *) if $test `./findhdr termio.h`; then
16241                                 val="$define"
16242                                 echo "<termio.h> found." >&4
16243                         else
16244                                 echo "System is pyramid with USG universe."
16245                                 echo "<termio.h> not found--you could have problems." >&4
16246                         fi;;
16247                 esac
16248         elif ./usg; then
16249                 if $test `./findhdr termio.h`; then
16250                         echo "<termio.h> found." >&4
16251                         val="$define"
16252                 elif $test `./findhdr sgtty.h`; then
16253                         echo "<sgtty.h> found." >&4
16254                         val2="$define"
16255                 else
16256 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16257                 fi
16258         else
16259                 if $test `./findhdr sgtty.h`; then
16260                         echo "<sgtty.h> found." >&4
16261                         val2="$define"
16262                 elif $test `./findhdr termio.h`; then
16263                         echo "<termio.h> found." >&4
16264                         val="$define"
16265                 else
16266 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16267                 fi
16268         fi;;
16269 esac
16270 set i_termio; eval $setvar
16271 val=$val2; set i_sgtty; eval $setvar
16272 val=$val3; set i_termios; eval $setvar
16273
16274 : see if this is a shadow.h system
16275 set shadow.h i_shadow
16276 eval $inhdr
16277
16278 : see if stddef is available
16279 set stddef.h i_stddef
16280 eval $inhdr
16281
16282 : see if this is a sunmath.h system
16283 set sunmath.h i_sunmath
16284 eval $inhdr
16285
16286 : see if sys/access.h is available
16287 set sys/access.h i_sysaccess
16288 eval $inhdr
16289
16290 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16291 set sys/filio.h i_sysfilio
16292 eval $inhdr
16293 echo " "
16294 if $test `./findhdr sys/ioctl.h`; then
16295         val="$define"
16296         echo '<sys/ioctl.h> found.' >&4
16297 else
16298         val="$undef"
16299         if $test $i_sysfilio = "$define"; then
16300             echo '<sys/ioctl.h> NOT found.' >&4
16301         else
16302                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16303                 $test $i_termio = "$define" && xxx="termio.h"
16304                 $test $i_termios = "$define" && xxx="termios.h"
16305 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16306         fi
16307 fi
16308 set i_sysioctl
16309 eval $setvar
16310
16311 : see if socket ioctl defs are in sys/sockio.h
16312 echo " "
16313 xxx=`./findhdr sys/sockio.h`
16314 if $test "$xxx"; then
16315         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16316                 val="$define"
16317                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16318         else
16319                 val="$undef"
16320                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16321         fi
16322 else
16323         val="$undef"
16324         $cat <<EOM
16325 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16326 EOM
16327 fi
16328 set i_syssockio
16329 eval $setvar
16330
16331
16332 : see if this is a syslog.h system
16333 set syslog.h i_syslog
16334 eval $inhdr
16335
16336
16337 : see if this is a sys/mode.h system
16338 set sys/mode.h i_sysmode
16339 eval $inhdr
16340
16341 : see if sys/resource.h has to be included
16342 set sys/resource.h i_sysresrc
16343 eval $inhdr
16344
16345 : see if sys/security.h is available
16346 set sys/security.h i_syssecrt
16347 eval $inhdr
16348
16349 : see if this is a sys/statvfs.h system
16350 set sys/statvfs.h i_sysstatvfs
16351 eval $inhdr
16352
16353 : see if this is a sys/un.h system
16354 set sys/un.h i_sysun
16355 eval $inhdr
16356
16357
16358 : see if this is a sys/utsname.h system
16359 set sys/utsname.h i_sysutsname
16360 eval $inhdr
16361
16362 : see if this is a syswait system
16363 set sys/wait.h i_syswait
16364 eval $inhdr
16365
16366 : see if this is a ustat.h system
16367 set ustat.h i_ustat
16368 eval $inhdr
16369
16370 : see if this is an utime system
16371 set utime.h i_utime
16372 eval $inhdr
16373
16374 : see if this is a values.h system
16375 set values.h i_values
16376 eval $inhdr
16377
16378 : see if this is a vfork system
16379 case "$d_vfork" in
16380 "$define")
16381         set vfork.h i_vfork
16382         eval $inhdr
16383         ;;
16384 *)
16385         i_vfork="$undef"
16386         ;;
16387 esac
16388
16389 : see if gdbm.h is available
16390 set gdbm.h t_gdbm
16391 eval $inhdr
16392 case "$t_gdbm" in
16393 $define)
16394         : see if gdbm_open exists
16395         set gdbm_open d_gdbm_open
16396         eval $inlibc
16397         case "$d_gdbm_open" in
16398         $undef)
16399                 t_gdbm="$undef"
16400                 echo "We won't be including <gdbm.h>"
16401                 ;;
16402         esac
16403         ;;
16404 esac
16405 val="$t_gdbm"
16406 set i_gdbm
16407 eval $setvar
16408
16409 echo " "
16410 echo "Looking for extensions..." >&4
16411 : If we are using the old config.sh, known_extensions may contain
16412 : old or inaccurate or duplicate values.
16413 known_extensions=''
16414 nonxs_extensions=''
16415 : We do not use find because it might not be available.
16416 : We do not just use MANIFEST because the user may have dropped
16417 : some additional extensions into the source tree and expect them
16418 : to be built.
16419
16420 : Function to recursively find available extensions, ignoring DynaLoader
16421 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16422 find_extensions='
16423     for xxx in *; do
16424        case "$xxx" in
16425            DynaLoader|dynaload) ;;
16426            *)
16427            if $test -f $xxx/$xxx.xs; then
16428                known_extensions="$known_extensions $1$xxx";
16429            elif $test -f $xxx/Makefile.PL; then
16430                nonxs_extensions="$nonxs_extensions $1$xxx";
16431            else
16432                if $test -d $xxx -a $# -lt 10; then
16433                    set $1$xxx/ $*;
16434                    cd $xxx;
16435                    eval $find_extensions;
16436                    cd ..;
16437                    shift;
16438                fi;
16439            fi
16440            ;;
16441        esac;
16442     done'
16443 tdir=`pwd`
16444 cd $rsrc/ext
16445 set X
16446 shift
16447 eval $find_extensions
16448 # Special case:  Add in threads/shared since it is not picked up by the
16449 # recursive find above (and adding in general recursive finding breaks
16450 # SDBM_File/sdbm).  A.D.  10/25/2001.
16451 known_extensions="$known_extensions threads/shared"
16452 set X $nonxs_extensions
16453 shift
16454 nonxs_extensions="$*"
16455 set X $known_extensions
16456 shift
16457 known_extensions="$*"
16458 cd $tdir
16459
16460 : Now see which are supported on this system.
16461 avail_ext=''
16462 for xxx in $known_extensions ; do
16463         case "$xxx" in
16464         DB_File|db_file)
16465                 case "$i_db" in
16466                 $define) avail_ext="$avail_ext $xxx" ;;
16467                 esac
16468                 ;;
16469         GDBM_File|gdbm_fil)
16470                 case "$i_gdbm" in 
16471                 $define) avail_ext="$avail_ext $xxx" ;;
16472                 esac
16473                 ;;
16474         I18N/Langinfo|i18n_lan)
16475                 case "$i_langinfo$d_nl_langinfo" in 
16476                 $define$define) avail_ext="$avail_ext $xxx" ;;
16477                 esac
16478                 ;;
16479         NDBM_File|ndbm_fil)
16480                 case "$i_ndbm" in
16481                 $define)
16482                     case "$osname-$use64bitint" in
16483                     cygwin-*|hpux-define)
16484                         case "$libs" in
16485                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16486                         esac
16487                         ;;
16488                     *) avail_ext="$avail_ext $xxx" ;;
16489                     esac
16490                     ;;
16491                 esac
16492                 ;;
16493         ODBM_File|odbm_fil) 
16494                 case "${i_dbm}${i_rpcsvcdbm}" in
16495                 *"${define}"*)
16496                     case "$osname-$use64bitint" in
16497                     cygwin-*|hpux-define)
16498                         case "$libs" in
16499                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16500                         esac
16501                         ;;
16502                     *) avail_ext="$avail_ext $xxx" ;;
16503                     esac
16504                     ;;
16505                 esac
16506                 ;;
16507         POSIX|posix)
16508                 case "$useposix" in
16509                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16510                 esac
16511                 ;;
16512         Opcode|opcode)
16513                 case "$useopcode" in
16514                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16515                 esac
16516                 ;;
16517         Socket|socket)
16518                 case "$d_socket" in 
16519                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16520                 esac
16521                 ;;
16522         Sys/Syslog|sys/syslog)
16523                 : XXX syslog requires socket
16524                 case "$d_socket" in 
16525                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16526                 esac
16527                 ;;
16528         Thread|thread)
16529                 case "$usethreads" in
16530                 true|$define|y)
16531                         case "$useithreads" in
16532                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16533                         esac
16534                 esac
16535                 ;;
16536         threads|threads/shared)
16537                 case "$usethreads" in
16538                 true|$define|y)
16539                         case "$useithreads" in
16540                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16541                         esac
16542                 esac
16543                 ;;
16544         IPC/SysV|ipc/sysv)
16545                 : XXX Do we need a useipcsysv variable here
16546                 case "${d_msg}${d_sem}${d_shm}" in 
16547                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16548                 esac
16549                 ;;
16550         *)      avail_ext="$avail_ext $xxx"
16551                 ;;
16552         esac
16553 done
16554
16555 set X $avail_ext
16556 shift
16557 avail_ext="$*"
16558
16559 : Now see which nonxs extensions are supported on this system.
16560 : For now assume all are.
16561 nonxs_ext=''
16562 for xxx in $nonxs_extensions ; do
16563         case "$xxx" in
16564         *)      nonxs_ext="$nonxs_ext $xxx"
16565                 ;;
16566         esac
16567 done
16568
16569 set X $nonxs_ext
16570 shift
16571 nonxs_ext="$*"
16572
16573 case $usedl in
16574 $define)
16575         $cat <<EOM
16576 A number of extensions are supplied with $package.  You may choose to
16577 compile these extensions for dynamic loading (the default), compile
16578 them into the $package executable (static loading), or not include
16579 them at all.  Answer "none" to include no extensions.
16580 Note that DynaLoader is always built and need not be mentioned here.
16581
16582 EOM
16583         case "$dynamic_ext" in
16584         '') dflt="$avail_ext" ;;
16585         *)      dflt="$dynamic_ext"
16586                 # Perhaps we are reusing an old out-of-date config.sh.
16587                 case "$hint" in
16588                 previous)
16589                         if test X"$dynamic_ext" != X"$avail_ext"; then
16590                                 $cat <<EOM
16591 NOTICE:  Your previous config.sh list may be incorrect. 
16592 The extensions now available to you are 
16593         ${avail_ext}
16594 but the default list from your previous config.sh is
16595         ${dynamic_ext} 
16596
16597 EOM
16598                         fi
16599                         ;;
16600                 esac
16601                 ;;
16602         esac
16603         case "$dflt" in
16604         '')     dflt=none;;
16605         esac
16606         rp="What extensions do you wish to load dynamically?"
16607         . ./myread
16608         case "$ans" in
16609         none) dynamic_ext=' ' ;;
16610         *) dynamic_ext="$ans" ;;
16611         esac
16612
16613         case "$static_ext" in
16614         '')
16615                 : Exclude those already listed in dynamic linking
16616                 dflt=''
16617                 for xxx in $avail_ext; do
16618                         case " $dynamic_ext " in
16619                         *" $xxx "*) ;;
16620                         *) dflt="$dflt $xxx" ;;
16621                         esac
16622                 done
16623                 set X $dflt
16624                 shift
16625                 dflt="$*"
16626                 ;;
16627         *)  dflt="$static_ext" 
16628                 ;;
16629         esac
16630
16631         case "$dflt" in
16632         '')     dflt=none;;
16633         esac
16634         rp="What extensions do you wish to load statically?"
16635         . ./myread
16636         case "$ans" in
16637         none) static_ext=' ' ;;
16638         *) static_ext="$ans" ;;
16639         esac
16640         ;;
16641 *)
16642         $cat <<EOM
16643 A number of extensions are supplied with $package.  Answer "none" 
16644 to include no extensions. 
16645 Note that DynaLoader is always built and need not be mentioned here.
16646
16647 EOM
16648         case "$static_ext" in
16649         '') dflt="$avail_ext" ;;
16650         *)      dflt="$static_ext"
16651                 # Perhaps we are reusing an old out-of-date config.sh.
16652                 case "$hint" in
16653                 previous)
16654                         if test X"$static_ext" != X"$avail_ext"; then
16655                                 $cat <<EOM
16656 NOTICE:  Your previous config.sh list may be incorrect. 
16657 The extensions now available to you are 
16658         ${avail_ext}
16659 but the default list from your previous config.sh is
16660         ${static_ext} 
16661
16662 EOM
16663                         fi
16664                         ;;
16665                 esac
16666                 ;;
16667         esac
16668         : Exclude those that are not xs extensions
16669         case "$dflt" in
16670         '')     dflt=none;;
16671         esac
16672         rp="What extensions do you wish to include?"
16673         . ./myread
16674         case "$ans" in
16675         none) static_ext=' ' ;;
16676         *) static_ext="$ans" ;;
16677         esac
16678         ;;
16679 esac
16680
16681 set X $dynamic_ext $static_ext $nonxs_ext
16682 shift
16683 extensions="$*"
16684
16685 : Remove libraries needed only for extensions
16686 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16687 : The exception is SunOS 4.x, which needs them.
16688 case "${osname}X${osvers}" in
16689 sunos*X4*)
16690     perllibs="$libs"
16691     ;;
16692 *) case "$usedl" in
16693     $define|true|[yY]*)
16694             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16695             shift
16696             perllibs="$*"
16697             ;;
16698     *)  perllibs="$libs"
16699             ;;
16700     esac
16701     ;;
16702 esac
16703
16704 : Remove build directory name from cppstdin so it can be used from
16705 : either the present location or the final installed location.
16706 echo " "
16707 : Get out of the UU directory to get correct path name.
16708 cd ..
16709 case "$cppstdin" in
16710 `pwd`/cppstdin)
16711         echo "Stripping down cppstdin path name"
16712         cppstdin=cppstdin
16713         ;;
16714 esac
16715 cd UU
16716
16717 : end of configuration questions
16718 echo " "
16719 echo "End of configuration questions."
16720 echo " "
16721
16722 : back to where it started
16723 if test -d ../UU; then
16724         cd ..
16725 fi
16726
16727 : configuration may be patched via a 'config.arch' file
16728 if $test -f config.arch; then
16729         echo "I see a config.arch file, loading it."
16730         . ./config.arch
16731 fi
16732
16733 : configuration may be patched via a 'config.over' file
16734 if $test -f config.over; then
16735         echo " "
16736         dflt=y
16737         rp='I see a config.over file.  Do you wish to load it?'
16738         . UU/myread
16739         case "$ans" in
16740         n*) echo "OK, I'll ignore it.";;
16741         *)      . ./config.over
16742                 echo "Configuration override changes have been loaded."
16743                 ;;
16744         esac
16745 fi
16746
16747 : in case they want portability, strip down executable paths
16748 case "$d_portable" in
16749 "$define")
16750         echo " "
16751         echo "Stripping down executable paths..." >&4
16752         for file in $loclist $trylist; do
16753                 eval temp=\$$file
16754                 eval $file=`basename $temp`
16755         done
16756         ;;
16757 esac
16758
16759 : create config.sh file
16760 echo " "
16761 echo "Creating config.sh..." >&4
16762 $spitshell <<EOT >config.sh
16763 $startsh
16764 #
16765 # This file was produced by running the Configure script. It holds all the
16766 # definitions figured out by Configure. Should you modify one of these values,
16767 # do not forget to propagate your changes by running "Configure -der". You may
16768 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16769 #
16770
16771 # Package name      : $package
16772 # Source directory  : $src
16773 # Configuration time: $cf_time
16774 # Configured by     : $cf_by
16775 # Target system     : $myuname
16776
16777 Author='$Author'
16778 Date='$Date'
16779 Header='$Header'
16780 Id='$Id'
16781 Locker='$Locker'
16782 Log='$Log'
16783 Mcc='$Mcc'
16784 RCSfile='$RCSfile'
16785 Revision='$Revision'
16786 Source='$Source'
16787 State='$State'
16788 _a='$_a'
16789 _exe='$_exe'
16790 _o='$_o'
16791 afs='$afs'
16792 afsroot='$afsroot'
16793 alignbytes='$alignbytes'
16794 ansi2knr='$ansi2knr'
16795 aphostname='$aphostname'
16796 api_revision='$api_revision'
16797 api_subversion='$api_subversion'
16798 api_version='$api_version'
16799 api_versionstring='$api_versionstring'
16800 ar='$ar'
16801 archlib='$archlib'
16802 archlibexp='$archlibexp'
16803 archname64='$archname64'
16804 archname='$archname'
16805 archobjs='$archobjs'
16806 awk='$awk'
16807 baserev='$baserev'
16808 bash='$bash'
16809 bin='$bin'
16810 bincompat5005='$bincompat5005'
16811 binexp='$binexp'
16812 bison='$bison'
16813 byacc='$byacc'
16814 byteorder='$byteorder'
16815 c='$c'
16816 castflags='$castflags'
16817 cat='$cat'
16818 cc='$cc'
16819 cccdlflags='$cccdlflags'
16820 ccdlflags='$ccdlflags'
16821 ccflags='$ccflags'
16822 ccflags_uselargefiles='$ccflags_uselargefiles'
16823 ccname='$ccname'
16824 ccsymbols='$ccsymbols'
16825 ccversion='$ccversion'
16826 cf_by='$cf_by'
16827 cf_email='$cf_email'
16828 cf_time='$cf_time'
16829 charsize='$charsize'
16830 chgrp='$chgrp'
16831 chmod='$chmod'
16832 chown='$chown'
16833 clocktype='$clocktype'
16834 comm='$comm'
16835 compress='$compress'
16836 contains='$contains'
16837 cp='$cp'
16838 cpio='$cpio'
16839 cpp='$cpp'
16840 cpp_stuff='$cpp_stuff'
16841 cppccsymbols='$cppccsymbols'
16842 cppflags='$cppflags'
16843 cpplast='$cpplast'
16844 cppminus='$cppminus'
16845 cpprun='$cpprun'
16846 cppstdin='$cppstdin'
16847 cppsymbols='$cppsymbols'
16848 cryptlib='$cryptlib'
16849 csh='$csh'
16850 d_Gconvert='$d_Gconvert'
16851 d_PRIEUldbl='$d_PRIEUldbl'
16852 d_PRIFUldbl='$d_PRIFUldbl'
16853 d_PRIGUldbl='$d_PRIGUldbl'
16854 d_PRIXU64='$d_PRIXU64'
16855 d_PRId64='$d_PRId64'
16856 d_PRIeldbl='$d_PRIeldbl'
16857 d_PRIfldbl='$d_PRIfldbl'
16858 d_PRIgldbl='$d_PRIgldbl'
16859 d_PRIi64='$d_PRIi64'
16860 d_PRIo64='$d_PRIo64'
16861 d_PRIu64='$d_PRIu64'
16862 d_PRIx64='$d_PRIx64'
16863 d_SCNfldbl='$d_SCNfldbl'
16864 d__fwalk='$d__fwalk'
16865 d_access='$d_access'
16866 d_accessx='$d_accessx'
16867 d_alarm='$d_alarm'
16868 d_archlib='$d_archlib'
16869 d_atolf='$d_atolf'
16870 d_atoll='$d_atoll'
16871 d_attribut='$d_attribut'
16872 d_bcmp='$d_bcmp'
16873 d_bcopy='$d_bcopy'
16874 d_bincompat5005='$d_bincompat5005'
16875 d_bsd='$d_bsd'
16876 d_bsdgetpgrp='$d_bsdgetpgrp'
16877 d_bsdsetpgrp='$d_bsdsetpgrp'
16878 d_bzero='$d_bzero'
16879 d_casti32='$d_casti32'
16880 d_castneg='$d_castneg'
16881 d_charvspr='$d_charvspr'
16882 d_chown='$d_chown'
16883 d_chroot='$d_chroot'
16884 d_chsize='$d_chsize'
16885 d_class='$d_class'
16886 d_closedir='$d_closedir'
16887 d_cmsghdr_s='$d_cmsghdr_s'
16888 d_const='$d_const'
16889 d_crypt='$d_crypt'
16890 d_csh='$d_csh'
16891 d_cuserid='$d_cuserid'
16892 d_dbl_dig='$d_dbl_dig'
16893 d_dbminitproto='$d_dbminitproto'
16894 d_difftime='$d_difftime'
16895 d_dirfd='$d_dirfd'
16896 d_dirnamlen='$d_dirnamlen'
16897 d_dlerror='$d_dlerror'
16898 d_dlopen='$d_dlopen'
16899 d_dlsymun='$d_dlsymun'
16900 d_dosuid='$d_dosuid'
16901 d_drand48proto='$d_drand48proto'
16902 d_dup2='$d_dup2'
16903 d_eaccess='$d_eaccess'
16904 d_endgrent='$d_endgrent'
16905 d_endhent='$d_endhent'
16906 d_endnent='$d_endnent'
16907 d_endpent='$d_endpent'
16908 d_endpwent='$d_endpwent'
16909 d_endsent='$d_endsent'
16910 d_eofnblk='$d_eofnblk'
16911 d_eunice='$d_eunice'
16912 d_fchdir='$d_fchdir'
16913 d_fchmod='$d_fchmod'
16914 d_fchown='$d_fchown'
16915 d_fcntl='$d_fcntl'
16916 d_fcntl_can_lock='$d_fcntl_can_lock'
16917 d_fd_macros='$d_fd_macros'
16918 d_fd_set='$d_fd_set'
16919 d_fds_bits='$d_fds_bits'
16920 d_fgetpos='$d_fgetpos'
16921 d_finite='$d_finite'
16922 d_finitel='$d_finitel'
16923 d_flexfnam='$d_flexfnam'
16924 d_flock='$d_flock'
16925 d_flockproto='$d_flockproto'
16926 d_fork='$d_fork'
16927 d_fp_class='$d_fp_class'
16928 d_fpathconf='$d_fpathconf'
16929 d_fpclass='$d_fpclass'
16930 d_fpclassify='$d_fpclassify'
16931 d_fpclassl='$d_fpclassl'
16932 d_fpos64_t='$d_fpos64_t'
16933 d_frexpl='$d_frexpl'
16934 d_fs_data_s='$d_fs_data_s'
16935 d_fseeko='$d_fseeko'
16936 d_fsetpos='$d_fsetpos'
16937 d_fstatfs='$d_fstatfs'
16938 d_fstatvfs='$d_fstatvfs'
16939 d_fsync='$d_fsync'
16940 d_ftello='$d_ftello'
16941 d_ftime='$d_ftime'
16942 d_getcwd='$d_getcwd'
16943 d_getespwnam='$d_getespwnam'
16944 d_getfsstat='$d_getfsstat'
16945 d_getgrent='$d_getgrent'
16946 d_getgrps='$d_getgrps'
16947 d_gethbyaddr='$d_gethbyaddr'
16948 d_gethbyname='$d_gethbyname'
16949 d_gethent='$d_gethent'
16950 d_gethname='$d_gethname'
16951 d_gethostprotos='$d_gethostprotos'
16952 d_getitimer='$d_getitimer'
16953 d_getlogin='$d_getlogin'
16954 d_getmnt='$d_getmnt'
16955 d_getmntent='$d_getmntent'
16956 d_getnbyaddr='$d_getnbyaddr'
16957 d_getnbyname='$d_getnbyname'
16958 d_getnent='$d_getnent'
16959 d_getnetprotos='$d_getnetprotos'
16960 d_getpagsz='$d_getpagsz'
16961 d_getpbyname='$d_getpbyname'
16962 d_getpbynumber='$d_getpbynumber'
16963 d_getpent='$d_getpent'
16964 d_getpgid='$d_getpgid'
16965 d_getpgrp2='$d_getpgrp2'
16966 d_getpgrp='$d_getpgrp'
16967 d_getppid='$d_getppid'
16968 d_getprior='$d_getprior'
16969 d_getprotoprotos='$d_getprotoprotos'
16970 d_getprpwnam='$d_getprpwnam'
16971 d_getpwent='$d_getpwent'
16972 d_getsbyname='$d_getsbyname'
16973 d_getsbyport='$d_getsbyport'
16974 d_getsent='$d_getsent'
16975 d_getservprotos='$d_getservprotos'
16976 d_getspnam='$d_getspnam'
16977 d_gettimeod='$d_gettimeod'
16978 d_gnulibc='$d_gnulibc'
16979 d_grpasswd='$d_grpasswd'
16980 d_hasmntopt='$d_hasmntopt'
16981 d_htonl='$d_htonl'
16982 d_index='$d_index'
16983 d_inetaton='$d_inetaton'
16984 d_int64_t='$d_int64_t'
16985 d_isascii='$d_isascii'
16986 d_isfinite='$d_isfinite'
16987 d_isinf='$d_isinf'
16988 d_isnan='$d_isnan'
16989 d_isnanl='$d_isnanl'
16990 d_killpg='$d_killpg'
16991 d_lchown='$d_lchown'
16992 d_ldbl_dig='$d_ldbl_dig'
16993 d_link='$d_link'
16994 d_locconv='$d_locconv'
16995 d_lockf='$d_lockf'
16996 d_longdbl='$d_longdbl'
16997 d_longlong='$d_longlong'
16998 d_lseekproto='$d_lseekproto'
16999 d_lstat='$d_lstat'
17000 d_madvise='$d_madvise'
17001 d_mblen='$d_mblen'
17002 d_mbstowcs='$d_mbstowcs'
17003 d_mbtowc='$d_mbtowc'
17004 d_memchr='$d_memchr'
17005 d_memcmp='$d_memcmp'
17006 d_memcpy='$d_memcpy'
17007 d_memmove='$d_memmove'
17008 d_memset='$d_memset'
17009 d_mkdir='$d_mkdir'
17010 d_mkdtemp='$d_mkdtemp'
17011 d_mkfifo='$d_mkfifo'
17012 d_mkstemp='$d_mkstemp'
17013 d_mkstemps='$d_mkstemps'
17014 d_mktime='$d_mktime'
17015 d_mmap='$d_mmap'
17016 d_modfl='$d_modfl'
17017 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17018 d_mprotect='$d_mprotect'
17019 d_msg='$d_msg'
17020 d_msg_ctrunc='$d_msg_ctrunc'
17021 d_msg_dontroute='$d_msg_dontroute'
17022 d_msg_oob='$d_msg_oob'
17023 d_msg_peek='$d_msg_peek'
17024 d_msg_proxy='$d_msg_proxy'
17025 d_msgctl='$d_msgctl'
17026 d_msgget='$d_msgget'
17027 d_msghdr_s='$d_msghdr_s'
17028 d_msgrcv='$d_msgrcv'
17029 d_msgsnd='$d_msgsnd'
17030 d_msync='$d_msync'
17031 d_munmap='$d_munmap'
17032 d_mymalloc='$d_mymalloc'
17033 d_nice='$d_nice'
17034 d_nl_langinfo='$d_nl_langinfo'
17035 d_nv_preserves_uv='$d_nv_preserves_uv'
17036 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17037 d_off64_t='$d_off64_t'
17038 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17039 d_oldpthreads='$d_oldpthreads'
17040 d_oldsock='$d_oldsock'
17041 d_open3='$d_open3'
17042 d_pathconf='$d_pathconf'
17043 d_pause='$d_pause'
17044 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17045 d_phostname='$d_phostname'
17046 d_pipe='$d_pipe'
17047 d_poll='$d_poll'
17048 d_portable='$d_portable'
17049 d_procselfexe='$d_procselfexe'
17050 d_pthread_atfork='$d_pthread_atfork'
17051 d_pthread_yield='$d_pthread_yield'
17052 d_pwage='$d_pwage'
17053 d_pwchange='$d_pwchange'
17054 d_pwclass='$d_pwclass'
17055 d_pwcomment='$d_pwcomment'
17056 d_pwexpire='$d_pwexpire'
17057 d_pwgecos='$d_pwgecos'
17058 d_pwpasswd='$d_pwpasswd'
17059 d_pwquota='$d_pwquota'
17060 d_qgcvt='$d_qgcvt'
17061 d_quad='$d_quad'
17062 d_readdir='$d_readdir'
17063 d_readlink='$d_readlink'
17064 d_readv='$d_readv'
17065 d_recvmsg='$d_recvmsg'
17066 d_rename='$d_rename'
17067 d_rewinddir='$d_rewinddir'
17068 d_rmdir='$d_rmdir'
17069 d_safebcpy='$d_safebcpy'
17070 d_safemcpy='$d_safemcpy'
17071 d_sanemcmp='$d_sanemcmp'
17072 d_sbrkproto='$d_sbrkproto'
17073 d_sched_yield='$d_sched_yield'
17074 d_scm_rights='$d_scm_rights'
17075 d_seekdir='$d_seekdir'
17076 d_select='$d_select'
17077 d_sem='$d_sem'
17078 d_semctl='$d_semctl'
17079 d_semctl_semid_ds='$d_semctl_semid_ds'
17080 d_semctl_semun='$d_semctl_semun'
17081 d_semget='$d_semget'
17082 d_semop='$d_semop'
17083 d_sendmsg='$d_sendmsg'
17084 d_setegid='$d_setegid'
17085 d_seteuid='$d_seteuid'
17086 d_setgrent='$d_setgrent'
17087 d_setgrps='$d_setgrps'
17088 d_sethent='$d_sethent'
17089 d_setitimer='$d_setitimer'
17090 d_setlinebuf='$d_setlinebuf'
17091 d_setlocale='$d_setlocale'
17092 d_setnent='$d_setnent'
17093 d_setpent='$d_setpent'
17094 d_setpgid='$d_setpgid'
17095 d_setpgrp2='$d_setpgrp2'
17096 d_setpgrp='$d_setpgrp'
17097 d_setprior='$d_setprior'
17098 d_setproctitle='$d_setproctitle'
17099 d_setpwent='$d_setpwent'
17100 d_setregid='$d_setregid'
17101 d_setresgid='$d_setresgid'
17102 d_setresuid='$d_setresuid'
17103 d_setreuid='$d_setreuid'
17104 d_setrgid='$d_setrgid'
17105 d_setruid='$d_setruid'
17106 d_setsent='$d_setsent'
17107 d_setsid='$d_setsid'
17108 d_setvbuf='$d_setvbuf'
17109 d_sfio='$d_sfio'
17110 d_shm='$d_shm'
17111 d_shmat='$d_shmat'
17112 d_shmatprototype='$d_shmatprototype'
17113 d_shmctl='$d_shmctl'
17114 d_shmdt='$d_shmdt'
17115 d_shmget='$d_shmget'
17116 d_sigaction='$d_sigaction'
17117 d_sigprocmask='$d_sigprocmask'
17118 d_sigsetjmp='$d_sigsetjmp'
17119 d_sockatmark='$d_sockatmark'
17120 d_sockatmarkproto='$d_sockatmarkproto'
17121 d_socket='$d_socket'
17122 d_socklen_t='$d_socklen_t'
17123 d_sockpair='$d_sockpair'
17124 d_socks5_init='$d_socks5_init'
17125 d_sqrtl='$d_sqrtl'
17126 d_sresgproto='$d_sresgproto'
17127 d_sresuproto='$d_sresuproto'
17128 d_statblks='$d_statblks'
17129 d_statfs_f_flags='$d_statfs_f_flags'
17130 d_statfs_s='$d_statfs_s'
17131 d_statvfs='$d_statvfs'
17132 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17133 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17134 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17135 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17136 d_stdio_stream_array='$d_stdio_stream_array'
17137 d_stdiobase='$d_stdiobase'
17138 d_stdstdio='$d_stdstdio'
17139 d_strchr='$d_strchr'
17140 d_strcoll='$d_strcoll'
17141 d_strctcpy='$d_strctcpy'
17142 d_strerrm='$d_strerrm'
17143 d_strerror='$d_strerror'
17144 d_strftime='$d_strftime'
17145 d_strtod='$d_strtod'
17146 d_strtol='$d_strtol'
17147 d_strtold='$d_strtold'
17148 d_strtoll='$d_strtoll'
17149 d_strtoq='$d_strtoq'
17150 d_strtoul='$d_strtoul'
17151 d_strtoull='$d_strtoull'
17152 d_strtouq='$d_strtouq'
17153 d_strxfrm='$d_strxfrm'
17154 d_suidsafe='$d_suidsafe'
17155 d_symlink='$d_symlink'
17156 d_syscall='$d_syscall'
17157 d_syscallproto='$d_syscallproto'
17158 d_sysconf='$d_sysconf'
17159 d_sysernlst='$d_sysernlst'
17160 d_syserrlst='$d_syserrlst'
17161 d_system='$d_system'
17162 d_tcgetpgrp='$d_tcgetpgrp'
17163 d_tcsetpgrp='$d_tcsetpgrp'
17164 d_telldir='$d_telldir'
17165 d_telldirproto='$d_telldirproto'
17166 d_time='$d_time'
17167 d_times='$d_times'
17168 d_truncate='$d_truncate'
17169 d_tzname='$d_tzname'
17170 d_u32align='$d_u32align'
17171 d_ualarm='$d_ualarm'
17172 d_umask='$d_umask'
17173 d_uname='$d_uname'
17174 d_union_semun='$d_union_semun'
17175 d_unordered='$d_unordered'
17176 d_usleep='$d_usleep'
17177 d_usleepproto='$d_usleepproto'
17178 d_ustat='$d_ustat'
17179 d_vendorarch='$d_vendorarch'
17180 d_vendorbin='$d_vendorbin'
17181 d_vendorlib='$d_vendorlib'
17182 d_vfork='$d_vfork'
17183 d_void_closedir='$d_void_closedir'
17184 d_voidsig='$d_voidsig'
17185 d_voidtty='$d_voidtty'
17186 d_volatile='$d_volatile'
17187 d_vprintf='$d_vprintf'
17188 d_wait4='$d_wait4'
17189 d_waitpid='$d_waitpid'
17190 d_wcstombs='$d_wcstombs'
17191 d_wctomb='$d_wctomb'
17192 d_writev='$d_writev'
17193 d_xenix='$d_xenix'
17194 date='$date'
17195 db_hashtype='$db_hashtype'
17196 db_prefixtype='$db_prefixtype'
17197 db_version_major='$db_version_major'
17198 db_version_minor='$db_version_minor'
17199 db_version_patch='$db_version_patch'
17200 defvoidused='$defvoidused'
17201 direntrytype='$direntrytype'
17202 dlext='$dlext'
17203 dlsrc='$dlsrc'
17204 doublesize='$doublesize'
17205 drand01='$drand01'
17206 dynamic_ext='$dynamic_ext'
17207 eagain='$eagain'
17208 ebcdic='$ebcdic'
17209 echo='$echo'
17210 egrep='$egrep'
17211 emacs='$emacs'
17212 eunicefix='$eunicefix'
17213 exe_ext='$exe_ext'
17214 expr='$expr'
17215 extensions='$extensions'
17216 extras='$extras'
17217 fflushNULL='$fflushNULL'
17218 fflushall='$fflushall'
17219 find='$find'
17220 firstmakefile='$firstmakefile'
17221 flex='$flex'
17222 fpossize='$fpossize'
17223 fpostype='$fpostype'
17224 freetype='$freetype'
17225 from='$from'
17226 full_ar='$full_ar'
17227 full_csh='$full_csh'
17228 full_sed='$full_sed'
17229 gccosandvers='$gccosandvers'
17230 gccversion='$gccversion'
17231 gidformat='$gidformat'
17232 gidsign='$gidsign'
17233 gidsize='$gidsize'
17234 gidtype='$gidtype'
17235 glibpth='$glibpth'
17236 grep='$grep'
17237 groupcat='$groupcat'
17238 groupstype='$groupstype'
17239 gzip='$gzip'
17240 h_fcntl='$h_fcntl'
17241 h_sysfile='$h_sysfile'
17242 hint='$hint'
17243 hostcat='$hostcat'
17244 i16size='$i16size'
17245 i16type='$i16type'
17246 i32size='$i32size'
17247 i32type='$i32type'
17248 i64size='$i64size'
17249 i64type='$i64type'
17250 i8size='$i8size'
17251 i8type='$i8type'
17252 i_arpainet='$i_arpainet'
17253 i_bsdioctl='$i_bsdioctl'
17254 i_db='$i_db'
17255 i_dbm='$i_dbm'
17256 i_dirent='$i_dirent'
17257 i_dld='$i_dld'
17258 i_dlfcn='$i_dlfcn'
17259 i_fcntl='$i_fcntl'
17260 i_float='$i_float'
17261 i_fp='$i_fp'
17262 i_fp_class='$i_fp_class'
17263 i_gdbm='$i_gdbm'
17264 i_grp='$i_grp'
17265 i_ieeefp='$i_ieeefp'
17266 i_inttypes='$i_inttypes'
17267 i_langinfo='$i_langinfo'
17268 i_libutil='$i_libutil'
17269 i_limits='$i_limits'
17270 i_locale='$i_locale'
17271 i_machcthr='$i_machcthr'
17272 i_malloc='$i_malloc'
17273 i_math='$i_math'
17274 i_memory='$i_memory'
17275 i_mntent='$i_mntent'
17276 i_ndbm='$i_ndbm'
17277 i_netdb='$i_netdb'
17278 i_neterrno='$i_neterrno'
17279 i_netinettcp='$i_netinettcp'
17280 i_niin='$i_niin'
17281 i_poll='$i_poll'
17282 i_prot='$i_prot'
17283 i_pthread='$i_pthread'
17284 i_pwd='$i_pwd'
17285 i_rpcsvcdbm='$i_rpcsvcdbm'
17286 i_sfio='$i_sfio'
17287 i_sgtty='$i_sgtty'
17288 i_shadow='$i_shadow'
17289 i_socks='$i_socks'
17290 i_stdarg='$i_stdarg'
17291 i_stddef='$i_stddef'
17292 i_stdlib='$i_stdlib'
17293 i_string='$i_string'
17294 i_sunmath='$i_sunmath'
17295 i_sysaccess='$i_sysaccess'
17296 i_sysdir='$i_sysdir'
17297 i_sysfile='$i_sysfile'
17298 i_sysfilio='$i_sysfilio'
17299 i_sysin='$i_sysin'
17300 i_sysioctl='$i_sysioctl'
17301 i_syslog='$i_syslog'
17302 i_sysmman='$i_sysmman'
17303 i_sysmode='$i_sysmode'
17304 i_sysmount='$i_sysmount'
17305 i_sysndir='$i_sysndir'
17306 i_sysparam='$i_sysparam'
17307 i_sysresrc='$i_sysresrc'
17308 i_syssecrt='$i_syssecrt'
17309 i_sysselct='$i_sysselct'
17310 i_syssockio='$i_syssockio'
17311 i_sysstat='$i_sysstat'
17312 i_sysstatfs='$i_sysstatfs'
17313 i_sysstatvfs='$i_sysstatvfs'
17314 i_systime='$i_systime'
17315 i_systimek='$i_systimek'
17316 i_systimes='$i_systimes'
17317 i_systypes='$i_systypes'
17318 i_sysuio='$i_sysuio'
17319 i_sysun='$i_sysun'
17320 i_sysutsname='$i_sysutsname'
17321 i_sysvfs='$i_sysvfs'
17322 i_syswait='$i_syswait'
17323 i_termio='$i_termio'
17324 i_termios='$i_termios'
17325 i_time='$i_time'
17326 i_unistd='$i_unistd'
17327 i_ustat='$i_ustat'
17328 i_utime='$i_utime'
17329 i_values='$i_values'
17330 i_varargs='$i_varargs'
17331 i_varhdr='$i_varhdr'
17332 i_vfork='$i_vfork'
17333 ignore_versioned_solibs='$ignore_versioned_solibs'
17334 inc_version_list='$inc_version_list'
17335 inc_version_list_init='$inc_version_list_init'
17336 incpath='$incpath'
17337 inews='$inews'
17338 installarchlib='$installarchlib'
17339 installbin='$installbin'
17340 installman1dir='$installman1dir'
17341 installman3dir='$installman3dir'
17342 installprefix='$installprefix'
17343 installprefixexp='$installprefixexp'
17344 installprivlib='$installprivlib'
17345 installscript='$installscript'
17346 installsitearch='$installsitearch'
17347 installsitebin='$installsitebin'
17348 installsitelib='$installsitelib'
17349 installstyle='$installstyle'
17350 installusrbinperl='$installusrbinperl'
17351 installvendorarch='$installvendorarch'
17352 installvendorbin='$installvendorbin'
17353 installvendorlib='$installvendorlib'
17354 intsize='$intsize'
17355 issymlink='$issymlink'
17356 ivdformat='$ivdformat'
17357 ivsize='$ivsize'
17358 ivtype='$ivtype'
17359 known_extensions='$known_extensions'
17360 ksh='$ksh'
17361 ld='$ld'
17362 lddlflags='$lddlflags'
17363 ldflags='$ldflags'
17364 ldflags_uselargefiles='$ldflags_uselargefiles'
17365 ldlibpthname='$ldlibpthname'
17366 less='$less'
17367 lib_ext='$lib_ext'
17368 libc='$libc'
17369 libperl='$libperl'
17370 libpth='$libpth'
17371 libs='$libs'
17372 libsdirs='$libsdirs'
17373 libsfiles='$libsfiles'
17374 libsfound='$libsfound'
17375 libspath='$libspath'
17376 libswanted='$libswanted'
17377 libswanted_uselargefiles='$libswanted_uselargefiles'
17378 line='$line'
17379 lint='$lint'
17380 lkflags='$lkflags'
17381 ln='$ln'
17382 lns='$lns'
17383 locincpth='$locincpth'
17384 loclibpth='$loclibpth'
17385 longdblsize='$longdblsize'
17386 longlongsize='$longlongsize'
17387 longsize='$longsize'
17388 lp='$lp'
17389 lpr='$lpr'
17390 ls='$ls'
17391 lseeksize='$lseeksize'
17392 lseektype='$lseektype'
17393 mail='$mail'
17394 mailx='$mailx'
17395 make='$make'
17396 make_set_make='$make_set_make'
17397 mallocobj='$mallocobj'
17398 mallocsrc='$mallocsrc'
17399 malloctype='$malloctype'
17400 man1dir='$man1dir'
17401 man1direxp='$man1direxp'
17402 man1ext='$man1ext'
17403 man3dir='$man3dir'
17404 man3direxp='$man3direxp'
17405 man3ext='$man3ext'
17406 mips_type='$mips_type'
17407 mkdir='$mkdir'
17408 mmaptype='$mmaptype'
17409 modetype='$modetype'
17410 more='$more'
17411 multiarch='$multiarch'
17412 mv='$mv'
17413 myarchname='$myarchname'
17414 mydomain='$mydomain'
17415 myhostname='$myhostname'
17416 myuname='$myuname'
17417 n='$n'
17418 need_va_copy='$need_va_copy'
17419 netdb_hlen_type='$netdb_hlen_type'
17420 netdb_host_type='$netdb_host_type'
17421 netdb_name_type='$netdb_name_type'
17422 netdb_net_type='$netdb_net_type'
17423 nm='$nm'
17424 nm_opt='$nm_opt'
17425 nm_so_opt='$nm_so_opt'
17426 nonxs_ext='$nonxs_ext'
17427 nroff='$nroff'
17428 nvEUformat='$nvEUformat'
17429 nvFUformat='$nvFUformat'
17430 nvGUformat='$nvGUformat'
17431 nveformat='$nveformat'
17432 nvfformat='$nvfformat'
17433 nvgformat='$nvgformat'
17434 nvsize='$nvsize'
17435 nvtype='$nvtype'
17436 o_nonblock='$o_nonblock'
17437 obj_ext='$obj_ext'
17438 old_pthread_create_joinable='$old_pthread_create_joinable'
17439 optimize='$optimize'
17440 orderlib='$orderlib'
17441 osname='$osname'
17442 osvers='$osvers'
17443 otherlibdirs='$otherlibdirs'
17444 package='$package'
17445 pager='$pager'
17446 passcat='$passcat'
17447 patchlevel='$patchlevel'
17448 path_sep='$path_sep'
17449 perl5='$perl5'
17450 perl='$perl'
17451 perl_patchlevel='$perl_patchlevel'
17452 perladmin='$perladmin'
17453 perllibs='$perllibs'
17454 perlpath='$perlpath'
17455 pg='$pg'
17456 phostname='$phostname'
17457 pidtype='$pidtype'
17458 plibpth='$plibpth'
17459 pm_apiversion='$pm_apiversion'
17460 pmake='$pmake'
17461 pr='$pr'
17462 prefix='$prefix'
17463 prefixexp='$prefixexp'
17464 privlib='$privlib'
17465 privlibexp='$privlibexp'
17466 procselfexe='$procselfexe'
17467 prototype='$prototype'
17468 ptrsize='$ptrsize'
17469 quadkind='$quadkind'
17470 quadtype='$quadtype'
17471 randbits='$randbits'
17472 randfunc='$randfunc'
17473 randseedtype='$randseedtype'
17474 ranlib='$ranlib'
17475 rd_nodata='$rd_nodata'
17476 revision='$revision'
17477 rm='$rm'
17478 rmail='$rmail'
17479 run='$run'
17480 runnm='$runnm'
17481 sPRIEUldbl='$sPRIEUldbl'
17482 sPRIFUldbl='$sPRIFUldbl'
17483 sPRIGUldbl='$sPRIGUldbl'
17484 sPRIXU64='$sPRIXU64'
17485 sPRId64='$sPRId64'
17486 sPRIeldbl='$sPRIeldbl'
17487 sPRIfldbl='$sPRIfldbl'
17488 sPRIgldbl='$sPRIgldbl'
17489 sPRIi64='$sPRIi64'
17490 sPRIo64='$sPRIo64'
17491 sPRIu64='$sPRIu64'
17492 sPRIx64='$sPRIx64'
17493 sSCNfldbl='$sSCNfldbl'
17494 sched_yield='$sched_yield'
17495 scriptdir='$scriptdir'
17496 scriptdirexp='$scriptdirexp'
17497 sed='$sed'
17498 seedfunc='$seedfunc'
17499 selectminbits='$selectminbits'
17500 selecttype='$selecttype'
17501 sendmail='$sendmail'
17502 sh='$sh'
17503 shar='$shar'
17504 sharpbang='$sharpbang'
17505 shmattype='$shmattype'
17506 shortsize='$shortsize'
17507 shrpenv='$shrpenv'
17508 shsharp='$shsharp'
17509 sig_count='$sig_count'
17510 sig_name='$sig_name'
17511 sig_name_init='$sig_name_init'
17512 sig_num='$sig_num'
17513 sig_num_init='$sig_num_init'
17514 sig_size='$sig_size'
17515 signal_t='$signal_t'
17516 sitearch='$sitearch'
17517 sitearchexp='$sitearchexp'
17518 sitebin='$sitebin'
17519 sitebinexp='$sitebinexp'
17520 sitelib='$sitelib'
17521 sitelib_stem='$sitelib_stem'
17522 sitelibexp='$sitelibexp'
17523 siteprefix='$siteprefix'
17524 siteprefixexp='$siteprefixexp'
17525 sizesize='$sizesize'
17526 sizetype='$sizetype'
17527 sleep='$sleep'
17528 smail='$smail'
17529 so='$so'
17530 sockethdr='$sockethdr'
17531 socketlib='$socketlib'
17532 socksizetype='$socksizetype'
17533 sort='$sort'
17534 spackage='$spackage'
17535 spitshell='$spitshell'
17536 src='$src'
17537 ssizetype='$ssizetype'
17538 startperl='$startperl'
17539 startsh='$startsh'
17540 static_ext='$static_ext'
17541 stdchar='$stdchar'
17542 stdio_base='$stdio_base'
17543 stdio_bufsiz='$stdio_bufsiz'
17544 stdio_cnt='$stdio_cnt'
17545 stdio_filbuf='$stdio_filbuf'
17546 stdio_ptr='$stdio_ptr'
17547 stdio_stream_array='$stdio_stream_array'
17548 strings='$strings'
17549 submit='$submit'
17550 subversion='$subversion'
17551 sysman='$sysman'
17552 tail='$tail'
17553 tar='$tar'
17554 targetarch='$targetarch'
17555 tbl='$tbl'
17556 tee='$tee'
17557 test='$test'
17558 timeincl='$timeincl'
17559 timetype='$timetype'
17560 to='$to'
17561 touch='$touch'
17562 tr='$tr'
17563 trnl='$trnl'
17564 troff='$troff'
17565 u16size='$u16size'
17566 u16type='$u16type'
17567 u32size='$u32size'
17568 u32type='$u32type'
17569 u64size='$u64size'
17570 u64type='$u64type'
17571 u8size='$u8size'
17572 u8type='$u8type'
17573 uidformat='$uidformat'
17574 uidsign='$uidsign'
17575 uidsize='$uidsize'
17576 uidtype='$uidtype'
17577 uname='$uname'
17578 uniq='$uniq'
17579 uquadtype='$uquadtype'
17580 use5005threads='$use5005threads'
17581 use64bitall='$use64bitall'
17582 use64bitint='$use64bitint'
17583 usecrosscompile='$usecrosscompile'
17584 usedl='$usedl'
17585 useithreads='$useithreads'
17586 uselargefiles='$uselargefiles'
17587 uselongdouble='$uselongdouble'
17588 usemorebits='$usemorebits'
17589 usemultiplicity='$usemultiplicity'
17590 usemymalloc='$usemymalloc'
17591 usenm='$usenm'
17592 useopcode='$useopcode'
17593 useperlio='$useperlio'
17594 useposix='$useposix'
17595 usereentrant='$usereentrant'
17596 usesfio='$usesfio'
17597 useshrplib='$useshrplib'
17598 usesocks='$usesocks'
17599 usethreads='$usethreads'
17600 usevendorprefix='$usevendorprefix'
17601 usevfork='$usevfork'
17602 usrinc='$usrinc'
17603 uuname='$uuname'
17604 uvXUformat='$uvXUformat'
17605 uvoformat='$uvoformat'
17606 uvsize='$uvsize'
17607 uvtype='$uvtype'
17608 uvuformat='$uvuformat'
17609 uvxformat='$uvxformat'
17610 vendorarch='$vendorarch'
17611 vendorarchexp='$vendorarchexp'
17612 vendorbin='$vendorbin'
17613 vendorbinexp='$vendorbinexp'
17614 vendorlib='$vendorlib'
17615 vendorlib_stem='$vendorlib_stem'
17616 vendorlibexp='$vendorlibexp'
17617 vendorprefix='$vendorprefix'
17618 vendorprefixexp='$vendorprefixexp'
17619 version='$version'
17620 version_patchlevel_string='$version_patchlevel_string'
17621 versiononly='$versiononly'
17622 vi='$vi'
17623 voidflags='$voidflags'
17624 xlibpth='$xlibpth'
17625 xs_apiversion='$xs_apiversion'
17626 yacc='$yacc'
17627 yaccflags='$yaccflags'
17628 zcat='$zcat'
17629 zip='$zip'
17630 EOT
17631
17632 : Add in command line options if available
17633 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17634
17635 : add special variables
17636 $test -f $src/patchlevel.h && \
17637 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17638 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17639 echo "PERL_CONFIG_SH=true" >>config.sh
17640
17641 : propagate old symbols
17642 if $test -f UU/config.sh; then
17643         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17644         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17645         $sort | $uniq -u >UU/oldsyms
17646         set X `cat UU/oldsyms`
17647         shift
17648         case $# in
17649         0) ;;
17650         *)
17651                 cat <<EOM
17652 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17653 EOM
17654                 echo "# Variables propagated from previous config.sh file." >>config.sh
17655                 for sym in `cat UU/oldsyms`; do
17656                         echo "    Propagating $hint variable "'$'"$sym..."
17657                         eval 'tmp="$'"${sym}"'"'
17658                         echo "$tmp" | \
17659                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17660                 done
17661                 ;;
17662         esac
17663 fi
17664
17665 : Finish up by extracting the .SH files
17666 case "$alldone" in
17667 exit)
17668         $rm -rf UU
17669         echo "Extraction done."
17670         exit 0
17671         ;;
17672 cont)
17673         ;;
17674 '')
17675         dflt=''
17676         nostick=true
17677         $cat <<EOM
17678
17679 If you'd like to make any changes to the config.sh file before I begin
17680 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17681
17682 EOM
17683         rp="Press return or use a shell escape to edit config.sh:"
17684         . UU/myread
17685         nostick=''
17686         case "$ans" in
17687         '') ;;
17688         *) : in case they cannot read
17689                 sh 1>&4 -c "$ans";;
17690         esac
17691         ;;
17692 esac
17693
17694 : if this fails, just run all the .SH files by hand
17695 . ./config.sh
17696
17697 echo " "
17698 exec 1>&4
17699 pwd=`pwd`
17700 . ./UU/extract
17701 cd $pwd
17702
17703 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17704         dflt=y
17705         case "$silent" in
17706         true) ;;
17707         *)
17708                 $cat <<EOM
17709
17710 Now you need to generate make dependencies by running "$make depend".
17711 You might prefer to run it in background: "$make depend > makedepend.out &"
17712 It can take a while, so you might not want to run it right now.
17713
17714 EOM
17715                 ;;
17716         esac
17717         rp="Run $make depend now?"
17718         . UU/myread
17719         case "$ans" in
17720         y*)
17721                 $make depend && echo "Now you must run '$make'."
17722                 ;;
17723         *)
17724                 echo "You must run '$make depend' then '$make'."
17725                 ;;
17726         esac
17727 elif test -f [Mm]akefile; then
17728         echo " "
17729         echo "Now you must run a $make."
17730 else
17731         echo "Configure done."
17732 fi
17733
17734 if $test -f Policy.sh; then
17735     $cat <<EOM
17736
17737 If you compile $package on a different machine or from a different object
17738 directory, copy the Policy.sh file from this object directory to the
17739 new one before you run Configure -- this will help you with most of
17740 the policy defaults.
17741
17742 EOM
17743 fi
17744 if $test -f config.msg; then
17745     echo "Hmm.  I also noted the following information while running:"
17746     echo " "
17747     $cat config.msg >&4
17748     $rm -f config.msg
17749 fi
17750 $rm -f kit*isdone ark*isdone
17751 $rm -rf UU
17752
17753 : End of Configure
17754