Mithing.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Wed Dec 12 17:09:05 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.  But if you do, the 'threads' module allows their use,
3266 and the 'Thread' module offers an interface to both 5005threads and
3267 ithreads (whichever has been configured).
3268 EOM
3269         : Default to ithreads unless overridden on command line or with
3270         : old config.sh
3271         dflt='y'
3272         case "$use5005threads" in
3273                 $define|true|[yY]*) dflt='n';;
3274         esac
3275         case "$useithreads" in
3276                 $undef|false|[nN]*) dflt='n';;
3277         esac
3278         rp='Use interpreter-based ithreads?'
3279         . ./myread
3280         case "$ans" in
3281         y|Y)    val="$define" ;;
3282         *)      val="$undef" ;;
3283         esac
3284         set useithreads
3285         eval $setvar
3286         : Now set use5005threads to the opposite value.
3287         case "$useithreads" in
3288         $define) val="$undef" ;;
3289         *) val="$define" ;;
3290         esac
3291         set use5005threads
3292         eval $setvar
3293         ;;
3294 *)
3295         useithreads="$undef"
3296         use5005threads="$undef"
3297         ;;
3298 esac
3299
3300 case "$useithreads$use5005threads" in
3301 "$define$define")
3302         $cat >&4 <<EOM
3303
3304 You cannot have both the ithreads and the 5.005 threads enabled
3305 at the same time.  Disabling the 5.005 threads since they are
3306 much less stable than the ithreads.
3307
3308 EOM
3309         use5005threads="$undef"
3310         ;;
3311 esac
3312
3313 case "$d_oldpthreads" in
3314 '')     : Configure tests would be welcome here.  For now, assume undef.
3315         val="$undef" ;;
3316 *)      val="$d_oldpthreads" ;;
3317 esac
3318 set d_oldpthreads
3319 eval $setvar
3320
3321
3322 case "$usethreads" in
3323 "$define"|true|[yY]*)
3324 : Look for a hint-file generated 'call-back-unit'.  If the
3325 : user has specified that a threading perl is to be built,
3326 : we may need to set or change some other defaults.
3327         if $test -f usethreads.cbu; then
3328                 echo "Your platform has some specific hints for threaded builds, using them..."
3329                 . ./usethreads.cbu
3330         else
3331                 $cat <<EOM
3332 (Your platform doesn't have any specific hints for threaded builds.
3333  Assuming POSIX threads, then.)
3334 EOM
3335         fi
3336         ;;
3337 esac
3338
3339 cat <<EOM
3340
3341 Perl can be built so that multiple Perl interpreters can coexist
3342 within the same Perl executable.
3343 EOM
3344
3345 case "$useithreads" in
3346 $define)
3347         cat <<EOM
3348 This multiple interpreter support is required for interpreter-based threads.
3349 EOM
3350         val="$define"
3351         ;;
3352 *)      case "$usemultiplicity" in
3353         $define|true|[yY]*)     dflt='y';;
3354         *) dflt='n';;
3355         esac
3356         echo " "
3357         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3358         rp='Build Perl for multiplicity?'
3359         . ./myread
3360         case "$ans" in
3361         y|Y)    val="$define" ;;
3362         *)      val="$undef" ;;
3363         esac
3364         ;;
3365 esac
3366 set usemultiplicity
3367 eval $setvar
3368
3369
3370 case "$usemorebits" in
3371 "$define"|true|[yY]*)
3372         use64bitint="$define"
3373         uselongdouble="$define"
3374         usemorebits="$define"
3375         ;;
3376 *)      usemorebits="$undef"
3377         ;;
3378 esac
3379
3380 : make some quick guesses about what we are up against
3381 echo " "
3382 $echo $n "Hmm...  $c"
3383 echo exit 1 >bsd
3384 echo exit 1 >usg
3385 echo exit 1 >v7
3386 echo exit 1 >osf1
3387 echo exit 1 >eunice
3388 echo exit 1 >xenix
3389 echo exit 1 >venix
3390 echo exit 1 >os2
3391 d_bsd="$undef"
3392 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3393 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3394 then
3395         echo "Looks kind of like an OSF/1 system, but we'll see..."
3396         echo exit 0 >osf1
3397 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3398         xxx=`./loc addbib blurfl $pth`
3399         if $test -f $xxx; then
3400         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3401                 echo exit 0 >bsd
3402                 echo exit 0 >usg
3403         else
3404                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3405                         echo "Looks kind of like an extended USG system, but we'll see..."
3406                 else
3407                         echo "Looks kind of like a USG system, but we'll see..."
3408                 fi
3409                 echo exit 0 >usg
3410         fi
3411 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3412         echo "Looks kind of like a BSD system, but we'll see..."
3413         d_bsd="$define"
3414         echo exit 0 >bsd
3415 else
3416         echo "Looks kind of like a Version 7 system, but we'll see..."
3417         echo exit 0 >v7
3418 fi
3419 case "$eunicefix" in
3420 *unixtovms*)
3421         $cat <<'EOI'
3422 There is, however, a strange, musty smell in the air that reminds me of
3423 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3424 EOI
3425         echo exit 0 >eunice
3426         d_eunice="$define"
3427 : it so happens the Eunice I know will not run shell scripts in Unix format
3428         ;;
3429 *)
3430         echo " "
3431         echo "Congratulations.  You aren't running Eunice."
3432         d_eunice="$undef"
3433         ;;
3434 esac
3435 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3436 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3437 : semicolon as a patch separator
3438 case "$p_" in
3439 :) ;;
3440 *)
3441         $cat <<'EOI'
3442 I have the feeling something is not exactly right, however...don't tell me...
3443 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3444 (Or you may be running DOS with DJGPP.)
3445 EOI
3446         echo exit 0 >os2
3447         ;;
3448 esac
3449 if test -f /xenix; then
3450         echo "Actually, this looks more like a XENIX system..."
3451         echo exit 0 >xenix
3452         d_xenix="$define"
3453 else
3454         echo " "
3455         echo "It's not Xenix..."
3456         d_xenix="$undef"
3457 fi
3458 chmod +x xenix
3459 $eunicefix xenix
3460 if test -f /venix; then
3461         echo "Actually, this looks more like a VENIX system..."
3462         echo exit 0 >venix
3463 else
3464         echo " "
3465         if ./xenix; then
3466                 : null
3467         else
3468                 echo "Nor is it Venix..."
3469         fi
3470 fi
3471 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3472 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3473 $rm -f foo
3474
3475 case "$cc" in
3476 '') dflt=cc;;
3477 *) dflt="$cc";;
3478 esac
3479 rp="Use which C compiler?"
3480 . ./myread
3481 cc="$ans"
3482 : Look for a hint-file generated 'call-back-unit'.  Now that the
3483 : user has specified the compiler, we may need to set or change some
3484 : other defaults.
3485 if $test -f cc.cbu; then
3486     . ./cc.cbu
3487 fi
3488 . ./checkcc
3489
3490 echo " "
3491 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3492 $cat >try.c <<EOM
3493 #include <stdio.h>
3494 int main() {
3495 #ifdef __GNUC__
3496 #ifdef __VERSION__
3497         printf("%s\n", __VERSION__);
3498 #else
3499         printf("%s\n", "1");
3500 #endif
3501 #endif
3502         exit(0);
3503 }
3504 EOM
3505 if $cc -o try $ccflags $ldflags try.c; then
3506         gccversion=`$run ./try`
3507         case "$gccversion" in
3508         '') echo "You are not using GNU cc." ;;
3509         *)  echo "You are using GNU cc $gccversion."
3510             ccname=gcc  
3511             ;;
3512         esac
3513 else
3514         echo " "
3515         echo "*** WHOA THERE!!! ***" >&4
3516         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3517         case "$knowitall" in
3518         '')
3519         echo "    You'd better start hunting for one and let me know about it." >&4
3520                 exit 1
3521                 ;;
3522         esac
3523 fi
3524 $rm -f try try.*
3525 case "$gccversion" in
3526 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3527 esac
3528 case "$gccversion" in
3529 '') gccosandvers='' ;;
3530 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3531    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3532    gccshortvers=''
3533    case "$gccosandvers" in
3534    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3535    $osname$osvers) ;; # looking good
3536    $osname*) cat <<EOM >&4
3537
3538 *** WHOA THERE!!! ***
3539
3540     Your gcc has not been compiled for the exact release of
3541     your operating system ($gccosandvers versus $osname$osvers).
3542
3543     In general it is a good idea to keep gcc synchronized with
3544     the operating system because otherwise serious problems
3545     may ensue when trying to compile software, like Perl.
3546
3547     I'm trying to be optimistic here, though, and will continue.
3548     If later during the configuration and build icky compilation
3549     problems appear (headerfile conflicts being the most common
3550     manifestation), I suggest reinstalling the gcc to match
3551     your operating system release.
3552
3553 EOM
3554       ;;
3555    *) gccosandvers='' ;; # failed to parse, better be silent
3556    esac
3557    ;;
3558 esac
3559 case "$ccname" in
3560 '') ccname="$cc" ;;
3561 esac
3562
3563
3564 : decide how portable to be.  Allow command line overrides.
3565 case "$d_portable" in
3566 "$undef") ;;
3567 *)      d_portable="$define" ;;
3568 esac
3569
3570 : set up shell script to do ~ expansion
3571 cat >filexp <<EOSS
3572 $startsh
3573 : expand filename
3574 case "\$1" in
3575  ~/*|~)
3576         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3577         ;;
3578  ~*)
3579         if $test -f /bin/csh; then
3580                 /bin/csh -f -c "glob \$1"
3581                 failed=\$?
3582                 echo ""
3583                 exit \$failed
3584         else
3585                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3586                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3587                 if $test ! -d "\$dir"; then
3588                         me=\`basename \$0\`
3589                         echo "\$me: can't locate home directory for: \$name" >&2
3590                         exit 1
3591                 fi
3592                 case "\$1" in
3593                 */*)
3594                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3595                         ;;
3596                 *)
3597                         echo \$dir
3598                         ;;
3599                 esac
3600         fi
3601         ;;
3602 *)
3603         echo \$1
3604         ;;
3605 esac
3606 EOSS
3607 chmod +x filexp
3608 $eunicefix filexp
3609
3610 : now set up to get a file name
3611 cat <<EOS >getfile
3612 $startsh
3613 EOS
3614 cat <<'EOSC' >>getfile
3615 tilde=''
3616 fullpath=''
3617 already=''
3618 skip=''
3619 none_ok=''
3620 exp_file=''
3621 nopath_ok=''
3622 orig_rp="$rp"
3623 orig_dflt="$dflt"
3624 case "$gfpth" in
3625 '') gfpth='.' ;;
3626 esac
3627
3628 case "$fn" in
3629 *\(*)
3630         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3631         fn=`echo $fn | sed 's/(.*)//'`
3632         ;;
3633 esac
3634
3635 case "$fn" in
3636 *:*)
3637         loc_file=`expr $fn : '.*:\(.*\)'`
3638         fn=`expr $fn : '\(.*\):.*'`
3639         ;;
3640 esac
3641
3642 case "$fn" in
3643 *~*) tilde=true;;
3644 esac
3645 case "$fn" in
3646 */*) fullpath=true;;
3647 esac
3648 case "$fn" in
3649 *+*) skip=true;;
3650 esac
3651 case "$fn" in
3652 *n*) none_ok=true;;
3653 esac
3654 case "$fn" in
3655 *e*) exp_file=true;;
3656 esac
3657 case "$fn" in
3658 *p*) nopath_ok=true;;
3659 esac
3660
3661 case "$fn" in
3662 *f*) type='File';;
3663 *d*) type='Directory';;
3664 *l*) type='Locate';;
3665 esac
3666
3667 what="$type"
3668 case "$what" in
3669 Locate) what='File';;
3670 esac
3671
3672 case "$exp_file" in
3673 '')
3674         case "$d_portable" in
3675         "$define") ;;
3676         *) exp_file=true;;
3677         esac
3678         ;;
3679 esac
3680
3681 cd ..
3682 while test "$type"; do
3683         redo=''
3684         rp="$orig_rp"
3685         dflt="$orig_dflt"
3686         case "$tilde" in
3687         true) rp="$rp (~name ok)";;
3688         esac
3689         . UU/myread
3690         if test -f UU/getfile.ok && \
3691                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3692         then
3693                 value="$ans"
3694                 ansexp="$ans"
3695                 break
3696         fi
3697         case "$ans" in
3698         none)
3699                 value=''
3700                 ansexp=''
3701                 case "$none_ok" in
3702                 true) type='';;
3703                 esac
3704                 ;;
3705         *)
3706                 case "$tilde" in
3707                 '') value="$ans"
3708                         ansexp="$ans";;
3709                 *)
3710                         value=`UU/filexp $ans`
3711                         case $? in
3712                         0)
3713                                 if test "$ans" != "$value"; then
3714                                         echo "(That expands to $value on this system.)"
3715                                 fi
3716                                 ;;
3717                         *) value="$ans";;
3718                         esac
3719                         ansexp="$value"
3720                         case "$exp_file" in
3721                         '') value="$ans";;
3722                         esac
3723                         ;;
3724                 esac
3725                 case "$fullpath" in
3726                 true)
3727                         case "$ansexp" in
3728                         /*) value="$ansexp" ;;
3729                         [a-zA-Z]:/*) value="$ansexp" ;;
3730                         *)
3731                                 redo=true
3732                                 case "$already" in
3733                                 true)
3734                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3735                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3736                                         ;;
3737                                 *)
3738                                 echo "Please give a full path name, starting with slash." >&4
3739                                         case "$tilde" in
3740                                         true)
3741                                 echo "Note that using ~name is ok provided it expands well." >&4
3742                                                 already=true
3743                                                 ;;
3744                                         esac
3745                                 esac
3746                                 ;;
3747                         esac
3748                         ;;
3749                 esac
3750                 case "$redo" in
3751                 '')
3752                         case "$type" in
3753                         File)
3754                                 for fp in $gfpth; do
3755                                         if test "X$fp" = X.; then
3756                                             pf="$ansexp"
3757                                         else    
3758                                             pf="$fp/$ansexp"
3759                                         fi
3760                                         if test -f "$pf"; then
3761                                                 type=''
3762                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3763                                         then
3764                                                 echo "($value is not a plain file, but that's ok.)"
3765                                                 type=''
3766                                         fi
3767                                         if test X"$type" = X; then
3768                                             value="$pf"
3769                                             break
3770                                         fi
3771                                 done
3772                                 ;;
3773                         Directory)
3774                                 for fp in $gfpth; do
3775                                         if test "X$fp" = X.; then
3776                                             dir="$ans"
3777                                             direxp="$ansexp"
3778                                         else    
3779                                             dir="$fp/$ansexp"
3780                                             direxp="$fp/$ansexp"
3781                                         fi
3782                                         if test -d "$direxp"; then
3783                                                 type=''
3784                                                 value="$dir"
3785                                                 break
3786                                         fi
3787                                 done
3788                                 ;;
3789                         Locate)
3790                                 if test -d "$ansexp"; then
3791                                         echo "(Looking for $loc_file in directory $value.)"
3792                                         value="$value/$loc_file"
3793                                         ansexp="$ansexp/$loc_file"
3794                                 fi
3795                                 if test -f "$ansexp"; then
3796                                         type=''
3797                                 fi
3798                                 case "$nopath_ok" in
3799                                 true)   case "$value" in
3800                                         */*) ;;
3801                                         *)      echo "Assuming $value will be in people's path."
3802                                                 type=''
3803                                                 ;;
3804                                         esac
3805                                         ;;
3806                                 esac
3807                                 ;;
3808                         esac
3809
3810                         case "$skip" in
3811                         true) type='';
3812                         esac
3813
3814                         case "$type" in
3815                         '') ;;
3816                         *)
3817                                 if test "$fastread" = yes; then
3818                                         dflt=y
3819                                 else
3820                                         dflt=n
3821                                 fi
3822                                 rp="$what $value doesn't exist.  Use that name anyway?"
3823                                 . UU/myread
3824                                 dflt=''
3825                                 case "$ans" in
3826                                 y*) type='';;
3827                                 *) echo " ";;
3828                                 esac
3829                                 ;;
3830                         esac
3831                         ;;
3832                 esac
3833                 ;;
3834         esac
3835 done
3836 cd UU
3837 ans="$value"
3838 rp="$orig_rp"
3839 dflt="$orig_dflt"
3840 rm -f getfile.ok
3841 test "X$gfpthkeep" != Xy && gfpth=""
3842 EOSC
3843
3844 : What should the include directory be ?
3845 echo " "
3846 $echo $n "Hmm...  $c"
3847 dflt='/usr/include'
3848 incpath=''
3849 mips_type=''
3850 if $test -f /bin/mips && /bin/mips; then
3851         echo "Looks like a MIPS system..."
3852         $cat >usr.c <<'EOCP'
3853 #ifdef SYSTYPE_BSD43
3854 /bsd43
3855 #endif
3856 EOCP
3857         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3858                 dflt='/bsd43/usr/include'
3859                 incpath='/bsd43'
3860                 mips_type='BSD 4.3'
3861         else
3862                 mips_type='System V'
3863         fi
3864         $rm -f usr.c usr.out
3865         echo "and you're compiling with the $mips_type compiler and libraries."
3866         xxx_prompt=y
3867         echo "exit 0" >mips
3868 else
3869         echo "Doesn't look like a MIPS system."
3870         xxx_prompt=n
3871         echo "exit 1" >mips
3872 fi
3873 chmod +x mips
3874 $eunicefix mips
3875 case "$usrinc" in
3876 '') ;;
3877 *) dflt="$usrinc";;
3878 esac
3879 case "$xxx_prompt" in
3880 y)      fn=d/
3881         echo " "
3882         rp='Where are the include files you want to use?'
3883         . ./getfile
3884         usrinc="$ans"
3885         ;;
3886 *)      usrinc="$dflt"
3887         ;;
3888 esac
3889
3890 : see how we invoke the C preprocessor
3891 echo " "
3892 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3893 cat <<'EOT' >testcpp.c
3894 #define ABC abc
3895 #define XYZ xyz
3896 ABC.XYZ
3897 EOT
3898 cd ..
3899 if test ! -f cppstdin; then
3900         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3901                 # AIX cc -E doesn't show the absolute headerfile
3902                 # locations but we'll cheat by using the -M flag.
3903                 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
3904         else
3905                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3906         fi
3907 else
3908         echo "Keeping your $hint cppstdin wrapper."
3909 fi
3910 chmod 755 cppstdin
3911 wrapper=`pwd`/cppstdin
3912 ok='false'
3913 cd UU
3914
3915 if $test "X$cppstdin" != "X" && \
3916         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3917         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3918 then
3919         echo "You used to use $cppstdin $cppminus so we'll use that again."
3920         case "$cpprun" in
3921         '') echo "But let's see if we can live without a wrapper..." ;;
3922         *)
3923                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3924                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3925                 then
3926                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3927                         ok='true'
3928                 else
3929                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3930                 fi
3931                 ;;
3932         esac
3933 else
3934         case "$cppstdin" in
3935         '') ;;
3936         *)
3937                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3938                 ;;
3939         esac
3940 fi
3941
3942 if $ok; then
3943         : nothing
3944 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3945         $cc -E <testcpp.c >testcpp.out 2>&1; \
3946         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3947         echo "Yup, it does."
3948         x_cpp="$cc -E"
3949         x_minus='';
3950 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3951         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3952         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3953         echo "Yup, it does."
3954         x_cpp="$cc -E"
3955         x_minus='-';
3956 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3957         $cc -P <testcpp.c >testcpp.out 2>&1; \
3958         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3959         echo "Yipee, that works!"
3960         x_cpp="$cc -P"
3961         x_minus='';
3962 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3963         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3964         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3965         echo "At long last!"
3966         x_cpp="$cc -P"
3967         x_minus='-';
3968 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3969         $cpp <testcpp.c >testcpp.out 2>&1; \
3970         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3971         echo "It works!"
3972         x_cpp="$cpp"
3973         x_minus='';
3974 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3975         $cpp - <testcpp.c >testcpp.out 2>&1; \
3976         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3977         echo "Hooray, it works!  I was beginning to wonder."
3978         x_cpp="$cpp"
3979         x_minus='-';
3980 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3981         $wrapper <testcpp.c >testcpp.out 2>&1; \
3982         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3983         x_cpp="$wrapper"
3984         x_minus=''
3985         echo "Eureka!"
3986 else
3987         dflt=''
3988         rp="No dice.  I can't find a C preprocessor.  Name one:"
3989         . ./myread
3990         x_cpp="$ans"
3991         x_minus=''
3992         $x_cpp <testcpp.c >testcpp.out 2>&1
3993         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3994                 echo "OK, that will do." >&4
3995         else
3996 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3997                 exit 1
3998         fi
3999 fi
4000
4001 case "$ok" in
4002 false)
4003         cppstdin="$x_cpp"
4004         cppminus="$x_minus"
4005         cpprun="$x_cpp"
4006         cpplast="$x_minus"
4007         set X $x_cpp
4008         shift
4009         case "$1" in
4010         "$cpp")
4011                 echo "Perhaps can we force $cc -E using a wrapper..."
4012                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4013                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4014                 then
4015                         echo "Yup, we can."
4016                         cppstdin="$wrapper"
4017                         cppminus='';
4018                 else
4019                         echo "Nope, we'll have to live without it..."
4020                 fi
4021                 ;;
4022         esac
4023         case "$cpprun" in
4024         "$wrapper")
4025                 cpprun=''
4026                 cpplast=''
4027                 ;;
4028         esac
4029         ;;
4030 esac
4031
4032 case "$cppstdin" in
4033 "$wrapper"|'cppstdin') ;;
4034 *) $rm -f $wrapper;;
4035 esac
4036 $rm -f testcpp.c testcpp.out
4037
4038 : Set private lib path
4039 case "$plibpth" in
4040 '') if ./mips; then
4041                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4042         fi;;
4043 esac
4044 case "$libpth" in
4045 ' ') dlist='';;
4046 '') dlist="$loclibpth $plibpth $glibpth";;
4047 *) dlist="$libpth";;
4048 esac
4049
4050 : Now check and see which directories actually exist, avoiding duplicates
4051 libpth=''
4052 for xxx in $dlist
4053 do
4054     if $test -d $xxx; then
4055                 case " $libpth " in
4056                 *" $xxx "*) ;;
4057                 *) libpth="$libpth $xxx";;
4058                 esac
4059     fi
4060 done
4061 $cat <<'EOM'
4062
4063 Some systems have incompatible or broken versions of libraries.  Among
4064 the directories listed in the question below, please remove any you
4065 know not to be holding relevant libraries, and add any that are needed.
4066 Say "none" for none.
4067
4068 EOM
4069 case "$libpth" in
4070 '') dflt='none';;
4071 *)
4072         set X $libpth
4073         shift
4074         dflt=${1+"$@"}
4075         ;;
4076 esac
4077 rp="Directories to use for library searches?"
4078 . ./myread
4079 case "$ans" in
4080 none) libpth=' ';;
4081 *) libpth="$ans";;
4082 esac
4083
4084 : compute shared library extension
4085 case "$so" in
4086 '')
4087         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4088                 dflt='sl'
4089         else
4090                 dflt='so'
4091         fi
4092         ;;
4093 *) dflt="$so";;
4094 esac
4095 $cat <<EOM
4096
4097 On some systems, shared libraries may be available.  Answer 'none' if
4098 you want to suppress searching of shared libraries for the remainder
4099 of this configuration.
4100
4101 EOM
4102 rp='What is the file extension used for shared libraries?'
4103 . ./myread
4104 so="$ans"
4105
4106 : Define several unixisms.
4107 : Hints files or command line option can be used to override them.
4108 : The convoluted testing is in case hints files set either the old
4109 : or the new name.
4110 case "$_exe" in
4111 '')     case "$exe_ext" in
4112     '') ;;
4113         *)      _exe="$exe_ext" ;;
4114         esac
4115         ;;
4116 esac
4117 case "$_a" in
4118 '')     case "$lib_ext" in
4119     '') _a='.a';;
4120         *)      _a="$lib_ext" ;;
4121         esac
4122         ;;
4123 esac
4124 case "$_o" in
4125 '') case "$obj_ext" in
4126         '')     _o='.o';;
4127         *)      _o="$obj_ext";;
4128         esac
4129         ;;
4130 esac
4131 case "$p_" in
4132 '') case "$path_sep" in
4133         '')     p_=':';;
4134         *)      p_="$path_sep";;
4135         esac
4136         ;;
4137 esac
4138 exe_ext=$_exe
4139 lib_ext=$_a
4140 obj_ext=$_o
4141 path_sep=$p_
4142
4143 : Which makefile gets called first.  This is used by make depend.
4144 case "$firstmakefile" in
4145 '') firstmakefile='makefile';;
4146 esac
4147
4148 case "$usesocks" in
4149 $define|true|[yY]*)     dflt='y';;
4150 *) dflt='n';;
4151 esac
4152 cat <<EOM
4153
4154 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4155 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4156 to use the PerlIO abstraction layer, this will be implicitly selected.
4157
4158 If this doesn't make any sense to you, just accept the default '$dflt'.
4159 EOM
4160 rp='Build Perl for SOCKS?'
4161 . ./myread
4162 case "$ans" in
4163 y|Y)    val="$define" ;;     
4164 *)      val="$undef" ;;
4165 esac
4166 set usesocks
4167 eval $setvar
4168
4169 case "$usesocks" in
4170 $define|true|[yY]*) useperlio="$define";;
4171 esac
4172
4173 : Looking for optional libraries
4174 echo " "
4175 echo "Checking for optional libraries..." >&4
4176 case "$libs" in
4177 ' '|'') dflt='';;
4178 *) dflt="$libs";;
4179 esac
4180 case "$libswanted" in
4181 '') libswanted='c_s';;
4182 esac
4183 case "$usesocks" in
4184 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4185 esac
4186 libsfound=''
4187 libsfiles=''
4188 libsdirs=''
4189 libspath=''
4190 for thisdir in $libpth $xlibpth; do
4191   test -d $thisdir && libspath="$libspath $thisdir"
4192 done
4193 for thislib in $libswanted; do
4194         for thisdir in $libspath; do
4195             xxx=''
4196             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4197                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4198                 $test -f "$xxx" && eval $libscheck
4199                 $test -f "$xxx" && libstyle=shared
4200             fi
4201             if test ! -f "$xxx"; then
4202                 xxx=$thisdir/lib$thislib.$so
4203                 $test -f "$xxx" && eval $libscheck
4204                 $test -f "$xxx" && libstyle=shared
4205             fi  
4206             if test ! -f "$xxx"; then
4207                 xxx=$thisdir/lib$thislib$_a
4208                 $test -f "$xxx" && eval $libscheck
4209                 $test -f "$xxx" && libstyle=static
4210             fi
4211             if test ! -f "$xxx"; then
4212                 xxx=$thisdir/$thislib$_a
4213                 $test -f "$xxx" && eval $libscheck
4214                 $test -f "$xxx" && libstyle=static
4215             fi
4216             if test ! -f "$xxx"; then
4217                 xxx=$thisdir/lib${thislib}_s$_a
4218                 $test -f "$xxx" && eval $libscheck
4219                 $test -f "$xxx" && libstyle=static
4220                 $test -f "$xxx" && thislib=${thislib}_s
4221             fi
4222             if test ! -f "$xxx"; then
4223                 xxx=$thisdir/Slib$thislib$_a
4224                 $test -f "$xxx" && eval $libscheck
4225                 $test -f "$xxx" && libstyle=static
4226             fi
4227             if $test -f "$xxx"; then
4228                 case "$libstyle" in
4229                 shared) echo "Found -l$thislib (shared)." ;;
4230                 static) echo "Found -l$thislib." ;;
4231                 *)      echo "Found -l$thislib ($libstyle)." ;;
4232                 esac
4233                 case " $dflt " in
4234                 *"-l$thislib "*);;
4235                 *) dflt="$dflt -l$thislib"
4236                    libsfound="$libsfound $xxx"
4237                    yyy=`basename $xxx`
4238                    libsfiles="$libsfiles $yyy"
4239                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4240                    case " $libsdirs " in
4241                    *" $yyy "*) ;;
4242                    *) libsdirs="$libsdirs $yyy" ;;
4243                    esac
4244                    ;;
4245                 esac
4246                 break
4247             fi  
4248         done
4249         if $test ! -f "$xxx"; then
4250             echo "No -l$thislib."
4251         fi
4252 done
4253 set X $dflt
4254 shift
4255 dflt="$*"
4256 case "$libs" in
4257 '') dflt="$dflt";;
4258 *) dflt="$libs";;
4259 esac
4260 case "$dflt" in
4261 ' '|'') dflt='none';;
4262 esac
4263
4264 $cat <<EOM
4265
4266 In order to compile $package on your machine, a number of libraries
4267 are usually needed.  Include any other special libraries here as well.
4268 Say "none" for none.  The default list is almost always right.
4269 EOM
4270
4271 echo " "
4272 rp="What libraries to use?"
4273 . ./myread
4274 case "$ans" in
4275 none) libs=' ';;
4276 *) libs="$ans";;
4277 esac
4278
4279 : determine optimization, if desired, or use for debug flag also
4280 case "$optimize" in
4281 ' '|$undef) dflt='none';;
4282 '') dflt='-O';;
4283 *) dflt="$optimize";;
4284 esac
4285 $cat <<EOH
4286
4287 By default, $package compiles with the -O flag to use the optimizer.
4288 Alternately, you might want to use the symbolic debugger, which uses
4289 the -g flag (on traditional Unix systems).  Either flag can be
4290 specified here.  To use neither flag, specify the word "none".
4291
4292 EOH
4293 rp="What optimizer/debugger flag should be used?"
4294 . ./myread
4295 optimize="$ans"
4296 case "$optimize" in
4297 'none') optimize=" ";;
4298 esac
4299
4300 dflt=''
4301 : We will not override a previous value, but we might want to
4302 : augment a hint file
4303 case "$hint" in
4304 default|recommended)
4305         case "$gccversion" in
4306         1*) dflt='-fpcc-struct-return' ;;
4307         esac
4308         case "$optimize" in
4309         *-g*) dflt="$dflt -DDEBUGGING";;
4310         esac
4311         case "$gccversion" in
4312         2*) if test -d /etc/conf/kconfig.d &&
4313                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4314                 then
4315                         dflt="$dflt -posix"
4316                 fi
4317                 ;;
4318         esac
4319         case "$gccversion" in
4320         1*) ;;
4321         2.[0-8]*) ;;
4322         ?*)     echo " "
4323                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4324                 echo 'int main(void) { return 0; }' > gcctest.c
4325                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4326                         echo "Yes, it does." 2>&1
4327                         case "$ccflags" in
4328                         *strict-aliasing*) 
4329                                 echo "Leaving current flags $ccflags alone." 2>&1
4330                                 ;;
4331                         *) dflt="$dflt -fno-strict-aliasing" ;;
4332                         esac
4333                 else
4334                         echo "Nope, it doesn't, but that's ok." 2>&1
4335                 fi
4336                 ;;
4337         esac
4338         ;;
4339 esac
4340
4341 case "$mips_type" in
4342 *BSD*|'') inclwanted="$locincpth $usrinc";;
4343 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4344 esac
4345 for thisincl in $inclwanted; do
4346         if $test -d $thisincl; then
4347                 if $test x$thisincl != x$usrinc; then
4348                         case "$dflt" in
4349                         *" -I$thisincl "*);;
4350                         *) dflt="$dflt -I$thisincl ";;
4351                         esac
4352                 fi
4353         fi
4354 done
4355
4356 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4357         xxx=true;
4358 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4359         xxx=true;
4360 else
4361         xxx=false;
4362 fi;
4363 if $xxx; then
4364         case "$dflt" in
4365         *$2*);;
4366         *) dflt="$dflt -D$2";;
4367         esac;
4368 fi'
4369
4370 set signal.h LANGUAGE_C; eval $inctest
4371
4372 case "$usesocks" in
4373 $define)
4374         ccflags="$ccflags -DSOCKS"
4375         ;;
4376 esac
4377
4378 case "$hint" in
4379 default|recommended) dflt="$ccflags $dflt" ;;
4380 *) dflt="$ccflags";;
4381 esac
4382
4383 case "$dflt" in
4384 ''|' ') dflt=none;;
4385 esac
4386
4387 $cat <<EOH
4388
4389 Your C compiler may want other flags.  For this question you should include
4390 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4391 but you should NOT include libraries or ld flags like -lwhatever.  If you
4392 want $package to honor its debug switch, you should include -DDEBUGGING here.
4393 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4394
4395 To use no flags, specify the word "none".
4396
4397 EOH
4398 set X $dflt
4399 shift
4400 dflt=${1+"$@"}
4401 rp="Any additional cc flags?"
4402 . ./myread
4403 case "$ans" in
4404 none) ccflags='';;
4405 *) ccflags="$ans";;
4406 esac
4407
4408 : the following weeds options from ccflags that are of no interest to cpp
4409 case "$cppflags" in
4410 '') cppflags="$ccflags" ;;
4411 *)  cppflags="$cppflags $ccflags" ;;
4412 esac
4413 case "$gccversion" in
4414 1*) cppflags="$cppflags -D__GNUC__"
4415 esac
4416 case "$mips_type" in
4417 '');;
4418 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4419 esac
4420 case "$cppflags" in
4421 '');;
4422 *)
4423         echo " "
4424         echo "Let me guess what the preprocessor flags are..." >&4
4425         set X $cppflags
4426         shift
4427         cppflags=''
4428         $cat >cpp.c <<'EOM'
4429 #define BLURFL foo
4430
4431 BLURFL xx LFRULB
4432 EOM
4433         previous=''
4434         for flag in $*
4435         do
4436                 case "$flag" in
4437                 -*) ftry="$flag";;
4438                 *) ftry="$previous $flag";;
4439                 esac
4440                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4441                         >cpp1.out 2>/dev/null && \
4442                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4443                         >cpp2.out 2>/dev/null && \
4444                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4445                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4446                 then
4447                         cppflags="$cppflags $ftry"
4448                         previous=''
4449                 else
4450                         previous="$flag"
4451                 fi
4452         done
4453         set X $cppflags
4454         shift
4455         cppflags=${1+"$@"}
4456         case "$cppflags" in
4457         *-*)  echo "They appear to be: $cppflags";;
4458         esac
4459         $rm -f cpp.c cpp?.out
4460         ;;
4461 esac
4462
4463 : flags used in final linking phase
4464 case "$ldflags" in
4465 '') if ./venix; then
4466                 dflt='-i -z'
4467         else
4468                 dflt=''
4469         fi
4470         case "$ccflags" in
4471         *-posix*) dflt="$dflt -posix" ;;
4472         esac
4473         ;;
4474 *) dflt="$ldflags";;
4475 esac
4476
4477 : Try to guess additional flags to pick up local libraries.
4478 for thislibdir in $libpth; do
4479         case " $loclibpth " in
4480         *" $thislibdir "*)
4481                 case "$dflt " in 
4482                 *"-L$thislibdir "*) ;;
4483                 *)  dflt="$dflt -L$thislibdir" ;;
4484                 esac
4485                 ;;
4486         esac
4487 done
4488
4489 case "$dflt" in
4490 '') dflt='none' ;;
4491 esac
4492
4493 $cat <<EOH
4494
4495 Your C linker may need flags.  For this question you should
4496 include -L/whatever and any other flags used by the C linker, but you
4497 should NOT include libraries like -lwhatever.
4498
4499 Make sure you include the appropriate -L/path flags if your C linker
4500 does not normally search all of the directories you specified above,
4501 namely
4502         $libpth
4503 To use no flags, specify the word "none".
4504
4505 EOH
4506
4507 rp="Any additional ld flags (NOT including libraries)?"
4508 . ./myread
4509 case "$ans" in
4510 none) ldflags='';;
4511 *) ldflags="$ans";;
4512 esac
4513 rmlist="$rmlist pdp11"
4514
4515 : coherency check
4516 echo " "
4517 echo "Checking your choice of C compiler and flags for coherency..." >&4
4518 $cat > try.c <<'EOF'
4519 #include <stdio.h>
4520 int main() { printf("Ok\n"); exit(0); }
4521 EOF
4522 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4523 shift
4524 $cat >try.msg <<'EOM'
4525 I've tried to compile and run the following simple program:
4526
4527 EOM
4528 $cat try.c >> try.msg
4529
4530 $cat >> try.msg <<EOM
4531
4532 I used the command:
4533
4534         $*
4535         $run ./try
4536
4537 and I got the following output:
4538
4539 EOM
4540 dflt=y
4541 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4542         if $sh -c "$run ./try" >>try.msg 2>&1; then
4543                 xxx=`$run ./try`
4544                 case "$xxx" in
4545                 "Ok") dflt=n ;;
4546                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4547                         case " $libs " in
4548                         *" -lsfio "*)
4549                                 cat >> try.msg <<'EOQS'
4550 If $libs contains -lsfio, and sfio is mis-configured, then it
4551 sometimes (apparently) runs and exits with a 0 status, but with no
4552 output!  It may have to do with sfio's use of _exit vs. exit.
4553
4554 EOQS
4555                                 rp="You have a big problem.  Shall I abort Configure"
4556                                 dflt=y
4557                                 ;;
4558                         esac
4559                         ;;
4560                 esac
4561         else
4562                 echo "The program compiled OK, but exited with status $?." >>try.msg
4563                 rp="You have a problem.  Shall I abort Configure"
4564                 dflt=y
4565         fi
4566 else
4567         echo "I can't compile the test program." >>try.msg
4568         rp="You have a BIG problem.  Shall I abort Configure"
4569         dflt=y
4570 fi
4571 case "$dflt" in
4572 y)
4573         $cat try.msg >&4
4574         case "$knowitall" in
4575         '')
4576                 echo "(The supplied flags or libraries might be incorrect.)"
4577                 ;;
4578         *) dflt=n;;
4579         esac
4580         echo " "
4581         . ./myread
4582         case "$ans" in
4583         n*|N*) ;;
4584         *)      echo "Ok.  Stopping Configure." >&4
4585                 exit 1
4586                 ;;
4587         esac
4588         ;;
4589 n) echo "OK, that should do.";;
4590 esac
4591 $rm -f try try.* core
4592
4593 : define a shorthand compile call
4594 compile='
4595 mc_file=$1;
4596 shift;
4597 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4598 : define a shorthand compile call for compilations that should be ok.
4599 compile_ok='
4600 mc_file=$1;
4601 shift;
4602 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4603
4604 : check for lengths of integral types
4605 echo " "
4606 case "$intsize" in
4607 '')
4608         echo "Checking to see how big your integers are..." >&4
4609         $cat >try.c <<'EOCP'
4610 #include <stdio.h>
4611 int main()
4612 {
4613         printf("intsize=%d;\n", (int)sizeof(int));
4614         printf("longsize=%d;\n", (int)sizeof(long));
4615         printf("shortsize=%d;\n", (int)sizeof(short));
4616         exit(0);
4617 }
4618 EOCP
4619         set try
4620         if eval $compile_ok && $run ./try > /dev/null; then
4621                 eval `$run ./try`
4622                 echo "Your integers are $intsize bytes long."
4623                 echo "Your long integers are $longsize bytes long."
4624                 echo "Your short integers are $shortsize bytes long."
4625         else
4626                 $cat >&4 <<EOM
4627 !
4628 Help! I can't compile and run the intsize test program: please enlighten me!
4629 (This is probably a misconfiguration in your system or libraries, and
4630 you really ought to fix it.  Still, I'll try anyway.)
4631 !
4632 EOM
4633                 dflt=4
4634                 rp="What is the size of an integer (in bytes)?"
4635                 . ./myread
4636                 intsize="$ans"
4637                 dflt=$intsize
4638                 rp="What is the size of a long integer (in bytes)?"
4639                 . ./myread
4640                 longsize="$ans"
4641                 dflt=2
4642                 rp="What is the size of a short integer (in bytes)?"
4643                 . ./myread
4644                 shortsize="$ans"
4645         fi
4646         ;;
4647 esac
4648 $rm -f try try.*
4649
4650 : check for void type
4651 echo " "
4652 echo "Checking to see how well your C compiler groks the void type..." >&4
4653 case "$voidflags" in
4654 '')
4655         $cat >try.c <<'EOCP'
4656 #if TRY & 1
4657 void sub() {
4658 #else
4659 sub() {
4660 #endif
4661         extern void moo();      /* function returning void */
4662         void (*goo)();          /* ptr to func returning void */
4663 #if TRY & 8
4664         void *hue;              /* generic ptr */
4665 #endif
4666 #if TRY & 2
4667         void (*foo[10])();
4668 #endif
4669
4670 #if TRY & 4
4671         if(goo == moo) {
4672                 exit(0);
4673         }
4674 #endif
4675         exit(0);
4676 }
4677 int main() { sub(); }
4678 EOCP
4679         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4680                 voidflags=$defvoidused
4681         echo "Good.  It appears to support void to the level $package wants.">&4
4682                 if $contains warning .out >/dev/null 2>&1; then
4683                         echo "However, you might get some warnings that look like this:"
4684                         $cat .out
4685                 fi
4686         else
4687 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4688                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4689                         echo "It supports 1..."
4690                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4691                                 echo "It also supports 2..."
4692                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4693                                         voidflags=7
4694                                         echo "And it supports 4 but not 8 definitely."
4695                                 else
4696                                         echo "It doesn't support 4..."
4697                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4698                                                 voidflags=11
4699                                                 echo "But it supports 8."
4700                                         else
4701                                                 voidflags=3
4702                                                 echo "Neither does it support 8."
4703                                         fi
4704                                 fi
4705                         else
4706                                 echo "It does not support 2..."
4707                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4708                                         voidflags=13
4709                                         echo "But it supports 4 and 8."
4710                                 else
4711                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4712                                                 voidflags=5
4713                                                 echo "And it supports 4 but has not heard about 8."
4714                                         else
4715                                                 echo "However it supports 8 but not 4."
4716                                         fi
4717                                 fi
4718                         fi
4719                 else
4720                         echo "There is no support at all for void."
4721                         voidflags=0
4722                 fi
4723         fi
4724 esac
4725 case "$voidflags" in
4726 "$defvoidused") ;;
4727 *)      $cat >&4 <<'EOM'
4728   Support flag bits are:
4729     1: basic void declarations.
4730     2: arrays of pointers to functions returning void.
4731     4: operations between pointers to and addresses of void functions.
4732     8: generic void pointers.
4733 EOM
4734         dflt="$voidflags";
4735         rp="Your void support flags add up to what?"
4736         . ./myread
4737         voidflags="$ans"
4738         ;;
4739 esac
4740 $rm -f try.* .out
4741
4742 : check for length of pointer
4743 echo " "
4744 case "$ptrsize" in
4745 '')
4746         echo "Checking to see how big your pointers are..." >&4
4747         if test "$voidflags" -gt 7; then
4748                 echo '#define VOID_PTR char *' > try.c
4749         else
4750                 echo '#define VOID_PTR void *' > try.c
4751         fi
4752         $cat >>try.c <<'EOCP'
4753 #include <stdio.h>
4754 int main()
4755 {
4756     printf("%d\n", (int)sizeof(VOID_PTR));
4757     exit(0);
4758 }
4759 EOCP
4760         set try
4761         if eval $compile_ok; then
4762                 ptrsize=`$run ./try`
4763                 echo "Your pointers are $ptrsize bytes long."
4764         else
4765                 dflt='4'
4766                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4767                 rp="What is the size of a pointer (in bytes)?"
4768                 . ./myread
4769                 ptrsize="$ans"
4770         fi
4771         ;;
4772 esac
4773 $rm -f try.c try
4774
4775 : check for long long
4776 echo " "
4777 echo "Checking to see if you have long long..." >&4
4778 echo 'int main() { long long x = 7; return 0; }' > try.c
4779 set try
4780 if eval $compile; then
4781         val="$define"
4782         echo "You have long long."
4783 else
4784         val="$undef"
4785         echo "You do not have long long."
4786 fi
4787 $rm try.*
4788 set d_longlong
4789 eval $setvar
4790
4791 : check for length of long long
4792 case "${d_longlong}${longlongsize}" in
4793 $define)
4794         echo " "
4795         echo "Checking to see how big your long longs are..." >&4
4796         $cat >try.c <<'EOCP'
4797 #include <stdio.h>
4798 int main()
4799 {
4800     printf("%d\n", (int)sizeof(long long));
4801     return(0);
4802 }
4803 EOCP
4804         set try
4805         if eval $compile_ok; then
4806                 longlongsize=`$run ./try`
4807                 echo "Your long longs are $longlongsize bytes long."
4808         else
4809                 dflt='8'
4810                 echo " "
4811                 echo "(I can't seem to compile the test program.  Guessing...)"
4812                 rp="What is the size of a long long (in bytes)?"
4813                 . ./myread
4814                 longlongsize="$ans"
4815         fi
4816         if $test "X$longsize" = "X$longlongsize"; then
4817                 echo "(That isn't any different from an ordinary long.)"
4818         fi      
4819         ;;
4820 esac
4821 $rm -f try.* try
4822
4823 : determine filename position in cpp output
4824 echo " "
4825 echo "Computing filename position in cpp output for #include directives..." >&4
4826 echo '#include <stdio.h>' > foo.c
4827 $cat >fieldn <<EOF
4828 $startsh
4829 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4830 $grep '^[       ]*#.*stdio\.h' | \
4831 while read cline; do
4832         pos=1
4833         set \$cline
4834         while $test \$# -gt 0; do
4835                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4836                         echo "\$pos"
4837                         exit 0
4838                 fi
4839                 shift
4840                 pos=\`expr \$pos + 1\`
4841         done
4842 done
4843 EOF
4844 chmod +x fieldn
4845 fieldn=`./fieldn`
4846 $rm -f foo.c fieldn
4847 case $fieldn in
4848 '') pos='???';;
4849 1) pos=first;;
4850 2) pos=second;;
4851 3) pos=third;;
4852 *) pos="${fieldn}th";;
4853 esac
4854 echo "Your cpp writes the filename in the $pos field of the line."
4855
4856 : locate header file
4857 $cat >findhdr <<EOF
4858 $startsh
4859 wanted=\$1
4860 name=''
4861 for usrincdir in $usrinc
4862 do
4863         if test -f \$usrincdir/\$wanted; then
4864                 echo "\$usrincdir/\$wanted"
4865                 exit 0
4866         fi
4867 done
4868 awkprg='{ print \$$fieldn }'
4869 echo "#include <\$wanted>" > foo\$\$.c
4870 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4871 $grep "^[       ]*#.*\$wanted" | \
4872 while read cline; do
4873         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4874         case "\$name" in
4875         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4876         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4877         *) exit 2;;
4878         esac;
4879 done;
4880 #
4881 # status = 0: grep returned 0 lines, case statement not executed
4882 # status = 1: headerfile found
4883 # status = 2: while loop executed, no headerfile found
4884 #
4885 status=\$?
4886 $rm -f foo\$\$.c;
4887 if test \$status -eq 1; then
4888         exit 0;
4889 fi
4890 exit 1
4891 EOF
4892 chmod +x findhdr
4893
4894 : define an alternate in-header-list? function
4895 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4896 cont=true; xxf="echo \"<\$1> found.\" >&4";
4897 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4898 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4899 esac;
4900 case $# in 4) instead=instead;; *) instead="at last";; esac;
4901 while $test "$cont"; do
4902         xxx=`./findhdr $1`
4903         var=$2; eval "was=\$$2";
4904         if $test "$xxx" && $test -r "$xxx";
4905         then eval $xxf;
4906         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4907                 cont="";
4908         else eval $xxnf;
4909         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4910         set $yyy; shift; shift; yyy=$@;
4911         case $# in 0) cont="";;
4912         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4913                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4914         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4915                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4916         esac;
4917 done;
4918 while $test "$yyy";
4919 do set $yyy; var=$2; eval "was=\$$2";
4920         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4921         set $yyy; shift; shift; yyy=$@;
4922 done'
4923
4924 : see if inttypes.h is available
4925 : we want a real compile instead of Inhdr because some systems
4926 : have an inttypes.h which includes non-existent headers
4927 echo " "
4928 $cat >try.c <<EOCP
4929 #include <inttypes.h>
4930 int main() {
4931         static int32_t foo32 = 0x12345678;
4932 }
4933 EOCP
4934 set try
4935 if eval $compile; then
4936         echo "<inttypes.h> found." >&4
4937         val="$define"
4938 else
4939         echo "<inttypes.h> NOT found." >&4
4940         val="$undef"
4941 fi
4942 $rm -f try.c try
4943 set i_inttypes
4944 eval $setvar
4945
4946 : check for int64_t
4947 echo " "
4948 echo "Checking to see if you have int64_t..." >&4
4949 $cat >try.c <<EOCP
4950 #include <sys/types.h>
4951 #$i_inttypes I_INTTYPES
4952 #ifdef I_INTTYPES
4953 #include <inttypes.h>
4954 #endif
4955 int main() { int64_t x = 7; }
4956 EOCP
4957 set try
4958 if eval $compile; then
4959         val="$define"
4960         echo "You have int64_t."
4961 else
4962         val="$undef"
4963         echo "You do not have int64_t."
4964 fi
4965 $rm -f try try.*
4966 set d_int64_t
4967 eval $setvar
4968
4969
4970 echo " "
4971 echo "Checking which 64-bit integer type we could use..." >&4
4972
4973 case "$intsize" in
4974 8) val=int
4975    set quadtype
4976    eval $setvar
4977    val='"unsigned int"'
4978    set uquadtype
4979    eval $setvar
4980    quadkind=1
4981    ;;
4982 *) case "$longsize" in
4983    8) val=long
4984       set quadtype
4985       eval $setvar
4986       val='"unsigned long"'
4987       set uquadtype
4988       eval $setvar
4989       quadkind=2
4990       ;;
4991    *) case "$d_longlong:$longlongsize" in
4992       define:8)
4993         val='"long long"'
4994         set quadtype
4995         eval $setvar
4996         val='"unsigned long long"'
4997         set uquadtype
4998         eval $setvar
4999         quadkind=3
5000         ;;
5001       *) case "$d_int64_t" in
5002          define)
5003            val=int64_t
5004            set quadtype
5005            eval $setvar
5006            val=uint64_t
5007            set uquadtype
5008            eval $setvar
5009            quadkind=4
5010            ;;
5011          esac
5012          ;;
5013       esac
5014       ;;
5015    esac
5016    ;;
5017 esac
5018
5019 case "$quadtype" in
5020 '')     echo "Alas, no 64-bit integer types in sight." >&4
5021         d_quad="$undef"
5022         ;;
5023 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5024         d_quad="$define"
5025         ;;
5026 esac
5027
5028
5029 case "$uselonglong" in
5030 "$define"|true|[yY]*)
5031         cat <<EOM >&4
5032
5033 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5034 EOM
5035         use64bitint="$define"
5036         ;;
5037 esac                          
5038 case "$use64bits" in
5039 "$define"|true|[yY]*)
5040         cat <<EOM >&4
5041
5042 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5043 EOM
5044         use64bitint="$define"
5045         ;;
5046 esac                          
5047 case "$use64bitints" in
5048 "$define"|true|[yY]*)
5049         cat <<EOM >&4
5050
5051 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5052 EOM
5053         use64bitint="$define"
5054         ;;
5055 esac                          
5056 case "$use64bitsint" in
5057 "$define"|true|[yY]*)
5058         cat <<EOM >&4
5059
5060 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5061 EOM
5062         use64bitint="$define"
5063         ;;
5064 esac                          
5065 case "$uselonglongs" in
5066 "$define"|true|[yY]*)
5067         cat <<EOM >&4
5068
5069 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5070 EOM
5071         use64bitint="$define"
5072         ;;
5073 esac                          
5074 case "$use64bitsall" in
5075 "$define"|true|[yY]*)
5076         cat <<EOM >&4
5077
5078 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5079 EOM
5080         use64bitall="$define"
5081         ;;
5082 esac                          
5083
5084 case "$ccflags" in
5085 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5086 esac
5087 case "$use64bitall" in
5088 "$define"|true|[yY]*) use64bitint="$define" ;;
5089 esac
5090
5091 case "$longsize" in
5092 8) cat <<EOM
5093
5094 You have natively 64-bit long integers.
5095 EOM
5096    val="$define"
5097    ;;
5098 *) case "$use64bitint" in
5099    "$define"|true|[yY]*) dflt='y';;
5100    *) dflt='n';;
5101    esac
5102    case "$d_quad" in
5103    "$define") ;;
5104    *) dflt='n' ;;
5105    esac
5106    cat <<EOM
5107
5108 Perl can be built to take advantage of 64-bit integer types
5109 on some systems.  To do so, Configure can be run with -Duse64bitint.
5110 Choosing this option will most probably introduce binary incompatibilities.
5111
5112 If this doesn't make any sense to you, just accept the default '$dflt'.
5113 (The default has been chosen based on your configuration.)
5114 EOM
5115    rp='Try to use 64-bit integers, if available?'
5116    . ./myread
5117    case "$ans" in
5118    [yY]*) val="$define" ;;
5119    *)     val="$undef"  ;;
5120    esac
5121    ;;
5122 esac
5123 set use64bitint
5124 eval $setvar
5125
5126 case "$use64bitall" in
5127 "$define"|true|[yY]*) dflt='y' ;;
5128 *) case "$longsize" in
5129    8) dflt='y' ;;
5130    *) dflt='n' ;;
5131    esac
5132    ;;
5133 esac    
5134 cat <<EOM
5135
5136 You may also choose to try maximal 64-bitness.  It means using as much
5137 64-bitness as possible on the platform.  This in turn means even more
5138 binary incompatibilities.  On the other hand, your platform may not
5139 have any more 64-bitness available than what you already have chosen.
5140
5141 If this doesn't make any sense to you, just accept the default '$dflt'.
5142 (The default has been chosen based on your configuration.)
5143 EOM
5144 rp='Try to use maximal 64-bit support, if available?'
5145 . ./myread
5146 case "$ans" in
5147 [yY]*) val="$define" ;;
5148 *)     val="$undef"  ;;
5149 esac
5150 set use64bitall
5151 eval $setvar
5152 case "$use64bitall" in
5153 "$define")
5154         case "$use64bitint" in
5155         "$undef")
5156                 cat <<EOM
5157
5158 Since you have chosen a maximally 64-bit build, I'm also turning on
5159 the use of 64-bit integers.
5160 EOM
5161                 use64bitint="$define" ;;
5162         esac
5163         ;;
5164 esac
5165
5166 case "$use64bitall" in
5167 "$define"|true|[yY]*)
5168         case "$ptrsize" in
5169         4)      cat <<EOM >&4
5170
5171 *** You have chosen a maximally 64-bit build, but your pointers
5172 *** are only 4 bytes wide, disabling maximal 64-bitness.
5173
5174 EOM
5175                 use64bitall="$undef"
5176                 case "$use64bitint" in
5177                 "$define"|true|[yY]*) ;;
5178                 *)      cat <<EOM >&4
5179
5180 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5181
5182 EOM
5183                         use64bitint="$define"
5184                         ;;
5185                 esac
5186                 ;;
5187         esac
5188         ;;
5189 esac
5190
5191 case "$use64bitint" in
5192 "$define"|true|[yY]*)
5193 : Look for a hint-file generated 'call-back-unit'.  If the
5194 : user has specified that a 64-bit perl is to be built,
5195 : we may need to set or change some other defaults.
5196         if $test -f use64bitint.cbu; then
5197                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5198                 . ./use64bitint.cbu
5199         fi
5200         case "$longsize" in
5201         4) case "$archname64" in
5202            '') archname64=64int ;;
5203            esac
5204            ;;
5205         esac
5206         ;;
5207 esac
5208
5209 case "$use64bitall" in
5210 "$define"|true|[yY]*)
5211 : Look for a hint-file generated 'call-back-unit'.  If the
5212 : user has specified that a maximally 64-bit perl is to be built,
5213 : we may need to set or change some other defaults.
5214         if $test -f use64bitall.cbu; then
5215                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5216                 . ./use64bitall.cbu
5217         fi
5218         case "$longsize" in
5219         4) case "$archname64" in
5220            ''|64int) archname64=64all ;;
5221            esac
5222            ;;
5223         esac
5224         ;;
5225 esac
5226
5227 echo " "
5228 echo "Checking for GNU C Library..." >&4
5229 cat >try.c <<EOM
5230 #include <stdio.h>
5231 int main()
5232 {
5233 #ifdef __GLIBC__
5234     exit(0);
5235 #else
5236     exit(1);
5237 #endif
5238 }
5239 EOM
5240 set try
5241 if eval $compile_ok && $run ./try; then
5242         val="$define"
5243         echo "You are using the GNU C Library"
5244 else
5245         val="$undef"
5246         echo "You are not using the GNU C Library"
5247 fi
5248 $rm -f try try.*
5249 set d_gnulibc
5250 eval $setvar
5251
5252 : see if nm is to be used to determine whether a symbol is defined or not
5253 case "$usenm" in
5254 '')
5255         dflt=''
5256         case "$d_gnulibc" in
5257         "$define")
5258                 echo " "
5259                 echo "nm probably won't work on the GNU C Library." >&4
5260                 dflt=n
5261                 ;;
5262         esac
5263         case "$dflt" in
5264         '') 
5265                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5266                         echo " "
5267                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5268                         echo "'nm' won't be sufficient on this sytem." >&4
5269                         dflt=n
5270                 fi
5271                 ;;
5272         esac
5273         case "$dflt" in
5274         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5275                 if $test $dflt -gt 20; then
5276                         dflt=y
5277                 else
5278                         dflt=n
5279                 fi
5280                 ;;
5281         esac
5282         ;;
5283 *)
5284         case "$usenm" in
5285         true|$define) dflt=y;;
5286         *) dflt=n;;
5287         esac
5288         ;;
5289 esac
5290 $cat <<EOM
5291
5292 I can use $nm to extract the symbols from your C libraries. This
5293 is a time consuming task which may generate huge output on the disk (up
5294 to 3 megabytes) but that should make the symbols extraction faster. The
5295 alternative is to skip the 'nm' extraction part and to compile a small
5296 test program instead to determine whether each symbol is present. If
5297 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5298 this may be the best solution.
5299
5300 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5301
5302 EOM
5303 rp="Shall I use $nm to extract C symbols from the libraries?"
5304 . ./myread
5305 case "$ans" in
5306 [Nn]*) usenm=false;;
5307 *) usenm=true;;
5308 esac
5309
5310 runnm=$usenm
5311 case "$reuseval" in
5312 true) runnm=false;;
5313 esac
5314
5315 : nm options which may be necessary
5316 case "$nm_opt" in
5317 '') if $test -f /mach_boot; then
5318                 nm_opt=''       # Mach
5319         elif $test -d /usr/ccs/lib; then
5320                 nm_opt='-p'     # Solaris (and SunOS?)
5321         elif $test -f /dgux; then
5322                 nm_opt='-p'     # DG-UX
5323         elif $test -f /lib64/rld; then
5324                 nm_opt='-p'     # 64-bit Irix
5325         else
5326                 nm_opt=''
5327         fi;;
5328 esac
5329
5330 : nm options which may be necessary for shared libraries but illegal
5331 : for archive libraries.  Thank you, Linux.
5332 case "$nm_so_opt" in
5333 '')     case "$myuname" in
5334         *linux*)
5335                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5336                         nm_so_opt='--dynamic'
5337                 fi
5338                 ;;
5339         esac
5340         ;;
5341 esac
5342
5343 case "$runnm" in
5344 true)
5345 : get list of predefined functions in a handy place
5346 echo " "
5347 case "$libc" in
5348 '') libc=unknown
5349         case "$libs" in
5350         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5351         esac
5352         ;;
5353 esac
5354 case "$libs" in
5355 '') ;;
5356 *)  for thislib in $libs; do
5357         case "$thislib" in
5358         -lc|-lc_s)
5359                 : Handle C library specially below.
5360                 ;;
5361         -l*)
5362                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5363                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5364                         :
5365                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5366                         :
5367                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5368                         :
5369                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5370                         :
5371                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5372                         :
5373                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5374                         :
5375                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5376                         :
5377                 else
5378                         try=''
5379                 fi
5380                 libnames="$libnames $try"
5381                 ;;
5382         *) libnames="$libnames $thislib" ;;
5383         esac
5384         done
5385         ;;
5386 esac
5387 xxx=normal
5388 case "$libc" in
5389 unknown)
5390         set /lib/libc.$so
5391         for xxx in $libpth; do
5392                 $test -r $1 || set $xxx/libc.$so
5393                 : The messy sed command sorts on library version numbers.
5394                 $test -r $1 || \
5395                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5396                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5397                                 h
5398                                 s/[0-9][0-9]*/0000&/g
5399                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5400                                 G
5401                                 s/\n/ /' | \
5402                          $sort | $sed -e 's/^.* //'`
5403                 eval set \$$#
5404         done
5405         $test -r $1 || set /usr/ccs/lib/libc.$so
5406         $test -r $1 || set /lib/libsys_s$_a
5407         ;;
5408 *)
5409         set blurfl
5410         ;;
5411 esac
5412 if $test -r "$1"; then
5413         echo "Your (shared) C library seems to be in $1."
5414         libc="$1"
5415 elif $test -r /lib/libc && $test -r /lib/clib; then
5416         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5417         xxx=apollo
5418         libc='/lib/clib /lib/libc'
5419         if $test -r /lib/syslib; then
5420                 echo "(Your math library is in /lib/syslib.)"
5421                 libc="$libc /lib/syslib"
5422         fi
5423 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5424         echo "Your C library seems to be in $libc, as you said before."
5425 elif $test -r $incpath/usr/lib/libc$_a; then
5426         libc=$incpath/usr/lib/libc$_a;
5427         echo "Your C library seems to be in $libc.  That's fine."
5428 elif $test -r /lib/libc$_a; then
5429         libc=/lib/libc$_a;
5430         echo "Your C library seems to be in $libc.  You're normal."
5431 else
5432         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5433                 :
5434         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5435                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5436         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5437                 :
5438         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5439                 :
5440         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5441                 :
5442         else
5443                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5444         fi
5445         if $test -r "$tans"; then
5446                 echo "Your C library seems to be in $tans, of all places."
5447                 libc=$tans
5448         else
5449                 libc='blurfl'
5450         fi
5451 fi
5452 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5453         dflt="$libc"
5454         cat <<EOM
5455
5456 If the guess above is wrong (which it might be if you're using a strange
5457 compiler, or your machine supports multiple models), you can override it here.
5458
5459 EOM
5460 else
5461         dflt=''
5462         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5463         cat >&4 <<EOM
5464 I can't seem to find your C library.  I've looked in the following places:
5465
5466 EOM
5467         $sed 's/^/      /' libpath
5468         cat <<EOM
5469
5470 None of these seems to contain your C library. I need to get its name...
5471
5472 EOM
5473 fi
5474 fn=f
5475 rp='Where is your C library?'
5476 . ./getfile
5477 libc="$ans"
5478
5479 echo " "
5480 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5481 set X `cat libnames`
5482 shift
5483 xxx=files
5484 case $# in 1) xxx=file; esac
5485 echo "Extracting names from the following $xxx for later perusal:" >&4
5486 echo " "
5487 $sed 's/^/      /' libnames >&4
5488 echo " "
5489 $echo $n "This may take a while...$c" >&4
5490
5491 for file in $*; do
5492         case $file in
5493         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5494         *) $nm $nm_opt $file 2>/dev/null;;
5495         esac
5496 done >libc.tmp
5497
5498 $echo $n ".$c"
5499 $grep fprintf libc.tmp > libc.ptf
5500 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5501 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5502 xxx='[ADTSIW]'
5503 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5504         eval $xscan;\
5505         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5506                 eval $xrun
5507 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5508         eval $xscan;\
5509         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5510                 eval $xrun
5511 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5512         eval $xscan;\
5513         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5514                 eval $xrun
5515 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5516         eval $xscan;\
5517         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5518                 eval $xrun
5519 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5520         eval $xscan;\
5521         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5522                 eval $xrun
5523 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5524         eval $xscan;\
5525         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5526                 eval $xrun
5527 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5528                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5529         eval $xscan;\
5530         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5531                 eval $xrun
5532 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5533         eval $xscan;\
5534         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5535                 eval $xrun
5536 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5537         eval $xscan;\
5538         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5539                 eval $xrun
5540 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5541         eval $xscan;\
5542         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5543                 eval $xrun
5544 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5545         eval $xscan;\
5546         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5547                 eval $xrun
5548 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5549         eval $xscan;\
5550         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5551                 eval $xrun
5552 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5553         eval $xscan;\
5554         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5555                 eval $xrun
5556 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5557         eval $xscan;\
5558         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5559                 eval $xrun
5560 else
5561         $nm -p $* 2>/dev/null >libc.tmp
5562         $grep fprintf libc.tmp > libc.ptf
5563         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5564                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5565         then
5566                 nm_opt='-p'
5567                 eval $xrun
5568         else
5569                 echo " "
5570                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5571                 com=''
5572                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5573                         for thisname in $libnames $libc; do
5574                                 $ar t $thisname >>libc.tmp
5575                         done
5576                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5577                         echo "Ok." >&4
5578                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5579                         # Repeat libc to extract forwarders to DLL entries too
5580                         for thisname in $libnames $libc; do
5581                                 $ar tv $thisname >>libc.tmp
5582                                 # Revision 50 of EMX has bug in $ar.
5583                                 # it will not extract forwarders to DLL entries
5584                                 # Use emximp which will extract exactly them.
5585                                 emximp -o tmp.imp $thisname \
5586                                     2>/dev/null && \
5587                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5588                                     < tmp.imp >>libc.tmp
5589                                 $rm tmp.imp
5590                         done
5591                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5592                         echo "Ok." >&4
5593                 else
5594                         echo "$ar didn't seem to work right." >&4
5595                         echo "Maybe this is a Cray...trying bld instead..." >&4
5596                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5597                         then
5598                                 for thisname in $libnames; do
5599                                         bld t $libnames | \
5600                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5601                                         $ar t $thisname >>libc.tmp
5602                                 done
5603                                 echo "Ok." >&4
5604                         else
5605                                 echo "That didn't work either.  Giving up." >&4
5606                                 exit 1
5607                         fi
5608                 fi
5609         fi
5610 fi
5611 nm_extract="$com"
5612 if $test -f /lib/syscalls.exp; then
5613         echo " "
5614         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5615         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5616 fi
5617 ;;
5618 esac
5619 $rm -f libnames libpath
5620
5621 : is a C symbol defined?
5622 csym='tlook=$1;
5623 case "$3" in
5624 -v) tf=libc.tmp; tc=""; tdc="";;
5625 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5626 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5627 esac;
5628 tx=yes;
5629 case "$reuseval-$4" in
5630 true-) ;;
5631 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5632 esac;
5633 case "$tx" in
5634 yes)
5635         case "$runnm" in
5636         true)
5637                 if $contains $tlook $tf >/dev/null 2>&1;
5638                 then tval=true;
5639                 else tval=false;
5640                 fi;;
5641         *)
5642                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5643                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5644                 then tval=true;
5645                 else tval=false;
5646                 fi;
5647                 $rm -f t t.c;;
5648         esac;;
5649 *)
5650         case "$tval" in
5651         $define) tval=true;;
5652         *) tval=false;;
5653         esac;;
5654 esac;
5655 eval "$2=$tval"'
5656
5657 : define an is-in-libc? function
5658 inlibc='echo " "; td=$define; tu=$undef;
5659 sym=$1; var=$2; eval "was=\$$2";
5660 tx=yes;
5661 case "$reuseval$was" in
5662 true) ;;
5663 true*) tx=no;;
5664 esac;
5665 case "$tx" in
5666 yes)
5667         set $sym tres -f;
5668         eval $csym;
5669         case "$tres" in
5670         true)
5671                 echo "$sym() found." >&4;
5672                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5673         *)
5674                 echo "$sym() NOT found." >&4;
5675                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5676         esac;;
5677 *)
5678         case "$was" in
5679         $define) echo "$sym() found." >&4;;
5680         *) echo "$sym() NOT found." >&4;;
5681         esac;;
5682 esac'
5683
5684 : see if sqrtl exists
5685 set sqrtl d_sqrtl
5686 eval $inlibc
5687
5688 case "$ccflags" in
5689 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5690 esac
5691
5692 case "$uselongdouble" in
5693 $define|true|[yY]*)     dflt='y';;
5694 *) dflt='n';;
5695 esac
5696 cat <<EOM
5697
5698 Perl can be built to take advantage of long doubles which
5699 (if available) may give more accuracy and range for floating point numbers.
5700
5701 If this doesn't make any sense to you, just accept the default '$dflt'.
5702 EOM
5703 rp='Try to use long doubles if available?'
5704 . ./myread
5705 case "$ans" in
5706 y|Y)    val="$define"   ;;
5707 *)      val="$undef"    ;;
5708 esac
5709 set uselongdouble
5710 eval $setvar
5711
5712 case "$uselongdouble" in
5713 true|[yY]*) uselongdouble="$define" ;;
5714 esac
5715
5716 case "$uselongdouble" in
5717 $define)
5718 : Look for a hint-file generated 'call-back-unit'.  If the
5719 : user has specified that long doubles should be used,
5720 : we may need to set or change some other defaults.
5721         if $test -f uselongdouble.cbu; then
5722                 echo "Your platform has some specific hints for long doubles, using them..."
5723                 . ./uselongdouble.cbu
5724         else
5725                 $cat <<EOM
5726 (Your platform doesn't have any specific hints for long doubles.)
5727 EOM
5728         fi
5729         ;;
5730 esac
5731
5732 case "$uselongdouble:$d_sqrtl" in
5733 $define:$undef)
5734                 $cat <<EOM >&4
5735
5736 *** You requested the use of long doubles but you do not seem to have
5737 *** the mathematic functions for long doubles.  I'm disabling the use
5738 *** of long doubles.
5739
5740 EOM
5741         uselongdouble=$undef
5742         ;;
5743 esac
5744
5745 : check for length of double
5746 echo " "
5747 case "$doublesize" in
5748 '')
5749         echo "Checking to see how big your double precision numbers are..." >&4
5750         $cat >try.c <<'EOCP'
5751 #include <stdio.h>
5752 int main()
5753 {
5754     printf("%d\n", (int)sizeof(double));
5755     exit(0);
5756 }
5757 EOCP
5758         set try
5759         if eval $compile_ok; then
5760                 doublesize=`$run ./try`
5761                 echo "Your double is $doublesize bytes long."
5762         else
5763                 dflt='8'
5764                 echo "(I can't seem to compile the test program.  Guessing...)"
5765                 rp="What is the size of a double precision number (in bytes)?"
5766                 . ./myread
5767                 doublesize="$ans"
5768         fi
5769         ;;
5770 esac
5771 $rm -f try.c try
5772
5773 : check for long doubles
5774 echo " "
5775 echo "Checking to see if you have long double..." >&4
5776 echo 'int main() { long double x = 7.0; }' > try.c
5777 set try
5778 if eval $compile; then
5779         val="$define"
5780         echo "You have long double."
5781 else
5782         val="$undef"
5783         echo "You do not have long double."
5784 fi
5785 $rm try.*
5786 set d_longdbl
5787 eval $setvar
5788
5789 : check for length of long double
5790 case "${d_longdbl}${longdblsize}" in
5791 $define)
5792         echo " "
5793         echo "Checking to see how big your long doubles are..." >&4
5794         $cat >try.c <<'EOCP'
5795 #include <stdio.h>
5796 int main()
5797 {
5798         printf("%d\n", sizeof(long double));
5799 }
5800 EOCP
5801         set try
5802         set try
5803         if eval $compile; then
5804                 longdblsize=`$run ./try`
5805                 echo "Your long doubles are $longdblsize bytes long."
5806         else
5807                 dflt='8'
5808                 echo " "
5809                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5810                 rp="What is the size of a long double (in bytes)?"
5811                 . ./myread
5812                 longdblsize="$ans"
5813         fi
5814         if $test "X$doublesize" = "X$longdblsize"; then
5815                 echo "(That isn't any different from an ordinary double.)"
5816         fi      
5817         ;;
5818 esac
5819 $rm -f try.* try
5820
5821 case "$useperlio" in
5822 $define|true|[yY]*|'')  dflt='y';;
5823 *) dflt='n';;
5824 esac
5825 cat <<EOM
5826
5827 Previous version of $package used the standard IO mechanisms as
5828 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5829 alternate IO mechanisms via the PerlIO abstraction layer, but the
5830 stdio mechanism is still available if needed.  The abstraction layer
5831 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5832 Using PerlIO with sfio may cause problems with some extension modules.
5833
5834 If this doesn't make any sense to you, just accept the default '$dflt'.
5835 EOM
5836 rp='Use the PerlIO abstraction layer?'
5837 . ./myread
5838 case "$ans" in
5839 y|Y) 
5840         val="$define"
5841         ;;
5842 *)      
5843         echo "Ok, doing things the stdio way."
5844         val="$undef"
5845         ;;
5846 esac
5847 set useperlio
5848 eval $setvar 
5849
5850 case "$usesocks" in
5851 $define|true|[yY]*)
5852         case "$useperlio" in
5853         $define|true|[yY]*) ;;
5854         *)      cat >&4 <<EOM
5855
5856 You are using the SOCKS proxy protocol library which means that you
5857 should also use the PerlIO layer.  You may be headed for trouble.
5858
5859 EOM
5860                 ;;
5861         esac
5862         ;;
5863 esac
5864
5865         
5866 : determine the architecture name
5867 echo " "
5868 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5869         tarch=`arch`"-$osname"
5870 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5871         if uname -m > tmparch 2>&1 ; then
5872                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5873                         -e 's/$/'"-$osname/" tmparch`
5874         else
5875                 tarch="$osname"
5876         fi
5877         $rm -f tmparch
5878 else
5879         tarch="$osname"
5880 fi
5881 case "$myarchname" in
5882 ''|"$tarch") ;;
5883 *)
5884         echo "(Your architecture name used to be $myarchname.)"
5885         archname=''
5886         ;;
5887 esac
5888 case "$targetarch" in
5889 '') ;;
5890 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5891 esac
5892 myarchname="$tarch"
5893 case "$archname" in
5894 '') dflt="$tarch";;
5895 *) dflt="$archname";;
5896 esac
5897 rp='What is your architecture name'
5898 . ./myread
5899 archname="$ans"
5900 case "$usethreads" in
5901 $define)
5902         echo "Threads selected." >&4
5903         case "$archname" in
5904         *-thread*) echo "...and architecture name already has -thread." >&4
5905                 ;;
5906         *)      archname="$archname-thread"
5907                 echo "...setting architecture name to $archname." >&4
5908                 ;;
5909         esac
5910         ;;
5911 esac
5912 case "$usemultiplicity" in
5913 $define)
5914         echo "Multiplicity selected." >&4
5915         case "$archname" in
5916         *-multi*) echo "...and architecture name already has -multi." >&4
5917                 ;;
5918         *)      archname="$archname-multi"
5919                 echo "...setting architecture name to $archname." >&4
5920                 ;;
5921         esac
5922         ;;
5923 esac
5924 case "$use64bitint$use64bitall" in
5925 *"$define"*)
5926         case "$archname64" in
5927         '')
5928                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5929                 ;;
5930         *)
5931                 case "$use64bitint" in
5932                 "$define") echo "64 bit integers selected." >&4 ;;
5933                 esac
5934                 case "$use64bitall" in
5935                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5936                 esac
5937                 case "$archname" in
5938                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5939                         ;;
5940                 *)      archname="$archname-$archname64"
5941                         echo "...setting architecture name to $archname." >&4
5942                         ;;
5943                 esac
5944                 ;;
5945         esac
5946 esac
5947 case "$uselongdouble" in
5948 $define)
5949         echo "Long doubles selected." >&4
5950         case "$longdblsize" in
5951         $doublesize)
5952                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
5953                 ;;
5954         *)
5955                 case "$archname" in
5956                 *-ld*) echo "...and architecture name already has -ld." >&4
5957                         ;;
5958                 *)      archname="$archname-ld"
5959                         echo "...setting architecture name to $archname." >&4
5960                         ;;
5961                 esac
5962                 ;;
5963         esac
5964         ;;
5965 esac
5966 case "$useperlio" in
5967 $define)
5968         echo "Perlio selected." >&4
5969         ;;
5970 *)
5971         echo "Perlio not selected, using stdio." >&4
5972         case "$archname" in
5973         *-stdio*) echo "...and architecture name already has -stdio." >&4
5974                 ;;
5975         *)      archname="$archname-stdio"
5976                 echo "...setting architecture name to $archname." >&4
5977                 ;;
5978         esac
5979         ;;
5980 esac
5981
5982 : determine root of directory hierarchy where package will be installed.
5983 case "$prefix" in
5984 '')
5985         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5986         ;;
5987 *)
5988         dflt="$prefix"
5989         ;;
5990 esac
5991 $cat <<EOM
5992
5993 By default, $package will be installed in $dflt/bin, manual pages
5994 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5995 installation directories. Typically this is something like /usr/local.
5996 If you wish to have binaries under /usr/bin but other parts of the
5997 installation under /usr/local, that's ok: you will be prompted
5998 separately for each of the installation directories, the prefix being
5999 only used to set the defaults.
6000
6001 EOM
6002 fn=d~
6003 rp='Installation prefix to use?'
6004 . ./getfile
6005 oldprefix=''
6006 case "$prefix" in
6007 '') ;;
6008 *)
6009         case "$ans" in
6010         "$prefix") ;;
6011         *) oldprefix="$prefix";;
6012         esac
6013         ;;
6014 esac
6015 prefix="$ans"
6016 prefixexp="$ansexp"
6017
6018 case "$afsroot" in
6019 '')     afsroot=/afs ;;
6020 *)      afsroot=$afsroot ;;
6021 esac
6022
6023 : is AFS running?
6024 echo " "
6025 case "$afs" in
6026 $define|true)   afs=true ;;
6027 $undef|false)   afs=false ;;
6028 *)      if test -d $afsroot; then
6029                 afs=true
6030         else
6031                 afs=false
6032         fi
6033         ;;
6034 esac
6035 if $afs; then
6036         echo "AFS may be running... I'll be extra cautious then..." >&4
6037 else
6038         echo "AFS does not seem to be running..." >&4
6039 fi
6040
6041 : determine installation prefix for where package is to be installed.
6042 if $afs; then 
6043 $cat <<EOM
6044
6045 Since you are running AFS, I need to distinguish the directory in which
6046 files will reside from the directory in which they are installed (and from
6047 which they are presumably copied to the former directory by occult means).
6048
6049 EOM
6050         case "$installprefix" in
6051         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6052         *) dflt="$installprefix";;
6053         esac
6054 else
6055 $cat <<EOM
6056
6057 In some special cases, particularly when building $package for distribution,
6058 it is convenient to distinguish between the directory in which files should 
6059 be installed from the directory ($prefix) in which they 
6060 will eventually reside.  For most users, these two directories are the same.
6061
6062 EOM
6063         case "$installprefix" in
6064         '') dflt=$prefix ;;
6065         *) dflt=$installprefix;;
6066         esac
6067 fi
6068 fn=d~
6069 rp='What installation prefix should I use for installing files?'
6070 . ./getfile
6071 installprefix="$ans"
6072 installprefixexp="$ansexp"
6073
6074 : set the prefixit variable, to compute a suitable default value
6075 prefixit='case "$3" in
6076 ""|none)
6077         case "$oldprefix" in
6078         "") eval "$1=\"\$$2\"";;
6079         *)
6080                 case "$3" in
6081                 "") eval "$1=";;
6082                 none)
6083                         eval "tp=\"\$$2\"";
6084                         case "$tp" in
6085                         ""|" ") eval "$1=\"\$$2\"";;
6086                         *) eval "$1=";;
6087                         esac;;
6088                 esac;;
6089         esac;;
6090 *)
6091         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6092         case "$tp" in
6093         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6094         /*-$oldprefix/*|\~*-$oldprefix/*)
6095                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6096         *) eval "$1=\"\$$2\"";;
6097         esac;;
6098 esac'
6099
6100 : get the patchlevel
6101 echo " "
6102 echo "Getting the current patchlevel..." >&4
6103 if $test -r $rsrc/patchlevel.h;then
6104         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6105         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6106         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6107         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6108         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6109         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6110        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6111 else
6112         revision=0
6113         patchlevel=0
6114         subversion=0
6115         api_revision=0
6116         api_version=0
6117         api_subversion=0
6118         perl_patchlevel=0
6119         $echo "(You do not have patchlevel.h.  Eek.)"
6120 fi
6121 if $test -r $rsrc/.patch ; then  
6122         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6123                 perl_patchlevel=`cat $rsrc/.patch`
6124         fi
6125 fi
6126 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6127 version_patchlevel_string="version $patchlevel subversion $subversion"
6128 case "$perl_patchlevel" in
6129 0|'') ;;
6130 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6131 esac
6132
6133 $echo "(You have $package $version_patchlevel_string.)"
6134
6135 case "$osname" in
6136 dos|vms)
6137         : XXX Should be a Configure test for double-dots in filenames.
6138         version=`echo $revision $patchlevel $subversion | \
6139                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6140         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6141                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6142         ;;
6143 *)
6144         version=`echo $revision $patchlevel $subversion | \
6145                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6146         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6147                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6148         ;;
6149 esac
6150 : Special case the 5.005_xx maintenance series, which used 5.005
6151 : without any subversion label as a subdirectory in $sitelib
6152 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6153         api_versionstring='5.005'
6154 fi
6155
6156 : determine installation style
6157 : For now, try to deduce it from prefix unless it is already set.
6158 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6159 case "$installstyle" in
6160 '')     case "$prefix" in
6161                 *perl*) dflt='lib';;
6162                 *) dflt='lib/perl5' ;;
6163         esac
6164         ;;
6165 *)      dflt="$installstyle" ;;
6166 esac
6167 : Probably not worth prompting for this since we prompt for all
6168 : the directories individually, and the prompt would be too long and
6169 : confusing anyway.
6170 installstyle=$dflt
6171
6172 : determine where private library files go
6173 : Usual default is /usr/local/lib/perl5/$version.
6174 : Also allow things like /opt/perl/lib/$version, since 
6175 : /opt/perl/lib/perl5... would be redundant.
6176 : The default "style" setting is made in installstyle.U
6177 case "$installstyle" in
6178 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6179 *)       set dflt privlib lib/$version ;;
6180 esac
6181 eval $prefixit
6182 $cat <<EOM
6183
6184 There are some auxiliary files for $package that need to be put into a
6185 private library directory that is accessible by everyone.
6186
6187 EOM
6188 fn=d~+
6189 rp='Pathname where the private library files will reside?'
6190 . ./getfile
6191 privlib="$ans"
6192 privlibexp="$ansexp"
6193 : Change installation prefix, if necessary.
6194 if $test X"$prefix" != X"$installprefix"; then
6195         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6196 else
6197         installprivlib="$privlibexp"
6198 fi
6199
6200 : set the prefixup variable, to restore leading tilda escape
6201 prefixup='case "$prefixexp" in
6202 "$prefix") ;;
6203 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6204 esac'
6205
6206 : determine where public architecture dependent libraries go
6207 set archlib archlib
6208 eval $prefixit
6209 : privlib default is /usr/local/lib/$package/$version
6210 : archlib default is /usr/local/lib/$package/$version/$archname
6211 : privlib may have an optional trailing /share.
6212 tdflt=`echo $privlib | $sed 's,/share$,,'`
6213 tdflt=$tdflt/$archname
6214 case "$archlib" in
6215 '')     dflt=$tdflt
6216         ;;
6217 *)      dflt="$archlib"
6218     ;;
6219 esac
6220 $cat <<EOM
6221
6222 $spackage contains architecture-dependent library files.  If you are
6223 sharing libraries in a heterogeneous environment, you might store
6224 these files in a separate location.  Otherwise, you can just include
6225 them with the rest of the public library files.
6226
6227 EOM
6228 fn=d+~
6229 rp='Where do you want to put the public architecture-dependent libraries?'
6230 . ./getfile
6231 archlib="$ans"
6232 archlibexp="$ansexp"
6233 if $test X"$archlib" = X"$privlib"; then
6234         d_archlib="$undef"
6235 else
6236         d_archlib="$define"
6237 fi
6238 : Change installation prefix, if necessary.
6239 if $test X"$prefix" != X"$installprefix"; then
6240         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6241 else
6242         installarchlib="$archlibexp"
6243 fi
6244
6245
6246 : Binary compatibility with 5.005 is not possible for builds
6247 : with advanced features
6248 case "$usethreads$usemultiplicity" in
6249 *define*)
6250         bincompat5005="$undef"
6251         d_bincompat5005="$undef"
6252         ;;
6253 *)      $cat <<EOM
6254
6255 This version of Perl can be compiled for binary compatibility with 5.005.
6256 If you decide to do so, you will be able to continue using most of the
6257 extensions that were compiled for Perl 5.005.
6258
6259 EOM
6260         case "$bincompat5005$d_bincompat5005" in
6261         *"$undef"*) dflt=n ;;
6262         *) dflt=y ;;
6263         esac
6264         rp='Binary compatibility with Perl 5.005?'
6265         . ./myread
6266         case "$ans" in
6267         y*) val="$define" ;;
6268         *)  val="$undef" ;;
6269         esac
6270         set d_bincompat5005
6271         eval $setvar
6272         case "$d_bincompat5005" in
6273         "$define")
6274                 bincompat5005="$define"
6275                 ;;
6276         *)      bincompat5005="$undef"
6277                 d_bincompat5005="$undef"
6278                 ;;
6279         esac
6280         ;;
6281 esac
6282
6283
6284 : see if setuid scripts can be secure
6285 $cat <<EOM
6286
6287 Some kernels have a bug that prevents setuid #! scripts from being
6288 secure.  Some sites have disabled setuid #! scripts because of this.
6289
6290 First let's decide if your kernel supports secure setuid #! scripts.
6291 (If setuid #! scripts would be secure but have been disabled anyway,
6292 don't say that they are secure if asked.)
6293
6294 EOM
6295
6296 val="$undef"
6297 if $test -d /dev/fd; then
6298         echo "#!$ls" >reflect
6299         chmod +x,u+s reflect
6300         ./reflect >flect 2>&1
6301         if $contains "/dev/fd" flect >/dev/null; then
6302                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6303                 val="$define"
6304         else
6305                 $cat <<EOM
6306 If you are not sure if they are secure, I can check but I'll need a
6307 username and password different from the one you are using right now.
6308 If you don't have such a username or don't want me to test, simply
6309 enter 'none'.
6310
6311 EOM
6312                 rp='Other username to test security of setuid scripts with?'
6313                 dflt='none'
6314                 . ./myread
6315                 case "$ans" in
6316                 n|none)
6317                         case "$d_suidsafe" in
6318                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6319                                 dflt=n;;
6320                         "$undef")
6321                                 echo "Well, the $hint value is *not* secure." >&4
6322                                 dflt=n;;
6323                         *)      echo "Well, the $hint value *is* secure." >&4
6324                                 dflt=y;;
6325                         esac
6326                         ;;
6327                 *)
6328                         $rm -f reflect flect
6329                         echo "#!$ls" >reflect
6330                         chmod +x,u+s reflect
6331                         echo >flect
6332                         chmod a+w flect
6333                         echo '"su" will (probably) prompt you for '"$ans's password."
6334                         su $ans -c './reflect >flect'
6335                         if $contains "/dev/fd" flect >/dev/null; then
6336                                 echo "Okay, it looks like setuid scripts are secure." >&4
6337                                 dflt=y
6338                         else
6339                                 echo "I don't think setuid scripts are secure." >&4
6340                                 dflt=n
6341                         fi
6342                         ;;
6343                 esac
6344                 rp='Does your kernel have *secure* setuid scripts?'
6345                 . ./myread
6346                 case "$ans" in
6347                 [yY]*)  val="$define";;
6348                 *)      val="$undef";;
6349                 esac
6350         fi
6351 else
6352         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6353         echo "(That's for file descriptors, not floppy disks.)"
6354         val="$undef"
6355 fi
6356 set d_suidsafe
6357 eval $setvar
6358
6359 $rm -f reflect flect
6360
6361 : now see if they want to do setuid emulation
6362 echo " "
6363 val="$undef"
6364 case "$d_suidsafe" in
6365 "$define")
6366         val="$undef"
6367         echo "No need to emulate SUID scripts since they are secure here." >& 4
6368         ;;
6369 *)
6370         $cat <<EOM
6371 Some systems have disabled setuid scripts, especially systems where
6372 setuid scripts cannot be secure.  On systems where setuid scripts have
6373 been disabled, the setuid/setgid bits on scripts are currently
6374 useless.  It is possible for $package to detect those bits and emulate
6375 setuid/setgid in a secure fashion.  This emulation will only work if
6376 setuid scripts have been disabled in your kernel.
6377
6378 EOM
6379         case "$d_dosuid" in
6380         "$define") dflt=y ;;
6381         *) dflt=n ;;
6382         esac
6383         rp="Do you want to do setuid/setgid emulation?"
6384         . ./myread
6385         case "$ans" in
6386         [yY]*)  val="$define";;
6387         *)      val="$undef";;
6388         esac
6389         ;;
6390 esac
6391 set d_dosuid
6392 eval $setvar
6393
6394 : see if this is a malloc.h system
6395 set malloc.h i_malloc
6396 eval $inhdr
6397
6398 : see if stdlib is available
6399 set stdlib.h i_stdlib
6400 eval $inhdr
6401
6402 : determine which malloc to compile in
6403 echo " "
6404 case "$usemymalloc" in
6405 [yY]*|true|$define)     dflt='y' ;;
6406 [nN]*|false|$undef)     dflt='n' ;;
6407 *)      case "$ptrsize" in
6408         4) dflt='y' ;;
6409         *) dflt='n' ;;
6410         esac
6411         ;;
6412 esac
6413 rp="Do you wish to attempt to use the malloc that comes with $package?"
6414 . ./myread
6415 usemymalloc="$ans"
6416 case "$ans" in
6417 y*|true)
6418         usemymalloc='y'
6419         mallocsrc='malloc.c'
6420         mallocobj="malloc$_o"
6421         d_mymalloc="$define"
6422         case "$libs" in
6423         *-lmalloc*)
6424                 : Remove malloc from list of libraries to use
6425                 echo "Removing unneeded -lmalloc from library list" >&4
6426                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6427                 shift
6428                 libs="$*"
6429                 echo "libs = $libs" >&4
6430                 ;;
6431         esac
6432         ;;
6433 *)
6434         usemymalloc='n'
6435         mallocsrc=''
6436         mallocobj=''
6437         d_mymalloc="$undef"
6438         ;;
6439 esac
6440
6441 : compute the return types of malloc and free
6442 echo " "
6443 $cat >malloc.c <<END
6444 #$i_malloc I_MALLOC
6445 #$i_stdlib I_STDLIB
6446 #include <stdio.h>
6447 #include <sys/types.h>
6448 #ifdef I_MALLOC
6449 #include <malloc.h>
6450 #endif
6451 #ifdef I_STDLIB
6452 #include <stdlib.h>
6453 #endif
6454 #ifdef TRY_MALLOC
6455 void *malloc();
6456 #endif
6457 #ifdef TRY_FREE
6458 void free();
6459 #endif
6460 END
6461 case "$malloctype" in
6462 '')
6463         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6464                 malloctype='void *'
6465         else
6466                 malloctype='char *'
6467         fi
6468         ;;
6469 esac
6470 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6471
6472 case "$freetype" in
6473 '')
6474         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6475                 freetype='void'
6476         else
6477                 freetype='int'
6478         fi
6479         ;;
6480 esac
6481 echo "Your system uses $freetype free(), it would seem." >&4
6482 $rm -f malloc.[co]
6483 $cat <<EOM
6484
6485 After $package is installed, you may wish to install various
6486 add-on modules and utilities.  Typically, these add-ons will
6487 be installed under $prefix with the rest
6488 of this package.  However, you may wish to install such add-ons
6489 elsewhere under a different prefix.
6490
6491 If you do not wish to put everything under a single prefix, that's
6492 ok.  You will be prompted for the individual locations; this siteprefix
6493 is only used to suggest the defaults.
6494
6495 The default should be fine for most people.
6496
6497 EOM
6498 fn=d~+
6499 rp='Installation prefix to use for add-on modules and utilities?'
6500 : XXX Here might be another good place for an installstyle setting.
6501 case "$siteprefix" in
6502 '') dflt=$prefix ;;
6503 *)  dflt=$siteprefix ;;
6504 esac
6505 . ./getfile
6506 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6507 oldsiteprefix=''
6508 case "$siteprefix" in
6509 '') ;;
6510 *)      case "$ans" in
6511         "$prefix") ;;
6512         *) oldsiteprefix="$prefix";;
6513         esac
6514         ;;
6515 esac
6516 siteprefix="$ans"
6517 siteprefixexp="$ansexp"
6518
6519 : determine where site specific libraries go.
6520 : Usual default is /usr/local/lib/perl5/site_perl/$version
6521 : The default "style" setting is made in installstyle.U
6522 : XXX No longer works with Prefixit stuff.
6523 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6524 case "$sitelib" in
6525 '') case "$installstyle" in
6526         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6527         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6528         esac
6529         ;;
6530 *)      dflt="$sitelib"
6531         ;;
6532 esac
6533 $cat <<EOM
6534
6535 The installation process will create a directory for
6536 site-specific extensions and modules.  Most users find it convenient
6537 to place all site-specific files in this directory rather than in the
6538 main distribution directory.
6539
6540 EOM
6541 fn=d~+
6542 rp='Pathname for the site-specific library files?'
6543 . ./getfile
6544 sitelib="$ans"
6545 sitelibexp="$ansexp"
6546 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6547 : Change installation prefix, if necessary.
6548 if $test X"$prefix" != X"$installprefix"; then
6549         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6550 else
6551         installsitelib="$sitelibexp"
6552 fi
6553
6554 : determine where site specific architecture-dependent libraries go.
6555 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6556 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6557 : sitelib may have an optional trailing /share.
6558 case "$sitearch" in
6559 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6560         dflt="$dflt/$archname"
6561         ;;
6562 *)      dflt="$sitearch"
6563         ;;
6564 esac
6565 set sitearch sitearch none
6566 eval $prefixit
6567 $cat <<EOM
6568
6569 The installation process will also create a directory for
6570 architecture-dependent site-specific extensions and modules.
6571
6572 EOM
6573 fn=d~+
6574 rp='Pathname for the site-specific architecture-dependent library files?'
6575 . ./getfile
6576 sitearch="$ans"
6577 sitearchexp="$ansexp"
6578 : Change installation prefix, if necessary.
6579 if $test X"$prefix" != X"$installprefix"; then
6580         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6581 else
6582         installsitearch="$sitearchexp"
6583 fi
6584
6585 $cat <<EOM
6586
6587 The installation process will also create a directory for
6588 vendor-supplied add-ons.  Vendors who supply perl with their system
6589 may find it convenient to place all vendor-supplied files in this
6590 directory rather than in the main distribution directory.  This will
6591 ease upgrades between binary-compatible maintenance versions of perl.
6592
6593 Of course you may also use these directories in whatever way you see
6594 fit.  For example, you might use them to access modules shared over a
6595 company-wide network.
6596
6597 The default answer should be fine for most people.
6598 This causes further questions about vendor add-ons to be skipped
6599 and no vendor-specific directories will be configured for perl.
6600
6601 EOM
6602 rp='Do you want to configure vendor-specific add-on directories?'
6603 case "$usevendorprefix" in
6604 define|true|[yY]*) dflt=y ;;
6605 *)      : User may have set vendorprefix directly on Configure command line.
6606         case "$vendorprefix" in
6607         ''|' ') dflt=n ;;
6608         *)      dflt=y ;;
6609         esac
6610         ;;
6611 esac
6612 . ./myread
6613 case "$ans" in
6614 [yY]*)  fn=d~+
6615         rp='Installation prefix to use for vendor-supplied add-ons?'
6616         case "$vendorprefix" in
6617         '') dflt='' ;;
6618         *)  dflt=$vendorprefix ;;
6619         esac
6620         . ./getfile
6621         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6622         oldvendorprefix=''
6623         case "$vendorprefix" in
6624         '') ;;
6625         *)      case "$ans" in
6626                 "$prefix") ;;
6627                 *) oldvendorprefix="$prefix";;
6628                 esac
6629                 ;;
6630         esac
6631         usevendorprefix="$define"
6632         vendorprefix="$ans"
6633         vendorprefixexp="$ansexp"
6634         ;;
6635 *)      usevendorprefix="$undef"
6636         vendorprefix=''
6637         vendorprefixexp=''
6638         ;;
6639 esac
6640
6641 case "$vendorprefix" in
6642 '')     d_vendorlib="$undef"
6643         vendorlib=''
6644         vendorlibexp=''
6645         ;;
6646 *)      d_vendorlib="$define"
6647         : determine where vendor-supplied modules go.
6648         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6649         case "$vendorlib" in
6650         '')
6651                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6652                 case "$installstyle" in
6653                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6654                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6655                 esac
6656                 ;;
6657         *)      dflt="$vendorlib"
6658                 ;;
6659         esac
6660         fn=d~+
6661         rp='Pathname for the vendor-supplied library files?'
6662         . ./getfile
6663         vendorlib="$ans"
6664         vendorlibexp="$ansexp"
6665         ;;
6666 esac
6667 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6668 : Change installation prefix, if necessary.
6669 if $test X"$prefix" != X"$installprefix"; then
6670         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6671 else
6672         installvendorlib="$vendorlibexp"
6673 fi
6674
6675 case "$vendorprefix" in
6676 '')     d_vendorarch="$undef"
6677         vendorarch=''
6678         vendorarchexp=''
6679         ;;
6680 *)      d_vendorarch="$define"
6681         : determine where vendor-supplied architecture-dependent libraries go.
6682         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6683         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6684         : vendorlib may have an optional trailing /share.
6685         case "$vendorarch" in
6686         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6687                 dflt="$dflt/$archname"
6688                 ;;
6689         *)      dflt="$vendorarch" ;;
6690         esac
6691         fn=d~+
6692         rp='Pathname for vendor-supplied architecture-dependent files?'
6693         . ./getfile
6694         vendorarch="$ans"
6695         vendorarchexp="$ansexp"
6696         ;;
6697 esac
6698 : Change installation prefix, if necessary.
6699 if $test X"$prefix" != X"$installprefix"; then
6700         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6701 else
6702         installvendorarch="$vendorarchexp"
6703 fi
6704
6705 : Final catch-all directories to search
6706 $cat <<EOM
6707
6708 Lastly, you can have perl look in other directories for extensions and
6709 modules in addition to those already specified.
6710 These directories will be searched after 
6711         $sitearch 
6712         $sitelib 
6713 EOM
6714 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6715 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6716 echo ' '
6717 case "$otherlibdirs" in
6718 ''|' ') dflt='none' ;;
6719 *)      dflt="$otherlibdirs" ;;
6720 esac
6721 $cat <<EOM
6722 Enter a colon-separated set of extra paths to include in perl's @INC
6723 search path, or enter 'none' for no extra paths.
6724
6725 EOM
6726
6727 rp='Colon-separated list of additional directories for perl to search?'
6728 . ./myread
6729 case "$ans" in
6730 ' '|''|none)    otherlibdirs=' ' ;;     
6731 *)      otherlibdirs="$ans" ;;
6732 esac
6733 case "$otherlibdirs" in
6734 ' ') val=$undef ;;
6735 *)      val=$define ;;
6736 esac
6737 set d_perl_otherlibdirs
6738 eval $setvar
6739
6740 : Cruising for prototypes
6741 echo " "
6742 echo "Checking out function prototypes..." >&4
6743 $cat >prototype.c <<'EOCP'
6744 int main(int argc, char *argv[]) {
6745         exit(0);}
6746 EOCP
6747 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6748         echo "Your C compiler appears to support function prototypes."
6749         val="$define"
6750 else
6751         echo "Your C compiler doesn't seem to understand function prototypes."
6752         val="$undef"
6753 fi
6754 set prototype
6755 eval $setvar
6756 $rm -f prototype*
6757
6758 case "$prototype" in
6759 "$define") ;;
6760 *)      ansi2knr='ansi2knr'
6761         echo " "
6762         cat <<EOM >&4
6763
6764 $me:  FATAL ERROR:
6765 This version of $package can only be compiled by a compiler that 
6766 understands function prototypes.  Unfortunately, your C compiler 
6767         $cc $ccflags
6768 doesn't seem to understand them.  Sorry about that.
6769
6770 If GNU cc is available for your system, perhaps you could try that instead.  
6771
6772 Eventually, we hope to support building Perl with pre-ANSI compilers.
6773 If you would like to help in that effort, please contact <perlbug@perl.org>.
6774
6775 Aborting Configure now.
6776 EOM
6777         exit 2
6778         ;;
6779 esac
6780
6781 : determine where public executables go
6782 echo " "
6783 set dflt bin bin
6784 eval $prefixit
6785 fn=d~
6786 rp='Pathname where the public executables will reside?'
6787 . ./getfile
6788 if $test "X$ansexp" != "X$binexp"; then
6789         installbin=''
6790 fi
6791 bin="$ans"
6792 binexp="$ansexp"
6793 : Change installation prefix, if necessary.
6794 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6795 if $test X"$prefix" != X"$installprefix"; then
6796         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6797 else
6798         installbin="$binexp"
6799 fi
6800
6801 echo " "
6802 case "$extras" in
6803 '') dflt='n';;
6804 *) dflt='y';;
6805 esac
6806 cat <<EOM
6807 Perl can be built with extra modules or bundles of modules which
6808 will be fetched from the CPAN and installed alongside Perl.
6809
6810 Notice that you will need access to the CPAN; either via the Internet,
6811 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6812 be asked later to configure the CPAN.pm module which will in turn do
6813 the installation of the rest of the extra modules or bundles.)
6814
6815 Notice also that if the modules require any external software such as
6816 libraries and headers (the libz library and the zlib.h header for the
6817 Compress::Zlib module, for example) you MUST have any such software
6818 already installed, this configuration process will NOT install such
6819 things for you.
6820
6821 If this doesn't make any sense to you, just accept the default '$dflt'.
6822 EOM
6823 rp='Install any extra modules (y or n)?'
6824 . ./myread
6825 case "$ans" in
6826 y|Y)
6827         cat <<EOM
6828
6829 Please list any extra modules or bundles to be installed from CPAN,
6830 with spaces between the names.  The names can be in any format the
6831 'install' command of CPAN.pm will understand.  (Answer 'none',
6832 without the quotes, to install no extra modules or bundles.)
6833 EOM
6834         rp='Extras?'
6835         dflt="$extras"
6836         . ./myread
6837         extras="$ans"
6838 esac
6839 case "$extras" in
6840 ''|'none')
6841         val=''
6842         $rm -f ../extras.lst
6843         ;;
6844 *)      echo "(Saving the list of extras for later...)"
6845         echo "$extras" > ../extras.lst
6846         val="'$extras'"
6847         ;;
6848 esac
6849 set extras
6850 eval $setvar
6851 echo " "
6852
6853 : Find perl5.005 or later.
6854 echo "Looking for a previously installed perl5.005 or later... "
6855 case "$perl5" in
6856 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6857                 : Check if this perl is recent and can load a simple module
6858                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6859                         perl5=$tdir/perl
6860                         break;
6861                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6862                         perl5=$tdir/perl5
6863                         break;
6864                 fi
6865         done
6866         ;;
6867 *)      perl5="$perl5"
6868         ;;
6869 esac
6870 case "$perl5" in
6871 '')     echo "None found.  That's ok.";;
6872 *)      echo "Using $perl5." ;;
6873 esac
6874
6875 : Determine list of previous versions to include in @INC
6876 $cat > getverlist <<EOPL
6877 #!$perl5 -w
6878 use File::Basename;
6879 \$api_versionstring = "$api_versionstring";
6880 \$version = "$version";
6881 \$stem = "$sitelib_stem";
6882 \$archname = "$archname";
6883 EOPL
6884         $cat >> getverlist <<'EOPL'
6885 # Can't have leading @ because metaconfig interprets it as a command!
6886 ;@inc_version_list=();
6887 # XXX Redo to do opendir/readdir? 
6888 if (-d $stem) {
6889     chdir($stem);
6890     ;@candidates = glob("5.*");
6891 }
6892 else {
6893     ;@candidates = ();
6894 }
6895
6896 # XXX ToDo:  These comparisons must be reworked when two-digit
6897 # subversions come along, so that 5.7.10 compares as greater than
6898 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6899 # widespread that we can use the built-in version vectors rather
6900 # than reinventing them here.  For 5.6.0, however, we must
6901 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6902 foreach $d (@candidates) {
6903     if ($d lt $version) {
6904         if ($d ge $api_versionstring) {
6905             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6906         }
6907         elsif ($d ge "5.005") {
6908             unshift(@inc_version_list, grep { -d } $d);
6909         }
6910     }
6911     else {
6912         # Skip newer version.  I.e. don't look in
6913         # 5.7.0 if we're installing 5.6.1.
6914     }
6915 }
6916
6917 if (@inc_version_list) {
6918     print join(' ', @inc_version_list);
6919 }
6920 else {
6921     # Blank space to preserve value for next Configure run.
6922     print " ";
6923 }
6924 EOPL
6925 chmod +x getverlist
6926 case "$inc_version_list" in
6927 '')     if test -x "$perl5$exe_ext"; then
6928                 dflt=`$perl5 getverlist`
6929         else
6930                 dflt='none'
6931         fi
6932         ;;
6933 $undef) dflt='none' ;;
6934 *)  eval dflt=\"$inc_version_list\" ;;
6935 esac
6936 case "$dflt" in
6937 ''|' ') dflt=none ;;
6938 esac
6939 case "$dflt" in
6940 5.005) case "$bincompat5005" in
6941        $define|true|[yY]*) ;;
6942        *) dflt=none ;;
6943        esac
6944        ;;
6945 esac
6946 $cat <<'EOM'
6947
6948 In order to ease the process of upgrading, this version of perl 
6949 can be configured to use modules built and installed with earlier 
6950 versions of perl that were installed under $prefix.  Specify here
6951 the list of earlier versions that this version of perl should check.
6952 If Configure detected no earlier versions of perl installed under
6953 $prefix, then the list will be empty.  Answer 'none' to tell perl
6954 to not search earlier versions.
6955
6956 The default should almost always be sensible, so if you're not sure,
6957 just accept the default.
6958 EOM
6959
6960 rp='List of earlier versions to include in @INC?'
6961 . ./myread
6962 case "$ans" in
6963 [Nn]one|''|' ') inc_version_list=' ' ;;
6964 *) inc_version_list="$ans" ;;
6965 esac
6966 case "$inc_version_list" in
6967 ''|' ') 
6968         inc_version_list_init='0';;
6969 *)      inc_version_list_init=`echo $inc_version_list |
6970                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6971         ;;
6972 esac
6973 $rm -f getverlist
6974
6975 : determine whether to install perl also as /usr/bin/perl
6976
6977 echo " "
6978 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6979         $cat <<EOM
6980 Many scripts expect perl to be installed as /usr/bin/perl.
6981 I can install the perl you are about to compile also as /usr/bin/perl
6982 (in addition to $installbin/perl).
6983 EOM
6984         case "$installusrbinperl" in
6985         "$undef"|[nN]*) dflt='n';;
6986         *)              dflt='y';;
6987         esac
6988         rp="Do you want to install perl as /usr/bin/perl?"
6989         . ./myread
6990         case "$ans" in
6991         [yY]*)  val="$define";;
6992         *)      val="$undef" ;;
6993         esac
6994 else
6995         val="$undef"
6996 fi
6997 set installusrbinperl
6998 eval $setvar
6999
7000 : see if dld is available
7001 set dld.h i_dld
7002 eval $inhdr
7003
7004 : see if dlopen exists
7005 xxx_runnm="$runnm"
7006 runnm=false
7007 set dlopen d_dlopen
7008 eval $inlibc
7009 runnm="$xxx_runnm"
7010
7011 : determine which dynamic loading, if any, to compile in
7012 echo " "
7013 dldir="ext/DynaLoader"
7014 case "$usedl" in
7015 $define|y|true)
7016         dflt='y'
7017         usedl="$define"
7018         ;;
7019 $undef|n|false)
7020         dflt='n'
7021         usedl="$undef"
7022         ;;
7023 *) 
7024         dflt='n'
7025         case "$d_dlopen" in
7026             $define) dflt='y' ;;
7027         esac
7028         case "$i_dld" in
7029             $define) dflt='y' ;;
7030         esac
7031         : Does a dl_xxx.xs file exist for this operating system
7032         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7033         ;;
7034 esac
7035 rp="Do you wish to use dynamic loading?"
7036 . ./myread
7037 usedl="$ans"
7038 case "$ans" in
7039 y*) usedl="$define"
7040         case "$dlsrc" in
7041         '')
7042                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7043                         dflt="$dldir/dl_${osname}.xs"
7044                 elif $test "$d_dlopen" = "$define" ; then
7045                         dflt="$dldir/dl_dlopen.xs"
7046                 elif $test "$i_dld" = "$define" ; then
7047                         dflt="$dldir/dl_dld.xs"
7048                 else
7049                         dflt=''
7050                 fi
7051                 ;;
7052         *)      dflt="$dldir/$dlsrc"
7053                 ;;
7054         esac
7055     echo "The following dynamic loading files are available:"
7056         : Can not go over to $dldir because getfile has path hard-coded in.
7057         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7058         rp="Source file to use for dynamic loading"
7059         fn="fne"
7060         gfpth="$src"
7061         . ./getfile
7062         usedl="$define"
7063         : emulate basename
7064         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7065
7066         $cat << EOM
7067
7068 Some systems may require passing special flags to $cc -c to
7069 compile modules that will be used to create a shared library.
7070 To use no flags, say "none".
7071
7072 EOM
7073     case "$cccdlflags" in
7074     '') case "$gccversion" in
7075                 '') case "$osname" in
7076                         hpux)   dflt='+z' ;;
7077                         next)   dflt='none' ;;
7078                         irix*)  dflt='-KPIC' ;;
7079                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7080                         sunos)  dflt='-pic' ;;
7081                         *)      dflt='none' ;;
7082                     esac
7083                         ;;
7084                 *)  case "$osname" in
7085                         darwin) dflt='none' ;;
7086                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7087                         *)      dflt='-fpic' ;;
7088                     esac ;;
7089             esac ;;
7090         ' ') dflt='none' ;;
7091     *)  dflt="$cccdlflags" ;;
7092     esac
7093     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7094     . ./myread
7095     case "$ans" in
7096     none) cccdlflags=' ' ;;
7097     *) cccdlflags="$ans" ;;
7098     esac
7099
7100     cat << EOM
7101
7102 Some systems use ld to create libraries that can be dynamically loaded,
7103 while other systems (such as those using ELF) use $cc.
7104
7105 EOM
7106         case "$ld" in
7107         '')     $cat >try.c <<'EOM'
7108 /* Test for whether ELF binaries are produced */
7109 #include <fcntl.h>
7110 #include <stdlib.h>
7111 int main() {
7112         char b[4];
7113         int i = open("a.out",O_RDONLY);
7114         if(i == -1) 
7115                 exit(1); /* fail */
7116         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7117                 exit(0); /* succeed (yes, it's ELF) */
7118         else
7119                 exit(1); /* fail */
7120 }
7121 EOM
7122                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7123                         cat <<EOM
7124 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7125 EOM
7126                         dflt="$cc"
7127                 else
7128                         echo "I'll use ld to build dynamic libraries."
7129                         dflt='ld'
7130                 fi
7131                 rm -f try.c a.out
7132                 ;;
7133         *)      dflt="$ld"
7134                 ;;
7135         esac
7136
7137     rp="What command should be used to create dynamic libraries?"
7138     . ./myread
7139         ld="$ans"
7140
7141     cat << EOM
7142
7143 Some systems may require passing special flags to $ld to create a
7144 library that can be dynamically loaded.  If your ld flags include
7145 -L/other/path options to locate libraries outside your loader's normal
7146 search path, you may need to specify those -L options here as well.  To
7147 use no flags, say "none".
7148
7149 EOM
7150     case "$lddlflags" in
7151     '') case "$osname" in
7152                         beos) dflt='-nostart' ;;
7153                         hpux) dflt='-b';
7154                               case "$gccversion" in
7155                               '') dflt="$dflt +vnocompatwarnings" ;;
7156                               esac
7157                               ;;        
7158                         linux|irix*)    dflt='-shared' ;;
7159                         next)  dflt='none' ;;
7160                         solaris) dflt='-G' ;;
7161                         sunos) dflt='-assert nodefinitions' ;;
7162                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7163                 *)     dflt='none' ;;
7164                         esac
7165                         ;;
7166     *) dflt="$lddlflags" ;;
7167     esac
7168
7169         : Try to guess additional flags to pick up local libraries.
7170         : Be careful not to append to a plain 'none'
7171         case "$dflt" in
7172         none) dflt='' ;;
7173         esac
7174         for thisflag in $ldflags; do
7175                 case "$thisflag" in
7176                 -L*|-R*|-Wl,-R*)
7177                         case " $dflt " in
7178                         *" $thisflag "*) ;;
7179                         *) dflt="$dflt $thisflag" ;;
7180                         esac
7181                         ;;
7182                 esac
7183         done
7184
7185         case "$dflt" in
7186         ''|' ') dflt='none' ;;
7187         esac
7188
7189     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7190     . ./myread
7191     case "$ans" in
7192     none) lddlflags=' ' ;;
7193     *) lddlflags="$ans" ;;
7194     esac
7195
7196         cat <<EOM
7197
7198 Some systems may require passing special flags to $cc to indicate that
7199 the resulting executable will use dynamic linking.  To use no flags,
7200 say "none".
7201
7202 EOM
7203     case "$ccdlflags" in
7204     '') case "$osname" in
7205                 hpux)   dflt='-Wl,-E' ;;
7206                 linux)  dflt='-rdynamic' ;;
7207                 next)   dflt='none' ;;
7208                 sunos)  dflt='none' ;;
7209                 *)      dflt='none' ;;
7210             esac ;;
7211     ' ')  dflt='none' ;;
7212     *)  dflt="$ccdlflags" ;;
7213     esac
7214     rp="Any special flags to pass to $cc to use dynamic linking?"
7215     . ./myread
7216     case "$ans" in
7217     none) ccdlflags=' ' ;;
7218     *) ccdlflags="$ans" ;;
7219     esac
7220     ;;
7221 *)  usedl="$undef"
7222         ld='ld'
7223     dlsrc='dl_none.xs'
7224     lddlflags=''
7225     ccdlflags=''
7226     ;;
7227 esac
7228
7229 also=''
7230 case "$usedl" in
7231 $undef)
7232         # No dynamic loading being used, so don't bother even to prompt.
7233         useshrplib='false'
7234         ;;
7235 *)      case "$useshrplib" in
7236         '')     case "$osname" in
7237                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7238                         dflt=y
7239                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7240                         ;;
7241                 next*)
7242                         case "$osvers" in
7243                         4*)     dflt=y
7244                                 also='Building a shared libperl is needed for MAB support.'
7245                                 ;;
7246                         *)      dflt=n
7247                                 ;;
7248                         esac
7249                         ;;
7250                 *)      dflt=n
7251                         ;;
7252                 esac
7253                 ;;
7254         $define|true|[Yy]*)
7255                 dflt=y
7256                 ;;
7257         *)      dflt=n
7258                 ;;
7259         esac
7260         $cat << EOM
7261
7262 The perl executable is normally obtained by linking perlmain.c with
7263 libperl${_a}, any static extensions (usually just DynaLoader), and
7264 any other libraries needed on this system (such as -lm, etc.).  Since
7265 your system supports dynamic loading, it is probably possible to build
7266 a shared libperl.$so.  If you will have more than one executable linked
7267 to libperl.$so, this will significantly reduce the size of each
7268 executable, but it may have a noticeable affect on performance.  The
7269 default is probably sensible for your system.
7270 $also
7271
7272 EOM
7273         rp="Build a shared libperl.$so (y/n)"
7274         . ./myread
7275         case "$ans" in
7276         true|$define|[Yy]*)
7277                 useshrplib='true'  ;;
7278         *)      useshrplib='false' ;;
7279         esac
7280         ;;
7281 esac
7282
7283 case "$useshrplib" in
7284 true)
7285         case "$libperl" in
7286         '')
7287                 # Figure out a good name for libperl.so.  Since it gets stored in
7288                 # a version-specific architecture-dependent library, the version
7289                 # number isn't really that important, except for making cc/ld happy.
7290                 #
7291                 # A name such as libperl.so.3.1
7292                 majmin="libperl.$so.$patchlevel.$subversion"
7293                 # A name such as libperl.so.301
7294                 majonly=`echo $patchlevel $subversion |
7295                         $awk '{printf "%d%02d", $1, $2}'`
7296                 majonly=libperl.$so.$majonly
7297                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7298                 # rely on figuring it out from the naming of libc.
7299                 case "${osname}${osvers}" in
7300                 next4*)
7301                         dflt=libperl.5.$so
7302                         # XXX How handle the --version stuff for MAB?
7303                         ;;
7304                 linux*)  # ld won't link with a bare -lperl otherwise.
7305                         dflt=libperl.$so
7306                         ;;
7307                 cygwin*) # include version
7308                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7309                         ;;
7310                 *)      # Try to guess based on whether libc has major.minor.
7311                         case "$libc" in
7312                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7313                         *libc.$so.[0-9]*) dflt=$majonly ;;
7314                         *)      dflt=libperl.$so ;;
7315                         esac
7316                         ;;
7317                 esac
7318                 ;;
7319         *)      dflt=$libperl
7320                 ;;
7321         esac
7322         cat << EOM
7323
7324 I need to select a good name for the shared libperl.  If your system uses
7325 library names with major and minor numbers, then you might want something
7326 like $majmin.  Alternatively, if your system uses a single version
7327 number for shared libraries, then you might want to use $majonly.
7328 Or, your system might be quite happy with a simple libperl.$so.
7329
7330 Since the shared libperl will get installed into a version-specific
7331 architecture-dependent directory, the version number of the shared perl
7332 library probably isn't important, so the default should be o.k.
7333
7334 EOM
7335         rp='What name do you want to give to the shared libperl?'
7336         . ./myread
7337         libperl=$ans
7338         echo "Ok, I'll use $libperl"
7339         ;;
7340 *)
7341         libperl="libperl${_a}"
7342         ;;
7343 esac
7344
7345 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7346 case "$shrpdir" in
7347 '') ;;
7348 *)      $cat >&4 <<EOM
7349 WARNING:  Use of the shrpdir variable for the installation location of
7350 the shared $libperl is not supported.  It was never documented and
7351 will not work in this version.  Let me (perlbug@perl.org)
7352 know of any problems this may cause.
7353
7354 EOM
7355         case "$shrpdir" in
7356         "$archlibexp/CORE")
7357                 $cat >&4 <<EOM
7358 But your current setting of $shrpdir is
7359 the default anyway, so it's harmless.
7360 EOM
7361                 ;;
7362         *)
7363                 $cat >&4 <<EOM
7364 Further, your current attempted setting of $shrpdir
7365 conflicts with the value of $archlibexp/CORE
7366 that installperl will use.
7367 EOM
7368                 ;;
7369         esac
7370         ;;
7371 esac
7372
7373 # How will the perl executable find the installed shared $libperl?
7374 # Add $xxx to ccdlflags.
7375 # If we can't figure out a command-line option, use $shrpenv to
7376 # set env LD_RUN_PATH.  The main perl makefile uses this.
7377 shrpdir=$archlibexp/CORE
7378 xxx=''
7379 tmp_shrpenv=''
7380 if "$useshrplib"; then
7381     case "$osname" in 
7382         aix)
7383                 # We'll set it in Makefile.SH...
7384                 ;;
7385         solaris)
7386                 xxx="-R $shrpdir"
7387                 ;;
7388         freebsd|netbsd)
7389                 xxx="-Wl,-R$shrpdir"
7390                 ;;
7391         linux|irix*|dec_osf)
7392                 xxx="-Wl,-rpath,$shrpdir"
7393                 ;;
7394         next)
7395                 # next doesn't like the default...
7396                 ;;
7397         beos)
7398                 # beos doesn't like the default, either.
7399                 ;;
7400         hpux*)
7401                 # hpux doesn't like the default, either.
7402                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7403                 ;;
7404         *)
7405                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7406                 ;;
7407         esac
7408         case "$xxx" in
7409         '') ;;
7410         *)      
7411                 # Only add $xxx if it isn't already in ccdlflags.
7412                 case " $ccdlflags " in
7413                 *" $xxx "*)     ;;
7414                 *)      ccdlflags="$ccdlflags $xxx"
7415                         cat <<EOM >&4
7416
7417 Adding $xxx to the flags
7418 passed to $ld so that the perl executable will find the 
7419 installed shared $libperl.
7420
7421 EOM
7422                         ;;
7423                 esac
7424                 ;;
7425         esac
7426 fi
7427 # Fix ccdlflags in AIX for building external extensions.
7428 # (For building Perl itself bare -bE:perl.exp is needed,
7429 #  Makefile.SH takes care of this.)
7430 case "$osname" in
7431 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7432 esac
7433 # Respect a hint or command-line value.
7434 case "$shrpenv" in
7435 '') shrpenv="$tmp_shrpenv" ;;
7436 esac
7437 case "$ldlibpthname" in
7438 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7439 none)   ldlibpthname='' ;;
7440 esac
7441
7442 : determine where manual pages are on this system
7443 echo " "
7444 case "$sysman" in
7445 '') 
7446         syspath='/usr/share/man/man1 /usr/man/man1'
7447         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7448         syspath="$syspath /usr/man/u_man/man1"
7449         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7450         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7451         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7452         sysman=`./loc . /usr/man/man1 $syspath`
7453         ;;
7454 esac
7455 if $test -d "$sysman"; then
7456         echo "System manual is in $sysman." >&4
7457 else
7458         echo "Could not find manual pages in source form." >&4
7459 fi
7460
7461 : determine where manual pages go
7462 set man1dir man1dir none
7463 eval $prefixit
7464 $cat <<EOM
7465
7466 $spackage has manual pages available in source form.
7467 EOM
7468 case "$nroff" in
7469 nroff)
7470         echo "However, you don't have nroff, so they're probably useless to you."
7471         case "$man1dir" in
7472         '') man1dir="none";;
7473         esac;;
7474 esac
7475 echo "If you don't want the manual sources installed, answer 'none'."
7476 case "$man1dir" in
7477 ' ') dflt=none
7478         ;;
7479 '')
7480         lookpath="$prefixexp/share/man/man1"
7481         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7482         lookpath="$lookpath $prefixexp/man/p_man/man1"
7483         lookpath="$lookpath $prefixexp/man/u_man/man1"
7484         lookpath="$lookpath $prefixexp/man/man.1"
7485         case "$sysman" in
7486         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7487         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7488         esac
7489         set dflt
7490         eval $prefixup
7491         ;;
7492 *)  dflt="$man1dir"
7493         ;;
7494 esac
7495 echo " "
7496 fn=dn+~
7497 rp="Where do the main $spackage manual pages (source) go?"
7498 . ./getfile
7499 if $test "X$man1direxp" != "X$ansexp"; then
7500         installman1dir=''
7501 fi
7502 man1dir="$ans"
7503 man1direxp="$ansexp"
7504 case "$man1dir" in
7505 '')     man1dir=' '
7506         installman1dir='';;
7507 esac
7508
7509 : Change installation prefix, if necessary.
7510 if $test X"$prefix" != X"$installprefix"; then
7511         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7512 else
7513         installman1dir="$man1direxp"
7514 fi
7515
7516 : What suffix to use on installed man pages
7517
7518 case "$man1dir" in
7519 ' ')
7520         man1ext='0'
7521         ;;
7522 *)
7523         rp="What suffix should be used for the main $spackage man pages?"
7524         case "$man1ext" in
7525         '')     case "$man1dir" in
7526                 *1)  dflt=1 ;;
7527                 *1p) dflt=1p ;;
7528                 *1pm) dflt=1pm ;;
7529                 *l) dflt=l;;
7530                 *n) dflt=n;;
7531                 *o) dflt=o;;
7532                 *p) dflt=p;;
7533                 *C) dflt=C;;
7534                 *L) dflt=L;;
7535                 *L1) dflt=L1;;
7536                 *) dflt=1;;
7537                 esac
7538                 ;;
7539         *)      dflt="$man1ext";;
7540         esac
7541         . ./myread
7542         man1ext="$ans"
7543         ;;
7544 esac
7545
7546 : see if we can have long filenames
7547 echo " "
7548 first=123456789abcdef
7549 $rm -f $first
7550 if (echo hi >$first) 2>/dev/null; then
7551         if $test -f 123456789abcde; then
7552                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7553                 val="$undef"
7554         else
7555                 echo 'You can have filenames longer than 14 characters.'>&4
7556                 val="$define"
7557         fi
7558 else
7559         $cat <<'EOM'
7560 You can't have filenames longer than 14 chars.
7561 You can't even think about them!
7562 EOM
7563         val="$undef"
7564 fi 
7565 set d_flexfnam
7566 eval $setvar
7567 $rm -rf 123456789abcde*
7568
7569 : determine where library module manual pages go
7570 set man3dir man3dir none
7571 eval $prefixit
7572 $cat <<EOM
7573
7574 $spackage has manual pages for many of the library modules.
7575 EOM
7576
7577 case "$nroff" in
7578 nroff)
7579         $cat <<'EOM'
7580 However, you don't have nroff, so they're probably useless to you.
7581 EOM
7582         case "$man3dir" in
7583         '') man3dir="none";;
7584         esac;;
7585 esac
7586
7587 case "$d_flexfnam" in
7588 undef)
7589         $cat <<'EOM'
7590 However, your system can't handle the long file names like File::Basename.3. 
7591 EOM
7592         case "$man3dir" in
7593         '') man3dir="none";;
7594         esac;;
7595 esac
7596
7597 echo "If you don't want the manual sources installed, answer 'none'."
7598 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7599 case "$man3dir" in
7600 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7601         if $test -d "$privlib/man/man3"; then
7602                 cat <<EOM >&4
7603
7604 WARNING:  Previous versions of perl installed man3 pages into
7605 $privlib/man/man3.  This version will suggest a 
7606 new default of $dflt.  
7607 EOM
7608                 tdflt=$dflt
7609                 dflt='n'
7610                 rp='Do you wish to preserve the old behavior?(y/n)'
7611                 . ./myread
7612                 case "$ans" in
7613                 y*) dflt="$privlib/man/man3" ;;
7614                 *)  dflt=$tdflt ;;
7615                 esac
7616     fi
7617         ;;
7618 *)      dflt="$man3dir" ;;
7619 esac
7620 case "$dflt" in
7621 ' ') dflt=none ;;
7622 esac
7623 echo " "
7624 fn=dn+~
7625 rp="Where do the $package library man pages (source) go?"
7626 . ./getfile
7627 man3dir="$ans"
7628 man3direxp="$ansexp"
7629 case "$man3dir" in
7630 '')     man3dir=' '
7631         installman3dir='';;
7632 esac
7633
7634 : Change installation prefix, if necessary.
7635 if $test X"$prefix" != X"$installprefix"; then
7636         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7637 else
7638         installman3dir="$man3direxp"
7639 fi
7640
7641 : What suffix to use on installed man pages
7642 case "$man3dir" in
7643 ' ')
7644         man3ext='0'
7645         ;;
7646 *)
7647         rp="What suffix should be used for the $package library man pages?"
7648         case "$man3ext" in
7649         '')     case "$man3dir" in
7650                 *3)  dflt=3 ;;
7651                 *3p) dflt=3p ;;
7652                 *3pm) dflt=3pm ;;
7653                 *l) dflt=l;;
7654                 *n) dflt=n;;
7655                 *o) dflt=o;;
7656                 *p) dflt=p;;
7657                 *C) dflt=C;;
7658                 *L) dflt=L;;
7659                 *L3) dflt=L3;;
7660                 *) dflt=3;;
7661                 esac
7662                 ;;
7663         *)      dflt="$man3ext";;
7664         esac
7665         . ./myread
7666         man3ext="$ans"
7667         ;;
7668 esac
7669
7670 : see if we have to deal with yellow pages, now NIS.
7671 if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
7672         if $test -f /usr/etc/nibindd; then
7673                 echo " "
7674                 echo "I'm fairly confident you're on a NeXT."
7675                 echo " "
7676                 rp='Do you get the hosts file via NetInfo?'
7677                 dflt=y
7678                 case "$hostcat" in
7679                 nidump*) ;;
7680                 '') ;;
7681                 *) dflt=n;;
7682                 esac
7683                 . ./myread
7684                 case "$ans" in
7685                 y*) hostcat='nidump hosts .';;
7686                 *)      case "$hostcat" in
7687                         nidump*) hostcat='';;
7688                         esac
7689                         ;;
7690                 esac
7691         fi
7692         case "$hostcat" in
7693         nidump*) ;;
7694         *)
7695                 case "$hostcat" in
7696                 *ypcat*) dflt=y;;
7697                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7698                                 dflt=y
7699                         else
7700                                 dflt=n
7701                         fi;;
7702                 *) dflt=n;;
7703                 esac
7704                 echo " "
7705                 rp='Are you getting the hosts file via yellow pages?'
7706                 . ./myread
7707                 case "$ans" in
7708                 y*) hostcat='ypcat hosts';;
7709                 *) hostcat='cat /etc/hosts';;
7710                 esac
7711                 ;;
7712         esac
7713 fi
7714 case "$hostcat" in
7715 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7716 esac
7717 case "$groupcat" in
7718 '') test -f /etc/group && groupcat='cat /etc/group';;
7719 esac
7720 case "$passcat" in
7721 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7722 esac
7723
7724 : now get the host name
7725 echo " "
7726 echo "Figuring out host name..." >&4
7727 case "$myhostname" in
7728 '') cont=true
7729         echo 'Maybe "hostname" will work...'
7730         if tans=`sh -c hostname 2>&1` ; then
7731                 myhostname=$tans
7732                 phostname=hostname
7733                 cont=''
7734         fi
7735         ;;
7736 *) cont='';;
7737 esac
7738 if $test "$cont"; then
7739         if ./xenix; then
7740                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7741                 if tans=`cat /etc/systemid 2>&1` ; then
7742                         myhostname=$tans
7743                         phostname='cat /etc/systemid'
7744                         echo "Whadyaknow.  Xenix always was a bit strange..."
7745                         cont=''
7746                 fi
7747         elif $test -r /etc/systemid; then
7748                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7749         fi
7750 fi
7751 if $test "$cont"; then
7752         echo 'No, maybe "uuname -l" will work...'
7753         if tans=`sh -c 'uuname -l' 2>&1` ; then
7754                 myhostname=$tans
7755                 phostname='uuname -l'
7756         else
7757                 echo 'Strange.  Maybe "uname -n" will work...'
7758                 if tans=`sh -c 'uname -n' 2>&1` ; then
7759                         myhostname=$tans
7760                         phostname='uname -n'
7761                 else
7762                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7763                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7764                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7765                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7766                         else
7767                                 case "$myhostname" in
7768                                 '') echo "Does this machine have an identity crisis or something?"
7769                                         phostname='';;
7770                                 *)
7771                                         echo "Well, you said $myhostname before..."
7772                                         phostname='echo $myhostname';;
7773                                 esac
7774                         fi
7775                 fi
7776         fi
7777 fi
7778 : you do not want to know about this
7779 set $myhostname
7780 myhostname=$1
7781
7782 : verify guess
7783 if $test "$myhostname" ; then
7784         dflt=y
7785         rp='Your host name appears to be "'$myhostname'".'" Right?"
7786         . ./myread
7787         case "$ans" in
7788         y*) ;;
7789         *) myhostname='';;
7790         esac
7791 fi
7792
7793 : bad guess or no guess
7794 while $test "X$myhostname" = X ; do
7795         dflt=''
7796         rp="Please type the (one word) name of your host:"
7797         . ./myread
7798         myhostname="$ans"
7799 done
7800
7801 : translate upper to lower if necessary
7802 case "$myhostname" in
7803 *[A-Z]*)
7804         echo "(Normalizing case in your host name)"
7805         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7806         ;;
7807 esac
7808
7809 case "$myhostname" in
7810 *.*)
7811         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7812         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7813         echo "(Trimming domain name from host name--host name is now $myhostname)"
7814         ;;
7815 *) case "$mydomain" in
7816         '')
7817                 {
7818                         test "X$hostcat" = "Xypcat hosts" &&
7819                         ypmatch "$myhostname" hosts 2>/dev/null |\
7820                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7821                         $test -s hosts
7822                 } || {
7823                         test "X$hostcat" != "X" &&
7824                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7825                                         /[       ]$myhostname[  . ]/p" > hosts
7826                 }
7827                 tmp_re="[       . ]"
7828                 if $test -f hosts; then
7829                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7830                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7831                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7832                                 hosts | $sort | $uniq | \
7833                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7834                         case `$echo X$dflt` in
7835                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7836                                 dflt=.
7837                                 ;;
7838                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7839                                 ;;
7840                         esac
7841                 else
7842                         echo "(I cannot locate a hosts database anywhere)"
7843                         dflt=.
7844                 fi
7845                 case "$dflt" in
7846                 .)
7847                         tans=`./loc resolv.conf X /etc /usr/etc`
7848                         if $test -f "$tans"; then
7849                                 echo "(Attempting domain name extraction from $tans)"
7850                                 dflt=.`$sed -n -e 's/   / /g' \
7851                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7852                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7853                                 case "$dflt" in
7854                                 .) dflt=.`$sed -n -e 's/        / /g' \
7855                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7856                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7857                                         ;;
7858                                 esac
7859                         fi
7860                         ;;
7861                 esac
7862                 case "$dflt" in
7863                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7864                         dflt=.`sh -c domainname 2>/dev/null`
7865                         case "$dflt" in
7866                         '') dflt='.';;
7867                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7868                         esac
7869                         ;;
7870                 esac
7871                 case "$dflt$osname" in
7872                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7873                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7874                         ;;
7875                 esac
7876                 case "$dflt" in
7877                 .) echo "(Lost all hope -- silly guess then)"
7878                         dflt='.uucp'
7879                         ;;
7880                 esac
7881                 $rm -f hosts
7882                 ;;
7883         *) dflt="$mydomain";;
7884         esac;;
7885 esac
7886 echo " "
7887 rp="What is your domain name?"
7888 . ./myread
7889 tans="$ans"
7890 case "$ans" in
7891 '') ;;
7892 .*) ;;
7893 *) tans=".$tans";;
7894 esac
7895 mydomain="$tans"
7896
7897 : translate upper to lower if necessary
7898 case "$mydomain" in
7899 *[A-Z]*)
7900         echo "(Normalizing case in your domain name)"
7901         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7902         ;;
7903 esac
7904
7905 : a little sanity check here
7906 case "$phostname" in
7907 '') ;;
7908 *)
7909         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7910         $myhostname$mydomain|$myhostname) ;;
7911         *)
7912                 case "$phostname" in
7913                 sed*)
7914                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7915                         ;;
7916                 *)
7917                         echo "(That doesn't agree with your $phostname command, by the way.)"
7918                         ;;
7919                 esac
7920         ;;
7921         esac
7922         ;;
7923 esac
7924
7925 $cat <<EOM
7926
7927 I need to get your e-mail address in Internet format if possible, i.e.
7928 something like user@host.domain. Please answer accurately since I have
7929 no easy means to double check it. The default value provided below
7930 is most probably close to reality but may not be valid from outside
7931 your organization...
7932
7933 EOM
7934 cont=x
7935 while test "$cont"; do
7936         case "$cf_email" in
7937         '') dflt="$cf_by@$myhostname$mydomain";;
7938         *) dflt="$cf_email";;
7939         esac
7940         rp='What is your e-mail address?'
7941         . ./myread
7942         cf_email="$ans"
7943         case "$cf_email" in
7944         *@*.*) cont='' ;;
7945         *)
7946                 rp='Address does not look like an Internet one.  Use it anyway?'
7947                 case "$fastread" in
7948                 yes) dflt=y ;;
7949                 *) dflt=n ;;
7950                 esac
7951                 . ./myread
7952                 case "$ans" in
7953                 y*) cont='' ;;
7954                 *) echo " " ;;
7955                 esac
7956                 ;;
7957         esac
7958 done
7959
7960 $cat <<EOM
7961
7962 If you or somebody else will be maintaining perl at your site, please
7963 fill in the correct e-mail address here so that they may be contacted
7964 if necessary. Currently, the "perlbug" program included with perl
7965 will send mail to this address in addition to perlbug@perl.org. You may
7966 enter "none" for no administrator.
7967
7968 EOM
7969 case "$perladmin" in
7970 '') dflt="$cf_email";;
7971 *) dflt="$perladmin";;
7972 esac
7973 rp='Perl administrator e-mail address'
7974 . ./myread
7975 perladmin="$ans"
7976
7977 : determine whether to only install version-specific parts.
7978 echo " "
7979 $cat <<EOM
7980 Do you want to install only the version-specific parts of the perl
7981 distribution?  Usually you do *not* want to do this.
7982 EOM
7983 case "$versiononly" in
7984 "$define"|[Yy]*|true) dflt='y' ;;
7985 *) dflt='n';
7986 esac
7987 rp="Do you want to install only the version-specific parts of perl?"
7988 . ./myread
7989 case "$ans" in
7990 [yY]*)  val="$define";;
7991 *)      val="$undef" ;;
7992 esac
7993 set versiononly
7994 eval $setvar
7995
7996 : figure out how to guarantee perl startup
7997 case "$startperl" in
7998 '')
7999         case "$sharpbang" in
8000         *!)
8001                 $cat <<EOH
8002
8003 I can use the #! construct to start perl on your system. This will
8004 make startup of perl scripts faster, but may cause problems if you
8005 want to share those scripts and perl is not in a standard place
8006 ($binexp/perl) on all your platforms. The alternative is to force
8007 a shell by starting the script with a single ':' character.
8008
8009 EOH
8010                 case "$versiononly" in
8011                 "$define")      dflt="$binexp/perl$version";;  
8012                 *)              dflt="$binexp/perl";;
8013                 esac
8014                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8015                 . ./myread
8016                 case "$ans" in
8017                 none)   startperl=": # use perl";;
8018                 *)      startperl="#!$ans"
8019                         if $test 30 -lt `echo "$ans" | wc -c`; then
8020                                 $cat >&4 <<EOM
8021
8022 WARNING:  Some systems limit the #! command to 32 characters.
8023 If you experience difficulty running Perl scripts with #!, try
8024 installing Perl in a directory with a shorter pathname.
8025
8026 EOM
8027                         fi ;;
8028                 esac
8029                 ;;
8030         *) startperl=": # use perl"
8031                 ;;
8032         esac
8033         ;;
8034 esac
8035 echo "I'll use $startperl to start perl scripts."
8036
8037 : figure best path for perl in scripts
8038 case "$perlpath" in
8039 '')
8040         case "$versiononly" in
8041         "$define")      perlpath="$binexp/perl$version";;
8042         *)              perlpath="$binexp/perl";;
8043         esac
8044         case "$startperl" in
8045         *!*) ;;
8046         *)
8047                 $cat <<EOH
8048
8049 I will use the "eval 'exec'" idiom to start Perl on your system.
8050 I can use the full path of your Perl binary for this purpose, but
8051 doing so may cause problems if you want to share those scripts and
8052 Perl is not always in a standard place ($binexp/perl).
8053
8054 EOH
8055                 dflt="$binexp/perl"
8056                 rp="What path shall I use in \"eval 'exec'\"?"
8057                 . ./myread
8058                 perlpath="$ans"
8059                 ;;
8060         esac
8061         ;;
8062 esac
8063 case "$startperl" in
8064 *!*)    ;;
8065 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8066 esac
8067
8068 : determine where public executable scripts go
8069 set scriptdir scriptdir
8070 eval $prefixit
8071 case "$scriptdir" in
8072 '')
8073         dflt="$bin"
8074         : guess some guesses
8075         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8076         $test -d /usr/share/bin     && dflt=/usr/share/bin
8077         $test -d /usr/local/script  && dflt=/usr/local/script
8078         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8079         $test -d $prefixexp/script  && dflt=$prefixexp/script
8080         set dflt
8081         eval $prefixup
8082         ;;
8083 *)  dflt="$scriptdir"
8084         ;;
8085 esac
8086 $cat <<EOM
8087  
8088 Some installations have a separate directory just for executable scripts so
8089 that they can mount it across multiple architectures but keep the scripts in
8090 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8091 Or you might just lump your scripts in with all your other executables.
8092  
8093 EOM
8094 fn=d~
8095 rp='Where do you keep publicly executable scripts?'
8096 . ./getfile
8097 if $test "X$ansexp" != "X$scriptdirexp"; then
8098         installscript=''
8099 fi
8100 scriptdir="$ans"
8101 scriptdirexp="$ansexp"
8102 : Change installation prefix, if necessary.
8103 if $test X"$prefix" != X"$installprefix"; then
8104         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8105 else
8106         installscript="$scriptdirexp"
8107 fi
8108
8109 : determine where add-on public executables go
8110 case "$sitebin" in
8111 '')     dflt=$siteprefix/bin ;;
8112 *)      dflt=$sitebin ;;
8113 esac
8114 fn=d~
8115 rp='Pathname where the add-on public executables should be installed?'
8116 . ./getfile
8117 sitebin="$ans"
8118 sitebinexp="$ansexp"
8119 : Change installation prefix, if necessary.
8120 if $test X"$prefix" != X"$installprefix"; then
8121         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8122 else
8123         installsitebin="$sitebinexp"
8124 fi
8125
8126 : define an is-a-typedef? function
8127 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8128 case "$inclist" in
8129 "") inclist="sys/types.h";;
8130 esac;
8131 eval "varval=\$$var";
8132 case "$varval" in
8133 "")
8134         $rm -f temp.c;
8135         for inc in $inclist; do
8136                 echo "#include <$inc>" >>temp.c;
8137         done;
8138         echo "#ifdef $type" >> temp.c;
8139         echo "printf(\"We have $type\");" >> temp.c;
8140         echo "#endif" >> temp.c;
8141         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8142         if $contains $type temp.E >/dev/null 2>&1; then
8143                 eval "$var=\$type";
8144         else
8145                 eval "$var=\$def";
8146         fi;
8147         $rm -f temp.?;;
8148 *) eval "$var=\$varval";;
8149 esac'
8150
8151 : define an is-a-typedef? function that prompts if the type is not available.
8152 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8153 case "$inclist" in
8154 "") inclist="sys/types.h";;
8155 esac;
8156 eval "varval=\$$var";
8157 case "$varval" in
8158 "")
8159         $rm -f temp.c;
8160         for inc in $inclist; do
8161                 echo "#include <$inc>" >>temp.c;
8162         done;
8163         echo "#ifdef $type" >> temp.c;
8164         echo "printf(\"We have $type\");" >> temp.c;
8165         echo "#endif" >> temp.c;
8166         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8167         echo " " ;
8168         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8169         if $contains $type temp.E >/dev/null 2>&1; then
8170                 echo "$type found." >&4;
8171                 eval "$var=\$type";
8172         else
8173                 echo "$type NOT found." >&4;
8174                 dflt="$def";
8175                 . ./myread ;
8176                 eval "$var=\$ans";
8177         fi;
8178         $rm -f temp.?;;
8179 *) eval "$var=\$varval";;
8180 esac'
8181
8182 : see what type lseek is declared as in the kernel
8183 rp="What is the type used for lseek's offset on this system?"
8184 set off_t lseektype long stdio.h sys/types.h
8185 eval $typedef_ask
8186
8187 echo " "
8188 echo "Checking to see how big your file offsets are..." >&4
8189 $cat >try.c <<EOCP
8190 #include <sys/types.h>
8191 #include <stdio.h>
8192 int main()
8193 {
8194     printf("%d\n", (int)sizeof($lseektype));
8195     return(0); 
8196 }
8197 EOCP
8198 set try
8199 if eval $compile_ok; then
8200         lseeksize=`$run ./try`
8201         echo "Your file offsets are $lseeksize bytes long."
8202 else
8203         dflt=$longsize
8204         echo " "
8205         echo "(I can't seem to compile the test program.  Guessing...)"
8206         rp="What is the size of your file offsets (in bytes)?"
8207         . ./myread
8208         lseeksize="$ans"
8209 fi
8210 $rm -f try.c try
8211
8212 : see what type file positions are declared as in the library
8213 rp="What is the type for file position used by fsetpos()?"
8214 set fpos_t fpostype long stdio.h sys/types.h
8215 eval $typedef_ask
8216
8217 echo " "
8218 case "$fpostype" in
8219 *_t) zzz="$fpostype"    ;;
8220 *)   zzz="fpos_t"       ;;
8221 esac
8222 echo "Checking the size of $zzz..." >&4 
8223 cat > try.c <<EOCP
8224 #include <sys/types.h>
8225 #include <stdio.h>
8226 int main() {
8227     printf("%d\n", (int)sizeof($fpostype));
8228     exit(0);
8229 }
8230 EOCP
8231 set try
8232 if eval $compile_ok; then
8233         yyy=`$run ./try`
8234         case "$yyy" in
8235         '')     fpossize=4
8236                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8237                 ;;
8238         *)      fpossize=$yyy
8239                 echo "Your $zzz is $fpossize bytes long."
8240                 ;;
8241         esac
8242 else
8243         dflt="$longsize"
8244         echo " " >&4
8245         echo "(I can't compile the test program.  Guessing...)" >&4
8246         rp="What is the size of your file positions (in bytes)?"
8247         . ./myread
8248         fpossize="$ans"
8249 fi
8250
8251
8252
8253 # Backward compatibility (uselfs is deprecated).
8254 case "$uselfs" in
8255 "$define"|true|[yY]*)
8256         cat <<EOM >&4
8257
8258 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8259 EOM
8260         uselargefiles="$define"
8261         ;;
8262 esac                          
8263
8264 case "$lseeksize:$fpossize" in
8265 8:8) cat <<EOM
8266
8267 You can have files larger than 2 gigabytes.
8268 EOM
8269    val="$define" ;;
8270 *)    case "$uselargefiles" in
8271    "$undef"|false|[nN]*) dflt='n' ;;
8272    *)   dflt='y' ;;
8273    esac
8274    cat <<EOM
8275
8276 Perl can be built to understand large files (files larger than 2 gigabytes)
8277 on some systems.  To do so, Configure can be run with -Duselargefiles.
8278
8279 If this doesn't make any sense to you, just accept the default '$dflt'.
8280 EOM
8281    rp='Try to understand large files, if available?'
8282    . ./myread
8283    case "$ans" in
8284    y|Y)         val="$define" ;;
8285    *)           val="$undef"  ;;
8286    esac
8287    ;;
8288 esac
8289 set uselargefiles
8290 eval $setvar
8291 case "$uselargefiles" in
8292 "$define")
8293 : Look for a hint-file generated 'call-back-unit'.  If the
8294 : user has specified that a large files perl is to be built,
8295 : we may need to set or change some other defaults.
8296         if $test -f uselargefiles.cbu; then
8297                 echo "Your platform has some specific hints for large file builds, using them..."
8298                 . ./uselargefiles.cbu
8299                 echo " "
8300                 echo "Rechecking to see how big your file offsets are..." >&4
8301                 $cat >try.c <<EOCP
8302 #include <sys/types.h>
8303 #include <stdio.h>
8304 int main()
8305 {
8306     printf("%d\n", (int)sizeof($lseektype));
8307     return(0); 
8308 }
8309 EOCP
8310                 set try
8311                 if eval $compile_ok; then
8312                         lseeksize=`$run ./try`
8313                         $echo "Your file offsets are now $lseeksize bytes long."
8314                 else
8315                         dflt="$lseeksize"
8316                         echo " "
8317                         echo "(I can't seem to compile the test program.  Guessing...)"
8318                         rp="What is the size of your file offsets (in bytes)?"
8319                         . ./myread
8320                         lseeksize="$ans"
8321                 fi
8322                 case "$fpostype" in
8323                 *_t) zzz="$fpostype"    ;;
8324                 *)   zzz="fpos_t"       ;;
8325                 esac
8326                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8327                 $cat > try.c <<EOCP
8328 #include <sys/types.h>
8329 #include <stdio.h>
8330 int main() {
8331     printf("%d\n", (int)sizeof($fpostype));
8332     exit(0);
8333 }
8334 EOCP
8335                 set try
8336                 if eval $compile_ok; then
8337                         yyy=`$run ./try`
8338                         dflt="$lseeksize"
8339                         case "$yyy" in
8340                         '')     echo " "
8341                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8342                                 ;;
8343                         *)      fpossize=$yyy
8344                                 echo " $fpossize bytes." >&4
8345                                 ;;
8346                         esac
8347                 else
8348                         dflt="$fpossize"
8349                         echo " "
8350                         echo "(I can't compile the test program.  Guessing...)" >&4
8351                         rp="What is the size of your file positions (in bytes)?"
8352                         . ./myread
8353                         fpossize="$ans"
8354                 fi
8355                 $rm -f try.c try
8356         fi
8357         ;;
8358 esac
8359
8360 case "$vendorprefix" in
8361 '')     d_vendorbin="$undef"
8362         vendorbin=''
8363         vendorbinexp=''
8364         ;;
8365 *)      d_vendorbin="$define"
8366         : determine where vendor-supplied executables go.
8367         case "$vendorbin" in
8368         '') dflt=$vendorprefix/bin ;;
8369         *)      dflt="$vendorbin" ;;
8370         esac
8371         fn=d~+
8372         rp='Pathname for the vendor-supplied executables directory?'
8373         . ./getfile
8374         vendorbin="$ans"
8375         vendorbinexp="$ansexp"
8376         ;;
8377 esac
8378 : Change installation prefix, if necessary.
8379 if $test X"$prefix" != X"$installprefix"; then
8380         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8381 else
8382         installvendorbin="$vendorbinexp"
8383 fi
8384
8385 : see if qgcvt exists
8386 set qgcvt d_qgcvt
8387 eval $inlibc
8388
8389 echo " "
8390
8391 if $test X"$d_longdbl" = X"$define"; then
8392
8393 echo "Checking how to print long doubles..." >&4
8394
8395 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8396         $cat >try.c <<'EOCP'
8397 #include <sys/types.h>
8398 #include <stdio.h>
8399 int main() {
8400   double d = 123.456;
8401   printf("%.3f\n", d);
8402 }
8403 EOCP
8404         set try
8405         if eval $compile; then
8406                 yyy=`$run ./try`
8407                 case "$yyy" in
8408                 123.456)
8409                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8410                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8411                         echo "We will use %f."
8412                         ;;
8413                 esac
8414         fi
8415 fi
8416
8417 if $test X"$sPRIfldbl" = X; then
8418         $cat >try.c <<'EOCP'
8419 #include <sys/types.h>
8420 #include <stdio.h>
8421 int main() {
8422   long double d = 123.456;
8423   printf("%.3Lf\n", d);
8424 }
8425 EOCP
8426         set try
8427         if eval $compile; then
8428                 yyy=`$run ./try`
8429                 case "$yyy" in
8430                 123.456)
8431                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8432                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8433                         echo "We will use %Lf."
8434                         ;;
8435                 esac
8436         fi
8437 fi
8438
8439 if $test X"$sPRIfldbl" = X; then
8440         $cat >try.c <<'EOCP'
8441 #include <sys/types.h>
8442 #include <stdio.h>
8443 int main() {
8444   long double d = 123.456;
8445   printf("%.3llf\n", d);
8446 }
8447 EOCP
8448         set try
8449         if eval $compile; then
8450                 yyy=`$run ./try`
8451                 case "$yyy" in
8452                 123.456)
8453                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8454                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8455                         echo "We will use %llf."
8456                         ;;
8457                 esac
8458         fi
8459 fi
8460
8461 if $test X"$sPRIfldbl" = X; then
8462         $cat >try.c <<'EOCP'
8463 #include <sys/types.h>
8464 #include <stdio.h>
8465 int main() {
8466   long double d = 123.456;
8467   printf("%.3lf\n", d);
8468 }
8469 EOCP
8470         set try
8471         if eval $compile; then
8472                 yyy=`$run ./try`
8473                 case "$yyy" in
8474                 123.456)
8475                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8476                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8477                         echo "We will use %lf."
8478                         ;;
8479                 esac
8480         fi
8481 fi
8482
8483 if $test X"$sPRIfldbl" = X; then
8484         echo "Cannot figure out how to print long doubles." >&4
8485 else
8486         sSCNfldbl=$sPRIfldbl    # expect consistency
8487 fi
8488
8489 $rm -f try try.*
8490
8491 fi # d_longdbl
8492
8493 case "$sPRIfldbl" in
8494 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8495         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8496         d_SCNfldbl="$undef";
8497         ;;
8498 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8499         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8500         d_SCNfldbl="$define";
8501         ;;
8502 esac
8503
8504 : Check how to convert floats to strings.
8505 echo " "
8506 echo "Checking for an efficient way to convert floats to strings."
8507 echo " " > try.c
8508 case "$uselongdouble" in
8509 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8510 esac
8511 case "$d_longdbl" in
8512 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8513 esac
8514 case "$d_PRIgldbl" in
8515 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8516 esac
8517 $cat >>try.c <<EOP
8518 #ifdef TRY_gconvert
8519 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8520 char *myname = "gconvert";
8521 #endif
8522 #ifdef TRY_gcvt
8523 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8524 char *myname = "gcvt";
8525 #endif
8526 #ifdef TRY_qgcvt
8527 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8528 char *myname = "qgcvt";
8529 #define DOUBLETYPE long double
8530 #endif
8531 #ifdef TRY_sprintf
8532 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8533 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8534 #else
8535 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8536 #endif
8537 char *myname = "sprintf";
8538 #endif
8539
8540 #ifndef DOUBLETYPE
8541 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8542 #define DOUBLETYPE long double
8543 #else
8544 #define DOUBLETYPE double
8545 #endif
8546 #endif
8547
8548 #include <stdio.h>
8549
8550 #define I_STDLIB $i_stdlib
8551 #ifdef I_STDLIB
8552 #include <stdlib.h>
8553 #endif
8554
8555 int
8556 checkit(expect, got)
8557 char *expect;
8558 char *got;
8559 {
8560     if (strcmp(expect, got)) {
8561                 printf("%s oddity:  Expected %s, got %s\n",
8562                         myname, expect, got);
8563                 exit(1);
8564         }
8565 }
8566
8567 int main()
8568
8569         char buf[64]; 
8570         buf[63] = '\0';
8571
8572         /* This must be 1st test on (which?) platform */
8573         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8574         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8575         checkit("0.1", buf);
8576
8577         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8578         checkit("1", buf);
8579
8580         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8581         checkit("1.1", buf);
8582
8583         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8584         checkit("1.01", buf);
8585
8586         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8587         checkit("1.001", buf);
8588
8589         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8590         checkit("1.0001", buf);
8591
8592         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8593         checkit("1.00001", buf);
8594
8595         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8596         checkit("1.000001", buf);
8597
8598         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8599         checkit("0", buf);
8600
8601         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8602         checkit("-1", 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         /* Some Linux gcvt's give -1.e+5 here. */
8609         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8610         checkit("-100000", buf);
8611
8612         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8613         checkit("123.456", buf);
8614
8615         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8616         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8617         if (strlen(buf) > 5)
8618             checkit("1e+030", buf); /* for Microsoft */
8619         else
8620             checkit("1e+30", buf);
8621
8622         exit(0);
8623 }
8624 EOP
8625 case "$d_Gconvert" in
8626 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8627 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8628 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8629 *) xxx_list='gconvert gcvt sprintf' ;;
8630 esac
8631
8632 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8633 "$define$define$define")
8634     # for long doubles prefer first qgcvt, then sprintf
8635     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8636     xxx_list="sprintf $xxx_list"
8637     case "$d_qgcvt" in
8638     "$define") xxx_list="qgcvt $xxx_list" ;;
8639     esac
8640     ;;
8641 esac
8642
8643 for xxx_convert in $xxx_list; do
8644         echo "Trying $xxx_convert..."
8645         $rm -f try try$_o
8646         set try -DTRY_$xxx_convert
8647         if eval $compile; then
8648                 echo "$xxx_convert() found." >&4
8649                 if $run ./try; then
8650                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8651                         break;
8652                 else
8653                         echo "...But $xxx_convert didn't work as I expected."
8654                 fi
8655         else
8656                 echo "$xxx_convert NOT found." >&4
8657         fi
8658 done
8659         
8660 case "$xxx_convert" in
8661 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8662 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8663 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8664 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8665    "$define$define$define")
8666       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8667    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8668    esac
8669    ;;  
8670 esac
8671
8672 : see if _fwalk exists
8673 set fwalk d__fwalk
8674 eval $inlibc
8675
8676 : Initialize h_fcntl
8677 h_fcntl=false
8678
8679 : Initialize h_sysfile
8680 h_sysfile=false
8681
8682 : access call always available on UNIX
8683 set access d_access
8684 eval $inlibc
8685
8686 : locate the flags for 'access()'
8687 case "$d_access" in
8688 "$define")
8689         echo " "
8690         $cat >access.c <<'EOCP'
8691 #include <sys/types.h>
8692 #ifdef I_FCNTL
8693 #include <fcntl.h>
8694 #endif
8695 #ifdef I_SYS_FILE
8696 #include <sys/file.h>
8697 #endif
8698 #ifdef I_UNISTD
8699 #include <unistd.h>
8700 #endif
8701 int main() {
8702         exit(R_OK);
8703 }
8704 EOCP
8705         : check sys/file.h first, no particular reason here
8706         if $test `./findhdr sys/file.h` && \
8707                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8708                 h_sysfile=true;
8709                 echo "<sys/file.h> defines the *_OK access constants." >&4
8710         elif $test `./findhdr fcntl.h` && \
8711                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8712                 h_fcntl=true;
8713                 echo "<fcntl.h> defines the *_OK access constants." >&4
8714         elif $test `./findhdr unistd.h` && \
8715                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8716                 echo "<unistd.h> defines the *_OK access constants." >&4
8717         else
8718                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8719         fi
8720         ;;
8721 esac
8722 $rm -f access*
8723
8724 : see if accessx exists
8725 set accessx d_accessx
8726 eval $inlibc
8727
8728 : see if alarm exists
8729 set alarm d_alarm
8730 eval $inlibc
8731
8732 : see if atolf exists
8733 set atolf d_atolf
8734 eval $inlibc
8735
8736 : see if atoll exists
8737 set atoll d_atoll
8738 eval $inlibc
8739
8740 : Look for GNU-cc style attribute checking
8741 echo " "
8742 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8743 $cat >attrib.c <<'EOCP'
8744 #include <stdio.h>
8745 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8746 EOCP
8747 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8748         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8749                 echo "Your C compiler doesn't fully support __attribute__."
8750                 val="$undef"
8751         else
8752                 echo "Your C compiler supports __attribute__."
8753                 val="$define"
8754         fi
8755 else
8756         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8757         val="$undef"
8758 fi
8759 set d_attribut
8760 eval $setvar
8761 $rm -f attrib*
8762
8763 : see if bcmp exists
8764 set bcmp d_bcmp
8765 eval $inlibc
8766
8767 : see if bcopy exists
8768 set bcopy d_bcopy
8769 eval $inlibc
8770
8771 : see if this is a unistd.h system
8772 set unistd.h i_unistd
8773 eval $inhdr
8774
8775 : see if getpgrp exists
8776 set getpgrp d_getpgrp
8777 eval $inlibc
8778
8779 case "$d_getpgrp" in
8780 "$define")
8781         echo " "
8782         echo "Checking to see which flavor of getpgrp is in use..."
8783         $cat >try.c <<EOP
8784 #$i_unistd I_UNISTD
8785 #include <sys/types.h>
8786 #ifdef I_UNISTD
8787 #  include <unistd.h>
8788 #endif
8789 int main()
8790 {
8791         if (getuid() == 0) {
8792                 printf("(I see you are running Configure as super-user...)\n");
8793                 setuid(1);
8794         }
8795 #ifdef TRY_BSD_PGRP
8796         if (getpgrp(1) == 0)
8797                 exit(0);
8798 #else
8799         if (getpgrp() > 0)
8800                 exit(0);
8801 #endif
8802         exit(1);
8803 }
8804 EOP
8805         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8806                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8807                 val="$define"
8808         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8809                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8810                 val="$undef"
8811         else
8812                 echo "I can't seem to compile and run the test program."
8813                 if ./usg; then
8814                         xxx="a USG one, i.e. you use getpgrp()."
8815                 else
8816                         # SVR4 systems can appear rather BSD-ish.
8817                         case "$i_unistd" in
8818                         $undef)
8819                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8820                                 val="$define"
8821                                 ;;
8822                         $define)
8823                                 xxx="probably a USG one, i.e. you use getpgrp()."
8824                                 val="$undef"
8825                                 ;;
8826                         esac
8827                 fi
8828                 echo "Assuming your getpgrp is $xxx" >&4
8829         fi
8830         ;;
8831 *) val="$undef";;
8832 esac
8833 set d_bsdgetpgrp
8834 eval $setvar
8835 $rm -f try try.*
8836
8837 : see if setpgrp exists
8838 set setpgrp d_setpgrp
8839 eval $inlibc
8840
8841 case "$d_setpgrp" in
8842 "$define")
8843         echo " "
8844         echo "Checking to see which flavor of setpgrp is in use..."
8845         $cat >try.c <<EOP
8846 #$i_unistd I_UNISTD
8847 #include <sys/types.h>
8848 #ifdef I_UNISTD
8849 #  include <unistd.h>
8850 #endif
8851 int main()
8852 {
8853         if (getuid() == 0) {
8854                 printf("(I see you are running Configure as super-user...)\n");
8855                 setuid(1);
8856         }
8857 #ifdef TRY_BSD_PGRP
8858         if (-1 == setpgrp(1, 1))
8859                 exit(0);
8860 #else
8861         if (setpgrp() != -1)
8862                 exit(0);
8863 #endif
8864         exit(1);
8865 }
8866 EOP
8867         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8868                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8869                 val="$define"
8870         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8871                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8872                 val="$undef"
8873         else
8874                 echo "(I can't seem to compile and run the test program.)"
8875                 if ./usg; then
8876                         xxx="a USG one, i.e. you use setpgrp()."
8877                 else
8878                         # SVR4 systems can appear rather BSD-ish.
8879                         case "$i_unistd" in
8880                         $undef)
8881                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8882                                 val="$define"
8883                                 ;;
8884                         $define)
8885                                 xxx="probably a USG one, i.e. you use setpgrp()."
8886                                 val="$undef"
8887                                 ;;
8888                         esac
8889                 fi
8890                 echo "Assuming your setpgrp is $xxx" >&4
8891         fi
8892         ;;
8893 *) val="$undef";;
8894 esac
8895 set d_bsdsetpgrp
8896 eval $setvar
8897 $rm -f try try.*
8898 : see if bzero exists
8899 set bzero d_bzero
8900 eval $inlibc
8901
8902 : see if signal is declared as pointer to function returning int or void
8903 echo " "
8904 xxx=`./findhdr signal.h`
8905 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8906 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8907         echo "You have int (*signal())() instead of void." >&4
8908         val="$undef"
8909 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8910         echo "You have void (*signal())()." >&4
8911         val="$define"
8912 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8913         echo "You have int (*signal())() instead of void." >&4
8914         val="$undef"
8915 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8916         echo "You have void (*signal())()." >&4
8917         val="$define"
8918 else
8919         case "$d_voidsig" in
8920         '')
8921         echo "I can't determine whether signal handler returns void or int..." >&4
8922                 dflt=void
8923                 rp="What type does your signal handler return?"
8924                 . ./myread
8925                 case "$ans" in
8926                 v*) val="$define";;
8927                 *) val="$undef";;
8928                 esac;;
8929         "$define")
8930                 echo "As you already told me, signal handler returns void." >&4
8931                 val="$define"
8932                 ;;
8933         *)      echo "As you already told me, signal handler returns int." >&4
8934                 val="$undef"
8935                 ;;
8936         esac
8937 fi
8938 set d_voidsig
8939 eval $setvar
8940 case "$d_voidsig" in
8941 "$define") signal_t="void";;
8942 *) signal_t="int";;
8943 esac
8944 $rm -f $$.tmp
8945
8946 : check for ability to cast large floats to 32-bit ints.
8947 echo " "
8948 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8949 if $test "$intsize" -ge 4; then
8950         xxx=int
8951 else
8952         xxx=long
8953 fi
8954 $cat >try.c <<EOCP
8955 #include <stdio.h>
8956 #include <sys/types.h>
8957 #include <signal.h>
8958 $signal_t blech(s) int s; { exit(3); }
8959 int main()
8960 {
8961         $xxx i32;
8962         double f, g;
8963         int result = 0;
8964         char str[16];
8965         signal(SIGFPE, blech);
8966
8967         /* Don't let compiler optimize the test away.  Store the number 
8968            in a writable string for gcc to pass to sscanf under HP/UX.
8969         */
8970         sprintf(str, "2147483647");
8971         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8972         g = 10 * f;
8973         i32  = ($xxx) g;
8974
8975         /* x86 processors will probably give 0x8000 0000, which is a
8976        sign change.  We don't want that.  We want to mimic SPARC
8977            behavior here, which is to preserve the sign and give
8978            back 0x7fff ffff.
8979         */
8980         if (i32 != ($xxx) f)
8981                 result |= 1;
8982         exit(result);
8983 }
8984 EOCP
8985 set try
8986 if eval $compile_ok; then
8987         $run ./try
8988         yyy=$?
8989 else
8990         echo "(I can't seem to compile the test program--assuming it can't)"
8991         yyy=1
8992 fi
8993 case "$yyy" in
8994 0)      val="$define"
8995         echo "Yup, it can."
8996         ;;
8997 *)      val="$undef"
8998         echo "Nope, it can't."
8999         ;;
9000 esac
9001 set d_casti32
9002 eval $setvar
9003 $rm -f try try.*
9004
9005 : check for ability to cast negative floats to unsigned
9006 echo " "
9007 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9008 $cat >try.c <<EOCP
9009 #include <stdio.h>
9010 #include <sys/types.h>
9011 #include <signal.h>
9012 $signal_t blech(s) int s; { exit(7); }
9013 $signal_t blech_in_list(s) int s; { exit(4); }
9014 unsigned long dummy_long(p) unsigned long p; { return p; }
9015 unsigned int dummy_int(p) unsigned int p; { return p; }
9016 unsigned short dummy_short(p) unsigned short p; { return p; }
9017 int main()
9018 {
9019         double f;
9020         unsigned long along;
9021         unsigned int aint;
9022         unsigned short ashort;
9023         int result = 0;
9024         char str[16];
9025         
9026         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9027            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9028            optimized the whole file away
9029         */
9030         /* Store the number in a writable string for gcc to pass to 
9031            sscanf under HP/UX.
9032         */
9033         sprintf(str, "-123");
9034         sscanf(str, "%lf", &f);  /* f = -123.; */
9035
9036         signal(SIGFPE, blech);
9037         along = (unsigned long)f;
9038         aint = (unsigned int)f;
9039         ashort = (unsigned short)f;
9040         if (along != (unsigned long)-123)
9041                 result |= 1;
9042         if (aint != (unsigned int)-123)
9043                 result |= 1;
9044         if (ashort != (unsigned short)-123)
9045                 result |= 1;
9046         sprintf(str, "1073741824.");
9047         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9048         f = f + f;
9049         along = 0;
9050         along = (unsigned long)f;
9051         if (along != 0x80000000)
9052                 result |= 2;
9053         f -= 1.;
9054         along = 0;
9055         along = (unsigned long)f;
9056         if (along != 0x7fffffff)
9057                 result |= 1;
9058         f += 2.;
9059         along = 0;
9060         along = (unsigned long)f;
9061         if (along != 0x80000001)
9062                 result |= 2;
9063         if (result)
9064                 exit(result);
9065         signal(SIGFPE, blech_in_list);
9066         sprintf(str, "123.");
9067         sscanf(str, "%lf", &f);  /* f = 123.; */
9068         along = dummy_long((unsigned long)f);
9069         aint = dummy_int((unsigned int)f);
9070         ashort = dummy_short((unsigned short)f);
9071         if (along != (unsigned long)123)
9072                 result |= 4;
9073         if (aint != (unsigned int)123)
9074                 result |= 4;
9075         if (ashort != (unsigned short)123)
9076                 result |= 4;
9077         exit(result);
9078
9079 }
9080 EOCP
9081 set try
9082 if eval $compile_ok; then
9083         $run ./try
9084         castflags=$?
9085 else
9086         echo "(I can't seem to compile the test program--assuming it can't)"
9087         castflags=7
9088 fi
9089 case "$castflags" in
9090 0)      val="$define"
9091         echo "Yup, it can."
9092         ;;
9093 *)      val="$undef"
9094         echo "Nope, it can't."
9095         ;;
9096 esac
9097 set d_castneg
9098 eval $setvar
9099 $rm -f try.*
9100
9101 : see if vprintf exists
9102 echo " "
9103 if set vprintf val -f d_vprintf; eval $csym; $val; then
9104         echo 'vprintf() found.' >&4
9105         val="$define"
9106         $cat >try.c <<'EOF'
9107 #include <varargs.h>
9108
9109 int main() { xxx("foo"); }
9110
9111 xxx(va_alist)
9112 va_dcl
9113 {
9114         va_list args;
9115         char buf[10];
9116
9117         va_start(args);
9118         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9119 }
9120 EOF
9121         set try
9122         if eval $compile && $run ./try; then
9123                 echo "Your vsprintf() returns (int)." >&4
9124                 val2="$undef"
9125         else
9126                 echo "Your vsprintf() returns (char*)." >&4
9127                 val2="$define"
9128         fi
9129 else
9130         echo 'vprintf() NOT found.' >&4
9131                 val="$undef"
9132                 val2="$undef"
9133 fi
9134 $rm -f try try.*
9135 set d_vprintf
9136 eval $setvar
9137 val=$val2
9138 set d_charvspr
9139 eval $setvar
9140
9141 : see if chown exists
9142 set chown d_chown
9143 eval $inlibc
9144
9145 : see if chroot exists
9146 set chroot d_chroot
9147 eval $inlibc
9148
9149 : see if chsize exists
9150 set chsize d_chsize
9151 eval $inlibc
9152
9153 : see if class exists
9154 set class d_class
9155 eval $inlibc
9156
9157 hasstruct='varname=$1; struct=$2; shift; shift;
9158 while $test $# -ge 2; do
9159         case "$1" in
9160         $define) echo "#include <$2>";;
9161         esac ;
9162     shift 2;
9163 done > try.c;
9164 echo "int main () { struct $struct foo; }" >> try.c;
9165 set try;
9166 if eval $compile; then
9167         val="$define";
9168 else
9169         val="$undef";
9170 fi;
9171 set $varname;
9172 eval $setvar;
9173 $rm -f try.c try.o'
9174
9175 : see if sys/types.h has to be included
9176 set sys/types.h i_systypes
9177 eval $inhdr
9178
9179 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9180 while $test $# -ge 2; do
9181         case "$1" in
9182         $define) echo "#include <$2>";;
9183         esac ;
9184     shift 2;
9185 done > try.c;
9186 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9187 set try;
9188 if eval $compile; then
9189         val="$define";
9190 else
9191         val="$undef";
9192 fi;
9193 set $varname;
9194 eval $setvar;
9195 $rm -f try.c try.o'
9196
9197 socketlib=''
9198 sockethdr=''
9199 : see whether socket exists
9200 echo " "
9201 $echo $n "Hmm... $c" >&4
9202 if set socket val -f d_socket; eval $csym; $val; then
9203         echo "Looks like you have Berkeley networking support." >&4
9204         d_socket="$define"
9205         if set setsockopt val -f; eval $csym; $val; then
9206                 d_oldsock="$undef"
9207         else
9208                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9209                 d_oldsock="$define"
9210         fi
9211 else
9212         if $contains socklib libc.list >/dev/null 2>&1; then
9213                 echo "Looks like you have Berkeley networking support." >&4
9214                 d_socket="$define"
9215                 : we will have to assume that it supports the 4.2 BSD interface
9216                 d_oldsock="$undef"
9217         else
9218                 echo "You don't have Berkeley networking in libc$_a..." >&4
9219                 if test "X$d_socket" = "X$define"; then
9220                    echo "...but you seem to believe that you have sockets." >&4
9221                 else
9222                         for net in net socket
9223                         do
9224                                 if test -f /usr/lib/lib$net$_a; then
9225                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9226                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9227                                         if $contains socket libc.list >/dev/null 2>&1; then
9228                                                 d_socket="$define"
9229                                                 socketlib="-l$net"
9230                                                 case "$net" in
9231                                                 net)
9232                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9233                                                         sockethdr="-I/usr/netinclude"
9234                                                         ;;
9235                                                 esac
9236                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9237                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9238                                                         d_oldsock="$undef"
9239                                                 else
9240                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9241                                                         d_oldsock="$define"
9242                                                 fi
9243                                                 break
9244                                         fi
9245                                 fi
9246                         done
9247                         if test "X$d_socket" != "X$define"; then
9248                            echo "or anywhere else I see." >&4
9249                            d_socket="$undef"
9250                            d_oldsock="$undef"
9251                         fi
9252                 fi
9253         fi
9254 fi
9255
9256 : see if socketpair exists
9257 set socketpair d_sockpair
9258 eval $inlibc
9259
9260
9261 echo " "
9262 echo "Checking the availability of certain socket constants..." >& 4
9263 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9264         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9265         $cat >try.c <<EOF
9266 #include <sys/types.h>
9267 #include <sys/socket.h>
9268 int main() {
9269     int i = $ENUM;
9270 }
9271 EOF
9272         val="$undef"
9273         set try; if eval $compile; then
9274                 val="$define"
9275         fi
9276         set d_${enum}; eval $setvar
9277         $rm -f try.c try
9278 done
9279
9280 : see if this is a sys/uio.h system
9281 set sys/uio.h i_sysuio
9282 eval $inhdr
9283
9284
9285 echo " "
9286 echo "Checking to see if your system supports struct cmsghdr..." >&4
9287 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9288 eval $hasstruct
9289 case "$d_cmsghdr_s" in
9290 "$define")      echo "Yes, it does."   ;;
9291 *)              echo "No, it doesn't." ;;
9292 esac
9293
9294
9295 : check for const keyword
9296 echo " "
9297 echo 'Checking to see if your C compiler knows about "const"...' >&4
9298 $cat >const.c <<'EOCP'
9299 typedef struct spug { int drokk; } spug;
9300 int main()
9301 {
9302         const char *foo;
9303         const spug y;
9304 }
9305 EOCP
9306 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9307         val="$define"
9308         echo "Yup, it does."
9309 else
9310         val="$undef"
9311         echo "Nope, it doesn't."
9312 fi
9313 set d_const
9314 eval $setvar
9315
9316 : see if crypt exists
9317 echo " "
9318 if set crypt val -f d_crypt; eval $csym; $val; then
9319         echo 'crypt() found.' >&4
9320         val="$define"
9321         cryptlib=''
9322 else
9323         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9324         if $test -z "$cryptlib"; then
9325                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9326         else
9327                 cryptlib=-lcrypt
9328         fi
9329         if $test -z "$cryptlib"; then
9330                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9331         else
9332                 cryptlib=-lcrypt
9333         fi
9334         if $test -z "$cryptlib"; then
9335                 cryptlib=`./loc libcrypt$_a "" $libpth`
9336         else
9337                 cryptlib=-lcrypt
9338         fi
9339         if $test -z "$cryptlib"; then
9340                 echo 'crypt() NOT found.' >&4
9341                 val="$undef"
9342         else
9343                 val="$define"
9344         fi
9345 fi
9346 set d_crypt
9347 eval $setvar
9348
9349 : get csh whereabouts
9350 case "$csh" in
9351 'csh') val="$undef" ;;
9352 *) val="$define" ;;
9353 esac
9354 set d_csh
9355 eval $setvar
9356 : Respect a hint or command line value for full_csh.
9357 case "$full_csh" in
9358 '') full_csh=$csh ;;
9359 esac
9360
9361 : see if cuserid exists
9362 set cuserid d_cuserid
9363 eval $inlibc
9364
9365 : see if this is a limits.h system
9366 set limits.h i_limits
9367 eval $inhdr
9368
9369 : see if this is a float.h system
9370 set float.h i_float
9371 eval $inhdr
9372
9373 : See if number of significant digits in a double precision number is known
9374 echo " "
9375 $cat >dbl_dig.c <<EOM
9376 #$i_limits I_LIMITS
9377 #$i_float I_FLOAT
9378 #ifdef I_LIMITS
9379 #include <limits.h>
9380 #endif
9381 #ifdef I_FLOAT
9382 #include <float.h>
9383 #endif
9384 #ifdef DBL_DIG
9385 printf("Contains DBL_DIG");
9386 #endif
9387 EOM
9388 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9389 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9390         echo "DBL_DIG found." >&4
9391         val="$define"
9392 else
9393         echo "DBL_DIG NOT found." >&4
9394         val="$undef"
9395 fi
9396 $rm -f dbl_dig.?
9397 set d_dbl_dig
9398 eval $setvar
9399
9400 hasproto='varname=$1; func=$2; shift; shift;
9401 while $test $# -ge 2; do
9402         case "$1" in
9403         $define) echo "#include <$2>";;
9404         esac ;
9405     shift 2;
9406 done > try.c;
9407 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9408 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9409         echo "$func() prototype found.";
9410         val="$define";
9411 else
9412         echo "$func() prototype NOT found.";
9413         val="$undef";
9414 fi;
9415 set $varname;
9416 eval $setvar;
9417 $rm -f try.c tryout.c'
9418
9419 : see if dbm.h is available
9420 : see if dbmclose exists
9421 set dbmclose d_dbmclose
9422 eval $inlibc
9423
9424 case "$d_dbmclose" in
9425 $define)
9426         set dbm.h i_dbm
9427         eval $inhdr
9428         case "$i_dbm" in
9429         $define)
9430                 val="$undef"
9431                 set i_rpcsvcdbm
9432                 eval $setvar
9433                 ;;
9434         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9435                 eval $inhdr
9436                 ;;
9437         esac
9438         ;;
9439 *)      echo "We won't be including <dbm.h>"
9440         val="$undef"
9441         set i_dbm
9442         eval $setvar
9443         val="$undef"
9444         set i_rpcsvcdbm
9445         eval $setvar
9446         ;;
9447 esac
9448
9449 : see if prototype for dbminit is available
9450 echo " "
9451 set d_dbminitproto dbminit $i_dbm dbm.h
9452 eval $hasproto
9453
9454 : see if difftime exists
9455 set difftime d_difftime
9456 eval $inlibc
9457
9458 : see if this is a dirent system
9459 echo " "
9460 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9461         val="$define"
9462         echo "<dirent.h> found." >&4
9463 else
9464         val="$undef"
9465         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9466                 echo "<sys/dir.h> found." >&4
9467                 echo " "
9468         else
9469                 xinc=`./findhdr sys/ndir.h`
9470         fi
9471         echo "<dirent.h> NOT found." >&4
9472 fi
9473 set i_dirent
9474 eval $setvar
9475
9476 : Look for type of directory structure.
9477 echo " "
9478 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9479
9480 case "$direntrytype" in
9481 ''|' ')
9482         case "$i_dirent" in
9483         $define) guess1='struct dirent' ;;
9484         *) guess1='struct direct'  ;;
9485         esac
9486         ;;
9487 *)      guess1="$direntrytype"
9488         ;;
9489 esac
9490
9491 case "$guess1" in
9492 'struct dirent') guess2='struct direct' ;;
9493 *) guess2='struct dirent' ;;
9494 esac
9495                 
9496 if $contains "$guess1" try.c >/dev/null 2>&1; then
9497         direntrytype="$guess1"
9498         echo "Your directory entries are $direntrytype." >&4
9499 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9500         direntrytype="$guess2"
9501         echo "Your directory entries seem to be $direntrytype." >&4
9502 else
9503         echo "I don't recognize your system's directory entries." >&4
9504         rp="What type is used for directory entries on this system?"
9505         dflt="$guess1"
9506         . ./myread
9507         direntrytype="$ans"
9508 fi
9509 $rm -f try.c
9510
9511
9512 : see if the directory entry stores field length
9513 echo " "
9514 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9515 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9516         echo "Good, your directory entry keeps length information in d_namlen." >&4
9517         val="$define"
9518 else
9519         echo "Your directory entry does not know about the d_namlen field." >&4
9520         val="$undef"
9521 fi
9522 set d_dirnamlen
9523 eval $setvar
9524 $rm -f try.c
9525
9526 : see if this is an sysdir system
9527 set sys/dir.h i_sysdir
9528 eval $inhdr
9529
9530 : see if this is an sysndir system
9531 set sys/ndir.h i_sysndir
9532 eval $inhdr
9533
9534 : Look for dirfd
9535 echo " "
9536 $cat >dirfd.c <<EOM
9537 #include <stdio.h>
9538 #$i_dirent I_DIRENT             /**/
9539 #$i_sysdir I_SYS_DIR            /**/
9540 #$i_sysndir I_SYS_NDIR          /**/
9541 #$i_systypes I_SYS_TYPES        /**/
9542 #if defined(I_SYS_TYPES)
9543 #include <sys/types.h>
9544 #endif
9545 #if defined(I_DIRENT)
9546 #include <dirent.h>
9547 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9548 #include <sys/dir.h>
9549 #endif
9550 #else
9551 #ifdef I_SYS_NDIR
9552 #include <sys/ndir.h>
9553 #else
9554 #ifdef I_SYS_DIR
9555 #ifdef hp9000s500
9556 #include <ndir.h>       /* may be wrong in the future */
9557 #else
9558 #include <sys/dir.h>
9559 #endif
9560 #endif
9561 #endif
9562 #endif 
9563 int main() {
9564         DIR *dirp = opendir(".");
9565         if (dirfd(dirp) >= 0)
9566                 exit(0);
9567         else
9568                 exit(1);
9569 }
9570 EOM
9571 set dirfd
9572 if eval $compile; then
9573         val="$define"
9574 fi
9575 case "$val" in
9576 $define)        echo "dirfd() found." >&4       ;;
9577 *)              echo "dirfd() NOT found." >&4   ;;
9578 esac
9579 set d_dirfd
9580 eval $setvar
9581 $rm -f dirfd*
9582
9583 : see if dlerror exists
9584 xxx_runnm="$runnm"
9585 runnm=false
9586 set dlerror d_dlerror
9587 eval $inlibc
9588 runnm="$xxx_runnm"
9589
9590 : see if dlfcn is available
9591 set dlfcn.h i_dlfcn
9592 eval $inhdr
9593
9594 case "$usedl" in
9595 $define|y|true)
9596         $cat << EOM
9597
9598 On a few systems, the dynamically loaded modules that perl generates and uses
9599 will need a different extension than shared libs. The default will probably
9600 be appropriate.
9601
9602 EOM
9603         case "$dlext" in
9604         '')     dflt="$so" ;;
9605         *)      dflt="$dlext" ;;
9606         esac
9607         rp='What is the extension of dynamically loaded modules'
9608         . ./myread
9609         dlext="$ans"
9610         ;;
9611 *)
9612         dlext="none"
9613         ;;
9614 esac
9615
9616 : Check if dlsym need a leading underscore
9617 echo " "
9618 val="$undef"
9619
9620 case "$dlsrc" in
9621 dl_dlopen.xs)
9622         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9623         $cat >dyna.c <<'EOM'
9624 fred () { }
9625 EOM
9626
9627 $cat >fred.c<<EOM
9628
9629 #include <stdio.h>
9630 #$i_dlfcn I_DLFCN
9631 #ifdef I_DLFCN
9632 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9633 #else
9634 #include <sys/types.h>
9635 #include <nlist.h>
9636 #include <link.h>
9637 #endif
9638
9639 extern int fred() ;
9640
9641 int main()
9642 {
9643     void * handle ;
9644     void * symbol ;
9645 #ifndef RTLD_LAZY
9646     int mode = 1 ;
9647 #else
9648     int mode = RTLD_LAZY ;
9649 #endif
9650     handle = dlopen("./dyna.$dlext", mode) ;
9651     if (handle == NULL) {
9652         printf ("1\n") ;
9653         fflush (stdout) ;
9654         exit(0);
9655     }
9656     symbol = dlsym(handle, "fred") ;
9657     if (symbol == NULL) {
9658         /* try putting a leading underscore */
9659         symbol = dlsym(handle, "_fred") ;
9660         if (symbol == NULL) {
9661             printf ("2\n") ;
9662             fflush (stdout) ;
9663             exit(0);
9664         }
9665         printf ("3\n") ;
9666     }
9667     else
9668         printf ("4\n") ;
9669     fflush (stdout) ;
9670     exit(0);
9671 }
9672 EOM
9673         : Call the object file tmp-dyna.o in case dlext=o.
9674         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9675                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9676                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9677                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9678                 xxx=`$run ./fred`
9679                 case $xxx in
9680                 1)      echo "Test program failed using dlopen." >&4
9681                         echo "Perhaps you should not use dynamic loading." >&4;;
9682                 2)      echo "Test program failed using dlsym." >&4
9683                         echo "Perhaps you should not use dynamic loading." >&4;;
9684                 3)      echo "dlsym needs a leading underscore" >&4
9685                         val="$define" ;;
9686                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9687                 esac
9688         else
9689                 echo "I can't compile and run the test program." >&4
9690                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9691         fi
9692         ;;
9693 esac
9694                 
9695 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9696
9697 set d_dlsymun
9698 eval $setvar
9699
9700 : see if prototype for drand48 is available
9701 echo " "
9702 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9703 eval $hasproto
9704
9705 : see if dup2 exists
9706 set dup2 d_dup2
9707 eval $inlibc
9708
9709 : see if eaccess exists
9710 set eaccess d_eaccess
9711 eval $inlibc
9712
9713 : see if endgrent exists
9714 set endgrent d_endgrent
9715 eval $inlibc
9716
9717 : see if endhostent exists
9718 set endhostent d_endhent
9719 eval $inlibc
9720
9721 : see if endnetent exists
9722 set endnetent d_endnent
9723 eval $inlibc
9724
9725 : see if endprotoent exists
9726 set endprotoent d_endpent
9727 eval $inlibc
9728
9729 : see if endpwent exists
9730 set endpwent d_endpwent
9731 eval $inlibc
9732
9733 : see if endservent exists
9734 set endservent d_endsent
9735 eval $inlibc
9736
9737 : Locate the flags for 'open()'
9738 echo " "
9739 $cat >try.c <<'EOCP'
9740 #include <sys/types.h>
9741 #ifdef I_FCNTL
9742 #include <fcntl.h>
9743 #endif
9744 #ifdef I_SYS_FILE
9745 #include <sys/file.h>
9746 #endif
9747 int main() {
9748         if(O_RDONLY);
9749 #ifdef O_TRUNC
9750         exit(0);
9751 #else
9752         exit(1);
9753 #endif
9754 }
9755 EOCP
9756 : check sys/file.h first to get FREAD on Sun
9757 if $test `./findhdr sys/file.h` && \
9758                 set try -DI_SYS_FILE && eval $compile; then
9759         h_sysfile=true;
9760         echo "<sys/file.h> defines the O_* constants..." >&4
9761         if $run ./try; then
9762                 echo "and you have the 3 argument form of open()." >&4
9763                 val="$define"
9764         else
9765                 echo "but not the 3 argument form of open().  Oh, well." >&4
9766                 val="$undef"
9767         fi
9768 elif $test `./findhdr fcntl.h` && \
9769                 set try -DI_FCNTL && eval $compile; then
9770         h_fcntl=true;
9771         echo "<fcntl.h> defines the O_* constants..." >&4
9772         if $run ./try; then
9773                 echo "and you have the 3 argument form of open()." >&4
9774                 val="$define"
9775         else
9776                 echo "but not the 3 argument form of open().  Oh, well." >&4
9777                 val="$undef"
9778         fi
9779 else
9780         val="$undef"
9781         echo "I can't find the O_* constant definitions!  You got problems." >&4
9782 fi
9783 set d_open3
9784 eval $setvar
9785 $rm -f try try.*
9786
9787 : see which of string.h or strings.h is needed
9788 echo " "
9789 strings=`./findhdr string.h`
9790 if $test "$strings" && $test -r "$strings"; then
9791         echo "Using <string.h> instead of <strings.h>." >&4
9792         val="$define"
9793 else
9794         val="$undef"
9795         strings=`./findhdr strings.h`
9796         if $test "$strings" && $test -r "$strings"; then
9797                 echo "Using <strings.h> instead of <string.h>." >&4
9798         else
9799                 echo "No string header found -- You'll surely have problems." >&4
9800         fi
9801 fi
9802 set i_string
9803 eval $setvar
9804 case "$i_string" in
9805 "$undef") strings=`./findhdr strings.h`;;
9806 *)        strings=`./findhdr string.h`;;
9807 esac
9808
9809 : check for non-blocking I/O stuff
9810 case "$h_sysfile" in
9811 true) echo "#include <sys/file.h>" > head.c;;
9812 *)
9813        case "$h_fcntl" in
9814        true) echo "#include <fcntl.h>" > head.c;;
9815        *) echo "#include <sys/fcntl.h>" > head.c;;
9816        esac
9817        ;;
9818 esac
9819 echo " "
9820 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9821 case "$o_nonblock" in
9822 '')
9823         $cat head.c > try.c
9824         $cat >>try.c <<'EOCP'
9825 #include <stdio.h>
9826 #include <stdlib.h>
9827 int main() {
9828 #ifdef O_NONBLOCK
9829         printf("O_NONBLOCK\n");
9830         exit(0);
9831 #endif
9832 #ifdef O_NDELAY
9833         printf("O_NDELAY\n");
9834         exit(0);
9835 #endif
9836 #ifdef FNDELAY
9837         printf("FNDELAY\n");
9838         exit(0);
9839 #endif
9840         exit(0);
9841 }
9842 EOCP
9843         set try
9844         if eval $compile_ok; then
9845                 o_nonblock=`$run ./try`
9846                 case "$o_nonblock" in
9847                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9848                 *) echo "Seems like we can use $o_nonblock.";;
9849                 esac
9850         else
9851                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9852         fi
9853         ;;
9854 *) echo "Using $hint value $o_nonblock.";;
9855 esac
9856 $rm -f try try.* .out core
9857
9858 echo " "
9859 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9860 case "$eagain" in
9861 '')
9862         $cat head.c > try.c
9863         $cat >>try.c <<EOCP
9864 #include <errno.h>
9865 #include <sys/types.h>
9866 #include <signal.h>
9867 #include <stdio.h> 
9868 #include <stdlib.h> 
9869 #define MY_O_NONBLOCK $o_nonblock
9870 #ifndef errno  /* XXX need better Configure test */
9871 extern int errno;
9872 #endif
9873 #$i_unistd I_UNISTD
9874 #ifdef I_UNISTD
9875 #include <unistd.h>
9876 #endif
9877 #$i_string I_STRING
9878 #ifdef I_STRING
9879 #include <string.h>
9880 #else
9881 #include <strings.h>
9882 #endif
9883 $signal_t blech(x) int x; { exit(3); }
9884 EOCP
9885         $cat >> try.c <<'EOCP'
9886 int main()
9887 {
9888         int pd[2];
9889         int pu[2];
9890         char buf[1];
9891         char string[100];
9892
9893         pipe(pd);       /* Down: child -> parent */
9894         pipe(pu);       /* Up: parent -> child */
9895         if (0 != fork()) {
9896                 int ret;
9897                 close(pd[1]);   /* Parent reads from pd[0] */
9898                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9899 #ifdef F_SETFL
9900                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9901                         exit(1);
9902 #else
9903                 exit(4);
9904 #endif
9905                 signal(SIGALRM, blech);
9906                 alarm(5);
9907                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9908                         exit(2);
9909                 sprintf(string, "%d\n", ret);
9910                 write(2, string, strlen(string));
9911                 alarm(0);
9912 #ifdef EAGAIN
9913                 if (errno == EAGAIN) {
9914                         printf("EAGAIN\n");
9915                         goto ok;
9916                 }
9917 #endif
9918 #ifdef EWOULDBLOCK
9919                 if (errno == EWOULDBLOCK)
9920                         printf("EWOULDBLOCK\n");
9921 #endif
9922         ok:
9923                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9924                 sleep(2);                               /* Give it time to close our pipe */
9925                 alarm(5);
9926                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9927                 alarm(0);
9928                 sprintf(string, "%d\n", ret);
9929                 write(3, string, strlen(string));
9930                 exit(0);
9931         }
9932
9933         close(pd[0]);                   /* We write to pd[1] */
9934         close(pu[1]);                   /* We read from pu[0] */
9935         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9936         close(pd[1]);                   /* Pipe pd is now fully closed! */
9937         exit(0);                                /* Bye bye, thank you for playing! */
9938 }
9939 EOCP
9940         set try
9941         if eval $compile_ok; then
9942                 echo "$startsh" >mtry
9943                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9944                 chmod +x mtry
9945                 ./mtry >/dev/null 2>&1
9946                 case $? in
9947                 0) eagain=`$cat try.out`;;
9948                 1) echo "Could not perform non-blocking setting!";;
9949                 2) echo "I did a successful read() for something that was not there!";;
9950                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9951                 4) echo "Could not find F_SETFL!";;
9952                 *) echo "Something terribly wrong happened during testing.";;
9953                 esac
9954                 rd_nodata=`$cat try.ret`
9955                 echo "A read() system call with no data present returns $rd_nodata."
9956                 case "$rd_nodata" in
9957                 0|-1) ;;
9958                 *)
9959                         echo "(That's peculiar, fixing that to be -1.)"
9960                         rd_nodata=-1
9961                         ;;
9962                 esac
9963                 case "$eagain" in
9964                 '')
9965                         echo "Forcing errno EAGAIN on read() with no data available."
9966                         eagain=EAGAIN
9967                         ;;
9968                 *)
9969                         echo "Your read() sets errno to $eagain when no data is available."
9970                         ;;
9971                 esac
9972                 status=`$cat try.err`
9973                 case "$status" in
9974                 0) echo "And it correctly returns 0 to signal EOF.";;
9975                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9976                 *) echo "However, your read() returns '$status' on EOF??";;
9977                 esac
9978                 val="$define"
9979                 if test "$status" = "$rd_nodata"; then
9980                         echo "WARNING: you can't distinguish between EOF and no data!"
9981                         val="$undef"
9982                 fi
9983         else
9984                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9985                 eagain=EAGAIN
9986         fi
9987         set d_eofnblk
9988         eval $setvar
9989         ;;
9990 *)
9991         echo "Using $hint value $eagain."
9992         echo "Your read() returns $rd_nodata when no data is present."
9993         case "$d_eofnblk" in
9994         "$define") echo "And you can see EOF because read() returns 0.";;
9995         "$undef") echo "But you can't see EOF status from read() returned value.";;
9996         *)
9997                 echo "(Assuming you can't see EOF status from read anyway.)"
9998                 d_eofnblk=$undef
9999                 ;;
10000         esac
10001         ;;
10002 esac
10003 $rm -f try try.* .out core head.c mtry
10004
10005 : see if fchdir exists
10006 set fchdir d_fchdir
10007 eval $inlibc
10008
10009 : see if fchmod exists
10010 set fchmod d_fchmod
10011 eval $inlibc
10012
10013 : see if fchown exists
10014 set fchown d_fchown
10015 eval $inlibc
10016
10017 : see if this is an fcntl system
10018 set fcntl d_fcntl
10019 eval $inlibc
10020
10021 echo " "
10022 : See if fcntl-based locking works.
10023 $cat >try.c <<EOCP
10024 #include <stdlib.h>
10025 #include <unistd.h>
10026 #include <fcntl.h>
10027 #include <signal.h>
10028 $signal_t blech(x) int x; { exit(3); }
10029 int main() {
10030 #if defined(F_SETLK) && defined(F_SETLKW)
10031      struct flock flock;
10032      int retval, fd;
10033      fd = open("try.c", O_RDONLY);
10034      flock.l_type = F_RDLCK;
10035      flock.l_whence = SEEK_SET;
10036      flock.l_start = flock.l_len = 0;
10037      signal(SIGALRM, blech);
10038      alarm(10);
10039      retval = fcntl(fd, F_SETLK, &flock);
10040      close(fd);
10041      (retval < 0 ? exit(2) : exit(0));
10042 #else
10043      exit(2);
10044 #endif
10045 }
10046 EOCP
10047 echo "Checking if fcntl-based file locking works... "
10048 case "$d_fcntl" in
10049 "$define")
10050         set try
10051         if eval $compile_ok; then
10052                 if $run ./try; then
10053                         echo "Yes, it seems to work."
10054                         val="$define"
10055                 else
10056                         echo "Nope, it didn't work."
10057                         val="$undef"
10058                         case "$?" in
10059                         3) $cat >&4 <<EOM
10060 ***
10061 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10062 *** This is (almost) impossible.
10063 *** If your NFS lock daemons are not feeling well, something like
10064 *** this may happen, please investigate.  Cannot continue, aborting.
10065 ***
10066 EOM
10067                                 exit 1
10068                                 ;;
10069                         esac
10070                 fi
10071         else
10072                 echo "I'm unable to compile the test program, so I'll assume not."
10073                 val="$undef"
10074         fi
10075         ;;
10076 *) val="$undef";
10077         echo "Nope, since you don't even have fcntl()."
10078         ;;
10079 esac
10080 set d_fcntl_can_lock
10081 eval $setvar
10082 $rm -f try*
10083
10084
10085 : see if sys/select.h has to be included
10086 set sys/select.h i_sysselct
10087 eval $inhdr
10088
10089 : see if we should include time.h, sys/time.h, or both
10090 echo " "
10091 if test "X$timeincl" = X; then
10092         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10093         $echo $n "I'm now running the test program...$c"
10094         $cat >try.c <<'EOCP'
10095 #include <sys/types.h>
10096 #ifdef I_TIME
10097 #include <time.h>
10098 #endif
10099 #ifdef I_SYSTIME
10100 #ifdef SYSTIMEKERNEL
10101 #define KERNEL
10102 #endif
10103 #include <sys/time.h>
10104 #endif
10105 #ifdef I_SYSSELECT
10106 #include <sys/select.h>
10107 #endif
10108 int main()
10109 {
10110         struct tm foo;
10111 #ifdef S_TIMEVAL
10112         struct timeval bar;
10113 #endif
10114 #ifdef S_TIMEZONE
10115         struct timezone tzp;
10116 #endif
10117         if (foo.tm_sec == foo.tm_sec)
10118                 exit(0);
10119 #ifdef S_TIMEVAL
10120         if (bar.tv_sec == bar.tv_sec)
10121                 exit(0);
10122 #endif
10123         exit(1);
10124 }
10125 EOCP
10126         flags=''
10127         for s_timezone in '-DS_TIMEZONE' ''; do
10128         sysselect=''
10129         for s_timeval in '-DS_TIMEVAL' ''; do
10130         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10131         for i_time in '' '-DI_TIME'; do
10132         for i_systime in '-DI_SYSTIME' ''; do
10133                 case "$flags" in
10134                 '') $echo $n ".$c"
10135                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10136                         if eval $compile; then
10137                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10138                                 shift
10139                                 flags="$*"
10140                                 echo " "
10141                                 $echo $n "Succeeded with $flags$c"
10142                         fi
10143                         ;;
10144                 esac
10145         done
10146         done
10147         done
10148         done
10149         done
10150         timeincl=''
10151         echo " "
10152         case "$flags" in
10153         *SYSTIMEKERNEL*) i_systimek="$define"
10154                 timeincl=`./findhdr sys/time.h`
10155                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10156         *) i_systimek="$undef";;
10157         esac
10158         case "$flags" in
10159         *I_TIME*) i_time="$define"
10160                 timeincl=`./findhdr time.h`" $timeincl"
10161                 echo "We'll include <time.h>." >&4;;
10162         *) i_time="$undef";;
10163         esac
10164         case "$flags" in
10165         *I_SYSTIME*) i_systime="$define"
10166                 timeincl=`./findhdr sys/time.h`" $timeincl"
10167                 echo "We'll include <sys/time.h>." >&4;;
10168         *) i_systime="$undef";;
10169         esac
10170         $rm -f try.c try
10171 fi
10172
10173 : check for fd_set items
10174 $cat <<EOM
10175
10176 Checking to see how well your C compiler handles fd_set and friends ...
10177 EOM
10178 $cat >try.c <<EOCP
10179 #$i_systime I_SYS_TIME
10180 #$i_sysselct I_SYS_SELECT
10181 #$d_socket HAS_SOCKET
10182 #include <sys/types.h>
10183 #ifdef HAS_SOCKET
10184 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10185 #endif
10186 #ifdef I_SYS_TIME
10187 #include <sys/time.h>
10188 #endif
10189 #ifdef I_SYS_SELECT
10190 #include <sys/select.h>
10191 #endif
10192 int main() {
10193         fd_set fds;
10194
10195 #ifdef TRYBITS
10196         if(fds.fds_bits);
10197 #endif
10198
10199 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10200         exit(0);
10201 #else
10202         exit(1);
10203 #endif
10204 }
10205 EOCP
10206 set try -DTRYBITS
10207 if eval $compile; then
10208         d_fds_bits="$define"
10209         d_fd_set="$define"
10210         echo "Well, your system knows about the normal fd_set typedef..." >&4
10211         if $run ./try; then
10212                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10213                 d_fd_macros="$define"
10214         else
10215                 $cat >&4 <<'EOM'
10216 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10217 EOM
10218                 d_fd_macros="$undef"
10219         fi
10220 else
10221         $cat <<'EOM'
10222 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10223 EOM
10224         set try
10225         if eval $compile; then
10226                 d_fds_bits="$undef"
10227                 d_fd_set="$define"
10228                 echo "Well, your system has some sort of fd_set available..." >&4
10229                 if $run ./try; then
10230                         echo "and you have the normal fd_set macros." >&4
10231                         d_fd_macros="$define"
10232                 else
10233                         $cat <<'EOM'
10234 but not the normal fd_set macros!  Gross!  More work for me...
10235 EOM
10236                         d_fd_macros="$undef"
10237                 fi
10238         else
10239         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10240                 d_fd_set="$undef"
10241                 d_fds_bits="$undef"
10242                 d_fd_macros="$undef"
10243         fi
10244 fi
10245 $rm -f try try.*
10246
10247 : see if fgetpos exists
10248 set fgetpos d_fgetpos
10249 eval $inlibc
10250
10251 : see if finite exists
10252 set finite d_finite
10253 eval $inlibc
10254
10255 : see if finitel exists
10256 set finitel d_finitel
10257 eval $inlibc
10258
10259 : see if flock exists
10260 set flock d_flock
10261 eval $inlibc
10262
10263 : see if this is a sys/file.h system
10264 val=''
10265 set sys/file.h val
10266 eval $inhdr
10267
10268 : do we need to include sys/file.h ?
10269 case "$val" in
10270 "$define")
10271         echo " "
10272         if $h_sysfile; then
10273                 val="$define"
10274                 echo "We'll be including <sys/file.h>." >&4
10275         else
10276                 val="$undef"
10277                 echo "We won't be including <sys/file.h>." >&4
10278         fi
10279         ;;
10280 *)
10281         h_sysfile=false
10282         ;;
10283 esac
10284 set i_sysfile
10285 eval $setvar
10286
10287 : see if prototype for flock is available
10288 echo " "
10289 set d_flockproto flock $i_sysfile sys/file.h
10290 eval $hasproto
10291
10292 : see if fork exists
10293 set fork d_fork
10294 eval $inlibc
10295
10296 : see if fp_class exists
10297 set fp_class d_fp_class
10298 eval $inlibc
10299
10300 : see if pathconf exists
10301 set pathconf d_pathconf
10302 eval $inlibc
10303
10304 : see if fpathconf exists
10305 set fpathconf d_fpathconf
10306 eval $inlibc
10307
10308 : see if fpclass exists
10309 set fpclass d_fpclass
10310 eval $inlibc
10311
10312 : see if fpclassify exists
10313 set fpclassify d_fpclassify
10314 eval $inlibc
10315
10316 : see if fpclassl exists
10317 set fpclassl d_fpclassl
10318 eval $inlibc
10319
10320
10321 : check for fpos64_t
10322 echo " "
10323 echo "Checking to see if you have fpos64_t..." >&4
10324 $cat >try.c <<EOCP
10325 #include <stdio.h>
10326 int main() { fpos64_t x = 7; }
10327 EOCP
10328 set try
10329 if eval $compile; then
10330         val="$define"
10331         echo "You have fpos64_t."
10332 else
10333         val="$undef"
10334         echo "You do not have fpos64_t."
10335         case "$fpossize" in
10336         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10337         esac
10338 fi
10339 $rm -f try.* try
10340 set d_fpos64_t
10341 eval $setvar
10342
10343 : see if frexpl exists
10344 set frexpl d_frexpl
10345 eval $inlibc
10346
10347 : see if this is a sys/param system
10348 set sys/param.h i_sysparam
10349 eval $inhdr
10350
10351 : see if this is a sys/mount.h system
10352 set sys/mount.h i_sysmount
10353 eval $inhdr
10354
10355
10356 echo " "
10357 echo "Checking to see if your system supports struct fs_data..." >&4
10358 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10359 eval $hasstruct
10360 case "$d_fs_data_s" in
10361 "$define")      echo "Yes, it does."   ;;
10362 *)              echo "No, it doesn't." ;;
10363 esac
10364
10365 : see if fseeko exists
10366 set fseeko d_fseeko
10367 eval $inlibc
10368 case "$longsize" in
10369 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10370 esac
10371
10372 : see if fsetpos exists
10373 set fsetpos d_fsetpos
10374 eval $inlibc
10375
10376
10377 : see if fstatfs exists
10378 set fstatfs d_fstatfs
10379 eval $inlibc
10380
10381
10382 : see if statvfs exists
10383 set statvfs d_statvfs
10384 eval $inlibc
10385
10386 : see if fstatvfs exists
10387 set fstatvfs d_fstatvfs
10388 eval $inlibc
10389
10390
10391 : see if fsync exists
10392 set fsync d_fsync
10393 eval $inlibc
10394
10395 : see if ftello exists
10396 set ftello d_ftello
10397 eval $inlibc
10398 case "$longsize" in
10399 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10400 esac
10401
10402 : see if getcwd exists
10403 set getcwd d_getcwd
10404 eval $inlibc
10405
10406 : see if getespwnam exists
10407 set getespwnam d_getespwnam
10408 eval $inlibc
10409
10410
10411 : see if getfsstat exists
10412 set getfsstat d_getfsstat
10413 eval $inlibc
10414
10415 : see if getgrent exists
10416 set getgrent d_getgrent
10417 eval $inlibc
10418
10419 : see if gethostbyaddr exists
10420 set gethostbyaddr d_gethbyaddr
10421 eval $inlibc
10422
10423 : see if gethostbyname exists
10424 set gethostbyname d_gethbyname
10425 eval $inlibc
10426
10427 : see if gethostent exists
10428 set gethostent d_gethent
10429 eval $inlibc
10430
10431 : see how we will look up host name
10432 echo " "
10433 call=''
10434 if set gethostname val -f d_gethname; eval $csym; $val; then
10435         echo 'gethostname() found.' >&4
10436         d_gethname="$define"
10437         call=gethostname
10438 fi
10439 if set uname val -f d_uname; eval $csym; $val; then
10440         if ./xenix; then
10441                 $cat <<'EOM'
10442 uname() was found, but you're running xenix, and older versions of xenix
10443 have a broken uname(). If you don't really know whether your xenix is old
10444 enough to have a broken system call, use the default answer.
10445
10446 EOM
10447                 dflt=y
10448                 case "$d_uname" in
10449                 "$define") dflt=n;;
10450                 esac
10451                 rp='Is your uname() broken?'
10452                 . ./myread
10453                 case "$ans" in
10454                 n*) d_uname="$define"; call=uname;;
10455                 esac
10456         else
10457                 echo 'uname() found.' >&4
10458                 d_uname="$define"
10459                 case "$call" in
10460                 '') call=uname ;;
10461                 esac
10462         fi
10463 fi
10464 case "$d_gethname" in
10465 '') d_gethname="$undef";;
10466 esac
10467 case "$d_uname" in
10468 '') d_uname="$undef";;
10469 esac
10470 case "$d_uname$d_gethname" in
10471 *define*)
10472         dflt=n
10473         cat <<EOM
10474  
10475 Every now and then someone has a $call() that lies about the hostname
10476 but can't be fixed for political or economic reasons.  If you wish, I can
10477 pretend $call() isn't there and maybe compute hostname at run-time
10478 thanks to the '$phostname' command.
10479
10480 EOM
10481         rp="Shall I ignore $call() from now on?"
10482         . ./myread
10483         case "$ans" in
10484         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10485         esac;;
10486 esac
10487 case "$phostname" in
10488 '') aphostname='';;
10489 *) case "$aphostname" in
10490         /*) ;;
10491         *) set X $phostname
10492                 shift
10493                 file=$1
10494                 shift
10495                 file=`./loc $file $file $pth`
10496                 aphostname=`echo $file $*`
10497                 ;;
10498         esac
10499         ;;
10500 esac
10501 case "$d_uname$d_gethname" in
10502 *define*) ;;
10503 *)
10504         case "$phostname" in
10505         '')
10506                 echo "There will be no way for $package to get your hostname." >&4;;
10507         *)
10508         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10509                 ;;
10510         esac;;
10511 esac
10512 case "$d_phostname" in
10513 '') d_phostname="$undef";;
10514 esac
10515
10516 : see if this is a netdb.h system
10517 set netdb.h i_netdb
10518 eval $inhdr
10519
10520 : see if prototypes for various gethostxxx netdb.h functions are available
10521 echo " "
10522 set d_gethostprotos gethostent $i_netdb netdb.h
10523 eval $hasproto
10524
10525 : see if getitimer exists
10526 set getitimer d_getitimer
10527 eval $inlibc
10528
10529 : see if getlogin exists
10530 set getlogin d_getlogin
10531 eval $inlibc
10532
10533 : see if getmnt exists
10534 set getmnt d_getmnt
10535 eval $inlibc
10536
10537 : see if getmntent exists
10538 set getmntent d_getmntent
10539 eval $inlibc
10540
10541 : see if getnetbyaddr exists
10542 set getnetbyaddr d_getnbyaddr
10543 eval $inlibc
10544
10545 : see if getnetbyname exists
10546 set getnetbyname d_getnbyname
10547 eval $inlibc
10548
10549 : see if getnetent exists
10550 set getnetent d_getnent
10551 eval $inlibc
10552
10553 : see if prototypes for various getnetxxx netdb.h functions are available
10554 echo " "
10555 set d_getnetprotos getnetent $i_netdb netdb.h
10556 eval $hasproto
10557
10558 : see if getpagesize exists
10559 set getpagesize d_getpagsz
10560 eval $inlibc
10561
10562
10563 : see if getprotobyname exists
10564 set getprotobyname d_getpbyname
10565 eval $inlibc
10566
10567 : see if getprotobynumber exists
10568 set getprotobynumber d_getpbynumber
10569 eval $inlibc
10570
10571 : see if getprotoent exists
10572 set getprotoent d_getpent
10573 eval $inlibc
10574
10575 : see if getpgid exists
10576 set getpgid d_getpgid
10577 eval $inlibc
10578
10579 : see if getpgrp2 exists
10580 set getpgrp2 d_getpgrp2
10581 eval $inlibc
10582
10583 : see if getppid exists
10584 set getppid d_getppid
10585 eval $inlibc
10586
10587 : see if getpriority exists
10588 set getpriority d_getprior
10589 eval $inlibc
10590
10591 : see if prototypes for various getprotoxxx netdb.h functions are available
10592 echo " "
10593 set d_getprotoprotos getprotoent $i_netdb netdb.h
10594 eval $hasproto
10595
10596 : see if getprpwnam exists
10597 set getprpwnam d_getprpwnam
10598 eval $inlibc
10599
10600 : see if getpwent exists
10601 set getpwent d_getpwent
10602 eval $inlibc
10603
10604
10605 : see if getservbyname exists
10606 set getservbyname d_getsbyname
10607 eval $inlibc
10608
10609 : see if getservbyport exists
10610 set getservbyport d_getsbyport
10611 eval $inlibc
10612
10613 : see if getservent exists
10614 set getservent d_getsent
10615 eval $inlibc
10616
10617 : see if prototypes for various getservxxx netdb.h functions are available
10618 echo " "
10619 set d_getservprotos getservent $i_netdb netdb.h
10620 eval $hasproto
10621
10622 : see if getspnam exists
10623 set getspnam d_getspnam
10624 eval $inlibc
10625
10626 : see if gettimeofday or ftime exists
10627 set gettimeofday d_gettimeod
10628 eval $inlibc
10629 case "$d_gettimeod" in
10630 "$undef")
10631         set ftime d_ftime 
10632         eval $inlibc
10633         ;;
10634 *)
10635         val="$undef"; set d_ftime; eval $setvar
10636         ;;
10637 esac
10638 case "$d_gettimeod$d_ftime" in
10639 "$undef$undef")
10640         echo " "
10641         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10642         ;;
10643 esac
10644
10645 : see if this is an grp system
10646 set grp.h i_grp
10647 eval $inhdr
10648
10649 case "$i_grp" in
10650 $define)
10651         xxx=`./findhdr grp.h`
10652         $cppstdin $cppflags $cppminus < $xxx >$$.h
10653
10654         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10655                 val="$define"
10656         else
10657                 val="$undef"
10658         fi
10659         set d_grpasswd
10660         eval $setvar
10661
10662         $rm -f $$.h
10663         ;;
10664 *)
10665         val="$undef";
10666         set d_grpasswd; eval $setvar
10667         ;;
10668 esac
10669
10670 : see if hasmntopt exists
10671 set hasmntopt d_hasmntopt
10672 eval $inlibc
10673
10674 : see if this is a netinet/in.h or sys/in.h system
10675 set netinet/in.h i_niin sys/in.h i_sysin
10676 eval $inhdr
10677
10678 : see if arpa/inet.h has to be included
10679 set arpa/inet.h i_arpainet
10680 eval $inhdr
10681
10682 : see if htonl --and friends-- exists
10683 val=''
10684 set htonl val
10685 eval $inlibc
10686
10687 : Maybe they are macros.
10688 case "$val" in
10689 $undef)
10690         $cat >htonl.c <<EOM
10691 #include <stdio.h>
10692 #include <sys/types.h>
10693 #$i_niin I_NETINET_IN
10694 #$i_sysin I_SYS_IN
10695 #$i_arpainet I_ARPA_INET
10696 #ifdef I_NETINET_IN
10697 #include <netinet/in.h>
10698 #endif
10699 #ifdef I_SYS_IN
10700 #include <sys/in.h>
10701 #endif
10702 #ifdef I_ARPA_INET
10703 #include <arpa/inet.h>
10704 #endif
10705 #ifdef htonl
10706 printf("Defined as a macro.");
10707 #endif
10708 EOM
10709         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10710         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10711                 val="$define"
10712                 echo "But it seems to be defined as a macro." >&4
10713         fi
10714         $rm -f htonl.?
10715         ;;
10716 esac
10717 set d_htonl
10718 eval $setvar
10719
10720 : index or strchr
10721 echo " "
10722 if set index val -f; eval $csym; $val; then
10723         if set strchr val -f d_strchr; eval $csym; $val; then
10724                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10725                         val="$define"
10726                         vali="$undef"
10727                         echo "strchr() found." >&4
10728                 else
10729                         val="$undef"
10730                         vali="$define"
10731                         echo "index() found." >&4
10732                 fi
10733         else
10734                 val="$undef"
10735                 vali="$define"
10736                 echo "index() found." >&4
10737         fi
10738 else
10739         if set strchr val -f d_strchr; eval $csym; $val; then
10740                 val="$define"
10741                 vali="$undef"
10742                 echo "strchr() found." >&4
10743         else
10744                 echo "No index() or strchr() found!" >&4
10745                 val="$undef"
10746                 vali="$undef"
10747         fi
10748 fi
10749 set d_strchr; eval $setvar
10750 val="$vali"
10751 set d_index; eval $setvar
10752
10753 : check whether inet_aton exists
10754 set inet_aton d_inetaton
10755 eval $inlibc
10756
10757 : Look for isascii
10758 echo " "
10759 $cat >isascii.c <<'EOCP'
10760 #include <stdio.h>
10761 #include <ctype.h>
10762 int main() {
10763         int c = 'A';
10764         if (isascii(c))
10765                 exit(0);
10766         else
10767                 exit(1);
10768 }
10769 EOCP
10770 set isascii
10771 if eval $compile; then
10772         echo "isascii() found." >&4
10773         val="$define"
10774 else
10775         echo "isascii() NOT found." >&4
10776         val="$undef"
10777 fi
10778 set d_isascii
10779 eval $setvar
10780 $rm -f isascii*
10781
10782 : see if isfinite exists
10783 set isfinite d_isfinite
10784 eval $inlibc
10785
10786 : see if isinf exists
10787 set isinf d_isinf
10788 eval $inlibc
10789
10790 : see if isnan exists
10791 set isnan d_isnan
10792 eval $inlibc
10793
10794 : see if isnanl exists
10795 set isnanl d_isnanl
10796 eval $inlibc
10797
10798 : see if killpg exists
10799 set killpg d_killpg
10800 eval $inlibc
10801
10802 : see if lchown exists
10803 echo " "
10804 $cat > try.c <<'EOCP'
10805 /* System header to define __stub macros and hopefully few prototypes,
10806     which can conflict with char lchown(); below.  */
10807 #include <assert.h>
10808 /* Override any gcc2 internal prototype to avoid an error.  */
10809 /* We use char because int might match the return type of a gcc2
10810    builtin and then its argument prototype would still apply.  */
10811 char lchown();
10812 int main() {
10813     /*  The GNU C library defines this for functions which it implements
10814         to always fail with ENOSYS.  Some functions are actually named
10815         something starting with __ and the normal name is an alias.  */
10816 #if defined (__stub_lchown) || defined (__stub___lchown)
10817 choke me
10818 #else
10819 lchown();
10820 #endif
10821 ; return 0; }
10822 EOCP
10823 set try
10824 if eval $compile; then
10825     $echo "lchown() found." >&4
10826     val="$define"
10827 else
10828     $echo "lchown() NOT found." >&4
10829     val="$undef"
10830 fi
10831 set d_lchown
10832 eval $setvar
10833
10834 : See if number of significant digits in a double precision number is known
10835 echo " "
10836 $cat >ldbl_dig.c <<EOM
10837 #$i_limits I_LIMITS
10838 #$i_float I_FLOAT
10839 #ifdef I_LIMITS
10840 #include <limits.h>
10841 #endif
10842 #ifdef I_FLOAT
10843 #include <float.h>
10844 #endif
10845 #ifdef LDBL_DIG
10846 printf("Contains LDBL_DIG");
10847 #endif
10848 EOM
10849 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10850 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10851         echo "LDBL_DIG found." >&4
10852         val="$define"
10853 else
10854         echo "LDBL_DIG NOT found." >&4
10855         val="$undef"
10856 fi
10857 $rm -f ldbl_dig.?
10858 set d_ldbl_dig
10859 eval $setvar
10860
10861 : see if link exists
10862 set link d_link
10863 eval $inlibc
10864
10865 : see if localeconv exists
10866 set localeconv d_locconv
10867 eval $inlibc
10868
10869 : see if lockf exists
10870 set lockf d_lockf
10871 eval $inlibc
10872
10873 : see if prototype for lseek is available
10874 echo " "
10875 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10876 eval $hasproto
10877
10878 : see if lstat exists
10879 set lstat d_lstat
10880 eval $inlibc
10881
10882 : see if madvise exists
10883 set madvise d_madvise
10884 eval $inlibc
10885
10886 : see if mblen exists
10887 set mblen d_mblen
10888 eval $inlibc
10889
10890 : see if mbstowcs exists
10891 set mbstowcs d_mbstowcs
10892 eval $inlibc
10893
10894 : see if mbtowc exists
10895 set mbtowc d_mbtowc
10896 eval $inlibc
10897
10898 : see if memchr exists
10899 set memchr d_memchr
10900 eval $inlibc
10901
10902 : see if memcmp exists
10903 set memcmp d_memcmp
10904 eval $inlibc
10905
10906 : see if memcpy exists
10907 set memcpy d_memcpy
10908 eval $inlibc
10909
10910 : see if memmove exists
10911 set memmove d_memmove
10912 eval $inlibc
10913
10914 : see if memset exists
10915 set memset d_memset
10916 eval $inlibc
10917
10918 : see if mkdir exists
10919 set mkdir d_mkdir
10920 eval $inlibc
10921
10922 : see if mkdtemp exists
10923 set mkdtemp d_mkdtemp
10924 eval $inlibc
10925
10926 : see if mkfifo exists
10927 set mkfifo d_mkfifo
10928 eval $inlibc
10929
10930 : see if mkstemp exists
10931 set mkstemp d_mkstemp
10932 eval $inlibc
10933
10934 : see if mkstemps exists
10935 set mkstemps d_mkstemps
10936 eval $inlibc
10937
10938 : see if mktime exists
10939 set mktime d_mktime
10940 eval $inlibc
10941
10942 : see if this is a sys/mman.h system
10943 set sys/mman.h i_sysmman
10944 eval $inhdr
10945
10946 : see if mmap exists
10947 set mmap d_mmap
10948 eval $inlibc
10949 : see what shmat returns
10950 : default to something harmless
10951 mmaptype='void *'
10952 case "$i_sysmman$d_mmap" in
10953 "$define$define")
10954         $cat >mmap.c <<'END'
10955 #include <sys/mman.h>
10956 void *mmap();
10957 END
10958         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10959                 mmaptype='void *'
10960         else
10961                 mmaptype='caddr_t'
10962         fi
10963         echo "and it returns ($mmaptype)." >&4
10964         ;;
10965 esac
10966
10967
10968
10969 : see if modfl exists
10970 set modfl d_modfl
10971 eval $inlibc
10972
10973 d_modfl_pow32_bug="$undef"
10974
10975 case "$d_longdbl$d_modfl" in
10976 $define$define)
10977         $cat <<EOM
10978 Checking to see whether your modfl() is okay for large values...
10979 EOM
10980 $cat >try.c <<EOCP
10981 #include <math.h> 
10982 #include <stdio.h>
10983 int main() {
10984     long double nv = 4294967303.15;
10985     long double v, w;
10986     v = modfl(nv, &w);         
10987 #ifdef __GLIBC__
10988     printf("glibc");
10989 #endif
10990     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10991     return 0;
10992 }
10993 EOCP
10994         case "$osname:$gccversion" in
10995         aix:)   saveccflags="$ccflags"
10996                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10997         esac
10998         set try
10999         if eval $compile; then
11000                 foo=`$run ./try`
11001                 case "$foo" in
11002                 *" 4294967303.150000 1.150000 4294967302.000000")
11003                         echo >&4 "Your modfl() is broken for large values."
11004                         d_modfl_pow32_bug="$define"
11005                         case "$foo" in
11006                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11007                         ;;
11008                         esac
11009                         ;;
11010                 *" 4294967303.150000 0.150000 4294967303.000000")
11011                         echo >&4 "Your modfl() seems okay for large values."
11012                         ;;
11013                 *)      echo >&4 "I don't understand your modfl() at all."
11014                         d_modfl="$undef"
11015                         ;;
11016                 esac
11017                 $rm -f try.* try core core.try.*
11018         else
11019                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11020                 d_modfl="$undef"
11021         fi
11022         case "$osname:$gccversion" in
11023         aix:)   ccflags="$saveccflags" ;; # restore
11024         esac
11025         ;;
11026 esac
11027
11028 : see if mprotect exists
11029 set mprotect d_mprotect
11030 eval $inlibc
11031
11032 : see if msgctl exists
11033 set msgctl d_msgctl
11034 eval $inlibc
11035
11036 : see if msgget exists
11037 set msgget d_msgget
11038 eval $inlibc
11039
11040 : see if msgsnd exists
11041 set msgsnd d_msgsnd
11042 eval $inlibc
11043
11044 : see if msgrcv exists
11045 set msgrcv d_msgrcv
11046 eval $inlibc
11047
11048 : see how much of the 'msg*(2)' library is present.
11049 h_msg=true
11050 echo " "
11051 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11052 *"$undef"*) h_msg=false;;
11053 esac
11054 case "$osname" in
11055 freebsd)
11056     case "`ipcs 2>&1`" in
11057     "SVID messages"*"not configured"*)
11058         echo "Your $osname does not have the msg*(2) configured." >&4
11059         h_msg=false
11060         val="$undef"
11061         set msgctl d_msgctl
11062         eval $setvar
11063         set msgget d_msgget
11064         eval $setvar
11065         set msgsnd d_msgsnd
11066         eval $setvar
11067         set msgrcv d_msgrcv
11068         eval $setvar
11069         ;;
11070     esac
11071     ;;
11072 esac
11073 : we could also check for sys/ipc.h ...
11074 if $h_msg && $test `./findhdr sys/msg.h`; then
11075         echo "You have the full msg*(2) library." >&4
11076         val="$define"
11077 else
11078         echo "You don't have the full msg*(2) library." >&4
11079         val="$undef"
11080 fi
11081 set d_msg
11082 eval $setvar
11083
11084
11085 echo " "
11086 echo "Checking to see if your system supports struct msghdr..." >&4
11087 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11088 eval $hasstruct
11089 case "$d_msghdr_s" in
11090 "$define")      echo "Yes, it does."   ;;
11091 *)              echo "No, it doesn't." ;;
11092 esac
11093
11094
11095 : see if msync exists
11096 set msync d_msync
11097 eval $inlibc
11098
11099 : see if munmap exists
11100 set munmap d_munmap
11101 eval $inlibc
11102
11103 : see if nice exists
11104 set nice d_nice
11105 eval $inlibc
11106
11107 : see if this is a langinfo.h system
11108 set langinfo.h i_langinfo
11109 eval $inhdr
11110
11111 : see if nl_langinfo exists
11112 set nl_langinfo d_nl_langinfo
11113 eval $inlibc
11114
11115 : check for length of character
11116 echo " "
11117 case "$charsize" in
11118 '')
11119         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11120         $cat >try.c <<'EOCP'
11121 #include <stdio.h>
11122 int main()
11123 {
11124     printf("%d\n", (int)sizeof(char));
11125     exit(0);
11126 }
11127 EOCP
11128         set try
11129         if eval $compile_ok; then
11130                 dflt=`$run ./try`
11131         else
11132                 dflt='1'
11133                 echo "(I can't seem to compile the test program.  Guessing...)"
11134         fi
11135         ;;
11136 *)
11137         dflt="$charsize"
11138         ;;
11139 esac
11140 rp="What is the size of a character (in bytes)?"
11141 . ./myread
11142 charsize="$ans"
11143 $rm -f try.c try
11144
11145 : check for volatile keyword
11146 echo " "
11147 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11148 $cat >try.c <<'EOCP'
11149 int main()
11150 {
11151         typedef struct _goo_struct goo_struct;
11152         goo_struct * volatile goo = ((goo_struct *)0);
11153         struct _goo_struct {
11154                 long long_int;
11155                 int reg_int;
11156                 char char_var;
11157         };
11158         typedef unsigned short foo_t;
11159         char *volatile foo;
11160         volatile int bar;
11161         volatile foo_t blech;
11162         foo = foo;
11163 }
11164 EOCP
11165 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11166         val="$define"
11167         echo "Yup, it does."
11168 else
11169         val="$undef"
11170         echo "Nope, it doesn't."
11171 fi
11172 set d_volatile
11173 eval $setvar
11174 $rm -f try.*
11175
11176
11177 echo " "
11178 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11179
11180 case "$use64bitint:$d_quad:$quadtype" in
11181 define:define:?*)
11182         ivtype="$quadtype"
11183         uvtype="$uquadtype"
11184         ivsize=8
11185         uvsize=8
11186         ;;
11187 *)      ivtype="long"
11188         uvtype="unsigned long"
11189         ivsize=$longsize
11190         uvsize=$longsize
11191         ;;
11192 esac
11193
11194 case "$uselongdouble:$d_longdbl" in
11195 define:define)
11196         nvtype="long double"
11197         nvsize=$longdblsize
11198         ;;
11199 *)      nvtype=double
11200         nvsize=$doublesize
11201         ;;
11202 esac
11203
11204 $echo "(IV will be "$ivtype", $ivsize bytes)"
11205 $echo "(UV will be "$uvtype", $uvsize bytes)"
11206 $echo "(NV will be "$nvtype", $nvsize bytes)"
11207
11208 $cat >try.c <<EOCP
11209 #$i_inttypes I_INTTYPES
11210 #ifdef I_INTTYPES
11211 #include <inttypes.h>
11212 #endif
11213 #include <stdio.h>
11214 int main() {
11215 #ifdef INT8
11216    int8_t i =  INT8_MAX;
11217   uint8_t u = UINT8_MAX;
11218   printf("int8_t\n");
11219 #endif
11220 #ifdef INT16
11221    int16_t i =  INT16_MAX;
11222   uint16_t i = UINT16_MAX;
11223   printf("int16_t\n");
11224 #endif
11225 #ifdef INT32
11226    int32_t i =  INT32_MAX;
11227   uint32_t u = UINT32_MAX;
11228   printf("int32_t\n");
11229 #endif
11230 }
11231 EOCP
11232
11233 case "$i8type" in
11234 '')     case "$charsize" in
11235         1)      i8type=char
11236                 u8type="unsigned char"
11237                 i8size=$charsize
11238                 u8size=$charsize
11239                 ;;
11240         esac
11241         ;;
11242 esac
11243 case "$i8type" in
11244 '')     set try -DINT8
11245         if eval $compile; then
11246                 case "`$run ./try`" in
11247                 int8_t) i8type=int8_t
11248                         u8type=uint8_t
11249                         i8size=1
11250                         u8size=1
11251                         ;;
11252                 esac
11253         fi
11254         ;;
11255 esac
11256 case "$i8type" in
11257 '')     if $test $charsize -ge 1; then
11258                 i8type=char
11259                 u8type="unsigned char"
11260                 i8size=$charsize
11261                 u8size=$charsize
11262         fi
11263         ;;
11264 esac
11265
11266 case "$i16type" in
11267 '')     case "$shortsize" in
11268         2)      i16type=short
11269                 u16type="unsigned short"
11270                 i16size=$shortsize
11271                 u16size=$shortsize
11272                 ;;
11273         esac
11274         ;;
11275 esac
11276 case "$i16type" in
11277 '')     set try -DINT16
11278         if eval $compile; then
11279                 case "`$run ./try`" in
11280                 int16_t)
11281                         i16type=int16_t
11282                         u16type=uint16_t
11283                         i16size=2
11284                         u16size=2
11285                         ;;
11286                 esac
11287         fi
11288         ;;
11289 esac
11290 case "$i16type" in
11291 '')     if $test $shortsize -ge 2; then
11292                 i16type=short
11293                 u16type="unsigned short"
11294                 i16size=$shortsize
11295                 u16size=$shortsize
11296         fi
11297         ;;
11298 esac
11299
11300 case "$i32type" in
11301 '')     case "$longsize" in
11302         4)      i32type=long
11303                 u32type="unsigned long"
11304                 i32size=$longsize
11305                 u32size=$longsize
11306                 ;;
11307         *)      case "$intsize" in
11308                 4)      i32type=int
11309                         u32type="unsigned int"
11310                         i32size=$intsize
11311                         u32size=$intsize
11312                         ;;
11313                 esac
11314                 ;;
11315         esac
11316         ;;
11317 esac
11318 case "$i32type" in
11319 '')     set try -DINT32
11320         if eval $compile; then
11321                 case "`$run ./try`" in
11322                 int32_t)
11323                         i32type=int32_t
11324                         u32type=uint32_t
11325                         i32size=4
11326                         u32size=4
11327                         ;;
11328                 esac
11329         fi
11330         ;;
11331 esac
11332 case "$i32type" in
11333 '')     if $test $intsize -ge 4; then
11334                 i32type=int
11335                 u32type="unsigned int"
11336                 i32size=$intsize
11337                 u32size=$intsize
11338         fi
11339         ;;
11340 esac
11341
11342 case "$i64type" in
11343 '')     case "$d_quad:$quadtype" in
11344         define:?*)
11345                 i64type="$quadtype"
11346                 u64type="$uquadtype"
11347                 i64size=8
11348                 u64size=8
11349                 ;;
11350         esac
11351         ;;
11352 esac
11353
11354 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11355 : volatile so that the compiler has to store it out to memory.
11356 if test X"$d_volatile" = X"$define"; then
11357         volatile=volatile
11358 fi
11359 $cat <<EOP >try.c
11360 #include <stdio.h>
11361 #include <sys/types.h>
11362 #include <signal.h>
11363 #ifdef SIGFPE
11364 $volatile int bletched = 0;
11365 $signal_t blech(s) int s; { bletched = 1; }
11366 #endif
11367 int main() {
11368     $uvtype u = 0;
11369     $nvtype d;
11370     int     n = 8 * $uvsize;
11371     int     i;
11372 #ifdef SIGFPE
11373     signal(SIGFPE, blech);
11374 #endif
11375
11376     for (i = 0; i < n; i++) {
11377       u = u << 1 | ($uvtype)1;
11378       d = ($nvtype)u;
11379       if (($uvtype)d != u)
11380         break;
11381       if (d <= 0)
11382         break;
11383       d = ($nvtype)(u - 1);
11384       if (($uvtype)d != (u - 1))
11385         break;
11386 #ifdef SIGFPE
11387       if (bletched) {
11388         break;
11389 #endif
11390       } 
11391     }
11392     printf("%d\n", ((i == n) ? -n : i));
11393     exit(0);
11394 }
11395 EOP
11396 set try
11397
11398 d_nv_preserves_uv="$undef"
11399 if eval $compile; then
11400         d_nv_preserves_uv_bits="`$run ./try`"
11401 fi
11402 case "$d_nv_preserves_uv_bits" in
11403 \-[1-9]*)       
11404         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11405         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11406         d_nv_preserves_uv="$define"
11407         ;;
11408 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11409         d_nv_preserves_uv="$undef" ;;
11410 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11411         d_nv_preserves_uv_bits="$undef" ;;
11412 esac
11413
11414 $rm -f try.* try
11415
11416
11417 : check for off64_t
11418 echo " "
11419 echo "Checking to see if you have off64_t..." >&4
11420 $cat >try.c <<EOCP
11421 #include <sys/types.h>
11422 #include <unistd.h>
11423 int main() { off64_t x = 7; }
11424 EOCP
11425 set try
11426 if eval $compile; then
11427         val="$define"
11428         echo "You have off64_t."
11429 else
11430         val="$undef"
11431         echo "You do not have off64_t."
11432         case "$lseeksize" in
11433         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11434         esac
11435 fi
11436 $rm -f try.* try
11437 set d_off64_t
11438 eval $setvar
11439
11440 : see if POSIX threads are available
11441 set pthread.h i_pthread
11442 eval $inhdr
11443
11444
11445
11446
11447 : how to create joinable pthreads
11448 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11449         echo " "
11450         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11451         $cat >try.c <<'EOCP'
11452 #include <pthread.h>
11453 int main() {
11454     int detachstate = JOINABLE;
11455 }
11456 EOCP
11457         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11458         if eval $compile; then
11459                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11460                 val="$undef" # Yes, undef.
11461                 set d_old_pthread_create_joinable
11462                 eval $setvar
11463                 val=""
11464                 set old_pthread_create_joinable
11465                 eval $setvar
11466         else
11467                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11468                 if eval $compile; then
11469                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11470                         val="$define"
11471                         set d_old_pthread_create_joinable
11472                         eval $setvar
11473                         val=PTHREAD_CREATE_UNDETACHED
11474                         set old_pthread_create_joinable
11475                         eval $setvar
11476                 else            
11477                         set try -DJOINABLE=__UNDETACHED
11478                         if eval $compile; then
11479                                 echo "You seem to use __UNDETACHED." >&4
11480                                 val="$define"
11481                                 set d_old_pthread_create_joinable
11482                                 eval $setvar
11483                                 val=__UNDETACHED
11484                                 set old_pthread_create_joinable
11485                                 eval $setvar
11486                         else
11487                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11488                                 val="$define"
11489                                 set d_old_pthread_create_joinable
11490                                 eval $setvar
11491                                 val=0
11492                                 set old_pthread_create_joinable
11493                                 eval $setvar
11494                         fi
11495                 fi
11496         fi
11497         $rm -f try try.*
11498 else
11499     d_old_pthread_create_joinable="$undef"
11500     old_pthread_create_joinable=""
11501 fi
11502
11503 : see if pause exists
11504 set pause d_pause
11505 eval $inlibc
11506
11507 : see if pipe exists
11508 set pipe d_pipe
11509 eval $inlibc
11510
11511 : see if poll exists
11512 set poll d_poll
11513 eval $inlibc
11514
11515 : see if readlink exists
11516 set readlink d_readlink
11517 eval $inlibc
11518
11519 echo " "
11520 procselfexe=''
11521 val="$undef"
11522 case "$d_readlink" in
11523 "$define")
11524         if $issymlink /proc/self/exe ; then
11525                 $ls -l /proc/self/exe > reflect
11526                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11527                         echo "You have Linux-like /proc/self/exe."
11528                         procselfexe='"/proc/self/exe"'
11529                         val="$define"
11530                 fi
11531         fi
11532         if $issymlink /proc/curproc/file ; then
11533                 $ls -l /proc/curproc/file > reflect
11534                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11535                         echo "You have BSD-like /proc/curproc/file."
11536                         procselfexe='"/proc/curproc/file"'
11537                         val="$define"
11538                 fi
11539         fi
11540         ;;
11541 esac
11542 $rm -f reflect
11543 set d_procselfexe
11544 eval $setvar
11545
11546 : see if pthread_atfork exists
11547 set pthread_atfork d_pthread_atfork
11548 eval $inlibc
11549
11550
11551 : see whether the various POSIXish _yields exist
11552 $cat >try.c <<EOP
11553 #include <pthread.h>
11554 #include <stdio.h>
11555 int main() {
11556 #ifdef SCHED_YIELD
11557         sched_yield();
11558 #else
11559 #ifdef PTHREAD_YIELD
11560         pthread_yield();
11561 #else
11562 #ifdef PTHREAD_YIELD_NULL
11563         pthread_yield(NULL);
11564 #endif
11565 #endif
11566 #endif
11567 }
11568 EOP
11569 : see if sched_yield exists
11570 set try -DSCHED_YIELD
11571 if eval $compile; then
11572     val="$define"
11573     sched_yield='sched_yield()'
11574 else
11575     val="$undef"
11576 fi
11577 case "$usethreads" in
11578 $define)
11579         case "$val" in
11580         $define) echo 'sched_yield() found.' >&4        ;;
11581         *)       echo 'sched_yield() NOT found.' >&4    ;;
11582         esac
11583 esac
11584 set d_sched_yield
11585 eval $setvar
11586
11587 : see if pthread_yield exists
11588 set try -DPTHREAD_YIELD
11589 if eval $compile; then
11590     val="$define"
11591     case "$sched_yield" in
11592     '') sched_yield='pthread_yield()' ;;
11593     esac
11594 else
11595     set try -DPTHREAD_YIELD_NULL
11596     if eval $compile; then
11597         val="$define"
11598         case "$sched_yield" in
11599         '') sched_yield='pthread_yield(NULL)' ;;
11600         esac
11601     else
11602         val="$undef"
11603     fi
11604 fi
11605 case "$usethreads" in
11606 $define)
11607         case "$val" in
11608         $define) echo 'pthread_yield() found.' >&4      ;;
11609         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11610         esac
11611         ;;
11612 esac
11613 set d_pthread_yield
11614 eval $setvar
11615
11616 case "$sched_yield" in
11617 '') sched_yield=undef ;;
11618 esac
11619
11620 $rm -f try try.*
11621
11622 : see if this is a pwd.h system
11623 set pwd.h i_pwd
11624 eval $inhdr
11625
11626 case "$i_pwd" in
11627 $define)
11628         xxx=`./findhdr pwd.h`
11629         $cppstdin $cppflags $cppminus < $xxx >$$.h
11630
11631         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11632                 val="$define"
11633         else
11634                 val="$undef"
11635         fi
11636         set d_pwquota
11637         eval $setvar
11638
11639         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11640                 val="$define"
11641         else
11642                 val="$undef"
11643         fi
11644         set d_pwage
11645         eval $setvar
11646
11647         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11648                 val="$define"
11649         else
11650                 val="$undef"
11651         fi
11652         set d_pwchange
11653         eval $setvar
11654
11655         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11656                 val="$define"
11657         else
11658                 val="$undef"
11659         fi
11660         set d_pwclass
11661         eval $setvar
11662
11663         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11664                 val="$define"
11665         else
11666                 val="$undef"
11667         fi
11668         set d_pwexpire
11669         eval $setvar
11670
11671         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11672                 val="$define"
11673         else
11674                 val="$undef"
11675         fi
11676         set d_pwcomment
11677         eval $setvar
11678
11679         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11680                 val="$define"
11681         else
11682                 val="$undef"
11683         fi
11684         set d_pwgecos
11685         eval $setvar
11686
11687         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11688                 val="$define"
11689         else
11690                 val="$undef"
11691         fi
11692         set d_pwpasswd
11693         eval $setvar
11694
11695         $rm -f $$.h
11696         ;;
11697 *)
11698         val="$undef"; 
11699         set d_pwquota; eval $setvar
11700         set d_pwage; eval $setvar
11701         set d_pwchange; eval $setvar
11702         set d_pwclass; eval $setvar
11703         set d_pwexpire; eval $setvar
11704         set d_pwcomment; eval $setvar
11705         set d_pwgecos; eval $setvar
11706         set d_pwpasswd; eval $setvar
11707         ;;
11708 esac
11709
11710 : see if readdir and friends exist
11711 set readdir d_readdir
11712 eval $inlibc
11713 set seekdir d_seekdir
11714 eval $inlibc
11715 set telldir d_telldir
11716 eval $inlibc
11717 set rewinddir d_rewinddir
11718 eval $inlibc
11719
11720 : see if readv exists
11721 set readv d_readv
11722 eval $inlibc
11723
11724 : see if recvmsg exists
11725 set recvmsg d_recvmsg
11726 eval $inlibc
11727
11728 : see if rename exists
11729 set rename d_rename
11730 eval $inlibc
11731
11732 : see if rmdir exists
11733 set rmdir d_rmdir
11734 eval $inlibc
11735
11736 : see if memory.h is available.
11737 val=''
11738 set memory.h val
11739 eval $inhdr
11740
11741 : See if it conflicts with string.h
11742 case "$val" in
11743 $define)
11744         case "$strings" in
11745         '') ;;
11746         *)
11747                 $cppstdin $cppflags $cppminus < $strings > mem.h
11748                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11749                         echo " "
11750                         echo "We won't be including <memory.h>."
11751                         val="$undef"
11752                 fi
11753                 $rm -f mem.h
11754                 ;;
11755         esac
11756 esac
11757 set i_memory
11758 eval $setvar
11759
11760 : can bcopy handle overlapping blocks?
11761 echo " "
11762 val="$undef"
11763 case "$d_memmove" in
11764 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11765 *)      case "$d_bcopy" in
11766         "$define")
11767                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11768                 $cat >try.c <<EOCP
11769 #$i_memory I_MEMORY
11770 #$i_stdlib I_STDLIB
11771 #$i_string I_STRING
11772 #$i_unistd I_UNISTD
11773 EOCP
11774         $cat >>try.c <<'EOCP'
11775 #include <stdio.h>
11776 #ifdef I_MEMORY
11777 #  include <memory.h>
11778 #endif
11779 #ifdef I_STDLIB
11780 #  include <stdlib.h>
11781 #endif
11782 #ifdef I_STRING
11783 #  include <string.h>
11784 #else
11785 #  include <strings.h>
11786 #endif
11787 #ifdef I_UNISTD
11788 #  include <unistd.h>  /* Needed for NetBSD */
11789 #endif
11790 int main()
11791 {
11792 char buf[128], abc[128];
11793 char *b;
11794 int len;
11795 int off;
11796 int align;
11797
11798 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11799    try to store the string in read-only memory. */
11800 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11801
11802 for (align = 7; align >= 0; align--) {
11803         for (len = 36; len; len--) {
11804                 b = buf+align;
11805                 bcopy(abc, b, len);
11806                 for (off = 1; off <= len; off++) {
11807                         bcopy(b, b+off, len);
11808                         bcopy(b+off, b, len);
11809                         if (bcmp(b, abc, len))
11810                                 exit(1);
11811                 }
11812         }
11813 }
11814 exit(0);
11815 }
11816 EOCP
11817                 set try
11818                 if eval $compile_ok; then
11819                         if ./try 2>/dev/null; then
11820                                 echo "Yes, it can."
11821                                 val="$define"
11822                         else
11823                                 echo "It can't, sorry."
11824                         fi
11825                 else
11826                         echo "(I can't compile the test program, so we'll assume not...)"
11827                 fi
11828                 ;;
11829         esac
11830         $rm -f try.* try core
11831         ;;
11832 esac
11833 set d_safebcpy
11834 eval $setvar
11835
11836 : can memcpy handle overlapping blocks?
11837 echo " "
11838 val="$undef"
11839 case "$d_memmove" in
11840 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11841 *)      case "$d_memcpy" in
11842         "$define")
11843                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11844                 $cat >try.c <<EOCP
11845 #$i_memory I_MEMORY
11846 #$i_stdlib I_STDLIB
11847 #$i_string I_STRING
11848 #$i_unistd I_UNISTD
11849 EOCP
11850         $cat >>try.c <<'EOCP'
11851 #include <stdio.h>
11852 #ifdef I_MEMORY
11853 #  include <memory.h>
11854 #endif
11855 #ifdef I_STDLIB
11856 #  include <stdlib.h>
11857 #endif
11858 #ifdef I_STRING
11859 #  include <string.h>
11860 #else
11861 #  include <strings.h>
11862 #endif
11863 #ifdef I_UNISTD
11864 #  include <unistd.h>  /* Needed for NetBSD */
11865 #endif
11866 int main()
11867 {
11868 char buf[128], abc[128];
11869 char *b;
11870 int len;
11871 int off;
11872 int align;
11873
11874 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11875    try to store the string in read-only memory. */
11876 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11877
11878 for (align = 7; align >= 0; align--) {
11879         for (len = 36; len; len--) {
11880                 b = buf+align;
11881                 memcpy(b, abc, len);
11882                 for (off = 1; off <= len; off++) {
11883                         memcpy(b+off, b, len);
11884                         memcpy(b, b+off, len);
11885                         if (memcmp(b, abc, len))
11886                                 exit(1);
11887                 }
11888         }
11889 }
11890 exit(0);
11891 }
11892 EOCP
11893                 set try
11894                 if eval $compile_ok; then
11895                         if ./try 2>/dev/null; then
11896                                 echo "Yes, it can."
11897                                 val="$define"
11898                         else
11899                                 echo "It can't, sorry."
11900                         fi
11901                 else
11902                         echo "(I can't compile the test program, so we'll assume not...)"
11903                 fi
11904                 ;;
11905         esac
11906         $rm -f try.* try core
11907         ;;
11908 esac
11909 set d_safemcpy
11910 eval $setvar
11911
11912 : can memcmp be trusted to compare relative magnitude?
11913 val="$undef"
11914 case "$d_memcmp" in
11915 "$define")
11916         echo " "
11917         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11918         $cat >try.c <<EOCP
11919 #$i_memory I_MEMORY
11920 #$i_stdlib I_STDLIB
11921 #$i_string I_STRING
11922 #$i_unistd I_UNISTD
11923 EOCP
11924         $cat >>try.c <<'EOCP'
11925 #include <stdio.h>
11926 #ifdef I_MEMORY
11927 #  include <memory.h>
11928 #endif
11929 #ifdef I_STDLIB
11930 #  include <stdlib.h>
11931 #endif
11932 #ifdef I_STRING
11933 #  include <string.h>
11934 #else
11935 #  include <strings.h>
11936 #endif
11937 #ifdef I_UNISTD
11938 #  include <unistd.h>  /* Needed for NetBSD */
11939 #endif
11940 int main()
11941 {
11942 char a = -1;
11943 char b = 0;
11944 if ((a < b) && memcmp(&a, &b, 1) < 0)
11945         exit(1);
11946 exit(0);
11947 }
11948 EOCP
11949         set try
11950         if eval $compile_ok; then
11951                 if $run ./try 2>/dev/null; then
11952                         echo "Yes, it can."
11953                         val="$define"
11954                 else
11955                         echo "No, it can't (it uses signed chars)."
11956                 fi
11957         else
11958                 echo "(I can't compile the test program, so we'll assume not...)"
11959         fi
11960         ;;
11961 esac
11962 $rm -f try.* try core
11963 set d_sanemcmp
11964 eval $setvar
11965
11966 : see if prototype for sbrk is available
11967 echo " "
11968 set d_sbrkproto sbrk $i_unistd unistd.h
11969 eval $hasproto
11970
11971 : see if select exists
11972 set select d_select
11973 eval $inlibc
11974
11975 : see if semctl exists
11976 set semctl d_semctl
11977 eval $inlibc
11978
11979 : see if semget exists
11980 set semget d_semget
11981 eval $inlibc
11982
11983 : see if semop exists
11984 set semop d_semop
11985 eval $inlibc
11986
11987 : see how much of the 'sem*(2)' library is present.
11988 h_sem=true
11989 echo " "
11990 case "$d_semctl$d_semget$d_semop" in
11991 *"$undef"*) h_sem=false;;
11992 esac
11993 case "$osname" in
11994 freebsd)
11995     case "`ipcs 2>&1`" in
11996     "SVID messages"*"not configured"*)
11997         echo "Your $osname does not have the sem*(2) configured." >&4
11998         h_sem=false
11999         val="$undef"
12000         set semctl d_semctl
12001         eval $setvar
12002         set semget d_semget
12003         eval $setvar
12004         set semop d_semop
12005         eval $setvar
12006         ;;
12007     esac
12008     ;;
12009 esac
12010 : we could also check for sys/ipc.h ...
12011 if $h_sem && $test `./findhdr sys/sem.h`; then
12012         echo "You have the full sem*(2) library." >&4
12013         val="$define"
12014 else
12015         echo "You don't have the full sem*(2) library." >&4
12016         val="$undef"
12017 fi
12018 set d_sem
12019 eval $setvar
12020
12021 : see whether sys/sem.h defines union semun
12022 echo " "
12023 $cat > try.c <<'END'
12024 #include <sys/types.h>
12025 #include <sys/ipc.h>
12026 #include <sys/sem.h>
12027 int main () { union semun semun; semun.buf = 0; }
12028 END
12029 set try
12030 if eval $compile; then
12031     echo "You have union semun in <sys/sem.h>." >&4
12032     val="$define"
12033 else
12034     echo "You do not have union semun in <sys/sem.h>." >&4
12035     val="$undef"
12036 fi
12037 $rm -f try try.c try.h
12038 set d_union_semun
12039 eval $setvar
12040
12041 : see how to do semctl IPC_STAT
12042 case "$d_sem" in
12043 $define)
12044     : see whether semctl IPC_STAT can use union semun
12045     echo " "
12046     $cat > try.h <<END
12047 #ifndef S_IRUSR
12048 #   ifdef S_IREAD
12049 #       define S_IRUSR S_IREAD
12050 #       define S_IWUSR S_IWRITE
12051 #       define S_IXUSR S_IEXEC
12052 #   else
12053 #       define S_IRUSR 0400
12054 #       define S_IWUSR 0200
12055 #       define S_IXUSR 0100
12056 #   endif
12057 #   define S_IRGRP (S_IRUSR>>3)
12058 #   define S_IWGRP (S_IWUSR>>3)
12059 #   define S_IXGRP (S_IXUSR>>3)
12060 #   define S_IROTH (S_IRUSR>>6)
12061 #   define S_IWOTH (S_IWUSR>>6)
12062 #   define S_IXOTH (S_IXUSR>>6)
12063 #endif
12064 #ifndef S_IRWXU
12065 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12066 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12067 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12068 #endif
12069 END
12070
12071     $cat > try.c <<END
12072 #include <sys/types.h>
12073 #include <sys/ipc.h>
12074 #include <sys/sem.h>
12075 #include <sys/stat.h>
12076 #include <stdio.h>
12077 #include <errno.h>
12078 #include "try.h"
12079 #ifndef errno
12080 extern int errno;
12081 #endif
12082 #$d_union_semun HAS_UNION_SEMUN
12083 int main() {
12084     union semun
12085 #ifndef HAS_UNION_SEMUN
12086     {
12087         int val;
12088         struct semid_ds *buf;
12089         unsigned short *array;
12090     }
12091 #endif
12092     arg;
12093     int sem, st;
12094
12095 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12096     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12097     if (sem > -1) {
12098         struct semid_ds argbuf;
12099         arg.buf = &argbuf;
12100 #       ifdef IPC_STAT
12101         st = semctl(sem, 0, IPC_STAT, arg);
12102         if (st == 0)
12103             printf("semun\n");
12104         else
12105 #       endif /* IPC_STAT */
12106             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12107 #       ifdef IPC_RMID
12108         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12109 #       endif /* IPC_RMID */
12110             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12111     } else
12112 #endif /* IPC_PRIVATE && ... */
12113         printf("semget failed: errno = %d\n", errno);
12114   return 0;
12115 }
12116 END
12117     val="$undef"
12118     set try
12119     if eval $compile; then
12120         xxx=`$run ./try`
12121         case "$xxx" in
12122         semun) val="$define" ;;
12123         esac
12124     fi
12125     $rm -f try try.c
12126     set d_semctl_semun
12127     eval $setvar
12128     case "$d_semctl_semun" in
12129     $define)
12130         echo "You can use union semun for semctl IPC_STAT." >&4
12131         also='also'
12132         ;;
12133     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12134         also=''
12135         ;;
12136     esac
12137
12138     : see whether semctl IPC_STAT can use struct semid_ds pointer
12139     $cat > try.c <<'END'
12140 #include <sys/types.h>
12141 #include <sys/ipc.h>
12142 #include <sys/sem.h>
12143 #include <sys/stat.h>
12144 #include "try.h"
12145 #include <stdio.h>
12146 #include <errno.h>
12147 #ifndef errno
12148 extern int errno;
12149 #endif
12150 int main() {
12151     struct semid_ds arg;
12152     int sem, st;
12153
12154 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12155     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12156     if (sem > -1) {
12157 #       ifdef IPC_STAT
12158         st = semctl(sem, 0, IPC_STAT, &arg);
12159         if (st == 0)
12160             printf("semid_ds\n");
12161         else
12162 #       endif /* IPC_STAT */
12163             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12164 #       ifdef IPC_RMID
12165         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12166 #       endif /* IPC_RMID */
12167             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12168     } else
12169 #endif /* IPC_PRIVATE && ... */
12170         printf("semget failed: errno = %d\n", errno);
12171
12172     return 0;
12173 }
12174 END
12175     val="$undef"
12176     set try
12177     if eval $compile; then
12178         xxx=`$run ./try`
12179         case "$xxx" in
12180         semid_ds) val="$define" ;;
12181         esac
12182     fi
12183     $rm -f try try.c
12184     set d_semctl_semid_ds
12185     eval $setvar
12186     case "$d_semctl_semid_ds" in
12187     $define)
12188         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12189         ;;
12190     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12191         ;;
12192     esac
12193     $rm -f try.h
12194     ;;
12195 *)  val="$undef"
12196
12197     # We do not have the full sem*(2) library, so assume we can not
12198     # use either.
12199
12200     set d_semctl_semun
12201     eval $setvar
12202
12203     set d_semctl_semid_ds
12204     eval $setvar
12205     ;;
12206 esac
12207
12208 : see if sendmsg exists
12209 set sendmsg d_sendmsg
12210 eval $inlibc
12211
12212 : see if setegid exists
12213 set setegid d_setegid
12214 eval $inlibc
12215
12216 : see if seteuid exists
12217 set seteuid d_seteuid
12218 eval $inlibc
12219
12220 : see if setgrent exists
12221 set setgrent d_setgrent
12222 eval $inlibc
12223
12224 : see if sethostent exists
12225 set sethostent d_sethent
12226 eval $inlibc
12227
12228 : see if setitimer exists
12229 set setitimer d_setitimer
12230 eval $inlibc
12231
12232 : see if setlinebuf exists
12233 set setlinebuf d_setlinebuf
12234 eval $inlibc
12235
12236 : see if setlocale exists
12237 set setlocale d_setlocale
12238 eval $inlibc
12239
12240 : see if setnetent exists
12241 set setnetent d_setnent
12242 eval $inlibc
12243
12244 : see if setprotoent exists
12245 set setprotoent d_setpent
12246 eval $inlibc
12247
12248 : see if setpgid exists
12249 set setpgid d_setpgid
12250 eval $inlibc
12251
12252 : see if setpgrp2 exists
12253 set setpgrp2 d_setpgrp2
12254 eval $inlibc
12255
12256 : see if setpriority exists
12257 set setpriority d_setprior
12258 eval $inlibc
12259
12260 : see if setproctitle exists
12261 set setproctitle d_setproctitle
12262 eval $inlibc
12263
12264 : see if setpwent exists
12265 set setpwent d_setpwent
12266 eval $inlibc
12267
12268 : see if setregid exists
12269 set setregid d_setregid
12270 eval $inlibc
12271 set setresgid d_setresgid
12272 eval $inlibc
12273
12274 : see if setreuid exists
12275 set setreuid d_setreuid
12276 eval $inlibc
12277 set setresuid d_setresuid
12278 eval $inlibc
12279
12280 : see if setrgid exists
12281 set setrgid d_setrgid
12282 eval $inlibc
12283
12284 : see if setruid exists
12285 set setruid d_setruid
12286 eval $inlibc
12287
12288 : see if setservent exists
12289 set setservent d_setsent
12290 eval $inlibc
12291
12292 : see if setsid exists
12293 set setsid d_setsid
12294 eval $inlibc
12295
12296 : see if setvbuf exists
12297 set setvbuf d_setvbuf
12298 eval $inlibc
12299
12300 : see if sfio.h is available
12301 set sfio.h i_sfio
12302 eval $inhdr
12303
12304
12305 : see if sfio library is available
12306 case "$i_sfio" in
12307 $define)
12308         val=''
12309         set sfreserve val
12310         eval $inlibc
12311         ;;
12312 *)
12313         val="$undef"
12314         ;;
12315 esac
12316 : Ok, but do we want to use it.
12317 case "$val" in
12318 $define)
12319         case "$usesfio" in
12320         true|$define|[yY]*) dflt='y';;
12321         *) dflt='n';;
12322         esac
12323         echo "$package can use the sfio library, but it is experimental."
12324         case "$useperlio" in
12325         "$undef")
12326             echo "For sfio also the PerlIO abstraction layer is needed."
12327             echo "Earlier you said you wouldn't want that."
12328             ;;
12329         esac
12330         rp="You seem to have sfio available, do you want to try using it?"
12331         . ./myread
12332         case "$ans" in
12333         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12334                 useperlio="$define"
12335                 val="$define"
12336                 ;;
12337         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12338                 val="$undef"
12339                 ;;
12340         esac
12341         ;;
12342 *)      case "$usesfio" in
12343         true|$define|[yY]*)
12344                 echo "Sorry, cannot find sfio on this machine." >&4
12345                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12346                 val="$undef"
12347                 ;;
12348         esac
12349         ;;
12350 esac
12351 set d_sfio
12352 eval $setvar
12353 case "$d_sfio" in
12354 $define) usesfio='true';;
12355 *) usesfio='false';;
12356 esac
12357 case "$d_sfio" in
12358 $define) ;;
12359 *)      : Remove sfio from list of libraries to use
12360         case "$libs" in
12361         *-lsfio*)
12362                 echo "Removing unneeded -lsfio from library list" >&4
12363                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12364                 shift
12365                 libs="$*"
12366                 echo "libs = $libs" >&4
12367                 ;;
12368         esac
12369 ;;
12370 esac
12371
12372
12373 : see if shmctl exists
12374 set shmctl d_shmctl
12375 eval $inlibc
12376
12377 : see if shmget exists
12378 set shmget d_shmget
12379 eval $inlibc
12380
12381 : see if shmat exists
12382 set shmat d_shmat
12383 eval $inlibc
12384 : see what shmat returns
12385 case "$d_shmat" in
12386 "$define")
12387         $cat >shmat.c <<'END'
12388 #include <sys/shm.h>
12389 void *shmat();
12390 END
12391         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12392                 shmattype='void *'
12393         else
12394                 shmattype='char *'
12395         fi
12396         echo "and it returns ($shmattype)." >&4
12397         : see if a prototype for shmat is available
12398         xxx=`./findhdr sys/shm.h`
12399         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12400         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12401                 val="$define"
12402         else
12403                 val="$undef"
12404         fi
12405         $rm -f shmat.[co]
12406         ;;
12407 *)
12408         val="$undef"
12409         ;;
12410 esac
12411 set d_shmatprototype
12412 eval $setvar
12413
12414 : see if shmdt exists
12415 set shmdt d_shmdt
12416 eval $inlibc
12417
12418 : see how much of the 'shm*(2)' library is present.
12419 h_shm=true
12420 echo " "
12421 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12422 *"$undef"*) h_shm=false;;
12423 esac
12424 case "$osname" in
12425 freebsd)
12426     case "`ipcs 2>&1`" in
12427     "SVID shared memory"*"not configured"*)
12428         echo "Your $osname does not have the shm*(2) configured." >&4
12429         h_shm=false
12430         val="$undef"
12431         set shmctl d_shmctl
12432         evat $setvar
12433         set shmget d_shmget
12434         evat $setvar
12435         set shmat d_shmat
12436         evat $setvar
12437         set shmdt d_shmdt
12438         evat $setvar
12439         ;;
12440     esac
12441     ;;
12442 esac
12443 : we could also check for sys/ipc.h ...
12444 if $h_shm && $test `./findhdr sys/shm.h`; then
12445         echo "You have the full shm*(2) library." >&4
12446         val="$define"
12447 else
12448         echo "You don't have the full shm*(2) library." >&4
12449         val="$undef"
12450 fi
12451 set d_shm
12452 eval $setvar
12453
12454 echo " "
12455 : see if we have sigaction
12456 if set sigaction val -f d_sigaction; eval $csym; $val; then
12457         echo 'sigaction() found.' >&4
12458         $cat > try.c <<'EOP'
12459 #include <stdio.h>
12460 #include <sys/types.h>
12461 #include <signal.h>
12462 int main()
12463 {
12464     struct sigaction act, oact;
12465     act.sa_flags = 0;
12466     oact.sa_handler = 0;
12467     /* so that act and oact are used */
12468     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12469 }
12470 EOP
12471         set try
12472         if eval $compile_ok; then
12473                 val="$define"
12474         else
12475                 echo "But you don't seem to have a useable struct sigaction." >&4
12476                 val="$undef"
12477         fi
12478 else
12479         echo 'sigaction NOT found.' >&4
12480         val="$undef"
12481 fi
12482 set d_sigaction; eval $setvar
12483 $rm -f try try$_o try.c
12484
12485 : see if sigprocmask exists
12486 set sigprocmask d_sigprocmask
12487 eval $inlibc
12488
12489 : see if sigsetjmp exists
12490 echo " "
12491 case "$d_sigsetjmp" in
12492 '')
12493         $cat >try.c <<'EOP'
12494 #include <setjmp.h>
12495 sigjmp_buf env;
12496 int set = 1;
12497 int main()
12498 {
12499         if (sigsetjmp(env,1))
12500                 exit(set);
12501         set = 0;
12502         siglongjmp(env, 1);
12503         exit(1);
12504 }
12505 EOP
12506         set try
12507         if eval $compile; then
12508                 if $run ./try >/dev/null 2>&1; then
12509                         echo "POSIX sigsetjmp found." >&4
12510                         val="$define"
12511                 else
12512                         $cat >&4 <<EOM
12513 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12514 I'll ignore them.
12515 EOM
12516                         val="$undef"
12517                 fi
12518         else
12519                 echo "sigsetjmp not found." >&4
12520                 val="$undef"
12521         fi
12522         ;;
12523 *) val="$d_sigsetjmp"
12524         case "$d_sigsetjmp" in
12525         $define) echo "POSIX sigsetjmp found." >&4;;
12526         $undef) echo "sigsetjmp not found." >&4;;
12527         esac
12528         ;;
12529 esac
12530 set d_sigsetjmp
12531 eval $setvar
12532 $rm -f try.c try
12533
12534 : see if sockatmark exists
12535 set sockatmark d_sockatmark
12536 eval $inlibc
12537
12538 : see if prototype for sockatmark is available
12539 echo " "
12540 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12541 eval $hasproto
12542
12543 : see if socks5_init exists
12544 set socks5_init d_socks5_init
12545 eval $inlibc
12546
12547 : see if prototype for setresgid is available
12548 echo " "
12549 set d_sresgproto setresgid $i_unistd unistd.h
12550 eval $hasproto
12551
12552 : see if prototype for setresuid is available
12553 echo " "
12554 set d_sresuproto setresuid $i_unistd unistd.h
12555 eval $hasproto
12556
12557 : see if sys/stat.h is available
12558 set sys/stat.h i_sysstat
12559 eval $inhdr
12560
12561
12562 : see if stat knows about block sizes
12563 echo " "
12564 echo "Checking to see if your struct stat has st_blocks field..." >&4
12565 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12566 eval $hasfield
12567
12568
12569 : see if this is a sys/vfs.h system
12570 set sys/vfs.h i_sysvfs
12571 eval $inhdr
12572
12573
12574 : see if this is a sys/statfs.h system
12575 set sys/statfs.h i_sysstatfs
12576 eval $inhdr
12577
12578
12579 echo " "
12580 echo "Checking to see if your system supports struct statfs..." >&4
12581 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
12582 eval $hasstruct
12583 case "$d_statfs_s" in
12584 "$define")      echo "Yes, it does."   ;;
12585 *)              echo "No, it doesn't." ;;
12586 esac
12587
12588
12589
12590 : see if struct statfs knows about f_flags
12591 case "$d_statfs_s" in
12592 define) 
12593         echo " "
12594         echo "Checking to see if your struct statfs has f_flags field..." >&4
12595         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
12596         eval $hasfield
12597         ;;
12598 *)      val="$undef"
12599         set d_statfs_f_flags
12600         eval $setvar
12601         ;;
12602 esac
12603 case "$d_statfs_f_flags" in
12604 "$define")      echo "Yes, it does."   ;;
12605 *)              echo "No, it doesn't." ;;
12606 esac
12607
12608 : see if _ptr and _cnt from stdio act std
12609 echo " "
12610
12611 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12612         echo "(Looks like you have stdio.h from BSD.)"
12613         case "$stdio_ptr" in
12614         '') stdio_ptr='((fp)->_p)'
12615                 ptr_lval=$define
12616                 ;;
12617         *)      ptr_lval=$d_stdio_ptr_lval;;
12618         esac
12619         case "$stdio_cnt" in
12620         '') stdio_cnt='((fp)->_r)'
12621                 cnt_lval=$define
12622                 ;;
12623         *)      cnt_lval=$d_stdio_cnt_lval;;
12624         esac
12625         case "$stdio_base" in
12626         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12627         esac
12628         case "$stdio_bufsiz" in
12629         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12630         esac
12631 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12632         echo "(Looks like you have stdio.h from Linux.)"
12633         case "$stdio_ptr" in
12634         '') stdio_ptr='((fp)->_IO_read_ptr)'
12635                 ptr_lval=$define
12636                 ;;
12637         *)      ptr_lval=$d_stdio_ptr_lval;;
12638         esac
12639         case "$stdio_cnt" in
12640         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12641                 cnt_lval=$undef
12642                 ;;
12643         *)      cnt_lval=$d_stdio_cnt_lval;;
12644         esac
12645         case "$stdio_base" in
12646         '') stdio_base='((fp)->_IO_read_base)';;
12647         esac
12648         case "$stdio_bufsiz" in
12649         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12650         esac
12651 else
12652         case "$stdio_ptr" in
12653         '') stdio_ptr='((fp)->_ptr)'
12654                 ptr_lval=$define
12655                 ;;
12656         *)      ptr_lval=$d_stdio_ptr_lval;;
12657         esac
12658         case "$stdio_cnt" in
12659         '') stdio_cnt='((fp)->_cnt)'
12660                 cnt_lval=$define
12661                 ;;
12662         *)      cnt_lval=$d_stdio_cnt_lval;;
12663         esac
12664         case "$stdio_base" in
12665         '') stdio_base='((fp)->_base)';;
12666         esac
12667         case "$stdio_bufsiz" in
12668         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12669         esac
12670 fi
12671
12672 : test whether _ptr and _cnt really work
12673 echo "Checking how std your stdio is..." >&4
12674 $cat >try.c <<EOP
12675 #include <stdio.h>
12676 #define FILE_ptr(fp)    $stdio_ptr
12677 #define FILE_cnt(fp)    $stdio_cnt
12678 int main() {
12679         FILE *fp = fopen("try.c", "r");
12680         char c = getc(fp);
12681         if (
12682                 18 <= FILE_cnt(fp) &&
12683                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12684         )
12685                 exit(0);
12686         exit(1);
12687 }
12688 EOP
12689 val="$undef"
12690 set try
12691 if eval $compile && $to try.c; then
12692         if $run ./try; then
12693                 echo "Your stdio acts pretty std."
12694                 val="$define"
12695         else
12696                 echo "Your stdio isn't very std."
12697         fi
12698 else
12699         echo "Your stdio doesn't appear very std."
12700 fi
12701 $rm -f try.c try
12702 set d_stdstdio
12703 eval $setvar
12704
12705 : Can _ptr be used as an lvalue?
12706 case "$d_stdstdio$ptr_lval" in
12707 $define$define) val=$define ;;
12708 *) val=$undef ;;
12709 esac
12710 set d_stdio_ptr_lval
12711 eval $setvar
12712
12713 : Can _cnt be used as an lvalue?
12714 case "$d_stdstdio$cnt_lval" in
12715 $define$define) val=$define ;;
12716 *) val=$undef ;;
12717 esac
12718 set d_stdio_cnt_lval
12719 eval $setvar
12720
12721
12722 : test whether setting _ptr sets _cnt as a side effect
12723 d_stdio_ptr_lval_sets_cnt="$undef"
12724 d_stdio_ptr_lval_nochange_cnt="$undef"
12725 case "$d_stdio_ptr_lval$d_stdstdio" in
12726 $define$define)
12727         echo "Checking to see what happens if we set the stdio ptr..." >&4
12728 $cat >try.c <<EOP
12729 #include <stdio.h>
12730 /* Can we scream? */
12731 /* Eat dust sed :-) */
12732 /* In the buffer space, no one can hear you scream. */
12733 #define FILE_ptr(fp)    $stdio_ptr
12734 #define FILE_cnt(fp)    $stdio_cnt
12735 #include <sys/types.h>
12736 int main() {
12737         FILE *fp = fopen("try.c", "r");
12738         int c;
12739         char *ptr;
12740         size_t cnt;
12741         if (!fp) {
12742             puts("Fail even to read");
12743             exit(1);
12744         }
12745         c = getc(fp); /* Read away the first # */
12746         if (c == EOF) {
12747             puts("Fail even to read");
12748             exit(1);
12749         }
12750         if (!(
12751                 18 <= FILE_cnt(fp) &&
12752                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12753         )) {
12754                 puts("Fail even to read");
12755                 exit (1);
12756         }
12757         ptr = (char*) FILE_ptr(fp);
12758         cnt = (size_t)FILE_cnt(fp);
12759
12760         FILE_ptr(fp) += 42;
12761
12762         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12763                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12764                 exit (1);
12765         }
12766         if (FILE_cnt(fp) <= 20) {
12767                 printf ("Fail (<20 chars to test)");
12768                 exit (1);
12769         }
12770         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12771                 puts("Fail compare");
12772                 exit (1);
12773         }
12774         if (cnt == FILE_cnt(fp)) {
12775                 puts("Pass_unchanged");
12776                 exit (0);
12777         }       
12778         if (FILE_cnt(fp) == (cnt - 42)) {
12779                 puts("Pass_changed");
12780                 exit (0);
12781         }
12782         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12783         return 1;
12784
12785 }
12786 EOP
12787         set try
12788         if eval $compile && $to try.c; then
12789                 case `$run ./try` in
12790                 Pass_changed)
12791                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12792                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12793                 Pass_unchanged)
12794                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12795                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12796                 Fail*)
12797                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12798                 *)
12799                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12800         esac
12801         else
12802                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12803         fi
12804         $rm -f try.c try
12805         ;;
12806 esac
12807
12808 : see if _base is also standard
12809 val="$undef"
12810 case "$d_stdstdio" in
12811 $define)
12812         $cat >try.c <<EOP
12813 #include <stdio.h>
12814 #define FILE_base(fp)   $stdio_base
12815 #define FILE_bufsiz(fp) $stdio_bufsiz
12816 int main() {
12817         FILE *fp = fopen("try.c", "r");
12818         char c = getc(fp);
12819         if (
12820                 19 <= FILE_bufsiz(fp) &&
12821                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12822         )
12823                 exit(0);
12824         exit(1);
12825 }
12826 EOP
12827         set try
12828         if eval $compile && $to try.c; then
12829                 if $run ./try; then
12830                         echo "And its _base field acts std."
12831                         val="$define"
12832                 else
12833                         echo "But its _base field isn't std."
12834                 fi
12835         else
12836                 echo "However, it seems to be lacking the _base field."
12837         fi
12838         $rm -f try.c try
12839         ;;
12840 esac
12841 set d_stdiobase
12842 eval $setvar
12843
12844 $cat >&4 <<EOM
12845 Checking how to access stdio streams by file descriptor number...
12846 EOM
12847 case "$stdio_stream_array" in
12848 '')     $cat >try.c <<EOCP
12849 #include <stdio.h>
12850 int main() {
12851   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12852     printf("yes\n");
12853 }
12854 EOCP
12855         for s in _iob __iob __sF
12856         do
12857                 set try -DSTDIO_STREAM_ARRAY=$s
12858                 if eval $compile; then
12859                         case "`$run ./try`" in
12860                         yes)    stdio_stream_array=$s; break ;;
12861                         esac
12862                 fi
12863         done
12864         $rm -f try.* try$exe_ext
12865 esac
12866 case "$stdio_stream_array" in
12867 '')     $cat >&4 <<EOM
12868 I can't figure out how to access stdio streams by file descriptor number.
12869 EOM
12870         d_stdio_stream_array="$undef"
12871         ;;
12872 *)      $cat >&4 <<EOM
12873 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12874 EOM
12875         d_stdio_stream_array="$define"
12876         ;;
12877 esac
12878
12879 : see if strcoll exists
12880 set strcoll d_strcoll
12881 eval $inlibc
12882
12883 : check for structure copying
12884 echo " "
12885 echo "Checking to see if your C compiler can copy structs..." >&4
12886 $cat >try.c <<'EOCP'
12887 int main()
12888 {
12889         struct blurfl {
12890                 int dyick;
12891         } foo, bar;
12892
12893         foo = bar;
12894 }
12895 EOCP
12896 if $cc -c try.c >/dev/null 2>&1 ; then
12897         val="$define"
12898         echo "Yup, it can."
12899 else
12900         val="$undef"
12901         echo "Nope, it can't."
12902 fi
12903 set d_strctcpy
12904 eval $setvar
12905 $rm -f try.*
12906
12907 : see if strerror and/or sys_errlist[] exist
12908 echo " "
12909 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12910     if set strerror val -f d_strerror; eval $csym; $val; then
12911                 echo 'strerror() found.' >&4
12912                 d_strerror="$define"
12913                 d_strerrm='strerror(e)'
12914                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12915                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12916                         d_syserrlst="$define"
12917                 else
12918                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12919                         d_syserrlst="$undef"
12920                 fi
12921     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12922                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12923                 echo 'strerror() found in string header.' >&4
12924                 d_strerror="$define"
12925                 d_strerrm='strerror(e)'
12926                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12927                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12928                                 d_syserrlst="$define"
12929                 else
12930                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12931                         d_syserrlst="$undef"
12932                 fi
12933     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12934                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12935                 d_strerror="$undef"
12936                 d_syserrlst="$define"
12937                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12938     else
12939                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12940                 d_strerror="$undef"
12941                 d_syserrlst="$undef"
12942                 d_strerrm='"unknown"'
12943     fi
12944 fi
12945
12946 : see if strftime exists
12947 set strftime d_strftime
12948 eval $inlibc
12949
12950 : see if strtod exists
12951 set strtod d_strtod
12952 eval $inlibc
12953
12954 : see if strtol exists
12955 set strtol d_strtol
12956 eval $inlibc
12957
12958 : see if strtold exists
12959 set strtold d_strtold
12960 eval $inlibc
12961
12962 : see if strtoll exists
12963 set strtoll d_strtoll
12964 eval $inlibc
12965
12966 case "$d_longlong-$d_strtoll" in
12967 "$define-$define")
12968         $cat <<EOM
12969 Checking whether your strtoll() works okay...
12970 EOM
12971         $cat >try.c <<'EOCP'
12972 #include <errno.h>
12973 #ifdef __hpux
12974 #define strtoll __strtoll
12975 #endif
12976 #ifdef __EMX__
12977 #define strtoll _strtoll
12978 #endif
12979 #include <stdio.h>
12980 extern long long int strtoll(char *s, char **, int); 
12981 static int bad = 0;
12982 int check(char *s, long long ell, int een) {
12983         long long gll;
12984         errno = 0;
12985         gll = strtoll(s, 0, 10);
12986         if (!((gll == ell) && (errno == een)))
12987                 bad++;
12988 }
12989 int main() {
12990         check(" 1",                                      1LL, 0);
12991         check(" 0",                                      0LL, 0);
12992         check("-1",                                     -1LL, 0);
12993         check("-9223372036854775808", -9223372036854775808LL, 0);
12994         check("-9223372036854775808", -9223372036854775808LL, 0);
12995         check(" 9223372036854775807",  9223372036854775807LL, 0);
12996         check("-9223372036854775808", -9223372036854775808LL, 0);
12997         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12998         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12999         if (!bad)
13000                 printf("ok\n");
13001 }
13002 EOCP
13003         set try
13004         if eval $compile; then
13005                 yyy=`$run ./try`
13006                 case "$yyy" in
13007                 ok) echo "Your strtoll() seems to be working okay." ;;
13008                 *) cat <<EOM >&4
13009 Your strtoll() doesn't seem to be working okay.
13010 EOM
13011                    d_strtoll="$undef"
13012                    ;;
13013                 esac
13014         else
13015                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13016                 d_strtoll="$undef"
13017         fi
13018         ;;
13019 esac
13020
13021 : see if strtoq exists
13022 set strtoq d_strtoq
13023 eval $inlibc
13024
13025 : see if strtoul exists
13026 set strtoul d_strtoul
13027 eval $inlibc
13028
13029 case "$d_strtoul" in
13030 "$define")
13031         $cat <<EOM
13032 Checking whether your strtoul() works okay...
13033 EOM
13034         $cat >try.c <<'EOCP'
13035 #include <errno.h>
13036 #include <stdio.h>
13037 extern unsigned long int strtoul(char *s, char **, int); 
13038 static int bad = 0;
13039 void check(char *s, unsigned long eul, int een) {
13040         unsigned long gul;
13041         errno = 0;
13042         gul = strtoul(s, 0, 10);
13043         if (!((gul == eul) && (errno == een)))
13044                 bad++;
13045 }
13046 int main() {
13047         check(" 1", 1L, 0);
13048         check(" 0", 0L, 0);
13049 EOCP
13050         case "$longsize" in
13051         8)
13052             $cat >>try.c <<'EOCP'
13053         check("18446744073709551615", 18446744073709551615UL, 0);
13054         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13055 #if 0 /* strtoul() for /^-/ strings is undefined. */
13056         check("-1", 18446744073709551615UL, 0);
13057         check("-18446744073709551614", 2, 0);
13058         check("-18446744073709551615", 1, 0);
13059         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13060         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13061 #endif
13062 EOCP
13063                 ;;
13064         4)
13065                     $cat >>try.c <<'EOCP'
13066         check("4294967295", 4294967295UL, 0);
13067         check("4294967296", 4294967295UL, ERANGE);
13068 #if 0 /* strtoul() for /^-/ strings is undefined. */
13069         check("-1", 4294967295UL, 0);
13070         check("-4294967294", 2, 0);
13071         check("-4294967295", 1, 0);
13072         check("-4294967296", 4294967295UL, ERANGE);
13073         check("-4294967297", 4294967295UL, ERANGE);
13074 #endif
13075 EOCP
13076                 ;;
13077         *)
13078 : Should we write these tests to be more portable by sprintf-ing
13079 : ~0 and then manipulating that char string as input for strtol?
13080                 ;;
13081         esac
13082         $cat >>try.c <<'EOCP'
13083         if (!bad)
13084                 printf("ok\n");
13085         return 0;
13086 }
13087 EOCP
13088         set try
13089         if eval $compile; then
13090                 case "`$run ./try`" in
13091                 ok) echo "Your strtoul() seems to be working okay." ;;
13092                 *) cat <<EOM >&4
13093 Your strtoul() doesn't seem to be working okay.
13094 EOM
13095                    d_strtoul="$undef"
13096                    ;;
13097                 esac
13098         fi
13099         ;;
13100 esac
13101
13102 : see if strtoull exists
13103 set strtoull d_strtoull
13104 eval $inlibc
13105
13106 case "$d_longlong-$d_strtoull" in
13107 "$define-$define")
13108         $cat <<EOM
13109 Checking whether your strtoull() works okay...
13110 EOM
13111         $cat >try.c <<'EOCP'
13112 #include <errno.h>
13113 #ifdef __hpux
13114 #define strtoull __strtoull
13115 #endif
13116 #include <stdio.h>
13117 extern unsigned long long int strtoull(char *s, char **, int); 
13118 static int bad = 0;
13119 int check(char *s, long long eull, int een) {
13120         long long gull;
13121         errno = 0;
13122         gull = strtoull(s, 0, 10);
13123         if (!((gull == eull) && (errno == een)))
13124                 bad++;
13125 }
13126 int main() {
13127         check(" 1",                                        1LL, 0);
13128         check(" 0",                                        0LL, 0);
13129         check("18446744073709551615",  18446744073709551615ULL, 0);
13130         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13131 #if 0 /* strtoull() for /^-/ strings is undefined. */
13132         check("-1",                    18446744073709551615ULL, 0);
13133         check("-18446744073709551614",                     2LL, 0);
13134         check("-18446744073709551615",                     1LL, 0);
13135         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13136         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13137 #endif
13138         if (!bad)
13139                 printf("ok\n");
13140 }
13141 EOCP
13142         set try
13143         if eval $compile; then
13144                 case "`$run ./try`" in
13145                 ok) echo "Your strtoull() seems to be working okay." ;;
13146                 *) cat <<EOM >&4
13147 Your strtoull() doesn't seem to be working okay.
13148 EOM
13149                    d_strtoull="$undef"
13150                    ;;
13151                 esac
13152         fi
13153         ;;
13154 esac
13155
13156 : see if strtouq exists
13157 set strtouq d_strtouq
13158 eval $inlibc
13159
13160 case "$d_strtouq" in
13161 "$define")
13162         $cat <<EOM
13163 Checking whether your strtouq() works okay...
13164 EOM
13165         $cat >try.c <<'EOCP'
13166 #include <errno.h>
13167 #include <stdio.h>
13168 extern unsigned long long int strtouq(char *s, char **, int); 
13169 static int bad = 0;
13170 void check(char *s, unsigned long long eull, int een) {
13171         unsigned long long gull;
13172         errno = 0;
13173         gull = strtouq(s, 0, 10);
13174         if (!((gull == eull) && (errno == een)))
13175                 bad++;
13176 }
13177 int main() {
13178         check(" 1",                                        1LL, 0);
13179         check(" 0",                                        0LL, 0);
13180         check("18446744073709551615",  18446744073709551615ULL, 0);
13181         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13182 #if 0 /* strtouq() for /^-/ strings is undefined. */
13183         check("-1",                    18446744073709551615ULL, 0);
13184         check("-18446744073709551614",                     2LL, 0);
13185         check("-18446744073709551615",                     1LL, 0);
13186         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13187         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13188 #endif
13189         if (!bad)
13190                 printf("ok\n");
13191         return 0;
13192 }
13193 EOCP
13194         set try
13195         if eval $compile; then
13196                 case "`$run ./try`" in
13197                 ok) echo "Your strtouq() seems to be working okay." ;;
13198                 *) cat <<EOM >&4
13199 Your strtouq() doesn't seem to be working okay.
13200 EOM
13201                    d_strtouq="$undef"
13202                    ;;
13203                 esac
13204         fi
13205         ;;
13206 esac
13207
13208 : see if strxfrm exists
13209 set strxfrm d_strxfrm
13210 eval $inlibc
13211
13212 : see if symlink exists
13213 set symlink d_symlink
13214 eval $inlibc
13215
13216 : see if syscall exists
13217 set syscall d_syscall
13218 eval $inlibc
13219
13220 : see if prototype for syscall is available
13221 echo " "
13222 set d_syscallproto syscall $i_unistd unistd.h
13223 eval $hasproto
13224
13225 : see if sysconf exists
13226 set sysconf d_sysconf
13227 eval $inlibc
13228
13229 : see if system exists
13230 set system d_system
13231 eval $inlibc
13232
13233 : see if tcgetpgrp exists
13234 set tcgetpgrp d_tcgetpgrp
13235 eval $inlibc
13236
13237 : see if tcsetpgrp exists
13238 set tcsetpgrp d_tcsetpgrp
13239 eval $inlibc
13240
13241 : see if prototype for telldir is available
13242 echo " "
13243 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13244 eval $hasproto
13245
13246 : see if this is a sys/times.h system
13247 set sys/times.h i_systimes
13248 eval $inhdr
13249
13250 : see if times exists
13251 echo " "
13252 if set times val -f d_times; eval $csym; $val; then
13253         echo 'times() found.' >&4
13254         d_times="$define"
13255         inc=''
13256         case "$i_systimes" in
13257         "$define") inc='sys/times.h';;
13258         esac
13259         rp="What is the type returned by times() on this system?"
13260         set clock_t clocktype long stdio.h sys/types.h $inc
13261         eval $typedef_ask
13262 else
13263         echo 'times() NOT found, hope that will do.' >&4
13264         d_times="$undef"
13265         clocktype='int'
13266 fi
13267
13268 : see if truncate exists
13269 set truncate d_truncate
13270 eval $inlibc
13271
13272 : see if tzname[] exists
13273 echo " "
13274 if set tzname val -a d_tzname; eval $csym; $val; then
13275         val="$define"
13276         echo 'tzname[] found.' >&4
13277 else
13278         val="$undef"
13279         echo 'tzname[] NOT found.' >&4
13280 fi
13281 set d_tzname
13282 eval $setvar
13283
13284 case "$osname" in
13285 next|rhapsody|darwin) multiarch="$define" ;;
13286 esac
13287 case "$multiarch" in
13288 ''|[nN]*) multiarch="$undef" ;;
13289 esac
13290
13291 : check for ordering of bytes in a long
13292 echo " "
13293 case "$usecrosscompile$multiarch" in
13294 *$define*)
13295         $cat <<EOM
13296 You seem to be either cross-compiling or doing a multiarchitecture build,
13297 skipping the byteorder check.
13298
13299 EOM
13300         byteorder='ffff'
13301         ;;
13302 *)
13303         case "$byteorder" in
13304         '')
13305                 $cat <<'EOM'
13306 In the following, larger digits indicate more significance.  A big-endian
13307 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13308 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13309 machines may have weird orders like 3412.  A Cray will report 87654321,
13310 an Alpha will report 12345678. If the test program works the default is
13311 probably right.
13312 I'm now running the test program...
13313 EOM
13314                 $cat >try.c <<'EOCP'
13315 #include <stdio.h>
13316 int main()
13317 {
13318         int i;
13319         union {
13320                 unsigned long l;
13321                 char c[sizeof(long)];
13322         } u;
13323
13324         if (sizeof(long) > 4)
13325                 u.l = (0x08070605L << 32) | 0x04030201L;
13326         else
13327                 u.l = 0x04030201L;
13328         for (i = 0; i < sizeof(long); i++)
13329                 printf("%c", u.c[i]+'0');
13330         printf("\n");
13331         exit(0);
13332 }
13333 EOCP
13334                 xxx_prompt=y
13335                 set try
13336                 if eval $compile && ./try > /dev/null; then
13337                         dflt=`$run ./try`
13338                         case "$dflt" in
13339                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13340                                 echo "(The test program ran ok.)"
13341                                 echo "byteorder=$dflt"
13342                                 xxx_prompt=n
13343                         ;;
13344                         ????|????????) echo "(The test program ran ok.)" ;;
13345                         *) echo "(The test program didn't run right for some reason.)" ;;
13346                         esac
13347                 else
13348                         dflt='4321'
13349                         cat <<'EOM'
13350 (I can't seem to compile the test program.  Guessing big-endian...)
13351 EOM
13352                 fi
13353                 case "$xxx_prompt" in
13354                 y)
13355                         rp="What is the order of bytes in a long?"
13356                         . ./myread
13357                         byteorder="$ans"
13358                         ;;
13359                 *)      byteorder=$dflt
13360                         ;;
13361                 esac
13362                 ;;
13363         esac
13364         $rm -f try.c try
13365         ;;
13366 esac
13367
13368
13369 $cat <<EOM
13370
13371 Checking to see whether you can access character data unalignedly...
13372 EOM
13373 $cat >try.c <<EOCP
13374 #include <stdio.h>
13375 #define U32 $u32type
13376 #define BYTEORDER $byteorder
13377 int main() {
13378 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13379     U8 buf[] = "\0\0\0\1\0\0\0\0";
13380     U32 *up;
13381     int i;
13382
13383     if (sizeof(U32) != 4) {
13384         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13385         exit(1);
13386     }
13387
13388     fflush(stdout);
13389
13390     for (i = 0; i < 4; i++) {
13391         up = (U32*)(buf + i);
13392         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13393                (*up == 1 << (8*(3-i)))  /* little-endian */
13394               )
13395            )
13396         {
13397             printf("read failed (%x)\n", *up);
13398             exit(2);
13399         }
13400     }
13401
13402     /* write test */
13403     for (i = 0; i < 4; i++) {
13404         up = (U32*)(buf + i);
13405         *up = 0xBeef;
13406         if (*up != 0xBeef) {
13407             printf("write failed (%x)\n", *up);
13408             exit(3);
13409         }
13410     }
13411
13412     exit(0);
13413 #else
13414     printf("1\n");
13415     exit(1);
13416 #endif
13417     return 0;
13418 }
13419 EOCP
13420 set try
13421 if eval $compile_ok; then
13422         echo "(Testing for character data alignment may dump core.)" >&4
13423         $run ./try 2>&1 >/dev/null
13424         case "$?" in
13425         0)      cat >&4 <<EOM
13426 You can access character data pretty unalignedly.
13427 EOM
13428                 d_u32align="$undef"
13429                 ;;
13430         *)      cat >&4 <<EOM
13431 It seems that you must access character data in an aligned manner.
13432 EOM
13433                 d_u32align="$define"
13434                 ;;
13435         esac
13436         $rm -f core core.try.* try.core
13437 else
13438         rp='Can you access character data at unaligned addresses?'
13439         dflt='n'
13440         . ./myread
13441         case "$ans" in
13442         [yY]*)  d_u32align="$undef"  ;;
13443         *)      d_u32align="$define" ;;
13444         esac
13445 fi
13446
13447 : see if ualarm exists
13448 set ualarm d_ualarm
13449 eval $inlibc
13450
13451 : see if umask exists
13452 set umask d_umask
13453 eval $inlibc
13454
13455 : see if unordered exists
13456 set unordered d_unordered
13457 eval $inlibc
13458
13459 : see if usleep exists
13460 set usleep d_usleep
13461 eval $inlibc
13462
13463 : see if prototype for usleep is available
13464 echo " "
13465 set d_usleepproto usleep $i_unistd unistd.h
13466 eval $hasproto
13467
13468 : see if ustat exists
13469 set ustat d_ustat
13470 eval $inlibc
13471
13472 : backward compatibility for d_hvfork
13473 if test X$d_hvfork != X; then
13474         d_vfork="$d_hvfork"
13475         d_hvfork=''
13476 fi
13477 : see if there is a vfork
13478 val=''
13479 set vfork val
13480 eval $inlibc
13481
13482 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13483 : perl on Solaris 2.x, and probably elsewhere.
13484 case "$val" in
13485 $define)
13486         echo " "
13487         case "$usevfork" in
13488         false) dflt='n';;
13489         *) dflt='y';;
13490         esac
13491         cat <<'EOM'
13492  
13493 Perl can only use a vfork() that doesn't suffer from strict
13494 restrictions on calling functions or modifying global data in
13495 the child.  For example, glibc-2.1 contains such a vfork()
13496 that is unsuitable.  If your system provides a proper fork()
13497 call, chances are that you do NOT want perl to use vfork().
13498
13499 EOM
13500         rp="Do you still want to use vfork()?"
13501         . ./myread
13502         case "$ans" in
13503         y|Y) ;;
13504         *)
13505                 echo "Ok, we won't use vfork()."
13506                 val="$undef"
13507                 ;;
13508         esac
13509         ;;
13510 esac
13511 set d_vfork
13512 eval $setvar
13513 case "$d_vfork" in
13514 $define) usevfork='true';;
13515 *) usevfork='false';;
13516 esac
13517
13518 : see if closedir exists
13519 set closedir d_closedir
13520 eval $inlibc
13521
13522 case "$d_closedir" in
13523 "$define")
13524         echo " "
13525         echo "Checking whether closedir() returns a status..." >&4
13526         cat > try.c <<EOM
13527 #$i_dirent I_DIRENT             /**/
13528 #$i_sysdir I_SYS_DIR            /**/
13529 #$i_sysndir I_SYS_NDIR          /**/
13530 #$i_systypes I_SYS_TYPES        /**/
13531
13532 #if defined(I_SYS_TYPES)
13533 #include <sys/types.h>
13534 #endif
13535 #if defined(I_DIRENT)
13536 #include <dirent.h>
13537 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13538 #include <sys/dir.h>
13539 #endif
13540 #else
13541 #ifdef I_SYS_NDIR
13542 #include <sys/ndir.h>
13543 #else
13544 #ifdef I_SYS_DIR
13545 #ifdef hp9000s500
13546 #include <ndir.h>       /* may be wrong in the future */
13547 #else
13548 #include <sys/dir.h>
13549 #endif
13550 #endif
13551 #endif
13552 #endif 
13553 int main() { return closedir(opendir(".")); }
13554 EOM
13555         set try
13556         if eval $compile_ok; then
13557                 if $run ./try > /dev/null 2>&1 ; then
13558                         echo "Yes, it does."
13559                         val="$undef"
13560                 else
13561                         echo "No, it doesn't."
13562                         val="$define"
13563                 fi
13564         else
13565                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13566                 val="$define"
13567         fi
13568         ;;
13569 *)
13570         val="$undef";
13571         ;;
13572 esac
13573 set d_void_closedir
13574 eval $setvar
13575 $rm -f try try.*
13576 : see if there is a wait4
13577 set wait4 d_wait4
13578 eval $inlibc
13579
13580 : see if waitpid exists
13581 set waitpid d_waitpid
13582 eval $inlibc
13583
13584 : see if wcstombs exists
13585 set wcstombs d_wcstombs
13586 eval $inlibc
13587
13588 : see if wctomb exists
13589 set wctomb d_wctomb
13590 eval $inlibc
13591
13592 : see if writev exists
13593 set writev d_writev
13594 eval $inlibc
13595
13596 : preserve RCS keywords in files with variable substitution, grrr
13597 Date='$Date'
13598 Id='$Id'
13599 Log='$Log'
13600 RCSfile='$RCSfile'
13601 Revision='$Revision'
13602
13603 : check for alignment requirements
13604 echo " "
13605 case "$usecrosscompile$multiarch" in
13606 *$define*)
13607         $cat <<EOM
13608 You seem to be either cross-compiling or doing a multiarchitecture build,
13609 skipping the memory alignment check.
13610
13611 EOM
13612         case "$alignbytes" in
13613         '') alignbytes=8 ;;
13614         esac
13615         ;;
13616 *)
13617         case "$alignbytes" in
13618         '') echo "Checking alignment constraints..." >&4
13619                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13620                         $cat >try.c <<'EOCP'
13621 typedef long double NV;
13622 EOCP
13623                 else
13624                         $cat >try.c <<'EOCP'
13625 typedef double NV;
13626 EOCP
13627                 fi
13628                 $cat >>try.c <<'EOCP'
13629 #include <stdio.h>
13630 struct foobar {
13631         char foo;
13632         NV bar;
13633 } try_algn;
13634 int main()
13635 {
13636     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13637     return(0);
13638 }
13639 EOCP
13640                 set try
13641                 if eval $compile_ok; then
13642                         dflt=`$run ./try`
13643                 else
13644                         dflt='8'
13645                         echo "(I can't seem to compile the test program...)"
13646                 fi
13647                 ;;
13648         *) dflt="$alignbytes"
13649                 ;;
13650         esac
13651         rp="Doubles must be aligned on a how-many-byte boundary?"
13652         . ./myread
13653         alignbytes="$ans"
13654         $rm -f try.c try
13655         ;;
13656 esac
13657
13658
13659 : set the base revision
13660 baserev=5.0
13661
13662 : how do we catenate cpp tokens here?
13663 echo " "
13664 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13665 $cat >cpp_stuff.c <<'EOCP'
13666 #define RCAT(a,b)a/**/b
13667 #define ACAT(a,b)a ## b
13668 RCAT(Rei,ser)
13669 ACAT(Cir,cus)
13670 EOCP
13671 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13672 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13673         echo "Oh!  Smells like ANSI's been here." >&4
13674         echo "We can catify or stringify, separately or together!"
13675         cpp_stuff=42
13676 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13677         echo "Ah, yes!  The good old days!" >&4
13678         echo "However, in the good old days we don't know how to stringify and"
13679         echo "catify at the same time."
13680         cpp_stuff=1
13681 else
13682         $cat >&4 <<EOM
13683 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13684 to have to edit the values of CAT[2-5] in config.h...
13685 EOM
13686         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13687 fi
13688 $rm -f cpp_stuff.*
13689
13690 : see if this is a db.h system
13691 set db.h i_db
13692 eval $inhdr
13693
13694 case "$i_db" in
13695 $define)
13696         : Check db version.
13697         echo " "
13698         echo "Checking Berkeley DB version ..." >&4
13699         $cat >try.c <<EOCP
13700 #$d_const HASCONST
13701 #ifndef HASCONST
13702 #define const
13703 #endif
13704 #include <sys/types.h>
13705 #include <stdio.h>
13706 #include <db.h>
13707 int main(int argc, char *argv[])
13708 {
13709 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13710     int Major, Minor, Patch ;
13711     unsigned long Version ;
13712     (void)db_version(&Major, &Minor, &Patch) ;
13713     if (argc == 2) {
13714         printf("%d %d %d %d %d %d\n",
13715                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13716                Major, Minor, Patch);
13717         exit(0);
13718     }
13719     printf("You have Berkeley DB Version 2 or greater.\n");
13720
13721     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13722                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13723     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13724                 Major, Minor, Patch) ;
13725
13726     /* check that db.h & libdb are compatible */
13727     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13728         printf("db.h and libdb are incompatible.\n") ;
13729         exit(3);        
13730     }
13731
13732     printf("db.h and libdb are compatible.\n") ;
13733
13734     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13735                 + DB_VERSION_PATCH ;
13736
13737     /* needs to be >= 2.3.4 */
13738     if (Version < 2003004) {
13739     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13740         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13741         exit(2);        
13742     }
13743
13744     exit(0);
13745 #else
13746 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13747     if (argc == 2) {
13748         printf("1 0 0\n");
13749         exit(0);
13750     }
13751     printf("You have Berkeley DB Version 1.\n");
13752     exit(0);    /* DB version < 2: the coast is clear. */
13753 #else
13754     exit(1);    /* <db.h> not Berkeley DB? */
13755 #endif
13756 #endif
13757 }
13758 EOCP
13759         set try
13760         if eval $compile_ok && $run ./try; then
13761                 echo 'Looks OK.' >&4
13762                 set `$run ./try 1`
13763                 db_version_major=$1
13764                 db_version_minor=$2
13765                 db_version_patch=$3
13766         else
13767                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13768                 i_db=$undef
13769                 case " $libs " in
13770                 *"-ldb "*)
13771                         : Remove db from list of libraries to use
13772                         echo "Removing unusable -ldb from library list" >&4
13773                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13774                         shift
13775                         libs="$*"
13776                         echo "libs = $libs" >&4
13777                         ;;
13778                 esac
13779         fi
13780         $rm -f try.*
13781         ;;
13782 esac
13783
13784 case "$i_db" in
13785 define)
13786         : Check the return type needed for hash 
13787         echo " "
13788         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13789         $cat >try.c <<EOCP
13790 #$d_const HASCONST
13791 #ifndef HASCONST
13792 #define const
13793 #endif
13794 #include <sys/types.h>
13795 #include <db.h>
13796
13797 #ifndef DB_VERSION_MAJOR
13798 u_int32_t hash_cb (ptr, size)
13799 const void *ptr;
13800 size_t size;
13801 {
13802 }
13803 HASHINFO info;
13804 int main()
13805 {
13806         info.hash = hash_cb;
13807 }
13808 #endif
13809 EOCP
13810         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13811                 if $contains warning try.out >>/dev/null 2>&1 ; then
13812                         db_hashtype='int'
13813                 else
13814                         db_hashtype='u_int32_t'
13815                 fi
13816         else
13817                 : XXX Maybe we should just give up here.
13818                 db_hashtype=u_int32_t
13819                 $cat try.out >&4
13820                 echo "Help:  I can't seem to compile the db test program." >&4
13821                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13822         fi
13823         $rm -f try.*
13824         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13825         ;;
13826 *)      db_hashtype=u_int32_t
13827         ;;
13828 esac
13829 case "$i_db" in
13830 define)
13831         : Check the return type needed for prefix 
13832         echo " "
13833         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13834         cat >try.c <<EOCP
13835 #$d_const HASCONST
13836 #ifndef HASCONST
13837 #define const
13838 #endif
13839 #include <sys/types.h>
13840 #include <db.h>
13841
13842 #ifndef DB_VERSION_MAJOR
13843 size_t prefix_cb (key1, key2)
13844 const DBT *key1;
13845 const DBT *key2;
13846 {
13847 }
13848 BTREEINFO info;
13849 int main()
13850 {
13851         info.prefix = prefix_cb;
13852 }
13853 #endif
13854 EOCP
13855         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13856                 if $contains warning try.out >>/dev/null 2>&1 ; then
13857                         db_prefixtype='int'
13858                 else
13859                         db_prefixtype='size_t'
13860                 fi
13861         else
13862                 db_prefixtype='size_t'
13863                 : XXX Maybe we should just give up here.
13864                 $cat try.out >&4
13865                 echo "Help:  I can't seem to compile the db test program." >&4
13866                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13867         fi
13868         $rm -f try.*
13869         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13870         ;;
13871 *)      db_prefixtype='size_t'
13872         ;;
13873 esac
13874
13875
13876 : How can we generate normalized random numbers ?
13877 echo " "
13878 echo "Looking for a random number function..." >&4
13879 case "$randfunc" in
13880 '')
13881         if set drand48 val -f; eval $csym; $val; then
13882                 dflt="drand48"
13883                 echo "Good, found drand48()." >&4
13884         elif set random val -f; eval $csym; $val; then
13885                 dflt="random"
13886                 echo "OK, found random()." >&4
13887         else
13888                 dflt="rand"
13889                 echo "Yick, looks like I have to use rand()." >&4
13890         fi
13891         echo " "
13892         ;;
13893 *)
13894         dflt="$randfunc"
13895         ;;
13896 esac
13897 cont=true
13898
13899 case "$ccflags" in
13900 *-Dmy_rand=*|*-Dmy_srand=*)
13901         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13902         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13903         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13904         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13905         ;;
13906 esac
13907
13908 while $test "$cont"; do
13909         rp="Use which function to generate random numbers?"
13910         . ./myread
13911         if $test "$ans" = "$dflt"; then
13912                 : null
13913         else
13914                 randbits=''
13915         fi
13916         randfunc="$ans"
13917         if set $ans val -f; eval $csym; $val; then
13918                 cont=''
13919         else
13920                 dflt=y
13921                 rp="I cannot find function $ans. Use that name anyway?"
13922                 . ./myread
13923                 dflt=rand
13924                 case "$ans" in
13925                         [yY]*) cont='';;
13926                 esac
13927         fi
13928         case "$cont" in
13929         '')
13930                 case "$randfunc" in
13931                 drand48)
13932                         drand01="drand48()"
13933                         seedfunc="srand48"
13934                         randbits=48
13935                         randseedtype=long
13936                         ;;
13937                 rand|random)
13938                         case "$randbits" in
13939                         '')
13940 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13941                                 $cat >try.c <<EOCP
13942 #$i_unistd I_UNISTD
13943 #$i_stdlib I_STDLIB
13944 #include <stdio.h>
13945 #ifdef I_UNISTD
13946 #  include <unistd.h>
13947 #endif
13948 #ifdef I_STDLIB
13949 #  include <stdlib.h>
13950 #endif
13951 int main()
13952 {
13953         register int i;
13954         register unsigned long tmp;
13955         register unsigned long max = 0L;
13956
13957         for (i = 1000; i; i--) {
13958                 tmp = (unsigned long) $randfunc();
13959                 if (tmp > max) max = tmp;
13960         }
13961         for (i = 0; max; i++)
13962                 max /= 2;
13963         printf("%d\n",i);
13964 }
13965 EOCP
13966                                 set try
13967                                 if eval $compile_ok; then
13968                                         dflt=`try`
13969                                 else
13970                                         dflt='?'
13971                                         echo "(I can't seem to compile the test program...)"
13972                                 fi
13973                                 ;;
13974                         *)
13975                                 dflt="$randbits"
13976                                 ;;
13977                         esac
13978                         rp="How many bits does your $randfunc() function produce?"
13979                         . ./myread
13980                         randbits="$ans"
13981                         $rm -f try.c try
13982                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13983                         seedfunc="s$randfunc"
13984                         randseedtype=unsigned
13985                         ;;
13986                 *)
13987                         dflt="31"
13988                         rp="How many bits does your $randfunc() function produce?"
13989                         . ./myread
13990                         randbits="$ans"
13991                         seedfunc="s$randfunc"
13992                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13993                         if set $seedfunc val -f; eval $csym; $val; then
13994                                 echo "(Using $seedfunc() to seed random generator)"
13995                         else
13996                                 echo "(Warning: no $seedfunc() to seed random generator)"
13997                                 seedfunc=rand
13998                         fi
13999                         randseedtype=unsigned
14000                         ;;
14001                 esac
14002                 ;;
14003         esac
14004 done
14005
14006 echo " "
14007 echo "Determining whether or not we are on an EBCDIC system..." >&4
14008 $cat >try.c <<'EOM'
14009 int main()
14010 {
14011   if ('M'==0xd4) return 0;
14012   return 1;
14013 }
14014 EOM
14015
14016 val=$undef
14017 set try
14018 if eval $compile_ok; then
14019         if $run ./try; then
14020                 echo "You seem to speak EBCDIC." >&4
14021                 val="$define"
14022         else
14023                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14024         fi
14025 else
14026         echo "I'm unable to compile the test program." >&4
14027         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14028 fi
14029 $rm -f try try.*
14030 set ebcdic
14031 eval $setvar
14032
14033 echo " "
14034 $cat >&4 <<EOM
14035 Checking how to flush all pending stdio output...
14036 EOM
14037 # I only know how to find the first 32 possibly open files on SunOS.
14038 # See also hints/sunos_4_1.sh and util.c  --AD
14039 case "$osname" in
14040 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14041 esac
14042 $cat >>try.c <<EOCP
14043 #include <stdio.h>
14044 #$i_unistd I_UNISTD
14045 #ifdef I_UNISTD
14046 # include <unistd.h>
14047 #endif
14048 #$d_sysconf HAS_SYSCONF
14049 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14050 #ifdef HAS_STDIO_STREAM_ARRAY
14051 # define STDIO_STREAM_ARRAY $stdio_stream_array
14052 #endif
14053 int main() {
14054   FILE* p;
14055   unlink("try.out");
14056   p = fopen("try.out", "w");
14057 #ifdef TRY_FPUTC
14058   fputc('x', p);
14059 #else
14060 # ifdef TRY_FPRINTF
14061   fprintf(p, "x");
14062 # endif
14063 #endif
14064 #ifdef TRY_FFLUSH_NULL
14065   fflush(NULL);
14066 #endif
14067 #ifdef TRY_FFLUSH_ALL
14068   {
14069     long open_max = -1;
14070 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14071     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14072 # else
14073 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14074     open_max = sysconf(_SC_OPEN_MAX);
14075 #  else
14076 #   ifdef FOPEN_MAX
14077     open_max = FOPEN_MAX;
14078 #   else
14079 #    ifdef OPEN_MAX
14080     open_max = OPEN_MAX;
14081 #    else
14082 #     ifdef _NFILE
14083     open_max = _NFILE;
14084 #     endif
14085 #    endif
14086 #   endif
14087 #  endif
14088 # endif 
14089 # ifdef HAS_STDIO_STREAM_ARRAY
14090     if (open_max > 0) {
14091       long i;
14092       for (i = 0; i < open_max; i++)
14093             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14094                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14095                 STDIO_STREAM_ARRAY[i]._flag)
14096                 fflush(&STDIO_STREAM_ARRAY[i]);
14097     }   
14098   }
14099 # endif
14100 #endif
14101   _exit(42);
14102 }
14103 EOCP
14104 : first we have to find out how _not_ to flush
14105 $to try.c
14106 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14107     output=''
14108     set try -DTRY_FPUTC
14109     if eval $compile; then
14110             $run ./try 2>/dev/null
14111             code="$?"
14112             $from try.out
14113             if $test ! -s try.out -a "X$code" = X42; then
14114                 output=-DTRY_FPUTC
14115             fi
14116     fi
14117     case "$output" in
14118     '')
14119             set try -DTRY_FPRINTF
14120             if eval $compile; then
14121                     $run ./try 2>/dev/null
14122                     code="$?"
14123                     $from try.out
14124                     if $test ! -s try.out -a "X$code" = X42; then
14125                         output=-DTRY_FPRINTF
14126                     fi
14127             fi
14128         ;;
14129     esac
14130 fi
14131 : check for fflush NULL behaviour
14132 case "$fflushNULL" in
14133 '')     set try -DTRY_FFLUSH_NULL $output
14134         if eval $compile; then
14135                 $run ./try 2>/dev/null
14136                 code="$?"
14137                 $from try.out
14138                 if $test -s try.out -a "X$code" = X42; then
14139                         fflushNULL="`$cat try.out`"
14140                 else
14141                         if $test "X$code" != X42; then
14142                                 $cat >&4 <<EOM
14143 (If this test failed, don't worry, we'll try another method shortly.)
14144 EOM
14145                         fi
14146                 fi
14147         fi
14148         $rm -f core try.core core.try.*
14149         case "$fflushNULL" in
14150         x)      $cat >&4 <<EOM
14151 Your fflush(NULL) works okay for output streams.
14152 Let's see if it clobbers input pipes...
14153 EOM
14154 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14155 # bug that improperly flushes the input end of pipes.  So we avoid the
14156 # autoflush on fork/system/exec support for now. :-(
14157 $cat >tryp.c <<EOCP
14158 #include <stdio.h>
14159 int
14160 main(int argc, char **argv)
14161 {
14162     char buf[1024];
14163     int i;
14164     char *bp = buf;
14165     while (1) {
14166         while ((i = getc(stdin)) != -1
14167                && (*bp++ = i) != '\n'
14168                && bp < &buf[1024])
14169         /* DO NOTHING */ ;
14170         *bp = '\0';
14171         fprintf(stdout, "%s", buf);
14172         fflush(NULL);
14173         if (i == -1)
14174             return 0;
14175         bp = buf;
14176     }
14177 }
14178 EOCP
14179                 fflushNULL="$define"
14180                 set tryp
14181                 if eval $compile; then
14182                     $rm -f tryp.out
14183                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14184                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14185                        $cat >&4 <<EOM
14186 fflush(NULL) seems to behave okay with input streams.
14187 EOM
14188                         fflushNULL="$define"
14189                     else
14190                         $cat >&4 <<EOM
14191 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14192 EOM
14193                         fflushNULL="$undef"
14194                     fi
14195                 fi
14196                 $rm -f core tryp.c tryp.core core.tryp.*
14197                 ;;
14198         '')     $cat >&4 <<EOM
14199 Your fflush(NULL) isn't working (contrary to ANSI C).
14200 EOM
14201                 fflushNULL="$undef"
14202                 ;;
14203         *)      $cat >&4 <<EOM
14204 Cannot figure out whether your fflush(NULL) works or not.
14205 I'm assuming it doesn't (contrary to ANSI C).
14206 EOM
14207                 fflushNULL="$undef"
14208                 ;;
14209         esac
14210         ;;
14211 $define|true|[yY]*)
14212         fflushNULL="$define"
14213         ;;
14214 *)
14215         fflushNULL="$undef"
14216         ;;
14217 esac
14218 : check explicit looping only if NULL did not work, and if the pipe
14219 : bug does not show up on an explicit flush too
14220 case "$fflushNULL" in
14221 "$undef")
14222         $cat >tryp.c <<EOCP
14223 #include <stdio.h>
14224 int
14225 main(int argc, char **argv)
14226 {
14227     char buf[1024];
14228     int i;
14229     char *bp = buf;
14230     while (1) {
14231         while ((i = getc(stdin)) != -1
14232                && (*bp++ = i) != '\n'
14233                && bp < &buf[1024])
14234         /* DO NOTHING */ ;
14235         *bp = '\0';
14236         fprintf(stdout, "%s", buf);
14237         fflush(stdin);
14238         if (i == -1)
14239             return 0;
14240         bp = buf;
14241     }
14242 }
14243 EOCP
14244         set tryp
14245         if eval $compile; then
14246             $rm -f tryp.out
14247             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14248             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14249                $cat >&4 <<EOM
14250 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14251 EOM
14252                 : now check for fflushall behaviour
14253                 case "$fflushall" in
14254                 '')     set try -DTRY_FFLUSH_ALL $output
14255                         if eval $compile; then
14256                                 $cat >&4 <<EOM
14257 (Now testing the other method--but note that this also may fail.)
14258 EOM
14259                                 $run ./try 2>/dev/null
14260                                 code=$?
14261                                 $from try.out
14262                                 if $test -s try.out -a "X$code" = X42; then
14263                                         fflushall="`$cat try.out`"
14264                                 fi
14265                         fi
14266                         $rm -f core try.core core.try.*
14267                         case "$fflushall" in
14268                         x)      $cat >&4 <<EOM
14269 Whew. Flushing explicitly all the stdio streams works.
14270 EOM
14271                                 fflushall="$define"
14272                                 ;;
14273                         '')     $cat >&4 <<EOM
14274 Sigh. Flushing explicitly all the stdio streams doesn't work.
14275 EOM
14276                                 fflushall="$undef"
14277                                 ;;
14278                         *)      $cat >&4 <<EOM
14279 Cannot figure out whether flushing stdio streams explicitly works or not.
14280 I'm assuming it doesn't.
14281 EOM
14282                                 fflushall="$undef"
14283                                 ;;
14284                         esac
14285                         ;;
14286                 "$define"|true|[yY]*)
14287                         fflushall="$define"
14288                         ;;
14289                 *)
14290                         fflushall="$undef"
14291                         ;;
14292                 esac
14293             else
14294                 $cat >&4 <<EOM
14295 All is futile.  Even fflush(stdin) clobbers input pipes!
14296 EOM
14297                 fflushall="$undef"
14298             fi
14299         else
14300             fflushall="$undef"
14301         fi
14302         $rm -f core tryp.c tryp.core core.tryp.*
14303         ;;
14304 *)      fflushall="$undef"
14305         ;;
14306 esac
14307
14308 case "$fflushNULL$fflushall" in
14309 undefundef)
14310         $cat <<EOM
14311 OK, I give up.  I cannot figure out how to flush pending stdio output.
14312 We won't be flushing handles at all before fork/exec/popen.
14313 EOM
14314         ;;
14315 esac
14316 $rm -f try.* try$exe_ext
14317
14318 : Store the full pathname to the ar program for use in the C program
14319 : Respect a hint or command line value for full_ar.
14320 case "$full_ar" in
14321 '') full_ar=$ar ;;
14322 esac
14323
14324 : Store the full pathname to the sed program for use in the C program
14325 full_sed=$sed
14326
14327 : see what type gids are declared as in the kernel
14328 echo " "
14329 echo "Looking for the type for group ids returned by getgid()."
14330 set gid_t gidtype xxx stdio.h sys/types.h
14331 eval $typedef
14332 case "$gidtype" in
14333 xxx)
14334         xxx=`./findhdr sys/user.h`
14335         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14336         case $1 in
14337         unsigned) dflt="$1 $2" ;;
14338         *) dflt="$1" ;;
14339         esac
14340         ;;
14341 *) dflt="$gidtype";;
14342 esac
14343 case "$gidtype" in
14344 gid_t) echo "gid_t found." ;;
14345 *)      rp="What is the type for group ids returned by getgid()?"
14346         . ./myread
14347         gidtype="$ans"
14348         ;;
14349 esac
14350
14351 echo " "
14352 case "$gidtype" in
14353 *_t) zzz="$gidtype"     ;;
14354 *)   zzz="gid"          ;;
14355 esac
14356 echo "Checking the size of $zzz..." >&4 
14357 cat > try.c <<EOCP
14358 #include <sys/types.h>
14359 #include <stdio.h>
14360 int main() {
14361     printf("%d\n", (int)sizeof($gidtype));
14362     exit(0);
14363 }
14364 EOCP
14365 set try
14366 if eval $compile_ok; then
14367         yyy=`$run ./try`
14368         case "$yyy" in
14369         '')     gidsize=4
14370                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14371                 ;;
14372         *)      gidsize=$yyy
14373                 echo "Your $zzz is $gidsize bytes long."
14374                 ;;
14375         esac
14376 else
14377         gidsize=4
14378         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14379 fi
14380
14381
14382 echo " "
14383 case "$gidtype" in
14384 *_t) zzz="$gidtype"     ;;
14385 *)   zzz="gid"          ;;
14386 esac
14387 echo "Checking the sign of $zzz..." >&4 
14388 cat > try.c <<EOCP
14389 #include <sys/types.h>
14390 #include <stdio.h>
14391 int main() {
14392         $gidtype foo = -1;
14393         if (foo < 0)
14394                 printf("-1\n");
14395         else
14396                 printf("1\n");
14397 }
14398 EOCP
14399 set try
14400 if eval $compile; then
14401         yyy=`$run ./try`
14402         case "$yyy" in
14403         '')     gidsign=1
14404                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14405                 ;;
14406         *)      gidsign=$yyy
14407                 case "$gidsign" in
14408                  1) echo "Your $zzz is unsigned." ;;
14409                 -1) echo "Your $zzz is signed."   ;;
14410                 esac
14411                 ;;
14412         esac
14413 else
14414         gidsign=1
14415         echo "(I can't compile the test program--guessing unsigned.)" >&4
14416 fi
14417
14418
14419 echo " "
14420
14421 if $test X"$quadtype" != X; then
14422
14423 echo "Checking how to print 64-bit integers..." >&4
14424
14425 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14426         $cat >try.c <<'EOCP'
14427 #include <sys/types.h>
14428 #include <stdio.h>
14429 int main() {
14430   int q = 12345678901;
14431   printf("%ld\n", q);
14432 }
14433 EOCP
14434         set try
14435         if eval $compile; then
14436                 yyy=`$run ./try`
14437                 case "$yyy" in
14438                 12345678901)
14439                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14440                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14441                         echo "We will use %d."
14442                         ;;
14443                 esac
14444         fi
14445 fi
14446
14447 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14448         $cat >try.c <<'EOCP'
14449 #include <sys/types.h>
14450 #include <stdio.h>
14451 int main() {
14452   long q = 12345678901;
14453   printf("%ld\n", q);
14454 }
14455 EOCP
14456         set try
14457         if eval $compile; then
14458                 yyy=`$run ./try`
14459                 case "$yyy" in
14460                 12345678901)
14461                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14462                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14463                         echo "We will use %ld."
14464                         ;;
14465                 esac
14466         fi
14467 fi
14468
14469 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14470         $cat >try.c <<'EOCP'
14471 #include <sys/types.h>
14472 #include <inttypes.h>
14473 #include <stdio.h>
14474 int main() {
14475   int64_t q = 12345678901;
14476   printf("%" PRId64 "\n", q);
14477 }
14478 EOCP
14479         set try
14480         if eval $compile; then
14481                 yyy=`$run ./try`
14482                 case "$yyy" in
14483                 12345678901)
14484                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14485                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14486                         echo "We will use the C9X style."
14487                         ;;
14488                 esac
14489         fi
14490 fi
14491
14492 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14493         $cat >try.c <<EOCP
14494 #include <sys/types.h>
14495 #include <stdio.h>
14496 int main() {
14497   $quadtype q = 12345678901;
14498   printf("%Ld\n", q);
14499 }
14500 EOCP
14501         set try
14502         if eval $compile; then
14503                 yyy=`$run ./try`
14504                 case "$yyy" in
14505                 12345678901)
14506                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14507                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14508                         echo "We will use %Ld."
14509                         ;;
14510                 esac
14511         fi
14512 fi
14513
14514 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14515         $cat >try.c <<'EOCP'
14516 #include <sys/types.h>
14517 #include <stdio.h>
14518 int main() {
14519   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14520   printf("%lld\n", q);
14521 }
14522 EOCP
14523         set try
14524         if eval $compile; then
14525                 yyy=`$run ./try`
14526                 case "$yyy" in
14527                 12345678901)
14528                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14529                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14530                         echo "We will use the %lld style."
14531                         ;;
14532                 esac
14533         fi
14534 fi
14535
14536 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14537         $cat >try.c <<EOCP
14538 #include <sys/types.h>
14539 #include <stdio.h>
14540 int main() {
14541   $quadtype q = 12345678901;
14542   printf("%qd\n", q);
14543 }
14544 EOCP
14545         set try
14546         if eval $compile; then
14547                 yyy=`$run ./try`
14548                 case "$yyy" in
14549                 12345678901)
14550                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14551                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14552                         echo "We will use %qd."
14553                         ;;
14554                 esac
14555         fi
14556 fi
14557
14558 if $test X"$sPRId64" = X; then
14559         echo "Cannot figure out how to print 64-bit integers." >&4
14560 fi
14561
14562 $rm -f try try.*
14563
14564 fi
14565
14566 case "$sPRId64" in
14567 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14568         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14569         ;;
14570 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14571         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14572         ;;
14573 esac
14574
14575
14576 echo " "
14577 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14578
14579 if $test X"$ivsize" = X8; then
14580         ivdformat="$sPRId64"
14581         uvuformat="$sPRIu64"
14582         uvoformat="$sPRIo64"
14583         uvxformat="$sPRIx64"
14584         uvXUformat="$sPRIXU64"
14585 else
14586         if $test X"$ivsize" = X"$longsize"; then
14587                 ivdformat='"ld"'
14588                 uvuformat='"lu"'
14589                 uvoformat='"lo"'
14590                 uvxformat='"lx"'
14591                 uvXUformat='"lX"'
14592         else
14593                 if $test X"$ivsize" = X"$intsize"; then
14594                         ivdformat='"d"'
14595                         uvuformat='"u"'
14596                         uvoformat='"o"'
14597                         uvxformat='"x"'
14598                         uvXUformat='"X"'
14599                 else
14600                         : far out
14601                         if $test X"$ivsize" = X"$shortsize"; then
14602                                 ivdformat='"hd"'
14603                                 uvuformat='"hu"'
14604                                 uvoformat='"ho"'
14605                                 uvxformat='"hx"'
14606                                 uvXUformat='"hX"'
14607                         fi
14608                 fi
14609         fi
14610 fi
14611
14612 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14613         nveformat="$sPRIeldbl"
14614         nvfformat="$sPRIfldbl"
14615         nvgformat="$sPRIgldbl"
14616         nvEUformat="$sPRIEUldbl"
14617         nvFUformat="$sPRIFUldbl"
14618         nvGUformat="$sPRIGUldbl"
14619 else
14620         nveformat='"e"'
14621         nvfformat='"f"'
14622         nvgformat='"g"'
14623         nvEUformat='"E"'
14624         nvFUformat='"F"'
14625         nvGUformat='"G"'
14626 fi
14627
14628 case "$ivdformat" in
14629 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14630     exit 1
14631     ;;
14632 esac
14633
14634
14635 echo " "
14636 $echo "Checking the format string to be used for gids..." >&4
14637
14638 case "$gidsign" in
14639 -1)     if $test X"$gidsize" = X"$ivsize"; then
14640                 gidformat="$ivdformat"
14641         else
14642                 if $test X"$gidsize" = X"$longsize"; then
14643                         gidformat='"ld"'
14644                 else
14645                         if $test X"$gidsize" = X"$intsize"; then
14646                                 gidformat='"d"'
14647                         else
14648                                 if $test X"$gidsize" = X"$shortsize"; then
14649                                         gidformat='"hd"'
14650                                 fi
14651                         fi
14652                 fi
14653         fi
14654         ;;
14655 *)      if $test X"$gidsize" = X"$uvsize"; then
14656                 gidformat="$uvuformat"
14657         else
14658                 if $test X"$gidsize" = X"$longsize"; then
14659                         gidformat='"lu"'
14660                 else
14661                         if $test X"$gidsize" = X"$intsize"; then
14662                                 gidformat='"u"'
14663                         else
14664                                 if $test X"$gidsize" = X"$shortsize"; then
14665                                         gidformat='"hu"'
14666                                 fi
14667                         fi
14668                 fi
14669         fi
14670         ;;
14671 esac
14672
14673 : see if getgroups exists
14674 set getgroups d_getgrps
14675 eval $inlibc
14676
14677 : see if setgroups exists
14678 set setgroups d_setgrps
14679 eval $inlibc
14680
14681
14682 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14683 echo " "
14684 case "$d_getgrps$d_setgrps" in
14685 *define*)
14686         case "$groupstype" in
14687         '') dflt="$gidtype" ;;
14688         *)  dflt="$groupstype" ;;
14689         esac
14690         $cat <<EOM
14691 What type of pointer is the second argument to getgroups() and setgroups()?
14692 Usually this is the same as group ids, $gidtype, but not always.
14693
14694 EOM
14695         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14696         . ./myread
14697         groupstype="$ans"
14698         ;;
14699 *)  groupstype="$gidtype";;
14700 esac
14701
14702 echo " "
14703 echo "Checking if your $make program sets \$(MAKE)..." >&4
14704 case "$make_set_make" in
14705 '')
14706         $sed 's/^X //' > testmake.mak << 'EOF'
14707 Xall:
14708 X       @echo 'maketemp="$(MAKE)"'
14709 EOF
14710         case "`$make -f testmake.mak 2>/dev/null`" in
14711         *maketemp=*) make_set_make='#' ;;
14712         *)      make_set_make="MAKE=$make" ;;
14713         esac
14714         $rm -f testmake.mak
14715         ;;
14716 esac
14717 case "$make_set_make" in
14718 '#') echo "Yup, it does.";;
14719 *) echo "Nope, it doesn't.";;
14720 esac
14721
14722 : see what type is used for mode_t
14723 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14724 set mode_t modetype int stdio.h sys/types.h
14725 eval $typedef_ask
14726
14727 : see if stdarg is available
14728 echo " "
14729 if $test `./findhdr stdarg.h`; then
14730         echo "<stdarg.h> found." >&4
14731         valstd="$define"
14732 else
14733         echo "<stdarg.h> NOT found." >&4
14734         valstd="$undef"
14735 fi
14736
14737 : see if varags is available
14738 echo " "
14739 if $test `./findhdr varargs.h`; then
14740         echo "<varargs.h> found." >&4
14741 else
14742         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14743 fi
14744
14745 : set up the varargs testing programs
14746 $cat > varargs.c <<EOP
14747 #ifdef I_STDARG
14748 #include <stdarg.h>
14749 #endif
14750 #ifdef I_VARARGS
14751 #include <varargs.h>
14752 #endif
14753
14754 #ifdef I_STDARG
14755 int f(char *p, ...)
14756 #else
14757 int f(va_alist)
14758 va_dcl
14759 #endif
14760 {
14761         va_list ap;
14762 #ifndef I_STDARG
14763         char *p;
14764 #endif
14765 #ifdef I_STDARG
14766         va_start(ap,p);
14767 #else
14768         va_start(ap);
14769         p = va_arg(ap, char *);
14770 #endif
14771         va_end(ap);
14772 }
14773 EOP
14774 $cat > varargs <<EOP
14775 $startsh
14776 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14777         echo "true"
14778 else
14779         echo "false"
14780 fi
14781 $rm -f varargs$_o
14782 EOP
14783 chmod +x varargs
14784
14785 : now check which varargs header should be included
14786 echo " "
14787 i_varhdr=''
14788 case "$valstd" in
14789 "$define")
14790         if `./varargs I_STDARG`; then
14791                 val='stdarg.h'
14792         elif `./varargs I_VARARGS`; then
14793                 val='varargs.h'
14794         fi
14795         ;;
14796 *)
14797         if `./varargs I_VARARGS`; then
14798                 val='varargs.h'
14799         fi
14800         ;;
14801 esac
14802 case "$val" in
14803 '')
14804 echo "I could not find the definition for va_dcl... You have problems..." >&4
14805         val="$undef"; set i_stdarg; eval $setvar
14806         val="$undef"; set i_varargs; eval $setvar
14807         ;;
14808 *) 
14809         set i_varhdr
14810         eval $setvar
14811         case "$i_varhdr" in
14812         stdarg.h)
14813                 val="$define"; set i_stdarg; eval $setvar
14814                 val="$undef"; set i_varargs; eval $setvar
14815                 ;;
14816         varargs.h)
14817                 val="$undef"; set i_stdarg; eval $setvar
14818                 val="$define"; set i_varargs; eval $setvar
14819                 ;;
14820         esac
14821         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14822 esac
14823 $rm -f varargs*
14824
14825 : see if we need va_copy
14826 echo " "
14827 case "$i_stdarg" in
14828 "$define")
14829         $cat >try.c <<EOCP
14830 #include <stdarg.h>
14831 #include <stdio.h>
14832 #$i_stdlib I_STDLIB
14833 #ifdef I_STDLIB
14834 #include <stdlib.h>
14835 #endif
14836 #include <signal.h>
14837
14838 int
14839 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14840 {
14841   return vfprintf(f, fmt, *valp);
14842 }
14843  
14844 int    
14845 myvfprintf(FILE *f, const  char *fmt, va_list val)
14846 {
14847   return ivfprintf(f, fmt, &val);
14848 }
14849       
14850 int
14851 myprintf(char *fmt, ...) 
14852 {
14853   va_list val;
14854   va_start(val, fmt);
14855   return myvfprintf(stdout, fmt, val); 
14856 }         
14857
14858 int
14859 main(int ac, char **av)
14860 {
14861   signal(SIGSEGV, exit);
14862
14863   myprintf("%s%cs all right, then\n", "that", '\'');                            
14864   exit(0);      
14865 }
14866 EOCP
14867         set try
14868         if eval $compile && $run ./try 2>&1 >/dev/null; then
14869                 case "`$run ./try`" in
14870                 "that's all right, then")
14871                         okay=yes
14872                         ;;
14873                 esac
14874         fi
14875         case "$okay" in
14876         yes)    echo "It seems that you don't need va_copy()." >&4
14877                 need_va_copy="$undef"
14878                 ;;
14879         *)      echo "It seems that va_copy() or similar will be needed." >&4
14880                 need_va_copy="$define"
14881                 ;;
14882         esac
14883         $rm -f try.* core core.* *.core *.core.*
14884         ;;
14885 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14886         ;;
14887 esac
14888
14889 : define a fucntion to check prototypes
14890 $cat > protochk <<EOSH
14891 $startsh
14892 cc="$cc"
14893 optimize="$optimize"
14894 ccflags="$ccflags"
14895 prototype="$prototype"
14896 define="$define"
14897 rm=$rm
14898 EOSH
14899
14900 $cat >> protochk <<'EOSH'
14901
14902 $rm -f try.c
14903 foo="$1"
14904 shift
14905 while test $# -ge 2; do
14906         case "$1" in
14907                 $define) echo "#include <$2>" >> try.c ;;
14908                 literal) echo "$2" >> try.c ;;
14909         esac
14910     shift 2
14911 done
14912 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14913 cat >> try.c <<'EOCP'
14914 #ifdef CAN_PROTOTYPE
14915 #define _(args) args
14916 #else
14917 #define _(args) ()
14918 #endif
14919 EOCP
14920 echo "$foo" >> try.c
14921 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14922 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14923 status=$?
14924 $rm -f try.[co]
14925 exit $status
14926 EOSH
14927 chmod +x protochk
14928 $eunicefix protochk
14929
14930 : see what type is used for size_t
14931 rp="What is the type used for the length parameter for string functions?"
14932 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14933 eval $typedef_ask
14934
14935 : check for type of arguments to gethostbyaddr. 
14936 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14937         case "$d_gethbyaddr" in
14938         $define)
14939                 $cat <<EOM
14940
14941 Checking to see what type of arguments are accepted by gethostbyaddr().
14942 EOM
14943                 hdrs="$define sys/types.h
14944                         $d_socket sys/socket.h 
14945                         $i_niin netinet/in.h 
14946                         $i_netdb netdb.h
14947                         $i_unistd unistd.h"
14948                 : The first arg can 'char *' or 'void *'
14949                 : The second arg is some of integral type
14950                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14951                         for yyy in size_t long int; do
14952                                 case "$netdb_host_type" in
14953                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14954                                         if ./protochk "$try" $hdrs; then
14955                                                 echo "Your system accepts $xxx for the first arg."
14956                                                 echo "...and $yyy for the second arg."
14957                                                 netdb_host_type="$xxx"
14958                                                 netdb_hlen_type="$yyy"
14959                                         fi
14960                                         ;;
14961                                 esac
14962                         done
14963                 done
14964                 : In case none of those worked, prompt the user.
14965                 case "$netdb_host_type" in
14966                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14967                         dflt='char *'
14968                         . ./myread
14969                         netdb_host_type=$ans
14970                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14971                         dflt="$sizetype"
14972                         . ./myread
14973                         netdb_hlen_type=$ans
14974                         ;;
14975                 esac
14976                 ;;
14977         *)      : no gethostbyaddr, so pick harmless defaults
14978                 netdb_host_type='char *'
14979                 netdb_hlen_type="$sizetype"
14980                 ;;
14981         esac
14982         # Remove the "const" if needed. -- but then we'll have a 
14983         # prototype clash!
14984         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14985 fi
14986
14987 : check for type of argument to gethostbyname. 
14988 if test "X$netdb_name_type" = X ; then
14989         case "$d_gethbyname" in
14990         $define)
14991                 $cat <<EOM
14992
14993 Checking to see what type of argument is accepted by gethostbyname().
14994 EOM
14995                 hdrs="$define sys/types.h
14996                         $d_socket sys/socket.h 
14997                         $i_niin netinet/in.h 
14998                         $i_netdb netdb.h
14999                         $i_unistd unistd.h"
15000                 for xxx in "const char *" "char *"; do
15001                         case "$netdb_name_type" in
15002                         '')     try="extern struct hostent *gethostbyname($xxx);"
15003                                 if ./protochk "$try" $hdrs; then
15004                                         echo "Your system accepts $xxx."
15005                                         netdb_name_type="$xxx"
15006                                 fi
15007                                 ;;
15008                         esac
15009                 done
15010                 : In case none of those worked, prompt the user.
15011                 case "$netdb_name_type" in
15012                 '')     rp='What is the type for the 1st argument to gethostbyname?'
15013                         dflt='char *'
15014                         . ./myread
15015                         netdb_name_type=$ans
15016                         ;;
15017                 esac
15018                 ;;
15019         *)      : no gethostbyname, so pick harmless default
15020                 netdb_name_type='char *'
15021                 ;;
15022         esac
15023 fi
15024
15025 : check for type of 1st argument to getnetbyaddr. 
15026 if test "X$netdb_net_type" = X ; then
15027         case "$d_getnbyaddr" in
15028         $define)
15029                 $cat <<EOM
15030
15031 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15032 EOM
15033                 hdrs="$define sys/types.h
15034                         $d_socket sys/socket.h 
15035                         $i_niin netinet/in.h 
15036                         $i_netdb netdb.h
15037                         $i_unistd unistd.h"
15038                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15039                         case "$netdb_net_type" in
15040                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15041                                 if ./protochk "$try" $hdrs; then
15042                                         echo "Your system accepts $xxx."
15043                                         netdb_net_type="$xxx"
15044                                 fi
15045                                 ;;
15046                         esac
15047                 done
15048                 : In case none of those worked, prompt the user.
15049                 case "$netdb_net_type" in
15050                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15051                         dflt='long'
15052                         . ./myread
15053                         netdb_net_type=$ans
15054                         ;;
15055                 esac
15056                 ;;
15057         *)      : no getnetbyaddr, so pick harmless default
15058                 netdb_net_type='long'
15059                 ;;
15060         esac
15061 fi
15062 : locate the preferred pager for this system
15063 case "$pager" in
15064 '')
15065         dflt=''
15066         case "$pg" in
15067         /*) dflt=$pg;;
15068         [a-zA-Z]:/*) dflt=$pg;;
15069         esac
15070         case "$more" in
15071         /*) dflt=$more;;
15072         [a-zA-Z]:/*) dflt=$more;;
15073         esac
15074         case "$less" in
15075         /*) dflt=$less;;
15076         [a-zA-Z]:/*) dflt=$less;;
15077         esac
15078         case "$dflt" in
15079         '') dflt=/usr/ucb/more;;
15080         esac
15081         ;;
15082 *) dflt="$pager";;
15083 esac
15084 echo " "
15085 fn=f/
15086 rp='What pager is used on your system?'
15087 . ./getfile
15088 pager="$ans"
15089
15090 : see what type pids are declared as in the kernel
15091 rp="What is the type of process ids on this system?"
15092 set pid_t pidtype int stdio.h sys/types.h
15093 eval $typedef_ask
15094
15095 : Find earliest binary compatible site_perl subdirectory perl can use.
15096 case "$bincompat5005" in
15097 "$define") xs_apiversion='5.005' ;;
15098 *) xs_apiversion=$version ;;   # The current site_perl version.
15099 esac
15100 : Find earliest pure perl site_perl subdirectory perl can use.
15101 : The versioned directories started at 5.005.
15102 pm_apiversion='5.005'
15103
15104 : see if ar generates random libraries by itself
15105 echo " "
15106 echo "Checking how to generate random libraries on your machine..." >&4
15107 echo 'int bar1() { return bar2(); }' > bar1.c
15108 echo 'int bar2() { return 2; }' > bar2.c
15109 $cat > foo.c <<'EOP'
15110 int main() { printf("%d\n", bar1()); exit(0); }
15111 EOP
15112 $cc $ccflags -c bar1.c >/dev/null 2>&1
15113 $cc $ccflags -c bar2.c >/dev/null 2>&1
15114 $cc $ccflags -c foo.c >/dev/null 2>&1
15115 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15116 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15117         $run ./foobar >/dev/null 2>&1; then
15118         echo "$ar appears to generate random libraries itself."
15119         orderlib=false
15120         ranlib=":"
15121 elif $ar ts bar$_a >/dev/null 2>&1 &&
15122         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15123         $run ./foobar >/dev/null 2>&1; then
15124                 echo "a table of contents needs to be added with '$ar ts'."
15125                 orderlib=false
15126                 ranlib="$ar ts"
15127 else
15128         case "$ranlib" in
15129         :) ranlib='';;
15130         '')
15131                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15132                 $test -f $ranlib || ranlib=''
15133                 ;;
15134         esac
15135         if $test -n "$ranlib"; then
15136                 echo "your system has '$ranlib'; we'll use that."
15137                 orderlib=false
15138         else
15139                 echo "your system doesn't seem to support random libraries"
15140                 echo "so we'll use lorder and tsort to order the libraries."
15141                 orderlib=true
15142                 ranlib=":"
15143         fi
15144 fi
15145 $rm -f foo* bar* 
15146
15147 : check for type of arguments to select. 
15148 case "$selecttype" in
15149 '') case "$d_select" in
15150         $define)
15151                 echo " "
15152                 $cat <<EOM
15153 Checking to see what type of arguments are accepted by select().
15154 EOM
15155                 hdrs="$define sys/types.h
15156                         $i_systime sys/time.h 
15157                         $i_sysselct sys/select.h
15158                         $d_socket sys/socket.h"
15159                 : The first arg can be int, unsigned, or size_t
15160                 : The last arg may or may not be 'const'
15161                 val=''
15162                 : void pointer has been seen but using that
15163                 : breaks the selectminbits test
15164                 for xxx in 'fd_set *' 'int *'; do
15165                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15166                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15167                                         case "$val" in
15168                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15169                                                 if ./protochk "$try" $hdrs; then
15170                                                         echo "Your system accepts $xxx."
15171                                                         val="$xxx"
15172                                                 fi
15173                                                 ;;
15174                                         esac
15175                                 done
15176                         done
15177                 done
15178                 case "$val" in
15179                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15180                         case "$d_fd_set" in
15181                                 $define) dflt="fd_set *" ;;
15182                                 *)              dflt="int *" ;;
15183                         esac
15184                         . ./myread
15185                         val=$ans
15186                         ;;
15187                 esac
15188                 selecttype="$val"
15189                 ;;
15190         *)      : no select, so pick a harmless default
15191                 selecttype='int *'
15192                 ;;
15193         esac
15194         ;;
15195 esac
15196
15197 : check for the select 'width'
15198 case "$selectminbits" in
15199 '') case "$d_select" in
15200         $define)
15201                 $cat <<EOM
15202
15203 Checking to see on how many bits at a time your select() operates...
15204 EOM
15205                 $cat >try.c <<EOCP
15206 #include <sys/types.h>
15207 #$i_time I_TIME
15208 #$i_systime I_SYS_TIME
15209 #$i_systimek I_SYS_TIME_KERNEL
15210 #ifdef I_TIME
15211 #   include <time.h>
15212 #endif
15213 #ifdef I_SYS_TIME
15214 #   ifdef I_SYS_TIME_KERNEL
15215 #       define KERNEL
15216 #   endif
15217 #   include <sys/time.h>
15218 #   ifdef I_SYS_TIME_KERNEL
15219 #       undef KERNEL
15220 #   endif
15221 #endif
15222 #$i_sysselct I_SYS_SELECT
15223 #ifdef I_SYS_SELECT
15224 #include <sys/select.h>
15225 #endif
15226 #$d_socket HAS_SOCKET
15227 #ifdef HAS_SOCKET
15228 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15229 #endif
15230 #include <stdio.h>
15231 $selecttype b;
15232 #define S sizeof(*(b))
15233 #define MINBITS 64
15234 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15235 #define NBITS  (NBYTES * 8)
15236 int main() {
15237     char s[NBYTES];
15238     struct timeval t;
15239     int i;
15240     FILE* fp;
15241     int fd;
15242
15243     fclose(stdin);
15244     fp = fopen("try.c", "r");
15245     if (fp == 0)
15246       exit(1);
15247     fd = fileno(fp);
15248     if (fd < 0)
15249       exit(2);
15250     b = ($selecttype)s;
15251     for (i = 0; i < NBITS; i++)
15252         FD_SET(i, b);
15253     t.tv_sec  = 0;
15254     t.tv_usec = 0;
15255     select(fd + 1, b, 0, 0, &t);
15256     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15257     printf("%d\n", i + 1);
15258     return 0;
15259 }
15260 EOCP
15261                 set try
15262                 if eval $compile_ok; then
15263                         selectminbits=`$run ./try`
15264                         case "$selectminbits" in
15265                         '')     cat >&4 <<EOM
15266 Cannot figure out on how many bits at a time your select() operates.
15267 I'll play safe and guess it is 32 bits.
15268 EOM
15269                                 selectminbits=32
15270                                 bits="32 bits"
15271                                 ;;
15272                         1)      bits="1 bit" ;;
15273                         *)      bits="$selectminbits bits" ;;
15274                         esac
15275                         echo "Your select() operates on $bits at a time." >&4
15276                 else
15277                         rp='What is the minimum number of bits your select() operates on?'
15278                         case "$byteorder" in
15279                         1234|12345678)  dflt=32 ;;
15280                         *)              dflt=1  ;;
15281                         esac
15282                         . ./myread
15283                         val=$ans
15284                         selectminbits="$val"
15285                 fi
15286                 $rm -f try.* try
15287                 ;;
15288         *)      : no select, so pick a harmless default
15289                 selectminbits='32'
15290                 ;;
15291         esac
15292         ;;
15293 esac
15294
15295 : Trace out the files included by signal.h, then look for SIGxxx names.
15296 : Remove SIGARRAYSIZE used by HPUX.
15297 : Remove SIGSTKSIZE used by Linux.
15298 : Remove SIGSTKSZ used by Posix.
15299 : Remove SIGTYP void lines used by OS2.
15300 : Some cpps, like os390, dont give the file name anywhere
15301 if [ "X$fieldn" = X ]; then
15302         : Just make some guesses.  We check them later.
15303         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15304 else
15305         xxx=`echo '#include <signal.h>' |
15306         $cppstdin $cppminus $cppflags 2>/dev/null |
15307         $grep '^[       ]*#.*include' | 
15308         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15309 fi
15310 : Check this list of files to be sure we have parsed the cpp output ok.
15311 : This will also avoid potentially non-existent files, such 
15312 : as ../foo/bar.h
15313 xxxfiles=''
15314 for xx in $xxx /dev/null ; do
15315         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15316 done
15317 : If we have found no files, at least try signal.h
15318 case "$xxxfiles" in
15319 '')     xxxfiles=`./findhdr signal.h` ;;
15320 esac
15321 xxx=`awk '
15322 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15323         print substr($2, 4, 20)
15324 }
15325 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15326         print substr($3, 4, 20)
15327 }' $xxxfiles`
15328 : Append some common names just in case the awk scan failed.
15329 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15330 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15331 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15332 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15333 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15334
15335 : generate a few handy files for later
15336 $cat > signal.c <<'EOCP'
15337 #include <sys/types.h>
15338 #include <signal.h>
15339 #include <stdio.h>
15340 int main() {
15341
15342 /* Strange style to avoid deeply-nested #if/#else/#endif */
15343 #ifndef NSIG
15344 #  ifdef _NSIG
15345 #    define NSIG (_NSIG)
15346 #  endif
15347 #endif
15348
15349 #ifndef NSIG
15350 #  ifdef SIGMAX
15351 #    define NSIG (SIGMAX+1)
15352 #  endif
15353 #endif
15354
15355 #ifndef NSIG
15356 #  ifdef SIG_MAX
15357 #    define NSIG (SIG_MAX+1)
15358 #  endif
15359 #endif
15360
15361 #ifndef NSIG
15362 #  ifdef MAXSIG
15363 #    define NSIG (MAXSIG+1)
15364 #  endif
15365 #endif
15366
15367 #ifndef NSIG
15368 #  ifdef MAX_SIG
15369 #    define NSIG (MAX_SIG+1)
15370 #  endif
15371 #endif
15372
15373 #ifndef NSIG
15374 #  ifdef SIGARRAYSIZE
15375 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15376 #  endif
15377 #endif
15378
15379 #ifndef NSIG
15380 #  ifdef _sys_nsig
15381 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15382 #  endif
15383 #endif
15384
15385 /* Default to some arbitrary number that's big enough to get most
15386    of the common signals.
15387 */
15388 #ifndef NSIG
15389 #    define NSIG 50
15390 #endif
15391
15392 printf("NSIG %d\n", NSIG);
15393
15394 #ifndef JUST_NSIG
15395
15396 EOCP
15397
15398 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15399 {
15400         printf "#ifdef SIG"; printf $1; printf "\n"
15401         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15402         printf $1; printf ");\n"
15403         printf "#endif\n"
15404 }
15405 END {
15406         printf "#endif /* JUST_NSIG */\n";
15407         printf "exit(0);\n}\n";
15408 }
15409 ' >>signal.c
15410 $cat >signal.awk <<'EOP'
15411 BEGIN { ndups = 0 }
15412 $1 ~ /^NSIG$/ { nsig = $2 }
15413 ($1 !~ /^NSIG$/) && (NF == 2) {
15414     if ($2 > maxsig) { maxsig = $2 }
15415     if (sig_name[$2]) {
15416         dup_name[ndups] = $1
15417         dup_num[ndups] = $2
15418         ndups++ 
15419     }
15420     else {
15421         sig_name[$2] = $1
15422         sig_num[$2] = $2
15423     }
15424 }
15425 END { 
15426     if (nsig == 0) {
15427         nsig = maxsig + 1
15428     }
15429     printf("NSIG %d\n", nsig);
15430     for (n = 1; n < nsig; n++) {
15431         if (sig_name[n]) {
15432             printf("%s %d\n", sig_name[n], sig_num[n])
15433         }
15434         else {
15435             printf("NUM%d %d\n", n, n) 
15436         }
15437     }
15438     for (n = 0; n < ndups; n++) {
15439         printf("%s %d\n", dup_name[n], dup_num[n])
15440     }
15441 }
15442 EOP
15443 $cat >signal_cmd <<EOS
15444 $startsh
15445 if $test -s signal.lst; then
15446     echo "Using your existing signal.lst file"
15447         exit 0
15448 fi
15449 xxx="$xxx"
15450 EOS
15451 $cat >>signal_cmd <<'EOS'
15452
15453 set signal
15454 if eval $compile_ok; then
15455         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15456 else
15457         echo "(I can't seem be able to compile the whole test program)" >&4
15458         echo "(I'll try it in little pieces.)" >&4
15459         set signal -DJUST_NSIG
15460         if eval $compile_ok; then
15461                 $run ./signal$_exe > signal.nsg
15462                 $cat signal.nsg
15463         else
15464                 echo "I can't seem to figure out how many signals you have." >&4
15465                 echo "Guessing 50." >&4
15466                 echo 'NSIG 50' > signal.nsg
15467         fi
15468         : Now look at all the signal names, one at a time.
15469         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15470                 $cat > signal.c <<EOCP
15471 #include <sys/types.h>
15472 #include <signal.h>
15473 #include <stdio.h>
15474 int main() {
15475 printf("$xx %d\n", SIG${xx});
15476 return 0;
15477 }
15478 EOCP
15479                 set signal
15480                 if eval $compile; then
15481                         echo "SIG${xx} found."
15482                         $run ./signal$_exe  >> signal.ls1
15483                 else
15484                         echo "SIG${xx} NOT found."
15485                 fi
15486         done
15487         if $test -s signal.ls1; then
15488                 $cat signal.nsg signal.ls1 |
15489                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15490         fi
15491
15492 fi
15493 if $test -s signal.lst; then
15494         :
15495 else
15496         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15497         echo 'kill -l' >signal
15498         set X `csh -f <signal`
15499         $rm -f signal
15500         shift
15501         case $# in
15502         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15503         esac
15504         echo $@ | $tr ' ' $trnl | \
15505             $awk '{ printf "%s %d\n", $1, ++s; }
15506                   END { printf "NSIG %d\n", ++s }' >signal.lst
15507 fi
15508 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15509 EOS
15510 chmod a+x signal_cmd
15511 $eunicefix signal_cmd
15512
15513 : generate list of signal names
15514 echo " "
15515 case "$sig_name_init" in
15516 '') doinit=yes ;;
15517 *)  case "$sig_num_init" in
15518     ''|*,*) doinit=yes ;;
15519     esac ;;
15520 esac
15521 case "$doinit" in
15522 yes)
15523         echo "Generating a list of signal names and numbers..." >&4
15524         . ./signal_cmd
15525         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15526         sig_name=`$awk 'BEGIN { printf "ZERO " }
15527                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15528         sig_num=`$awk  'BEGIN { printf "0 " }
15529                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15530         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15531                              !/^NSIG/   { printf "\"%s\", ", $1 }
15532                              END        { printf "0\n" }' signal.lst`
15533         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15534                              !/^NSIG/   { printf "%d, ", $2}
15535                              END        { printf "0\n"}' signal.lst`
15536         ;;
15537 esac
15538 echo "The following $sig_count signals are available:"
15539 echo " "
15540 echo $sig_name | $awk \
15541 'BEGIN { linelen = 0 }
15542 {
15543         for (i = 1; i <= NF; i++) {
15544                 name = "SIG" $i " "
15545                 linelen = linelen + length(name)
15546                 if (linelen > 70) {
15547                         printf "\n"
15548                         linelen = length(name)
15549                 }
15550                 printf "%s", name
15551         }
15552         printf "\n"
15553 }'
15554 sig_size=`echo $sig_name | awk '{print NF}'`
15555 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15556
15557 echo " "
15558 case "$sizetype" in
15559 *_t) zzz="$sizetype"    ;;
15560 *)   zzz="filesize"     ;;
15561 esac
15562 echo "Checking the size of $zzz..." >&4 
15563 cat > try.c <<EOCP
15564 #include <sys/types.h>
15565 #include <stdio.h>
15566 int main() {
15567     printf("%d\n", (int)sizeof($sizetype));
15568     exit(0);
15569 }
15570 EOCP
15571 set try
15572 if eval $compile_ok; then
15573         yyy=`$run ./try`
15574         case "$yyy" in
15575         '')     sizesize=4
15576                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15577                 ;;
15578         *)      sizesize=$yyy
15579                 echo "Your $zzz size is $sizesize bytes."
15580                 ;;
15581         esac
15582 else
15583         sizesize=4
15584         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15585 fi
15586
15587
15588 : check for socklen_t
15589 echo " "
15590 echo "Checking to see if you have socklen_t..." >&4
15591 $cat >try.c <<EOCP
15592 #include <sys/types.h>
15593 #$d_socket HAS_SOCKET
15594 #ifdef HAS_SOCKET
15595 #include <sys/socket.h>
15596 #endif
15597 int main() { socklen_t x = 16; }
15598 EOCP
15599 set try
15600 if eval $compile; then
15601         val="$define"
15602         echo "You have socklen_t."
15603 else
15604         val="$undef"
15605         echo "You do not have socklen_t."
15606         case "$sizetype" in
15607         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15608         esac
15609 fi
15610 $rm -f try try.*
15611 set d_socklen_t
15612 eval $setvar
15613
15614 : see if this is a socks.h system
15615 set socks.h i_socks
15616 eval $inhdr
15617
15618 : check for type of the size argument to socket calls
15619 case "$d_socket" in
15620 "$define")
15621         $cat <<EOM
15622
15623 Checking to see what type is the last argument of accept().
15624 EOM
15625         yyy=''
15626         case "$d_socklen_t" in
15627         "$define") yyy="$yyy socklen_t"
15628         esac
15629         yyy="$yyy $sizetype int long unsigned"
15630         for xxx in $yyy; do
15631                 case "$socksizetype" in
15632                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15633                         case "$usesocks" in
15634                         "$define")
15635                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15636                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15637                                         socksizetype="$xxx"
15638                                 fi
15639                                 ;;
15640                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15641                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15642                                         socksizetype="$xxx"
15643                                 fi
15644                                 ;;
15645                         esac
15646                         ;;
15647                 esac
15648         done
15649 : In case none of those worked, prompt the user.
15650         case "$socksizetype" in
15651         '')     rp='What is the type for socket address structure sizes?'
15652                 dflt='int'
15653                 . ./myread
15654                 socksizetype=$ans
15655                 ;;
15656         esac
15657         ;;
15658 *)      : no sockets, so pick relatively harmless default
15659         socksizetype='int'
15660         ;;
15661 esac
15662
15663 : see what type is used for signed size_t
15664 set ssize_t ssizetype int stdio.h sys/types.h
15665 eval $typedef
15666 dflt="$ssizetype"
15667 $cat > try.c <<EOM
15668 #include <stdio.h>
15669 #include <sys/types.h>
15670 #define Size_t $sizetype
15671 #define SSize_t $dflt
15672 int main()
15673 {
15674         if (sizeof(Size_t) == sizeof(SSize_t))
15675                 printf("$dflt\n");
15676         else if (sizeof(Size_t) == sizeof(int))
15677                 printf("int\n");
15678         else 
15679                 printf("long\n");
15680         exit(0);
15681 }
15682 EOM
15683 echo " "
15684 set try
15685 if eval $compile_ok && $run ./try > /dev/null; then
15686         ssizetype=`$run ./try`
15687         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15688 else
15689         $cat >&4 <<EOM
15690 Help! I can't compile and run the ssize_t test program: please enlighten me!
15691 (This is probably a misconfiguration in your system or libraries, and
15692 you really ought to fix it.  Still, I'll try anyway.)
15693
15694 I need a type that is the same size as $sizetype, but is guaranteed to
15695 be signed.  Common values are ssize_t, int and long.
15696
15697 EOM
15698         rp="What signed type is the same size as $sizetype?"
15699         . ./myread
15700         ssizetype="$ans"
15701 fi
15702 $rm -f try try.*
15703
15704 : see what type of char stdio uses.
15705 echo " "
15706 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15707 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15708         echo "Your stdio uses unsigned chars." >&4
15709         stdchar="unsigned char"
15710 else
15711         echo "Your stdio uses signed chars." >&4
15712         stdchar="char"
15713 fi
15714 $rm -f stdioh
15715
15716
15717
15718 : see if time exists
15719 echo " "
15720 if test "X$d_time" = X -o X"$timetype" = X; then
15721     if set time val -f d_time; eval $csym; $val; then
15722                 echo 'time() found.' >&4
15723                 val="$define"
15724                 rp="What is the type returned by time() on this system?"
15725                 set time_t timetype long stdio.h sys/types.h
15726                 eval $typedef_ask
15727     else
15728                 echo 'time() not found, hope that will do.' >&4
15729                 val="$undef"
15730                 timetype='int';
15731     fi
15732     set d_time
15733     eval $setvar
15734 fi
15735
15736 : see what type uids are declared as in the kernel
15737 echo " "
15738 echo "Looking for the type for user ids returned by getuid()."
15739 set uid_t uidtype xxx stdio.h sys/types.h
15740 eval $typedef
15741 case "$uidtype" in
15742 xxx)
15743         xxx=`./findhdr sys/user.h`
15744         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15745         case $1 in
15746         unsigned) dflt="$1 $2" ;;
15747         *) dflt="$1" ;;
15748         esac
15749         ;;
15750 *) dflt="$uidtype";;
15751 esac
15752 case "$uidtype" in
15753 uid_t)  echo "uid_t found." ;;
15754 *)      rp="What is the type for user ids returned by getuid()?"
15755         . ./myread
15756         uidtype="$ans"
15757         ;;
15758 esac
15759
15760 echo " "
15761 case "$uidtype" in
15762 *_t) zzz="$uidtype"     ;;
15763 *)   zzz="uid"          ;;
15764 esac
15765 echo "Checking the size of $zzz..." >&4 
15766 cat > try.c <<EOCP
15767 #include <sys/types.h>
15768 #include <stdio.h>
15769 int main() {
15770     printf("%d\n", (int)sizeof($uidtype));
15771     exit(0);
15772 }
15773 EOCP
15774 set try
15775 if eval $compile_ok; then
15776         yyy=`$run ./try`
15777         case "$yyy" in
15778         '')     uidsize=4
15779                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15780                 ;;
15781         *)      uidsize=$yyy
15782                 echo "Your $zzz is $uidsize bytes long."
15783                 ;;
15784         esac
15785 else
15786         uidsize=4
15787         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15788 fi
15789
15790 echo " "
15791 case "$uidtype" in
15792 *_t) zzz="$uidtype"     ;;
15793 *)   zzz="uid"          ;;
15794 esac
15795 echo "Checking the sign of $zzz..." >&4
15796 cat > try.c <<EOCP
15797 #include <sys/types.h>
15798 #include <stdio.h>
15799 int main() {
15800         $uidtype foo = -1;
15801         if (foo < 0)
15802                 printf("-1\n");
15803         else
15804                 printf("1\n");
15805 }
15806 EOCP
15807 set try
15808 if eval $compile; then
15809         yyy=`$run ./try`
15810         case "$yyy" in
15811         '')     uidsign=1
15812                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15813                 ;;
15814         *)      uidsign=$yyy
15815                 case "$uidsign" in
15816                  1) echo "Your $zzz is unsigned." ;;
15817                 -1) echo "Your $zzz is signed."   ;;
15818                 esac
15819                 ;;
15820         esac
15821 else
15822         uidsign=1
15823         echo "(I can't compile the test program--guessing unsigned.)" >&4
15824 fi
15825
15826
15827
15828 echo " "
15829 $echo "Checking the format string to be used for uids..." >&4
15830
15831 case "$uidsign" in
15832 -1)     if $test X"$uidsize" = X"$ivsize"; then
15833                 uidformat="$ivdformat"
15834         else
15835                 if $test X"$uidsize" = X"$longsize"; then
15836                         uidformat='"ld"'
15837                 else
15838                         if $test X"$uidsize" = X"$intsize"; then
15839                                 uidformat='"d"'
15840                         else
15841                                 if $test X"$uidsize" = X"$shortsize"; then
15842                                         uidformat='"hd"'
15843                                 fi
15844                         fi
15845                 fi
15846         fi
15847         ;;
15848 *)      if $test X"$uidsize" = X"$uvsize"; then
15849                 uidformat="$uvuformat"
15850         else
15851                 if $test X"$uidsize" = X"$longsize"; then
15852                         uidformat='"lu"'
15853                 else
15854                         if $test X"$uidsize" = X"$intsize"; then
15855                                 uidformat='"u"'
15856                         else
15857                                 if $test X"$uidsize" = X"$shortsize"; then
15858                                         uidformat='"hu"'
15859                                 fi
15860                         fi
15861                 fi
15862         fi
15863         ;;
15864 esac
15865
15866 : determine compiler compiler
15867 case "$yacc" in
15868 '')
15869         dflt=yacc;;
15870 *)
15871         dflt="$yacc";;
15872 esac
15873 echo " "
15874 comp='yacc'
15875 if $test -f "$byacc"; then
15876         dflt="$byacc"
15877         comp="byacc or $comp"
15878 fi
15879 if $test -f "$bison"; then
15880         comp="$comp or bison -y"
15881 fi
15882 rp="Which compiler compiler ($comp) shall I use?"
15883 . ./myread
15884 yacc="$ans"
15885 case "$yacc" in
15886 *bis*)
15887         case "$yacc" in
15888         *-y*) ;;
15889         *)
15890                 yacc="$yacc -y"
15891                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15892                 ;;
15893         esac
15894         ;;
15895 esac
15896
15897 : see if fcntl.h is there
15898 val=''
15899 set fcntl.h val
15900 eval $inhdr
15901
15902 : see if we can include fcntl.h
15903 case "$val" in
15904 "$define")
15905         echo " "
15906         if $h_fcntl; then
15907                 val="$define"
15908                 echo "We'll be including <fcntl.h>." >&4
15909         else
15910                 val="$undef"
15911                 if $h_sysfile; then
15912         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15913                 else
15914                         echo "We won't be including <fcntl.h>." >&4
15915                 fi
15916         fi
15917         ;;
15918 *)
15919         h_fcntl=false
15920         val="$undef"
15921         ;;
15922 esac
15923 set i_fcntl
15924 eval $setvar
15925
15926 : see if this is a fp.h system
15927 set fp.h i_fp
15928 eval $inhdr
15929
15930 : see if this is a fp_class.h system
15931 set fp_class.h i_fp_class
15932 eval $inhdr
15933
15934 : see if this is a ieeefp.h system
15935 case "$i_ieeefp" in
15936 '' ) set ieeefp.h i_ieeefp
15937      eval $inhdr
15938      ;;
15939 esac
15940
15941 : see if this is a libutil.h system
15942 set libutil.h i_libutil
15943 eval $inhdr
15944
15945 : see if locale.h is available
15946 set locale.h i_locale
15947 eval $inhdr
15948
15949 : see if mach cthreads are available
15950 if test "X$usethreads" = "X$define"; then
15951         set mach/cthreads.h i_machcthr
15952         eval $inhdr
15953 else
15954         i_machcthr="$undef"
15955 fi
15956
15957
15958
15959 : see if this is a math.h system
15960 set math.h i_math
15961 eval $inhdr
15962
15963 : see if this is a mntent.h system
15964 set mntent.h i_mntent
15965 eval $inhdr
15966
15967 : see if ndbm.h is available
15968 set ndbm.h t_ndbm
15969 eval $inhdr
15970 case "$t_ndbm" in
15971 $define)
15972         : see if dbm_open exists
15973         set dbm_open d_dbm_open
15974         eval $inlibc
15975         case "$d_dbm_open" in
15976         $undef)
15977                 t_ndbm="$undef"
15978                 echo "We won't be including <ndbm.h>"
15979                 ;;
15980         esac
15981         ;;
15982 esac
15983 val="$t_ndbm"
15984 set i_ndbm
15985 eval $setvar
15986
15987 : see if net/errno.h is available
15988 val=''
15989 set net/errno.h val
15990 eval $inhdr
15991
15992 : Unfortunately, it causes problems on some systems.  Arrgh.
15993 case "$val" in
15994 $define)
15995         cat > try.c <<'EOM'
15996 #include <stdio.h>
15997 #include <errno.h>
15998 #include <net/errno.h>
15999 int func()
16000 {
16001         return ENOTSOCK;
16002 }
16003 EOM
16004         if $cc $ccflags -c try.c >/dev/null 2>&1; then
16005                 echo "We'll be including <net/errno.h>." >&4
16006         else
16007                 echo "We won't be including <net/errno.h>." >&4
16008                 val="$undef"
16009         fi
16010         $rm -f try.* try
16011         ;;
16012 esac
16013 set i_neterrno
16014 eval $setvar
16015
16016 : see if netinet/tcp.h is available
16017 set netinet/tcp.h i_netinettcp
16018 eval $inhdr
16019
16020 : see if this is a poll.h system
16021 set poll.h i_poll
16022 eval $inhdr
16023
16024 : see if this is a prot.h system
16025 set prot.h i_prot
16026 eval $inhdr
16027
16028 echo " "
16029 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16030 $cat <<'EOSH' > Cppsym.know
16031 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16032 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16033 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16034 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16035 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16036 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16037 bull c cadmus clipper CMU COFF COMPILER_VERSION
16038 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16039 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16040 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16041 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16042 GLIBC GLIBC_MINOR
16043 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16044 H3050R H3050RX hbullx20 hcx host_mips
16045 hp200 hp300 hp700 HP700 hp800 hp9000
16046 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16047 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16048 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16049 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16050 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16051 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16052 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16053 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16054 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16055 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16056 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16057 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16058 MATH_HAS_NO_SIDE_EFFECTS
16059 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16060 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16061 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16062 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16063 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16064 NetBSD news1500 news1700 news1800 news1900 news3700
16065 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16066 ns32016 ns32332 ns32k nsc32000
16067 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16068 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16069 pc532 pdp11 PGC PIC plexus PORTAR posix
16070 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16071 POSIX_C_SOURCE POSIX_SOURCE POWER
16072 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16073 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16074 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16075 sony sony_news sonyrisc sparc sparclite spectrum
16076 stardent stdc STDC_EXT stratos sun sun3 sun386
16077 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16078 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16079 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16080 sysV68 sysV88 Tek4132 Tek4300 titan
16081 TM3200 TM5400 TM5600
16082 tower tower32 tower32_200 tower32_600 tower32_700
16083 tower32_800 tower32_850 tss
16084 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16085 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16086 unix UNIX95 UNIX99 unixpc unos
16087 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16088 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16089 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16090 USGr4 USGr4_2
16091 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16092 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16093 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16094 z8000
16095 EOSH
16096 # Maybe put other stuff here too.
16097 cat <<EOSH >>Cppsym.know
16098 $osname
16099 EOSH
16100 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16101 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16102 $cat Cppsym.know > Cppsym.c
16103 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16104 $rm -f Cppsym.a Cppsym.b Cppsym.c
16105 cat <<EOSH > Cppsym
16106 $startsh
16107 if $test \$# -gt 0; then
16108     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16109     if $test -s Cppsym.got; then
16110         $rm -f Cppsym.got
16111         exit 0
16112     fi
16113     $rm -f Cppsym.got
16114     exit 1
16115 else
16116     $tr " " "$trnl" | ./Cppsym.try
16117     exit 0
16118 fi
16119 EOSH
16120 chmod +x Cppsym
16121 $eunicefix Cppsym
16122 cat <<EOSH > Cppsym.try
16123 $startsh
16124 cat <<'EOCP' > try.c
16125 #include <stdio.h>
16126 int main() {
16127 EOCP
16128 $awk \\
16129 EOSH
16130 cat <<'EOSH' >> Cppsym.try
16131 'length($1) > 0 {
16132     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
16133     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
16134     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
16135     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
16136 }'       >> try.c
16137 echo 'return 0;}' >> try.c
16138 EOSH
16139 cat <<EOSH >> Cppsym.try
16140 ccflags="$ccflags"
16141 case "$osname-$gccversion" in
16142 irix-) ccflags="\$ccflags -woff 1178" ;;
16143 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16144 esac
16145 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16146 EOSH
16147 chmod +x Cppsym.try
16148 $eunicefix Cppsym.try
16149 ./Cppsym < Cppsym.know > Cppsym.true
16150 : now check the C compiler for additional symbols
16151 postprocess_cc_v=''
16152 case "$osname" in
16153 aix) postprocess_cc_v="|$tr , ' '" ;;
16154 esac
16155 $cat >ccsym <<EOS
16156 $startsh
16157 $cat >tmp.c <<EOF
16158 extern int foo;
16159 EOF
16160 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16161 do
16162         case "\$i" in
16163         -D*) echo "\$i" | $sed 's/^-D//';;
16164         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16165         esac
16166 done
16167 $rm -f try.c
16168 EOS
16169 postprocess_cc_v=''
16170 chmod +x ccsym
16171 $eunicefix ccsym
16172 ./ccsym > ccsym1.raw
16173 if $test -s ccsym1.raw; then
16174        $sort ccsym1.raw | $uniq >ccsym.raw
16175 else
16176        mv ccsym1.raw ccsym.raw
16177 fi
16178
16179 $awk '/\=/ { print $0; next }
16180         { print $0"=1" }' ccsym.raw >ccsym.list
16181 $awk '/\=/ { print $0; next }
16182         { print $0"=1" }' Cppsym.true >ccsym.true
16183 $comm -13 ccsym.true ccsym.list >ccsym.own
16184 $comm -12 ccsym.true ccsym.list >ccsym.com
16185 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16186 also=''
16187 if $test -z ccsym.raw; then
16188         echo "Your C compiler doesn't seem to define any symbols!" >&4
16189         echo " "
16190         echo "However, your C preprocessor defines the following symbols:"
16191         $cat Cppsym.true
16192         ccsymbols=''
16193         cppsymbols=`$cat Cppsym.true`
16194         cppsymbols=`echo $cppsymbols`
16195         cppccsymbols="$cppsymbols"
16196 else
16197         if $test -s ccsym.com; then
16198                 echo "Your C compiler and pre-processor define these symbols:"
16199                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16200                 also='also '
16201                 symbols='ones'
16202                 cppccsymbols=`$cat ccsym.com`
16203                 cppccsymbols=`echo $cppccsymbols`
16204                 $test "$silent" || sleep 1
16205         fi
16206         if $test -s ccsym.cpp; then
16207                 $test "$also" && echo " "
16208                 echo "Your C pre-processor ${also}defines the following symbols:"
16209                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16210                 also='further '
16211                 cppsymbols=`$cat ccsym.cpp`
16212                 cppsymbols=`echo $cppsymbols`
16213                 $test "$silent" || sleep 1
16214         fi
16215         if $test -s ccsym.own; then
16216                 $test "$also" && echo " "
16217                 echo "Your C compiler ${also}defines the following cpp symbols:"
16218                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16219                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16220                 ccsymbols=`$cat ccsym.own`
16221                 ccsymbols=`echo $ccsymbols`
16222                 $test "$silent" || sleep 1
16223         fi
16224 fi
16225
16226 : see if this is a termio system
16227 val="$undef"
16228 val2="$undef"
16229 val3="$undef"
16230 if $test `./findhdr termios.h`; then
16231         set tcsetattr i_termios
16232         eval $inlibc
16233         val3="$i_termios"
16234 fi
16235 echo " "
16236 case "$val3" in
16237 "$define") echo "You have POSIX termios.h... good!" >&4;;
16238 *) if ./Cppsym pyr; then
16239                 case "`/bin/universe`" in
16240                 ucb) if $test `./findhdr sgtty.h`; then
16241                                 val2="$define"
16242                                 echo "<sgtty.h> found." >&4
16243                         else
16244                                 echo "System is pyramid with BSD universe."
16245                                 echo "<sgtty.h> not found--you could have problems." >&4
16246                         fi;;
16247                 *) if $test `./findhdr termio.h`; then
16248                                 val="$define"
16249                                 echo "<termio.h> found." >&4
16250                         else
16251                                 echo "System is pyramid with USG universe."
16252                                 echo "<termio.h> not found--you could have problems." >&4
16253                         fi;;
16254                 esac
16255         elif ./usg; then
16256                 if $test `./findhdr termio.h`; then
16257                         echo "<termio.h> found." >&4
16258                         val="$define"
16259                 elif $test `./findhdr sgtty.h`; then
16260                         echo "<sgtty.h> found." >&4
16261                         val2="$define"
16262                 else
16263 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16264                 fi
16265         else
16266                 if $test `./findhdr sgtty.h`; then
16267                         echo "<sgtty.h> found." >&4
16268                         val2="$define"
16269                 elif $test `./findhdr termio.h`; then
16270                         echo "<termio.h> found." >&4
16271                         val="$define"
16272                 else
16273 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16274                 fi
16275         fi;;
16276 esac
16277 set i_termio; eval $setvar
16278 val=$val2; set i_sgtty; eval $setvar
16279 val=$val3; set i_termios; eval $setvar
16280
16281 : see if this is a shadow.h system
16282 set shadow.h i_shadow
16283 eval $inhdr
16284
16285 : see if stddef is available
16286 set stddef.h i_stddef
16287 eval $inhdr
16288
16289 : see if this is a sunmath.h system
16290 set sunmath.h i_sunmath
16291 eval $inhdr
16292
16293 : see if sys/access.h is available
16294 set sys/access.h i_sysaccess
16295 eval $inhdr
16296
16297 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16298 set sys/filio.h i_sysfilio
16299 eval $inhdr
16300 echo " "
16301 if $test `./findhdr sys/ioctl.h`; then
16302         val="$define"
16303         echo '<sys/ioctl.h> found.' >&4
16304 else
16305         val="$undef"
16306         if $test $i_sysfilio = "$define"; then
16307             echo '<sys/ioctl.h> NOT found.' >&4
16308         else
16309                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16310                 $test $i_termio = "$define" && xxx="termio.h"
16311                 $test $i_termios = "$define" && xxx="termios.h"
16312 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16313         fi
16314 fi
16315 set i_sysioctl
16316 eval $setvar
16317
16318 : see if socket ioctl defs are in sys/sockio.h
16319 echo " "
16320 xxx=`./findhdr sys/sockio.h`
16321 if $test "$xxx"; then
16322         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16323                 val="$define"
16324                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16325         else
16326                 val="$undef"
16327                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16328         fi
16329 else
16330         val="$undef"
16331         $cat <<EOM
16332 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16333 EOM
16334 fi
16335 set i_syssockio
16336 eval $setvar
16337
16338
16339 : see if this is a syslog.h system
16340 set syslog.h i_syslog
16341 eval $inhdr
16342
16343
16344 : see if this is a sys/mode.h system
16345 set sys/mode.h i_sysmode
16346 eval $inhdr
16347
16348 : see if sys/resource.h has to be included
16349 set sys/resource.h i_sysresrc
16350 eval $inhdr
16351
16352 : see if sys/security.h is available
16353 set sys/security.h i_syssecrt
16354 eval $inhdr
16355
16356 : see if this is a sys/statvfs.h system
16357 set sys/statvfs.h i_sysstatvfs
16358 eval $inhdr
16359
16360 : see if this is a sys/un.h system
16361 set sys/un.h i_sysun
16362 eval $inhdr
16363
16364
16365 : see if this is a sys/utsname.h system
16366 set sys/utsname.h i_sysutsname
16367 eval $inhdr
16368
16369 : see if this is a syswait system
16370 set sys/wait.h i_syswait
16371 eval $inhdr
16372
16373 : see if this is a ustat.h system
16374 set ustat.h i_ustat
16375 eval $inhdr
16376
16377 : see if this is an utime system
16378 set utime.h i_utime
16379 eval $inhdr
16380
16381 : see if this is a values.h system
16382 set values.h i_values
16383 eval $inhdr
16384
16385 : see if this is a vfork system
16386 case "$d_vfork" in
16387 "$define")
16388         set vfork.h i_vfork
16389         eval $inhdr
16390         ;;
16391 *)
16392         i_vfork="$undef"
16393         ;;
16394 esac
16395
16396 : see if gdbm.h is available
16397 set gdbm.h t_gdbm
16398 eval $inhdr
16399 case "$t_gdbm" in
16400 $define)
16401         : see if gdbm_open exists
16402         set gdbm_open d_gdbm_open
16403         eval $inlibc
16404         case "$d_gdbm_open" in
16405         $undef)
16406                 t_gdbm="$undef"
16407                 echo "We won't be including <gdbm.h>"
16408                 ;;
16409         esac
16410         ;;
16411 esac
16412 val="$t_gdbm"
16413 set i_gdbm
16414 eval $setvar
16415
16416 echo " "
16417 echo "Looking for extensions..." >&4
16418 : If we are using the old config.sh, known_extensions may contain
16419 : old or inaccurate or duplicate values.
16420 known_extensions=''
16421 nonxs_extensions=''
16422 : We do not use find because it might not be available.
16423 : We do not just use MANIFEST because the user may have dropped
16424 : some additional extensions into the source tree and expect them
16425 : to be built.
16426
16427 : Function to recursively find available extensions, ignoring DynaLoader
16428 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16429 find_extensions='
16430     for xxx in *; do
16431        case "$xxx" in
16432            DynaLoader|dynaload) ;;
16433            *)
16434            if $test -f $xxx/$xxx.xs; then
16435                known_extensions="$known_extensions $1$xxx";
16436            elif $test -f $xxx/Makefile.PL; then
16437                nonxs_extensions="$nonxs_extensions $1$xxx";
16438            else
16439                if $test -d $xxx -a $# -lt 10; then
16440                    set $1$xxx/ $*;
16441                    cd $xxx;
16442                    eval $find_extensions;
16443                    cd ..;
16444                    shift;
16445                fi;
16446            fi
16447            ;;
16448        esac;
16449     done'
16450 tdir=`pwd`
16451 cd $rsrc/ext
16452 set X
16453 shift
16454 eval $find_extensions
16455 # Special case:  Add in threads/shared since it is not picked up by the
16456 # recursive find above (and adding in general recursive finding breaks
16457 # SDBM_File/sdbm).  A.D.  10/25/2001.
16458 known_extensions="$known_extensions threads/shared"
16459 set X $nonxs_extensions
16460 shift
16461 nonxs_extensions="$*"
16462 set X $known_extensions
16463 shift
16464 known_extensions="$*"
16465 cd $tdir
16466
16467 : Now see which are supported on this system.
16468 avail_ext=''
16469 for xxx in $known_extensions ; do
16470         case "$xxx" in
16471         DB_File|db_file)
16472                 case "$i_db" in
16473                 $define) avail_ext="$avail_ext $xxx" ;;
16474                 esac
16475                 ;;
16476         GDBM_File|gdbm_fil)
16477                 case "$i_gdbm" in 
16478                 $define) avail_ext="$avail_ext $xxx" ;;
16479                 esac
16480                 ;;
16481         I18N/Langinfo|i18n_lan)
16482                 case "$i_langinfo$d_nl_langinfo" in 
16483                 $define$define) avail_ext="$avail_ext $xxx" ;;
16484                 esac
16485                 ;;
16486         NDBM_File|ndbm_fil)
16487                 case "$i_ndbm" in
16488                 $define)
16489                     case "$osname-$use64bitint" in
16490                     cygwin-*|hpux-define)
16491                         case "$libs" in
16492                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16493                         esac
16494                         ;;
16495                     *) avail_ext="$avail_ext $xxx" ;;
16496                     esac
16497                     ;;
16498                 esac
16499                 ;;
16500         ODBM_File|odbm_fil) 
16501                 case "${i_dbm}${i_rpcsvcdbm}" in
16502                 *"${define}"*)
16503                     case "$osname-$use64bitint" in
16504                     cygwin-*|hpux-define)
16505                         case "$libs" in
16506                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16507                         esac
16508                         ;;
16509                     *) avail_ext="$avail_ext $xxx" ;;
16510                     esac
16511                     ;;
16512                 esac
16513                 ;;
16514         POSIX|posix)
16515                 case "$useposix" in
16516                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16517                 esac
16518                 ;;
16519         Opcode|opcode)
16520                 case "$useopcode" in
16521                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16522                 esac
16523                 ;;
16524         Socket|socket)
16525                 case "$d_socket" in 
16526                 true|$define|y)
16527                     case "$osname" in
16528                     beos) ;; # not unless BONE
16529                     *) avail_ext="$avail_ext $xxx" ;;
16530                     esac
16531                     ;;
16532                 esac
16533                 ;;
16534         Sys/Syslog|sys/syslog)
16535                 : XXX syslog requires socket
16536                 case "$d_socket" in 
16537                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16538                 esac
16539                 ;;
16540         Thread|thread)
16541                 case "$usethreads" in
16542                 true|$define|y)
16543                         case "$useithreads" in
16544                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16545                         esac
16546                 esac
16547                 ;;
16548         threads|threads/shared)
16549                 case "$usethreads" in
16550                 true|$define|y)
16551                         case "$useithreads" in
16552                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16553                         esac
16554                 esac
16555                 ;;
16556         IPC/SysV|ipc/sysv)
16557                 : XXX Do we need a useipcsysv variable here
16558                 case "${d_msg}${d_sem}${d_shm}" in 
16559                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16560                 esac
16561                 ;;
16562         *)      avail_ext="$avail_ext $xxx"
16563                 ;;
16564         esac
16565 done
16566
16567 set X $avail_ext
16568 shift
16569 avail_ext="$*"
16570
16571 : Now see which nonxs extensions are supported on this system.
16572 : For now assume all are.
16573 nonxs_ext=''
16574 for xxx in $nonxs_extensions ; do
16575         case "$xxx" in
16576         *)      nonxs_ext="$nonxs_ext $xxx"
16577                 ;;
16578         esac
16579 done
16580
16581 set X $nonxs_ext
16582 shift
16583 nonxs_ext="$*"
16584
16585 case $usedl in
16586 $define)
16587         $cat <<EOM
16588 A number of extensions are supplied with $package.  You may choose to
16589 compile these extensions for dynamic loading (the default), compile
16590 them into the $package executable (static loading), or not include
16591 them at all.  Answer "none" to include no extensions.
16592 Note that DynaLoader is always built and need not be mentioned here.
16593
16594 EOM
16595         case "$dynamic_ext" in
16596         '') dflt="$avail_ext" ;;
16597         *)      dflt="$dynamic_ext"
16598                 # Perhaps we are reusing an old out-of-date config.sh.
16599                 case "$hint" in
16600                 previous)
16601                         if test X"$dynamic_ext" != X"$avail_ext"; then
16602                                 $cat <<EOM
16603 NOTICE:  Your previous config.sh list may be incorrect. 
16604 The extensions now available to you are 
16605         ${avail_ext}
16606 but the default list from your previous config.sh is
16607         ${dynamic_ext} 
16608
16609 EOM
16610                         fi
16611                         ;;
16612                 esac
16613                 ;;
16614         esac
16615         case "$dflt" in
16616         '')     dflt=none;;
16617         esac
16618         rp="What extensions do you wish to load dynamically?"
16619         . ./myread
16620         case "$ans" in
16621         none) dynamic_ext=' ' ;;
16622         *) dynamic_ext="$ans" ;;
16623         esac
16624
16625         case "$static_ext" in
16626         '')
16627                 : Exclude those already listed in dynamic linking
16628                 dflt=''
16629                 for xxx in $avail_ext; do
16630                         case " $dynamic_ext " in
16631                         *" $xxx "*) ;;
16632                         *) dflt="$dflt $xxx" ;;
16633                         esac
16634                 done
16635                 set X $dflt
16636                 shift
16637                 dflt="$*"
16638                 ;;
16639         *)  dflt="$static_ext" 
16640                 ;;
16641         esac
16642
16643         case "$dflt" in
16644         '')     dflt=none;;
16645         esac
16646         rp="What extensions do you wish to load statically?"
16647         . ./myread
16648         case "$ans" in
16649         none) static_ext=' ' ;;
16650         *) static_ext="$ans" ;;
16651         esac
16652         ;;
16653 *)
16654         $cat <<EOM
16655 A number of extensions are supplied with $package.  Answer "none" 
16656 to include no extensions. 
16657 Note that DynaLoader is always built and need not be mentioned here.
16658
16659 EOM
16660         case "$static_ext" in
16661         '') dflt="$avail_ext" ;;
16662         *)      dflt="$static_ext"
16663                 # Perhaps we are reusing an old out-of-date config.sh.
16664                 case "$hint" in
16665                 previous)
16666                         if test X"$static_ext" != X"$avail_ext"; then
16667                                 $cat <<EOM
16668 NOTICE:  Your previous config.sh list may be incorrect. 
16669 The extensions now available to you are 
16670         ${avail_ext}
16671 but the default list from your previous config.sh is
16672         ${static_ext} 
16673
16674 EOM
16675                         fi
16676                         ;;
16677                 esac
16678                 ;;
16679         esac
16680         : Exclude those that are not xs extensions
16681         case "$dflt" in
16682         '')     dflt=none;;
16683         esac
16684         rp="What extensions do you wish to include?"
16685         . ./myread
16686         case "$ans" in
16687         none) static_ext=' ' ;;
16688         *) static_ext="$ans" ;;
16689         esac
16690         ;;
16691 esac
16692
16693 set X $dynamic_ext $static_ext $nonxs_ext
16694 shift
16695 extensions="$*"
16696
16697 : Remove libraries needed only for extensions
16698 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16699 : The exception is SunOS 4.x, which needs them.
16700 case "${osname}X${osvers}" in
16701 sunos*X4*)
16702     perllibs="$libs"
16703     ;;
16704 *) case "$usedl" in
16705     $define|true|[yY]*)
16706             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16707             shift
16708             perllibs="$*"
16709             ;;
16710     *)  perllibs="$libs"
16711             ;;
16712     esac
16713     ;;
16714 esac
16715
16716 : Remove build directory name from cppstdin so it can be used from
16717 : either the present location or the final installed location.
16718 echo " "
16719 : Get out of the UU directory to get correct path name.
16720 cd ..
16721 case "$cppstdin" in
16722 `pwd`/cppstdin)
16723         echo "Stripping down cppstdin path name"
16724         cppstdin=cppstdin
16725         ;;
16726 esac
16727 cd UU
16728
16729 : end of configuration questions
16730 echo " "
16731 echo "End of configuration questions."
16732 echo " "
16733
16734 : back to where it started
16735 if test -d ../UU; then
16736         cd ..
16737 fi
16738
16739 : configuration may be patched via a 'config.arch' file
16740 if $test -f config.arch; then
16741         echo "I see a config.arch file, loading it."
16742         . ./config.arch
16743 fi
16744
16745 : configuration may be patched via a 'config.over' file
16746 if $test -f config.over; then
16747         echo " "
16748         dflt=y
16749         rp='I see a config.over file.  Do you wish to load it?'
16750         . UU/myread
16751         case "$ans" in
16752         n*) echo "OK, I'll ignore it.";;
16753         *)      . ./config.over
16754                 echo "Configuration override changes have been loaded."
16755                 ;;
16756         esac
16757 fi
16758
16759 : in case they want portability, strip down executable paths
16760 case "$d_portable" in
16761 "$define")
16762         echo " "
16763         echo "Stripping down executable paths..." >&4
16764         for file in $loclist $trylist; do
16765                 eval temp=\$$file
16766                 eval $file=`basename $temp`
16767         done
16768         ;;
16769 esac
16770
16771 : create config.sh file
16772 echo " "
16773 echo "Creating config.sh..." >&4
16774 $spitshell <<EOT >config.sh
16775 $startsh
16776 #
16777 # This file was produced by running the Configure script. It holds all the
16778 # definitions figured out by Configure. Should you modify one of these values,
16779 # do not forget to propagate your changes by running "Configure -der". You may
16780 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16781 #
16782
16783 # Package name      : $package
16784 # Source directory  : $src
16785 # Configuration time: $cf_time
16786 # Configured by     : $cf_by
16787 # Target system     : $myuname
16788
16789 Author='$Author'
16790 Date='$Date'
16791 Header='$Header'
16792 Id='$Id'
16793 Locker='$Locker'
16794 Log='$Log'
16795 Mcc='$Mcc'
16796 RCSfile='$RCSfile'
16797 Revision='$Revision'
16798 Source='$Source'
16799 State='$State'
16800 _a='$_a'
16801 _exe='$_exe'
16802 _o='$_o'
16803 afs='$afs'
16804 afsroot='$afsroot'
16805 alignbytes='$alignbytes'
16806 ansi2knr='$ansi2knr'
16807 aphostname='$aphostname'
16808 api_revision='$api_revision'
16809 api_subversion='$api_subversion'
16810 api_version='$api_version'
16811 api_versionstring='$api_versionstring'
16812 ar='$ar'
16813 archlib='$archlib'
16814 archlibexp='$archlibexp'
16815 archname64='$archname64'
16816 archname='$archname'
16817 archobjs='$archobjs'
16818 awk='$awk'
16819 baserev='$baserev'
16820 bash='$bash'
16821 bin='$bin'
16822 bincompat5005='$bincompat5005'
16823 binexp='$binexp'
16824 bison='$bison'
16825 byacc='$byacc'
16826 byteorder='$byteorder'
16827 c='$c'
16828 castflags='$castflags'
16829 cat='$cat'
16830 cc='$cc'
16831 cccdlflags='$cccdlflags'
16832 ccdlflags='$ccdlflags'
16833 ccflags='$ccflags'
16834 ccflags_uselargefiles='$ccflags_uselargefiles'
16835 ccname='$ccname'
16836 ccsymbols='$ccsymbols'
16837 ccversion='$ccversion'
16838 cf_by='$cf_by'
16839 cf_email='$cf_email'
16840 cf_time='$cf_time'
16841 charsize='$charsize'
16842 chgrp='$chgrp'
16843 chmod='$chmod'
16844 chown='$chown'
16845 clocktype='$clocktype'
16846 comm='$comm'
16847 compress='$compress'
16848 contains='$contains'
16849 cp='$cp'
16850 cpio='$cpio'
16851 cpp='$cpp'
16852 cpp_stuff='$cpp_stuff'
16853 cppccsymbols='$cppccsymbols'
16854 cppflags='$cppflags'
16855 cpplast='$cpplast'
16856 cppminus='$cppminus'
16857 cpprun='$cpprun'
16858 cppstdin='$cppstdin'
16859 cppsymbols='$cppsymbols'
16860 cryptlib='$cryptlib'
16861 csh='$csh'
16862 d_Gconvert='$d_Gconvert'
16863 d_PRIEUldbl='$d_PRIEUldbl'
16864 d_PRIFUldbl='$d_PRIFUldbl'
16865 d_PRIGUldbl='$d_PRIGUldbl'
16866 d_PRIXU64='$d_PRIXU64'
16867 d_PRId64='$d_PRId64'
16868 d_PRIeldbl='$d_PRIeldbl'
16869 d_PRIfldbl='$d_PRIfldbl'
16870 d_PRIgldbl='$d_PRIgldbl'
16871 d_PRIi64='$d_PRIi64'
16872 d_PRIo64='$d_PRIo64'
16873 d_PRIu64='$d_PRIu64'
16874 d_PRIx64='$d_PRIx64'
16875 d_SCNfldbl='$d_SCNfldbl'
16876 d__fwalk='$d__fwalk'
16877 d_access='$d_access'
16878 d_accessx='$d_accessx'
16879 d_alarm='$d_alarm'
16880 d_archlib='$d_archlib'
16881 d_atolf='$d_atolf'
16882 d_atoll='$d_atoll'
16883 d_attribut='$d_attribut'
16884 d_bcmp='$d_bcmp'
16885 d_bcopy='$d_bcopy'
16886 d_bincompat5005='$d_bincompat5005'
16887 d_bsd='$d_bsd'
16888 d_bsdgetpgrp='$d_bsdgetpgrp'
16889 d_bsdsetpgrp='$d_bsdsetpgrp'
16890 d_bzero='$d_bzero'
16891 d_casti32='$d_casti32'
16892 d_castneg='$d_castneg'
16893 d_charvspr='$d_charvspr'
16894 d_chown='$d_chown'
16895 d_chroot='$d_chroot'
16896 d_chsize='$d_chsize'
16897 d_class='$d_class'
16898 d_closedir='$d_closedir'
16899 d_cmsghdr_s='$d_cmsghdr_s'
16900 d_const='$d_const'
16901 d_crypt='$d_crypt'
16902 d_csh='$d_csh'
16903 d_cuserid='$d_cuserid'
16904 d_dbl_dig='$d_dbl_dig'
16905 d_dbminitproto='$d_dbminitproto'
16906 d_difftime='$d_difftime'
16907 d_dirfd='$d_dirfd'
16908 d_dirnamlen='$d_dirnamlen'
16909 d_dlerror='$d_dlerror'
16910 d_dlopen='$d_dlopen'
16911 d_dlsymun='$d_dlsymun'
16912 d_dosuid='$d_dosuid'
16913 d_drand48proto='$d_drand48proto'
16914 d_dup2='$d_dup2'
16915 d_eaccess='$d_eaccess'
16916 d_endgrent='$d_endgrent'
16917 d_endhent='$d_endhent'
16918 d_endnent='$d_endnent'
16919 d_endpent='$d_endpent'
16920 d_endpwent='$d_endpwent'
16921 d_endsent='$d_endsent'
16922 d_eofnblk='$d_eofnblk'
16923 d_eunice='$d_eunice'
16924 d_fchdir='$d_fchdir'
16925 d_fchmod='$d_fchmod'
16926 d_fchown='$d_fchown'
16927 d_fcntl='$d_fcntl'
16928 d_fcntl_can_lock='$d_fcntl_can_lock'
16929 d_fd_macros='$d_fd_macros'
16930 d_fd_set='$d_fd_set'
16931 d_fds_bits='$d_fds_bits'
16932 d_fgetpos='$d_fgetpos'
16933 d_finite='$d_finite'
16934 d_finitel='$d_finitel'
16935 d_flexfnam='$d_flexfnam'
16936 d_flock='$d_flock'
16937 d_flockproto='$d_flockproto'
16938 d_fork='$d_fork'
16939 d_fp_class='$d_fp_class'
16940 d_fpathconf='$d_fpathconf'
16941 d_fpclass='$d_fpclass'
16942 d_fpclassify='$d_fpclassify'
16943 d_fpclassl='$d_fpclassl'
16944 d_fpos64_t='$d_fpos64_t'
16945 d_frexpl='$d_frexpl'
16946 d_fs_data_s='$d_fs_data_s'
16947 d_fseeko='$d_fseeko'
16948 d_fsetpos='$d_fsetpos'
16949 d_fstatfs='$d_fstatfs'
16950 d_fstatvfs='$d_fstatvfs'
16951 d_fsync='$d_fsync'
16952 d_ftello='$d_ftello'
16953 d_ftime='$d_ftime'
16954 d_getcwd='$d_getcwd'
16955 d_getespwnam='$d_getespwnam'
16956 d_getfsstat='$d_getfsstat'
16957 d_getgrent='$d_getgrent'
16958 d_getgrps='$d_getgrps'
16959 d_gethbyaddr='$d_gethbyaddr'
16960 d_gethbyname='$d_gethbyname'
16961 d_gethent='$d_gethent'
16962 d_gethname='$d_gethname'
16963 d_gethostprotos='$d_gethostprotos'
16964 d_getitimer='$d_getitimer'
16965 d_getlogin='$d_getlogin'
16966 d_getmnt='$d_getmnt'
16967 d_getmntent='$d_getmntent'
16968 d_getnbyaddr='$d_getnbyaddr'
16969 d_getnbyname='$d_getnbyname'
16970 d_getnent='$d_getnent'
16971 d_getnetprotos='$d_getnetprotos'
16972 d_getpagsz='$d_getpagsz'
16973 d_getpbyname='$d_getpbyname'
16974 d_getpbynumber='$d_getpbynumber'
16975 d_getpent='$d_getpent'
16976 d_getpgid='$d_getpgid'
16977 d_getpgrp2='$d_getpgrp2'
16978 d_getpgrp='$d_getpgrp'
16979 d_getppid='$d_getppid'
16980 d_getprior='$d_getprior'
16981 d_getprotoprotos='$d_getprotoprotos'
16982 d_getprpwnam='$d_getprpwnam'
16983 d_getpwent='$d_getpwent'
16984 d_getsbyname='$d_getsbyname'
16985 d_getsbyport='$d_getsbyport'
16986 d_getsent='$d_getsent'
16987 d_getservprotos='$d_getservprotos'
16988 d_getspnam='$d_getspnam'
16989 d_gettimeod='$d_gettimeod'
16990 d_gnulibc='$d_gnulibc'
16991 d_grpasswd='$d_grpasswd'
16992 d_hasmntopt='$d_hasmntopt'
16993 d_htonl='$d_htonl'
16994 d_index='$d_index'
16995 d_inetaton='$d_inetaton'
16996 d_int64_t='$d_int64_t'
16997 d_isascii='$d_isascii'
16998 d_isfinite='$d_isfinite'
16999 d_isinf='$d_isinf'
17000 d_isnan='$d_isnan'
17001 d_isnanl='$d_isnanl'
17002 d_killpg='$d_killpg'
17003 d_lchown='$d_lchown'
17004 d_ldbl_dig='$d_ldbl_dig'
17005 d_link='$d_link'
17006 d_locconv='$d_locconv'
17007 d_lockf='$d_lockf'
17008 d_longdbl='$d_longdbl'
17009 d_longlong='$d_longlong'
17010 d_lseekproto='$d_lseekproto'
17011 d_lstat='$d_lstat'
17012 d_madvise='$d_madvise'
17013 d_mblen='$d_mblen'
17014 d_mbstowcs='$d_mbstowcs'
17015 d_mbtowc='$d_mbtowc'
17016 d_memchr='$d_memchr'
17017 d_memcmp='$d_memcmp'
17018 d_memcpy='$d_memcpy'
17019 d_memmove='$d_memmove'
17020 d_memset='$d_memset'
17021 d_mkdir='$d_mkdir'
17022 d_mkdtemp='$d_mkdtemp'
17023 d_mkfifo='$d_mkfifo'
17024 d_mkstemp='$d_mkstemp'
17025 d_mkstemps='$d_mkstemps'
17026 d_mktime='$d_mktime'
17027 d_mmap='$d_mmap'
17028 d_modfl='$d_modfl'
17029 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17030 d_mprotect='$d_mprotect'
17031 d_msg='$d_msg'
17032 d_msg_ctrunc='$d_msg_ctrunc'
17033 d_msg_dontroute='$d_msg_dontroute'
17034 d_msg_oob='$d_msg_oob'
17035 d_msg_peek='$d_msg_peek'
17036 d_msg_proxy='$d_msg_proxy'
17037 d_msgctl='$d_msgctl'
17038 d_msgget='$d_msgget'
17039 d_msghdr_s='$d_msghdr_s'
17040 d_msgrcv='$d_msgrcv'
17041 d_msgsnd='$d_msgsnd'
17042 d_msync='$d_msync'
17043 d_munmap='$d_munmap'
17044 d_mymalloc='$d_mymalloc'
17045 d_nice='$d_nice'
17046 d_nl_langinfo='$d_nl_langinfo'
17047 d_nv_preserves_uv='$d_nv_preserves_uv'
17048 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17049 d_off64_t='$d_off64_t'
17050 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17051 d_oldpthreads='$d_oldpthreads'
17052 d_oldsock='$d_oldsock'
17053 d_open3='$d_open3'
17054 d_pathconf='$d_pathconf'
17055 d_pause='$d_pause'
17056 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17057 d_phostname='$d_phostname'
17058 d_pipe='$d_pipe'
17059 d_poll='$d_poll'
17060 d_portable='$d_portable'
17061 d_procselfexe='$d_procselfexe'
17062 d_pthread_atfork='$d_pthread_atfork'
17063 d_pthread_yield='$d_pthread_yield'
17064 d_pwage='$d_pwage'
17065 d_pwchange='$d_pwchange'
17066 d_pwclass='$d_pwclass'
17067 d_pwcomment='$d_pwcomment'
17068 d_pwexpire='$d_pwexpire'
17069 d_pwgecos='$d_pwgecos'
17070 d_pwpasswd='$d_pwpasswd'
17071 d_pwquota='$d_pwquota'
17072 d_qgcvt='$d_qgcvt'
17073 d_quad='$d_quad'
17074 d_readdir='$d_readdir'
17075 d_readlink='$d_readlink'
17076 d_readv='$d_readv'
17077 d_recvmsg='$d_recvmsg'
17078 d_rename='$d_rename'
17079 d_rewinddir='$d_rewinddir'
17080 d_rmdir='$d_rmdir'
17081 d_safebcpy='$d_safebcpy'
17082 d_safemcpy='$d_safemcpy'
17083 d_sanemcmp='$d_sanemcmp'
17084 d_sbrkproto='$d_sbrkproto'
17085 d_sched_yield='$d_sched_yield'
17086 d_scm_rights='$d_scm_rights'
17087 d_seekdir='$d_seekdir'
17088 d_select='$d_select'
17089 d_sem='$d_sem'
17090 d_semctl='$d_semctl'
17091 d_semctl_semid_ds='$d_semctl_semid_ds'
17092 d_semctl_semun='$d_semctl_semun'
17093 d_semget='$d_semget'
17094 d_semop='$d_semop'
17095 d_sendmsg='$d_sendmsg'
17096 d_setegid='$d_setegid'
17097 d_seteuid='$d_seteuid'
17098 d_setgrent='$d_setgrent'
17099 d_setgrps='$d_setgrps'
17100 d_sethent='$d_sethent'
17101 d_setitimer='$d_setitimer'
17102 d_setlinebuf='$d_setlinebuf'
17103 d_setlocale='$d_setlocale'
17104 d_setnent='$d_setnent'
17105 d_setpent='$d_setpent'
17106 d_setpgid='$d_setpgid'
17107 d_setpgrp2='$d_setpgrp2'
17108 d_setpgrp='$d_setpgrp'
17109 d_setprior='$d_setprior'
17110 d_setproctitle='$d_setproctitle'
17111 d_setpwent='$d_setpwent'
17112 d_setregid='$d_setregid'
17113 d_setresgid='$d_setresgid'
17114 d_setresuid='$d_setresuid'
17115 d_setreuid='$d_setreuid'
17116 d_setrgid='$d_setrgid'
17117 d_setruid='$d_setruid'
17118 d_setsent='$d_setsent'
17119 d_setsid='$d_setsid'
17120 d_setvbuf='$d_setvbuf'
17121 d_sfio='$d_sfio'
17122 d_shm='$d_shm'
17123 d_shmat='$d_shmat'
17124 d_shmatprototype='$d_shmatprototype'
17125 d_shmctl='$d_shmctl'
17126 d_shmdt='$d_shmdt'
17127 d_shmget='$d_shmget'
17128 d_sigaction='$d_sigaction'
17129 d_sigprocmask='$d_sigprocmask'
17130 d_sigsetjmp='$d_sigsetjmp'
17131 d_sockatmark='$d_sockatmark'
17132 d_sockatmarkproto='$d_sockatmarkproto'
17133 d_socket='$d_socket'
17134 d_socklen_t='$d_socklen_t'
17135 d_sockpair='$d_sockpair'
17136 d_socks5_init='$d_socks5_init'
17137 d_sqrtl='$d_sqrtl'
17138 d_sresgproto='$d_sresgproto'
17139 d_sresuproto='$d_sresuproto'
17140 d_statblks='$d_statblks'
17141 d_statfs_f_flags='$d_statfs_f_flags'
17142 d_statfs_s='$d_statfs_s'
17143 d_statvfs='$d_statvfs'
17144 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17145 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17146 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17147 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17148 d_stdio_stream_array='$d_stdio_stream_array'
17149 d_stdiobase='$d_stdiobase'
17150 d_stdstdio='$d_stdstdio'
17151 d_strchr='$d_strchr'
17152 d_strcoll='$d_strcoll'
17153 d_strctcpy='$d_strctcpy'
17154 d_strerrm='$d_strerrm'
17155 d_strerror='$d_strerror'
17156 d_strftime='$d_strftime'
17157 d_strtod='$d_strtod'
17158 d_strtol='$d_strtol'
17159 d_strtold='$d_strtold'
17160 d_strtoll='$d_strtoll'
17161 d_strtoq='$d_strtoq'
17162 d_strtoul='$d_strtoul'
17163 d_strtoull='$d_strtoull'
17164 d_strtouq='$d_strtouq'
17165 d_strxfrm='$d_strxfrm'
17166 d_suidsafe='$d_suidsafe'
17167 d_symlink='$d_symlink'
17168 d_syscall='$d_syscall'
17169 d_syscallproto='$d_syscallproto'
17170 d_sysconf='$d_sysconf'
17171 d_sysernlst='$d_sysernlst'
17172 d_syserrlst='$d_syserrlst'
17173 d_system='$d_system'
17174 d_tcgetpgrp='$d_tcgetpgrp'
17175 d_tcsetpgrp='$d_tcsetpgrp'
17176 d_telldir='$d_telldir'
17177 d_telldirproto='$d_telldirproto'
17178 d_time='$d_time'
17179 d_times='$d_times'
17180 d_truncate='$d_truncate'
17181 d_tzname='$d_tzname'
17182 d_u32align='$d_u32align'
17183 d_ualarm='$d_ualarm'
17184 d_umask='$d_umask'
17185 d_uname='$d_uname'
17186 d_union_semun='$d_union_semun'
17187 d_unordered='$d_unordered'
17188 d_usleep='$d_usleep'
17189 d_usleepproto='$d_usleepproto'
17190 d_ustat='$d_ustat'
17191 d_vendorarch='$d_vendorarch'
17192 d_vendorbin='$d_vendorbin'
17193 d_vendorlib='$d_vendorlib'
17194 d_vfork='$d_vfork'
17195 d_void_closedir='$d_void_closedir'
17196 d_voidsig='$d_voidsig'
17197 d_voidtty='$d_voidtty'
17198 d_volatile='$d_volatile'
17199 d_vprintf='$d_vprintf'
17200 d_wait4='$d_wait4'
17201 d_waitpid='$d_waitpid'
17202 d_wcstombs='$d_wcstombs'
17203 d_wctomb='$d_wctomb'
17204 d_writev='$d_writev'
17205 d_xenix='$d_xenix'
17206 date='$date'
17207 db_hashtype='$db_hashtype'
17208 db_prefixtype='$db_prefixtype'
17209 db_version_major='$db_version_major'
17210 db_version_minor='$db_version_minor'
17211 db_version_patch='$db_version_patch'
17212 defvoidused='$defvoidused'
17213 direntrytype='$direntrytype'
17214 dlext='$dlext'
17215 dlsrc='$dlsrc'
17216 doublesize='$doublesize'
17217 drand01='$drand01'
17218 dynamic_ext='$dynamic_ext'
17219 eagain='$eagain'
17220 ebcdic='$ebcdic'
17221 echo='$echo'
17222 egrep='$egrep'
17223 emacs='$emacs'
17224 eunicefix='$eunicefix'
17225 exe_ext='$exe_ext'
17226 expr='$expr'
17227 extensions='$extensions'
17228 extras='$extras'
17229 fflushNULL='$fflushNULL'
17230 fflushall='$fflushall'
17231 find='$find'
17232 firstmakefile='$firstmakefile'
17233 flex='$flex'
17234 fpossize='$fpossize'
17235 fpostype='$fpostype'
17236 freetype='$freetype'
17237 from='$from'
17238 full_ar='$full_ar'
17239 full_csh='$full_csh'
17240 full_sed='$full_sed'
17241 gccosandvers='$gccosandvers'
17242 gccversion='$gccversion'
17243 gidformat='$gidformat'
17244 gidsign='$gidsign'
17245 gidsize='$gidsize'
17246 gidtype='$gidtype'
17247 glibpth='$glibpth'
17248 grep='$grep'
17249 groupcat='$groupcat'
17250 groupstype='$groupstype'
17251 gzip='$gzip'
17252 h_fcntl='$h_fcntl'
17253 h_sysfile='$h_sysfile'
17254 hint='$hint'
17255 hostcat='$hostcat'
17256 i16size='$i16size'
17257 i16type='$i16type'
17258 i32size='$i32size'
17259 i32type='$i32type'
17260 i64size='$i64size'
17261 i64type='$i64type'
17262 i8size='$i8size'
17263 i8type='$i8type'
17264 i_arpainet='$i_arpainet'
17265 i_bsdioctl='$i_bsdioctl'
17266 i_db='$i_db'
17267 i_dbm='$i_dbm'
17268 i_dirent='$i_dirent'
17269 i_dld='$i_dld'
17270 i_dlfcn='$i_dlfcn'
17271 i_fcntl='$i_fcntl'
17272 i_float='$i_float'
17273 i_fp='$i_fp'
17274 i_fp_class='$i_fp_class'
17275 i_gdbm='$i_gdbm'
17276 i_grp='$i_grp'
17277 i_ieeefp='$i_ieeefp'
17278 i_inttypes='$i_inttypes'
17279 i_langinfo='$i_langinfo'
17280 i_libutil='$i_libutil'
17281 i_limits='$i_limits'
17282 i_locale='$i_locale'
17283 i_machcthr='$i_machcthr'
17284 i_malloc='$i_malloc'
17285 i_math='$i_math'
17286 i_memory='$i_memory'
17287 i_mntent='$i_mntent'
17288 i_ndbm='$i_ndbm'
17289 i_netdb='$i_netdb'
17290 i_neterrno='$i_neterrno'
17291 i_netinettcp='$i_netinettcp'
17292 i_niin='$i_niin'
17293 i_poll='$i_poll'
17294 i_prot='$i_prot'
17295 i_pthread='$i_pthread'
17296 i_pwd='$i_pwd'
17297 i_rpcsvcdbm='$i_rpcsvcdbm'
17298 i_sfio='$i_sfio'
17299 i_sgtty='$i_sgtty'
17300 i_shadow='$i_shadow'
17301 i_socks='$i_socks'
17302 i_stdarg='$i_stdarg'
17303 i_stddef='$i_stddef'
17304 i_stdlib='$i_stdlib'
17305 i_string='$i_string'
17306 i_sunmath='$i_sunmath'
17307 i_sysaccess='$i_sysaccess'
17308 i_sysdir='$i_sysdir'
17309 i_sysfile='$i_sysfile'
17310 i_sysfilio='$i_sysfilio'
17311 i_sysin='$i_sysin'
17312 i_sysioctl='$i_sysioctl'
17313 i_syslog='$i_syslog'
17314 i_sysmman='$i_sysmman'
17315 i_sysmode='$i_sysmode'
17316 i_sysmount='$i_sysmount'
17317 i_sysndir='$i_sysndir'
17318 i_sysparam='$i_sysparam'
17319 i_sysresrc='$i_sysresrc'
17320 i_syssecrt='$i_syssecrt'
17321 i_sysselct='$i_sysselct'
17322 i_syssockio='$i_syssockio'
17323 i_sysstat='$i_sysstat'
17324 i_sysstatfs='$i_sysstatfs'
17325 i_sysstatvfs='$i_sysstatvfs'
17326 i_systime='$i_systime'
17327 i_systimek='$i_systimek'
17328 i_systimes='$i_systimes'
17329 i_systypes='$i_systypes'
17330 i_sysuio='$i_sysuio'
17331 i_sysun='$i_sysun'
17332 i_sysutsname='$i_sysutsname'
17333 i_sysvfs='$i_sysvfs'
17334 i_syswait='$i_syswait'
17335 i_termio='$i_termio'
17336 i_termios='$i_termios'
17337 i_time='$i_time'
17338 i_unistd='$i_unistd'
17339 i_ustat='$i_ustat'
17340 i_utime='$i_utime'
17341 i_values='$i_values'
17342 i_varargs='$i_varargs'
17343 i_varhdr='$i_varhdr'
17344 i_vfork='$i_vfork'
17345 ignore_versioned_solibs='$ignore_versioned_solibs'
17346 inc_version_list='$inc_version_list'
17347 inc_version_list_init='$inc_version_list_init'
17348 incpath='$incpath'
17349 inews='$inews'
17350 installarchlib='$installarchlib'
17351 installbin='$installbin'
17352 installman1dir='$installman1dir'
17353 installman3dir='$installman3dir'
17354 installprefix='$installprefix'
17355 installprefixexp='$installprefixexp'
17356 installprivlib='$installprivlib'
17357 installscript='$installscript'
17358 installsitearch='$installsitearch'
17359 installsitebin='$installsitebin'
17360 installsitelib='$installsitelib'
17361 installstyle='$installstyle'
17362 installusrbinperl='$installusrbinperl'
17363 installvendorarch='$installvendorarch'
17364 installvendorbin='$installvendorbin'
17365 installvendorlib='$installvendorlib'
17366 intsize='$intsize'
17367 issymlink='$issymlink'
17368 ivdformat='$ivdformat'
17369 ivsize='$ivsize'
17370 ivtype='$ivtype'
17371 known_extensions='$known_extensions'
17372 ksh='$ksh'
17373 ld='$ld'
17374 lddlflags='$lddlflags'
17375 ldflags='$ldflags'
17376 ldflags_uselargefiles='$ldflags_uselargefiles'
17377 ldlibpthname='$ldlibpthname'
17378 less='$less'
17379 lib_ext='$lib_ext'
17380 libc='$libc'
17381 libperl='$libperl'
17382 libpth='$libpth'
17383 libs='$libs'
17384 libsdirs='$libsdirs'
17385 libsfiles='$libsfiles'
17386 libsfound='$libsfound'
17387 libspath='$libspath'
17388 libswanted='$libswanted'
17389 libswanted_uselargefiles='$libswanted_uselargefiles'
17390 line='$line'
17391 lint='$lint'
17392 lkflags='$lkflags'
17393 ln='$ln'
17394 lns='$lns'
17395 locincpth='$locincpth'
17396 loclibpth='$loclibpth'
17397 longdblsize='$longdblsize'
17398 longlongsize='$longlongsize'
17399 longsize='$longsize'
17400 lp='$lp'
17401 lpr='$lpr'
17402 ls='$ls'
17403 lseeksize='$lseeksize'
17404 lseektype='$lseektype'
17405 mail='$mail'
17406 mailx='$mailx'
17407 make='$make'
17408 make_set_make='$make_set_make'
17409 mallocobj='$mallocobj'
17410 mallocsrc='$mallocsrc'
17411 malloctype='$malloctype'
17412 man1dir='$man1dir'
17413 man1direxp='$man1direxp'
17414 man1ext='$man1ext'
17415 man3dir='$man3dir'
17416 man3direxp='$man3direxp'
17417 man3ext='$man3ext'
17418 mips_type='$mips_type'
17419 mkdir='$mkdir'
17420 mmaptype='$mmaptype'
17421 modetype='$modetype'
17422 more='$more'
17423 multiarch='$multiarch'
17424 mv='$mv'
17425 myarchname='$myarchname'
17426 mydomain='$mydomain'
17427 myhostname='$myhostname'
17428 myuname='$myuname'
17429 n='$n'
17430 need_va_copy='$need_va_copy'
17431 netdb_hlen_type='$netdb_hlen_type'
17432 netdb_host_type='$netdb_host_type'
17433 netdb_name_type='$netdb_name_type'
17434 netdb_net_type='$netdb_net_type'
17435 nm='$nm'
17436 nm_opt='$nm_opt'
17437 nm_so_opt='$nm_so_opt'
17438 nonxs_ext='$nonxs_ext'
17439 nroff='$nroff'
17440 nvEUformat='$nvEUformat'
17441 nvFUformat='$nvFUformat'
17442 nvGUformat='$nvGUformat'
17443 nveformat='$nveformat'
17444 nvfformat='$nvfformat'
17445 nvgformat='$nvgformat'
17446 nvsize='$nvsize'
17447 nvtype='$nvtype'
17448 o_nonblock='$o_nonblock'
17449 obj_ext='$obj_ext'
17450 old_pthread_create_joinable='$old_pthread_create_joinable'
17451 optimize='$optimize'
17452 orderlib='$orderlib'
17453 osname='$osname'
17454 osvers='$osvers'
17455 otherlibdirs='$otherlibdirs'
17456 package='$package'
17457 pager='$pager'
17458 passcat='$passcat'
17459 patchlevel='$patchlevel'
17460 path_sep='$path_sep'
17461 perl5='$perl5'
17462 perl='$perl'
17463 perl_patchlevel='$perl_patchlevel'
17464 perladmin='$perladmin'
17465 perllibs='$perllibs'
17466 perlpath='$perlpath'
17467 pg='$pg'
17468 phostname='$phostname'
17469 pidtype='$pidtype'
17470 plibpth='$plibpth'
17471 pm_apiversion='$pm_apiversion'
17472 pmake='$pmake'
17473 pr='$pr'
17474 prefix='$prefix'
17475 prefixexp='$prefixexp'
17476 privlib='$privlib'
17477 privlibexp='$privlibexp'
17478 procselfexe='$procselfexe'
17479 prototype='$prototype'
17480 ptrsize='$ptrsize'
17481 quadkind='$quadkind'
17482 quadtype='$quadtype'
17483 randbits='$randbits'
17484 randfunc='$randfunc'
17485 randseedtype='$randseedtype'
17486 ranlib='$ranlib'
17487 rd_nodata='$rd_nodata'
17488 revision='$revision'
17489 rm='$rm'
17490 rmail='$rmail'
17491 run='$run'
17492 runnm='$runnm'
17493 sPRIEUldbl='$sPRIEUldbl'
17494 sPRIFUldbl='$sPRIFUldbl'
17495 sPRIGUldbl='$sPRIGUldbl'
17496 sPRIXU64='$sPRIXU64'
17497 sPRId64='$sPRId64'
17498 sPRIeldbl='$sPRIeldbl'
17499 sPRIfldbl='$sPRIfldbl'
17500 sPRIgldbl='$sPRIgldbl'
17501 sPRIi64='$sPRIi64'
17502 sPRIo64='$sPRIo64'
17503 sPRIu64='$sPRIu64'
17504 sPRIx64='$sPRIx64'
17505 sSCNfldbl='$sSCNfldbl'
17506 sched_yield='$sched_yield'
17507 scriptdir='$scriptdir'
17508 scriptdirexp='$scriptdirexp'
17509 sed='$sed'
17510 seedfunc='$seedfunc'
17511 selectminbits='$selectminbits'
17512 selecttype='$selecttype'
17513 sendmail='$sendmail'
17514 sh='$sh'
17515 shar='$shar'
17516 sharpbang='$sharpbang'
17517 shmattype='$shmattype'
17518 shortsize='$shortsize'
17519 shrpenv='$shrpenv'
17520 shsharp='$shsharp'
17521 sig_count='$sig_count'
17522 sig_name='$sig_name'
17523 sig_name_init='$sig_name_init'
17524 sig_num='$sig_num'
17525 sig_num_init='$sig_num_init'
17526 sig_size='$sig_size'
17527 signal_t='$signal_t'
17528 sitearch='$sitearch'
17529 sitearchexp='$sitearchexp'
17530 sitebin='$sitebin'
17531 sitebinexp='$sitebinexp'
17532 sitelib='$sitelib'
17533 sitelib_stem='$sitelib_stem'
17534 sitelibexp='$sitelibexp'
17535 siteprefix='$siteprefix'
17536 siteprefixexp='$siteprefixexp'
17537 sizesize='$sizesize'
17538 sizetype='$sizetype'
17539 sleep='$sleep'
17540 smail='$smail'
17541 so='$so'
17542 sockethdr='$sockethdr'
17543 socketlib='$socketlib'
17544 socksizetype='$socksizetype'
17545 sort='$sort'
17546 spackage='$spackage'
17547 spitshell='$spitshell'
17548 src='$src'
17549 ssizetype='$ssizetype'
17550 startperl='$startperl'
17551 startsh='$startsh'
17552 static_ext='$static_ext'
17553 stdchar='$stdchar'
17554 stdio_base='$stdio_base'
17555 stdio_bufsiz='$stdio_bufsiz'
17556 stdio_cnt='$stdio_cnt'
17557 stdio_filbuf='$stdio_filbuf'
17558 stdio_ptr='$stdio_ptr'
17559 stdio_stream_array='$stdio_stream_array'
17560 strings='$strings'
17561 submit='$submit'
17562 subversion='$subversion'
17563 sysman='$sysman'
17564 tail='$tail'
17565 tar='$tar'
17566 targetarch='$targetarch'
17567 tbl='$tbl'
17568 tee='$tee'
17569 test='$test'
17570 timeincl='$timeincl'
17571 timetype='$timetype'
17572 to='$to'
17573 touch='$touch'
17574 tr='$tr'
17575 trnl='$trnl'
17576 troff='$troff'
17577 u16size='$u16size'
17578 u16type='$u16type'
17579 u32size='$u32size'
17580 u32type='$u32type'
17581 u64size='$u64size'
17582 u64type='$u64type'
17583 u8size='$u8size'
17584 u8type='$u8type'
17585 uidformat='$uidformat'
17586 uidsign='$uidsign'
17587 uidsize='$uidsize'
17588 uidtype='$uidtype'
17589 uname='$uname'
17590 uniq='$uniq'
17591 uquadtype='$uquadtype'
17592 use5005threads='$use5005threads'
17593 use64bitall='$use64bitall'
17594 use64bitint='$use64bitint'
17595 usecrosscompile='$usecrosscompile'
17596 usedl='$usedl'
17597 useithreads='$useithreads'
17598 uselargefiles='$uselargefiles'
17599 uselongdouble='$uselongdouble'
17600 usemorebits='$usemorebits'
17601 usemultiplicity='$usemultiplicity'
17602 usemymalloc='$usemymalloc'
17603 usenm='$usenm'
17604 useopcode='$useopcode'
17605 useperlio='$useperlio'
17606 useposix='$useposix'
17607 usereentrant='$usereentrant'
17608 usesfio='$usesfio'
17609 useshrplib='$useshrplib'
17610 usesocks='$usesocks'
17611 usethreads='$usethreads'
17612 usevendorprefix='$usevendorprefix'
17613 usevfork='$usevfork'
17614 usrinc='$usrinc'
17615 uuname='$uuname'
17616 uvXUformat='$uvXUformat'
17617 uvoformat='$uvoformat'
17618 uvsize='$uvsize'
17619 uvtype='$uvtype'
17620 uvuformat='$uvuformat'
17621 uvxformat='$uvxformat'
17622 vendorarch='$vendorarch'
17623 vendorarchexp='$vendorarchexp'
17624 vendorbin='$vendorbin'
17625 vendorbinexp='$vendorbinexp'
17626 vendorlib='$vendorlib'
17627 vendorlib_stem='$vendorlib_stem'
17628 vendorlibexp='$vendorlibexp'
17629 vendorprefix='$vendorprefix'
17630 vendorprefixexp='$vendorprefixexp'
17631 version='$version'
17632 version_patchlevel_string='$version_patchlevel_string'
17633 versiononly='$versiononly'
17634 vi='$vi'
17635 voidflags='$voidflags'
17636 xlibpth='$xlibpth'
17637 xs_apiversion='$xs_apiversion'
17638 yacc='$yacc'
17639 yaccflags='$yaccflags'
17640 zcat='$zcat'
17641 zip='$zip'
17642 EOT
17643
17644 : Add in command line options if available
17645 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17646
17647 : add special variables
17648 $test -f $src/patchlevel.h && \
17649 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17650 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17651 echo "PERL_CONFIG_SH=true" >>config.sh
17652
17653 : propagate old symbols
17654 if $test -f UU/config.sh; then
17655         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17656         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17657         $sort | $uniq -u >UU/oldsyms
17658         set X `cat UU/oldsyms`
17659         shift
17660         case $# in
17661         0) ;;
17662         *)
17663                 cat <<EOM
17664 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17665 EOM
17666                 echo "# Variables propagated from previous config.sh file." >>config.sh
17667                 for sym in `cat UU/oldsyms`; do
17668                         echo "    Propagating $hint variable "'$'"$sym..."
17669                         eval 'tmp="$'"${sym}"'"'
17670                         echo "$tmp" | \
17671                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17672                 done
17673                 ;;
17674         esac
17675 fi
17676
17677 : Finish up by extracting the .SH files
17678 case "$alldone" in
17679 exit)
17680         $rm -rf UU
17681         echo "Extraction done."
17682         exit 0
17683         ;;
17684 cont)
17685         ;;
17686 '')
17687         dflt=''
17688         nostick=true
17689         $cat <<EOM
17690
17691 If you'd like to make any changes to the config.sh file before I begin
17692 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17693
17694 EOM
17695         rp="Press return or use a shell escape to edit config.sh:"
17696         . UU/myread
17697         nostick=''
17698         case "$ans" in
17699         '') ;;
17700         *) : in case they cannot read
17701                 sh 1>&4 -c "$ans";;
17702         esac
17703         ;;
17704 esac
17705
17706 : if this fails, just run all the .SH files by hand
17707 . ./config.sh
17708
17709 echo " "
17710 exec 1>&4
17711 pwd=`pwd`
17712 . ./UU/extract
17713 cd $pwd
17714
17715 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17716         dflt=y
17717         case "$silent" in
17718         true) ;;
17719         *)
17720                 $cat <<EOM
17721
17722 Now you need to generate make dependencies by running "$make depend".
17723 You might prefer to run it in background: "$make depend > makedepend.out &"
17724 It can take a while, so you might not want to run it right now.
17725
17726 EOM
17727                 ;;
17728         esac
17729         rp="Run $make depend now?"
17730         . UU/myread
17731         case "$ans" in
17732         y*)
17733                 $make depend && echo "Now you must run '$make'."
17734                 ;;
17735         *)
17736                 echo "You must run '$make depend' then '$make'."
17737                 ;;
17738         esac
17739 elif test -f [Mm]akefile; then
17740         echo " "
17741         echo "Now you must run a $make."
17742 else
17743         echo "Configure done."
17744 fi
17745
17746 if $test -f Policy.sh; then
17747     $cat <<EOM
17748
17749 If you compile $package on a different machine or from a different object
17750 directory, copy the Policy.sh file from this object directory to the
17751 new one before you run Configure -- this will help you with most of
17752 the policy defaults.
17753
17754 EOM
17755 fi
17756 if $test -f config.msg; then
17757     echo "Hmm.  I also noted the following information while running:"
17758     echo " "
17759     $cat config.msg >&4
17760     $rm -f config.msg
17761 fi
17762 $rm -f kit*isdone ark*isdone
17763 $rm -rf UU
17764
17765 : End of Configure
17766