87ba29cd019f1d635de393f7cf96b3af5dcfccbb
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Nov 23 21:08:41 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 d_old_pthread_create_joinable=''
494 old_pthread_create_joinable=''
495 d_pthread_atfork=''
496 d_pthread_yield=''
497 d_sched_yield=''
498 sched_yield=''
499 d_qgcvt=''
500 d_readdir=''
501 d_rewinddir=''
502 d_seekdir=''
503 d_telldir=''
504 d_readlink=''
505 d_readv=''
506 d_recvmsg=''
507 d_rename=''
508 d_rmdir=''
509 d_safebcpy=''
510 d_safemcpy=''
511 d_sanemcmp=''
512 d_sbrkproto=''
513 d_select=''
514 d_sem=''
515 d_semctl=''
516 d_semget=''
517 d_semop=''
518 d_sendmsg=''
519 d_setegid=''
520 d_seteuid=''
521 d_setgrent=''
522 d_setgrps=''
523 d_sethent=''
524 d_setitimer=''
525 d_setlinebuf=''
526 d_setlocale=''
527 d_setnent=''
528 d_setpent=''
529 d_setpgid=''
530 d_setpgrp2=''
531 d_bsdsetpgrp=''
532 d_setpgrp=''
533 d_setprior=''
534 d_setproctitle=''
535 d_setpwent=''
536 d_setregid=''
537 d_setresgid=''
538 d_setresuid=''
539 d_setreuid=''
540 d_setrgid=''
541 d_setruid=''
542 d_setsent=''
543 d_setsid=''
544 d_setvbuf=''
545 d_sfio=''
546 usesfio=''
547 d_shm=''
548 d_shmat=''
549 d_shmatprototype=''
550 shmattype=''
551 d_shmctl=''
552 d_shmdt=''
553 d_shmget=''
554 d_sigaction=''
555 d_sigprocmask=''
556 d_sigsetjmp=''
557 d_sockatmark=''
558 d_sockatmarkproto=''
559 d_msg_ctrunc=''
560 d_msg_dontroute=''
561 d_msg_oob=''
562 d_msg_peek=''
563 d_msg_proxy=''
564 d_oldsock=''
565 d_scm_rights=''
566 d_socket=''
567 d_sockpair=''
568 sockethdr=''
569 socketlib=''
570 d_socklen_t=''
571 d_socks5_init=''
572 d_sqrtl=''
573 d_sresgproto=''
574 d_sresuproto=''
575 d_statblks=''
576 d_statfs_f_flags=''
577 d_statfs_s=''
578 d_fstatvfs=''
579 d_statvfs=''
580 d_stdio_cnt_lval=''
581 d_stdio_ptr_lval=''
582 d_stdio_ptr_lval_nochange_cnt=''
583 d_stdio_ptr_lval_sets_cnt=''
584 d_stdiobase=''
585 d_stdstdio=''
586 stdio_base=''
587 stdio_bufsiz=''
588 stdio_cnt=''
589 stdio_filbuf=''
590 stdio_ptr=''
591 d_index=''
592 d_strchr=''
593 d_strcoll=''
594 d_strctcpy=''
595 d_strerrm=''
596 d_strerror=''
597 d_sysernlst=''
598 d_syserrlst=''
599 d_strftime=''
600 d_strtod=''
601 d_strtol=''
602 d_strtold=''
603 d_strtoll=''
604 d_strtoq=''
605 d_strtoul=''
606 d_strtoull=''
607 d_strtouq=''
608 d_strxfrm=''
609 d_symlink=''
610 d_syscall=''
611 d_syscallproto=''
612 d_sysconf=''
613 d_system=''
614 d_tcgetpgrp=''
615 d_tcsetpgrp=''
616 d_telldirproto=''
617 d_time=''
618 timetype=''
619 clocktype=''
620 d_times=''
621 d_truncate=''
622 d_tzname=''
623 d_u32align=''
624 d_ualarm=''
625 d_umask=''
626 d_semctl_semid_ds=''
627 d_semctl_semun=''
628 d_union_semun=''
629 d_unordered=''
630 d_usleep=''
631 d_usleepproto=''
632 d_ustat=''
633 d_vfork=''
634 usevfork=''
635 d_voidsig=''
636 signal_t=''
637 d_volatile=''
638 d_charvspr=''
639 d_vprintf=''
640 d_wait4=''
641 d_waitpid=''
642 d_wcstombs=''
643 d_wctomb=''
644 d_writev=''
645 dlext=''
646 cccdlflags=''
647 ccdlflags=''
648 dlsrc=''
649 ld=''
650 lddlflags=''
651 usedl=''
652 doublesize=''
653 ebcdic=''
654 fflushNULL=''
655 fflushall=''
656 fpossize=''
657 fpostype=''
658 gccosandvers=''
659 gccversion=''
660 gidformat=''
661 gidsign=''
662 gidsize=''
663 gidtype=''
664 groupstype=''
665 h_fcntl=''
666 h_sysfile=''
667 i_arpainet=''
668 db_hashtype=''
669 db_prefixtype=''
670 db_version_major=''
671 db_version_minor=''
672 db_version_patch=''
673 i_db=''
674 i_dbm=''
675 i_rpcsvcdbm=''
676 d_dirnamlen=''
677 direntrytype=''
678 i_dirent=''
679 i_dld=''
680 i_dlfcn=''
681 i_fcntl=''
682 i_float=''
683 i_fp=''
684 i_fp_class=''
685 i_gdbm=''
686 d_grpasswd=''
687 i_grp=''
688 i_ieeefp=''
689 i_inttypes=''
690 i_langinfo=''
691 i_libutil=''
692 i_limits=''
693 i_locale=''
694 i_machcthr=''
695 i_malloc=''
696 i_math=''
697 i_memory=''
698 i_mntent=''
699 i_ndbm=''
700 i_netdb=''
701 i_neterrno=''
702 i_netinettcp=''
703 i_niin=''
704 i_sysin=''
705 i_poll=''
706 i_prot=''
707 i_pthread=''
708 d_pwage=''
709 d_pwchange=''
710 d_pwclass=''
711 d_pwcomment=''
712 d_pwexpire=''
713 d_pwgecos=''
714 d_pwpasswd=''
715 d_pwquota=''
716 i_pwd=''
717 i_sfio=''
718 i_shadow=''
719 i_socks=''
720 i_stddef=''
721 i_stdlib=''
722 i_string=''
723 strings=''
724 i_sunmath=''
725 i_sysaccess=''
726 i_sysdir=''
727 i_sysfile=''
728 d_voidtty=''
729 i_bsdioctl=''
730 i_sysfilio=''
731 i_sysioctl=''
732 i_syssockio=''
733 i_syslog=''
734 i_sysmman=''
735 i_sysmode=''
736 i_sysmount=''
737 i_sysndir=''
738 i_sysparam=''
739 i_sysresrc=''
740 i_syssecrt=''
741 i_sysselct=''
742 i_sysstat=''
743 i_sysstatfs=''
744 i_sysstatvfs=''
745 i_systimes=''
746 i_systypes=''
747 i_sysuio=''
748 i_sysun=''
749 i_sysutsname=''
750 i_sysvfs=''
751 i_syswait=''
752 i_sgtty=''
753 i_termio=''
754 i_termios=''
755 i_systime=''
756 i_systimek=''
757 i_time=''
758 timeincl=''
759 i_unistd=''
760 i_ustat=''
761 i_utime=''
762 i_values=''
763 i_stdarg=''
764 i_varargs=''
765 i_varhdr=''
766 i_vfork=''
767 inc_version_list=''
768 inc_version_list_init=''
769 installprefix=''
770 installprefixexp=''
771 installstyle=''
772 installusrbinperl=''
773 intsize=''
774 longsize=''
775 shortsize=''
776 issymlink=''
777 libc=''
778 ldlibpthname=''
779 libperl=''
780 shrpenv=''
781 useshrplib=''
782 glibpth=''
783 libpth=''
784 loclibpth=''
785 plibpth=''
786 xlibpth=''
787 ignore_versioned_solibs=''
788 libs=''
789 libsdirs=''
790 libsfiles=''
791 libsfound=''
792 libspath=''
793 lns=''
794 d_PRIEUldbl=''
795 d_PRIFUldbl=''
796 d_PRIGUldbl=''
797 d_PRIeldbl=''
798 d_PRIfldbl=''
799 d_PRIgldbl=''
800 d_SCNfldbl=''
801 sPRIEUldbl=''
802 sPRIFUldbl=''
803 sPRIGUldbl=''
804 sPRIeldbl=''
805 sPRIfldbl=''
806 sPRIgldbl=''
807 sSCNfldbl=''
808 lseeksize=''
809 lseektype=''
810 make_set_make=''
811 d_mymalloc=''
812 freetype=''
813 mallocobj=''
814 mallocsrc=''
815 malloctype=''
816 usemymalloc=''
817 installman1dir=''
818 man1dir=''
819 man1direxp=''
820 man1ext=''
821 installman3dir=''
822 man3dir=''
823 man3direxp=''
824 man3ext=''
825 modetype=''
826 multiarch=''
827 mydomain=''
828 myhostname=''
829 phostname=''
830 c=''
831 n=''
832 d_eofnblk=''
833 eagain=''
834 o_nonblock=''
835 rd_nodata=''
836 need_va_copy=''
837 netdb_hlen_type=''
838 netdb_host_type=''
839 netdb_name_type=''
840 netdb_net_type=''
841 groupcat=''
842 hostcat=''
843 passcat=''
844 orderlib=''
845 ranlib=''
846 d_perl_otherlibdirs=''
847 otherlibdirs=''
848 package=''
849 spackage=''
850 pager=''
851 api_revision=''
852 api_subversion=''
853 api_version=''
854 api_versionstring=''
855 patchlevel=''
856 perl_patchlevel=''
857 revision=''
858 subversion=''
859 version=''
860 version_patchlevel_string=''
861 perl5=''
862 perladmin=''
863 perlpath=''
864 d_nv_preserves_uv=''
865 d_nv_preserves_uv_bits=''
866 i16size=''
867 i16type=''
868 i32size=''
869 i32type=''
870 i64size=''
871 i64type=''
872 i8size=''
873 i8type=''
874 ivsize=''
875 ivtype=''
876 nvsize=''
877 nvtype=''
878 u16size=''
879 u16type=''
880 u32size=''
881 u32type=''
882 u64size=''
883 u64type=''
884 u8size=''
885 u8type=''
886 uvsize=''
887 uvtype=''
888 ivdformat=''
889 nvEUformat=''
890 nvFUformat=''
891 nvGUformat=''
892 nveformat=''
893 nvfformat=''
894 nvgformat=''
895 uvXUformat=''
896 uvoformat=''
897 uvuformat=''
898 uvxformat=''
899 pidtype=''
900 prefix=''
901 prefixexp=''
902 installprivlib=''
903 privlib=''
904 privlibexp=''
905 prototype=''
906 ptrsize=''
907 d_PRIXU64=''
908 d_PRId64=''
909 d_PRIi64=''
910 d_PRIo64=''
911 d_PRIu64=''
912 d_PRIx64=''
913 sPRIXU64=''
914 sPRId64=''
915 sPRIi64=''
916 sPRIo64=''
917 sPRIu64=''
918 sPRIx64=''
919 d_quad=''
920 quadkind=''
921 quadtype=''
922 uquadtype=''
923 drand01=''
924 randbits=''
925 randfunc=''
926 randseedtype=''
927 seedfunc=''
928 installscript=''
929 scriptdir=''
930 scriptdirexp=''
931 selectminbits=''
932 selecttype=''
933 sh=''
934 sig_count=''
935 sig_name=''
936 sig_name_init=''
937 sig_num=''
938 sig_num_init=''
939 sig_size=''
940 installsitearch=''
941 sitearch=''
942 sitearchexp=''
943 installsitebin=''
944 sitebin=''
945 sitebinexp=''
946 installsitelib=''
947 sitelib=''
948 sitelib_stem=''
949 sitelibexp=''
950 siteprefix=''
951 siteprefixexp=''
952 sizesize=''
953 sizetype=''
954 so=''
955 socksizetype=''
956 sharpbang=''
957 shsharp=''
958 spitshell=''
959 src=''
960 ssizetype=''
961 startperl=''
962 startsh=''
963 stdchar=''
964 d_stdio_stream_array=''
965 stdio_stream_array=''
966 sysman=''
967 trnl=''
968 uidformat=''
969 uidsign=''
970 uidsize=''
971 uidtype=''
972 archname64=''
973 use64bitall=''
974 use64bitint=''
975 ccflags_uselargefiles=''
976 ldflags_uselargefiles=''
977 libswanted_uselargefiles=''
978 uselargefiles=''
979 uselongdouble=''
980 usemorebits=''
981 usemultiplicity=''
982 nm_opt=''
983 nm_so_opt=''
984 runnm=''
985 usenm=''
986 useperlio=''
987 usesocks=''
988 d_oldpthreads=''
989 use5005threads=''
990 useithreads=''
991 usereentrant=''
992 usethreads=''
993 incpath=''
994 mips_type=''
995 usrinc=''
996 d_vendorarch=''
997 installvendorarch=''
998 vendorarch=''
999 vendorarchexp=''
1000 d_vendorbin=''
1001 installvendorbin=''
1002 vendorbin=''
1003 vendorbinexp=''
1004 d_vendorlib=''
1005 installvendorlib=''
1006 vendorlib=''
1007 vendorlib_stem=''
1008 vendorlibexp=''
1009 usevendorprefix=''
1010 vendorprefix=''
1011 vendorprefixexp=''
1012 versiononly=''
1013 defvoidused=''
1014 voidflags=''
1015 pm_apiversion=''
1016 xs_apiversion=''
1017 yacc=''
1018 yaccflags=''
1019 CONFIG=''
1020
1021 define='define'
1022 undef='undef'
1023 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1024 rmlist=''
1025
1026 : We must find out about Eunice early
1027 eunicefix=':'
1028 if test -f /etc/unixtovms; then
1029         eunicefix=/etc/unixtovms
1030 fi
1031 if test -f /etc/unixtovms.exe; then
1032         eunicefix=/etc/unixtovms.exe
1033 fi
1034
1035 i_whoami=''
1036 ccname=''
1037 ccversion=''
1038 perllibs=''
1039 : set useposix=false in your hint file to disable the POSIX extension.
1040 useposix=true
1041 : set useopcode=false in your hint file to disable the Opcode extension.
1042 useopcode=true
1043 : Trailing extension.  Override this in a hint file, if needed.
1044 _exe=''
1045 : Extra object files, if any, needed on this platform.
1046 archobjs=''
1047 archname=''
1048 : Possible local include directories to search.
1049 : Set locincpth to "" in a hint file to defeat local include searches.
1050 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1051 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1052 :
1053 : no include file wanted by default
1054 inclwanted=''
1055
1056 groupstype=''
1057 libnames=''
1058 : change the next line if compiling for Xenix/286 on Xenix/386
1059 xlibpth='/usr/lib/386 /lib/386'
1060 : Possible local library directories to search.
1061 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1062 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1063
1064 : general looking path for locating libraries
1065 glibpth="/lib /usr/lib $xlibpth"
1066 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1067 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1068 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1069
1070 : Private path used by Configure to find libraries.  Its value
1071 : is prepended to libpth. This variable takes care of special
1072 : machines, like the mips.  Usually, it should be empty.
1073 plibpth=''
1074
1075 : default library list
1076 libswanted=''
1077 : some systems want to use only the non-versioned libso:s
1078 ignore_versioned_solibs=''
1079 archname64=''
1080 ccflags_uselargefiles=''
1081 ldflags_uselargefiles=''
1082 libswanted_uselargefiles=''
1083 : set usemultiplicity on the Configure command line to enable multiplicity.
1084 : set usesocks on the Configure command line to enable socks.
1085 : set usethreads on the Configure command line to enable threads.
1086 usereentrant='undef'
1087 : full support for void wanted by default
1088 defvoidused=15
1089
1090 : List of libraries we want.
1091 : If anyone needs -lnet, put it in a hint file.
1092 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1093 libswanted="$libswanted dld ld sun m c cposix posix"
1094 libswanted="$libswanted ndir dir crypt sec"
1095 libswanted="$libswanted ucb bsd BSD PW x util"
1096 : We probably want to search /usr/shlib before most other libraries.
1097 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1098 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1099 glibpth="/usr/shlib $glibpth"
1100 : Do not use vfork unless overridden by a hint file.
1101 usevfork=false
1102
1103 : Find the basic shell for Bourne shell scripts
1104 case "$sh" in
1105 '')
1106         case "$SYSTYPE" in
1107         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1108         *) xxx='/bin/sh';;
1109         esac
1110         if test -f "$xxx"; then
1111                 sh="$xxx"
1112         else
1113                 : Build up a list and do a single loop so we can 'break' out.
1114                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1115                 for xxx in sh bash ksh pdksh ash; do
1116                         for p in $pth; do
1117                                 try="$try ${p}/${xxx}"
1118                         done
1119                 done
1120                 for xxx in $try; do
1121                         if test -f "$xxx"; then
1122                                 sh="$xxx";
1123                                 break
1124                         elif test -f "$xxx.exe"; then
1125                                 sh="$xxx";
1126                                 break
1127                         fi
1128                 done
1129         fi
1130         ;;
1131 esac
1132
1133 case "$sh" in
1134 '')     cat >&2 <<EOM
1135 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1136
1137 Usually it's in /bin/sh.  How did you even get this far?
1138 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1139 we'll try to straighten this all out.
1140 EOM
1141         exit 1
1142         ;;
1143 esac
1144
1145 : see if sh knows # comments
1146 if `$sh -c '#' >/dev/null 2>&1`; then
1147         shsharp=true
1148         spitshell=cat
1149         xcat=/bin/cat
1150         test -f $xcat || xcat=/usr/bin/cat
1151         echo "#!$xcat" >sharp
1152         $eunicefix sharp
1153         chmod +x sharp
1154         ./sharp > today
1155         if test -s today; then
1156                 sharpbang='#!'
1157         else
1158                 echo "#! $xcat" > sharp
1159                 $eunicefix sharp
1160                 chmod +x sharp
1161                 ./sharp > today
1162                 if test -s today; then
1163                         sharpbang='#! '
1164                 else
1165                         sharpbang=': use '
1166                 fi
1167         fi
1168 else
1169         echo " "
1170         echo "Your $sh doesn't grok # comments--I will strip them later on."
1171         shsharp=false
1172         cd ..
1173         echo "exec grep -v '^[  ]*#'" >spitshell
1174         chmod +x spitshell
1175         $eunicefix spitshell
1176         spitshell=`pwd`/spitshell
1177         cd UU
1178         echo "I presume that if # doesn't work, #! won't work either!"
1179         sharpbang=': use '
1180 fi
1181 rm -f sharp today
1182
1183 : figure out how to guarantee sh startup
1184 case "$startsh" in
1185 '') startsh=${sharpbang}${sh} ;;
1186 *)
1187 esac
1188 cat >sharp <<EOSS
1189 $startsh
1190 set abc
1191 test "$?abc" != 1
1192 EOSS
1193
1194 chmod +x sharp
1195 $eunicefix sharp
1196 if ./sharp; then
1197         : echo "Yup, it does."
1198 else
1199         echo "Hmm... '$startsh' does not guarantee sh startup..."
1200         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1201 fi
1202 rm -f sharp
1203
1204
1205 : Save command line options in file UU/cmdline.opt for later use in
1206 : generating config.sh.
1207 cat > cmdline.opt <<EOSH
1208 # Configure command line arguments.
1209 config_arg0='$0'
1210 config_args='$*'
1211 config_argc=$#
1212 EOSH
1213 argn=1
1214 args_exp=''
1215 args_sep=''
1216 for arg in "$@"; do
1217         cat >>cmdline.opt <<EOSH
1218 config_arg$argn='$arg'
1219 EOSH
1220         # Extreme backslashitis: replace each ' by '"'"'
1221         cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
1222 $arg
1223 EOC
1224         arg_exp=`cat cmdl.opt`
1225         args_exp="$args_exp$args_sep'$arg_exp'"
1226         argn=`expr $argn + 1`
1227         args_sep=' '
1228 done
1229 # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
1230 # used by ./hints/os2.sh
1231 rm -f cmdl.opt
1232
1233 : produce awk script to parse command line options
1234 cat >options.awk <<'EOF'
1235 BEGIN {
1236         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1237
1238         len = length(optstr);
1239         for (i = 1; i <= len; i++) {
1240                 c = substr(optstr, i, 1);
1241                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1242                 if (a == ":") {
1243                         arg[c] = 1;
1244                         i++;
1245                 }
1246                 opt[c] = 1;
1247         }
1248 }
1249 {
1250         expect = 0;
1251         str = $0;
1252         if (substr(str, 1, 1) != "-") {
1253                 printf("'%s'\n", str);
1254                 next;
1255         }
1256         len = length($0);
1257         for (i = 2; i <= len; i++) {
1258                 c = substr(str, i, 1);
1259                 if (!opt[c]) {
1260                         printf("-%s\n", substr(str, i));
1261                         next;
1262                 }
1263                 printf("-%s\n", c);
1264                 if (arg[c]) {
1265                         if (i < len)
1266                                 printf("'%s'\n", substr(str, i + 1));
1267                         else
1268                                 expect = 1;
1269                         next;
1270                 }
1271         }
1272 }
1273 END {
1274         if (expect)
1275                 print "?";
1276 }
1277 EOF
1278
1279 : process the command line options
1280 set X `for arg in "$@"; do echo "X$arg"; done |
1281         sed -e s/X// | awk -f options.awk`
1282 eval "set $*"
1283 shift
1284 rm -f options.awk
1285
1286 : set up default values
1287 fastread=''
1288 reuseval=false
1289 config_sh=''
1290 alldone=''
1291 error=''
1292 silent=''
1293 extractsh=''
1294 override=''
1295 knowitall=''
1296 rm -f optdef.sh posthint.sh
1297 cat >optdef.sh <<EOS
1298 $startsh
1299 EOS
1300
1301
1302 : option parsing
1303 while test $# -gt 0; do
1304         case "$1" in
1305         -d) shift; fastread=yes;;
1306         -e) shift; alldone=cont;;
1307         -f)
1308                 shift
1309                 cd ..
1310                 if test -r "$1"; then
1311                         config_sh="$1"
1312                 else
1313                         echo "$me: cannot read config file $1." >&2
1314                         error=true
1315                 fi
1316                 cd UU
1317                 shift;;
1318         -h) shift; error=true;;
1319         -r) shift; reuseval=true;;
1320         -s) shift; silent=true; realsilent=true;;
1321         -E) shift; alldone=exit;;
1322         -K) shift; knowitall=true;;
1323         -O) shift; override=true;;
1324         -S) shift; silent=true; extractsh=true;;
1325         -D)
1326                 shift
1327                 case "$1" in
1328                 *=)
1329                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1330                         echo "$me: ignoring -D $1" >&2
1331                         ;;
1332                 *=*) echo "$1" | \
1333                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1334                 *) echo "$1='define'" >> optdef.sh;;
1335                 esac
1336                 shift
1337                 ;;
1338         -U)
1339                 shift
1340                 case "$1" in
1341                 *=) echo "$1" >> optdef.sh;;
1342                 *=*)
1343                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1344                         echo "$me: ignoring -U $1" >&2
1345                         ;;
1346                 *) echo "$1='undef'" >> optdef.sh;;
1347                 esac
1348                 shift
1349                 ;;
1350         -A)
1351             shift
1352             xxx=''
1353             yyy="$1"
1354             zzz=''
1355             uuu=undef
1356             case "$yyy" in
1357             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1358                  case "$zzz" in
1359                  *:*) zzz='' ;;
1360                  *)   xxx=append
1361                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1362                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1363                  esac
1364                  ;;
1365             esac
1366             case "$xxx" in
1367             '')  case "$yyy" in
1368                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1369                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1370                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1371                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1372                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1373                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1374                  esac
1375                  ;;       
1376             esac
1377             case "$xxx" in
1378             append)
1379                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1380             clear)
1381                 echo "$yyy=''"                  >> posthint.sh ;;
1382             define)
1383                 case "$zzz" in
1384                 '') zzz=define ;;
1385                 esac
1386                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1387             eval)
1388                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1389             prepend)
1390                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1391             undef)
1392                 case "$zzz" in
1393                 '') zzz="$uuu" ;;
1394                 esac
1395                 echo "$yyy=$zzz"                >> posthint.sh ;;
1396             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1397             esac
1398             shift
1399             ;;
1400         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1401             exit 0;;
1402         --) break;;
1403         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1404         *) break;;
1405         esac
1406 done
1407
1408 case "$error" in
1409 true)
1410         cat >&2 <<EOM
1411 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1412                  [-U symbol] [-U symbol=] [-A command:symbol...]
1413   -d : use defaults for all answers.
1414   -e : go on without questioning past the production of config.sh.
1415   -f : specify an alternate default configuration file.
1416   -h : print this help message and exit (with an error status).
1417   -r : reuse C symbols value if possible (skips costly nm extraction).
1418   -s : silent mode, only echoes questions and essential information.
1419   -D : define symbol to have some value:
1420          -D symbol         symbol gets the value 'define'
1421          -D symbol=value   symbol gets the value 'value'
1422   -E : stop at the end of questions, after having produced config.sh.
1423   -K : do not use unless you know what you are doing.
1424   -O : let -D and -U override definitions from loaded configuration file.
1425   -S : perform variable substitutions on all .SH files (can mix with -f)
1426   -U : undefine symbol:
1427          -U symbol    symbol gets the value 'undef'
1428          -U symbol=   symbol gets completely empty
1429   -A : manipulate symbol after the platform specific hints have been applied:
1430          -A symbol=value                append " "value to symbol
1431          -A append:symbol=value         append value to symbol
1432          -A define:symbol=value         define symbol to have value
1433          -A clear:symbol                define symbol to be ''
1434          -A define:symbol               define symbol to be 'define'
1435          -A eval:symbol=value           define symbol to be eval of value
1436          -A prepend:symbol=value        prepend value to symbol
1437          -A undef:symbol                define symbol to be 'undef'
1438          -A undef:symbol=               define symbol to be ''
1439   -V : print version number and exit (with a zero status).
1440 EOM
1441         exit 1
1442         ;;
1443 esac
1444
1445 : Sanity checks
1446 case "$fastread$alldone" in
1447 yescont|yesexit) ;;
1448 *)
1449         case "$extractsh" in
1450         true) ;;
1451         *)
1452                 if test ! -t 0; then
1453                         echo "Say 'sh Configure', not 'sh <Configure'"
1454                         exit 1
1455                 fi
1456                 ;;
1457         esac
1458         ;;
1459 esac
1460
1461 exec 4>&1
1462 case "$silent" in
1463 true) exec 1>/dev/null;;
1464 esac
1465
1466 : run the defines and the undefines, if any, but leave the file out there...
1467 touch optdef.sh
1468 . ./optdef.sh
1469 : create the posthint manipulation script and leave the file out there...
1470 touch posthint.sh
1471
1472 : set package name
1473 package=perl5
1474 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1475 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1476 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1477 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1478 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1479 esac
1480
1481 : Some greps do not return status, grrr.
1482 echo "grimblepritz" >grimble
1483 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1484         contains=contains
1485 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1486         contains=grep
1487 else
1488         contains=contains
1489 fi
1490 rm -f grimble
1491 : the following should work in any shell
1492 case "$contains" in
1493 contains*)
1494         echo " "
1495         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1496         cat >contains <<'EOSS'
1497 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1498 EOSS
1499 chmod +x contains
1500 esac
1501
1502 : Find the path to the source tree
1503 case "$src" in
1504 '') case "$0" in
1505     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1506          case "$src" in
1507          /*)    ;;
1508          .)     ;;
1509          *)     src=`cd ../$src && pwd` ;;
1510          esac
1511          ;;
1512     *)   src='.';;
1513     esac;;
1514 esac
1515 case "$src" in
1516 '')     src=/
1517         rsrc=/
1518         ;;
1519 /*) rsrc="$src";;
1520 *) rsrc="../$src";;
1521 esac
1522 if test -f $rsrc/Configure && \
1523         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1524 then
1525    : found it, so we are ok.
1526 else
1527         rsrc=''
1528         for src in . .. ../.. ../../.. ../../../..; do
1529                 if test -f ../$src/Configure && \
1530                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1531                 then
1532                         rsrc=../$src
1533                         break
1534                 fi
1535         done
1536 fi
1537 case "$rsrc" in
1538 '')
1539         cat <<EOM >&4
1540
1541 Sorry, I can't seem to locate the source dir for $package.  Please start
1542 Configure with an explicit path -- i.e. /some/path/Configure.
1543
1544 EOM
1545         exit 1
1546         ;;
1547 ../.)   rsrc='..';;
1548 *)
1549         echo " "
1550         echo "Sources for $package found in \"$src\"." >&4
1551         ;;
1552 esac
1553
1554 : script used to extract .SH files with variable substitutions
1555 cat >extract <<'EOS'
1556 PERL_CONFIG_SH=true
1557 echo "Doing variable substitutions on .SH files..."
1558 if test -f MANIFEST; then
1559         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1560 else
1561         echo "(Looking for .SH files under the source directory.)"
1562         set x `(cd $src; find . -name "*.SH" -print)`
1563 fi
1564 shift
1565 case $# in
1566 0) set x `(cd $src; echo *.SH)`; shift;;
1567 esac
1568 if test ! -f $src/$1; then
1569         shift
1570 fi
1571 mkdir_p='
1572 name=$1;
1573 create="";
1574 while test $name; do
1575         if test ! -d "$name"; then
1576                 create="$name $create";
1577                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1578                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1579         else
1580                 name="";
1581         fi;
1582 done;
1583 for file in $create; do
1584         mkdir $file;
1585 done
1586 '
1587 for file in $*; do
1588         case "$src" in
1589         ".")
1590                 case "$file" in
1591                 */*)
1592                         dir=`expr X$file : 'X\(.*\)/'`
1593                         file=`expr X$file : 'X.*/\(.*\)'`
1594                         (cd $dir && . ./$file)
1595                         ;;
1596                 *)
1597                         . ./$file
1598                         ;;
1599                 esac
1600                 ;;
1601         *)
1602                 case "$file" in
1603                 */*)
1604                         dir=`expr X$file : 'X\(.*\)/'`
1605                         file=`expr X$file : 'X.*/\(.*\)'`
1606                         (set x $dir; shift; eval $mkdir_p)
1607                         sh <$src/$dir/$file
1608                         ;;
1609                 *)
1610                         sh <$src/$file
1611                         ;;
1612                 esac
1613                 ;;
1614         esac
1615 done
1616 if test -f $src/config_h.SH; then
1617         if test ! -f config.h; then
1618         : oops, they left it out of MANIFEST, probably, so do it anyway.
1619         . $src/config_h.SH
1620         fi
1621 fi
1622 EOS
1623
1624 : extract files and exit if asked to do so
1625 case "$extractsh" in
1626 true)
1627         case "$realsilent" in
1628         true) ;;
1629         *) exec 1>&4;;
1630         esac
1631         case "$config_sh" in
1632         '') config_sh='config.sh';;
1633         esac
1634         echo " "
1635         echo "Fetching answers from $config_sh..."
1636         cd ..
1637         . $config_sh
1638         test "$override" && . ./optdef.sh
1639         echo " "
1640         . UU/extract
1641         rm -rf UU
1642         echo "Extraction done."
1643         exit 0
1644         ;;
1645 esac
1646
1647 : Eunice requires " " instead of "", can you believe it
1648 echo " "
1649 : Here we go...
1650 echo "Beginning of configuration questions for $package."
1651
1652 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1653
1654 : first determine how to suppress newline on echo command
1655 echo " "
1656 echo "Checking echo to see how to suppress newlines..."
1657 (echo "hi there\c" ; echo " ") >.echotmp
1658 if $contains c .echotmp >/dev/null 2>&1 ; then
1659         echo "...using -n."
1660         n='-n'
1661         c=''
1662 else
1663         cat <<'EOM'
1664 ...using \c
1665 EOM
1666         n=''
1667         c='\c'
1668 fi
1669 echo $n "The star should be here-->$c"
1670 echo '*'
1671 rm -f .echotmp
1672
1673 : Now test for existence of everything in MANIFEST
1674 echo " "
1675 if test -f $rsrc/MANIFEST; then
1676         echo "First let's make sure your kit is complete.  Checking..." >&4
1677         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1678         rm -f missing
1679         tmppwd=`pwd`
1680         for filelist in x??; do
1681                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1682         done
1683         if test -s missing; then
1684                 cat missing >&4
1685                 cat >&4 <<'EOM'
1686
1687 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1688
1689 You have the option of continuing the configuration process, despite the
1690 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1691 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1692 and contact the author (perlbug@perl.org).
1693
1694 EOM
1695                 echo $n "Continue? [n] $c" >&4
1696                 read ans
1697                 case "$ans" in
1698                 y*)
1699                         echo "Continuing..." >&4
1700                         rm -f missing
1701                         ;;
1702                 *)
1703                         echo "ABORTING..." >&4
1704                         kill $$
1705                         ;;
1706                 esac
1707         else
1708                 echo "Looks good..."
1709         fi
1710 else
1711         echo "There is no MANIFEST file.  I hope your kit is complete !"
1712 fi
1713 rm -f missing x??
1714
1715 echo " "
1716 : Find the appropriate value for a newline for tr
1717 if test -n "$DJGPP"; then
1718        trnl='\012'
1719 fi
1720 if test X"$trnl" = X; then
1721         case "`echo foo|tr '\n' x 2>/dev/null`" in
1722         foox) trnl='\n' ;;
1723         esac
1724 fi
1725 if test X"$trnl" = X; then
1726         case "`echo foo|tr '\012' x 2>/dev/null`" in
1727         foox) trnl='\012' ;;
1728         esac
1729 fi
1730 if test X"$trnl" = X; then
1731         cat <<EOM >&2
1732
1733 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1734
1735 EOM
1736         exit 1
1737 fi
1738
1739 : compute the number of columns on the terminal for proper question formatting
1740 case "$COLUMNS" in
1741 '') COLUMNS='80';;
1742 esac
1743
1744 : set up the echo used in my read
1745 myecho="case \"\$xxxm\" in
1746 '') echo $n \"\$rp $c\" >&4;;
1747 *) case \"\$rp\" in
1748         '') echo $n \"[\$xxxm] $c\";;
1749         *)
1750                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1751                         echo \"\$rp\" >&4
1752                         echo $n \"[\$xxxm] $c\" >&4
1753                 else
1754                         echo $n \"\$rp [\$xxxm] $c\" >&4
1755                 fi
1756                 ;;
1757         esac;;
1758 esac"
1759
1760 : now set up to do reads with possible shell escape and default assignment
1761 cat <<EOSC >myread
1762 $startsh
1763 xxxm=\$dflt
1764 $myecho
1765 ans='!'
1766 case "\$fastread" in
1767 yes) case "\$dflt" in
1768         '') ;;
1769         *) ans='';
1770                 case "\$silent-\$rp" in
1771                 true-) ;;
1772                 *) echo " " >&4;;
1773                 esac;;
1774         esac;;
1775 *) case "\$silent" in
1776         true) case "\$rp" in
1777                 '') ans='';;
1778                 esac;;
1779         esac;;
1780 esac
1781 while expr "X\$ans" : "X!" >/dev/null; do
1782         read answ
1783         set x \$xxxm
1784         shift
1785         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1786         case  "\$answ" in
1787         "!")
1788                 sh 1>&4
1789                 echo " "
1790                 $myecho
1791                 ;;
1792         !*)
1793                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1794                 shift
1795                 sh 1>&4 -c "\$*"
1796                 echo " "
1797                 $myecho
1798                 ;;
1799         "\$ans")
1800                 case "\$ans" in
1801                 \\&*)
1802                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1803                         shift
1804                         case "\$1" in
1805                         -d)
1806                                 fastread=yes
1807                                 echo "(OK, I'll run with -d after this question.)" >&4
1808                                 ;;
1809                         -*)
1810                                 echo "*** Sorry, \$1 not supported yet." >&4
1811                                 ;;
1812                         esac
1813                         $myecho
1814                         ans=!
1815                         ;;
1816                 esac;;
1817         *)
1818                 case "\$aok" in
1819                 y)
1820                         echo "*** Substitution done -- please confirm."
1821                         xxxm="\$ans"
1822                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1823                         xxxm="\$ans"
1824                         ans=!
1825                         ;;
1826                 *)
1827                         echo "*** Error -- try again."
1828                         ans=!
1829                         ;;
1830                 esac
1831                 $myecho
1832                 ;;
1833         esac
1834         case "\$ans\$xxxm\$nostick" in
1835         '')
1836                 ans=!
1837                 $myecho
1838                 ;;
1839         esac
1840 done
1841 case "\$ans" in
1842 '') ans="\$xxxm";;
1843 esac
1844 EOSC
1845
1846 : create .config dir to save info across Configure sessions
1847 test -d ../.config || mkdir ../.config
1848 cat >../.config/README <<EOF
1849 This directory created by Configure to save information that should
1850 persist across sessions for $package.
1851
1852 You may safely delete it if you wish.
1853 EOF
1854
1855 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1856 case "$usedevel" in
1857 $define|true|[yY]*) ;;
1858 *) case "$xversion" in
1859    *[13579])
1860         cat >&4 <<EOH
1861 *** WHOA THERE!!! ***
1862
1863     This is an UNSTABLE DEVELOPMENT release.
1864     The version of this $package distribution is $xversion, that is, odd,
1865     (as opposed to even) and that signifies a development release.
1866     If you want a maintenance release, you want an even-numbered version.
1867
1868     Do ***NOT*** install this into production use.
1869     Data corruption and crashes are possible.
1870
1871     It is most seriously suggested that you do not continue any further
1872     unless you want to help in developing and debugging Perl.
1873
1874     If you *still* want to build perl, you can answer 'y' now,
1875     or pass -Dusedevel to Configure.
1876
1877 EOH
1878         rp='Do you really want to continue?'
1879         dflt='n'
1880         . ./myread
1881         case "$ans" in
1882         [yY]) echo >&4 "Okay, continuing."
1883               usedevel="$define" ;;
1884         *) echo >&4 "Okay, bye."
1885            exit 1
1886            ;;
1887         esac
1888         ;;
1889     esac
1890     ;;
1891 esac
1892 case "$usedevel" in
1893 $define|true|[yY]*)
1894         case "$versiononly" in
1895         '') versiononly="$define" ;;
1896         esac
1897         case "$installusrbinperl" in
1898         '') installusrbinperl="$undef" ;;
1899         esac
1900         ;;
1901 esac
1902
1903 : general instructions
1904 needman=true
1905 firsttime=true
1906 user=`(logname) 2>/dev/null`
1907 case "$user" in
1908 '') user=`whoami 2>&1`;;
1909 esac
1910 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1911         firsttime=false
1912         echo " "
1913         rp='Would you like to see the instructions?'
1914         dflt=n
1915         . ./myread
1916         case "$ans" in
1917         [yY]*) ;;
1918         *) needman=false;;
1919         esac
1920 fi
1921 if $needman; then
1922         cat <<EOH
1923
1924 This installation shell script will examine your system and ask you questions
1925 to determine how the perl5 package should be installed. If you get
1926 stuck on a question, you may use a ! shell escape to start a subshell or
1927 execute a command.  Many of the questions will have default answers in square
1928 brackets; typing carriage return will give you the default.
1929
1930 On some of the questions which ask for file or directory names you are allowed
1931 to use the ~name construct to specify the login directory belonging to "name",
1932 even if you don't have a shell which knows about that.  Questions where this is
1933 allowed will be marked "(~name ok)".
1934
1935 EOH
1936         rp=''
1937         dflt='Type carriage return to continue'
1938         . ./myread
1939         cat <<'EOH'
1940
1941 The prompter used in this script allows you to use shell variables and
1942 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1943 in the default answer, as if the default line was a set of arguments given to a
1944 script shell.  This means you may also use $* to repeat the whole default line,
1945 so you do not have to re-type everything to add something to the default.
1946
1947 Everytime there is a substitution, you will have to confirm.  If there is an
1948 error (e.g. an unmatched backtick), the default answer will remain unchanged
1949 and you will be prompted again.
1950
1951 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1952 the questions and use the computed defaults (or the previous answers if there
1953 was already a config.sh file). Type 'Configure -h' for a list of options.
1954 You may also start interactively and then answer '& -d' at any prompt to turn
1955 on the non-interactive behaviour for the remainder of the execution.
1956
1957 EOH
1958         . ./myread
1959         cat <<EOH
1960
1961 Much effort has been expended to ensure that this shell script will run on any
1962 Unix system.  If despite that it blows up on yours, your best bet is to edit
1963 Configure and run it again.  If you can't run Configure for some reason,
1964 you'll have to generate a config.sh file by hand.  Whatever problems you
1965 have, let me (perlbug@perl.org) know how I blew it.
1966
1967 This installation script affects things in two ways:
1968
1969 1) it may do direct variable substitutions on some of the files included
1970    in this kit.
1971 2) it builds a config.h file for inclusion in C programs.  You may edit
1972    any of these files as the need arises after running this script.
1973
1974 If you make a mistake on a question, there is no easy way to back up to it
1975 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1976 files.  Configure will offer to let you do this before it runs the SH files.
1977
1978 EOH
1979         dflt='Type carriage return to continue'
1980         . ./myread
1981         case "$firsttime" in
1982         true) echo $user >>../.config/instruct;;
1983         esac
1984 fi
1985
1986 : find out where common programs are
1987 echo " "
1988 echo "Locating common programs..." >&4
1989 cat <<EOSC >loc
1990 $startsh
1991 case \$# in
1992 0) exit 1;;
1993 esac
1994 thing=\$1
1995 shift
1996 dflt=\$1
1997 shift
1998 for dir in \$*; do
1999         case "\$thing" in
2000         .)
2001         if test -d \$dir/\$thing; then
2002                 echo \$dir
2003                 exit 0
2004         fi
2005         ;;
2006         *)
2007         for thisthing in \$dir/\$thing; do
2008                 : just loop through to pick last item
2009         done
2010         if test -f \$thisthing; then
2011                 echo \$thisthing
2012                 exit 0
2013         elif test -f \$dir/\$thing.exe; then
2014                 if test -n "$DJGPP"; then
2015                         echo \$dir/\$thing.exe
2016                 else
2017                         : on Eunice apparently
2018                         echo \$dir/\$thing
2019                 fi
2020                 exit 0
2021         fi
2022         ;;
2023         esac
2024 done
2025 echo \$dflt
2026 exit 1
2027 EOSC
2028 chmod +x loc
2029 $eunicefix loc
2030 loclist="
2031 awk
2032 cat
2033 chmod
2034 comm
2035 cp
2036 echo
2037 expr
2038 grep
2039 ls
2040 make
2041 mkdir
2042 rm
2043 sed
2044 sort
2045 touch
2046 tr
2047 uniq
2048 "
2049 trylist="
2050 Mcc
2051 ar
2052 bison
2053 byacc
2054 cpp
2055 csh
2056 date
2057 egrep
2058 gzip
2059 less
2060 ln
2061 more
2062 nm
2063 nroff
2064 pg
2065 test
2066 uname
2067 zip
2068 "
2069 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2070 pth="$pth /lib /usr/lib"
2071 for file in $loclist; do
2072         eval xxx=\$$file
2073         case "$xxx" in
2074         /*|?:[\\/]*)
2075                 if test -f "$xxx"; then
2076                         : ok
2077                 else
2078                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2079                         xxx=`./loc $file $file $pth`
2080                 fi
2081                 ;;
2082         '') xxx=`./loc $file $file $pth`;;
2083         *) xxx=`./loc $xxx $xxx $pth`;;
2084         esac
2085         eval $file=$xxx
2086         eval _$file=$xxx
2087         case "$xxx" in
2088         /*)
2089                 echo $file is in $xxx.
2090                 ;;
2091         ?:[\\/]*)
2092                 echo $file is in $xxx.
2093                 ;;
2094         *)
2095                 echo "I don't know where '$file' is, and my life depends on it." >&4
2096                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2097                 exit 1
2098                 ;;
2099         esac
2100 done
2101 echo " "
2102 echo "Don't worry if any of the following aren't found..."
2103 say=offhand
2104 for file in $trylist; do
2105         eval xxx=\$$file
2106         case "$xxx" in
2107         /*|?:[\\/]*)
2108                 if test -f "$xxx"; then
2109                         : ok
2110                 else
2111                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2112                         xxx=`./loc $file $file $pth`
2113                 fi
2114                 ;;
2115         '') xxx=`./loc $file $file $pth`;;
2116         *) xxx=`./loc $xxx $xxx $pth`;;
2117         esac
2118         eval $file=$xxx
2119         eval _$file=$xxx
2120         case "$xxx" in
2121         /*)
2122                 echo $file is in $xxx.
2123                 ;;
2124         ?:[\\/]*)
2125                 echo $file is in $xxx.
2126                 ;;
2127         *)
2128                 echo "I don't see $file out there, $say."
2129                 say=either
2130                 ;;
2131         esac
2132 done
2133 case "$egrep" in
2134 egrep)
2135         echo "Substituting grep for egrep."
2136         egrep=$grep
2137         ;;
2138 esac
2139 case "$ln" in
2140 ln)
2141         echo "Substituting cp for ln."
2142         ln=$cp
2143         ;;
2144 esac
2145 case "$test" in
2146 test)
2147         echo "Hopefully test is built into your sh."
2148         ;;
2149 *)
2150         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2151                 echo "Using the test built into your sh."
2152                 test=test
2153                 _test=test
2154         fi
2155         ;;
2156 esac
2157 case "$echo" in
2158 echo)
2159         echo "Hopefully echo is built into your sh."
2160         ;;
2161 '') ;;
2162 *)
2163         echo " "
2164 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2165         $echo $n "hi there$c" >foo1
2166         echo $n "hi there$c" >foo2
2167         if cmp foo1 foo2 >/dev/null 2>&1; then
2168                 echo "They are compatible.  In fact, they may be identical."
2169         else
2170                 case "$n" in
2171                 '-n') n='' c='\c';;
2172                 *) n='-n' c='';;
2173                 esac
2174                 cat <<FOO
2175 They are not compatible!  You are probably running ksh on a non-USG system.
2176 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2177 have echo built in and we may have to run some Bourne shell scripts.  That
2178 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2179
2180 FOO
2181                 $echo $n "The star should be here-->$c"
2182                 $echo "*"
2183         fi
2184         $rm -f foo1 foo2
2185         ;;
2186 esac
2187
2188 cat <<EOS >checkcc
2189 $startsh
2190 EOS
2191 cat <<'EOSC' >>checkcc
2192 case "$cc" in
2193 '') ;;
2194 *)  $rm -f try try.*
2195     $cat >try.c <<EOM
2196 int main(int argc, char *argv[]) {
2197   return 0;
2198 }
2199 EOM
2200     if $cc -o try $ccflags $ldflags try.c; then
2201        :
2202     else
2203         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2204         despair=yes
2205         trygcc=yes
2206         case "$cc" in
2207         *gcc*) trygcc=no ;;
2208         esac
2209         case "`$cc -v -c try.c 2>&1`" in
2210         *gcc*) trygcc=no ;;
2211         esac
2212         if $test X"$trygcc" = Xyes; then
2213             if gcc -o try -c try.c; then
2214                 echo " "
2215                 echo "You seem to have a working gcc, though." >&4
2216                 rp="Would you like to use it?"
2217                 dflt=y
2218                 if $test -f myread; then
2219                     . ./myread
2220                 else
2221                     if $test -f UU/myread; then
2222                         . ./UU/myread
2223                     else
2224                         echo "Cannot find myread, sorry.  Aborting." >&2
2225                         exit 1
2226                     fi
2227                 fi  
2228                 case "$ans" in
2229                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2230                 esac
2231             fi
2232         fi
2233         if $test X"$despair" = Xyes; then
2234             $cat >&4 <<EOM
2235 You need to find a working C compiler.
2236 Either (purchase and) install the C compiler supplied by your OS vendor,
2237 or for a free C compiler try http://gcc.gnu.org/
2238 I cannot continue any further, aborting.
2239 EOM
2240             exit 1
2241         fi
2242     fi
2243     $rm -f try try.*
2244     ;;
2245 esac
2246 EOSC
2247
2248 : determine whether symbolic links are supported
2249 echo " "
2250 $touch blurfl
2251 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2252         echo "Symbolic links are supported." >&4
2253         lns="$ln -s"
2254 else
2255         echo "Symbolic links are NOT supported." >&4
2256         lns="$ln"
2257 fi
2258 $rm -f blurfl sym
2259
2260 : determine whether symbolic links are supported
2261 echo " "
2262 case "$lns" in
2263 *"ln -s")
2264         echo "Checking how to test for symbolic links..." >&4
2265         $lns blurfl sym
2266         if $test "X$issymlink" = X; then
2267                 case "$newsh" in
2268                 '') sh     -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2269                 *)  $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
2270                 esac
2271                 if test $? = 0; then
2272                         issymlink="test -h"
2273                 else
2274                         echo "Your builtin 'test -h' may be broken." >&4
2275                         case "$test" in
2276                         /*)     ;;
2277                         *)      pth=`echo $PATH | sed -e "s/$p_/ /g"`
2278                                 for p in $pth
2279                                 do
2280                                         if test -f "$p/$test"; then
2281                                                 test="$p/$test"
2282                                                 break
2283                                         fi
2284                                 done
2285                                 ;;
2286                         esac
2287                         case "$test" in
2288                         /*)
2289                                 echo "Trying external '$test -h'." >&4
2290                                 issymlink="$test -h"
2291                                 if $test ! -h sym >/dev/null 2>&1; then
2292                                         echo "External '$test -h' is broken, too." >& 4
2293                                         issymlink=''
2294                                 fi
2295                                 ;;
2296                         *)      issymlink='' ;;
2297                         esac
2298                 fi              
2299         fi
2300         if $test "X$issymlink" = X; then
2301                 if $test -L sym 2>/dev/null; then
2302                         issymlink="$test -L"
2303                         echo "The builtin '$test -L' worked." >&4
2304                 fi
2305         fi
2306         if $test "X$issymlink" != X; then
2307                 echo "You can test for symbolic links with '$issymlink'." >&4
2308         else
2309                 echo "I do not know how you can test for symbolic links." >&4
2310         fi
2311         $rm -f blurfl sym
2312         ;;
2313 *)      echo "No symbolic links, so not testing for their testing..." >&4
2314         ;;
2315 esac
2316 echo " "
2317
2318
2319 case "$mksymlinks" in
2320 $define|true|[yY]*)
2321         case "$src" in
2322         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2323                 exit 1
2324                 ;;
2325         *)      case "$lns:$issymlink" in
2326                 *"ln -s:"*"test -"?)
2327                         echo "Creating the symbolic links..." >&4
2328                         echo "(First creating the subdirectories...)" >&4
2329                         cd ..
2330                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2331                                 read directory
2332                                 test -z "$directory" && break
2333                                 mkdir -p $directory
2334                         done
2335                         # Sanity check 1.
2336                         if test ! -d t/base; then
2337                                 echo "Failed to create the subdirectories.  Aborting." >&4
2338                                 exit 1
2339                         fi
2340                         echo "(Then creating the symlinks...)" >&4
2341                         awk '{print $1}' $src/MANIFEST | while true; do
2342                                 read filename
2343                                 test -z "$filename" && break
2344                                 if test -f $filename; then
2345                                         if $issymlink $filename; then
2346                                                 rm -f $filename
2347                                         fi
2348                                 fi
2349                                 if test -f $filename; then
2350                                         echo "$filename already exists, not symlinking."
2351                                 else
2352                                         ln -s $src/$filename $filename
2353                                 fi
2354                         done
2355                         # Sanity check 2.
2356                         if test ! -f t/base/lex.t; then
2357                                 echo "Failed to create the symlinks (t/base/lex.t missing).  Aborting." >&4
2358                                 exit 1
2359                         fi
2360                         cd UU
2361                         ;;
2362                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2363                         ;;
2364                 esac
2365                 ;;
2366         esac
2367         ;;
2368 esac
2369
2370
2371 case "$usecrosscompile" in
2372 $define|true|[yY]*)
2373         $echo "Cross-compiling..."
2374         croak=''
2375         case "$cc" in
2376         *-*-gcc) # A cross-compiling gcc, probably.
2377             targetarch=`$echo $cc|$sed 's/-gcc$//'`
2378             ar=$targetarch-ar
2379             # leave out ld, choosing it is more complex
2380             nm=$targetarch-nm
2381             ranlib=$targetarch-ranlib
2382             $echo 'extern int foo;' > try.c
2383             set X `$cc -v -E try.c 2>&1 | $awk '/^#include </,/^End of search /'|$grep '/include'`
2384             shift
2385             if $test $# -gt 0; then
2386                 incpth="$incpth $*"
2387                 incpth="`$echo $incpth|$sed 's/^ //'`"
2388                 echo "Guessing incpth '$incpth'." >&4
2389                 for i in $*; do
2390                     j="`$echo $i|$sed 's,/include$,/lib,'`"
2391                     if $test -d $j; then
2392                         libpth="$libpth $j"
2393                     fi
2394                 done   
2395                 libpth="`$echo $libpth|$sed 's/^ //'`"
2396                 echo "Guessing libpth '$libpth'." >&4
2397             fi
2398             $rm -f try.c
2399             ;;
2400         esac
2401         case "$targetarch" in
2402         '') echo "Targetarch not defined." >&4; croak=y ;;
2403         *)  echo "Using targetarch $targetarch." >&4 ;;
2404         esac
2405         case "$incpth" in
2406         '') echo "Incpth not defined." >&4; croak=y ;;
2407         *)  echo "Using incpth '$incpth'." >&4 ;;
2408         esac
2409         case "$libpth" in
2410         '') echo "Libpth not defined." >&4; croak=y ;;
2411         *)  echo "Using libpth '$libpth'." >&4 ;;
2412         esac
2413         case "$usrinc" in
2414         '') for i in $incpth; do
2415                 if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
2416                     usrinc=$i
2417                     echo "Guessing usrinc $usrinc." >&4
2418                     break
2419                 fi
2420             done
2421             case "$usrinc" in
2422             '') echo "Usrinc not defined." >&4; croak=y ;;
2423             esac
2424             ;;
2425         *)  echo "Using usrinc $usrinc." >&4 ;;
2426         esac
2427         case "$targethost" in
2428         '') echo "Targethost not defined." >&4; croak=y ;;
2429         *)  echo "Using targethost $targethost." >&4
2430         esac
2431         locincpth=' '
2432         loclibpth=' '
2433         case "$croak" in
2434         y) echo "Cannot continue, aborting." >&4; exit 1 ;;
2435         esac
2436         case "$src" in
2437         /*) run=$src/Cross/run
2438             targetmkdir=$src/Cross/mkdir
2439             to=$src/Cross/to
2440             from=$src/Cross/from
2441             ;;
2442         *)  pwd=`$test -f ../Configure & cd ..; pwd`
2443             run=$pwd/Cross/run
2444             targetmkdir=$pwd/Cross/mkdir
2445             to=$pwd/Cross/to
2446             from=$pwd/Cross/from
2447             ;;
2448         esac
2449         case "$targetrun" in
2450         '') targetrun=ssh ;;
2451         esac
2452         case "$targetto" in
2453         '') targetto=scp ;;
2454         esac
2455         case "$targetfrom" in
2456         '') targetfrom=scp ;;
2457         esac
2458         run=$run-$targetrun
2459         to=$to-$targetto
2460         from=$from-$targetfrom
2461         case "$targetdir" in
2462         '')  targetdir=/tmp
2463              echo "Guessing targetdir $targetdir." >&4
2464              ;;
2465         esac
2466         case "$targetuser" in
2467         '')  targetuser=root
2468              echo "Guessing targetuser $targetuser." >&4
2469              ;;
2470         esac
2471         case "$targetfrom" in
2472         scp)    q=-q ;;
2473         *)      q='' ;;
2474         esac
2475         case "$targetrun" in
2476         ssh|rsh)
2477             cat >$run <<EOF
2478 #!/bin/sh
2479 case "\$1" in
2480 -cwd)
2481   shift
2482   cwd=\$1
2483   shift
2484   ;;
2485 esac
2486 case "\$cwd" in
2487 '') cwd=$targetdir ;;
2488 esac
2489 exe=\$1
2490 shift
2491 if $test ! -f \$exe.xok; then
2492   $to \$exe
2493   $touch \$exe.xok
2494 fi
2495 $targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
2496 EOF
2497             ;;
2498         *)  echo "Unknown targetrun '$targetrun'" >&4
2499             exit 1
2500             ;;
2501         esac
2502         case "$targetmkdir" in
2503         */Cross/mkdir)
2504             cat >$targetmkdir <<EOF
2505 #!/bin/sh
2506 $targetrun -l $targetuser $targethost "mkdir -p \$@"
2507 EOF
2508             $chmod a+rx $targetmkdir
2509             ;;
2510         *)  echo "Unknown targetmkdir '$targetmkdir'" >&4
2511             exit 1
2512             ;;
2513         esac
2514         case "$targetto" in
2515         scp|rcp)
2516             cat >$to <<EOF
2517 #!/bin/sh
2518 for f in \$@
2519 do
2520   case "\$f" in
2521   /*)
2522     $targetmkdir \`dirname \$f\`
2523     $targetto $q \$f $targetuser@$targethost:\$f            || exit 1
2524     ;;
2525   *)
2526     $targetmkdir $targetdir/\`dirname \$f\`
2527     $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
2528     ;;
2529   esac
2530 done
2531 exit 0
2532 EOF
2533             ;;
2534         cp) cat >$to <<EOF
2535 #!/bin/sh
2536 for f in \$@
2537 do
2538   case "\$f" in
2539   /*)
2540     $mkdir -p $targetdir/\`dirname \$f\`
2541     $cp \$f $targetdir/\$f || exit 1
2542     ;;
2543   *)
2544     $targetmkdir $targetdir/\`dirname \$f\`
2545     $cp \$f $targetdir/\$f || exit 1
2546     ;;
2547   esac
2548 done
2549 exit 0
2550 EOF
2551             ;;
2552         *)  echo "Unknown targetto '$targetto'" >&4
2553             exit 1
2554             ;;
2555         esac
2556         case "$targetfrom" in
2557         scp|rcp)
2558           cat >$from <<EOF
2559 #!/bin/sh
2560 for f in \$@
2561 do
2562   $rm -f \$f
2563   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2564 done
2565 exit 0
2566 EOF
2567             ;;
2568         cp) cat >$from <<EOF
2569 #!/bin/sh
2570 for f in \$@
2571 do
2572   $rm -f \$f
2573   cp $targetdir/\$f . || exit 1
2574 done
2575 exit 0
2576 EOF
2577             ;;
2578         *)  echo "Unknown targetfrom '$targetfrom'" >&4
2579             exit 1
2580             ;;
2581         esac
2582         if $test ! -f $run; then
2583             echo "Target 'run' script '$run' not found." >&4
2584         else
2585             $chmod a+rx $run
2586         fi
2587         if $test ! -f $to; then
2588             echo "Target 'to' script '$to' not found." >&4
2589         else
2590             $chmod a+rx $to
2591         fi
2592         if $test ! -f $from; then
2593             echo "Target 'from' script '$from' not found." >&4
2594         else
2595             $chmod a+rx $from
2596         fi
2597         if $test ! -f $run -o ! -f $to -o ! -f $from; then
2598             exit 1
2599         fi
2600         cat >&4 <<EOF
2601 Using '$run' for remote execution,
2602 and '$from' and '$to'
2603 for remote file transfer.
2604 EOF
2605         ;;
2606 *)      run=''
2607         to=:
2608         from=:
2609         usecrosscompile='undef'
2610         targetarch=''
2611         ;;
2612 esac
2613
2614 : see whether [:lower:] and [:upper:] are supported character classes
2615 echo " "
2616 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2617 ABYZ)
2618         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2619         up='[:upper:]'
2620         low='[:lower:]'
2621         ;;
2622 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2623         # (0xc9 and 0xd1), therefore that is a nice testing point.
2624         if test "X$up" = X -o "X$low" = X; then
2625             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2626             ij) up='[A-Z]'
2627                 low='[a-z]'
2628                 ;;
2629             esac
2630         fi
2631         if test "X$up" = X -o "X$low" = X; then
2632             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2633             ij) up='A-Z'
2634                 low='a-z'
2635                 ;;
2636             esac
2637         fi
2638         if test "X$up" = X -o "X$low" = X; then
2639             case "`echo IJ | od -x 2>/dev/null`" in
2640             *C9D1*|*c9d1*)
2641                 echo "Hey, this might be EBCDIC." >&4
2642                 if test "X$up" = X -o "X$low" = X; then
2643                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2644                     ij) up='[A-IJ-RS-Z]'
2645                         low='[a-ij-rs-z]'
2646                         ;;
2647                     esac
2648                 fi
2649                 if test "X$up" = X -o "X$low" = X; then
2650                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2651                     ij) up='A-IJ-RS-Z'
2652                         low='a-ij-rs-z'
2653                         ;;
2654                     esac
2655                 fi
2656                 ;;
2657             esac
2658         fi
2659 esac
2660 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2661 ij)
2662     echo "Using $up and $low to convert case." >&4
2663     ;;
2664 *)
2665     echo "I don't know how to translate letters from upper to lower case." >&4
2666     echo "Your tr is not acting any way I know of." >&4
2667     exit 1
2668     ;;
2669 esac
2670 : set up the translation script tr, must be called with ./tr of course
2671 cat >tr <<EOSC
2672 $startsh
2673 case "\$1\$2" in
2674 '[A-Z][a-z]') exec $tr '$up' '$low';;
2675 '[a-z][A-Z]') exec $tr '$low' '$up';;
2676 esac
2677 exec $tr "\$@"
2678 EOSC
2679 chmod +x tr
2680 $eunicefix tr
2681
2682 : Try to determine whether config.sh was made on this system
2683 case "$config_sh" in
2684 '')
2685 myuname=`$uname -a 2>/dev/null`
2686 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2687 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2688 # because the A-Z/a-z are not consecutive.
2689 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2690         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2691 newmyuname="$myuname"
2692 dflt=n
2693 case "$knowitall" in
2694 '')
2695         if test -f ../config.sh; then
2696                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2697                         eval "`grep myuname= ../config.sh`"
2698                 fi
2699                 if test "X$myuname" = "X$newmyuname"; then
2700                         dflt=y
2701                 fi
2702         fi
2703         ;;
2704 *) dflt=y;;
2705 esac
2706
2707 : Get old answers from old config file if Configure was run on the
2708 : same system, otherwise use the hints.
2709 hint=default
2710 cd ..
2711 if test -f config.sh; then
2712         echo " "
2713         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2714         . UU/myread
2715         case "$ans" in
2716         n*|N*) echo "OK, I'll ignore it."
2717                 mv config.sh config.sh.old
2718                 myuname="$newmyuname"
2719                 ;;
2720         *)  echo "Fetching default answers from your old config.sh file..." >&4
2721                 tmp_n="$n"
2722                 tmp_c="$c"
2723                 tmp_sh="$sh"
2724                 . ./config.sh
2725                 cp config.sh UU
2726                 n="$tmp_n"
2727                 c="$tmp_c"
2728                 : Older versions did not always set $sh.  Catch re-use of such
2729                 : an old config.sh.
2730                 case "$sh" in
2731                 '') sh="$tmp_sh" ;;
2732                 esac
2733                 hint=previous
2734                 ;;
2735         esac
2736 fi
2737 . ./UU/checkcc
2738 if test ! -f config.sh; then
2739         $cat <<EOM
2740
2741 First time through, eh?  I have some defaults handy for some systems
2742 that need some extra help getting the Configure answers right:
2743
2744 EOM
2745         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2746         dflt=''
2747         : Half the following guesses are probably wrong... If you have better
2748         : tests or hints, please send them to perlbug@perl.org
2749         : The metaconfig authors would also appreciate a copy...
2750         $test -f /irix && osname=irix
2751         $test -f /xenix && osname=sco_xenix
2752         $test -f /dynix && osname=dynix
2753         $test -f /dnix && osname=dnix
2754         $test -f /lynx.os && osname=lynxos
2755         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2756         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2757         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2758         $test -f /bin/mips && /bin/mips && osname=mips
2759         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2760                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2761         $test -d /usr/apollo/bin && osname=apollo
2762         $test -f /etc/saf/_sactab && osname=svr4
2763         $test -d /usr/include/minix && osname=minix
2764         if $test -d /MachTen -o -d /MachTen_Folder; then
2765                 osname=machten
2766                 if $test -x /sbin/version; then
2767                         osvers=`/sbin/version | $awk '{print $2}' |
2768                         $sed -e 's/[A-Za-z]$//'`
2769                 elif $test -x /usr/etc/version; then
2770                         osvers=`/usr/etc/version | $awk '{print $2}' |
2771                         $sed -e 's/[A-Za-z]$//'`
2772                 else
2773                         osvers="$2.$3"
2774                 fi
2775         fi
2776
2777         $test -f /sys/posix.dll &&
2778                 $test -f /usr/bin/what &&
2779                 set X `/usr/bin/what /sys/posix.dll` &&
2780                 $test "$3" = UWIN &&
2781                 osname=uwin &&
2782                 osvers="$5"
2783
2784         if $test -f $uname; then
2785                 set X $myuname
2786                 shift
2787
2788                 case "$5" in
2789                 fps*) osname=fps ;;
2790                 mips*)
2791                         case "$4" in
2792                         umips) osname=umips ;;
2793                         *) osname=mips ;;
2794                         esac;;
2795                 [23]100) osname=mips ;;
2796                 next*) osname=next ;;
2797                 i386*)
2798                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2799                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2800                                 osname='sco'
2801                                 osvers=$tmp
2802                         elif $test -f /etc/kconfig; then
2803                                 osname=isc
2804                                 if test "$lns" = "$ln -s"; then
2805                                         osvers=4
2806                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2807                                         osvers=3
2808                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2809                                         osvers=2
2810                                 fi
2811                         fi
2812                         tmp=''
2813                         ;;
2814                 pc*)
2815                         if test -n "$DJGPP"; then
2816                                 osname=dos
2817                                 osvers=djgpp
2818                         fi
2819                         ;;
2820                 esac
2821
2822                 case "$1" in
2823                 aix) osname=aix
2824                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2825                         case "$tmp" in
2826                         'not found') osvers="$4"."$3" ;;
2827                         '<3240'|'<>3240') osvers=3.2.0 ;;
2828                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2829                         '=3250'|'>3250') osvers=3.2.5 ;;
2830                         *) osvers=$tmp;;
2831                         esac
2832                         ;;
2833                 bsd386) osname=bsd386
2834                         osvers=`$uname -r`
2835                         ;;
2836                 cygwin*) osname=cygwin
2837                         osvers="$3"
2838                         ;;
2839                 *dc.osx) osname=dcosx
2840                         osvers="$3"
2841                         ;;
2842                 dnix) osname=dnix
2843                         osvers="$3"
2844                         ;;
2845                 domainos) osname=apollo
2846                         osvers="$3"
2847                         ;;
2848                 dgux) osname=dgux 
2849                         osvers="$3"
2850                         ;;
2851                 dynixptx*) osname=dynixptx
2852                         osvers=`echo "$4"|sed 's/^v//'`
2853                         ;;
2854                 freebsd) osname=freebsd 
2855                         osvers="$3" ;;
2856                 genix) osname=genix ;;
2857                 hp*) osname=hpux 
2858                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2859                         ;;
2860                 irix*) osname=irix
2861                         case "$3" in
2862                         4*) osvers=4 ;;
2863                         5*) osvers=5 ;;
2864                         *)      osvers="$3" ;;
2865                         esac
2866                         ;;
2867                 linux) osname=linux
2868                         case "$3" in
2869                         *)      osvers="$3" ;;
2870                         esac
2871                         ;;
2872                 MiNT) osname=mint
2873                         ;;
2874                 netbsd*) osname=netbsd
2875                         osvers="$3"
2876                         ;;
2877                 news-os) osvers="$3"
2878                         case "$3" in
2879                         4*) osname=newsos4 ;;
2880                         *) osname=newsos ;;
2881                         esac
2882                         ;;
2883                 next*) osname=next ;;
2884                 nonstop-ux) osname=nonstopux ;;
2885                 POSIX-BC | posix-bc ) osname=posix-bc
2886                         osvers="$3"
2887                         ;;
2888                 powerux | power_ux | powermax_os | powermaxos | \
2889                 powerunix | power_unix) osname=powerux
2890                         osvers="$3"
2891                         ;;
2892                 qnx) osname=qnx
2893                         osvers="$4"
2894                         ;;
2895                 solaris) osname=solaris
2896                         case "$3" in
2897                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2898                         *)      osvers="$3" ;;
2899                         esac
2900                         ;;
2901                 sunos) osname=sunos
2902                         case "$3" in
2903                         5*) osname=solaris
2904                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2905                         *)      osvers="$3" ;;
2906                         esac
2907                         ;;
2908                 titanos) osname=titanos
2909                         case "$3" in
2910                         1*) osvers=1 ;;
2911                         2*) osvers=2 ;;
2912                         3*) osvers=3 ;;
2913                         4*) osvers=4 ;;
2914                         *)      osvers="$3" ;;
2915                         esac
2916                         ;;
2917                 ultrix) osname=ultrix
2918                         osvers="$3"
2919                         ;;
2920                 osf1|mls+)      case "$5" in
2921                                 alpha)
2922                                         osname=dec_osf
2923                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2924                                         case "$osvers" in
2925                                         [1-9].[0-9]*) ;;
2926                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2927                                         esac
2928                                         ;;
2929                         hp*)    osname=hp_osf1  ;;
2930                         mips)   osname=mips_osf1 ;;
2931                         esac
2932                         ;;
2933                 unixware) osname=svr5
2934                         osvers="$4"
2935                         ;;
2936                 uts) osname=uts
2937                         osvers="$3"
2938                         ;;
2939                 $2) case "$osname" in
2940                         *isc*) ;;
2941                         *freebsd*) ;;
2942                         svr*)
2943                                 : svr4.x or possibly later
2944                                 case "svr$3" in 
2945                                 ${osname}*)
2946                                         osname=svr$3
2947                                         osvers=$4
2948                                         ;;
2949                                 esac
2950                                 case "$osname" in
2951                                 svr4.0)
2952                                         : Check for ESIX
2953                                         if test -f /stand/boot ; then
2954                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2955                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2956                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2957                                                         if test -n "$isesix"; then
2958                                                                 osname=esix4
2959                                                         fi
2960                                                 fi
2961                                         fi
2962                                         ;;
2963                                 esac
2964                                 ;;
2965                         *)      if test -f /etc/systemid; then
2966                                         osname=sco
2967                                         set `echo $3 | $sed 's/\./ /g'` $4
2968                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2969                                                 osvers=$1.$2.$3
2970                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2971                                                 osvers=$1.$2
2972                                         elif $test -f $src/hints/sco_$1.sh; then
2973                                                 osvers=$1
2974                                         fi
2975                                 else
2976                                         case "$osname" in
2977                                         '') : Still unknown.  Probably a generic Sys V.
2978                                                 osname="sysv"
2979                                                 osvers="$3"
2980                                                 ;;
2981                                         esac
2982                                 fi
2983                                 ;;
2984                         esac
2985                         ;;
2986                 *)      case "$osname" in
2987                         '') : Still unknown.  Probably a generic BSD.
2988                                 osname="$1"
2989                                 osvers="$3"
2990                                 ;;
2991                         esac
2992                         ;;
2993                 esac
2994         else
2995                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2996                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2997                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2998                                 osname=news_os
2999                         fi
3000                         $rm -f UU/kernel.what
3001                 elif test -d c:/.; then
3002                         set X $myuname
3003                         osname=os2
3004                         osvers="$5"
3005                 fi
3006         fi
3007         
3008         case "$targetarch" in
3009         '') ;;
3010         *)  hostarch=$osname
3011             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
3012             osvers=''
3013             ;;
3014         esac
3015
3016         : Now look for a hint file osname_osvers, unless one has been
3017         : specified already.
3018         case "$hintfile" in
3019         ''|' ')
3020                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
3021                 : Also try without trailing minor version numbers.
3022                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
3023                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
3024                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
3025                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
3026                 case "$file" in
3027                 '') dflt=none ;;
3028                 *)  case "$osvers" in
3029                         '') dflt=$file
3030                                 ;;
3031                         *)  if $test -f $src/hints/$file.sh ; then
3032                                         dflt=$file
3033                                 elif $test -f $src/hints/$xfile.sh ; then
3034                                         dflt=$xfile
3035                                 elif $test -f $src/hints/$xxfile.sh ; then
3036                                         dflt=$xxfile
3037                                 elif $test -f $src/hints/$xxxfile.sh ; then
3038                                         dflt=$xxxfile
3039                                 elif $test -f $src/hints/$xxxxfile.sh ; then
3040                                         dflt=$xxxxfile
3041                                 elif $test -f "$src/hints/${osname}.sh" ; then
3042                                         dflt="${osname}"
3043                                 else
3044                                         dflt=none
3045                                 fi
3046                                 ;;
3047                         esac
3048                         ;;
3049                 esac
3050                 if $test -f Policy.sh ; then
3051                         case "$dflt" in
3052                         *Policy*) ;;
3053                         none) dflt="Policy" ;;
3054                         *) dflt="Policy $dflt" ;;
3055                         esac
3056                 fi
3057                 ;;
3058         *)
3059                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
3060                 ;;
3061         esac
3062
3063         if $test -f Policy.sh ; then
3064                 $cat <<EOM
3065
3066 There's also a Policy hint file available, which should make the
3067 site-specific (policy) questions easier to answer.
3068 EOM
3069
3070         fi
3071
3072         $cat <<EOM
3073
3074 You may give one or more space-separated answers, or "none" if appropriate.
3075 A well-behaved OS will have no hints, so answering "none" or just "Policy"
3076 is a good thing.  DO NOT give a wrong version or a wrong OS.
3077
3078 EOM
3079
3080         rp="Which of these apply, if any?"
3081         . UU/myread
3082         tans=$ans
3083         for file in $tans; do
3084                 if $test X$file = XPolicy -a -f Policy.sh; then
3085                         . Policy.sh
3086                         $cat Policy.sh >> UU/config.sh
3087                 elif $test -f $src/hints/$file.sh; then
3088                         . $src/hints/$file.sh
3089                         $cat $src/hints/$file.sh >> UU/config.sh
3090                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
3091                         : nothing
3092                 else
3093                         : Give one chance to correct a possible typo.
3094                         echo "$file.sh does not exist"
3095                         dflt=$file
3096                         rp="hint to use instead?"
3097                         . UU/myread
3098                         for file in $ans; do
3099                                 if $test -f "$src/hints/$file.sh"; then
3100                                         . $src/hints/$file.sh
3101                                         $cat $src/hints/$file.sh >> UU/config.sh
3102                                 elif $test X$ans = X -o X$ans = Xnone ; then
3103                                         : nothing
3104                                 else
3105                                         echo "$file.sh does not exist -- ignored."
3106                                 fi
3107                         done
3108                 fi
3109         done
3110
3111         hint=recommended
3112         : Remember our hint file for later.
3113         if $test -f "$src/hints/$file.sh" ; then
3114                 hintfile="$file"
3115         else
3116                 hintfile=''
3117         fi
3118 fi
3119 cd UU
3120 ;;
3121 *)
3122         echo " "
3123         echo "Fetching default answers from $config_sh..." >&4
3124         tmp_n="$n"
3125         tmp_c="$c"
3126         cd ..
3127         cp $config_sh config.sh 2>/dev/null
3128         chmod +w config.sh
3129         . ./config.sh
3130         cd UU
3131         cp ../config.sh .
3132         n="$tmp_n"
3133         c="$tmp_c"
3134         hint=previous
3135         ;;
3136 esac
3137 test "$override" && . ./optdef.sh
3138
3139 : Restore computed paths
3140 for file in $loclist $trylist; do
3141         eval $file="\$_$file"
3142 done
3143
3144 cat << EOM
3145
3146 Configure uses the operating system name and version to set some defaults.
3147 The default value is probably right if the name rings a bell. Otherwise,
3148 since spelling matters for me, either accept the default or answer "none"
3149 to leave it blank.
3150
3151 EOM
3152 case "$osname" in
3153         ''|' ')
3154                 case "$hintfile" in
3155                 ''|' '|none) dflt=none ;;
3156                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3157                 esac
3158                 ;;
3159         *) dflt="$osname" ;;
3160 esac
3161 rp="Operating system name?"
3162 . ./myread
3163 case "$ans" in
3164 none)  osname='' ;;
3165 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3166 esac
3167 echo " "
3168 case "$osvers" in
3169         ''|' ')
3170                 case "$hintfile" in
3171                 ''|' '|none) dflt=none ;;
3172                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3173                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3174                         case "$dflt" in
3175                         ''|' ') dflt=none ;;
3176                         esac
3177                         ;;
3178                 esac
3179                 ;;
3180         *) dflt="$osvers" ;;
3181 esac
3182 rp="Operating system version?"
3183 . ./myread
3184 case "$ans" in
3185 none)  osvers='' ;;
3186 *) osvers="$ans" ;;
3187 esac
3188
3189
3190 . ./posthint.sh
3191
3192 : who configured the system
3193 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3194 cf_by=`(logname) 2>/dev/null`
3195 case "$cf_by" in
3196 "")
3197         cf_by=`(whoami) 2>/dev/null`
3198         case "$cf_by" in
3199         "") cf_by=unknown ;;
3200         esac ;;
3201 esac
3202
3203 : set up the script used to warn in case of inconsistency
3204 cat <<EOS >whoa
3205 $startsh
3206 EOS
3207 cat <<'EOSC' >>whoa
3208 dflt=y
3209 echo " "
3210 echo "*** WHOA THERE!!! ***" >&4
3211 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3212 rp="    Keep the $hint value?"
3213 . ./myread
3214 case "$ans" in
3215 y) td=$was; tu=$was;;
3216 esac
3217 EOSC
3218
3219 : function used to set $1 to $val
3220 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3221 case "$val$was" in
3222 $define$undef) . ./whoa; eval "$var=\$td";;
3223 $undef$define) . ./whoa; eval "$var=\$tu";;
3224 *) eval "$var=$val";;
3225 esac'
3226
3227 case "$usethreads" in
3228 $define|true|[yY]*)     dflt='y';;
3229 *) dflt='n';;
3230 esac
3231 cat <<EOM
3232
3233 Perl can be built to take advantage of threads on some systems.
3234 To do so, Configure can be run with -Dusethreads.
3235
3236 Note that threading is a highly experimental feature, and
3237 some known race conditions still remain.  If you choose to try
3238 it, be very sure to not actually deploy it for production
3239 purposes.  README.threads has more details, and is required
3240 reading if you enable threads.
3241
3242 If this doesn't make any sense to you, just accept the default '$dflt'.
3243 EOM
3244 rp='Build a threading Perl?'
3245 . ./myread
3246 case "$ans" in
3247 y|Y)    val="$define" ;;
3248 *)      val="$undef" ;;
3249 esac
3250 set usethreads
3251 eval $setvar
3252
3253 case "$usethreads" in
3254 $define)
3255         $cat <<EOM
3256
3257 As of 5.5.640, Perl has two different internal threading implementations,
3258 the 5.005 version (5005threads) and an interpreter-based version
3259 (ithreads) that has one interpreter per thread.  Both are very 
3260 experimental.  This arrangement exists to help developers work out
3261 which one is better.
3262
3263 If you're a casual user, you probably don't want interpreter-threads
3264 at this time.  There doesn't yet exist a way to create threads from
3265 within Perl in this model, i.e., "use Thread;" will NOT work.
3266 EOM
3267         : Default to ithreads unless overridden on command line or with
3268         : old config.sh
3269         dflt='y'
3270         case "$use5005threads" in
3271                 $define|true|[yY]*) dflt='n';;
3272         esac
3273         case "$useithreads" in
3274                 $undef|false|[nN]*) dflt='n';;
3275         esac
3276         rp='Use interpreter-based ithreads?'
3277         . ./myread
3278         case "$ans" in
3279         y|Y)    val="$define" ;;
3280         *)      val="$undef" ;;
3281         esac
3282         set useithreads
3283         eval $setvar
3284         : Now set use5005threads to the opposite value.
3285         case "$useithreads" in
3286         $define) val="$undef" ;;
3287         *) val="$define" ;;
3288         esac
3289         set use5005threads
3290         eval $setvar
3291         ;;
3292 *)
3293         useithreads="$undef"
3294         use5005threads="$undef"
3295         ;;
3296 esac
3297
3298 case "$useithreads$use5005threads" in
3299 "$define$define")
3300         $cat >&4 <<EOM
3301
3302 You cannot have both the ithreads and the 5.005 threads enabled
3303 at the same time.  Disabling the 5.005 threads since they are
3304 much less stable than the ithreads.
3305
3306 EOM
3307         use5005threads="$undef"
3308         ;;
3309 esac
3310
3311 case "$d_oldpthreads" in
3312 '')     : Configure tests would be welcome here.  For now, assume undef.
3313         val="$undef" ;;
3314 *)      val="$d_oldpthreads" ;;
3315 esac
3316 set d_oldpthreads
3317 eval $setvar
3318
3319
3320 case "$usethreads" in
3321 "$define"|true|[yY]*)
3322 : Look for a hint-file generated 'call-back-unit'.  If the
3323 : user has specified that a threading perl is to be built,
3324 : we may need to set or change some other defaults.
3325         if $test -f usethreads.cbu; then
3326                 echo "Your platform has some specific hints for threaded builds, using them..."
3327                 . ./usethreads.cbu
3328         else
3329                 $cat <<EOM
3330 (Your platform doesn't have any specific hints for threaded builds.
3331  Assuming POSIX threads, then.)
3332 EOM
3333         fi
3334         ;;
3335 esac
3336
3337 cat <<EOM
3338
3339 Perl can be built so that multiple Perl interpreters can coexist
3340 within the same Perl executable.
3341 EOM
3342
3343 case "$useithreads" in
3344 $define)
3345         cat <<EOM
3346 This multiple interpreter support is required for interpreter-based threads.
3347 EOM
3348         val="$define"
3349         ;;
3350 *)      case "$usemultiplicity" in
3351         $define|true|[yY]*)     dflt='y';;
3352         *) dflt='n';;
3353         esac
3354         echo " "
3355         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3356         rp='Build Perl for multiplicity?'
3357         . ./myread
3358         case "$ans" in
3359         y|Y)    val="$define" ;;
3360         *)      val="$undef" ;;
3361         esac
3362         ;;
3363 esac
3364 set usemultiplicity
3365 eval $setvar
3366
3367
3368 case "$usemorebits" in
3369 "$define"|true|[yY]*)
3370         use64bitint="$define"
3371         uselongdouble="$define"
3372         usemorebits="$define"
3373         ;;
3374 *)      usemorebits="$undef"
3375         ;;
3376 esac
3377
3378 : make some quick guesses about what we are up against
3379 echo " "
3380 $echo $n "Hmm...  $c"
3381 echo exit 1 >bsd
3382 echo exit 1 >usg
3383 echo exit 1 >v7
3384 echo exit 1 >osf1
3385 echo exit 1 >eunice
3386 echo exit 1 >xenix
3387 echo exit 1 >venix
3388 echo exit 1 >os2
3389 d_bsd="$undef"
3390 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3391 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3392 then
3393         echo "Looks kind of like an OSF/1 system, but we'll see..."
3394         echo exit 0 >osf1
3395 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3396         xxx=`./loc addbib blurfl $pth`
3397         if $test -f $xxx; then
3398         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3399                 echo exit 0 >bsd
3400                 echo exit 0 >usg
3401         else
3402                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3403                         echo "Looks kind of like an extended USG system, but we'll see..."
3404                 else
3405                         echo "Looks kind of like a USG system, but we'll see..."
3406                 fi
3407                 echo exit 0 >usg
3408         fi
3409 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3410         echo "Looks kind of like a BSD system, but we'll see..."
3411         d_bsd="$define"
3412         echo exit 0 >bsd
3413 else
3414         echo "Looks kind of like a Version 7 system, but we'll see..."
3415         echo exit 0 >v7
3416 fi
3417 case "$eunicefix" in
3418 *unixtovms*)
3419         $cat <<'EOI'
3420 There is, however, a strange, musty smell in the air that reminds me of
3421 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3422 EOI
3423         echo exit 0 >eunice
3424         d_eunice="$define"
3425 : it so happens the Eunice I know will not run shell scripts in Unix format
3426         ;;
3427 *)
3428         echo " "
3429         echo "Congratulations.  You aren't running Eunice."
3430         d_eunice="$undef"
3431         ;;
3432 esac
3433 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3434 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3435 : semicolon as a patch separator
3436 case "$p_" in
3437 :) ;;
3438 *)
3439         $cat <<'EOI'
3440 I have the feeling something is not exactly right, however...don't tell me...
3441 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3442 (Or you may be running DOS with DJGPP.)
3443 EOI
3444         echo exit 0 >os2
3445         ;;
3446 esac
3447 if test -f /xenix; then
3448         echo "Actually, this looks more like a XENIX system..."
3449         echo exit 0 >xenix
3450         d_xenix="$define"
3451 else
3452         echo " "
3453         echo "It's not Xenix..."
3454         d_xenix="$undef"
3455 fi
3456 chmod +x xenix
3457 $eunicefix xenix
3458 if test -f /venix; then
3459         echo "Actually, this looks more like a VENIX system..."
3460         echo exit 0 >venix
3461 else
3462         echo " "
3463         if ./xenix; then
3464                 : null
3465         else
3466                 echo "Nor is it Venix..."
3467         fi
3468 fi
3469 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3470 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3471 $rm -f foo
3472
3473 case "$cc" in
3474 '') dflt=cc;;
3475 *) dflt="$cc";;
3476 esac
3477 rp="Use which C compiler?"
3478 . ./myread
3479 cc="$ans"
3480 : Look for a hint-file generated 'call-back-unit'.  Now that the
3481 : user has specified the compiler, we may need to set or change some
3482 : other defaults.
3483 if $test -f cc.cbu; then
3484     . ./cc.cbu
3485 fi
3486 . ./checkcc
3487
3488 echo " "
3489 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3490 $cat >try.c <<EOM
3491 #include <stdio.h>
3492 int main() {
3493 #ifdef __GNUC__
3494 #ifdef __VERSION__
3495         printf("%s\n", __VERSION__);
3496 #else
3497         printf("%s\n", "1");
3498 #endif
3499 #endif
3500         exit(0);
3501 }
3502 EOM
3503 if $cc -o try $ccflags $ldflags try.c; then
3504         gccversion=`$run ./try`
3505         case "$gccversion" in
3506         '') echo "You are not using GNU cc." ;;
3507         *)  echo "You are using GNU cc $gccversion."
3508             ccname=gcc  
3509             ;;
3510         esac
3511 else
3512         echo " "
3513         echo "*** WHOA THERE!!! ***" >&4
3514         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3515         case "$knowitall" in
3516         '')
3517         echo "    You'd better start hunting for one and let me know about it." >&4
3518                 exit 1
3519                 ;;
3520         esac
3521 fi
3522 $rm -f try try.*
3523 case "$gccversion" in
3524 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3525 esac
3526 case "$gccversion" in
3527 '') gccosandvers='' ;;
3528 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3529    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3530    gccshortvers=''
3531    case "$gccosandvers" in
3532    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3533    $osname$osvers) ;; # looking good
3534    $osname*) cat <<EOM >&4
3535
3536 *** WHOA THERE!!! ***
3537
3538     Your gcc has not been compiled for the exact release of
3539     your operating system ($gccosandvers versus $osname$osvers).
3540
3541     In general it is a good idea to keep gcc synchronized with
3542     the operating system because otherwise serious problems
3543     may ensue when trying to compile software, like Perl.
3544
3545     I'm trying to be optimistic here, though, and will continue.
3546     If later during the configuration and build icky compilation
3547     problems appear (headerfile conflicts being the most common
3548     manifestation), I suggest reinstalling the gcc to match
3549     your operating system release.
3550
3551 EOM
3552       ;;
3553    *) gccosandvers='' ;; # failed to parse, better be silent
3554    esac
3555    ;;
3556 esac
3557 case "$ccname" in
3558 '') ccname="$cc" ;;
3559 esac
3560
3561
3562 : decide how portable to be.  Allow command line overrides.
3563 case "$d_portable" in
3564 "$undef") ;;
3565 *)      d_portable="$define" ;;
3566 esac
3567
3568 : set up shell script to do ~ expansion
3569 cat >filexp <<EOSS
3570 $startsh
3571 : expand filename
3572 case "\$1" in
3573  ~/*|~)
3574         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3575         ;;
3576  ~*)
3577         if $test -f /bin/csh; then
3578                 /bin/csh -f -c "glob \$1"
3579                 failed=\$?
3580                 echo ""
3581                 exit \$failed
3582         else
3583                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3584                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3585                 if $test ! -d "\$dir"; then
3586                         me=\`basename \$0\`
3587                         echo "\$me: can't locate home directory for: \$name" >&2
3588                         exit 1
3589                 fi
3590                 case "\$1" in
3591                 */*)
3592                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3593                         ;;
3594                 *)
3595                         echo \$dir
3596                         ;;
3597                 esac
3598         fi
3599         ;;
3600 *)
3601         echo \$1
3602         ;;
3603 esac
3604 EOSS
3605 chmod +x filexp
3606 $eunicefix filexp
3607
3608 : now set up to get a file name
3609 cat <<EOS >getfile
3610 $startsh
3611 EOS
3612 cat <<'EOSC' >>getfile
3613 tilde=''
3614 fullpath=''
3615 already=''
3616 skip=''
3617 none_ok=''
3618 exp_file=''
3619 nopath_ok=''
3620 orig_rp="$rp"
3621 orig_dflt="$dflt"
3622 case "$gfpth" in
3623 '') gfpth='.' ;;
3624 esac
3625
3626 case "$fn" in
3627 *\(*)
3628         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3629         fn=`echo $fn | sed 's/(.*)//'`
3630         ;;
3631 esac
3632
3633 case "$fn" in
3634 *:*)
3635         loc_file=`expr $fn : '.*:\(.*\)'`
3636         fn=`expr $fn : '\(.*\):.*'`
3637         ;;
3638 esac
3639
3640 case "$fn" in
3641 *~*) tilde=true;;
3642 esac
3643 case "$fn" in
3644 */*) fullpath=true;;
3645 esac
3646 case "$fn" in
3647 *+*) skip=true;;
3648 esac
3649 case "$fn" in
3650 *n*) none_ok=true;;
3651 esac
3652 case "$fn" in
3653 *e*) exp_file=true;;
3654 esac
3655 case "$fn" in
3656 *p*) nopath_ok=true;;
3657 esac
3658
3659 case "$fn" in
3660 *f*) type='File';;
3661 *d*) type='Directory';;
3662 *l*) type='Locate';;
3663 esac
3664
3665 what="$type"
3666 case "$what" in
3667 Locate) what='File';;
3668 esac
3669
3670 case "$exp_file" in
3671 '')
3672         case "$d_portable" in
3673         "$define") ;;
3674         *) exp_file=true;;
3675         esac
3676         ;;
3677 esac
3678
3679 cd ..
3680 while test "$type"; do
3681         redo=''
3682         rp="$orig_rp"
3683         dflt="$orig_dflt"
3684         case "$tilde" in
3685         true) rp="$rp (~name ok)";;
3686         esac
3687         . UU/myread
3688         if test -f UU/getfile.ok && \
3689                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3690         then
3691                 value="$ans"
3692                 ansexp="$ans"
3693                 break
3694         fi
3695         case "$ans" in
3696         none)
3697                 value=''
3698                 ansexp=''
3699                 case "$none_ok" in
3700                 true) type='';;
3701                 esac
3702                 ;;
3703         *)
3704                 case "$tilde" in
3705                 '') value="$ans"
3706                         ansexp="$ans";;
3707                 *)
3708                         value=`UU/filexp $ans`
3709                         case $? in
3710                         0)
3711                                 if test "$ans" != "$value"; then
3712                                         echo "(That expands to $value on this system.)"
3713                                 fi
3714                                 ;;
3715                         *) value="$ans";;
3716                         esac
3717                         ansexp="$value"
3718                         case "$exp_file" in
3719                         '') value="$ans";;
3720                         esac
3721                         ;;
3722                 esac
3723                 case "$fullpath" in
3724                 true)
3725                         case "$ansexp" in
3726                         /*) value="$ansexp" ;;
3727                         [a-zA-Z]:/*) value="$ansexp" ;;
3728                         *)
3729                                 redo=true
3730                                 case "$already" in
3731                                 true)
3732                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3733                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3734                                         ;;
3735                                 *)
3736                                 echo "Please give a full path name, starting with slash." >&4
3737                                         case "$tilde" in
3738                                         true)
3739                                 echo "Note that using ~name is ok provided it expands well." >&4
3740                                                 already=true
3741                                                 ;;
3742                                         esac
3743                                 esac
3744                                 ;;
3745                         esac
3746                         ;;
3747                 esac
3748                 case "$redo" in
3749                 '')
3750                         case "$type" in
3751                         File)
3752                                 for fp in $gfpth; do
3753                                         if test "X$fp" = X.; then
3754                                             pf="$ansexp"
3755                                         else    
3756                                             pf="$fp/$ansexp"
3757                                         fi
3758                                         if test -f "$pf"; then
3759                                                 type=''
3760                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3761                                         then
3762                                                 echo "($value is not a plain file, but that's ok.)"
3763                                                 type=''
3764                                         fi
3765                                         if test X"$type" = X; then
3766                                             value="$pf"
3767                                             break
3768                                         fi
3769                                 done
3770                                 ;;
3771                         Directory)
3772                                 for fp in $gfpth; do
3773                                         if test "X$fp" = X.; then
3774                                             dir="$ans"
3775                                             direxp="$ansexp"
3776                                         else    
3777                                             dir="$fp/$ansexp"
3778                                             direxp="$fp/$ansexp"
3779                                         fi
3780                                         if test -d "$direxp"; then
3781                                                 type=''
3782                                                 value="$dir"
3783                                                 break
3784                                         fi
3785                                 done
3786                                 ;;
3787                         Locate)
3788                                 if test -d "$ansexp"; then
3789                                         echo "(Looking for $loc_file in directory $value.)"
3790                                         value="$value/$loc_file"
3791                                         ansexp="$ansexp/$loc_file"
3792                                 fi
3793                                 if test -f "$ansexp"; then
3794                                         type=''
3795                                 fi
3796                                 case "$nopath_ok" in
3797                                 true)   case "$value" in
3798                                         */*) ;;
3799                                         *)      echo "Assuming $value will be in people's path."
3800                                                 type=''
3801                                                 ;;
3802                                         esac
3803                                         ;;
3804                                 esac
3805                                 ;;
3806                         esac
3807
3808                         case "$skip" in
3809                         true) type='';
3810                         esac
3811
3812                         case "$type" in
3813                         '') ;;
3814                         *)
3815                                 if test "$fastread" = yes; then
3816                                         dflt=y
3817                                 else
3818                                         dflt=n
3819                                 fi
3820                                 rp="$what $value doesn't exist.  Use that name anyway?"
3821                                 . UU/myread
3822                                 dflt=''
3823                                 case "$ans" in
3824                                 y*) type='';;
3825                                 *) echo " ";;
3826                                 esac
3827                                 ;;
3828                         esac
3829                         ;;
3830                 esac
3831                 ;;
3832         esac
3833 done
3834 cd UU
3835 ans="$value"
3836 rp="$orig_rp"
3837 dflt="$orig_dflt"
3838 rm -f getfile.ok
3839 test "X$gfpthkeep" != Xy && gfpth=""
3840 EOSC
3841
3842 : What should the include directory be ?
3843 echo " "
3844 $echo $n "Hmm...  $c"
3845 dflt='/usr/include'
3846 incpath=''
3847 mips_type=''
3848 if $test -f /bin/mips && /bin/mips; then
3849         echo "Looks like a MIPS system..."
3850         $cat >usr.c <<'EOCP'
3851 #ifdef SYSTYPE_BSD43
3852 /bsd43
3853 #endif
3854 EOCP
3855         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3856                 dflt='/bsd43/usr/include'
3857                 incpath='/bsd43'
3858                 mips_type='BSD 4.3'
3859         else
3860                 mips_type='System V'
3861         fi
3862         $rm -f usr.c usr.out
3863         echo "and you're compiling with the $mips_type compiler and libraries."
3864         xxx_prompt=y
3865         echo "exit 0" >mips
3866 else
3867         echo "Doesn't look like a MIPS system."
3868         xxx_prompt=n
3869         echo "exit 1" >mips
3870 fi
3871 chmod +x mips
3872 $eunicefix mips
3873 case "$usrinc" in
3874 '') ;;
3875 *) dflt="$usrinc";;
3876 esac
3877 case "$xxx_prompt" in
3878 y)      fn=d/
3879         echo " "
3880         rp='Where are the include files you want to use?'
3881         . ./getfile
3882         usrinc="$ans"
3883         ;;
3884 *)      usrinc="$dflt"
3885         ;;
3886 esac
3887
3888 : see how we invoke the C preprocessor
3889 echo " "
3890 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3891 cat <<'EOT' >testcpp.c
3892 #define ABC abc
3893 #define XYZ xyz
3894 ABC.XYZ
3895 EOT
3896 cd ..
3897 if test ! -f cppstdin; then
3898         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3899                 # AIX cc -E doesn't show the absolute headerfile
3900                 # locations but we'll cheat by using the -M flag.
3901                 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
3902         else
3903                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3904         fi
3905 else
3906         echo "Keeping your $hint cppstdin wrapper."
3907 fi
3908 chmod 755 cppstdin
3909 wrapper=`pwd`/cppstdin
3910 ok='false'
3911 cd UU
3912
3913 if $test "X$cppstdin" != "X" && \
3914         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3915         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3916 then
3917         echo "You used to use $cppstdin $cppminus so we'll use that again."
3918         case "$cpprun" in
3919         '') echo "But let's see if we can live without a wrapper..." ;;
3920         *)
3921                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3922                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3923                 then
3924                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3925                         ok='true'
3926                 else
3927                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3928                 fi
3929                 ;;
3930         esac
3931 else
3932         case "$cppstdin" in
3933         '') ;;
3934         *)
3935                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3936                 ;;
3937         esac
3938 fi
3939
3940 if $ok; then
3941         : nothing
3942 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3943         $cc -E <testcpp.c >testcpp.out 2>&1; \
3944         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3945         echo "Yup, it does."
3946         x_cpp="$cc -E"
3947         x_minus='';
3948 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3949         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3950         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3951         echo "Yup, it does."
3952         x_cpp="$cc -E"
3953         x_minus='-';
3954 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3955         $cc -P <testcpp.c >testcpp.out 2>&1; \
3956         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3957         echo "Yipee, that works!"
3958         x_cpp="$cc -P"
3959         x_minus='';
3960 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3961         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3962         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3963         echo "At long last!"
3964         x_cpp="$cc -P"
3965         x_minus='-';
3966 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3967         $cpp <testcpp.c >testcpp.out 2>&1; \
3968         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3969         echo "It works!"
3970         x_cpp="$cpp"
3971         x_minus='';
3972 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3973         $cpp - <testcpp.c >testcpp.out 2>&1; \
3974         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3975         echo "Hooray, it works!  I was beginning to wonder."
3976         x_cpp="$cpp"
3977         x_minus='-';
3978 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3979         $wrapper <testcpp.c >testcpp.out 2>&1; \
3980         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3981         x_cpp="$wrapper"
3982         x_minus=''
3983         echo "Eureka!"
3984 else
3985         dflt=''
3986         rp="No dice.  I can't find a C preprocessor.  Name one:"
3987         . ./myread
3988         x_cpp="$ans"
3989         x_minus=''
3990         $x_cpp <testcpp.c >testcpp.out 2>&1
3991         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3992                 echo "OK, that will do." >&4
3993         else
3994 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3995                 exit 1
3996         fi
3997 fi
3998
3999 case "$ok" in
4000 false)
4001         cppstdin="$x_cpp"
4002         cppminus="$x_minus"
4003         cpprun="$x_cpp"
4004         cpplast="$x_minus"
4005         set X $x_cpp
4006         shift
4007         case "$1" in
4008         "$cpp")
4009                 echo "Perhaps can we force $cc -E using a wrapper..."
4010                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4011                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4012                 then
4013                         echo "Yup, we can."
4014                         cppstdin="$wrapper"
4015                         cppminus='';
4016                 else
4017                         echo "Nope, we'll have to live without it..."
4018                 fi
4019                 ;;
4020         esac
4021         case "$cpprun" in
4022         "$wrapper")
4023                 cpprun=''
4024                 cpplast=''
4025                 ;;
4026         esac
4027         ;;
4028 esac
4029
4030 case "$cppstdin" in
4031 "$wrapper"|'cppstdin') ;;
4032 *) $rm -f $wrapper;;
4033 esac
4034 $rm -f testcpp.c testcpp.out
4035
4036 : Set private lib path
4037 case "$plibpth" in
4038 '') if ./mips; then
4039                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4040         fi;;
4041 esac
4042 case "$libpth" in
4043 ' ') dlist='';;
4044 '') dlist="$loclibpth $plibpth $glibpth";;
4045 *) dlist="$libpth";;
4046 esac
4047
4048 : Now check and see which directories actually exist, avoiding duplicates
4049 libpth=''
4050 for xxx in $dlist
4051 do
4052     if $test -d $xxx; then
4053                 case " $libpth " in
4054                 *" $xxx "*) ;;
4055                 *) libpth="$libpth $xxx";;
4056                 esac
4057     fi
4058 done
4059 $cat <<'EOM'
4060
4061 Some systems have incompatible or broken versions of libraries.  Among
4062 the directories listed in the question below, please remove any you
4063 know not to be holding relevant libraries, and add any that are needed.
4064 Say "none" for none.
4065
4066 EOM
4067 case "$libpth" in
4068 '') dflt='none';;
4069 *)
4070         set X $libpth
4071         shift
4072         dflt=${1+"$@"}
4073         ;;
4074 esac
4075 rp="Directories to use for library searches?"
4076 . ./myread
4077 case "$ans" in
4078 none) libpth=' ';;
4079 *) libpth="$ans";;
4080 esac
4081
4082 : compute shared library extension
4083 case "$so" in
4084 '')
4085         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4086                 dflt='sl'
4087         else
4088                 dflt='so'
4089         fi
4090         ;;
4091 *) dflt="$so";;
4092 esac
4093 $cat <<EOM
4094
4095 On some systems, shared libraries may be available.  Answer 'none' if
4096 you want to suppress searching of shared libraries for the remainder
4097 of this configuration.
4098
4099 EOM
4100 rp='What is the file extension used for shared libraries?'
4101 . ./myread
4102 so="$ans"
4103
4104 : Define several unixisms.
4105 : Hints files or command line option can be used to override them.
4106 : The convoluted testing is in case hints files set either the old
4107 : or the new name.
4108 case "$_exe" in
4109 '')     case "$exe_ext" in
4110     '') ;;
4111         *)      _exe="$exe_ext" ;;
4112         esac
4113         ;;
4114 esac
4115 case "$_a" in
4116 '')     case "$lib_ext" in
4117     '') _a='.a';;
4118         *)      _a="$lib_ext" ;;
4119         esac
4120         ;;
4121 esac
4122 case "$_o" in
4123 '') case "$obj_ext" in
4124         '')     _o='.o';;
4125         *)      _o="$obj_ext";;
4126         esac
4127         ;;
4128 esac
4129 case "$p_" in
4130 '') case "$path_sep" in
4131         '')     p_=':';;
4132         *)      p_="$path_sep";;
4133         esac
4134         ;;
4135 esac
4136 exe_ext=$_exe
4137 lib_ext=$_a
4138 obj_ext=$_o
4139 path_sep=$p_
4140
4141 : Which makefile gets called first.  This is used by make depend.
4142 case "$firstmakefile" in
4143 '') firstmakefile='makefile';;
4144 esac
4145
4146 case "$usesocks" in
4147 $define|true|[yY]*)     dflt='y';;
4148 *) dflt='n';;
4149 esac
4150 cat <<EOM
4151
4152 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4153 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4154 to use the PerlIO abstraction layer, this will be implicitly selected.
4155
4156 If this doesn't make any sense to you, just accept the default '$dflt'.
4157 EOM
4158 rp='Build Perl for SOCKS?'
4159 . ./myread
4160 case "$ans" in
4161 y|Y)    val="$define" ;;     
4162 *)      val="$undef" ;;
4163 esac
4164 set usesocks
4165 eval $setvar
4166
4167 case "$usesocks" in
4168 $define|true|[yY]*) useperlio="$define";;
4169 esac
4170
4171 : Looking for optional libraries
4172 echo " "
4173 echo "Checking for optional libraries..." >&4
4174 case "$libs" in
4175 ' '|'') dflt='';;
4176 *) dflt="$libs";;
4177 esac
4178 case "$libswanted" in
4179 '') libswanted='c_s';;
4180 esac
4181 case "$usesocks" in
4182 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4183 esac
4184 libsfound=''
4185 libsfiles=''
4186 libsdirs=''
4187 libspath=''
4188 for thisdir in $libpth $xlibpth; do
4189   test -d $thisdir && libspath="$libspath $thisdir"
4190 done
4191 for thislib in $libswanted; do
4192         for thisdir in $libspath; do
4193             xxx=''
4194             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4195                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4196                 $test -f "$xxx" && eval $libscheck
4197                 $test -f "$xxx" && libstyle=shared
4198             fi
4199             if test ! -f "$xxx"; then
4200                 xxx=$thisdir/lib$thislib.$so
4201                 $test -f "$xxx" && eval $libscheck
4202                 $test -f "$xxx" && libstyle=shared
4203             fi  
4204             if test ! -f "$xxx"; then
4205                 xxx=$thisdir/lib$thislib$_a
4206                 $test -f "$xxx" && eval $libscheck
4207                 $test -f "$xxx" && libstyle=static
4208             fi
4209             if test ! -f "$xxx"; then
4210                 xxx=$thisdir/$thislib$_a
4211                 $test -f "$xxx" && eval $libscheck
4212                 $test -f "$xxx" && libstyle=static
4213             fi
4214             if test ! -f "$xxx"; then
4215                 xxx=$thisdir/lib${thislib}_s$_a
4216                 $test -f "$xxx" && eval $libscheck
4217                 $test -f "$xxx" && libstyle=static
4218                 $test -f "$xxx" && thislib=${thislib}_s
4219             fi
4220             if test ! -f "$xxx"; then
4221                 xxx=$thisdir/Slib$thislib$_a
4222                 $test -f "$xxx" && eval $libscheck
4223                 $test -f "$xxx" && libstyle=static
4224             fi
4225             if $test -f "$xxx"; then
4226                 case "$libstyle" in
4227                 shared) echo "Found -l$thislib (shared)." ;;
4228                 static) echo "Found -l$thislib." ;;
4229                 *)      echo "Found -l$thislib ($libstyle)." ;;
4230                 esac
4231                 case " $dflt " in
4232                 *"-l$thislib "*);;
4233                 *) dflt="$dflt -l$thislib"
4234                    libsfound="$libsfound $xxx"
4235                    yyy=`basename $xxx`
4236                    libsfiles="$libsfiles $yyy"
4237                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4238                    case " $libsdirs " in
4239                    *" $yyy "*) ;;
4240                    *) libsdirs="$libsdirs $yyy" ;;
4241                    esac
4242                    ;;
4243                 esac
4244                 break
4245             fi  
4246         done
4247         if $test ! -f "$xxx"; then
4248             echo "No -l$thislib."
4249         fi
4250 done
4251 set X $dflt
4252 shift
4253 dflt="$*"
4254 case "$libs" in
4255 '') dflt="$dflt";;
4256 *) dflt="$libs";;
4257 esac
4258 case "$dflt" in
4259 ' '|'') dflt='none';;
4260 esac
4261
4262 $cat <<EOM
4263
4264 In order to compile $package on your machine, a number of libraries
4265 are usually needed.  Include any other special libraries here as well.
4266 Say "none" for none.  The default list is almost always right.
4267 EOM
4268
4269 echo " "
4270 rp="What libraries to use?"
4271 . ./myread
4272 case "$ans" in
4273 none) libs=' ';;
4274 *) libs="$ans";;
4275 esac
4276
4277 : determine optimization, if desired, or use for debug flag also
4278 case "$optimize" in
4279 ' '|$undef) dflt='none';;
4280 '') dflt='-O';;
4281 *) dflt="$optimize";;
4282 esac
4283 $cat <<EOH
4284
4285 By default, $package compiles with the -O flag to use the optimizer.
4286 Alternately, you might want to use the symbolic debugger, which uses
4287 the -g flag (on traditional Unix systems).  Either flag can be
4288 specified here.  To use neither flag, specify the word "none".
4289
4290 EOH
4291 rp="What optimizer/debugger flag should be used?"
4292 . ./myread
4293 optimize="$ans"
4294 case "$optimize" in
4295 'none') optimize=" ";;
4296 esac
4297
4298 dflt=''
4299 : We will not override a previous value, but we might want to
4300 : augment a hint file
4301 case "$hint" in
4302 default|recommended)
4303         case "$gccversion" in
4304         1*) dflt='-fpcc-struct-return' ;;
4305         esac
4306         case "$optimize" in
4307         *-g*) dflt="$dflt -DDEBUGGING";;
4308         esac
4309         case "$gccversion" in
4310         2*) if test -d /etc/conf/kconfig.d &&
4311                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4312                 then
4313                         dflt="$dflt -posix"
4314                 fi
4315                 ;;
4316         esac
4317         case "$gccversion" in
4318         1*) ;;
4319         2.[0-8]*) ;;
4320         ?*)     echo " "
4321                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4322                 echo 'int main(void) { return 0; }' > gcctest.c
4323                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4324                         echo "Yes, it does." 2>&1
4325                         case "$ccflags" in
4326                         *strict-aliasing*) 
4327                                 echo "Leaving current flags $ccflags alone." 2>&1
4328                                 ;;
4329                         *) dflt="$dflt -fno-strict-aliasing" ;;
4330                         esac
4331                 else
4332                         echo "Nope, it doesn't, but that's ok." 2>&1
4333                 fi
4334                 ;;
4335         esac
4336         ;;
4337 esac
4338
4339 case "$mips_type" in
4340 *BSD*|'') inclwanted="$locincpth $usrinc";;
4341 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4342 esac
4343 for thisincl in $inclwanted; do
4344         if $test -d $thisincl; then
4345                 if $test x$thisincl != x$usrinc; then
4346                         case "$dflt" in
4347                         *" -I$thisincl "*);;
4348                         *) dflt="$dflt -I$thisincl ";;
4349                         esac
4350                 fi
4351         fi
4352 done
4353
4354 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4355         xxx=true;
4356 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4357         xxx=true;
4358 else
4359         xxx=false;
4360 fi;
4361 if $xxx; then
4362         case "$dflt" in
4363         *$2*);;
4364         *) dflt="$dflt -D$2";;
4365         esac;
4366 fi'
4367
4368 set signal.h LANGUAGE_C; eval $inctest
4369
4370 case "$usesocks" in
4371 $define)
4372         ccflags="$ccflags -DSOCKS"
4373         ;;
4374 esac
4375
4376 case "$hint" in
4377 default|recommended) dflt="$ccflags $dflt" ;;
4378 *) dflt="$ccflags";;
4379 esac
4380
4381 case "$dflt" in
4382 ''|' ') dflt=none;;
4383 esac
4384
4385 $cat <<EOH
4386
4387 Your C compiler may want other flags.  For this question you should include
4388 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4389 but you should NOT include libraries or ld flags like -lwhatever.  If you
4390 want $package to honor its debug switch, you should include -DDEBUGGING here.
4391 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4392
4393 To use no flags, specify the word "none".
4394
4395 EOH
4396 set X $dflt
4397 shift
4398 dflt=${1+"$@"}
4399 rp="Any additional cc flags?"
4400 . ./myread
4401 case "$ans" in
4402 none) ccflags='';;
4403 *) ccflags="$ans";;
4404 esac
4405
4406 : the following weeds options from ccflags that are of no interest to cpp
4407 case "$cppflags" in
4408 '') cppflags="$ccflags" ;;
4409 *)  cppflags="$cppflags $ccflags" ;;
4410 esac
4411 case "$gccversion" in
4412 1*) cppflags="$cppflags -D__GNUC__"
4413 esac
4414 case "$mips_type" in
4415 '');;
4416 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4417 esac
4418 case "$cppflags" in
4419 '');;
4420 *)
4421         echo " "
4422         echo "Let me guess what the preprocessor flags are..." >&4
4423         set X $cppflags
4424         shift
4425         cppflags=''
4426         $cat >cpp.c <<'EOM'
4427 #define BLURFL foo
4428
4429 BLURFL xx LFRULB
4430 EOM
4431         previous=''
4432         for flag in $*
4433         do
4434                 case "$flag" in
4435                 -*) ftry="$flag";;
4436                 *) ftry="$previous $flag";;
4437                 esac
4438                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4439                         >cpp1.out 2>/dev/null && \
4440                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4441                         >cpp2.out 2>/dev/null && \
4442                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4443                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4444                 then
4445                         cppflags="$cppflags $ftry"
4446                         previous=''
4447                 else
4448                         previous="$flag"
4449                 fi
4450         done
4451         set X $cppflags
4452         shift
4453         cppflags=${1+"$@"}
4454         case "$cppflags" in
4455         *-*)  echo "They appear to be: $cppflags";;
4456         esac
4457         $rm -f cpp.c cpp?.out
4458         ;;
4459 esac
4460
4461 : flags used in final linking phase
4462 case "$ldflags" in
4463 '') if ./venix; then
4464                 dflt='-i -z'
4465         else
4466                 dflt=''
4467         fi
4468         case "$ccflags" in
4469         *-posix*) dflt="$dflt -posix" ;;
4470         esac
4471         ;;
4472 *) dflt="$ldflags";;
4473 esac
4474
4475 : Try to guess additional flags to pick up local libraries.
4476 for thislibdir in $libpth; do
4477         case " $loclibpth " in
4478         *" $thislibdir "*)
4479                 case "$dflt " in 
4480                 *"-L$thislibdir "*) ;;
4481                 *)  dflt="$dflt -L$thislibdir" ;;
4482                 esac
4483                 ;;
4484         esac
4485 done
4486
4487 case "$dflt" in
4488 '') dflt='none' ;;
4489 esac
4490
4491 $cat <<EOH
4492
4493 Your C linker may need flags.  For this question you should
4494 include -L/whatever and any other flags used by the C linker, but you
4495 should NOT include libraries like -lwhatever.
4496
4497 Make sure you include the appropriate -L/path flags if your C linker
4498 does not normally search all of the directories you specified above,
4499 namely
4500         $libpth
4501 To use no flags, specify the word "none".
4502
4503 EOH
4504
4505 rp="Any additional ld flags (NOT including libraries)?"
4506 . ./myread
4507 case "$ans" in
4508 none) ldflags='';;
4509 *) ldflags="$ans";;
4510 esac
4511 rmlist="$rmlist pdp11"
4512
4513 : coherency check
4514 echo " "
4515 echo "Checking your choice of C compiler and flags for coherency..." >&4
4516 $cat > try.c <<'EOF'
4517 #include <stdio.h>
4518 int main() { printf("Ok\n"); exit(0); }
4519 EOF
4520 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4521 shift
4522 $cat >try.msg <<'EOM'
4523 I've tried to compile and run the following simple program:
4524
4525 EOM
4526 $cat try.c >> try.msg
4527
4528 $cat >> try.msg <<EOM
4529
4530 I used the command:
4531
4532         $*
4533         $run ./try
4534
4535 and I got the following output:
4536
4537 EOM
4538 dflt=y
4539 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4540         if $sh -c "$run ./try" >>try.msg 2>&1; then
4541                 xxx=`$run ./try`
4542                 case "$xxx" in
4543                 "Ok") dflt=n ;;
4544                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4545                         case " $libs " in
4546                         *" -lsfio "*)
4547                                 cat >> try.msg <<'EOQS'
4548 If $libs contains -lsfio, and sfio is mis-configured, then it
4549 sometimes (apparently) runs and exits with a 0 status, but with no
4550 output!  It may have to do with sfio's use of _exit vs. exit.
4551
4552 EOQS
4553                                 rp="You have a big problem.  Shall I abort Configure"
4554                                 dflt=y
4555                                 ;;
4556                         esac
4557                         ;;
4558                 esac
4559         else
4560                 echo "The program compiled OK, but exited with status $?." >>try.msg
4561                 rp="You have a problem.  Shall I abort Configure"
4562                 dflt=y
4563         fi
4564 else
4565         echo "I can't compile the test program." >>try.msg
4566         rp="You have a BIG problem.  Shall I abort Configure"
4567         dflt=y
4568 fi
4569 case "$dflt" in
4570 y)
4571         $cat try.msg >&4
4572         case "$knowitall" in
4573         '')
4574                 echo "(The supplied flags or libraries might be incorrect.)"
4575                 ;;
4576         *) dflt=n;;
4577         esac
4578         echo " "
4579         . ./myread
4580         case "$ans" in
4581         n*|N*) ;;
4582         *)      echo "Ok.  Stopping Configure." >&4
4583                 exit 1
4584                 ;;
4585         esac
4586         ;;
4587 n) echo "OK, that should do.";;
4588 esac
4589 $rm -f try try.* core
4590
4591 : define a shorthand compile call
4592 compile='
4593 mc_file=$1;
4594 shift;
4595 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4596 : define a shorthand compile call for compilations that should be ok.
4597 compile_ok='
4598 mc_file=$1;
4599 shift;
4600 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4601
4602 : check for lengths of integral types
4603 echo " "
4604 case "$intsize" in
4605 '')
4606         echo "Checking to see how big your integers are..." >&4
4607         $cat >try.c <<'EOCP'
4608 #include <stdio.h>
4609 int main()
4610 {
4611         printf("intsize=%d;\n", (int)sizeof(int));
4612         printf("longsize=%d;\n", (int)sizeof(long));
4613         printf("shortsize=%d;\n", (int)sizeof(short));
4614         exit(0);
4615 }
4616 EOCP
4617         set try
4618         if eval $compile_ok && $run ./try > /dev/null; then
4619                 eval `$run ./try`
4620                 echo "Your integers are $intsize bytes long."
4621                 echo "Your long integers are $longsize bytes long."
4622                 echo "Your short integers are $shortsize bytes long."
4623         else
4624                 $cat >&4 <<EOM
4625 !
4626 Help! I can't compile and run the intsize test program: please enlighten me!
4627 (This is probably a misconfiguration in your system or libraries, and
4628 you really ought to fix it.  Still, I'll try anyway.)
4629 !
4630 EOM
4631                 dflt=4
4632                 rp="What is the size of an integer (in bytes)?"
4633                 . ./myread
4634                 intsize="$ans"
4635                 dflt=$intsize
4636                 rp="What is the size of a long integer (in bytes)?"
4637                 . ./myread
4638                 longsize="$ans"
4639                 dflt=2
4640                 rp="What is the size of a short integer (in bytes)?"
4641                 . ./myread
4642                 shortsize="$ans"
4643         fi
4644         ;;
4645 esac
4646 $rm -f try try.*
4647
4648 : check for void type
4649 echo " "
4650 echo "Checking to see how well your C compiler groks the void type..." >&4
4651 case "$voidflags" in
4652 '')
4653         $cat >try.c <<'EOCP'
4654 #if TRY & 1
4655 void sub() {
4656 #else
4657 sub() {
4658 #endif
4659         extern void moo();      /* function returning void */
4660         void (*goo)();          /* ptr to func returning void */
4661 #if TRY & 8
4662         void *hue;              /* generic ptr */
4663 #endif
4664 #if TRY & 2
4665         void (*foo[10])();
4666 #endif
4667
4668 #if TRY & 4
4669         if(goo == moo) {
4670                 exit(0);
4671         }
4672 #endif
4673         exit(0);
4674 }
4675 int main() { sub(); }
4676 EOCP
4677         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4678                 voidflags=$defvoidused
4679         echo "Good.  It appears to support void to the level $package wants.">&4
4680                 if $contains warning .out >/dev/null 2>&1; then
4681                         echo "However, you might get some warnings that look like this:"
4682                         $cat .out
4683                 fi
4684         else
4685 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4686                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4687                         echo "It supports 1..."
4688                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4689                                 echo "It also supports 2..."
4690                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4691                                         voidflags=7
4692                                         echo "And it supports 4 but not 8 definitely."
4693                                 else
4694                                         echo "It doesn't support 4..."
4695                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4696                                                 voidflags=11
4697                                                 echo "But it supports 8."
4698                                         else
4699                                                 voidflags=3
4700                                                 echo "Neither does it support 8."
4701                                         fi
4702                                 fi
4703                         else
4704                                 echo "It does not support 2..."
4705                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4706                                         voidflags=13
4707                                         echo "But it supports 4 and 8."
4708                                 else
4709                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4710                                                 voidflags=5
4711                                                 echo "And it supports 4 but has not heard about 8."
4712                                         else
4713                                                 echo "However it supports 8 but not 4."
4714                                         fi
4715                                 fi
4716                         fi
4717                 else
4718                         echo "There is no support at all for void."
4719                         voidflags=0
4720                 fi
4721         fi
4722 esac
4723 case "$voidflags" in
4724 "$defvoidused") ;;
4725 *)      $cat >&4 <<'EOM'
4726   Support flag bits are:
4727     1: basic void declarations.
4728     2: arrays of pointers to functions returning void.
4729     4: operations between pointers to and addresses of void functions.
4730     8: generic void pointers.
4731 EOM
4732         dflt="$voidflags";
4733         rp="Your void support flags add up to what?"
4734         . ./myread
4735         voidflags="$ans"
4736         ;;
4737 esac
4738 $rm -f try.* .out
4739
4740 : check for length of pointer
4741 echo " "
4742 case "$ptrsize" in
4743 '')
4744         echo "Checking to see how big your pointers are..." >&4
4745         if test "$voidflags" -gt 7; then
4746                 echo '#define VOID_PTR char *' > try.c
4747         else
4748                 echo '#define VOID_PTR void *' > try.c
4749         fi
4750         $cat >>try.c <<'EOCP'
4751 #include <stdio.h>
4752 int main()
4753 {
4754     printf("%d\n", (int)sizeof(VOID_PTR));
4755     exit(0);
4756 }
4757 EOCP
4758         set try
4759         if eval $compile_ok; then
4760                 ptrsize=`$run ./try`
4761                 echo "Your pointers are $ptrsize bytes long."
4762         else
4763                 dflt='4'
4764                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4765                 rp="What is the size of a pointer (in bytes)?"
4766                 . ./myread
4767                 ptrsize="$ans"
4768         fi
4769         ;;
4770 esac
4771 $rm -f try.c try
4772
4773 : check for long long
4774 echo " "
4775 echo "Checking to see if you have long long..." >&4
4776 echo 'int main() { long long x = 7; return 0; }' > try.c
4777 set try
4778 if eval $compile; then
4779         val="$define"
4780         echo "You have long long."
4781 else
4782         val="$undef"
4783         echo "You do not have long long."
4784 fi
4785 $rm try.*
4786 set d_longlong
4787 eval $setvar
4788
4789 : check for length of long long
4790 case "${d_longlong}${longlongsize}" in
4791 $define)
4792         echo " "
4793         echo "Checking to see how big your long longs are..." >&4
4794         $cat >try.c <<'EOCP'
4795 #include <stdio.h>
4796 int main()
4797 {
4798     printf("%d\n", (int)sizeof(long long));
4799     return(0);
4800 }
4801 EOCP
4802         set try
4803         if eval $compile_ok; then
4804                 longlongsize=`$run ./try`
4805                 echo "Your long longs are $longlongsize bytes long."
4806         else
4807                 dflt='8'
4808                 echo " "
4809                 echo "(I can't seem to compile the test program.  Guessing...)"
4810                 rp="What is the size of a long long (in bytes)?"
4811                 . ./myread
4812                 longlongsize="$ans"
4813         fi
4814         if $test "X$longsize" = "X$longlongsize"; then
4815                 echo "(That isn't any different from an ordinary long.)"
4816         fi      
4817         ;;
4818 esac
4819 $rm -f try.* try
4820
4821 : determine filename position in cpp output
4822 echo " "
4823 echo "Computing filename position in cpp output for #include directives..." >&4
4824 echo '#include <stdio.h>' > foo.c
4825 $cat >fieldn <<EOF
4826 $startsh
4827 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4828 $grep '^[       ]*#.*stdio\.h' | \
4829 while read cline; do
4830         pos=1
4831         set \$cline
4832         while $test \$# -gt 0; do
4833                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4834                         echo "\$pos"
4835                         exit 0
4836                 fi
4837                 shift
4838                 pos=\`expr \$pos + 1\`
4839         done
4840 done
4841 EOF
4842 chmod +x fieldn
4843 fieldn=`./fieldn`
4844 $rm -f foo.c fieldn
4845 case $fieldn in
4846 '') pos='???';;
4847 1) pos=first;;
4848 2) pos=second;;
4849 3) pos=third;;
4850 *) pos="${fieldn}th";;
4851 esac
4852 echo "Your cpp writes the filename in the $pos field of the line."
4853
4854 : locate header file
4855 $cat >findhdr <<EOF
4856 $startsh
4857 wanted=\$1
4858 name=''
4859 for usrincdir in $usrinc
4860 do
4861         if test -f \$usrincdir/\$wanted; then
4862                 echo "\$usrincdir/\$wanted"
4863                 exit 0
4864         fi
4865 done
4866 awkprg='{ print \$$fieldn }'
4867 echo "#include <\$wanted>" > foo\$\$.c
4868 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4869 $grep "^[       ]*#.*\$wanted" | \
4870 while read cline; do
4871         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4872         case "\$name" in
4873         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4874         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4875         *) exit 2;;
4876         esac;
4877 done;
4878 #
4879 # status = 0: grep returned 0 lines, case statement not executed
4880 # status = 1: headerfile found
4881 # status = 2: while loop executed, no headerfile found
4882 #
4883 status=\$?
4884 $rm -f foo\$\$.c;
4885 if test \$status -eq 1; then
4886         exit 0;
4887 fi
4888 exit 1
4889 EOF
4890 chmod +x findhdr
4891
4892 : define an alternate in-header-list? function
4893 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4894 cont=true; xxf="echo \"<\$1> found.\" >&4";
4895 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4896 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4897 esac;
4898 case $# in 4) instead=instead;; *) instead="at last";; esac;
4899 while $test "$cont"; do
4900         xxx=`./findhdr $1`
4901         var=$2; eval "was=\$$2";
4902         if $test "$xxx" && $test -r "$xxx";
4903         then eval $xxf;
4904         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4905                 cont="";
4906         else eval $xxnf;
4907         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4908         set $yyy; shift; shift; yyy=$@;
4909         case $# in 0) cont="";;
4910         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4911                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4912         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4913                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4914         esac;
4915 done;
4916 while $test "$yyy";
4917 do set $yyy; var=$2; eval "was=\$$2";
4918         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4919         set $yyy; shift; shift; yyy=$@;
4920 done'
4921
4922 : see if inttypes.h is available
4923 : we want a real compile instead of Inhdr because some systems
4924 : have an inttypes.h which includes non-existent headers
4925 echo " "
4926 $cat >try.c <<EOCP
4927 #include <inttypes.h>
4928 int main() {
4929         static int32_t foo32 = 0x12345678;
4930 }
4931 EOCP
4932 set try
4933 if eval $compile; then
4934         echo "<inttypes.h> found." >&4
4935         val="$define"
4936 else
4937         echo "<inttypes.h> NOT found." >&4
4938         val="$undef"
4939 fi
4940 $rm -f try.c try
4941 set i_inttypes
4942 eval $setvar
4943
4944 : check for int64_t
4945 echo " "
4946 echo "Checking to see if you have int64_t..." >&4
4947 $cat >try.c <<EOCP
4948 #include <sys/types.h>
4949 #$i_inttypes I_INTTYPES
4950 #ifdef I_INTTYPES
4951 #include <inttypes.h>
4952 #endif
4953 int main() { int64_t x = 7; }
4954 EOCP
4955 set try
4956 if eval $compile; then
4957         val="$define"
4958         echo "You have int64_t."
4959 else
4960         val="$undef"
4961         echo "You do not have int64_t."
4962 fi
4963 $rm -f try try.*
4964 set d_int64_t
4965 eval $setvar
4966
4967
4968 echo " "
4969 echo "Checking which 64-bit integer type we could use..." >&4
4970
4971 case "$intsize" in
4972 8) val=int
4973    set quadtype
4974    eval $setvar
4975    val='"unsigned int"'
4976    set uquadtype
4977    eval $setvar
4978    quadkind=1
4979    ;;
4980 *) case "$longsize" in
4981    8) val=long
4982       set quadtype
4983       eval $setvar
4984       val='"unsigned long"'
4985       set uquadtype
4986       eval $setvar
4987       quadkind=2
4988       ;;
4989    *) case "$d_longlong:$longlongsize" in
4990       define:8)
4991         val='"long long"'
4992         set quadtype
4993         eval $setvar
4994         val='"unsigned long long"'
4995         set uquadtype
4996         eval $setvar
4997         quadkind=3
4998         ;;
4999       *) case "$d_int64_t" in
5000          define)
5001            val=int64_t
5002            set quadtype
5003            eval $setvar
5004            val=uint64_t
5005            set uquadtype
5006            eval $setvar
5007            quadkind=4
5008            ;;
5009          esac
5010          ;;
5011       esac
5012       ;;
5013    esac
5014    ;;
5015 esac
5016
5017 case "$quadtype" in
5018 '')     echo "Alas, no 64-bit integer types in sight." >&4
5019         d_quad="$undef"
5020         ;;
5021 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5022         d_quad="$define"
5023         ;;
5024 esac
5025
5026
5027 case "$uselonglong" in
5028 "$define"|true|[yY]*)
5029         cat <<EOM >&4
5030
5031 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5032 EOM
5033         use64bitint="$define"
5034         ;;
5035 esac                          
5036 case "$use64bits" in
5037 "$define"|true|[yY]*)
5038         cat <<EOM >&4
5039
5040 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5041 EOM
5042         use64bitint="$define"
5043         ;;
5044 esac                          
5045 case "$use64bitints" in
5046 "$define"|true|[yY]*)
5047         cat <<EOM >&4
5048
5049 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5050 EOM
5051         use64bitint="$define"
5052         ;;
5053 esac                          
5054 case "$use64bitsint" in
5055 "$define"|true|[yY]*)
5056         cat <<EOM >&4
5057
5058 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5059 EOM
5060         use64bitint="$define"
5061         ;;
5062 esac                          
5063 case "$uselonglongs" in
5064 "$define"|true|[yY]*)
5065         cat <<EOM >&4
5066
5067 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5068 EOM
5069         use64bitint="$define"
5070         ;;
5071 esac                          
5072 case "$use64bitsall" in
5073 "$define"|true|[yY]*)
5074         cat <<EOM >&4
5075
5076 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5077 EOM
5078         use64bitall="$define"
5079         ;;
5080 esac                          
5081
5082 case "$ccflags" in
5083 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5084 esac
5085 case "$use64bitall" in
5086 "$define"|true|[yY]*) use64bitint="$define" ;;
5087 esac
5088
5089 case "$longsize" in
5090 8) cat <<EOM
5091
5092 You have natively 64-bit long integers.
5093 EOM
5094    val="$define"
5095    ;;
5096 *) case "$use64bitint" in
5097    "$define"|true|[yY]*) dflt='y';;
5098    *) dflt='n';;
5099    esac
5100    case "$d_quad" in
5101    "$define") ;;
5102    *) dflt='n' ;;
5103    esac
5104    cat <<EOM
5105
5106 Perl can be built to take advantage of 64-bit integer types
5107 on some systems.  To do so, Configure can be run with -Duse64bitint.
5108 Choosing this option will most probably introduce binary incompatibilities.
5109
5110 If this doesn't make any sense to you, just accept the default '$dflt'.
5111 (The default has been chosen based on your configuration.)
5112 EOM
5113    rp='Try to use 64-bit integers, if available?'
5114    . ./myread
5115    case "$ans" in
5116    [yY]*) val="$define" ;;
5117    *)     val="$undef"  ;;
5118    esac
5119    ;;
5120 esac
5121 set use64bitint
5122 eval $setvar
5123
5124 case "$use64bitall" in
5125 "$define"|true|[yY]*) dflt='y' ;;
5126 *) case "$longsize" in
5127    8) dflt='y' ;;
5128    *) dflt='n' ;;
5129    esac
5130    ;;
5131 esac    
5132 cat <<EOM
5133
5134 You may also choose to try maximal 64-bitness.  It means using as much
5135 64-bitness as possible on the platform.  This in turn means even more
5136 binary incompatibilities.  On the other hand, your platform may not
5137 have any more 64-bitness available than what you already have chosen.
5138
5139 If this doesn't make any sense to you, just accept the default '$dflt'.
5140 (The default has been chosen based on your configuration.)
5141 EOM
5142 rp='Try to use maximal 64-bit support, if available?'
5143 . ./myread
5144 case "$ans" in
5145 [yY]*) val="$define" ;;
5146 *)     val="$undef"  ;;
5147 esac
5148 set use64bitall
5149 eval $setvar
5150 case "$use64bitall" in
5151 "$define")
5152         case "$use64bitint" in
5153         "$undef")
5154                 cat <<EOM
5155
5156 Since you have chosen a maximally 64-bit build, I'm also turning on
5157 the use of 64-bit integers.
5158 EOM
5159                 use64bitint="$define" ;;
5160         esac
5161         ;;
5162 esac
5163
5164 case "$use64bitall" in
5165 "$define"|true|[yY]*)
5166         case "$ptrsize" in
5167         4)      cat <<EOM >&4
5168
5169 *** You have chosen a maximally 64-bit build, but your pointers
5170 *** are only 4 bytes wide, disabling maximal 64-bitness.
5171
5172 EOM
5173                 use64bitall="$undef"
5174                 case "$use64bitint" in
5175                 "$define"|true|[yY]*) ;;
5176                 *)      cat <<EOM >&4
5177
5178 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5179
5180 EOM
5181                         use64bitint="$define"
5182                         ;;
5183                 esac
5184                 ;;
5185         esac
5186         ;;
5187 esac
5188
5189 case "$use64bitint" in
5190 "$define"|true|[yY]*)
5191 : Look for a hint-file generated 'call-back-unit'.  If the
5192 : user has specified that a 64-bit perl is to be built,
5193 : we may need to set or change some other defaults.
5194         if $test -f use64bitint.cbu; then
5195                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5196                 . ./use64bitint.cbu
5197         fi
5198         case "$longsize" in
5199         4) case "$archname64" in
5200            '') archname64=64int ;;
5201            esac
5202            ;;
5203         esac
5204         ;;
5205 esac
5206
5207 case "$use64bitall" in
5208 "$define"|true|[yY]*)
5209 : Look for a hint-file generated 'call-back-unit'.  If the
5210 : user has specified that a maximally 64-bit perl is to be built,
5211 : we may need to set or change some other defaults.
5212         if $test -f use64bitall.cbu; then
5213                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5214                 . ./use64bitall.cbu
5215         fi
5216         case "$longsize" in
5217         4) case "$archname64" in
5218            ''|64int) archname64=64all ;;
5219            esac
5220            ;;
5221         esac
5222         ;;
5223 esac
5224
5225 echo " "
5226 echo "Checking for GNU C Library..." >&4
5227 cat >try.c <<EOM
5228 #include <stdio.h>
5229 int main()
5230 {
5231 #ifdef __GLIBC__
5232     exit(0);
5233 #else
5234     exit(1);
5235 #endif
5236 }
5237 EOM
5238 set try
5239 if eval $compile_ok && $run ./try; then
5240         val="$define"
5241         echo "You are using the GNU C Library"
5242 else
5243         val="$undef"
5244         echo "You are not using the GNU C Library"
5245 fi
5246 $rm -f try try.*
5247 set d_gnulibc
5248 eval $setvar
5249
5250 : see if nm is to be used to determine whether a symbol is defined or not
5251 case "$usenm" in
5252 '')
5253         dflt=''
5254         case "$d_gnulibc" in
5255         "$define")
5256                 echo " "
5257                 echo "nm probably won't work on the GNU C Library." >&4
5258                 dflt=n
5259                 ;;
5260         esac
5261         case "$dflt" in
5262         '') 
5263                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5264                         echo " "
5265                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5266                         echo "'nm' won't be sufficient on this sytem." >&4
5267                         dflt=n
5268                 fi
5269                 ;;
5270         esac
5271         case "$dflt" in
5272         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5273                 if $test $dflt -gt 20; then
5274                         dflt=y
5275                 else
5276                         dflt=n
5277                 fi
5278                 ;;
5279         esac
5280         ;;
5281 *)
5282         case "$usenm" in
5283         true|$define) dflt=y;;
5284         *) dflt=n;;
5285         esac
5286         ;;
5287 esac
5288 $cat <<EOM
5289
5290 I can use $nm to extract the symbols from your C libraries. This
5291 is a time consuming task which may generate huge output on the disk (up
5292 to 3 megabytes) but that should make the symbols extraction faster. The
5293 alternative is to skip the 'nm' extraction part and to compile a small
5294 test program instead to determine whether each symbol is present. If
5295 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5296 this may be the best solution.
5297
5298 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5299
5300 EOM
5301 rp="Shall I use $nm to extract C symbols from the libraries?"
5302 . ./myread
5303 case "$ans" in
5304 [Nn]*) usenm=false;;
5305 *) usenm=true;;
5306 esac
5307
5308 runnm=$usenm
5309 case "$reuseval" in
5310 true) runnm=false;;
5311 esac
5312
5313 : nm options which may be necessary
5314 case "$nm_opt" in
5315 '') if $test -f /mach_boot; then
5316                 nm_opt=''       # Mach
5317         elif $test -d /usr/ccs/lib; then
5318                 nm_opt='-p'     # Solaris (and SunOS?)
5319         elif $test -f /dgux; then
5320                 nm_opt='-p'     # DG-UX
5321         elif $test -f /lib64/rld; then
5322                 nm_opt='-p'     # 64-bit Irix
5323         else
5324                 nm_opt=''
5325         fi;;
5326 esac
5327
5328 : nm options which may be necessary for shared libraries but illegal
5329 : for archive libraries.  Thank you, Linux.
5330 case "$nm_so_opt" in
5331 '')     case "$myuname" in
5332         *linux*)
5333                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5334                         nm_so_opt='--dynamic'
5335                 fi
5336                 ;;
5337         esac
5338         ;;
5339 esac
5340
5341 case "$runnm" in
5342 true)
5343 : get list of predefined functions in a handy place
5344 echo " "
5345 case "$libc" in
5346 '') libc=unknown
5347         case "$libs" in
5348         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5349         esac
5350         ;;
5351 esac
5352 case "$libs" in
5353 '') ;;
5354 *)  for thislib in $libs; do
5355         case "$thislib" in
5356         -lc|-lc_s)
5357                 : Handle C library specially below.
5358                 ;;
5359         -l*)
5360                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5361                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5362                         :
5363                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5364                         :
5365                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5366                         :
5367                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5368                         :
5369                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5370                         :
5371                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5372                         :
5373                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5374                         :
5375                 else
5376                         try=''
5377                 fi
5378                 libnames="$libnames $try"
5379                 ;;
5380         *) libnames="$libnames $thislib" ;;
5381         esac
5382         done
5383         ;;
5384 esac
5385 xxx=normal
5386 case "$libc" in
5387 unknown)
5388         set /lib/libc.$so
5389         for xxx in $libpth; do
5390                 $test -r $1 || set $xxx/libc.$so
5391                 : The messy sed command sorts on library version numbers.
5392                 $test -r $1 || \
5393                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5394                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5395                                 h
5396                                 s/[0-9][0-9]*/0000&/g
5397                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5398                                 G
5399                                 s/\n/ /' | \
5400                          $sort | $sed -e 's/^.* //'`
5401                 eval set \$$#
5402         done
5403         $test -r $1 || set /usr/ccs/lib/libc.$so
5404         $test -r $1 || set /lib/libsys_s$_a
5405         ;;
5406 *)
5407         set blurfl
5408         ;;
5409 esac
5410 if $test -r "$1"; then
5411         echo "Your (shared) C library seems to be in $1."
5412         libc="$1"
5413 elif $test -r /lib/libc && $test -r /lib/clib; then
5414         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5415         xxx=apollo
5416         libc='/lib/clib /lib/libc'
5417         if $test -r /lib/syslib; then
5418                 echo "(Your math library is in /lib/syslib.)"
5419                 libc="$libc /lib/syslib"
5420         fi
5421 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5422         echo "Your C library seems to be in $libc, as you said before."
5423 elif $test -r $incpath/usr/lib/libc$_a; then
5424         libc=$incpath/usr/lib/libc$_a;
5425         echo "Your C library seems to be in $libc.  That's fine."
5426 elif $test -r /lib/libc$_a; then
5427         libc=/lib/libc$_a;
5428         echo "Your C library seems to be in $libc.  You're normal."
5429 else
5430         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5431                 :
5432         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5433                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5434         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5435                 :
5436         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5437                 :
5438         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5439                 :
5440         else
5441                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5442         fi
5443         if $test -r "$tans"; then
5444                 echo "Your C library seems to be in $tans, of all places."
5445                 libc=$tans
5446         else
5447                 libc='blurfl'
5448         fi
5449 fi
5450 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5451         dflt="$libc"
5452         cat <<EOM
5453
5454 If the guess above is wrong (which it might be if you're using a strange
5455 compiler, or your machine supports multiple models), you can override it here.
5456
5457 EOM
5458 else
5459         dflt=''
5460         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5461         cat >&4 <<EOM
5462 I can't seem to find your C library.  I've looked in the following places:
5463
5464 EOM
5465         $sed 's/^/      /' libpath
5466         cat <<EOM
5467
5468 None of these seems to contain your C library. I need to get its name...
5469
5470 EOM
5471 fi
5472 fn=f
5473 rp='Where is your C library?'
5474 . ./getfile
5475 libc="$ans"
5476
5477 echo " "
5478 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5479 set X `cat libnames`
5480 shift
5481 xxx=files
5482 case $# in 1) xxx=file; esac
5483 echo "Extracting names from the following $xxx for later perusal:" >&4
5484 echo " "
5485 $sed 's/^/      /' libnames >&4
5486 echo " "
5487 $echo $n "This may take a while...$c" >&4
5488
5489 for file in $*; do
5490         case $file in
5491         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5492         *) $nm $nm_opt $file 2>/dev/null;;
5493         esac
5494 done >libc.tmp
5495
5496 $echo $n ".$c"
5497 $grep fprintf libc.tmp > libc.ptf
5498 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5499 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5500 xxx='[ADTSIW]'
5501 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5502         eval $xscan;\
5503         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5504                 eval $xrun
5505 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5506         eval $xscan;\
5507         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5508                 eval $xrun
5509 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5510         eval $xscan;\
5511         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5512                 eval $xrun
5513 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5514         eval $xscan;\
5515         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5516                 eval $xrun
5517 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5518         eval $xscan;\
5519         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5520                 eval $xrun
5521 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5522         eval $xscan;\
5523         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5524                 eval $xrun
5525 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5526                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5527         eval $xscan;\
5528         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5529                 eval $xrun
5530 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5531         eval $xscan;\
5532         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5533                 eval $xrun
5534 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5535         eval $xscan;\
5536         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5537                 eval $xrun
5538 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5539         eval $xscan;\
5540         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5541                 eval $xrun
5542 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5543         eval $xscan;\
5544         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5545                 eval $xrun
5546 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5547         eval $xscan;\
5548         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5549                 eval $xrun
5550 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5551         eval $xscan;\
5552         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5553                 eval $xrun
5554 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5555         eval $xscan;\
5556         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5557                 eval $xrun
5558 else
5559         $nm -p $* 2>/dev/null >libc.tmp
5560         $grep fprintf libc.tmp > libc.ptf
5561         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5562                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5563         then
5564                 nm_opt='-p'
5565                 eval $xrun
5566         else
5567                 echo " "
5568                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5569                 com=''
5570                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5571                         for thisname in $libnames $libc; do
5572                                 $ar t $thisname >>libc.tmp
5573                         done
5574                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5575                         echo "Ok." >&4
5576                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5577                         # Repeat libc to extract forwarders to DLL entries too
5578                         for thisname in $libnames $libc; do
5579                                 $ar tv $thisname >>libc.tmp
5580                                 # Revision 50 of EMX has bug in $ar.
5581                                 # it will not extract forwarders to DLL entries
5582                                 # Use emximp which will extract exactly them.
5583                                 emximp -o tmp.imp $thisname \
5584                                     2>/dev/null && \
5585                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5586                                     < tmp.imp >>libc.tmp
5587                                 $rm tmp.imp
5588                         done
5589                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5590                         echo "Ok." >&4
5591                 else
5592                         echo "$ar didn't seem to work right." >&4
5593                         echo "Maybe this is a Cray...trying bld instead..." >&4
5594                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5595                         then
5596                                 for thisname in $libnames; do
5597                                         bld t $libnames | \
5598                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5599                                         $ar t $thisname >>libc.tmp
5600                                 done
5601                                 echo "Ok." >&4
5602                         else
5603                                 echo "That didn't work either.  Giving up." >&4
5604                                 exit 1
5605                         fi
5606                 fi
5607         fi
5608 fi
5609 nm_extract="$com"
5610 if $test -f /lib/syscalls.exp; then
5611         echo " "
5612         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5613         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*[        ]*$/\1/p' /lib/syscalls.exp >>libc.list
5614 fi
5615 ;;
5616 esac
5617 $rm -f libnames libpath
5618
5619 : is a C symbol defined?
5620 csym='tlook=$1;
5621 case "$3" in
5622 -v) tf=libc.tmp; tc=""; tdc="";;
5623 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5624 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5625 esac;
5626 tx=yes;
5627 case "$reuseval-$4" in
5628 true-) ;;
5629 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5630 esac;
5631 case "$tx" in
5632 yes)
5633         case "$runnm" in
5634         true)
5635                 if $contains $tlook $tf >/dev/null 2>&1;
5636                 then tval=true;
5637                 else tval=false;
5638                 fi;;
5639         *)
5640                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5641                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5642                 then tval=true;
5643                 else tval=false;
5644                 fi;
5645                 $rm -f t t.c;;
5646         esac;;
5647 *)
5648         case "$tval" in
5649         $define) tval=true;;
5650         *) tval=false;;
5651         esac;;
5652 esac;
5653 eval "$2=$tval"'
5654
5655 : define an is-in-libc? function
5656 inlibc='echo " "; td=$define; tu=$undef;
5657 sym=$1; var=$2; eval "was=\$$2";
5658 tx=yes;
5659 case "$reuseval$was" in
5660 true) ;;
5661 true*) tx=no;;
5662 esac;
5663 case "$tx" in
5664 yes)
5665         set $sym tres -f;
5666         eval $csym;
5667         case "$tres" in
5668         true)
5669                 echo "$sym() found." >&4;
5670                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5671         *)
5672                 echo "$sym() NOT found." >&4;
5673                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5674         esac;;
5675 *)
5676         case "$was" in
5677         $define) echo "$sym() found." >&4;;
5678         *) echo "$sym() NOT found." >&4;;
5679         esac;;
5680 esac'
5681
5682 : see if sqrtl exists
5683 set sqrtl d_sqrtl
5684 eval $inlibc
5685
5686 case "$ccflags" in
5687 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5688 esac
5689
5690 case "$uselongdouble" in
5691 $define|true|[yY]*)     dflt='y';;
5692 *) dflt='n';;
5693 esac
5694 cat <<EOM
5695
5696 Perl can be built to take advantage of long doubles which
5697 (if available) may give more accuracy and range for floating point numbers.
5698
5699 If this doesn't make any sense to you, just accept the default '$dflt'.
5700 EOM
5701 rp='Try to use long doubles if available?'
5702 . ./myread
5703 case "$ans" in
5704 y|Y)    val="$define"   ;;
5705 *)      val="$undef"    ;;
5706 esac
5707 set uselongdouble
5708 eval $setvar
5709
5710 case "$uselongdouble" in
5711 true|[yY]*) uselongdouble="$define" ;;
5712 esac
5713
5714 case "$uselongdouble" in
5715 $define)
5716 : Look for a hint-file generated 'call-back-unit'.  If the
5717 : user has specified that long doubles should be used,
5718 : we may need to set or change some other defaults.
5719         if $test -f uselongdouble.cbu; then
5720                 echo "Your platform has some specific hints for long doubles, using them..."
5721                 . ./uselongdouble.cbu
5722         else
5723                 $cat <<EOM
5724 (Your platform doesn't have any specific hints for long doubles.)
5725 EOM
5726         fi
5727         ;;
5728 esac
5729
5730 case "$uselongdouble:$d_sqrtl" in
5731 $define:$undef)
5732                 $cat <<EOM >&4
5733
5734 *** You requested the use of long doubles but you do not seem to have
5735 *** the mathematic functions for long doubles.  I'm disabling the use
5736 *** of long doubles.
5737
5738 EOM
5739         uselongdouble=$undef
5740         ;;
5741 esac
5742
5743 : check for length of double
5744 echo " "
5745 case "$doublesize" in
5746 '')
5747         echo "Checking to see how big your double precision numbers are..." >&4
5748         $cat >try.c <<'EOCP'
5749 #include <stdio.h>
5750 int main()
5751 {
5752     printf("%d\n", (int)sizeof(double));
5753     exit(0);
5754 }
5755 EOCP
5756         set try
5757         if eval $compile_ok; then
5758                 doublesize=`$run ./try`
5759                 echo "Your double is $doublesize bytes long."
5760         else
5761                 dflt='8'
5762                 echo "(I can't seem to compile the test program.  Guessing...)"
5763                 rp="What is the size of a double precision number (in bytes)?"
5764                 . ./myread
5765                 doublesize="$ans"
5766         fi
5767         ;;
5768 esac
5769 $rm -f try.c try
5770
5771 : check for long doubles
5772 echo " "
5773 echo "Checking to see if you have long double..." >&4
5774 echo 'int main() { long double x = 7.0; }' > try.c
5775 set try
5776 if eval $compile; then
5777         val="$define"
5778         echo "You have long double."
5779 else
5780         val="$undef"
5781         echo "You do not have long double."
5782 fi
5783 $rm try.*
5784 set d_longdbl
5785 eval $setvar
5786
5787 : check for length of long double
5788 case "${d_longdbl}${longdblsize}" in
5789 $define)
5790         echo " "
5791         echo "Checking to see how big your long doubles are..." >&4
5792         $cat >try.c <<'EOCP'
5793 #include <stdio.h>
5794 int main()
5795 {
5796         printf("%d\n", sizeof(long double));
5797 }
5798 EOCP
5799         set try
5800         set try
5801         if eval $compile; then
5802                 longdblsize=`$run ./try`
5803                 echo "Your long doubles are $longdblsize bytes long."
5804         else
5805                 dflt='8'
5806                 echo " "
5807                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5808                 rp="What is the size of a long double (in bytes)?"
5809                 . ./myread
5810                 longdblsize="$ans"
5811         fi
5812         if $test "X$doublesize" = "X$longdblsize"; then
5813                 echo "(That isn't any different from an ordinary double.)"
5814         fi      
5815         ;;
5816 esac
5817 $rm -f try.* try
5818
5819 case "$useperlio" in
5820 $define|true|[yY]*|'')  dflt='y';;
5821 *) dflt='n';;
5822 esac
5823 cat <<EOM
5824
5825 Previous version of $package used the standard IO mechanisms as
5826 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5827 alternate IO mechanisms via the PerlIO abstraction layer, but the
5828 stdio mechanism is still available if needed.  The abstraction layer
5829 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5830 Using PerlIO with sfio may cause problems with some extension modules.
5831
5832 If this doesn't make any sense to you, just accept the default '$dflt'.
5833 EOM
5834 rp='Use the PerlIO abstraction layer?'
5835 . ./myread
5836 case "$ans" in
5837 y|Y) 
5838         val="$define"
5839         ;;
5840 *)      
5841         echo "Ok, doing things the stdio way."
5842         val="$undef"
5843         ;;
5844 esac
5845 set useperlio
5846 eval $setvar 
5847
5848 case "$usesocks" in
5849 $define|true|[yY]*)
5850         case "$useperlio" in
5851         $define|true|[yY]*) ;;
5852         *)      cat >&4 <<EOM
5853
5854 You are using the SOCKS proxy protocol library which means that you
5855 should also use the PerlIO layer.  You may be headed for trouble.
5856
5857 EOM
5858                 ;;
5859         esac
5860         ;;
5861 esac
5862
5863         
5864 : determine the architecture name
5865 echo " "
5866 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5867         tarch=`arch`"-$osname"
5868 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5869         if uname -m > tmparch 2>&1 ; then
5870                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5871                         -e 's/$/'"-$osname/" tmparch`
5872         else
5873                 tarch="$osname"
5874         fi
5875         $rm -f tmparch
5876 else
5877         tarch="$osname"
5878 fi
5879 case "$myarchname" in
5880 ''|"$tarch") ;;
5881 *)
5882         echo "(Your architecture name used to be $myarchname.)"
5883         archname=''
5884         ;;
5885 esac
5886 case "$targetarch" in
5887 '') ;;
5888 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5889 esac
5890 myarchname="$tarch"
5891 case "$archname" in
5892 '') dflt="$tarch";;
5893 *) dflt="$archname";;
5894 esac
5895 rp='What is your architecture name'
5896 . ./myread
5897 archname="$ans"
5898 case "$usethreads" in
5899 $define)
5900         echo "Threads selected." >&4
5901         case "$archname" in
5902         *-thread*) echo "...and architecture name already has -thread." >&4
5903                 ;;
5904         *)      archname="$archname-thread"
5905                 echo "...setting architecture name to $archname." >&4
5906                 ;;
5907         esac
5908         ;;
5909 esac
5910 case "$usemultiplicity" in
5911 $define)
5912         echo "Multiplicity selected." >&4
5913         case "$archname" in
5914         *-multi*) echo "...and architecture name already has -multi." >&4
5915                 ;;
5916         *)      archname="$archname-multi"
5917                 echo "...setting architecture name to $archname." >&4
5918                 ;;
5919         esac
5920         ;;
5921 esac
5922 case "$use64bitint$use64bitall" in
5923 *"$define"*)
5924         case "$archname64" in
5925         '')
5926                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5927                 ;;
5928         *)
5929                 case "$use64bitint" in
5930                 "$define") echo "64 bit integers selected." >&4 ;;
5931                 esac
5932                 case "$use64bitall" in
5933                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5934                 esac
5935                 case "$archname" in
5936                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5937                         ;;
5938                 *)      archname="$archname-$archname64"
5939                         echo "...setting architecture name to $archname." >&4
5940                         ;;
5941                 esac
5942                 ;;
5943         esac
5944 esac
5945 case "$uselongdouble" in
5946 $define)
5947         echo "Long doubles selected." >&4
5948         case "$longdblsize" in
5949         $doublesize)
5950                 echo "...but long doubles are equal to doubles, not changing architecture name." >&4
5951                 ;;
5952         *)
5953                 case "$archname" in
5954                 *-ld*) echo "...and architecture name already has -ld." >&4
5955                         ;;
5956                 *)      archname="$archname-ld"
5957                         echo "...setting architecture name to $archname." >&4
5958                         ;;
5959                 esac
5960                 ;;
5961         esac
5962         ;;
5963 esac
5964 case "$useperlio" in
5965 $define)
5966         echo "Perlio selected." >&4
5967         ;;
5968 *)
5969         echo "Perlio not selected, using stdio." >&4
5970         case "$archname" in
5971         *-stdio*) echo "...and architecture name already has -stdio." >&4
5972                 ;;
5973         *)      archname="$archname-stdio"
5974                 echo "...setting architecture name to $archname." >&4
5975                 ;;
5976         esac
5977         ;;
5978 esac
5979
5980 : determine root of directory hierarchy where package will be installed.
5981 case "$prefix" in
5982 '')
5983         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5984         ;;
5985 *)
5986         dflt="$prefix"
5987         ;;
5988 esac
5989 $cat <<EOM
5990
5991 By default, $package will be installed in $dflt/bin, manual pages
5992 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5993 installation directories. Typically this is something like /usr/local.
5994 If you wish to have binaries under /usr/bin but other parts of the
5995 installation under /usr/local, that's ok: you will be prompted
5996 separately for each of the installation directories, the prefix being
5997 only used to set the defaults.
5998
5999 EOM
6000 fn=d~
6001 rp='Installation prefix to use?'
6002 . ./getfile
6003 oldprefix=''
6004 case "$prefix" in
6005 '') ;;
6006 *)
6007         case "$ans" in
6008         "$prefix") ;;
6009         *) oldprefix="$prefix";;
6010         esac
6011         ;;
6012 esac
6013 prefix="$ans"
6014 prefixexp="$ansexp"
6015
6016 case "$afsroot" in
6017 '')     afsroot=/afs ;;
6018 *)      afsroot=$afsroot ;;
6019 esac
6020
6021 : is AFS running?
6022 echo " "
6023 case "$afs" in
6024 $define|true)   afs=true ;;
6025 $undef|false)   afs=false ;;
6026 *)      if test -d $afsroot; then
6027                 afs=true
6028         else
6029                 afs=false
6030         fi
6031         ;;
6032 esac
6033 if $afs; then
6034         echo "AFS may be running... I'll be extra cautious then..." >&4
6035 else
6036         echo "AFS does not seem to be running..." >&4
6037 fi
6038
6039 : determine installation prefix for where package is to be installed.
6040 if $afs; then 
6041 $cat <<EOM
6042
6043 Since you are running AFS, I need to distinguish the directory in which
6044 files will reside from the directory in which they are installed (and from
6045 which they are presumably copied to the former directory by occult means).
6046
6047 EOM
6048         case "$installprefix" in
6049         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6050         *) dflt="$installprefix";;
6051         esac
6052 else
6053 $cat <<EOM
6054
6055 In some special cases, particularly when building $package for distribution,
6056 it is convenient to distinguish between the directory in which files should 
6057 be installed from the directory ($prefix) in which they 
6058 will eventually reside.  For most users, these two directories are the same.
6059
6060 EOM
6061         case "$installprefix" in
6062         '') dflt=$prefix ;;
6063         *) dflt=$installprefix;;
6064         esac
6065 fi
6066 fn=d~
6067 rp='What installation prefix should I use for installing files?'
6068 . ./getfile
6069 installprefix="$ans"
6070 installprefixexp="$ansexp"
6071
6072 : set the prefixit variable, to compute a suitable default value
6073 prefixit='case "$3" in
6074 ""|none)
6075         case "$oldprefix" in
6076         "") eval "$1=\"\$$2\"";;
6077         *)
6078                 case "$3" in
6079                 "") eval "$1=";;
6080                 none)
6081                         eval "tp=\"\$$2\"";
6082                         case "$tp" in
6083                         ""|" ") eval "$1=\"\$$2\"";;
6084                         *) eval "$1=";;
6085                         esac;;
6086                 esac;;
6087         esac;;
6088 *)
6089         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6090         case "$tp" in
6091         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6092         /*-$oldprefix/*|\~*-$oldprefix/*)
6093                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6094         *) eval "$1=\"\$$2\"";;
6095         esac;;
6096 esac'
6097
6098 : get the patchlevel
6099 echo " "
6100 echo "Getting the current patchlevel..." >&4
6101 if $test -r $rsrc/patchlevel.h;then
6102         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6103         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6104         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6105         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6106         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6107         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6108        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6109 else
6110         revision=0
6111         patchlevel=0
6112         subversion=0
6113         api_revision=0
6114         api_version=0
6115         api_subversion=0
6116         perl_patchlevel=0
6117         $echo "(You do not have patchlevel.h.  Eek.)"
6118 fi
6119 if $test -r $rsrc/.patch ; then  
6120         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6121                 perl_patchlevel=`cat $rsrc/.patch`
6122         fi
6123 fi
6124 : Define a handy string here to avoid duplication in myconfig.SH and configpm.
6125 version_patchlevel_string="version $patchlevel subversion $subversion"
6126 case "$perl_patchlevel" in
6127 0|'') ;;
6128 *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;;
6129 esac
6130
6131 $echo "(You have $package $version_patchlevel_string.)"
6132
6133 case "$osname" in
6134 dos|vms)
6135         : XXX Should be a Configure test for double-dots in filenames.
6136         version=`echo $revision $patchlevel $subversion | \
6137                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6138         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6139                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6140         ;;
6141 *)
6142         version=`echo $revision $patchlevel $subversion | \
6143                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6144         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6145                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6146         ;;
6147 esac
6148 : Special case the 5.005_xx maintenance series, which used 5.005
6149 : without any subversion label as a subdirectory in $sitelib
6150 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6151         api_versionstring='5.005'
6152 fi
6153
6154 : determine installation style
6155 : For now, try to deduce it from prefix unless it is already set.
6156 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6157 case "$installstyle" in
6158 '')     case "$prefix" in
6159                 *perl*) dflt='lib';;
6160                 *) dflt='lib/perl5' ;;
6161         esac
6162         ;;
6163 *)      dflt="$installstyle" ;;
6164 esac
6165 : Probably not worth prompting for this since we prompt for all
6166 : the directories individually, and the prompt would be too long and
6167 : confusing anyway.
6168 installstyle=$dflt
6169
6170 : determine where private library files go
6171 : Usual default is /usr/local/lib/perl5/$version.
6172 : Also allow things like /opt/perl/lib/$version, since 
6173 : /opt/perl/lib/perl5... would be redundant.
6174 : The default "style" setting is made in installstyle.U
6175 case "$installstyle" in
6176 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6177 *)       set dflt privlib lib/$version ;;
6178 esac
6179 eval $prefixit
6180 $cat <<EOM
6181
6182 There are some auxiliary files for $package that need to be put into a
6183 private library directory that is accessible by everyone.
6184
6185 EOM
6186 fn=d~+
6187 rp='Pathname where the private library files will reside?'
6188 . ./getfile
6189 privlib="$ans"
6190 privlibexp="$ansexp"
6191 : Change installation prefix, if necessary.
6192 if $test X"$prefix" != X"$installprefix"; then
6193         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6194 else
6195         installprivlib="$privlibexp"
6196 fi
6197
6198 : set the prefixup variable, to restore leading tilda escape
6199 prefixup='case "$prefixexp" in
6200 "$prefix") ;;
6201 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6202 esac'
6203
6204 : determine where public architecture dependent libraries go
6205 set archlib archlib
6206 eval $prefixit
6207 : privlib default is /usr/local/lib/$package/$version
6208 : archlib default is /usr/local/lib/$package/$version/$archname
6209 : privlib may have an optional trailing /share.
6210 tdflt=`echo $privlib | $sed 's,/share$,,'`
6211 tdflt=$tdflt/$archname
6212 case "$archlib" in
6213 '')     dflt=$tdflt
6214         ;;
6215 *)      dflt="$archlib"
6216     ;;
6217 esac
6218 $cat <<EOM
6219
6220 $spackage contains architecture-dependent library files.  If you are
6221 sharing libraries in a heterogeneous environment, you might store
6222 these files in a separate location.  Otherwise, you can just include
6223 them with the rest of the public library files.
6224
6225 EOM
6226 fn=d+~
6227 rp='Where do you want to put the public architecture-dependent libraries?'
6228 . ./getfile
6229 archlib="$ans"
6230 archlibexp="$ansexp"
6231 if $test X"$archlib" = X"$privlib"; then
6232         d_archlib="$undef"
6233 else
6234         d_archlib="$define"
6235 fi
6236 : Change installation prefix, if necessary.
6237 if $test X"$prefix" != X"$installprefix"; then
6238         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6239 else
6240         installarchlib="$archlibexp"
6241 fi
6242
6243
6244 : Binary compatibility with 5.005 is not possible for builds
6245 : with advanced features
6246 case "$usethreads$usemultiplicity" in
6247 *define*)
6248         bincompat5005="$undef"
6249         d_bincompat5005="$undef"
6250         ;;
6251 *)      $cat <<EOM
6252
6253 This version of Perl can be compiled for binary compatibility with 5.005.
6254 If you decide to do so, you will be able to continue using most of the
6255 extensions that were compiled for Perl 5.005.
6256
6257 EOM
6258         case "$bincompat5005$d_bincompat5005" in
6259         *"$undef"*) dflt=n ;;
6260         *) dflt=y ;;
6261         esac
6262         rp='Binary compatibility with Perl 5.005?'
6263         . ./myread
6264         case "$ans" in
6265         y*) val="$define" ;;
6266         *)  val="$undef" ;;
6267         esac
6268         set d_bincompat5005
6269         eval $setvar
6270         case "$d_bincompat5005" in
6271         "$define")
6272                 bincompat5005="$define"
6273                 ;;
6274         *)      bincompat5005="$undef"
6275                 d_bincompat5005="$undef"
6276                 ;;
6277         esac
6278         ;;
6279 esac
6280
6281
6282 : see if setuid scripts can be secure
6283 $cat <<EOM
6284
6285 Some kernels have a bug that prevents setuid #! scripts from being
6286 secure.  Some sites have disabled setuid #! scripts because of this.
6287
6288 First let's decide if your kernel supports secure setuid #! scripts.
6289 (If setuid #! scripts would be secure but have been disabled anyway,
6290 don't say that they are secure if asked.)
6291
6292 EOM
6293
6294 val="$undef"
6295 if $test -d /dev/fd; then
6296         echo "#!$ls" >reflect
6297         chmod +x,u+s reflect
6298         ./reflect >flect 2>&1
6299         if $contains "/dev/fd" flect >/dev/null; then
6300                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6301                 val="$define"
6302         else
6303                 $cat <<EOM
6304 If you are not sure if they are secure, I can check but I'll need a
6305 username and password different from the one you are using right now.
6306 If you don't have such a username or don't want me to test, simply
6307 enter 'none'.
6308
6309 EOM
6310                 rp='Other username to test security of setuid scripts with?'
6311                 dflt='none'
6312                 . ./myread
6313                 case "$ans" in
6314                 n|none)
6315                         case "$d_suidsafe" in
6316                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6317                                 dflt=n;;
6318                         "$undef")
6319                                 echo "Well, the $hint value is *not* secure." >&4
6320                                 dflt=n;;
6321                         *)      echo "Well, the $hint value *is* secure." >&4
6322                                 dflt=y;;
6323                         esac
6324                         ;;
6325                 *)
6326                         $rm -f reflect flect
6327                         echo "#!$ls" >reflect
6328                         chmod +x,u+s reflect
6329                         echo >flect
6330                         chmod a+w flect
6331                         echo '"su" will (probably) prompt you for '"$ans's password."
6332                         su $ans -c './reflect >flect'
6333                         if $contains "/dev/fd" flect >/dev/null; then
6334                                 echo "Okay, it looks like setuid scripts are secure." >&4
6335                                 dflt=y
6336                         else
6337                                 echo "I don't think setuid scripts are secure." >&4
6338                                 dflt=n
6339                         fi
6340                         ;;
6341                 esac
6342                 rp='Does your kernel have *secure* setuid scripts?'
6343                 . ./myread
6344                 case "$ans" in
6345                 [yY]*)  val="$define";;
6346                 *)      val="$undef";;
6347                 esac
6348         fi
6349 else
6350         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6351         echo "(That's for file descriptors, not floppy disks.)"
6352         val="$undef"
6353 fi
6354 set d_suidsafe
6355 eval $setvar
6356
6357 $rm -f reflect flect
6358
6359 : now see if they want to do setuid emulation
6360 echo " "
6361 val="$undef"
6362 case "$d_suidsafe" in
6363 "$define")
6364         val="$undef"
6365         echo "No need to emulate SUID scripts since they are secure here." >& 4
6366         ;;
6367 *)
6368         $cat <<EOM
6369 Some systems have disabled setuid scripts, especially systems where
6370 setuid scripts cannot be secure.  On systems where setuid scripts have
6371 been disabled, the setuid/setgid bits on scripts are currently
6372 useless.  It is possible for $package to detect those bits and emulate
6373 setuid/setgid in a secure fashion.  This emulation will only work if
6374 setuid scripts have been disabled in your kernel.
6375
6376 EOM
6377         case "$d_dosuid" in
6378         "$define") dflt=y ;;
6379         *) dflt=n ;;
6380         esac
6381         rp="Do you want to do setuid/setgid emulation?"
6382         . ./myread
6383         case "$ans" in
6384         [yY]*)  val="$define";;
6385         *)      val="$undef";;
6386         esac
6387         ;;
6388 esac
6389 set d_dosuid
6390 eval $setvar
6391
6392 : see if this is a malloc.h system
6393 set malloc.h i_malloc
6394 eval $inhdr
6395
6396 : see if stdlib is available
6397 set stdlib.h i_stdlib
6398 eval $inhdr
6399
6400 : determine which malloc to compile in
6401 echo " "
6402 case "$usemymalloc" in
6403 [yY]*|true|$define)     dflt='y' ;;
6404 [nN]*|false|$undef)     dflt='n' ;;
6405 *)      case "$ptrsize" in
6406         4) dflt='y' ;;
6407         *) dflt='n' ;;
6408         esac
6409         ;;
6410 esac
6411 rp="Do you wish to attempt to use the malloc that comes with $package?"
6412 . ./myread
6413 usemymalloc="$ans"
6414 case "$ans" in
6415 y*|true)
6416         usemymalloc='y'
6417         mallocsrc='malloc.c'
6418         mallocobj="malloc$_o"
6419         d_mymalloc="$define"
6420         case "$libs" in
6421         *-lmalloc*)
6422                 : Remove malloc from list of libraries to use
6423                 echo "Removing unneeded -lmalloc from library list" >&4
6424                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6425                 shift
6426                 libs="$*"
6427                 echo "libs = $libs" >&4
6428                 ;;
6429         esac
6430         ;;
6431 *)
6432         usemymalloc='n'
6433         mallocsrc=''
6434         mallocobj=''
6435         d_mymalloc="$undef"
6436         ;;
6437 esac
6438
6439 : compute the return types of malloc and free
6440 echo " "
6441 $cat >malloc.c <<END
6442 #$i_malloc I_MALLOC
6443 #$i_stdlib I_STDLIB
6444 #include <stdio.h>
6445 #include <sys/types.h>
6446 #ifdef I_MALLOC
6447 #include <malloc.h>
6448 #endif
6449 #ifdef I_STDLIB
6450 #include <stdlib.h>
6451 #endif
6452 #ifdef TRY_MALLOC
6453 void *malloc();
6454 #endif
6455 #ifdef TRY_FREE
6456 void free();
6457 #endif
6458 END
6459 case "$malloctype" in
6460 '')
6461         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6462                 malloctype='void *'
6463         else
6464                 malloctype='char *'
6465         fi
6466         ;;
6467 esac
6468 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6469
6470 case "$freetype" in
6471 '')
6472         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6473                 freetype='void'
6474         else
6475                 freetype='int'
6476         fi
6477         ;;
6478 esac
6479 echo "Your system uses $freetype free(), it would seem." >&4
6480 $rm -f malloc.[co]
6481 $cat <<EOM
6482
6483 After $package is installed, you may wish to install various
6484 add-on modules and utilities.  Typically, these add-ons will
6485 be installed under $prefix with the rest
6486 of this package.  However, you may wish to install such add-ons
6487 elsewhere under a different prefix.
6488
6489 If you do not wish to put everything under a single prefix, that's
6490 ok.  You will be prompted for the individual locations; this siteprefix
6491 is only used to suggest the defaults.
6492
6493 The default should be fine for most people.
6494
6495 EOM
6496 fn=d~+
6497 rp='Installation prefix to use for add-on modules and utilities?'
6498 : XXX Here might be another good place for an installstyle setting.
6499 case "$siteprefix" in
6500 '') dflt=$prefix ;;
6501 *)  dflt=$siteprefix ;;
6502 esac
6503 . ./getfile
6504 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6505 oldsiteprefix=''
6506 case "$siteprefix" in
6507 '') ;;
6508 *)      case "$ans" in
6509         "$prefix") ;;
6510         *) oldsiteprefix="$prefix";;
6511         esac
6512         ;;
6513 esac
6514 siteprefix="$ans"
6515 siteprefixexp="$ansexp"
6516
6517 : determine where site specific libraries go.
6518 : Usual default is /usr/local/lib/perl5/site_perl/$version
6519 : The default "style" setting is made in installstyle.U
6520 : XXX No longer works with Prefixit stuff.
6521 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6522 case "$sitelib" in
6523 '') case "$installstyle" in
6524         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6525         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6526         esac
6527         ;;
6528 *)      dflt="$sitelib"
6529         ;;
6530 esac
6531 $cat <<EOM
6532
6533 The installation process will create a directory for
6534 site-specific extensions and modules.  Most users find it convenient
6535 to place all site-specific files in this directory rather than in the
6536 main distribution directory.
6537
6538 EOM
6539 fn=d~+
6540 rp='Pathname for the site-specific library files?'
6541 . ./getfile
6542 sitelib="$ans"
6543 sitelibexp="$ansexp"
6544 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6545 : Change installation prefix, if necessary.
6546 if $test X"$prefix" != X"$installprefix"; then
6547         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6548 else
6549         installsitelib="$sitelibexp"
6550 fi
6551
6552 : determine where site specific architecture-dependent libraries go.
6553 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6554 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6555 : sitelib may have an optional trailing /share.
6556 case "$sitearch" in
6557 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6558         dflt="$dflt/$archname"
6559         ;;
6560 *)      dflt="$sitearch"
6561         ;;
6562 esac
6563 set sitearch sitearch none
6564 eval $prefixit
6565 $cat <<EOM
6566
6567 The installation process will also create a directory for
6568 architecture-dependent site-specific extensions and modules.
6569
6570 EOM
6571 fn=d~+
6572 rp='Pathname for the site-specific architecture-dependent library files?'
6573 . ./getfile
6574 sitearch="$ans"
6575 sitearchexp="$ansexp"
6576 : Change installation prefix, if necessary.
6577 if $test X"$prefix" != X"$installprefix"; then
6578         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6579 else
6580         installsitearch="$sitearchexp"
6581 fi
6582
6583 $cat <<EOM
6584
6585 The installation process will also create a directory for
6586 vendor-supplied add-ons.  Vendors who supply perl with their system
6587 may find it convenient to place all vendor-supplied files in this
6588 directory rather than in the main distribution directory.  This will
6589 ease upgrades between binary-compatible maintenance versions of perl.
6590
6591 Of course you may also use these directories in whatever way you see
6592 fit.  For example, you might use them to access modules shared over a
6593 company-wide network.
6594
6595 The default answer should be fine for most people.
6596 This causes further questions about vendor add-ons to be skipped
6597 and no vendor-specific directories will be configured for perl.
6598
6599 EOM
6600 rp='Do you want to configure vendor-specific add-on directories?'
6601 case "$usevendorprefix" in
6602 define|true|[yY]*) dflt=y ;;
6603 *)      : User may have set vendorprefix directly on Configure command line.
6604         case "$vendorprefix" in
6605         ''|' ') dflt=n ;;
6606         *)      dflt=y ;;
6607         esac
6608         ;;
6609 esac
6610 . ./myread
6611 case "$ans" in
6612 [yY]*)  fn=d~+
6613         rp='Installation prefix to use for vendor-supplied add-ons?'
6614         case "$vendorprefix" in
6615         '') dflt='' ;;
6616         *)  dflt=$vendorprefix ;;
6617         esac
6618         . ./getfile
6619         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6620         oldvendorprefix=''
6621         case "$vendorprefix" in
6622         '') ;;
6623         *)      case "$ans" in
6624                 "$prefix") ;;
6625                 *) oldvendorprefix="$prefix";;
6626                 esac
6627                 ;;
6628         esac
6629         usevendorprefix="$define"
6630         vendorprefix="$ans"
6631         vendorprefixexp="$ansexp"
6632         ;;
6633 *)      usevendorprefix="$undef"
6634         vendorprefix=''
6635         vendorprefixexp=''
6636         ;;
6637 esac
6638
6639 case "$vendorprefix" in
6640 '')     d_vendorlib="$undef"
6641         vendorlib=''
6642         vendorlibexp=''
6643         ;;
6644 *)      d_vendorlib="$define"
6645         : determine where vendor-supplied modules go.
6646         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6647         case "$vendorlib" in
6648         '')
6649                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6650                 case "$installstyle" in
6651                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6652                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6653                 esac
6654                 ;;
6655         *)      dflt="$vendorlib"
6656                 ;;
6657         esac
6658         fn=d~+
6659         rp='Pathname for the vendor-supplied library files?'
6660         . ./getfile
6661         vendorlib="$ans"
6662         vendorlibexp="$ansexp"
6663         ;;
6664 esac
6665 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6666 : Change installation prefix, if necessary.
6667 if $test X"$prefix" != X"$installprefix"; then
6668         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6669 else
6670         installvendorlib="$vendorlibexp"
6671 fi
6672
6673 case "$vendorprefix" in
6674 '')     d_vendorarch="$undef"
6675         vendorarch=''
6676         vendorarchexp=''
6677         ;;
6678 *)      d_vendorarch="$define"
6679         : determine where vendor-supplied architecture-dependent libraries go.
6680         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6681         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6682         : vendorlib may have an optional trailing /share.
6683         case "$vendorarch" in
6684         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6685                 dflt="$dflt/$archname"
6686                 ;;
6687         *)      dflt="$vendorarch" ;;
6688         esac
6689         fn=d~+
6690         rp='Pathname for vendor-supplied architecture-dependent files?'
6691         . ./getfile
6692         vendorarch="$ans"
6693         vendorarchexp="$ansexp"
6694         ;;
6695 esac
6696 : Change installation prefix, if necessary.
6697 if $test X"$prefix" != X"$installprefix"; then
6698         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6699 else
6700         installvendorarch="$vendorarchexp"
6701 fi
6702
6703 : Final catch-all directories to search
6704 $cat <<EOM
6705
6706 Lastly, you can have perl look in other directories for extensions and
6707 modules in addition to those already specified.
6708 These directories will be searched after 
6709         $sitearch 
6710         $sitelib 
6711 EOM
6712 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6713 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6714 echo ' '
6715 case "$otherlibdirs" in
6716 ''|' ') dflt='none' ;;
6717 *)      dflt="$otherlibdirs" ;;
6718 esac
6719 $cat <<EOM
6720 Enter a colon-separated set of extra paths to include in perl's @INC
6721 search path, or enter 'none' for no extra paths.
6722
6723 EOM
6724
6725 rp='Colon-separated list of additional directories for perl to search?'
6726 . ./myread
6727 case "$ans" in
6728 ' '|''|none)    otherlibdirs=' ' ;;     
6729 *)      otherlibdirs="$ans" ;;
6730 esac
6731 case "$otherlibdirs" in
6732 ' ') val=$undef ;;
6733 *)      val=$define ;;
6734 esac
6735 set d_perl_otherlibdirs
6736 eval $setvar
6737
6738 : Cruising for prototypes
6739 echo " "
6740 echo "Checking out function prototypes..." >&4
6741 $cat >prototype.c <<'EOCP'
6742 int main(int argc, char *argv[]) {
6743         exit(0);}
6744 EOCP
6745 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6746         echo "Your C compiler appears to support function prototypes."
6747         val="$define"
6748 else
6749         echo "Your C compiler doesn't seem to understand function prototypes."
6750         val="$undef"
6751 fi
6752 set prototype
6753 eval $setvar
6754 $rm -f prototype*
6755
6756 case "$prototype" in
6757 "$define") ;;
6758 *)      ansi2knr='ansi2knr'
6759         echo " "
6760         cat <<EOM >&4
6761
6762 $me:  FATAL ERROR:
6763 This version of $package can only be compiled by a compiler that 
6764 understands function prototypes.  Unfortunately, your C compiler 
6765         $cc $ccflags
6766 doesn't seem to understand them.  Sorry about that.
6767
6768 If GNU cc is available for your system, perhaps you could try that instead.  
6769
6770 Eventually, we hope to support building Perl with pre-ANSI compilers.
6771 If you would like to help in that effort, please contact <perlbug@perl.org>.
6772
6773 Aborting Configure now.
6774 EOM
6775         exit 2
6776         ;;
6777 esac
6778
6779 : determine where public executables go
6780 echo " "
6781 set dflt bin bin
6782 eval $prefixit
6783 fn=d~
6784 rp='Pathname where the public executables will reside?'
6785 . ./getfile
6786 if $test "X$ansexp" != "X$binexp"; then
6787         installbin=''
6788 fi
6789 bin="$ans"
6790 binexp="$ansexp"
6791 : Change installation prefix, if necessary.
6792 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6793 if $test X"$prefix" != X"$installprefix"; then
6794         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6795 else
6796         installbin="$binexp"
6797 fi
6798
6799 echo " "
6800 case "$extras" in
6801 '') dflt='n';;
6802 *) dflt='y';;
6803 esac
6804 cat <<EOM
6805 Perl can be built with extra modules or bundles of modules which
6806 will be fetched from the CPAN and installed alongside Perl.
6807
6808 Notice that you will need access to the CPAN; either via the Internet,
6809 or a local copy, for example a CD-ROM or a local CPAN mirror.  (You will
6810 be asked later to configure the CPAN.pm module which will in turn do
6811 the installation of the rest of the extra modules or bundles.)
6812
6813 Notice also that if the modules require any external software such as
6814 libraries and headers (the libz library and the zlib.h header for the
6815 Compress::Zlib module, for example) you MUST have any such software
6816 already installed, this configuration process will NOT install such
6817 things for you.
6818
6819 If this doesn't make any sense to you, just accept the default '$dflt'.
6820 EOM
6821 rp='Install any extra modules (y or n)?'
6822 . ./myread
6823 case "$ans" in
6824 y|Y)
6825         cat <<EOM
6826
6827 Please list any extra modules or bundles to be installed from CPAN,
6828 with spaces between the names.  The names can be in any format the
6829 'install' command of CPAN.pm will understand.  (Answer 'none',
6830 without the quotes, to install no extra modules or bundles.)
6831 EOM
6832         rp='Extras?'
6833         dflt="$extras"
6834         . ./myread
6835         extras="$ans"
6836 esac
6837 case "$extras" in
6838 ''|'none')
6839         val=''
6840         $rm -f ../extras.lst
6841         ;;
6842 *)      echo "(Saving the list of extras for later...)"
6843         echo "$extras" > ../extras.lst
6844         val="'$extras'"
6845         ;;
6846 esac
6847 set extras
6848 eval $setvar
6849 echo " "
6850
6851 : Find perl5.005 or later.
6852 echo "Looking for a previously installed perl5.005 or later... "
6853 case "$perl5" in
6854 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6855                 : Check if this perl is recent and can load a simple module
6856                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6857                         perl5=$tdir/perl
6858                         break;
6859                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6860                         perl5=$tdir/perl5
6861                         break;
6862                 fi
6863         done
6864         ;;
6865 *)      perl5="$perl5"
6866         ;;
6867 esac
6868 case "$perl5" in
6869 '')     echo "None found.  That's ok.";;
6870 *)      echo "Using $perl5." ;;
6871 esac
6872
6873 : Determine list of previous versions to include in @INC
6874 $cat > getverlist <<EOPL
6875 #!$perl5 -w
6876 use File::Basename;
6877 \$api_versionstring = "$api_versionstring";
6878 \$version = "$version";
6879 \$stem = "$sitelib_stem";
6880 \$archname = "$archname";
6881 EOPL
6882         $cat >> getverlist <<'EOPL'
6883 # Can't have leading @ because metaconfig interprets it as a command!
6884 ;@inc_version_list=();
6885 # XXX Redo to do opendir/readdir? 
6886 if (-d $stem) {
6887     chdir($stem);
6888     ;@candidates = glob("5.*");
6889 }
6890 else {
6891     ;@candidates = ();
6892 }
6893
6894 # XXX ToDo:  These comparisons must be reworked when two-digit
6895 # subversions come along, so that 5.7.10 compares as greater than
6896 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6897 # widespread that we can use the built-in version vectors rather
6898 # than reinventing them here.  For 5.6.0, however, we must
6899 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6900 foreach $d (@candidates) {
6901     if ($d lt $version) {
6902         if ($d ge $api_versionstring) {
6903             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6904         }
6905         elsif ($d ge "5.005") {
6906             unshift(@inc_version_list, grep { -d } $d);
6907         }
6908     }
6909     else {
6910         # Skip newer version.  I.e. don't look in
6911         # 5.7.0 if we're installing 5.6.1.
6912     }
6913 }
6914
6915 if (@inc_version_list) {
6916     print join(' ', @inc_version_list);
6917 }
6918 else {
6919     # Blank space to preserve value for next Configure run.
6920     print " ";
6921 }
6922 EOPL
6923 chmod +x getverlist
6924 case "$inc_version_list" in
6925 '')     if test -x "$perl5$exe_ext"; then
6926                 dflt=`$perl5 getverlist`
6927         else
6928                 dflt='none'
6929         fi
6930         ;;
6931 $undef) dflt='none' ;;
6932 *)  eval dflt=\"$inc_version_list\" ;;
6933 esac
6934 case "$dflt" in
6935 ''|' ') dflt=none ;;
6936 esac
6937 case "$dflt" in
6938 5.005) case "$bincompat5005" in
6939        $define|true|[yY]*) ;;
6940        *) dflt=none ;;
6941        esac
6942        ;;
6943 esac
6944 $cat <<'EOM'
6945
6946 In order to ease the process of upgrading, this version of perl 
6947 can be configured to use modules built and installed with earlier 
6948 versions of perl that were installed under $prefix.  Specify here
6949 the list of earlier versions that this version of perl should check.
6950 If Configure detected no earlier versions of perl installed under
6951 $prefix, then the list will be empty.  Answer 'none' to tell perl
6952 to not search earlier versions.
6953
6954 The default should almost always be sensible, so if you're not sure,
6955 just accept the default.
6956 EOM
6957
6958 rp='List of earlier versions to include in @INC?'
6959 . ./myread
6960 case "$ans" in
6961 [Nn]one|''|' ') inc_version_list=' ' ;;
6962 *) inc_version_list="$ans" ;;
6963 esac
6964 case "$inc_version_list" in
6965 ''|' ') 
6966         inc_version_list_init='0';;
6967 *)      inc_version_list_init=`echo $inc_version_list |
6968                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6969         ;;
6970 esac
6971 $rm -f getverlist
6972
6973 : determine whether to install perl also as /usr/bin/perl
6974
6975 echo " "
6976 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6977         $cat <<EOM
6978 Many scripts expect perl to be installed as /usr/bin/perl.
6979 I can install the perl you are about to compile also as /usr/bin/perl
6980 (in addition to $installbin/perl).
6981 EOM
6982         case "$installusrbinperl" in
6983         "$undef"|[nN]*) dflt='n';;
6984         *)              dflt='y';;
6985         esac
6986         rp="Do you want to install perl as /usr/bin/perl?"
6987         . ./myread
6988         case "$ans" in
6989         [yY]*)  val="$define";;
6990         *)      val="$undef" ;;
6991         esac
6992 else
6993         val="$undef"
6994 fi
6995 set installusrbinperl
6996 eval $setvar
6997
6998 : see if dld is available
6999 set dld.h i_dld
7000 eval $inhdr
7001
7002 : see if dlopen exists
7003 xxx_runnm="$runnm"
7004 runnm=false
7005 set dlopen d_dlopen
7006 eval $inlibc
7007 runnm="$xxx_runnm"
7008
7009 : determine which dynamic loading, if any, to compile in
7010 echo " "
7011 dldir="ext/DynaLoader"
7012 case "$usedl" in
7013 $define|y|true)
7014         dflt='y'
7015         usedl="$define"
7016         ;;
7017 $undef|n|false)
7018         dflt='n'
7019         usedl="$undef"
7020         ;;
7021 *) 
7022         dflt='n'
7023         case "$d_dlopen" in
7024             $define) dflt='y' ;;
7025         esac
7026         case "$i_dld" in
7027             $define) dflt='y' ;;
7028         esac
7029         : Does a dl_xxx.xs file exist for this operating system
7030         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7031         ;;
7032 esac
7033 rp="Do you wish to use dynamic loading?"
7034 . ./myread
7035 usedl="$ans"
7036 case "$ans" in
7037 y*) usedl="$define"
7038         case "$dlsrc" in
7039         '')
7040                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7041                         dflt="$dldir/dl_${osname}.xs"
7042                 elif $test "$d_dlopen" = "$define" ; then
7043                         dflt="$dldir/dl_dlopen.xs"
7044                 elif $test "$i_dld" = "$define" ; then
7045                         dflt="$dldir/dl_dld.xs"
7046                 else
7047                         dflt=''
7048                 fi
7049                 ;;
7050         *)      dflt="$dldir/$dlsrc"
7051                 ;;
7052         esac
7053     echo "The following dynamic loading files are available:"
7054         : Can not go over to $dldir because getfile has path hard-coded in.
7055         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7056         rp="Source file to use for dynamic loading"
7057         fn="fne"
7058         gfpth="$src"
7059         . ./getfile
7060         usedl="$define"
7061         : emulate basename
7062         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7063
7064         $cat << EOM
7065
7066 Some systems may require passing special flags to $cc -c to
7067 compile modules that will be used to create a shared library.
7068 To use no flags, say "none".
7069
7070 EOM
7071     case "$cccdlflags" in
7072     '') case "$gccversion" in
7073                 '') case "$osname" in
7074                         hpux)   dflt='+z' ;;
7075                         next)   dflt='none' ;;
7076                         irix*)  dflt='-KPIC' ;;
7077                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7078                         sunos)  dflt='-pic' ;;
7079                         *)      dflt='none' ;;
7080                     esac
7081                         ;;
7082                 *)  case "$osname" in
7083                         darwin) dflt='none' ;;
7084                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7085                         *)      dflt='-fpic' ;;
7086                     esac ;;
7087             esac ;;
7088         ' ') dflt='none' ;;
7089     *)  dflt="$cccdlflags" ;;
7090     esac
7091     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7092     . ./myread
7093     case "$ans" in
7094     none) cccdlflags=' ' ;;
7095     *) cccdlflags="$ans" ;;
7096     esac
7097
7098     cat << EOM
7099
7100 Some systems use ld to create libraries that can be dynamically loaded,
7101 while other systems (such as those using ELF) use $cc.
7102
7103 EOM
7104         case "$ld" in
7105         '')     $cat >try.c <<'EOM'
7106 /* Test for whether ELF binaries are produced */
7107 #include <fcntl.h>
7108 #include <stdlib.h>
7109 int main() {
7110         char b[4];
7111         int i = open("a.out",O_RDONLY);
7112         if(i == -1) 
7113                 exit(1); /* fail */
7114         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7115                 exit(0); /* succeed (yes, it's ELF) */
7116         else
7117                 exit(1); /* fail */
7118 }
7119 EOM
7120                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7121                         cat <<EOM
7122 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7123 EOM
7124                         dflt="$cc"
7125                 else
7126                         echo "I'll use ld to build dynamic libraries."
7127                         dflt='ld'
7128                 fi
7129                 rm -f try.c a.out
7130                 ;;
7131         *)      dflt="$ld"
7132                 ;;
7133         esac
7134
7135     rp="What command should be used to create dynamic libraries?"
7136     . ./myread
7137         ld="$ans"
7138
7139     cat << EOM
7140
7141 Some systems may require passing special flags to $ld to create a
7142 library that can be dynamically loaded.  If your ld flags include
7143 -L/other/path options to locate libraries outside your loader's normal
7144 search path, you may need to specify those -L options here as well.  To
7145 use no flags, say "none".
7146
7147 EOM
7148     case "$lddlflags" in
7149     '') case "$osname" in
7150                         beos) dflt='-nostart' ;;
7151                         hpux) dflt='-b';
7152                               case "$gccversion" in
7153                               '') dflt="$dflt +vnocompatwarnings" ;;
7154                               esac
7155                               ;;        
7156                         linux|irix*)    dflt='-shared' ;;
7157                         next)  dflt='none' ;;
7158                         solaris) dflt='-G' ;;
7159                         sunos) dflt='-assert nodefinitions' ;;
7160                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7161                 *)     dflt='none' ;;
7162                         esac
7163                         ;;
7164     *) dflt="$lddlflags" ;;
7165     esac
7166
7167         : Try to guess additional flags to pick up local libraries.
7168         : Be careful not to append to a plain 'none'
7169         case "$dflt" in
7170         none) dflt='' ;;
7171         esac
7172         for thisflag in $ldflags; do
7173                 case "$thisflag" in
7174                 -L*|-R*)
7175                         case " $dflt " in
7176                         *" $thisflag "*) ;;
7177                         *) dflt="$dflt $thisflag" ;;
7178                         esac
7179                         ;;
7180                 esac
7181         done
7182
7183         case "$dflt" in
7184         ''|' ') dflt='none' ;;
7185         esac
7186
7187     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7188     . ./myread
7189     case "$ans" in
7190     none) lddlflags=' ' ;;
7191     *) lddlflags="$ans" ;;
7192     esac
7193
7194         cat <<EOM
7195
7196 Some systems may require passing special flags to $cc to indicate that
7197 the resulting executable will use dynamic linking.  To use no flags,
7198 say "none".
7199
7200 EOM
7201     case "$ccdlflags" in
7202     '') case "$osname" in
7203                 hpux)   dflt='-Wl,-E' ;;
7204                 linux)  dflt='-rdynamic' ;;
7205                 next)   dflt='none' ;;
7206                 sunos)  dflt='none' ;;
7207                 *)      dflt='none' ;;
7208             esac ;;
7209     ' ')  dflt='none' ;;
7210     *)  dflt="$ccdlflags" ;;
7211     esac
7212     rp="Any special flags to pass to $cc to use dynamic linking?"
7213     . ./myread
7214     case "$ans" in
7215     none) ccdlflags=' ' ;;
7216     *) ccdlflags="$ans" ;;
7217     esac
7218     ;;
7219 *)  usedl="$undef"
7220         ld='ld'
7221     dlsrc='dl_none.xs'
7222     lddlflags=''
7223     ccdlflags=''
7224     ;;
7225 esac
7226
7227 also=''
7228 case "$usedl" in
7229 $undef)
7230         # No dynamic loading being used, so don't bother even to prompt.
7231         useshrplib='false'
7232         ;;
7233 *)      case "$useshrplib" in
7234         '')     case "$osname" in
7235                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7236                         dflt=y
7237                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7238                         ;;
7239                 next*)
7240                         case "$osvers" in
7241                         4*)     dflt=y
7242                                 also='Building a shared libperl is needed for MAB support.'
7243                                 ;;
7244                         *)      dflt=n
7245                                 ;;
7246                         esac
7247                         ;;
7248                 *)      dflt=n
7249                         ;;
7250                 esac
7251                 ;;
7252         $define|true|[Yy]*)
7253                 dflt=y
7254                 ;;
7255         *)      dflt=n
7256                 ;;
7257         esac
7258         $cat << EOM
7259
7260 The perl executable is normally obtained by linking perlmain.c with
7261 libperl${_a}, any static extensions (usually just DynaLoader), and
7262 any other libraries needed on this system (such as -lm, etc.).  Since
7263 your system supports dynamic loading, it is probably possible to build
7264 a shared libperl.$so.  If you will have more than one executable linked
7265 to libperl.$so, this will significantly reduce the size of each
7266 executable, but it may have a noticeable affect on performance.  The
7267 default is probably sensible for your system.
7268 $also
7269
7270 EOM
7271         rp="Build a shared libperl.$so (y/n)"
7272         . ./myread
7273         case "$ans" in
7274         true|$define|[Yy]*)
7275                 useshrplib='true'  ;;
7276         *)      useshrplib='false' ;;
7277         esac
7278         ;;
7279 esac
7280
7281 case "$useshrplib" in
7282 true)
7283         case "$libperl" in
7284         '')
7285                 # Figure out a good name for libperl.so.  Since it gets stored in
7286                 # a version-specific architecture-dependent library, the version
7287                 # number isn't really that important, except for making cc/ld happy.
7288                 #
7289                 # A name such as libperl.so.3.1
7290                 majmin="libperl.$so.$patchlevel.$subversion"
7291                 # A name such as libperl.so.301
7292                 majonly=`echo $patchlevel $subversion |
7293                         $awk '{printf "%d%02d", $1, $2}'`
7294                 majonly=libperl.$so.$majonly
7295                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7296                 # rely on figuring it out from the naming of libc.
7297                 case "${osname}${osvers}" in
7298                 next4*)
7299                         dflt=libperl.5.$so
7300                         # XXX How handle the --version stuff for MAB?
7301                         ;;
7302                 linux*)  # ld won't link with a bare -lperl otherwise.
7303                         dflt=libperl.$so
7304                         ;;
7305                 cygwin*) # include version
7306                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7307                         ;;
7308                 *)      # Try to guess based on whether libc has major.minor.
7309                         case "$libc" in
7310                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7311                         *libc.$so.[0-9]*) dflt=$majonly ;;
7312                         *)      dflt=libperl.$so ;;
7313                         esac
7314                         ;;
7315                 esac
7316                 ;;
7317         *)      dflt=$libperl
7318                 ;;
7319         esac
7320         cat << EOM
7321
7322 I need to select a good name for the shared libperl.  If your system uses
7323 library names with major and minor numbers, then you might want something
7324 like $majmin.  Alternatively, if your system uses a single version
7325 number for shared libraries, then you might want to use $majonly.
7326 Or, your system might be quite happy with a simple libperl.$so.
7327
7328 Since the shared libperl will get installed into a version-specific
7329 architecture-dependent directory, the version number of the shared perl
7330 library probably isn't important, so the default should be o.k.
7331
7332 EOM
7333         rp='What name do you want to give to the shared libperl?'
7334         . ./myread
7335         libperl=$ans
7336         echo "Ok, I'll use $libperl"
7337         ;;
7338 *)
7339         libperl="libperl${_a}"
7340         ;;
7341 esac
7342
7343 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7344 case "$shrpdir" in
7345 '') ;;
7346 *)      $cat >&4 <<EOM
7347 WARNING:  Use of the shrpdir variable for the installation location of
7348 the shared $libperl is not supported.  It was never documented and
7349 will not work in this version.  Let me (perlbug@perl.org)
7350 know of any problems this may cause.
7351
7352 EOM
7353         case "$shrpdir" in
7354         "$archlibexp/CORE")
7355                 $cat >&4 <<EOM
7356 But your current setting of $shrpdir is
7357 the default anyway, so it's harmless.
7358 EOM
7359                 ;;
7360         *)
7361                 $cat >&4 <<EOM
7362 Further, your current attempted setting of $shrpdir
7363 conflicts with the value of $archlibexp/CORE
7364 that installperl will use.
7365 EOM
7366                 ;;
7367         esac
7368         ;;
7369 esac
7370
7371 # How will the perl executable find the installed shared $libperl?
7372 # Add $xxx to ccdlflags.
7373 # If we can't figure out a command-line option, use $shrpenv to
7374 # set env LD_RUN_PATH.  The main perl makefile uses this.
7375 shrpdir=$archlibexp/CORE
7376 xxx=''
7377 tmp_shrpenv=''
7378 if "$useshrplib"; then
7379     case "$osname" in 
7380         aix)
7381                 # We'll set it in Makefile.SH...
7382                 ;;
7383         solaris|netbsd)
7384                 xxx="-R $shrpdir"
7385                 ;;
7386         freebsd)
7387                 xxx="-Wl,-R$shrpdir"
7388                 ;;
7389         linux|irix*|dec_osf)
7390                 xxx="-Wl,-rpath,$shrpdir"
7391                 ;;
7392         next)
7393                 # next doesn't like the default...
7394                 ;;
7395         beos)
7396                 # beos doesn't like the default, either.
7397                 ;;
7398         hpux*)
7399                 # hpux doesn't like the default, either.
7400                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7401                 ;;
7402         *)
7403                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7404                 ;;
7405         esac
7406         case "$xxx" in
7407         '') ;;
7408         *)      
7409                 # Only add $xxx if it isn't already in ccdlflags.
7410                 case " $ccdlflags " in
7411                 *" $xxx "*)     ;;
7412                 *)      ccdlflags="$ccdlflags $xxx"
7413                         cat <<EOM >&4
7414
7415 Adding $xxx to the flags
7416 passed to $ld so that the perl executable will find the 
7417 installed shared $libperl.
7418
7419 EOM
7420                         ;;
7421                 esac
7422                 ;;
7423         esac
7424 fi
7425 # Fix ccdlflags in AIX for building external extensions.
7426 # (For building Perl itself bare -bE:perl.exp is needed,
7427 #  Makefile.SH takes care of this.)
7428 case "$osname" in
7429 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7430 esac
7431 # Respect a hint or command-line value.
7432 case "$shrpenv" in
7433 '') shrpenv="$tmp_shrpenv" ;;
7434 esac
7435 case "$ldlibpthname" in
7436 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7437 none)   ldlibpthname='' ;;
7438 esac
7439
7440 : determine where manual pages are on this system
7441 echo " "
7442 case "$sysman" in
7443 '') 
7444         syspath='/usr/share/man/man1 /usr/man/man1'
7445         syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
7446         syspath="$syspath /usr/man/u_man/man1"
7447         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7448         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7449         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7450         sysman=`./loc . /usr/man/man1 $syspath`
7451         ;;
7452 esac
7453 if $test -d "$sysman"; then
7454         echo "System manual is in $sysman." >&4
7455 else
7456         echo "Could not find manual pages in source form." >&4
7457 fi
7458
7459 : determine where manual pages go
7460 set man1dir man1dir none
7461 eval $prefixit
7462 $cat <<EOM
7463
7464 $spackage has manual pages available in source form.
7465 EOM
7466 case "$nroff" in
7467 nroff)
7468         echo "However, you don't have nroff, so they're probably useless to you."
7469         case "$man1dir" in
7470         '') man1dir="none";;
7471         esac;;
7472 esac
7473 echo "If you don't want the manual sources installed, answer 'none'."
7474 case "$man1dir" in
7475 ' ') dflt=none
7476         ;;
7477 '')
7478         lookpath="$prefixexp/share/man/man1"
7479         lookpath="$lookpath $prefixexp/man/man1 $prefixexp/man/l_man/man1"
7480         lookpath="$lookpath $prefixexp/man/p_man/man1"
7481         lookpath="$lookpath $prefixexp/man/u_man/man1"
7482         lookpath="$lookpath $prefixexp/man/man.1"
7483         case "$sysman" in
7484         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7485         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7486         esac
7487         set dflt
7488         eval $prefixup
7489         ;;
7490 *)  dflt="$man1dir"
7491         ;;
7492 esac
7493 echo " "
7494 fn=dn+~
7495 rp="Where do the main $spackage manual pages (source) go?"
7496 . ./getfile
7497 if $test "X$man1direxp" != "X$ansexp"; then
7498         installman1dir=''
7499 fi
7500 man1dir="$ans"
7501 man1direxp="$ansexp"
7502 case "$man1dir" in
7503 '')     man1dir=' '
7504         installman1dir='';;
7505 esac
7506
7507 : Change installation prefix, if necessary.
7508 if $test X"$prefix" != X"$installprefix"; then
7509         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7510 else
7511         installman1dir="$man1direxp"
7512 fi
7513
7514 : What suffix to use on installed man pages
7515
7516 case "$man1dir" in
7517 ' ')
7518         man1ext='0'
7519         ;;
7520 *)
7521         rp="What suffix should be used for the main $spackage man pages?"
7522         case "$man1ext" in
7523         '')     case "$man1dir" in
7524                 *1)  dflt=1 ;;
7525                 *1p) dflt=1p ;;
7526                 *1pm) dflt=1pm ;;
7527                 *l) dflt=l;;
7528                 *n) dflt=n;;
7529                 *o) dflt=o;;
7530                 *p) dflt=p;;
7531                 *C) dflt=C;;
7532                 *L) dflt=L;;
7533                 *L1) dflt=L1;;
7534                 *) dflt=1;;
7535                 esac
7536                 ;;
7537         *)      dflt="$man1ext";;
7538         esac
7539         . ./myread
7540         man1ext="$ans"
7541         ;;
7542 esac
7543
7544 : see if we can have long filenames
7545 echo " "
7546 first=123456789abcdef
7547 $rm -f $first
7548 if (echo hi >$first) 2>/dev/null; then
7549         if $test -f 123456789abcde; then
7550                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7551                 val="$undef"
7552         else
7553                 echo 'You can have filenames longer than 14 characters.'>&4
7554                 val="$define"
7555         fi
7556 else
7557         $cat <<'EOM'
7558 You can't have filenames longer than 14 chars.
7559 You can't even think about them!
7560 EOM
7561         val="$undef"
7562 fi 
7563 set d_flexfnam
7564 eval $setvar
7565 $rm -rf 123456789abcde*
7566
7567 : determine where library module manual pages go
7568 set man3dir man3dir none
7569 eval $prefixit
7570 $cat <<EOM
7571
7572 $spackage has manual pages for many of the library modules.
7573 EOM
7574
7575 case "$nroff" in
7576 nroff)
7577         $cat <<'EOM'
7578 However, you don't have nroff, so they're probably useless to you.
7579 EOM
7580         case "$man3dir" in
7581         '') man3dir="none";;
7582         esac;;
7583 esac
7584
7585 case "$d_flexfnam" in
7586 undef)
7587         $cat <<'EOM'
7588 However, your system can't handle the long file names like File::Basename.3. 
7589 EOM
7590         case "$man3dir" in
7591         '') man3dir="none";;
7592         esac;;
7593 esac
7594
7595 echo "If you don't want the manual sources installed, answer 'none'."
7596 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7597 case "$man3dir" in
7598 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7599         if $test -d "$privlib/man/man3"; then
7600                 cat <<EOM >&4
7601
7602 WARNING:  Previous versions of perl installed man3 pages into
7603 $privlib/man/man3.  This version will suggest a 
7604 new default of $dflt.  
7605 EOM
7606                 tdflt=$dflt
7607                 dflt='n'
7608                 rp='Do you wish to preserve the old behavior?(y/n)'
7609                 . ./myread
7610                 case "$ans" in
7611                 y*) dflt="$privlib/man/man3" ;;
7612                 *)  dflt=$tdflt ;;
7613                 esac
7614     fi
7615         ;;
7616 *)      dflt="$man3dir" ;;
7617 esac
7618 case "$dflt" in
7619 ' ') dflt=none ;;
7620 esac
7621 echo " "
7622 fn=dn+~
7623 rp="Where do the $package library man pages (source) go?"
7624 . ./getfile
7625 man3dir="$ans"
7626 man3direxp="$ansexp"
7627 case "$man3dir" in
7628 '')     man3dir=' '
7629         installman3dir='';;
7630 esac
7631
7632 : Change installation prefix, if necessary.
7633 if $test X"$prefix" != X"$installprefix"; then
7634         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7635 else
7636         installman3dir="$man3direxp"
7637 fi
7638
7639 : What suffix to use on installed man pages
7640 case "$man3dir" in
7641 ' ')
7642         man3ext='0'
7643         ;;
7644 *)
7645         rp="What suffix should be used for the $package library man pages?"
7646         case "$man3ext" in
7647         '')     case "$man3dir" in
7648                 *3)  dflt=3 ;;
7649                 *3p) dflt=3p ;;
7650                 *3pm) dflt=3pm ;;
7651                 *l) dflt=l;;
7652                 *n) dflt=n;;
7653                 *o) dflt=o;;
7654                 *p) dflt=p;;
7655                 *C) dflt=C;;
7656                 *L) dflt=L;;
7657                 *L3) dflt=L3;;
7658                 *) dflt=3;;
7659                 esac
7660                 ;;
7661         *)      dflt="$man3ext";;
7662         esac
7663         . ./myread
7664         man3ext="$ans"
7665         ;;
7666 esac
7667
7668 : see if we have to deal with yellow pages, now NIS.
7669 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7670         if $test -f /usr/etc/nibindd; then
7671                 echo " "
7672                 echo "I'm fairly confident you're on a NeXT."
7673                 echo " "
7674                 rp='Do you get the hosts file via NetInfo?'
7675                 dflt=y
7676                 case "$hostcat" in
7677                 nidump*) ;;
7678                 '') ;;
7679                 *) dflt=n;;
7680                 esac
7681                 . ./myread
7682                 case "$ans" in
7683                 y*) hostcat='nidump hosts .';;
7684                 *)      case "$hostcat" in
7685                         nidump*) hostcat='';;
7686                         esac
7687                         ;;
7688                 esac
7689         fi
7690         case "$hostcat" in
7691         nidump*) ;;
7692         *)
7693                 case "$hostcat" in
7694                 *ypcat*) dflt=y;;
7695                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7696                                 dflt=y
7697                         else
7698                                 dflt=n
7699                         fi;;
7700                 *) dflt=n;;
7701                 esac
7702                 echo " "
7703                 rp='Are you getting the hosts file via yellow pages?'
7704                 . ./myread
7705                 case "$ans" in
7706                 y*) hostcat='ypcat hosts';;
7707                 *) hostcat='cat /etc/hosts';;
7708                 esac
7709                 ;;
7710         esac
7711 fi
7712 case "$hostcat" in
7713 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7714 esac
7715 case "$groupcat" in
7716 '') test -f /etc/group && groupcat='cat /etc/group';;
7717 esac
7718 case "$passcat" in
7719 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7720 esac
7721
7722 : now get the host name
7723 echo " "
7724 echo "Figuring out host name..." >&4
7725 case "$myhostname" in
7726 '') cont=true
7727         echo 'Maybe "hostname" will work...'
7728         if tans=`sh -c hostname 2>&1` ; then
7729                 myhostname=$tans
7730                 phostname=hostname
7731                 cont=''
7732         fi
7733         ;;
7734 *) cont='';;
7735 esac
7736 if $test "$cont"; then
7737         if ./xenix; then
7738                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7739                 if tans=`cat /etc/systemid 2>&1` ; then
7740                         myhostname=$tans
7741                         phostname='cat /etc/systemid'
7742                         echo "Whadyaknow.  Xenix always was a bit strange..."
7743                         cont=''
7744                 fi
7745         elif $test -r /etc/systemid; then
7746                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7747         fi
7748 fi
7749 if $test "$cont"; then
7750         echo 'No, maybe "uuname -l" will work...'
7751         if tans=`sh -c 'uuname -l' 2>&1` ; then
7752                 myhostname=$tans
7753                 phostname='uuname -l'
7754         else
7755                 echo 'Strange.  Maybe "uname -n" will work...'
7756                 if tans=`sh -c 'uname -n' 2>&1` ; then
7757                         myhostname=$tans
7758                         phostname='uname -n'
7759                 else
7760                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7761                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7762                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7763                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7764                         else
7765                                 case "$myhostname" in
7766                                 '') echo "Does this machine have an identity crisis or something?"
7767                                         phostname='';;
7768                                 *)
7769                                         echo "Well, you said $myhostname before..."
7770                                         phostname='echo $myhostname';;
7771                                 esac
7772                         fi
7773                 fi
7774         fi
7775 fi
7776 : you do not want to know about this
7777 set $myhostname
7778 myhostname=$1
7779
7780 : verify guess
7781 if $test "$myhostname" ; then
7782         dflt=y
7783         rp='Your host name appears to be "'$myhostname'".'" Right?"
7784         . ./myread
7785         case "$ans" in
7786         y*) ;;
7787         *) myhostname='';;
7788         esac
7789 fi
7790
7791 : bad guess or no guess
7792 while $test "X$myhostname" = X ; do
7793         dflt=''
7794         rp="Please type the (one word) name of your host:"
7795         . ./myread
7796         myhostname="$ans"
7797 done
7798
7799 : translate upper to lower if necessary
7800 case "$myhostname" in
7801 *[A-Z]*)
7802         echo "(Normalizing case in your host name)"
7803         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7804         ;;
7805 esac
7806
7807 case "$myhostname" in
7808 *.*)
7809         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7810         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7811         echo "(Trimming domain name from host name--host name is now $myhostname)"
7812         ;;
7813 *) case "$mydomain" in
7814         '')
7815                 {
7816                         test "X$hostcat" = "Xypcat hosts" &&
7817                         ypmatch "$myhostname" hosts 2>/dev/null |\
7818                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7819                         $test -s hosts
7820                 } || {
7821                         test "X$hostcat" != "X" &&
7822                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7823                                         /[       ]$myhostname[  . ]/p" > hosts
7824                 }
7825                 tmp_re="[       . ]"
7826                 if $test -f hosts; then
7827                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7828                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7829                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7830                                 hosts | $sort | $uniq | \
7831                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7832                         case `$echo X$dflt` in
7833                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7834                                 dflt=.
7835                                 ;;
7836                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7837                                 ;;
7838                         esac
7839                 else
7840                         echo "(I cannot locate a hosts database anywhere)"
7841                         dflt=.
7842                 fi
7843                 case "$dflt" in
7844                 .)
7845                         tans=`./loc resolv.conf X /etc /usr/etc`
7846                         if $test -f "$tans"; then
7847                                 echo "(Attempting domain name extraction from $tans)"
7848                                 dflt=.`$sed -n -e 's/   / /g' \
7849                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7850                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7851                                 case "$dflt" in
7852                                 .) dflt=.`$sed -n -e 's/        / /g' \
7853                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7854                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7855                                         ;;
7856                                 esac
7857                         fi
7858                         ;;
7859                 esac
7860                 case "$dflt" in
7861                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7862                         dflt=.`sh -c domainname 2>/dev/null`
7863                         case "$dflt" in
7864                         '') dflt='.';;
7865                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7866                         esac
7867                         ;;
7868                 esac
7869                 case "$dflt$osname" in
7870                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7871                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7872                         ;;
7873                 esac
7874                 case "$dflt" in
7875                 .) echo "(Lost all hope -- silly guess then)"
7876                         dflt='.uucp'
7877                         ;;
7878                 esac
7879                 $rm -f hosts
7880                 ;;
7881         *) dflt="$mydomain";;
7882         esac;;
7883 esac
7884 echo " "
7885 rp="What is your domain name?"
7886 . ./myread
7887 tans="$ans"
7888 case "$ans" in
7889 '') ;;
7890 .*) ;;
7891 *) tans=".$tans";;
7892 esac
7893 mydomain="$tans"
7894
7895 : translate upper to lower if necessary
7896 case "$mydomain" in
7897 *[A-Z]*)
7898         echo "(Normalizing case in your domain name)"
7899         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7900         ;;
7901 esac
7902
7903 : a little sanity check here
7904 case "$phostname" in
7905 '') ;;
7906 *)
7907         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7908         $myhostname$mydomain|$myhostname) ;;
7909         *)
7910                 case "$phostname" in
7911                 sed*)
7912                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7913                         ;;
7914                 *)
7915                         echo "(That doesn't agree with your $phostname command, by the way.)"
7916                         ;;
7917                 esac
7918         ;;
7919         esac
7920         ;;
7921 esac
7922
7923 $cat <<EOM
7924
7925 I need to get your e-mail address in Internet format if possible, i.e.
7926 something like user@host.domain. Please answer accurately since I have
7927 no easy means to double check it. The default value provided below
7928 is most probably close to reality but may not be valid from outside
7929 your organization...
7930
7931 EOM
7932 cont=x
7933 while test "$cont"; do
7934         case "$cf_email" in
7935         '') dflt="$cf_by@$myhostname$mydomain";;
7936         *) dflt="$cf_email";;
7937         esac
7938         rp='What is your e-mail address?'
7939         . ./myread
7940         cf_email="$ans"
7941         case "$cf_email" in
7942         *@*.*) cont='' ;;
7943         *)
7944                 rp='Address does not look like an Internet one.  Use it anyway?'
7945                 case "$fastread" in
7946                 yes) dflt=y ;;
7947                 *) dflt=n ;;
7948                 esac
7949                 . ./myread
7950                 case "$ans" in
7951                 y*) cont='' ;;
7952                 *) echo " " ;;
7953                 esac
7954                 ;;
7955         esac
7956 done
7957
7958 $cat <<EOM
7959
7960 If you or somebody else will be maintaining perl at your site, please
7961 fill in the correct e-mail address here so that they may be contacted
7962 if necessary. Currently, the "perlbug" program included with perl
7963 will send mail to this address in addition to perlbug@perl.org. You may
7964 enter "none" for no administrator.
7965
7966 EOM
7967 case "$perladmin" in
7968 '') dflt="$cf_email";;
7969 *) dflt="$perladmin";;
7970 esac
7971 rp='Perl administrator e-mail address'
7972 . ./myread
7973 perladmin="$ans"
7974
7975 : determine whether to only install version-specific parts.
7976 echo " "
7977 $cat <<EOM
7978 Do you want to install only the version-specific parts of the perl
7979 distribution?  Usually you do *not* want to do this.
7980 EOM
7981 case "$versiononly" in
7982 "$define"|[Yy]*|true) dflt='y' ;;
7983 *) dflt='n';
7984 esac
7985 rp="Do you want to install only the version-specific parts of perl?"
7986 . ./myread
7987 case "$ans" in
7988 [yY]*)  val="$define";;
7989 *)      val="$undef" ;;
7990 esac
7991 set versiononly
7992 eval $setvar
7993
7994 : figure out how to guarantee perl startup
7995 case "$startperl" in
7996 '')
7997         case "$sharpbang" in
7998         *!)
7999                 $cat <<EOH
8000
8001 I can use the #! construct to start perl on your system. This will
8002 make startup of perl scripts faster, but may cause problems if you
8003 want to share those scripts and perl is not in a standard place
8004 ($binexp/perl) on all your platforms. The alternative is to force
8005 a shell by starting the script with a single ':' character.
8006
8007 EOH
8008                 case "$versiononly" in
8009                 "$define")      dflt="$binexp/perl$version";;  
8010                 *)              dflt="$binexp/perl";;
8011                 esac
8012                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8013                 . ./myread
8014                 case "$ans" in
8015                 none)   startperl=": # use perl";;
8016                 *)      startperl="#!$ans"
8017                         if $test 30 -lt `echo "$ans" | wc -c`; then
8018                                 $cat >&4 <<EOM
8019
8020 WARNING:  Some systems limit the #! command to 32 characters.
8021 If you experience difficulty running Perl scripts with #!, try
8022 installing Perl in a directory with a shorter pathname.
8023
8024 EOM
8025                         fi ;;
8026                 esac
8027                 ;;
8028         *) startperl=": # use perl"
8029                 ;;
8030         esac
8031         ;;
8032 esac
8033 echo "I'll use $startperl to start perl scripts."
8034
8035 : figure best path for perl in scripts
8036 case "$perlpath" in
8037 '')
8038         perlpath="$binexp/perl"
8039         case "$startperl" in
8040         *!*) ;;
8041         *)
8042                 $cat <<EOH
8043
8044 I will use the "eval 'exec'" idiom to start Perl on your system.
8045 I can use the full path of your Perl binary for this purpose, but
8046 doing so may cause problems if you want to share those scripts and
8047 Perl is not always in a standard place ($binexp/perl).
8048
8049 EOH
8050                 dflt="$binexp/perl"
8051                 rp="What path shall I use in \"eval 'exec'\"?"
8052                 . ./myread
8053                 perlpath="$ans"
8054                 ;;
8055         esac
8056         ;;
8057 esac
8058 case "$startperl" in
8059 *!*)    ;;
8060 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8061 esac
8062
8063 : determine where public executable scripts go
8064 set scriptdir scriptdir
8065 eval $prefixit
8066 case "$scriptdir" in
8067 '')
8068         dflt="$bin"
8069         : guess some guesses
8070         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8071         $test -d /usr/share/bin     && dflt=/usr/share/bin
8072         $test -d /usr/local/script  && dflt=/usr/local/script
8073         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8074         $test -d $prefixexp/script  && dflt=$prefixexp/script
8075         set dflt
8076         eval $prefixup
8077         ;;
8078 *)  dflt="$scriptdir"
8079         ;;
8080 esac
8081 $cat <<EOM
8082  
8083 Some installations have a separate directory just for executable scripts so
8084 that they can mount it across multiple architectures but keep the scripts in
8085 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8086 Or you might just lump your scripts in with all your other executables.
8087  
8088 EOM
8089 fn=d~
8090 rp='Where do you keep publicly executable scripts?'
8091 . ./getfile
8092 if $test "X$ansexp" != "X$scriptdirexp"; then
8093         installscript=''
8094 fi
8095 scriptdir="$ans"
8096 scriptdirexp="$ansexp"
8097 : Change installation prefix, if necessary.
8098 if $test X"$prefix" != X"$installprefix"; then
8099         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8100 else
8101         installscript="$scriptdirexp"
8102 fi
8103
8104 : determine where add-on public executables go
8105 case "$sitebin" in
8106 '')     dflt=$siteprefix/bin ;;
8107 *)      dflt=$sitebin ;;
8108 esac
8109 fn=d~
8110 rp='Pathname where the add-on public executables should be installed?'
8111 . ./getfile
8112 sitebin="$ans"
8113 sitebinexp="$ansexp"
8114 : Change installation prefix, if necessary.
8115 if $test X"$prefix" != X"$installprefix"; then
8116         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8117 else
8118         installsitebin="$sitebinexp"
8119 fi
8120
8121 : define an is-a-typedef? function
8122 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8123 case "$inclist" in
8124 "") inclist="sys/types.h";;
8125 esac;
8126 eval "varval=\$$var";
8127 case "$varval" in
8128 "")
8129         $rm -f temp.c;
8130         for inc in $inclist; do
8131                 echo "#include <$inc>" >>temp.c;
8132         done;
8133         echo "#ifdef $type" >> temp.c;
8134         echo "printf(\"We have $type\");" >> temp.c;
8135         echo "#endif" >> temp.c;
8136         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8137         if $contains $type temp.E >/dev/null 2>&1; then
8138                 eval "$var=\$type";
8139         else
8140                 eval "$var=\$def";
8141         fi;
8142         $rm -f temp.?;;
8143 *) eval "$var=\$varval";;
8144 esac'
8145
8146 : define an is-a-typedef? function that prompts if the type is not available.
8147 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8148 case "$inclist" in
8149 "") inclist="sys/types.h";;
8150 esac;
8151 eval "varval=\$$var";
8152 case "$varval" in
8153 "")
8154         $rm -f temp.c;
8155         for inc in $inclist; do
8156                 echo "#include <$inc>" >>temp.c;
8157         done;
8158         echo "#ifdef $type" >> temp.c;
8159         echo "printf(\"We have $type\");" >> temp.c;
8160         echo "#endif" >> temp.c;
8161         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8162         echo " " ;
8163         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8164         if $contains $type temp.E >/dev/null 2>&1; then
8165                 echo "$type found." >&4;
8166                 eval "$var=\$type";
8167         else
8168                 echo "$type NOT found." >&4;
8169                 dflt="$def";
8170                 . ./myread ;
8171                 eval "$var=\$ans";
8172         fi;
8173         $rm -f temp.?;;
8174 *) eval "$var=\$varval";;
8175 esac'
8176
8177 : see what type lseek is declared as in the kernel
8178 rp="What is the type used for lseek's offset on this system?"
8179 set off_t lseektype long stdio.h sys/types.h
8180 eval $typedef_ask
8181
8182 echo " "
8183 echo "Checking to see how big your file offsets are..." >&4
8184 $cat >try.c <<EOCP
8185 #include <sys/types.h>
8186 #include <stdio.h>
8187 int main()
8188 {
8189     printf("%d\n", (int)sizeof($lseektype));
8190     return(0); 
8191 }
8192 EOCP
8193 set try
8194 if eval $compile_ok; then
8195         lseeksize=`$run ./try`
8196         echo "Your file offsets are $lseeksize bytes long."
8197 else
8198         dflt=$longsize
8199         echo " "
8200         echo "(I can't seem to compile the test program.  Guessing...)"
8201         rp="What is the size of your file offsets (in bytes)?"
8202         . ./myread
8203         lseeksize="$ans"
8204 fi
8205 $rm -f try.c try
8206
8207 : see what type file positions are declared as in the library
8208 rp="What is the type for file position used by fsetpos()?"
8209 set fpos_t fpostype long stdio.h sys/types.h
8210 eval $typedef_ask
8211
8212 echo " "
8213 case "$fpostype" in
8214 *_t) zzz="$fpostype"    ;;
8215 *)   zzz="fpos_t"       ;;
8216 esac
8217 echo "Checking the size of $zzz..." >&4 
8218 cat > try.c <<EOCP
8219 #include <sys/types.h>
8220 #include <stdio.h>
8221 int main() {
8222     printf("%d\n", (int)sizeof($fpostype));
8223     exit(0);
8224 }
8225 EOCP
8226 set try
8227 if eval $compile_ok; then
8228         yyy=`$run ./try`
8229         case "$yyy" in
8230         '')     fpossize=4
8231                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8232                 ;;
8233         *)      fpossize=$yyy
8234                 echo "Your $zzz is $fpossize bytes long."
8235                 ;;
8236         esac
8237 else
8238         dflt="$longsize"
8239         echo " " >&4
8240         echo "(I can't compile the test program.  Guessing...)" >&4
8241         rp="What is the size of your file positions (in bytes)?"
8242         . ./myread
8243         fpossize="$ans"
8244 fi
8245
8246
8247
8248 # Backward compatibility (uselfs is deprecated).
8249 case "$uselfs" in
8250 "$define"|true|[yY]*)
8251         cat <<EOM >&4
8252
8253 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
8254 EOM
8255         uselargefiles="$define"
8256         ;;
8257 esac                          
8258
8259 case "$lseeksize:$fpossize" in
8260 8:8) cat <<EOM
8261
8262 You can have files larger than 2 gigabytes.
8263 EOM
8264    val="$define" ;;
8265 *)    case "$uselargefiles" in
8266    "$undef"|false|[nN]*) dflt='n' ;;
8267    *)   dflt='y' ;;
8268    esac
8269    cat <<EOM
8270
8271 Perl can be built to understand large files (files larger than 2 gigabytes)
8272 on some systems.  To do so, Configure can be run with -Duselargefiles.
8273
8274 If this doesn't make any sense to you, just accept the default '$dflt'.
8275 EOM
8276    rp='Try to understand large files, if available?'
8277    . ./myread
8278    case "$ans" in
8279    y|Y)         val="$define" ;;
8280    *)           val="$undef"  ;;
8281    esac
8282    ;;
8283 esac
8284 set uselargefiles
8285 eval $setvar
8286 case "$uselargefiles" in
8287 "$define")
8288 : Look for a hint-file generated 'call-back-unit'.  If the
8289 : user has specified that a large files perl is to be built,
8290 : we may need to set or change some other defaults.
8291         if $test -f uselargefiles.cbu; then
8292                 echo "Your platform has some specific hints for large file builds, using them..."
8293                 . ./uselargefiles.cbu
8294                 echo " "
8295                 echo "Rechecking to see how big your file offsets are..." >&4
8296                 $cat >try.c <<EOCP
8297 #include <sys/types.h>
8298 #include <stdio.h>
8299 int main()
8300 {
8301     printf("%d\n", (int)sizeof($lseektype));
8302     return(0); 
8303 }
8304 EOCP
8305                 set try
8306                 if eval $compile_ok; then
8307                         lseeksize=`$run ./try`
8308                         $echo "Your file offsets are now $lseeksize bytes long."
8309                 else
8310                         dflt="$lseeksize"
8311                         echo " "
8312                         echo "(I can't seem to compile the test program.  Guessing...)"
8313                         rp="What is the size of your file offsets (in bytes)?"
8314                         . ./myread
8315                         lseeksize="$ans"
8316                 fi
8317                 case "$fpostype" in
8318                 *_t) zzz="$fpostype"    ;;
8319                 *)   zzz="fpos_t"       ;;
8320                 esac
8321                 $echo $n "Rechecking the size of $zzz...$c" >&4 
8322                 $cat > try.c <<EOCP
8323 #include <sys/types.h>
8324 #include <stdio.h>
8325 int main() {
8326     printf("%d\n", (int)sizeof($fpostype));
8327     exit(0);
8328 }
8329 EOCP
8330                 set try
8331                 if eval $compile_ok; then
8332                         yyy=`$run ./try`
8333                         dflt="$lseeksize"
8334                         case "$yyy" in
8335                         '')     echo " "
8336                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8337                                 ;;
8338                         *)      fpossize=$yyy
8339                                 echo " $fpossize bytes." >&4
8340                                 ;;
8341                         esac
8342                 else
8343                         dflt="$fpossize"
8344                         echo " "
8345                         echo "(I can't compile the test program.  Guessing...)" >&4
8346                         rp="What is the size of your file positions (in bytes)?"
8347                         . ./myread
8348                         fpossize="$ans"
8349                 fi
8350                 $rm -f try.c try
8351         fi
8352         ;;
8353 esac
8354
8355 case "$vendorprefix" in
8356 '')     d_vendorbin="$undef"
8357         vendorbin=''
8358         vendorbinexp=''
8359         ;;
8360 *)      d_vendorbin="$define"
8361         : determine where vendor-supplied executables go.
8362         case "$vendorbin" in
8363         '') dflt=$vendorprefix/bin ;;
8364         *)      dflt="$vendorbin" ;;
8365         esac
8366         fn=d~+
8367         rp='Pathname for the vendor-supplied executables directory?'
8368         . ./getfile
8369         vendorbin="$ans"
8370         vendorbinexp="$ansexp"
8371         ;;
8372 esac
8373 : Change installation prefix, if necessary.
8374 if $test X"$prefix" != X"$installprefix"; then
8375         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8376 else
8377         installvendorbin="$vendorbinexp"
8378 fi
8379
8380 : see if qgcvt exists
8381 set qgcvt d_qgcvt
8382 eval $inlibc
8383
8384 echo " "
8385
8386 if $test X"$d_longdbl" = X"$define"; then
8387
8388 echo "Checking how to print long doubles..." >&4
8389
8390 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8391         $cat >try.c <<'EOCP'
8392 #include <sys/types.h>
8393 #include <stdio.h>
8394 int main() {
8395   double d = 123.456;
8396   printf("%.3f\n", d);
8397 }
8398 EOCP
8399         set try
8400         if eval $compile; then
8401                 yyy=`$run ./try`
8402                 case "$yyy" in
8403                 123.456)
8404                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8405                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8406                         echo "We will use %f."
8407                         ;;
8408                 esac
8409         fi
8410 fi
8411
8412 if $test X"$sPRIfldbl" = X; then
8413         $cat >try.c <<'EOCP'
8414 #include <sys/types.h>
8415 #include <stdio.h>
8416 int main() {
8417   long double d = 123.456;
8418   printf("%.3Lf\n", d);
8419 }
8420 EOCP
8421         set try
8422         if eval $compile; then
8423                 yyy=`$run ./try`
8424                 case "$yyy" in
8425                 123.456)
8426                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8427                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8428                         echo "We will use %Lf."
8429                         ;;
8430                 esac
8431         fi
8432 fi
8433
8434 if $test X"$sPRIfldbl" = X; then
8435         $cat >try.c <<'EOCP'
8436 #include <sys/types.h>
8437 #include <stdio.h>
8438 int main() {
8439   long double d = 123.456;
8440   printf("%.3llf\n", d);
8441 }
8442 EOCP
8443         set try
8444         if eval $compile; then
8445                 yyy=`$run ./try`
8446                 case "$yyy" in
8447                 123.456)
8448                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8449                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8450                         echo "We will use %llf."
8451                         ;;
8452                 esac
8453         fi
8454 fi
8455
8456 if $test X"$sPRIfldbl" = X; then
8457         $cat >try.c <<'EOCP'
8458 #include <sys/types.h>
8459 #include <stdio.h>
8460 int main() {
8461   long double d = 123.456;
8462   printf("%.3lf\n", d);
8463 }
8464 EOCP
8465         set try
8466         if eval $compile; then
8467                 yyy=`$run ./try`
8468                 case "$yyy" in
8469                 123.456)
8470                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8471                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8472                         echo "We will use %lf."
8473                         ;;
8474                 esac
8475         fi
8476 fi
8477
8478 if $test X"$sPRIfldbl" = X; then
8479         echo "Cannot figure out how to print long doubles." >&4
8480 else
8481         sSCNfldbl=$sPRIfldbl    # expect consistency
8482 fi
8483
8484 $rm -f try try.*
8485
8486 fi # d_longdbl
8487
8488 case "$sPRIfldbl" in
8489 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8490         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8491         d_SCNfldbl="$undef";
8492         ;;
8493 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8494         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8495         d_SCNfldbl="$define";
8496         ;;
8497 esac
8498
8499 : Check how to convert floats to strings.
8500 echo " "
8501 echo "Checking for an efficient way to convert floats to strings."
8502 echo " " > try.c
8503 case "$uselongdouble" in
8504 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8505 esac
8506 case "$d_longdbl" in
8507 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8508 esac
8509 case "$d_PRIgldbl" in
8510 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8511 esac
8512 $cat >>try.c <<EOP
8513 #ifdef TRY_gconvert
8514 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8515 char *myname = "gconvert";
8516 #endif
8517 #ifdef TRY_gcvt
8518 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8519 char *myname = "gcvt";
8520 #endif
8521 #ifdef TRY_qgcvt
8522 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8523 char *myname = "qgcvt";
8524 #define DOUBLETYPE long double
8525 #endif
8526 #ifdef TRY_sprintf
8527 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8528 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8529 #else
8530 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8531 #endif
8532 char *myname = "sprintf";
8533 #endif
8534
8535 #ifndef DOUBLETYPE
8536 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8537 #define DOUBLETYPE long double
8538 #else
8539 #define DOUBLETYPE double
8540 #endif
8541 #endif
8542
8543 #include <stdio.h>
8544
8545 #define I_STDLIB $i_stdlib
8546 #ifdef I_STDLIB
8547 #include <stdlib.h>
8548 #endif
8549
8550 int
8551 checkit(expect, got)
8552 char *expect;
8553 char *got;
8554 {
8555     if (strcmp(expect, got)) {
8556                 printf("%s oddity:  Expected %s, got %s\n",
8557                         myname, expect, got);
8558                 exit(1);
8559         }
8560 }
8561
8562 int main()
8563
8564         char buf[64]; 
8565         buf[63] = '\0';
8566
8567         /* This must be 1st test on (which?) platform */
8568         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8569         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8570         checkit("0.1", buf);
8571
8572         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8573         checkit("1", buf);
8574
8575         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8576         checkit("1.1", buf);
8577
8578         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8579         checkit("1.01", buf);
8580
8581         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8582         checkit("1.001", buf);
8583
8584         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8585         checkit("1.0001", buf);
8586
8587         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8588         checkit("1.00001", buf);
8589
8590         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8591         checkit("1.000001", buf);
8592
8593         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8594         checkit("0", buf);
8595
8596         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8597         checkit("-1", buf);
8598
8599         /* Some Linux gcvt's give 1.e+5 here. */
8600         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8601         checkit("100000", buf);
8602         
8603         /* Some Linux gcvt's give -1.e+5 here. */
8604         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8605         checkit("-100000", buf);
8606
8607         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8608         checkit("123.456", buf);
8609
8610         /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */
8611         Gconvert((DOUBLETYPE)1e30, 8, 0, buf);
8612         if (strlen(buf) > 5)
8613             checkit("1e+030", buf); /* for Microsoft */
8614         else
8615             checkit("1e+30", buf);
8616
8617         exit(0);
8618 }
8619 EOP
8620 case "$d_Gconvert" in
8621 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8622 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8623 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8624 *) xxx_list='gconvert gcvt sprintf' ;;
8625 esac
8626
8627 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8628 "$define$define$define")
8629     # for long doubles prefer first qgcvt, then sprintf
8630     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8631     xxx_list="sprintf $xxx_list"
8632     case "$d_qgcvt" in
8633     "$define") xxx_list="qgcvt $xxx_list" ;;
8634     esac
8635     ;;
8636 esac
8637
8638 for xxx_convert in $xxx_list; do
8639         echo "Trying $xxx_convert..."
8640         $rm -f try try$_o
8641         set try -DTRY_$xxx_convert
8642         if eval $compile; then
8643                 echo "$xxx_convert() found." >&4
8644                 if $run ./try; then
8645                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8646                         break;
8647                 else
8648                         echo "...But $xxx_convert didn't work as I expected."
8649                 fi
8650         else
8651                 echo "$xxx_convert NOT found." >&4
8652         fi
8653 done
8654         
8655 case "$xxx_convert" in
8656 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8657 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8658 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8659 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8660    "$define$define$define")
8661       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8662    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8663    esac
8664    ;;  
8665 esac
8666
8667 : see if _fwalk exists
8668 set fwalk d__fwalk
8669 eval $inlibc
8670
8671 : Initialize h_fcntl
8672 h_fcntl=false
8673
8674 : Initialize h_sysfile
8675 h_sysfile=false
8676
8677 : access call always available on UNIX
8678 set access d_access
8679 eval $inlibc
8680
8681 : locate the flags for 'access()'
8682 case "$d_access" in
8683 "$define")
8684         echo " "
8685         $cat >access.c <<'EOCP'
8686 #include <sys/types.h>
8687 #ifdef I_FCNTL
8688 #include <fcntl.h>
8689 #endif
8690 #ifdef I_SYS_FILE
8691 #include <sys/file.h>
8692 #endif
8693 #ifdef I_UNISTD
8694 #include <unistd.h>
8695 #endif
8696 int main() {
8697         exit(R_OK);
8698 }
8699 EOCP
8700         : check sys/file.h first, no particular reason here
8701         if $test `./findhdr sys/file.h` && \
8702                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8703                 h_sysfile=true;
8704                 echo "<sys/file.h> defines the *_OK access constants." >&4
8705         elif $test `./findhdr fcntl.h` && \
8706                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8707                 h_fcntl=true;
8708                 echo "<fcntl.h> defines the *_OK access constants." >&4
8709         elif $test `./findhdr unistd.h` && \
8710                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8711                 echo "<unistd.h> defines the *_OK access constants." >&4
8712         else
8713                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8714         fi
8715         ;;
8716 esac
8717 $rm -f access*
8718
8719 : see if accessx exists
8720 set accessx d_accessx
8721 eval $inlibc
8722
8723 : see if alarm exists
8724 set alarm d_alarm
8725 eval $inlibc
8726
8727 : see if atolf exists
8728 set atolf d_atolf
8729 eval $inlibc
8730
8731 : see if atoll exists
8732 set atoll d_atoll
8733 eval $inlibc
8734
8735 : Look for GNU-cc style attribute checking
8736 echo " "
8737 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8738 $cat >attrib.c <<'EOCP'
8739 #include <stdio.h>
8740 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8741 EOCP
8742 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8743         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8744                 echo "Your C compiler doesn't fully support __attribute__."
8745                 val="$undef"
8746         else
8747                 echo "Your C compiler supports __attribute__."
8748                 val="$define"
8749         fi
8750 else
8751         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8752         val="$undef"
8753 fi
8754 set d_attribut
8755 eval $setvar
8756 $rm -f attrib*
8757
8758 : see if bcmp exists
8759 set bcmp d_bcmp
8760 eval $inlibc
8761
8762 : see if bcopy exists
8763 set bcopy d_bcopy
8764 eval $inlibc
8765
8766 : see if this is a unistd.h system
8767 set unistd.h i_unistd
8768 eval $inhdr
8769
8770 : see if getpgrp exists
8771 set getpgrp d_getpgrp
8772 eval $inlibc
8773
8774 case "$d_getpgrp" in
8775 "$define")
8776         echo " "
8777         echo "Checking to see which flavor of getpgrp is in use..."
8778         $cat >try.c <<EOP
8779 #$i_unistd I_UNISTD
8780 #include <sys/types.h>
8781 #ifdef I_UNISTD
8782 #  include <unistd.h>
8783 #endif
8784 int main()
8785 {
8786         if (getuid() == 0) {
8787                 printf("(I see you are running Configure as super-user...)\n");
8788                 setuid(1);
8789         }
8790 #ifdef TRY_BSD_PGRP
8791         if (getpgrp(1) == 0)
8792                 exit(0);
8793 #else
8794         if (getpgrp() > 0)
8795                 exit(0);
8796 #endif
8797         exit(1);
8798 }
8799 EOP
8800         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8801                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8802                 val="$define"
8803         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8804                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8805                 val="$undef"
8806         else
8807                 echo "I can't seem to compile and run the test program."
8808                 if ./usg; then
8809                         xxx="a USG one, i.e. you use getpgrp()."
8810                 else
8811                         # SVR4 systems can appear rather BSD-ish.
8812                         case "$i_unistd" in
8813                         $undef)
8814                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8815                                 val="$define"
8816                                 ;;
8817                         $define)
8818                                 xxx="probably a USG one, i.e. you use getpgrp()."
8819                                 val="$undef"
8820                                 ;;
8821                         esac
8822                 fi
8823                 echo "Assuming your getpgrp is $xxx" >&4
8824         fi
8825         ;;
8826 *) val="$undef";;
8827 esac
8828 set d_bsdgetpgrp
8829 eval $setvar
8830 $rm -f try try.*
8831
8832 : see if setpgrp exists
8833 set setpgrp d_setpgrp
8834 eval $inlibc
8835
8836 case "$d_setpgrp" in
8837 "$define")
8838         echo " "
8839         echo "Checking to see which flavor of setpgrp is in use..."
8840         $cat >try.c <<EOP
8841 #$i_unistd I_UNISTD
8842 #include <sys/types.h>
8843 #ifdef I_UNISTD
8844 #  include <unistd.h>
8845 #endif
8846 int main()
8847 {
8848         if (getuid() == 0) {
8849                 printf("(I see you are running Configure as super-user...)\n");
8850                 setuid(1);
8851         }
8852 #ifdef TRY_BSD_PGRP
8853         if (-1 == setpgrp(1, 1))
8854                 exit(0);
8855 #else
8856         if (setpgrp() != -1)
8857                 exit(0);
8858 #endif
8859         exit(1);
8860 }
8861 EOP
8862         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8863                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8864                 val="$define"
8865         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8866                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8867                 val="$undef"
8868         else
8869                 echo "(I can't seem to compile and run the test program.)"
8870                 if ./usg; then
8871                         xxx="a USG one, i.e. you use setpgrp()."
8872                 else
8873                         # SVR4 systems can appear rather BSD-ish.
8874                         case "$i_unistd" in
8875                         $undef)
8876                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8877                                 val="$define"
8878                                 ;;
8879                         $define)
8880                                 xxx="probably a USG one, i.e. you use setpgrp()."
8881                                 val="$undef"
8882                                 ;;
8883                         esac
8884                 fi
8885                 echo "Assuming your setpgrp is $xxx" >&4
8886         fi
8887         ;;
8888 *) val="$undef";;
8889 esac
8890 set d_bsdsetpgrp
8891 eval $setvar
8892 $rm -f try try.*
8893 : see if bzero exists
8894 set bzero d_bzero
8895 eval $inlibc
8896
8897 : see if signal is declared as pointer to function returning int or void
8898 echo " "
8899 xxx=`./findhdr signal.h`
8900 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8901 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8902         echo "You have int (*signal())() instead of void." >&4
8903         val="$undef"
8904 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8905         echo "You have void (*signal())()." >&4
8906         val="$define"
8907 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8908         echo "You have int (*signal())() instead of void." >&4
8909         val="$undef"
8910 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8911         echo "You have void (*signal())()." >&4
8912         val="$define"
8913 else
8914         case "$d_voidsig" in
8915         '')
8916         echo "I can't determine whether signal handler returns void or int..." >&4
8917                 dflt=void
8918                 rp="What type does your signal handler return?"
8919                 . ./myread
8920                 case "$ans" in
8921                 v*) val="$define";;
8922                 *) val="$undef";;
8923                 esac;;
8924         "$define")
8925                 echo "As you already told me, signal handler returns void." >&4
8926                 val="$define"
8927                 ;;
8928         *)      echo "As you already told me, signal handler returns int." >&4
8929                 val="$undef"
8930                 ;;
8931         esac
8932 fi
8933 set d_voidsig
8934 eval $setvar
8935 case "$d_voidsig" in
8936 "$define") signal_t="void";;
8937 *) signal_t="int";;
8938 esac
8939 $rm -f $$.tmp
8940
8941 : check for ability to cast large floats to 32-bit ints.
8942 echo " "
8943 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8944 if $test "$intsize" -ge 4; then
8945         xxx=int
8946 else
8947         xxx=long
8948 fi
8949 $cat >try.c <<EOCP
8950 #include <stdio.h>
8951 #include <sys/types.h>
8952 #include <signal.h>
8953 $signal_t blech(s) int s; { exit(3); }
8954 int main()
8955 {
8956         $xxx i32;
8957         double f, g;
8958         int result = 0;
8959         char str[16];
8960         signal(SIGFPE, blech);
8961
8962         /* Don't let compiler optimize the test away.  Store the number 
8963            in a writable string for gcc to pass to sscanf under HP/UX.
8964         */
8965         sprintf(str, "2147483647");
8966         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8967         g = 10 * f;
8968         i32  = ($xxx) g;
8969
8970         /* x86 processors will probably give 0x8000 0000, which is a
8971        sign change.  We don't want that.  We want to mimic SPARC
8972            behavior here, which is to preserve the sign and give
8973            back 0x7fff ffff.
8974         */
8975         if (i32 != ($xxx) f)
8976                 result |= 1;
8977         exit(result);
8978 }
8979 EOCP
8980 set try
8981 if eval $compile_ok; then
8982         $run ./try
8983         yyy=$?
8984 else
8985         echo "(I can't seem to compile the test program--assuming it can't)"
8986         yyy=1
8987 fi
8988 case "$yyy" in
8989 0)      val="$define"
8990         echo "Yup, it can."
8991         ;;
8992 *)      val="$undef"
8993         echo "Nope, it can't."
8994         ;;
8995 esac
8996 set d_casti32
8997 eval $setvar
8998 $rm -f try try.*
8999
9000 : check for ability to cast negative floats to unsigned
9001 echo " "
9002 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
9003 $cat >try.c <<EOCP
9004 #include <stdio.h>
9005 #include <sys/types.h>
9006 #include <signal.h>
9007 $signal_t blech(s) int s; { exit(7); }
9008 $signal_t blech_in_list(s) int s; { exit(4); }
9009 unsigned long dummy_long(p) unsigned long p; { return p; }
9010 unsigned int dummy_int(p) unsigned int p; { return p; }
9011 unsigned short dummy_short(p) unsigned short p; { return p; }
9012 int main()
9013 {
9014         double f;
9015         unsigned long along;
9016         unsigned int aint;
9017         unsigned short ashort;
9018         int result = 0;
9019         char str[16];
9020         
9021         /* Frustrate gcc-2.7.2's optimizer which failed this test with
9022            a direct f = -123. assignment.  gcc-2.8.0 reportedly
9023            optimized the whole file away
9024         */
9025         /* Store the number in a writable string for gcc to pass to 
9026            sscanf under HP/UX.
9027         */
9028         sprintf(str, "-123");
9029         sscanf(str, "%lf", &f);  /* f = -123.; */
9030
9031         signal(SIGFPE, blech);
9032         along = (unsigned long)f;
9033         aint = (unsigned int)f;
9034         ashort = (unsigned short)f;
9035         if (along != (unsigned long)-123)
9036                 result |= 1;
9037         if (aint != (unsigned int)-123)
9038                 result |= 1;
9039         if (ashort != (unsigned short)-123)
9040                 result |= 1;
9041         sprintf(str, "1073741824.");
9042         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
9043         f = f + f;
9044         along = 0;
9045         along = (unsigned long)f;
9046         if (along != 0x80000000)
9047                 result |= 2;
9048         f -= 1.;
9049         along = 0;
9050         along = (unsigned long)f;
9051         if (along != 0x7fffffff)
9052                 result |= 1;
9053         f += 2.;
9054         along = 0;
9055         along = (unsigned long)f;
9056         if (along != 0x80000001)
9057                 result |= 2;
9058         if (result)
9059                 exit(result);
9060         signal(SIGFPE, blech_in_list);
9061         sprintf(str, "123.");
9062         sscanf(str, "%lf", &f);  /* f = 123.; */
9063         along = dummy_long((unsigned long)f);
9064         aint = dummy_int((unsigned int)f);
9065         ashort = dummy_short((unsigned short)f);
9066         if (along != (unsigned long)123)
9067                 result |= 4;
9068         if (aint != (unsigned int)123)
9069                 result |= 4;
9070         if (ashort != (unsigned short)123)
9071                 result |= 4;
9072         exit(result);
9073
9074 }
9075 EOCP
9076 set try
9077 if eval $compile_ok; then
9078         $run ./try
9079         castflags=$?
9080 else
9081         echo "(I can't seem to compile the test program--assuming it can't)"
9082         castflags=7
9083 fi
9084 case "$castflags" in
9085 0)      val="$define"
9086         echo "Yup, it can."
9087         ;;
9088 *)      val="$undef"
9089         echo "Nope, it can't."
9090         ;;
9091 esac
9092 set d_castneg
9093 eval $setvar
9094 $rm -f try.*
9095
9096 : see if vprintf exists
9097 echo " "
9098 if set vprintf val -f d_vprintf; eval $csym; $val; then
9099         echo 'vprintf() found.' >&4
9100         val="$define"
9101         $cat >try.c <<'EOF'
9102 #include <varargs.h>
9103
9104 int main() { xxx("foo"); }
9105
9106 xxx(va_alist)
9107 va_dcl
9108 {
9109         va_list args;
9110         char buf[10];
9111
9112         va_start(args);
9113         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
9114 }
9115 EOF
9116         set try
9117         if eval $compile && $run ./try; then
9118                 echo "Your vsprintf() returns (int)." >&4
9119                 val2="$undef"
9120         else
9121                 echo "Your vsprintf() returns (char*)." >&4
9122                 val2="$define"
9123         fi
9124 else
9125         echo 'vprintf() NOT found.' >&4
9126                 val="$undef"
9127                 val2="$undef"
9128 fi
9129 $rm -f try try.*
9130 set d_vprintf
9131 eval $setvar
9132 val=$val2
9133 set d_charvspr
9134 eval $setvar
9135
9136 : see if chown exists
9137 set chown d_chown
9138 eval $inlibc
9139
9140 : see if chroot exists
9141 set chroot d_chroot
9142 eval $inlibc
9143
9144 : see if chsize exists
9145 set chsize d_chsize
9146 eval $inlibc
9147
9148 : see if class exists
9149 set class d_class
9150 eval $inlibc
9151
9152 hasstruct='varname=$1; struct=$2; shift; shift;
9153 while $test $# -ge 2; do
9154         case "$1" in
9155         $define) echo "#include <$2>";;
9156         esac ;
9157     shift 2;
9158 done > try.c;
9159 echo "int main () { struct $struct foo; }" >> try.c;
9160 set try;
9161 if eval $compile; then
9162         val="$define";
9163 else
9164         val="$undef";
9165 fi;
9166 set $varname;
9167 eval $setvar;
9168 $rm -f try.c try.o'
9169
9170 : see if sys/types.h has to be included
9171 set sys/types.h i_systypes
9172 eval $inhdr
9173
9174 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9175 while $test $# -ge 2; do
9176         case "$1" in
9177         $define) echo "#include <$2>";;
9178         esac ;
9179     shift 2;
9180 done > try.c;
9181 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9182 set try;
9183 if eval $compile; then
9184         val="$define";
9185 else
9186         val="$undef";
9187 fi;
9188 set $varname;
9189 eval $setvar;
9190 $rm -f try.c try.o'
9191
9192 socketlib=''
9193 sockethdr=''
9194 : see whether socket exists
9195 echo " "
9196 $echo $n "Hmm... $c" >&4
9197 if set socket val -f d_socket; eval $csym; $val; then
9198         echo "Looks like you have Berkeley networking support." >&4
9199         d_socket="$define"
9200         if set setsockopt val -f; eval $csym; $val; then
9201                 d_oldsock="$undef"
9202         else
9203                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9204                 d_oldsock="$define"
9205         fi
9206 else
9207         if $contains socklib libc.list >/dev/null 2>&1; then
9208                 echo "Looks like you have Berkeley networking support." >&4
9209                 d_socket="$define"
9210                 : we will have to assume that it supports the 4.2 BSD interface
9211                 d_oldsock="$undef"
9212         else
9213                 echo "You don't have Berkeley networking in libc$_a..." >&4
9214                 if test "X$d_socket" = "X$define"; then
9215                    echo "...but you seem to believe that you have sockets." >&4
9216                 else
9217                         for net in net socket
9218                         do
9219                                 if test -f /usr/lib/lib$net$_a; then
9220                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9221                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9222                                         if $contains socket libc.list >/dev/null 2>&1; then
9223                                                 d_socket="$define"
9224                                                 socketlib="-l$net"
9225                                                 case "$net" in
9226                                                 net)
9227                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9228                                                         sockethdr="-I/usr/netinclude"
9229                                                         ;;
9230                                                 esac
9231                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9232                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9233                                                         d_oldsock="$undef"
9234                                                 else
9235                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9236                                                         d_oldsock="$define"
9237                                                 fi
9238                                                 break
9239                                         fi
9240                                 fi
9241                         done
9242                         if test "X$d_socket" != "X$define"; then
9243                            echo "or anywhere else I see." >&4
9244                            d_socket="$undef"
9245                            d_oldsock="$undef"
9246                         fi
9247                 fi
9248         fi
9249 fi
9250
9251 : see if socketpair exists
9252 set socketpair d_sockpair
9253 eval $inlibc
9254
9255
9256 echo " "
9257 echo "Checking the availability of certain socket constants..." >& 4
9258 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9259         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9260         $cat >try.c <<EOF
9261 #include <sys/types.h>
9262 #include <sys/socket.h>
9263 int main() {
9264     int i = $ENUM;
9265 }
9266 EOF
9267         val="$undef"
9268         set try; if eval $compile; then
9269                 val="$define"
9270         fi
9271         set d_${enum}; eval $setvar
9272         $rm -f try.c try
9273 done
9274
9275 : see if this is a sys/uio.h system
9276 set sys/uio.h i_sysuio
9277 eval $inhdr
9278
9279
9280 echo " "
9281 echo "Checking to see if your system supports struct cmsghdr..." >&4
9282 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9283 eval $hasstruct
9284 case "$d_cmsghdr_s" in
9285 "$define")      echo "Yes, it does."   ;;
9286 *)              echo "No, it doesn't." ;;
9287 esac
9288
9289
9290 : check for const keyword
9291 echo " "
9292 echo 'Checking to see if your C compiler knows about "const"...' >&4
9293 $cat >const.c <<'EOCP'
9294 typedef struct spug { int drokk; } spug;
9295 int main()
9296 {
9297         const char *foo;
9298         const spug y;
9299 }
9300 EOCP
9301 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9302         val="$define"
9303         echo "Yup, it does."
9304 else
9305         val="$undef"
9306         echo "Nope, it doesn't."
9307 fi
9308 set d_const
9309 eval $setvar
9310
9311 : see if crypt exists
9312 echo " "
9313 if set crypt val -f d_crypt; eval $csym; $val; then
9314         echo 'crypt() found.' >&4
9315         val="$define"
9316         cryptlib=''
9317 else
9318         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9319         if $test -z "$cryptlib"; then
9320                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9321         else
9322                 cryptlib=-lcrypt
9323         fi
9324         if $test -z "$cryptlib"; then
9325                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9326         else
9327                 cryptlib=-lcrypt
9328         fi
9329         if $test -z "$cryptlib"; then
9330                 cryptlib=`./loc libcrypt$_a "" $libpth`
9331         else
9332                 cryptlib=-lcrypt
9333         fi
9334         if $test -z "$cryptlib"; then
9335                 echo 'crypt() NOT found.' >&4
9336                 val="$undef"
9337         else
9338                 val="$define"
9339         fi
9340 fi
9341 set d_crypt
9342 eval $setvar
9343
9344 : get csh whereabouts
9345 case "$csh" in
9346 'csh') val="$undef" ;;
9347 *) val="$define" ;;
9348 esac
9349 set d_csh
9350 eval $setvar
9351 : Respect a hint or command line value for full_csh.
9352 case "$full_csh" in
9353 '') full_csh=$csh ;;
9354 esac
9355
9356 : see if cuserid exists
9357 set cuserid d_cuserid
9358 eval $inlibc
9359
9360 : see if this is a limits.h system
9361 set limits.h i_limits
9362 eval $inhdr
9363
9364 : see if this is a float.h system
9365 set float.h i_float
9366 eval $inhdr
9367
9368 : See if number of significant digits in a double precision number is known
9369 echo " "
9370 $cat >dbl_dig.c <<EOM
9371 #$i_limits I_LIMITS
9372 #$i_float I_FLOAT
9373 #ifdef I_LIMITS
9374 #include <limits.h>
9375 #endif
9376 #ifdef I_FLOAT
9377 #include <float.h>
9378 #endif
9379 #ifdef DBL_DIG
9380 printf("Contains DBL_DIG");
9381 #endif
9382 EOM
9383 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9384 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9385         echo "DBL_DIG found." >&4
9386         val="$define"
9387 else
9388         echo "DBL_DIG NOT found." >&4
9389         val="$undef"
9390 fi
9391 $rm -f dbl_dig.?
9392 set d_dbl_dig
9393 eval $setvar
9394
9395 hasproto='varname=$1; func=$2; shift; shift;
9396 while $test $# -ge 2; do
9397         case "$1" in
9398         $define) echo "#include <$2>";;
9399         esac ;
9400     shift 2;
9401 done > try.c;
9402 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9403 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9404         echo "$func() prototype found.";
9405         val="$define";
9406 else
9407         echo "$func() prototype NOT found.";
9408         val="$undef";
9409 fi;
9410 set $varname;
9411 eval $setvar;
9412 $rm -f try.c tryout.c'
9413
9414 : see if dbm.h is available
9415 : see if dbmclose exists
9416 set dbmclose d_dbmclose
9417 eval $inlibc
9418
9419 case "$d_dbmclose" in
9420 $define)
9421         set dbm.h i_dbm
9422         eval $inhdr
9423         case "$i_dbm" in
9424         $define)
9425                 val="$undef"
9426                 set i_rpcsvcdbm
9427                 eval $setvar
9428                 ;;
9429         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9430                 eval $inhdr
9431                 ;;
9432         esac
9433         ;;
9434 *)      echo "We won't be including <dbm.h>"
9435         val="$undef"
9436         set i_dbm
9437         eval $setvar
9438         val="$undef"
9439         set i_rpcsvcdbm
9440         eval $setvar
9441         ;;
9442 esac
9443
9444 : see if prototype for dbminit is available
9445 echo " "
9446 set d_dbminitproto dbminit $i_dbm dbm.h
9447 eval $hasproto
9448
9449 : see if difftime exists
9450 set difftime d_difftime
9451 eval $inlibc
9452
9453 : see if this is a dirent system
9454 echo " "
9455 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9456         val="$define"
9457         echo "<dirent.h> found." >&4
9458 else
9459         val="$undef"
9460         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9461                 echo "<sys/dir.h> found." >&4
9462                 echo " "
9463         else
9464                 xinc=`./findhdr sys/ndir.h`
9465         fi
9466         echo "<dirent.h> NOT found." >&4
9467 fi
9468 set i_dirent
9469 eval $setvar
9470
9471 : Look for type of directory structure.
9472 echo " "
9473 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9474
9475 case "$direntrytype" in
9476 ''|' ')
9477         case "$i_dirent" in
9478         $define) guess1='struct dirent' ;;
9479         *) guess1='struct direct'  ;;
9480         esac
9481         ;;
9482 *)      guess1="$direntrytype"
9483         ;;
9484 esac
9485
9486 case "$guess1" in
9487 'struct dirent') guess2='struct direct' ;;
9488 *) guess2='struct dirent' ;;
9489 esac
9490                 
9491 if $contains "$guess1" try.c >/dev/null 2>&1; then
9492         direntrytype="$guess1"
9493         echo "Your directory entries are $direntrytype." >&4
9494 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9495         direntrytype="$guess2"
9496         echo "Your directory entries seem to be $direntrytype." >&4
9497 else
9498         echo "I don't recognize your system's directory entries." >&4
9499         rp="What type is used for directory entries on this system?"
9500         dflt="$guess1"
9501         . ./myread
9502         direntrytype="$ans"
9503 fi
9504 $rm -f try.c
9505
9506
9507 : see if the directory entry stores field length
9508 echo " "
9509 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9510 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9511         echo "Good, your directory entry keeps length information in d_namlen." >&4
9512         val="$define"
9513 else
9514         echo "Your directory entry does not know about the d_namlen field." >&4
9515         val="$undef"
9516 fi
9517 set d_dirnamlen
9518 eval $setvar
9519 $rm -f try.c
9520
9521 : see if this is an sysdir system
9522 set sys/dir.h i_sysdir
9523 eval $inhdr
9524
9525 : see if this is an sysndir system
9526 set sys/ndir.h i_sysndir
9527 eval $inhdr
9528
9529 : Look for dirfd
9530 echo " "
9531 $cat >dirfd.c <<EOM
9532 #include <stdio.h>
9533 #$i_dirent I_DIRENT             /**/
9534 #$i_sysdir I_SYS_DIR            /**/
9535 #$i_sysndir I_SYS_NDIR          /**/
9536 #$i_systypes I_SYS_TYPES        /**/
9537 #if defined(I_SYS_TYPES)
9538 #include <sys/types.h>
9539 #endif
9540 #if defined(I_DIRENT)
9541 #include <dirent.h>
9542 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
9543 #include <sys/dir.h>
9544 #endif
9545 #else
9546 #ifdef I_SYS_NDIR
9547 #include <sys/ndir.h>
9548 #else
9549 #ifdef I_SYS_DIR
9550 #ifdef hp9000s500
9551 #include <ndir.h>       /* may be wrong in the future */
9552 #else
9553 #include <sys/dir.h>
9554 #endif
9555 #endif
9556 #endif
9557 #endif 
9558 int main() {
9559         DIR *dirp = opendir(".");
9560         if (dirfd(dirp) >= 0)
9561                 exit(0);
9562         else
9563                 exit(1);
9564 }
9565 EOM
9566 set dirfd
9567 if eval $compile; then
9568         val="$define"
9569 fi
9570 case "$val" in
9571 $define)        echo "dirfd() found." >&4       ;;
9572 *)              echo "dirfd() NOT found." >&4   ;;
9573 esac
9574 set d_dirfd
9575 eval $setvar
9576 $rm -f dirfd*
9577
9578 : see if dlerror exists
9579 xxx_runnm="$runnm"
9580 runnm=false
9581 set dlerror d_dlerror
9582 eval $inlibc
9583 runnm="$xxx_runnm"
9584
9585 : see if dlfcn is available
9586 set dlfcn.h i_dlfcn
9587 eval $inhdr
9588
9589 case "$usedl" in
9590 $define|y|true)
9591         $cat << EOM
9592
9593 On a few systems, the dynamically loaded modules that perl generates and uses
9594 will need a different extension than shared libs. The default will probably
9595 be appropriate.
9596
9597 EOM
9598         case "$dlext" in
9599         '')     dflt="$so" ;;
9600         *)      dflt="$dlext" ;;
9601         esac
9602         rp='What is the extension of dynamically loaded modules'
9603         . ./myread
9604         dlext="$ans"
9605         ;;
9606 *)
9607         dlext="none"
9608         ;;
9609 esac
9610
9611 : Check if dlsym need a leading underscore
9612 echo " "
9613 val="$undef"
9614
9615 case "$dlsrc" in
9616 dl_dlopen.xs)
9617         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9618         $cat >dyna.c <<'EOM'
9619 fred () { }
9620 EOM
9621
9622 $cat >fred.c<<EOM
9623
9624 #include <stdio.h>
9625 #$i_dlfcn I_DLFCN
9626 #ifdef I_DLFCN
9627 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9628 #else
9629 #include <sys/types.h>
9630 #include <nlist.h>
9631 #include <link.h>
9632 #endif
9633
9634 extern int fred() ;
9635
9636 int main()
9637 {
9638     void * handle ;
9639     void * symbol ;
9640 #ifndef RTLD_LAZY
9641     int mode = 1 ;
9642 #else
9643     int mode = RTLD_LAZY ;
9644 #endif
9645     handle = dlopen("./dyna.$dlext", mode) ;
9646     if (handle == NULL) {
9647         printf ("1\n") ;
9648         fflush (stdout) ;
9649         exit(0);
9650     }
9651     symbol = dlsym(handle, "fred") ;
9652     if (symbol == NULL) {
9653         /* try putting a leading underscore */
9654         symbol = dlsym(handle, "_fred") ;
9655         if (symbol == NULL) {
9656             printf ("2\n") ;
9657             fflush (stdout) ;
9658             exit(0);
9659         }
9660         printf ("3\n") ;
9661     }
9662     else
9663         printf ("4\n") ;
9664     fflush (stdout) ;
9665     exit(0);
9666 }
9667 EOM
9668         : Call the object file tmp-dyna.o in case dlext=o.
9669         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9670                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9671                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9672                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9673                 xxx=`$run ./fred`
9674                 case $xxx in
9675                 1)      echo "Test program failed using dlopen." >&4
9676                         echo "Perhaps you should not use dynamic loading." >&4;;
9677                 2)      echo "Test program failed using dlsym." >&4
9678                         echo "Perhaps you should not use dynamic loading." >&4;;
9679                 3)      echo "dlsym needs a leading underscore" >&4
9680                         val="$define" ;;
9681                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9682                 esac
9683         else
9684                 echo "I can't compile and run the test program." >&4
9685                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9686         fi
9687         ;;
9688 esac
9689                 
9690 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9691
9692 set d_dlsymun
9693 eval $setvar
9694
9695 : see if prototype for drand48 is available
9696 echo " "
9697 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9698 eval $hasproto
9699
9700 : see if dup2 exists
9701 set dup2 d_dup2
9702 eval $inlibc
9703
9704 : see if eaccess exists
9705 set eaccess d_eaccess
9706 eval $inlibc
9707
9708 : see if endgrent exists
9709 set endgrent d_endgrent
9710 eval $inlibc
9711
9712 : see if endhostent exists
9713 set endhostent d_endhent
9714 eval $inlibc
9715
9716 : see if endnetent exists
9717 set endnetent d_endnent
9718 eval $inlibc
9719
9720 : see if endprotoent exists
9721 set endprotoent d_endpent
9722 eval $inlibc
9723
9724 : see if endpwent exists
9725 set endpwent d_endpwent
9726 eval $inlibc
9727
9728 : see if endservent exists
9729 set endservent d_endsent
9730 eval $inlibc
9731
9732 : Locate the flags for 'open()'
9733 echo " "
9734 $cat >try.c <<'EOCP'
9735 #include <sys/types.h>
9736 #ifdef I_FCNTL
9737 #include <fcntl.h>
9738 #endif
9739 #ifdef I_SYS_FILE
9740 #include <sys/file.h>
9741 #endif
9742 int main() {
9743         if(O_RDONLY);
9744 #ifdef O_TRUNC
9745         exit(0);
9746 #else
9747         exit(1);
9748 #endif
9749 }
9750 EOCP
9751 : check sys/file.h first to get FREAD on Sun
9752 if $test `./findhdr sys/file.h` && \
9753                 set try -DI_SYS_FILE && eval $compile; then
9754         h_sysfile=true;
9755         echo "<sys/file.h> defines the O_* constants..." >&4
9756         if $run ./try; then
9757                 echo "and you have the 3 argument form of open()." >&4
9758                 val="$define"
9759         else
9760                 echo "but not the 3 argument form of open().  Oh, well." >&4
9761                 val="$undef"
9762         fi
9763 elif $test `./findhdr fcntl.h` && \
9764                 set try -DI_FCNTL && eval $compile; then
9765         h_fcntl=true;
9766         echo "<fcntl.h> defines the O_* constants..." >&4
9767         if $run ./try; then
9768                 echo "and you have the 3 argument form of open()." >&4
9769                 val="$define"
9770         else
9771                 echo "but not the 3 argument form of open().  Oh, well." >&4
9772                 val="$undef"
9773         fi
9774 else
9775         val="$undef"
9776         echo "I can't find the O_* constant definitions!  You got problems." >&4
9777 fi
9778 set d_open3
9779 eval $setvar
9780 $rm -f try try.*
9781
9782 : see which of string.h or strings.h is needed
9783 echo " "
9784 strings=`./findhdr string.h`
9785 if $test "$strings" && $test -r "$strings"; then
9786         echo "Using <string.h> instead of <strings.h>." >&4
9787         val="$define"
9788 else
9789         val="$undef"
9790         strings=`./findhdr strings.h`
9791         if $test "$strings" && $test -r "$strings"; then
9792                 echo "Using <strings.h> instead of <string.h>." >&4
9793         else
9794                 echo "No string header found -- You'll surely have problems." >&4
9795         fi
9796 fi
9797 set i_string
9798 eval $setvar
9799 case "$i_string" in
9800 "$undef") strings=`./findhdr strings.h`;;
9801 *)        strings=`./findhdr string.h`;;
9802 esac
9803
9804 : check for non-blocking I/O stuff
9805 case "$h_sysfile" in
9806 true) echo "#include <sys/file.h>" > head.c;;
9807 *)
9808        case "$h_fcntl" in
9809        true) echo "#include <fcntl.h>" > head.c;;
9810        *) echo "#include <sys/fcntl.h>" > head.c;;
9811        esac
9812        ;;
9813 esac
9814 echo " "
9815 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9816 case "$o_nonblock" in
9817 '')
9818         $cat head.c > try.c
9819         $cat >>try.c <<'EOCP'
9820 #include <stdio.h>
9821 #include <stdlib.h>
9822 int main() {
9823 #ifdef O_NONBLOCK
9824         printf("O_NONBLOCK\n");
9825         exit(0);
9826 #endif
9827 #ifdef O_NDELAY
9828         printf("O_NDELAY\n");
9829         exit(0);
9830 #endif
9831 #ifdef FNDELAY
9832         printf("FNDELAY\n");
9833         exit(0);
9834 #endif
9835         exit(0);
9836 }
9837 EOCP
9838         set try
9839         if eval $compile_ok; then
9840                 o_nonblock=`$run ./try`
9841                 case "$o_nonblock" in
9842                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9843                 *) echo "Seems like we can use $o_nonblock.";;
9844                 esac
9845         else
9846                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9847         fi
9848         ;;
9849 *) echo "Using $hint value $o_nonblock.";;
9850 esac
9851 $rm -f try try.* .out core
9852
9853 echo " "
9854 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9855 case "$eagain" in
9856 '')
9857         $cat head.c > try.c
9858         $cat >>try.c <<EOCP
9859 #include <errno.h>
9860 #include <sys/types.h>
9861 #include <signal.h>
9862 #include <stdio.h> 
9863 #include <stdlib.h> 
9864 #define MY_O_NONBLOCK $o_nonblock
9865 #ifndef errno  /* XXX need better Configure test */
9866 extern int errno;
9867 #endif
9868 #$i_unistd I_UNISTD
9869 #ifdef I_UNISTD
9870 #include <unistd.h>
9871 #endif
9872 #$i_string I_STRING
9873 #ifdef I_STRING
9874 #include <string.h>
9875 #else
9876 #include <strings.h>
9877 #endif
9878 $signal_t blech(x) int x; { exit(3); }
9879 EOCP
9880         $cat >> try.c <<'EOCP'
9881 int main()
9882 {
9883         int pd[2];
9884         int pu[2];
9885         char buf[1];
9886         char string[100];
9887
9888         pipe(pd);       /* Down: child -> parent */
9889         pipe(pu);       /* Up: parent -> child */
9890         if (0 != fork()) {
9891                 int ret;
9892                 close(pd[1]);   /* Parent reads from pd[0] */
9893                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9894 #ifdef F_SETFL
9895                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9896                         exit(1);
9897 #else
9898                 exit(4);
9899 #endif
9900                 signal(SIGALRM, blech);
9901                 alarm(5);
9902                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9903                         exit(2);
9904                 sprintf(string, "%d\n", ret);
9905                 write(2, string, strlen(string));
9906                 alarm(0);
9907 #ifdef EAGAIN
9908                 if (errno == EAGAIN) {
9909                         printf("EAGAIN\n");
9910                         goto ok;
9911                 }
9912 #endif
9913 #ifdef EWOULDBLOCK
9914                 if (errno == EWOULDBLOCK)
9915                         printf("EWOULDBLOCK\n");
9916 #endif
9917         ok:
9918                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9919                 sleep(2);                               /* Give it time to close our pipe */
9920                 alarm(5);
9921                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9922                 alarm(0);
9923                 sprintf(string, "%d\n", ret);
9924                 write(3, string, strlen(string));
9925                 exit(0);
9926         }
9927
9928         close(pd[0]);                   /* We write to pd[1] */
9929         close(pu[1]);                   /* We read from pu[0] */
9930         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9931         close(pd[1]);                   /* Pipe pd is now fully closed! */
9932         exit(0);                                /* Bye bye, thank you for playing! */
9933 }
9934 EOCP
9935         set try
9936         if eval $compile_ok; then
9937                 echo "$startsh" >mtry
9938                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9939                 chmod +x mtry
9940                 ./mtry >/dev/null 2>&1
9941                 case $? in
9942                 0) eagain=`$cat try.out`;;
9943                 1) echo "Could not perform non-blocking setting!";;
9944                 2) echo "I did a successful read() for something that was not there!";;
9945                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9946                 4) echo "Could not find F_SETFL!";;
9947                 *) echo "Something terribly wrong happened during testing.";;
9948                 esac
9949                 rd_nodata=`$cat try.ret`
9950                 echo "A read() system call with no data present returns $rd_nodata."
9951                 case "$rd_nodata" in
9952                 0|-1) ;;
9953                 *)
9954                         echo "(That's peculiar, fixing that to be -1.)"
9955                         rd_nodata=-1
9956                         ;;
9957                 esac
9958                 case "$eagain" in
9959                 '')
9960                         echo "Forcing errno EAGAIN on read() with no data available."
9961                         eagain=EAGAIN
9962                         ;;
9963                 *)
9964                         echo "Your read() sets errno to $eagain when no data is available."
9965                         ;;
9966                 esac
9967                 status=`$cat try.err`
9968                 case "$status" in
9969                 0) echo "And it correctly returns 0 to signal EOF.";;
9970                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9971                 *) echo "However, your read() returns '$status' on EOF??";;
9972                 esac
9973                 val="$define"
9974                 if test "$status" = "$rd_nodata"; then
9975                         echo "WARNING: you can't distinguish between EOF and no data!"
9976                         val="$undef"
9977                 fi
9978         else
9979                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9980                 eagain=EAGAIN
9981         fi
9982         set d_eofnblk
9983         eval $setvar
9984         ;;
9985 *)
9986         echo "Using $hint value $eagain."
9987         echo "Your read() returns $rd_nodata when no data is present."
9988         case "$d_eofnblk" in
9989         "$define") echo "And you can see EOF because read() returns 0.";;
9990         "$undef") echo "But you can't see EOF status from read() returned value.";;
9991         *)
9992                 echo "(Assuming you can't see EOF status from read anyway.)"
9993                 d_eofnblk=$undef
9994                 ;;
9995         esac
9996         ;;
9997 esac
9998 $rm -f try try.* .out core head.c mtry
9999
10000 : see if fchdir exists
10001 set fchdir d_fchdir
10002 eval $inlibc
10003
10004 : see if fchmod exists
10005 set fchmod d_fchmod
10006 eval $inlibc
10007
10008 : see if fchown exists
10009 set fchown d_fchown
10010 eval $inlibc
10011
10012 : see if this is an fcntl system
10013 set fcntl d_fcntl
10014 eval $inlibc
10015
10016 echo " "
10017 : See if fcntl-based locking works.
10018 $cat >try.c <<EOCP
10019 #include <stdlib.h>
10020 #include <unistd.h>
10021 #include <fcntl.h>
10022 #include <signal.h>
10023 $signal_t blech(x) int x; { exit(3); }
10024 int main() {
10025 #if defined(F_SETLK) && defined(F_SETLKW)
10026      struct flock flock;
10027      int retval, fd;
10028      fd = open("try.c", O_RDONLY);
10029      flock.l_type = F_RDLCK;
10030      flock.l_whence = SEEK_SET;
10031      flock.l_start = flock.l_len = 0;
10032      signal(SIGALRM, blech);
10033      alarm(10);
10034      retval = fcntl(fd, F_SETLK, &flock);
10035      close(fd);
10036      (retval < 0 ? exit(2) : exit(0));
10037 #else
10038      exit(2);
10039 #endif
10040 }
10041 EOCP
10042 echo "Checking if fcntl-based file locking works... "
10043 case "$d_fcntl" in
10044 "$define")
10045         set try
10046         if eval $compile_ok; then
10047                 if $run ./try; then
10048                         echo "Yes, it seems to work."
10049                         val="$define"
10050                 else
10051                         echo "Nope, it didn't work."
10052                         val="$undef"
10053                         case "$?" in
10054                         3) $cat >&4 <<EOM
10055 ***
10056 *** I had to forcibly timeout from fcntl(..., F_SETLK, ...).
10057 *** This is (almost) impossible.
10058 *** If your NFS lock daemons are not feeling well, something like
10059 *** this may happen, please investigate.  Cannot continue, aborting.
10060 ***
10061 EOM
10062                                 exit 1
10063                                 ;;
10064                         esac
10065                 fi
10066         else
10067                 echo "I'm unable to compile the test program, so I'll assume not."
10068                 val="$undef"
10069         fi
10070         ;;
10071 *) val="$undef";
10072         echo "Nope, since you don't even have fcntl()."
10073         ;;
10074 esac
10075 set d_fcntl_can_lock
10076 eval $setvar
10077 $rm -f try*
10078
10079
10080 : see if sys/select.h has to be included
10081 set sys/select.h i_sysselct
10082 eval $inhdr
10083
10084 : see if we should include time.h, sys/time.h, or both
10085 echo " "
10086 if test "X$timeincl" = X; then
10087         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
10088         $echo $n "I'm now running the test program...$c"
10089         $cat >try.c <<'EOCP'
10090 #include <sys/types.h>
10091 #ifdef I_TIME
10092 #include <time.h>
10093 #endif
10094 #ifdef I_SYSTIME
10095 #ifdef SYSTIMEKERNEL
10096 #define KERNEL
10097 #endif
10098 #include <sys/time.h>
10099 #endif
10100 #ifdef I_SYSSELECT
10101 #include <sys/select.h>
10102 #endif
10103 int main()
10104 {
10105         struct tm foo;
10106 #ifdef S_TIMEVAL
10107         struct timeval bar;
10108 #endif
10109 #ifdef S_TIMEZONE
10110         struct timezone tzp;
10111 #endif
10112         if (foo.tm_sec == foo.tm_sec)
10113                 exit(0);
10114 #ifdef S_TIMEVAL
10115         if (bar.tv_sec == bar.tv_sec)
10116                 exit(0);
10117 #endif
10118         exit(1);
10119 }
10120 EOCP
10121         flags=''
10122         for s_timezone in '-DS_TIMEZONE' ''; do
10123         sysselect=''
10124         for s_timeval in '-DS_TIMEVAL' ''; do
10125         for i_systimek in '' '-DSYSTIMEKERNEL'; do
10126         for i_time in '' '-DI_TIME'; do
10127         for i_systime in '-DI_SYSTIME' ''; do
10128                 case "$flags" in
10129                 '') $echo $n ".$c"
10130                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
10131                         if eval $compile; then
10132                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
10133                                 shift
10134                                 flags="$*"
10135                                 echo " "
10136                                 $echo $n "Succeeded with $flags$c"
10137                         fi
10138                         ;;
10139                 esac
10140         done
10141         done
10142         done
10143         done
10144         done
10145         timeincl=''
10146         echo " "
10147         case "$flags" in
10148         *SYSTIMEKERNEL*) i_systimek="$define"
10149                 timeincl=`./findhdr sys/time.h`
10150                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
10151         *) i_systimek="$undef";;
10152         esac
10153         case "$flags" in
10154         *I_TIME*) i_time="$define"
10155                 timeincl=`./findhdr time.h`" $timeincl"
10156                 echo "We'll include <time.h>." >&4;;
10157         *) i_time="$undef";;
10158         esac
10159         case "$flags" in
10160         *I_SYSTIME*) i_systime="$define"
10161                 timeincl=`./findhdr sys/time.h`" $timeincl"
10162                 echo "We'll include <sys/time.h>." >&4;;
10163         *) i_systime="$undef";;
10164         esac
10165         $rm -f try.c try
10166 fi
10167
10168 : check for fd_set items
10169 $cat <<EOM
10170
10171 Checking to see how well your C compiler handles fd_set and friends ...
10172 EOM
10173 $cat >try.c <<EOCP
10174 #$i_systime I_SYS_TIME
10175 #$i_sysselct I_SYS_SELECT
10176 #$d_socket HAS_SOCKET
10177 #include <sys/types.h>
10178 #ifdef HAS_SOCKET
10179 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
10180 #endif
10181 #ifdef I_SYS_TIME
10182 #include <sys/time.h>
10183 #endif
10184 #ifdef I_SYS_SELECT
10185 #include <sys/select.h>
10186 #endif
10187 int main() {
10188         fd_set fds;
10189
10190 #ifdef TRYBITS
10191         if(fds.fds_bits);
10192 #endif
10193
10194 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
10195         exit(0);
10196 #else
10197         exit(1);
10198 #endif
10199 }
10200 EOCP
10201 set try -DTRYBITS
10202 if eval $compile; then
10203         d_fds_bits="$define"
10204         d_fd_set="$define"
10205         echo "Well, your system knows about the normal fd_set typedef..." >&4
10206         if $run ./try; then
10207                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
10208                 d_fd_macros="$define"
10209         else
10210                 $cat >&4 <<'EOM'
10211 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
10212 EOM
10213                 d_fd_macros="$undef"
10214         fi
10215 else
10216         $cat <<'EOM'
10217 Hmm, your compiler has some difficulty with fd_set.  Checking further...
10218 EOM
10219         set try
10220         if eval $compile; then
10221                 d_fds_bits="$undef"
10222                 d_fd_set="$define"
10223                 echo "Well, your system has some sort of fd_set available..." >&4
10224                 if $run ./try; then
10225                         echo "and you have the normal fd_set macros." >&4
10226                         d_fd_macros="$define"
10227                 else
10228                         $cat <<'EOM'
10229 but not the normal fd_set macros!  Gross!  More work for me...
10230 EOM
10231                         d_fd_macros="$undef"
10232                 fi
10233         else
10234         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
10235                 d_fd_set="$undef"
10236                 d_fds_bits="$undef"
10237                 d_fd_macros="$undef"
10238         fi
10239 fi
10240 $rm -f try try.*
10241
10242 : see if fgetpos exists
10243 set fgetpos d_fgetpos
10244 eval $inlibc
10245
10246 : see if finite exists
10247 set finite d_finite
10248 eval $inlibc
10249
10250 : see if finitel exists
10251 set finitel d_finitel
10252 eval $inlibc
10253
10254 : see if flock exists
10255 set flock d_flock
10256 eval $inlibc
10257
10258 : see if this is a sys/file.h system
10259 val=''
10260 set sys/file.h val
10261 eval $inhdr
10262
10263 : do we need to include sys/file.h ?
10264 case "$val" in
10265 "$define")
10266         echo " "
10267         if $h_sysfile; then
10268                 val="$define"
10269                 echo "We'll be including <sys/file.h>." >&4
10270         else
10271                 val="$undef"
10272                 echo "We won't be including <sys/file.h>." >&4
10273         fi
10274         ;;
10275 *)
10276         h_sysfile=false
10277         ;;
10278 esac
10279 set i_sysfile
10280 eval $setvar
10281
10282 : see if prototype for flock is available
10283 echo " "
10284 set d_flockproto flock $i_sysfile sys/file.h
10285 eval $hasproto
10286
10287 : see if fork exists
10288 set fork d_fork
10289 eval $inlibc
10290
10291 : see if fp_class exists
10292 set fp_class d_fp_class
10293 eval $inlibc
10294
10295 : see if pathconf exists
10296 set pathconf d_pathconf
10297 eval $inlibc
10298
10299 : see if fpathconf exists
10300 set fpathconf d_fpathconf
10301 eval $inlibc
10302
10303 : see if fpclass exists
10304 set fpclass d_fpclass
10305 eval $inlibc
10306
10307 : see if fpclassify exists
10308 set fpclassify d_fpclassify
10309 eval $inlibc
10310
10311 : see if fpclassl exists
10312 set fpclassl d_fpclassl
10313 eval $inlibc
10314
10315
10316 : check for fpos64_t
10317 echo " "
10318 echo "Checking to see if you have fpos64_t..." >&4
10319 $cat >try.c <<EOCP
10320 #include <stdio.h>
10321 int main() { fpos64_t x = 7; }
10322 EOCP
10323 set try
10324 if eval $compile; then
10325         val="$define"
10326         echo "You have fpos64_t."
10327 else
10328         val="$undef"
10329         echo "You do not have fpos64_t."
10330         case "$fpossize" in
10331         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10332         esac
10333 fi
10334 $rm -f try.* try
10335 set d_fpos64_t
10336 eval $setvar
10337
10338 : see if frexpl exists
10339 set frexpl d_frexpl
10340 eval $inlibc
10341
10342 : see if this is a sys/param system
10343 set sys/param.h i_sysparam
10344 eval $inhdr
10345
10346 : see if this is a sys/mount.h system
10347 set sys/mount.h i_sysmount
10348 eval $inhdr
10349
10350
10351 echo " "
10352 echo "Checking to see if your system supports struct fs_data..." >&4
10353 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10354 eval $hasstruct
10355 case "$d_fs_data_s" in
10356 "$define")      echo "Yes, it does."   ;;
10357 *)              echo "No, it doesn't." ;;
10358 esac
10359
10360 : see if fseeko exists
10361 set fseeko d_fseeko
10362 eval $inlibc
10363 case "$longsize" in
10364 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10365 esac
10366
10367 : see if fsetpos exists
10368 set fsetpos d_fsetpos
10369 eval $inlibc
10370
10371
10372 : see if fstatfs exists
10373 set fstatfs d_fstatfs
10374 eval $inlibc
10375
10376
10377 : see if statvfs exists
10378 set statvfs d_statvfs
10379 eval $inlibc
10380
10381 : see if fstatvfs exists
10382 set fstatvfs d_fstatvfs
10383 eval $inlibc
10384
10385
10386 : see if fsync exists
10387 set fsync d_fsync
10388 eval $inlibc
10389
10390 : see if ftello exists
10391 set ftello d_ftello
10392 eval $inlibc
10393 case "$longsize" in
10394 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10395 esac
10396
10397 : see if getcwd exists
10398 set getcwd d_getcwd
10399 eval $inlibc
10400
10401 : see if getespwnam exists
10402 set getespwnam d_getespwnam
10403 eval $inlibc
10404
10405
10406 : see if getfsstat exists
10407 set getfsstat d_getfsstat
10408 eval $inlibc
10409
10410 : see if getgrent exists
10411 set getgrent d_getgrent
10412 eval $inlibc
10413
10414 : see if gethostbyaddr exists
10415 set gethostbyaddr d_gethbyaddr
10416 eval $inlibc
10417
10418 : see if gethostbyname exists
10419 set gethostbyname d_gethbyname
10420 eval $inlibc
10421
10422 : see if gethostent exists
10423 set gethostent d_gethent
10424 eval $inlibc
10425
10426 : see how we will look up host name
10427 echo " "
10428 call=''
10429 if set gethostname val -f d_gethname; eval $csym; $val; then
10430         echo 'gethostname() found.' >&4
10431         d_gethname="$define"
10432         call=gethostname
10433 fi
10434 if set uname val -f d_uname; eval $csym; $val; then
10435         if ./xenix; then
10436                 $cat <<'EOM'
10437 uname() was found, but you're running xenix, and older versions of xenix
10438 have a broken uname(). If you don't really know whether your xenix is old
10439 enough to have a broken system call, use the default answer.
10440
10441 EOM
10442                 dflt=y
10443                 case "$d_uname" in
10444                 "$define") dflt=n;;
10445                 esac
10446                 rp='Is your uname() broken?'
10447                 . ./myread
10448                 case "$ans" in
10449                 n*) d_uname="$define"; call=uname;;
10450                 esac
10451         else
10452                 echo 'uname() found.' >&4
10453                 d_uname="$define"
10454                 case "$call" in
10455                 '') call=uname ;;
10456                 esac
10457         fi
10458 fi
10459 case "$d_gethname" in
10460 '') d_gethname="$undef";;
10461 esac
10462 case "$d_uname" in
10463 '') d_uname="$undef";;
10464 esac
10465 case "$d_uname$d_gethname" in
10466 *define*)
10467         dflt=n
10468         cat <<EOM
10469  
10470 Every now and then someone has a $call() that lies about the hostname
10471 but can't be fixed for political or economic reasons.  If you wish, I can
10472 pretend $call() isn't there and maybe compute hostname at run-time
10473 thanks to the '$phostname' command.
10474
10475 EOM
10476         rp="Shall I ignore $call() from now on?"
10477         . ./myread
10478         case "$ans" in
10479         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10480         esac;;
10481 esac
10482 case "$phostname" in
10483 '') aphostname='';;
10484 *) case "$aphostname" in
10485         /*) ;;
10486         *) set X $phostname
10487                 shift
10488                 file=$1
10489                 shift
10490                 file=`./loc $file $file $pth`
10491                 aphostname=`echo $file $*`
10492                 ;;
10493         esac
10494         ;;
10495 esac
10496 case "$d_uname$d_gethname" in
10497 *define*) ;;
10498 *)
10499         case "$phostname" in
10500         '')
10501                 echo "There will be no way for $package to get your hostname." >&4;;
10502         *)
10503         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10504                 ;;
10505         esac;;
10506 esac
10507 case "$d_phostname" in
10508 '') d_phostname="$undef";;
10509 esac
10510
10511 : see if this is a netdb.h system
10512 set netdb.h i_netdb
10513 eval $inhdr
10514
10515 : see if prototypes for various gethostxxx netdb.h functions are available
10516 echo " "
10517 set d_gethostprotos gethostent $i_netdb netdb.h
10518 eval $hasproto
10519
10520 : see if getitimer exists
10521 set getitimer d_getitimer
10522 eval $inlibc
10523
10524 : see if getlogin exists
10525 set getlogin d_getlogin
10526 eval $inlibc
10527
10528 : see if getmnt exists
10529 set getmnt d_getmnt
10530 eval $inlibc
10531
10532 : see if getmntent exists
10533 set getmntent d_getmntent
10534 eval $inlibc
10535
10536 : see if getnetbyaddr exists
10537 set getnetbyaddr d_getnbyaddr
10538 eval $inlibc
10539
10540 : see if getnetbyname exists
10541 set getnetbyname d_getnbyname
10542 eval $inlibc
10543
10544 : see if getnetent exists
10545 set getnetent d_getnent
10546 eval $inlibc
10547
10548 : see if prototypes for various getnetxxx netdb.h functions are available
10549 echo " "
10550 set d_getnetprotos getnetent $i_netdb netdb.h
10551 eval $hasproto
10552
10553 : see if getpagesize exists
10554 set getpagesize d_getpagsz
10555 eval $inlibc
10556
10557
10558 : see if getprotobyname exists
10559 set getprotobyname d_getpbyname
10560 eval $inlibc
10561
10562 : see if getprotobynumber exists
10563 set getprotobynumber d_getpbynumber
10564 eval $inlibc
10565
10566 : see if getprotoent exists
10567 set getprotoent d_getpent
10568 eval $inlibc
10569
10570 : see if getpgid exists
10571 set getpgid d_getpgid
10572 eval $inlibc
10573
10574 : see if getpgrp2 exists
10575 set getpgrp2 d_getpgrp2
10576 eval $inlibc
10577
10578 : see if getppid exists
10579 set getppid d_getppid
10580 eval $inlibc
10581
10582 : see if getpriority exists
10583 set getpriority d_getprior
10584 eval $inlibc
10585
10586 : see if prototypes for various getprotoxxx netdb.h functions are available
10587 echo " "
10588 set d_getprotoprotos getprotoent $i_netdb netdb.h
10589 eval $hasproto
10590
10591 : see if getprpwnam exists
10592 set getprpwnam d_getprpwnam
10593 eval $inlibc
10594
10595 : see if getpwent exists
10596 set getpwent d_getpwent
10597 eval $inlibc
10598
10599
10600 : see if getservbyname exists
10601 set getservbyname d_getsbyname
10602 eval $inlibc
10603
10604 : see if getservbyport exists
10605 set getservbyport d_getsbyport
10606 eval $inlibc
10607
10608 : see if getservent exists
10609 set getservent d_getsent
10610 eval $inlibc
10611
10612 : see if prototypes for various getservxxx netdb.h functions are available
10613 echo " "
10614 set d_getservprotos getservent $i_netdb netdb.h
10615 eval $hasproto
10616
10617 : see if getspnam exists
10618 set getspnam d_getspnam
10619 eval $inlibc
10620
10621 : see if gettimeofday or ftime exists
10622 set gettimeofday d_gettimeod
10623 eval $inlibc
10624 case "$d_gettimeod" in
10625 "$undef")
10626         set ftime d_ftime 
10627         eval $inlibc
10628         ;;
10629 *)
10630         val="$undef"; set d_ftime; eval $setvar
10631         ;;
10632 esac
10633 case "$d_gettimeod$d_ftime" in
10634 "$undef$undef")
10635         echo " "
10636         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10637         ;;
10638 esac
10639
10640 : see if this is an grp system
10641 set grp.h i_grp
10642 eval $inhdr
10643
10644 case "$i_grp" in
10645 $define)
10646         xxx=`./findhdr grp.h`
10647         $cppstdin $cppflags $cppminus < $xxx >$$.h
10648
10649         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10650                 val="$define"
10651         else
10652                 val="$undef"
10653         fi
10654         set d_grpasswd
10655         eval $setvar
10656
10657         $rm -f $$.h
10658         ;;
10659 *)
10660         val="$undef";
10661         set d_grpasswd; eval $setvar
10662         ;;
10663 esac
10664
10665 : see if hasmntopt exists
10666 set hasmntopt d_hasmntopt
10667 eval $inlibc
10668
10669 : see if this is a netinet/in.h or sys/in.h system
10670 set netinet/in.h i_niin sys/in.h i_sysin
10671 eval $inhdr
10672
10673 : see if arpa/inet.h has to be included
10674 set arpa/inet.h i_arpainet
10675 eval $inhdr
10676
10677 : see if htonl --and friends-- exists
10678 val=''
10679 set htonl val
10680 eval $inlibc
10681
10682 : Maybe they are macros.
10683 case "$val" in
10684 $undef)
10685         $cat >htonl.c <<EOM
10686 #include <stdio.h>
10687 #include <sys/types.h>
10688 #$i_niin I_NETINET_IN
10689 #$i_sysin I_SYS_IN
10690 #$i_arpainet I_ARPA_INET
10691 #ifdef I_NETINET_IN
10692 #include <netinet/in.h>
10693 #endif
10694 #ifdef I_SYS_IN
10695 #include <sys/in.h>
10696 #endif
10697 #ifdef I_ARPA_INET
10698 #include <arpa/inet.h>
10699 #endif
10700 #ifdef htonl
10701 printf("Defined as a macro.");
10702 #endif
10703 EOM
10704         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10705         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10706                 val="$define"
10707                 echo "But it seems to be defined as a macro." >&4
10708         fi
10709         $rm -f htonl.?
10710         ;;
10711 esac
10712 set d_htonl
10713 eval $setvar
10714
10715 : index or strchr
10716 echo " "
10717 if set index val -f; eval $csym; $val; then
10718         if set strchr val -f d_strchr; eval $csym; $val; then
10719                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10720                         val="$define"
10721                         vali="$undef"
10722                         echo "strchr() found." >&4
10723                 else
10724                         val="$undef"
10725                         vali="$define"
10726                         echo "index() found." >&4
10727                 fi
10728         else
10729                 val="$undef"
10730                 vali="$define"
10731                 echo "index() found." >&4
10732         fi
10733 else
10734         if set strchr val -f d_strchr; eval $csym; $val; then
10735                 val="$define"
10736                 vali="$undef"
10737                 echo "strchr() found." >&4
10738         else
10739                 echo "No index() or strchr() found!" >&4
10740                 val="$undef"
10741                 vali="$undef"
10742         fi
10743 fi
10744 set d_strchr; eval $setvar
10745 val="$vali"
10746 set d_index; eval $setvar
10747
10748 : check whether inet_aton exists
10749 set inet_aton d_inetaton
10750 eval $inlibc
10751
10752 : Look for isascii
10753 echo " "
10754 $cat >isascii.c <<'EOCP'
10755 #include <stdio.h>
10756 #include <ctype.h>
10757 int main() {
10758         int c = 'A';
10759         if (isascii(c))
10760                 exit(0);
10761         else
10762                 exit(1);
10763 }
10764 EOCP
10765 set isascii
10766 if eval $compile; then
10767         echo "isascii() found." >&4
10768         val="$define"
10769 else
10770         echo "isascii() NOT found." >&4
10771         val="$undef"
10772 fi
10773 set d_isascii
10774 eval $setvar
10775 $rm -f isascii*
10776
10777 : see if isfinite exists
10778 set isfinite d_isfinite
10779 eval $inlibc
10780
10781 : see if isinf exists
10782 set isinf d_isinf
10783 eval $inlibc
10784
10785 : see if isnan exists
10786 set isnan d_isnan
10787 eval $inlibc
10788
10789 : see if isnanl exists
10790 set isnanl d_isnanl
10791 eval $inlibc
10792
10793 : see if killpg exists
10794 set killpg d_killpg
10795 eval $inlibc
10796
10797 : see if lchown exists
10798 echo " "
10799 $cat > try.c <<'EOCP'
10800 /* System header to define __stub macros and hopefully few prototypes,
10801     which can conflict with char lchown(); below.  */
10802 #include <assert.h>
10803 /* Override any gcc2 internal prototype to avoid an error.  */
10804 /* We use char because int might match the return type of a gcc2
10805    builtin and then its argument prototype would still apply.  */
10806 char lchown();
10807 int main() {
10808     /*  The GNU C library defines this for functions which it implements
10809         to always fail with ENOSYS.  Some functions are actually named
10810         something starting with __ and the normal name is an alias.  */
10811 #if defined (__stub_lchown) || defined (__stub___lchown)
10812 choke me
10813 #else
10814 lchown();
10815 #endif
10816 ; return 0; }
10817 EOCP
10818 set try
10819 if eval $compile; then
10820     $echo "lchown() found." >&4
10821     val="$define"
10822 else
10823     $echo "lchown() NOT found." >&4
10824     val="$undef"
10825 fi
10826 set d_lchown
10827 eval $setvar
10828
10829 : See if number of significant digits in a double precision number is known
10830 echo " "
10831 $cat >ldbl_dig.c <<EOM
10832 #$i_limits I_LIMITS
10833 #$i_float I_FLOAT
10834 #ifdef I_LIMITS
10835 #include <limits.h>
10836 #endif
10837 #ifdef I_FLOAT
10838 #include <float.h>
10839 #endif
10840 #ifdef LDBL_DIG
10841 printf("Contains LDBL_DIG");
10842 #endif
10843 EOM
10844 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10845 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10846         echo "LDBL_DIG found." >&4
10847         val="$define"
10848 else
10849         echo "LDBL_DIG NOT found." >&4
10850         val="$undef"
10851 fi
10852 $rm -f ldbl_dig.?
10853 set d_ldbl_dig
10854 eval $setvar
10855
10856 : see if link exists
10857 set link d_link
10858 eval $inlibc
10859
10860 : see if localeconv exists
10861 set localeconv d_locconv
10862 eval $inlibc
10863
10864 : see if lockf exists
10865 set lockf d_lockf
10866 eval $inlibc
10867
10868 : see if prototype for lseek is available
10869 echo " "
10870 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10871 eval $hasproto
10872
10873 : see if lstat exists
10874 set lstat d_lstat
10875 eval $inlibc
10876
10877 : see if madvise exists
10878 set madvise d_madvise
10879 eval $inlibc
10880
10881 : see if mblen exists
10882 set mblen d_mblen
10883 eval $inlibc
10884
10885 : see if mbstowcs exists
10886 set mbstowcs d_mbstowcs
10887 eval $inlibc
10888
10889 : see if mbtowc exists
10890 set mbtowc d_mbtowc
10891 eval $inlibc
10892
10893 : see if memchr exists
10894 set memchr d_memchr
10895 eval $inlibc
10896
10897 : see if memcmp exists
10898 set memcmp d_memcmp
10899 eval $inlibc
10900
10901 : see if memcpy exists
10902 set memcpy d_memcpy
10903 eval $inlibc
10904
10905 : see if memmove exists
10906 set memmove d_memmove
10907 eval $inlibc
10908
10909 : see if memset exists
10910 set memset d_memset
10911 eval $inlibc
10912
10913 : see if mkdir exists
10914 set mkdir d_mkdir
10915 eval $inlibc
10916
10917 : see if mkdtemp exists
10918 set mkdtemp d_mkdtemp
10919 eval $inlibc
10920
10921 : see if mkfifo exists
10922 set mkfifo d_mkfifo
10923 eval $inlibc
10924
10925 : see if mkstemp exists
10926 set mkstemp d_mkstemp
10927 eval $inlibc
10928
10929 : see if mkstemps exists
10930 set mkstemps d_mkstemps
10931 eval $inlibc
10932
10933 : see if mktime exists
10934 set mktime d_mktime
10935 eval $inlibc
10936
10937 : see if this is a sys/mman.h system
10938 set sys/mman.h i_sysmman
10939 eval $inhdr
10940
10941 : see if mmap exists
10942 set mmap d_mmap
10943 eval $inlibc
10944 : see what shmat returns
10945 : default to something harmless
10946 mmaptype='void *'
10947 case "$i_sysmman$d_mmap" in
10948 "$define$define")
10949         $cat >mmap.c <<'END'
10950 #include <sys/mman.h>
10951 void *mmap();
10952 END
10953         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10954                 mmaptype='void *'
10955         else
10956                 mmaptype='caddr_t'
10957         fi
10958         echo "and it returns ($mmaptype)." >&4
10959         ;;
10960 esac
10961
10962
10963
10964 : see if modfl exists
10965 set modfl d_modfl
10966 eval $inlibc
10967
10968 d_modfl_pow32_bug="$undef"
10969
10970 case "$d_longdbl$d_modfl" in
10971 $define$define)
10972         $cat <<EOM
10973 Checking to see whether your modfl() is okay for large values...
10974 EOM
10975 $cat >try.c <<EOCP
10976 #include <math.h> 
10977 #include <stdio.h>
10978 int main() {
10979     long double nv = 4294967303.15;
10980     long double v, w;
10981     v = modfl(nv, &w);         
10982 #ifdef __GLIBC__
10983     printf("glibc");
10984 #endif
10985     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10986     return 0;
10987 }
10988 EOCP
10989         case "$osname:$gccversion" in
10990         aix:)   saveccflags="$ccflags"
10991                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10992         esac
10993         set try
10994         if eval $compile; then
10995                 foo=`$run ./try`
10996                 case "$foo" in
10997                 *" 4294967303.150000 1.150000 4294967302.000000")
10998                         echo >&4 "Your modfl() is broken for large values."
10999                         d_modfl_pow32_bug="$define"
11000                         case "$foo" in
11001                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
11002                         ;;
11003                         esac
11004                         ;;
11005                 *" 4294967303.150000 0.150000 4294967303.000000")
11006                         echo >&4 "Your modfl() seems okay for large values."
11007                         ;;
11008                 *)      echo >&4 "I don't understand your modfl() at all."
11009                         d_modfl="$undef"
11010                         ;;
11011                 esac
11012                 $rm -f try.* try core core.try.*
11013         else
11014                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
11015                 d_modfl="$undef"
11016         fi
11017         case "$osname:$gccversion" in
11018         aix:)   ccflags="$saveccflags" ;; # restore
11019         esac
11020         ;;
11021 esac
11022
11023 : see if mprotect exists
11024 set mprotect d_mprotect
11025 eval $inlibc
11026
11027 : see if msgctl exists
11028 set msgctl d_msgctl
11029 eval $inlibc
11030
11031 : see if msgget exists
11032 set msgget d_msgget
11033 eval $inlibc
11034
11035 : see if msgsnd exists
11036 set msgsnd d_msgsnd
11037 eval $inlibc
11038
11039 : see if msgrcv exists
11040 set msgrcv d_msgrcv
11041 eval $inlibc
11042
11043 : see how much of the 'msg*(2)' library is present.
11044 h_msg=true
11045 echo " "
11046 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
11047 *"$undef"*) h_msg=false;;
11048 esac
11049 case "$osname" in
11050 freebsd)
11051     case "`ipcs 2>&1`" in
11052     "SVID messages"*"not configured"*)
11053         echo "Your $osname does not have the msg*(2) configured." >&4
11054         h_msg=false
11055         val="$undef"
11056         set msgctl d_msgctl
11057         eval $setvar
11058         set msgget d_msgget
11059         eval $setvar
11060         set msgsnd d_msgsnd
11061         eval $setvar
11062         set msgrcv d_msgrcv
11063         eval $setvar
11064         ;;
11065     esac
11066     ;;
11067 esac
11068 : we could also check for sys/ipc.h ...
11069 if $h_msg && $test `./findhdr sys/msg.h`; then
11070         echo "You have the full msg*(2) library." >&4
11071         val="$define"
11072 else
11073         echo "You don't have the full msg*(2) library." >&4
11074         val="$undef"
11075 fi
11076 set d_msg
11077 eval $setvar
11078
11079
11080 echo " "
11081 echo "Checking to see if your system supports struct msghdr..." >&4
11082 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
11083 eval $hasstruct
11084 case "$d_msghdr_s" in
11085 "$define")      echo "Yes, it does."   ;;
11086 *)              echo "No, it doesn't." ;;
11087 esac
11088
11089
11090 : see if msync exists
11091 set msync d_msync
11092 eval $inlibc
11093
11094 : see if munmap exists
11095 set munmap d_munmap
11096 eval $inlibc
11097
11098 : see if nice exists
11099 set nice d_nice
11100 eval $inlibc
11101
11102 : see if this is a langinfo.h system
11103 set langinfo.h i_langinfo
11104 eval $inhdr
11105
11106 : see if nl_langinfo exists
11107 set nl_langinfo d_nl_langinfo
11108 eval $inlibc
11109
11110 : check for length of character
11111 echo " "
11112 case "$charsize" in
11113 '')
11114         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11115         $cat >try.c <<'EOCP'
11116 #include <stdio.h>
11117 int main()
11118 {
11119     printf("%d\n", (int)sizeof(char));
11120     exit(0);
11121 }
11122 EOCP
11123         set try
11124         if eval $compile_ok; then
11125                 dflt=`$run ./try`
11126         else
11127                 dflt='1'
11128                 echo "(I can't seem to compile the test program.  Guessing...)"
11129         fi
11130         ;;
11131 *)
11132         dflt="$charsize"
11133         ;;
11134 esac
11135 rp="What is the size of a character (in bytes)?"
11136 . ./myread
11137 charsize="$ans"
11138 $rm -f try.c try
11139
11140 : check for volatile keyword
11141 echo " "
11142 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11143 $cat >try.c <<'EOCP'
11144 int main()
11145 {
11146         typedef struct _goo_struct goo_struct;
11147         goo_struct * volatile goo = ((goo_struct *)0);
11148         struct _goo_struct {
11149                 long long_int;
11150                 int reg_int;
11151                 char char_var;
11152         };
11153         typedef unsigned short foo_t;
11154         char *volatile foo;
11155         volatile int bar;
11156         volatile foo_t blech;
11157         foo = foo;
11158 }
11159 EOCP
11160 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11161         val="$define"
11162         echo "Yup, it does."
11163 else
11164         val="$undef"
11165         echo "Nope, it doesn't."
11166 fi
11167 set d_volatile
11168 eval $setvar
11169 $rm -f try.*
11170
11171
11172 echo " "
11173 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11174
11175 case "$use64bitint:$d_quad:$quadtype" in
11176 define:define:?*)
11177         ivtype="$quadtype"
11178         uvtype="$uquadtype"
11179         ivsize=8
11180         uvsize=8
11181         ;;
11182 *)      ivtype="long"
11183         uvtype="unsigned long"
11184         ivsize=$longsize
11185         uvsize=$longsize
11186         ;;
11187 esac
11188
11189 case "$uselongdouble:$d_longdbl" in
11190 define:define)
11191         nvtype="long double"
11192         nvsize=$longdblsize
11193         ;;
11194 *)      nvtype=double
11195         nvsize=$doublesize
11196         ;;
11197 esac
11198
11199 $echo "(IV will be "$ivtype", $ivsize bytes)"
11200 $echo "(UV will be "$uvtype", $uvsize bytes)"
11201 $echo "(NV will be "$nvtype", $nvsize bytes)"
11202
11203 $cat >try.c <<EOCP
11204 #$i_inttypes I_INTTYPES
11205 #ifdef I_INTTYPES
11206 #include <inttypes.h>
11207 #endif
11208 #include <stdio.h>
11209 int main() {
11210 #ifdef INT8
11211    int8_t i =  INT8_MAX;
11212   uint8_t u = UINT8_MAX;
11213   printf("int8_t\n");
11214 #endif
11215 #ifdef INT16
11216    int16_t i =  INT16_MAX;
11217   uint16_t i = UINT16_MAX;
11218   printf("int16_t\n");
11219 #endif
11220 #ifdef INT32
11221    int32_t i =  INT32_MAX;
11222   uint32_t u = UINT32_MAX;
11223   printf("int32_t\n");
11224 #endif
11225 }
11226 EOCP
11227
11228 case "$i8type" in
11229 '')     case "$charsize" in
11230         1)      i8type=char
11231                 u8type="unsigned char"
11232                 i8size=$charsize
11233                 u8size=$charsize
11234                 ;;
11235         esac
11236         ;;
11237 esac
11238 case "$i8type" in
11239 '')     set try -DINT8
11240         if eval $compile; then
11241                 case "`$run ./try`" in
11242                 int8_t) i8type=int8_t
11243                         u8type=uint8_t
11244                         i8size=1
11245                         u8size=1
11246                         ;;
11247                 esac
11248         fi
11249         ;;
11250 esac
11251 case "$i8type" in
11252 '')     if $test $charsize -ge 1; then
11253                 i8type=char
11254                 u8type="unsigned char"
11255                 i8size=$charsize
11256                 u8size=$charsize
11257         fi
11258         ;;
11259 esac
11260
11261 case "$i16type" in
11262 '')     case "$shortsize" in
11263         2)      i16type=short
11264                 u16type="unsigned short"
11265                 i16size=$shortsize
11266                 u16size=$shortsize
11267                 ;;
11268         esac
11269         ;;
11270 esac
11271 case "$i16type" in
11272 '')     set try -DINT16
11273         if eval $compile; then
11274                 case "`$run ./try`" in
11275                 int16_t)
11276                         i16type=int16_t
11277                         u16type=uint16_t
11278                         i16size=2
11279                         u16size=2
11280                         ;;
11281                 esac
11282         fi
11283         ;;
11284 esac
11285 case "$i16type" in
11286 '')     if $test $shortsize -ge 2; then
11287                 i16type=short
11288                 u16type="unsigned short"
11289                 i16size=$shortsize
11290                 u16size=$shortsize
11291         fi
11292         ;;
11293 esac
11294
11295 case "$i32type" in
11296 '')     case "$longsize" in
11297         4)      i32type=long
11298                 u32type="unsigned long"
11299                 i32size=$longsize
11300                 u32size=$longsize
11301                 ;;
11302         *)      case "$intsize" in
11303                 4)      i32type=int
11304                         u32type="unsigned int"
11305                         i32size=$intsize
11306                         u32size=$intsize
11307                         ;;
11308                 esac
11309                 ;;
11310         esac
11311         ;;
11312 esac
11313 case "$i32type" in
11314 '')     set try -DINT32
11315         if eval $compile; then
11316                 case "`$run ./try`" in
11317                 int32_t)
11318                         i32type=int32_t
11319                         u32type=uint32_t
11320                         i32size=4
11321                         u32size=4
11322                         ;;
11323                 esac
11324         fi
11325         ;;
11326 esac
11327 case "$i32type" in
11328 '')     if $test $intsize -ge 4; then
11329                 i32type=int
11330                 u32type="unsigned int"
11331                 i32size=$intsize
11332                 u32size=$intsize
11333         fi
11334         ;;
11335 esac
11336
11337 case "$i64type" in
11338 '')     case "$d_quad:$quadtype" in
11339         define:?*)
11340                 i64type="$quadtype"
11341                 u64type="$uquadtype"
11342                 i64size=8
11343                 u64size=8
11344                 ;;
11345         esac
11346         ;;
11347 esac
11348
11349 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11350 : volatile so that the compiler has to store it out to memory.
11351 if test X"$d_volatile" = X"$define"; then
11352         volatile=volatile
11353 fi
11354 $cat <<EOP >try.c
11355 #include <stdio.h>
11356 #include <sys/types.h>
11357 #include <signal.h>
11358 #ifdef SIGFPE
11359 $volatile int bletched = 0;
11360 $signal_t blech(s) int s; { bletched = 1; }
11361 #endif
11362 int main() {
11363     $uvtype u = 0;
11364     $nvtype d;
11365     int     n = 8 * $uvsize;
11366     int     i;
11367 #ifdef SIGFPE
11368     signal(SIGFPE, blech);
11369 #endif
11370
11371     for (i = 0; i < n; i++) {
11372       u = u << 1 | ($uvtype)1;
11373       d = ($nvtype)u;
11374       if (($uvtype)d != u)
11375         break;
11376       if (d <= 0)
11377         break;
11378       d = ($nvtype)(u - 1);
11379       if (($uvtype)d != (u - 1))
11380         break;
11381 #ifdef SIGFPE
11382       if (bletched) {
11383         break;
11384 #endif
11385       } 
11386     }
11387     printf("%d\n", ((i == n) ? -n : i));
11388     exit(0);
11389 }
11390 EOP
11391 set try
11392
11393 d_nv_preserves_uv="$undef"
11394 if eval $compile; then
11395         d_nv_preserves_uv_bits="`$run ./try`"
11396 fi
11397 case "$d_nv_preserves_uv_bits" in
11398 \-[1-9]*)       
11399         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11400         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11401         d_nv_preserves_uv="$define"
11402         ;;
11403 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11404         d_nv_preserves_uv="$undef" ;;
11405 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11406         d_nv_preserves_uv_bits="$undef" ;;
11407 esac
11408
11409 $rm -f try.* try
11410
11411
11412 : check for off64_t
11413 echo " "
11414 echo "Checking to see if you have off64_t..." >&4
11415 $cat >try.c <<EOCP
11416 #include <sys/types.h>
11417 #include <unistd.h>
11418 int main() { off64_t x = 7; }
11419 EOCP
11420 set try
11421 if eval $compile; then
11422         val="$define"
11423         echo "You have off64_t."
11424 else
11425         val="$undef"
11426         echo "You do not have off64_t."
11427         case "$lseeksize" in
11428         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11429         esac
11430 fi
11431 $rm -f try.* try
11432 set d_off64_t
11433 eval $setvar
11434
11435 : see if POSIX threads are available
11436 set pthread.h i_pthread
11437 eval $inhdr
11438
11439
11440
11441
11442 : how to create joinable pthreads
11443 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11444         echo " "
11445         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11446         $cat >try.c <<'EOCP'
11447 #include <pthread.h>
11448 int main() {
11449     int detachstate = JOINABLE;
11450 }
11451 EOCP
11452         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11453         if eval $compile; then
11454                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11455                 val="$undef" # Yes, undef.
11456                 set d_old_pthread_create_joinable
11457                 eval $setvar
11458                 val=""
11459                 set old_pthread_create_joinable
11460                 eval $setvar
11461         else
11462                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11463                 if eval $compile; then
11464                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11465                         val="$define"
11466                         set d_old_pthread_create_joinable
11467                         eval $setvar
11468                         val=PTHREAD_CREATE_UNDETACHED
11469                         set old_pthread_create_joinable
11470                         eval $setvar
11471                 else            
11472                         set try -DJOINABLE=__UNDETACHED
11473                         if eval $compile; then
11474                                 echo "You seem to use __UNDETACHED." >&4
11475                                 val="$define"
11476                                 set d_old_pthread_create_joinable
11477                                 eval $setvar
11478                                 val=__UNDETACHED
11479                                 set old_pthread_create_joinable
11480                                 eval $setvar
11481                         else
11482                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11483                                 val="$define"
11484                                 set d_old_pthread_create_joinable
11485                                 eval $setvar
11486                                 val=0
11487                                 set old_pthread_create_joinable
11488                                 eval $setvar
11489                         fi
11490                 fi
11491         fi
11492         $rm -f try try.*
11493 else
11494     d_old_pthread_create_joinable="$undef"
11495     old_pthread_create_joinable=""
11496 fi
11497
11498 : see if pause exists
11499 set pause d_pause
11500 eval $inlibc
11501
11502 : see if pipe exists
11503 set pipe d_pipe
11504 eval $inlibc
11505
11506 : see if poll exists
11507 set poll d_poll
11508 eval $inlibc
11509
11510 : see if readlink exists
11511 set readlink d_readlink
11512 eval $inlibc
11513
11514 echo " "
11515 echo "Checking for /proc/self/exe..." >&4
11516 val="$undef"
11517 case "$d_readlink" in
11518 "$define")
11519         if $issymlink /proc/self/exe ; then
11520                 $ls -l /proc/self/exe > reflect
11521                 if $contains /`basename $ls` reflect >/dev/null 2>&1; then
11522                         val="$define"
11523                         echo "You have Linux-like /proc/self/exe."
11524                 fi
11525                 $rm reflect
11526         fi
11527         ;;
11528 esac
11529 set d_procselfexe
11530 eval $setvar
11531
11532 : see if pthread_atfork exists
11533 set pthread_atfork d_pthread_atfork
11534 eval $inlibc
11535
11536
11537 : see whether the various POSIXish _yields exist
11538 $cat >try.c <<EOP
11539 #include <pthread.h>
11540 #include <stdio.h>
11541 int main() {
11542 #ifdef SCHED_YIELD
11543         sched_yield();
11544 #else
11545 #ifdef PTHREAD_YIELD
11546         pthread_yield();
11547 #else
11548 #ifdef PTHREAD_YIELD_NULL
11549         pthread_yield(NULL);
11550 #endif
11551 #endif
11552 #endif
11553 }
11554 EOP
11555 : see if sched_yield exists
11556 set try -DSCHED_YIELD
11557 if eval $compile; then
11558     val="$define"
11559     sched_yield='sched_yield()'
11560 else
11561     val="$undef"
11562 fi
11563 case "$usethreads" in
11564 $define)
11565         case "$val" in
11566         $define) echo 'sched_yield() found.' >&4        ;;
11567         *)       echo 'sched_yield() NOT found.' >&4    ;;
11568         esac
11569 esac
11570 set d_sched_yield
11571 eval $setvar
11572
11573 : see if pthread_yield exists
11574 set try -DPTHREAD_YIELD
11575 if eval $compile; then
11576     val="$define"
11577     case "$sched_yield" in
11578     '') sched_yield='pthread_yield()' ;;
11579     esac
11580 else
11581     set try -DPTHREAD_YIELD_NULL
11582     if eval $compile; then
11583         val="$define"
11584         case "$sched_yield" in
11585         '') sched_yield='pthread_yield(NULL)' ;;
11586         esac
11587     else
11588         val="$undef"
11589     fi
11590 fi
11591 case "$usethreads" in
11592 $define)
11593         case "$val" in
11594         $define) echo 'pthread_yield() found.' >&4      ;;
11595         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11596         esac
11597         ;;
11598 esac
11599 set d_pthread_yield
11600 eval $setvar
11601
11602 case "$sched_yield" in
11603 '') sched_yield=undef ;;
11604 esac
11605
11606 $rm -f try try.*
11607
11608 : see if this is a pwd.h system
11609 set pwd.h i_pwd
11610 eval $inhdr
11611
11612 case "$i_pwd" in
11613 $define)
11614         xxx=`./findhdr pwd.h`
11615         $cppstdin $cppflags $cppminus < $xxx >$$.h
11616
11617         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11618                 val="$define"
11619         else
11620                 val="$undef"
11621         fi
11622         set d_pwquota
11623         eval $setvar
11624
11625         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11626                 val="$define"
11627         else
11628                 val="$undef"
11629         fi
11630         set d_pwage
11631         eval $setvar
11632
11633         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11634                 val="$define"
11635         else
11636                 val="$undef"
11637         fi
11638         set d_pwchange
11639         eval $setvar
11640
11641         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11642                 val="$define"
11643         else
11644                 val="$undef"
11645         fi
11646         set d_pwclass
11647         eval $setvar
11648
11649         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11650                 val="$define"
11651         else
11652                 val="$undef"
11653         fi
11654         set d_pwexpire
11655         eval $setvar
11656
11657         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11658                 val="$define"
11659         else
11660                 val="$undef"
11661         fi
11662         set d_pwcomment
11663         eval $setvar
11664
11665         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11666                 val="$define"
11667         else
11668                 val="$undef"
11669         fi
11670         set d_pwgecos
11671         eval $setvar
11672
11673         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11674                 val="$define"
11675         else
11676                 val="$undef"
11677         fi
11678         set d_pwpasswd
11679         eval $setvar
11680
11681         $rm -f $$.h
11682         ;;
11683 *)
11684         val="$undef"; 
11685         set d_pwquota; eval $setvar
11686         set d_pwage; eval $setvar
11687         set d_pwchange; eval $setvar
11688         set d_pwclass; eval $setvar
11689         set d_pwexpire; eval $setvar
11690         set d_pwcomment; eval $setvar
11691         set d_pwgecos; eval $setvar
11692         set d_pwpasswd; eval $setvar
11693         ;;
11694 esac
11695
11696 : see if readdir and friends exist
11697 set readdir d_readdir
11698 eval $inlibc
11699 set seekdir d_seekdir
11700 eval $inlibc
11701 set telldir d_telldir
11702 eval $inlibc
11703 set rewinddir d_rewinddir
11704 eval $inlibc
11705
11706 : see if readv exists
11707 set readv d_readv
11708 eval $inlibc
11709
11710 : see if recvmsg exists
11711 set recvmsg d_recvmsg
11712 eval $inlibc
11713
11714 : see if rename exists
11715 set rename d_rename
11716 eval $inlibc
11717
11718 : see if rmdir exists
11719 set rmdir d_rmdir
11720 eval $inlibc
11721
11722 : see if memory.h is available.
11723 val=''
11724 set memory.h val
11725 eval $inhdr
11726
11727 : See if it conflicts with string.h
11728 case "$val" in
11729 $define)
11730         case "$strings" in
11731         '') ;;
11732         *)
11733                 $cppstdin $cppflags $cppminus < $strings > mem.h
11734                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11735                         echo " "
11736                         echo "We won't be including <memory.h>."
11737                         val="$undef"
11738                 fi
11739                 $rm -f mem.h
11740                 ;;
11741         esac
11742 esac
11743 set i_memory
11744 eval $setvar
11745
11746 : can bcopy handle overlapping blocks?
11747 echo " "
11748 val="$undef"
11749 case "$d_memmove" in
11750 "$define") echo "I'll use memmove() instead of bcopy() for overlapping copies." ;;
11751 *)      case "$d_bcopy" in
11752         "$define")
11753                 echo "Checking to see if bcopy() can do overlapping copies..." >&4
11754                 $cat >try.c <<EOCP
11755 #$i_memory I_MEMORY
11756 #$i_stdlib I_STDLIB
11757 #$i_string I_STRING
11758 #$i_unistd I_UNISTD
11759 EOCP
11760         $cat >>try.c <<'EOCP'
11761 #include <stdio.h>
11762 #ifdef I_MEMORY
11763 #  include <memory.h>
11764 #endif
11765 #ifdef I_STDLIB
11766 #  include <stdlib.h>
11767 #endif
11768 #ifdef I_STRING
11769 #  include <string.h>
11770 #else
11771 #  include <strings.h>
11772 #endif
11773 #ifdef I_UNISTD
11774 #  include <unistd.h>  /* Needed for NetBSD */
11775 #endif
11776 int main()
11777 {
11778 char buf[128], abc[128];
11779 char *b;
11780 int len;
11781 int off;
11782 int align;
11783
11784 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11785    try to store the string in read-only memory. */
11786 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11787
11788 for (align = 7; align >= 0; align--) {
11789         for (len = 36; len; len--) {
11790                 b = buf+align;
11791                 bcopy(abc, b, len);
11792                 for (off = 1; off <= len; off++) {
11793                         bcopy(b, b+off, len);
11794                         bcopy(b+off, b, len);
11795                         if (bcmp(b, abc, len))
11796                                 exit(1);
11797                 }
11798         }
11799 }
11800 exit(0);
11801 }
11802 EOCP
11803                 set try
11804                 if eval $compile_ok; then
11805                         if ./try 2>/dev/null; then
11806                                 echo "Yes, it can."
11807                                 val="$define"
11808                         else
11809                                 echo "It can't, sorry."
11810                         fi
11811                 else
11812                         echo "(I can't compile the test program, so we'll assume not...)"
11813                 fi
11814                 ;;
11815         esac
11816         $rm -f try.* try core
11817         ;;
11818 esac
11819 set d_safebcpy
11820 eval $setvar
11821
11822 : can memcpy handle overlapping blocks?
11823 echo " "
11824 val="$undef"
11825 case "$d_memmove" in
11826 "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;;
11827 *)      case "$d_memcpy" in
11828         "$define")
11829                 echo "Checking to see if memcpy() can do overlapping copies..." >&4
11830                 $cat >try.c <<EOCP
11831 #$i_memory I_MEMORY
11832 #$i_stdlib I_STDLIB
11833 #$i_string I_STRING
11834 #$i_unistd I_UNISTD
11835 EOCP
11836         $cat >>try.c <<'EOCP'
11837 #include <stdio.h>
11838 #ifdef I_MEMORY
11839 #  include <memory.h>
11840 #endif
11841 #ifdef I_STDLIB
11842 #  include <stdlib.h>
11843 #endif
11844 #ifdef I_STRING
11845 #  include <string.h>
11846 #else
11847 #  include <strings.h>
11848 #endif
11849 #ifdef I_UNISTD
11850 #  include <unistd.h>  /* Needed for NetBSD */
11851 #endif
11852 int main()
11853 {
11854 char buf[128], abc[128];
11855 char *b;
11856 int len;
11857 int off;
11858 int align;
11859
11860 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11861    try to store the string in read-only memory. */
11862 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11863
11864 for (align = 7; align >= 0; align--) {
11865         for (len = 36; len; len--) {
11866                 b = buf+align;
11867                 memcpy(b, abc, len);
11868                 for (off = 1; off <= len; off++) {
11869                         memcpy(b+off, b, len);
11870                         memcpy(b, b+off, len);
11871                         if (memcmp(b, abc, len))
11872                                 exit(1);
11873                 }
11874         }
11875 }
11876 exit(0);
11877 }
11878 EOCP
11879                 set try
11880                 if eval $compile_ok; then
11881                         if ./try 2>/dev/null; then
11882                                 echo "Yes, it can."
11883                                 val="$define"
11884                         else
11885                                 echo "It can't, sorry."
11886                         fi
11887                 else
11888                         echo "(I can't compile the test program, so we'll assume not...)"
11889                 fi
11890                 ;;
11891         esac
11892         $rm -f try.* try core
11893         ;;
11894 esac
11895 set d_safemcpy
11896 eval $setvar
11897
11898 : can memcmp be trusted to compare relative magnitude?
11899 val="$undef"
11900 case "$d_memcmp" in
11901 "$define")
11902         echo " "
11903         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11904         $cat >try.c <<EOCP
11905 #$i_memory I_MEMORY
11906 #$i_stdlib I_STDLIB
11907 #$i_string I_STRING
11908 #$i_unistd I_UNISTD
11909 EOCP
11910         $cat >>try.c <<'EOCP'
11911 #include <stdio.h>
11912 #ifdef I_MEMORY
11913 #  include <memory.h>
11914 #endif
11915 #ifdef I_STDLIB
11916 #  include <stdlib.h>
11917 #endif
11918 #ifdef I_STRING
11919 #  include <string.h>
11920 #else
11921 #  include <strings.h>
11922 #endif
11923 #ifdef I_UNISTD
11924 #  include <unistd.h>  /* Needed for NetBSD */
11925 #endif
11926 int main()
11927 {
11928 char a = -1;
11929 char b = 0;
11930 if ((a < b) && memcmp(&a, &b, 1) < 0)
11931         exit(1);
11932 exit(0);
11933 }
11934 EOCP
11935         set try
11936         if eval $compile_ok; then
11937                 if $run ./try 2>/dev/null; then
11938                         echo "Yes, it can."
11939                         val="$define"
11940                 else
11941                         echo "No, it can't (it uses signed chars)."
11942                 fi
11943         else
11944                 echo "(I can't compile the test program, so we'll assume not...)"
11945         fi
11946         ;;
11947 esac
11948 $rm -f try.* try core
11949 set d_sanemcmp
11950 eval $setvar
11951
11952 : see if prototype for sbrk is available
11953 echo " "
11954 set d_sbrkproto sbrk $i_unistd unistd.h
11955 eval $hasproto
11956
11957 : see if select exists
11958 set select d_select
11959 eval $inlibc
11960
11961 : see if semctl exists
11962 set semctl d_semctl
11963 eval $inlibc
11964
11965 : see if semget exists
11966 set semget d_semget
11967 eval $inlibc
11968
11969 : see if semop exists
11970 set semop d_semop
11971 eval $inlibc
11972
11973 : see how much of the 'sem*(2)' library is present.
11974 h_sem=true
11975 echo " "
11976 case "$d_semctl$d_semget$d_semop" in
11977 *"$undef"*) h_sem=false;;
11978 esac
11979 case "$osname" in
11980 freebsd)
11981     case "`ipcs 2>&1`" in
11982     "SVID messages"*"not configured"*)
11983         echo "Your $osname does not have the sem*(2) configured." >&4
11984         h_sem=false
11985         val="$undef"
11986         set semctl d_semctl
11987         eval $setvar
11988         set semget d_semget
11989         eval $setvar
11990         set semop d_semop
11991         eval $setvar
11992         ;;
11993     esac
11994     ;;
11995 esac
11996 : we could also check for sys/ipc.h ...
11997 if $h_sem && $test `./findhdr sys/sem.h`; then
11998         echo "You have the full sem*(2) library." >&4
11999         val="$define"
12000 else
12001         echo "You don't have the full sem*(2) library." >&4
12002         val="$undef"
12003 fi
12004 set d_sem
12005 eval $setvar
12006
12007 : see whether sys/sem.h defines union semun
12008 echo " "
12009 $cat > try.c <<'END'
12010 #include <sys/types.h>
12011 #include <sys/ipc.h>
12012 #include <sys/sem.h>
12013 int main () { union semun semun; semun.buf = 0; }
12014 END
12015 set try
12016 if eval $compile; then
12017     echo "You have union semun in <sys/sem.h>." >&4
12018     val="$define"
12019 else
12020     echo "You do not have union semun in <sys/sem.h>." >&4
12021     val="$undef"
12022 fi
12023 $rm -f try try.c try.h
12024 set d_union_semun
12025 eval $setvar
12026
12027 : see how to do semctl IPC_STAT
12028 case "$d_sem" in
12029 $define)
12030     : see whether semctl IPC_STAT can use union semun
12031     echo " "
12032     $cat > try.h <<END
12033 #ifndef S_IRUSR
12034 #   ifdef S_IREAD
12035 #       define S_IRUSR S_IREAD
12036 #       define S_IWUSR S_IWRITE
12037 #       define S_IXUSR S_IEXEC
12038 #   else
12039 #       define S_IRUSR 0400
12040 #       define S_IWUSR 0200
12041 #       define S_IXUSR 0100
12042 #   endif
12043 #   define S_IRGRP (S_IRUSR>>3)
12044 #   define S_IWGRP (S_IWUSR>>3)
12045 #   define S_IXGRP (S_IXUSR>>3)
12046 #   define S_IROTH (S_IRUSR>>6)
12047 #   define S_IWOTH (S_IWUSR>>6)
12048 #   define S_IXOTH (S_IXUSR>>6)
12049 #endif
12050 #ifndef S_IRWXU
12051 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
12052 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
12053 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
12054 #endif
12055 END
12056
12057     $cat > try.c <<END
12058 #include <sys/types.h>
12059 #include <sys/ipc.h>
12060 #include <sys/sem.h>
12061 #include <sys/stat.h>
12062 #include <stdio.h>
12063 #include <errno.h>
12064 #include "try.h"
12065 #ifndef errno
12066 extern int errno;
12067 #endif
12068 #$d_union_semun HAS_UNION_SEMUN
12069 int main() {
12070     union semun
12071 #ifndef HAS_UNION_SEMUN
12072     {
12073         int val;
12074         struct semid_ds *buf;
12075         unsigned short *array;
12076     }
12077 #endif
12078     arg;
12079     int sem, st;
12080
12081 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
12082     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12083     if (sem > -1) {
12084         struct semid_ds argbuf;
12085         arg.buf = &argbuf;
12086 #       ifdef IPC_STAT
12087         st = semctl(sem, 0, IPC_STAT, arg);
12088         if (st == 0)
12089             printf("semun\n");
12090         else
12091 #       endif /* IPC_STAT */
12092             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12093 #       ifdef IPC_RMID
12094         if (semctl(sem, 0, IPC_RMID, arg) != 0)
12095 #       endif /* IPC_RMID */
12096             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12097     } else
12098 #endif /* IPC_PRIVATE && ... */
12099         printf("semget failed: errno = %d\n", errno);
12100   return 0;
12101 }
12102 END
12103     val="$undef"
12104     set try
12105     if eval $compile; then
12106         xxx=`$run ./try`
12107         case "$xxx" in
12108         semun) val="$define" ;;
12109         esac
12110     fi
12111     $rm -f try try.c
12112     set d_semctl_semun
12113     eval $setvar
12114     case "$d_semctl_semun" in
12115     $define)
12116         echo "You can use union semun for semctl IPC_STAT." >&4
12117         also='also'
12118         ;;
12119     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
12120         also=''
12121         ;;
12122     esac
12123
12124     : see whether semctl IPC_STAT can use struct semid_ds pointer
12125     $cat > try.c <<'END'
12126 #include <sys/types.h>
12127 #include <sys/ipc.h>
12128 #include <sys/sem.h>
12129 #include <sys/stat.h>
12130 #include "try.h"
12131 #include <stdio.h>
12132 #include <errno.h>
12133 #ifndef errno
12134 extern int errno;
12135 #endif
12136 int main() {
12137     struct semid_ds arg;
12138     int sem, st;
12139
12140 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
12141     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
12142     if (sem > -1) {
12143 #       ifdef IPC_STAT
12144         st = semctl(sem, 0, IPC_STAT, &arg);
12145         if (st == 0)
12146             printf("semid_ds\n");
12147         else
12148 #       endif /* IPC_STAT */
12149             printf("semctl IPC_STAT failed: errno = %d\n", errno);
12150 #       ifdef IPC_RMID
12151         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
12152 #       endif /* IPC_RMID */
12153             printf("semctl IPC_RMID failed: errno = %d\n", errno);
12154     } else
12155 #endif /* IPC_PRIVATE && ... */
12156         printf("semget failed: errno = %d\n", errno);
12157
12158     return 0;
12159 }
12160 END
12161     val="$undef"
12162     set try
12163     if eval $compile; then
12164         xxx=`$run ./try`
12165         case "$xxx" in
12166         semid_ds) val="$define" ;;
12167         esac
12168     fi
12169     $rm -f try try.c
12170     set d_semctl_semid_ds
12171     eval $setvar
12172     case "$d_semctl_semid_ds" in
12173     $define)
12174         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
12175         ;;
12176     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
12177         ;;
12178     esac
12179     $rm -f try.h
12180     ;;
12181 *)  val="$undef"
12182
12183     # We do not have the full sem*(2) library, so assume we can not
12184     # use either.
12185
12186     set d_semctl_semun
12187     eval $setvar
12188
12189     set d_semctl_semid_ds
12190     eval $setvar
12191     ;;
12192 esac
12193
12194 : see if sendmsg exists
12195 set sendmsg d_sendmsg
12196 eval $inlibc
12197
12198 : see if setegid exists
12199 set setegid d_setegid
12200 eval $inlibc
12201
12202 : see if seteuid exists
12203 set seteuid d_seteuid
12204 eval $inlibc
12205
12206 : see if setgrent exists
12207 set setgrent d_setgrent
12208 eval $inlibc
12209
12210 : see if sethostent exists
12211 set sethostent d_sethent
12212 eval $inlibc
12213
12214 : see if setitimer exists
12215 set setitimer d_setitimer
12216 eval $inlibc
12217
12218 : see if setlinebuf exists
12219 set setlinebuf d_setlinebuf
12220 eval $inlibc
12221
12222 : see if setlocale exists
12223 set setlocale d_setlocale
12224 eval $inlibc
12225
12226 : see if setnetent exists
12227 set setnetent d_setnent
12228 eval $inlibc
12229
12230 : see if setprotoent exists
12231 set setprotoent d_setpent
12232 eval $inlibc
12233
12234 : see if setpgid exists
12235 set setpgid d_setpgid
12236 eval $inlibc
12237
12238 : see if setpgrp2 exists
12239 set setpgrp2 d_setpgrp2
12240 eval $inlibc
12241
12242 : see if setpriority exists
12243 set setpriority d_setprior
12244 eval $inlibc
12245
12246 : see if setproctitle exists
12247 set setproctitle d_setproctitle
12248 eval $inlibc
12249
12250 : see if setpwent exists
12251 set setpwent d_setpwent
12252 eval $inlibc
12253
12254 : see if setregid exists
12255 set setregid d_setregid
12256 eval $inlibc
12257 set setresgid d_setresgid
12258 eval $inlibc
12259
12260 : see if setreuid exists
12261 set setreuid d_setreuid
12262 eval $inlibc
12263 set setresuid d_setresuid
12264 eval $inlibc
12265
12266 : see if setrgid exists
12267 set setrgid d_setrgid
12268 eval $inlibc
12269
12270 : see if setruid exists
12271 set setruid d_setruid
12272 eval $inlibc
12273
12274 : see if setservent exists
12275 set setservent d_setsent
12276 eval $inlibc
12277
12278 : see if setsid exists
12279 set setsid d_setsid
12280 eval $inlibc
12281
12282 : see if setvbuf exists
12283 set setvbuf d_setvbuf
12284 eval $inlibc
12285
12286 : see if sfio.h is available
12287 set sfio.h i_sfio
12288 eval $inhdr
12289
12290
12291 : see if sfio library is available
12292 case "$i_sfio" in
12293 $define)
12294         val=''
12295         set sfreserve val
12296         eval $inlibc
12297         ;;
12298 *)
12299         val="$undef"
12300         ;;
12301 esac
12302 : Ok, but do we want to use it.
12303 case "$val" in
12304 $define)
12305         case "$usesfio" in
12306         true|$define|[yY]*) dflt='y';;
12307         *) dflt='n';;
12308         esac
12309         echo "$package can use the sfio library, but it is experimental."
12310         case "$useperlio" in
12311         "$undef")
12312             echo "For sfio also the PerlIO abstraction layer is needed."
12313             echo "Earlier you said you wouldn't want that."
12314             ;;
12315         esac
12316         rp="You seem to have sfio available, do you want to try using it?"
12317         . ./myread
12318         case "$ans" in
12319         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
12320                 useperlio="$define"
12321                 val="$define"
12322                 ;;
12323         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
12324                 val="$undef"
12325                 ;;
12326         esac
12327         ;;
12328 *)      case "$usesfio" in
12329         true|$define|[yY]*)
12330                 echo "Sorry, cannot find sfio on this machine." >&4
12331                 echo "Ignoring your setting of usesfio=$usesfio." >&4
12332                 val="$undef"
12333                 ;;
12334         esac
12335         ;;
12336 esac
12337 set d_sfio
12338 eval $setvar
12339 case "$d_sfio" in
12340 $define) usesfio='true';;
12341 *) usesfio='false';;
12342 esac
12343 case "$d_sfio" in
12344 $define) ;;
12345 *)      : Remove sfio from list of libraries to use
12346         case "$libs" in
12347         *-lsfio*)
12348                 echo "Removing unneeded -lsfio from library list" >&4
12349                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12350                 shift
12351                 libs="$*"
12352                 echo "libs = $libs" >&4
12353                 ;;
12354         esac
12355 ;;
12356 esac
12357
12358
12359 : see if shmctl exists
12360 set shmctl d_shmctl
12361 eval $inlibc
12362
12363 : see if shmget exists
12364 set shmget d_shmget
12365 eval $inlibc
12366
12367 : see if shmat exists
12368 set shmat d_shmat
12369 eval $inlibc
12370 : see what shmat returns
12371 case "$d_shmat" in
12372 "$define")
12373         $cat >shmat.c <<'END'
12374 #include <sys/shm.h>
12375 void *shmat();
12376 END
12377         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12378                 shmattype='void *'
12379         else
12380                 shmattype='char *'
12381         fi
12382         echo "and it returns ($shmattype)." >&4
12383         : see if a prototype for shmat is available
12384         xxx=`./findhdr sys/shm.h`
12385         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12386         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12387                 val="$define"
12388         else
12389                 val="$undef"
12390         fi
12391         $rm -f shmat.[co]
12392         ;;
12393 *)
12394         val="$undef"
12395         ;;
12396 esac
12397 set d_shmatprototype
12398 eval $setvar
12399
12400 : see if shmdt exists
12401 set shmdt d_shmdt
12402 eval $inlibc
12403
12404 : see how much of the 'shm*(2)' library is present.
12405 h_shm=true
12406 echo " "
12407 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12408 *"$undef"*) h_shm=false;;
12409 esac
12410 case "$osname" in
12411 freebsd)
12412     case "`ipcs 2>&1`" in
12413     "SVID shared memory"*"not configured"*)
12414         echo "Your $osname does not have the shm*(2) configured." >&4
12415         h_shm=false
12416         val="$undef"
12417         set shmctl d_shmctl
12418         evat $setvar
12419         set shmget d_shmget
12420         evat $setvar
12421         set shmat d_shmat
12422         evat $setvar
12423         set shmdt d_shmdt
12424         evat $setvar
12425         ;;
12426     esac
12427     ;;
12428 esac
12429 : we could also check for sys/ipc.h ...
12430 if $h_shm && $test `./findhdr sys/shm.h`; then
12431         echo "You have the full shm*(2) library." >&4
12432         val="$define"
12433 else
12434         echo "You don't have the full shm*(2) library." >&4
12435         val="$undef"
12436 fi
12437 set d_shm
12438 eval $setvar
12439
12440 echo " "
12441 : see if we have sigaction
12442 if set sigaction val -f d_sigaction; eval $csym; $val; then
12443         echo 'sigaction() found.' >&4
12444         $cat > try.c <<'EOP'
12445 #include <stdio.h>
12446 #include <sys/types.h>
12447 #include <signal.h>
12448 int main()
12449 {
12450     struct sigaction act, oact;
12451     act.sa_flags = 0;
12452     oact.sa_handler = 0;
12453     /* so that act and oact are used */
12454     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12455 }
12456 EOP
12457         set try
12458         if eval $compile_ok; then
12459                 val="$define"
12460         else
12461                 echo "But you don't seem to have a useable struct sigaction." >&4
12462                 val="$undef"
12463         fi
12464 else
12465         echo 'sigaction NOT found.' >&4
12466         val="$undef"
12467 fi
12468 set d_sigaction; eval $setvar
12469 $rm -f try try$_o try.c
12470
12471 : see if sigprocmask exists
12472 set sigprocmask d_sigprocmask
12473 eval $inlibc
12474
12475 : see if sigsetjmp exists
12476 echo " "
12477 case "$d_sigsetjmp" in
12478 '')
12479         $cat >try.c <<'EOP'
12480 #include <setjmp.h>
12481 sigjmp_buf env;
12482 int set = 1;
12483 int main()
12484 {
12485         if (sigsetjmp(env,1))
12486                 exit(set);
12487         set = 0;
12488         siglongjmp(env, 1);
12489         exit(1);
12490 }
12491 EOP
12492         set try
12493         if eval $compile; then
12494                 if $run ./try >/dev/null 2>&1; then
12495                         echo "POSIX sigsetjmp found." >&4
12496                         val="$define"
12497                 else
12498                         $cat >&4 <<EOM
12499 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12500 I'll ignore them.
12501 EOM
12502                         val="$undef"
12503                 fi
12504         else
12505                 echo "sigsetjmp not found." >&4
12506                 val="$undef"
12507         fi
12508         ;;
12509 *) val="$d_sigsetjmp"
12510         case "$d_sigsetjmp" in
12511         $define) echo "POSIX sigsetjmp found." >&4;;
12512         $undef) echo "sigsetjmp not found." >&4;;
12513         esac
12514         ;;
12515 esac
12516 set d_sigsetjmp
12517 eval $setvar
12518 $rm -f try.c try
12519
12520 : see if sockatmark exists
12521 set sockatmark d_sockatmark
12522 eval $inlibc
12523
12524 : see if prototype for sockatmark is available
12525 echo " "
12526 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12527 eval $hasproto
12528
12529 : see if socks5_init exists
12530 set socks5_init d_socks5_init
12531 eval $inlibc
12532
12533 : see if prototype for setresgid is available
12534 echo " "
12535 set d_sresgproto setresgid $i_unistd unistd.h
12536 eval $hasproto
12537
12538 : see if prototype for setresuid is available
12539 echo " "
12540 set d_sresuproto setresuid $i_unistd unistd.h
12541 eval $hasproto
12542
12543 : see if sys/stat.h is available
12544 set sys/stat.h i_sysstat
12545 eval $inhdr
12546
12547
12548 : see if stat knows about block sizes
12549 echo " "
12550 echo "Checking to see if your struct stat has st_blocks field..." >&4
12551 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12552 eval $hasfield
12553
12554
12555 : see if this is a sys/vfs.h system
12556 set sys/vfs.h i_sysvfs
12557 eval $inhdr
12558
12559
12560 : see if this is a sys/statfs.h system
12561 set sys/statfs.h i_sysstatfs
12562 eval $inhdr
12563
12564
12565 echo " "
12566 echo "Checking to see if your system supports struct statfs..." >&4
12567 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
12568 eval $hasstruct
12569 case "$d_statfs_s" in
12570 "$define")      echo "Yes, it does."   ;;
12571 *)              echo "No, it doesn't." ;;
12572 esac
12573
12574
12575
12576 : see if struct statfs knows about f_flags
12577 case "$d_statfs_s" in
12578 define) 
12579         echo " "
12580         echo "Checking to see if your struct statfs has f_flags field..." >&4
12581         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
12582         eval $hasfield
12583         ;;
12584 *)      val="$undef"
12585         set d_statfs_f_flags
12586         eval $setvar
12587         ;;
12588 esac
12589 case "$d_statfs_f_flags" in
12590 "$define")      echo "Yes, it does."   ;;
12591 *)              echo "No, it doesn't." ;;
12592 esac
12593
12594 : see if _ptr and _cnt from stdio act std
12595 echo " "
12596
12597 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12598         echo "(Looks like you have stdio.h from BSD.)"
12599         case "$stdio_ptr" in
12600         '') stdio_ptr='((fp)->_p)'
12601                 ptr_lval=$define
12602                 ;;
12603         *)      ptr_lval=$d_stdio_ptr_lval;;
12604         esac
12605         case "$stdio_cnt" in
12606         '') stdio_cnt='((fp)->_r)'
12607                 cnt_lval=$define
12608                 ;;
12609         *)      cnt_lval=$d_stdio_cnt_lval;;
12610         esac
12611         case "$stdio_base" in
12612         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12613         esac
12614         case "$stdio_bufsiz" in
12615         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12616         esac
12617 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12618         echo "(Looks like you have stdio.h from Linux.)"
12619         case "$stdio_ptr" in
12620         '') stdio_ptr='((fp)->_IO_read_ptr)'
12621                 ptr_lval=$define
12622                 ;;
12623         *)      ptr_lval=$d_stdio_ptr_lval;;
12624         esac
12625         case "$stdio_cnt" in
12626         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12627                 cnt_lval=$undef
12628                 ;;
12629         *)      cnt_lval=$d_stdio_cnt_lval;;
12630         esac
12631         case "$stdio_base" in
12632         '') stdio_base='((fp)->_IO_read_base)';;
12633         esac
12634         case "$stdio_bufsiz" in
12635         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12636         esac
12637 else
12638         case "$stdio_ptr" in
12639         '') stdio_ptr='((fp)->_ptr)'
12640                 ptr_lval=$define
12641                 ;;
12642         *)      ptr_lval=$d_stdio_ptr_lval;;
12643         esac
12644         case "$stdio_cnt" in
12645         '') stdio_cnt='((fp)->_cnt)'
12646                 cnt_lval=$define
12647                 ;;
12648         *)      cnt_lval=$d_stdio_cnt_lval;;
12649         esac
12650         case "$stdio_base" in
12651         '') stdio_base='((fp)->_base)';;
12652         esac
12653         case "$stdio_bufsiz" in
12654         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12655         esac
12656 fi
12657
12658 : test whether _ptr and _cnt really work
12659 echo "Checking how std your stdio is..." >&4
12660 $cat >try.c <<EOP
12661 #include <stdio.h>
12662 #define FILE_ptr(fp)    $stdio_ptr
12663 #define FILE_cnt(fp)    $stdio_cnt
12664 int main() {
12665         FILE *fp = fopen("try.c", "r");
12666         char c = getc(fp);
12667         if (
12668                 18 <= FILE_cnt(fp) &&
12669                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12670         )
12671                 exit(0);
12672         exit(1);
12673 }
12674 EOP
12675 val="$undef"
12676 set try
12677 if eval $compile && $to try.c; then
12678         if $run ./try; then
12679                 echo "Your stdio acts pretty std."
12680                 val="$define"
12681         else
12682                 echo "Your stdio isn't very std."
12683         fi
12684 else
12685         echo "Your stdio doesn't appear very std."
12686 fi
12687 $rm -f try.c try
12688 set d_stdstdio
12689 eval $setvar
12690
12691 : Can _ptr be used as an lvalue?
12692 case "$d_stdstdio$ptr_lval" in
12693 $define$define) val=$define ;;
12694 *) val=$undef ;;
12695 esac
12696 set d_stdio_ptr_lval
12697 eval $setvar
12698
12699 : Can _cnt be used as an lvalue?
12700 case "$d_stdstdio$cnt_lval" in
12701 $define$define) val=$define ;;
12702 *) val=$undef ;;
12703 esac
12704 set d_stdio_cnt_lval
12705 eval $setvar
12706
12707
12708 : test whether setting _ptr sets _cnt as a side effect
12709 d_stdio_ptr_lval_sets_cnt="$undef"
12710 d_stdio_ptr_lval_nochange_cnt="$undef"
12711 case "$d_stdio_ptr_lval$d_stdstdio" in
12712 $define$define)
12713         echo "Checking to see what happens if we set the stdio ptr..." >&4
12714 $cat >try.c <<EOP
12715 #include <stdio.h>
12716 /* Can we scream? */
12717 /* Eat dust sed :-) */
12718 /* In the buffer space, no one can hear you scream. */
12719 #define FILE_ptr(fp)    $stdio_ptr
12720 #define FILE_cnt(fp)    $stdio_cnt
12721 #include <sys/types.h>
12722 int main() {
12723         FILE *fp = fopen("try.c", "r");
12724         int c;
12725         char *ptr;
12726         size_t cnt;
12727         if (!fp) {
12728             puts("Fail even to read");
12729             exit(1);
12730         }
12731         c = getc(fp); /* Read away the first # */
12732         if (c == EOF) {
12733             puts("Fail even to read");
12734             exit(1);
12735         }
12736         if (!(
12737                 18 <= FILE_cnt(fp) &&
12738                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12739         )) {
12740                 puts("Fail even to read");
12741                 exit (1);
12742         }
12743         ptr = (char*) FILE_ptr(fp);
12744         cnt = (size_t)FILE_cnt(fp);
12745
12746         FILE_ptr(fp) += 42;
12747
12748         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12749                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12750                 exit (1);
12751         }
12752         if (FILE_cnt(fp) <= 20) {
12753                 printf ("Fail (<20 chars to test)");
12754                 exit (1);
12755         }
12756         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12757                 puts("Fail compare");
12758                 exit (1);
12759         }
12760         if (cnt == FILE_cnt(fp)) {
12761                 puts("Pass_unchanged");
12762                 exit (0);
12763         }       
12764         if (FILE_cnt(fp) == (cnt - 42)) {
12765                 puts("Pass_changed");
12766                 exit (0);
12767         }
12768         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12769         return 1;
12770
12771 }
12772 EOP
12773         set try
12774         if eval $compile && $to try.c; then
12775                 case `$run ./try` in
12776                 Pass_changed)
12777                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12778                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12779                 Pass_unchanged)
12780                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12781                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12782                 Fail*)
12783                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12784                 *)
12785                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12786         esac
12787         else
12788                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12789         fi
12790         $rm -f try.c try
12791         ;;
12792 esac
12793
12794 : see if _base is also standard
12795 val="$undef"
12796 case "$d_stdstdio" in
12797 $define)
12798         $cat >try.c <<EOP
12799 #include <stdio.h>
12800 #define FILE_base(fp)   $stdio_base
12801 #define FILE_bufsiz(fp) $stdio_bufsiz
12802 int main() {
12803         FILE *fp = fopen("try.c", "r");
12804         char c = getc(fp);
12805         if (
12806                 19 <= FILE_bufsiz(fp) &&
12807                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12808         )
12809                 exit(0);
12810         exit(1);
12811 }
12812 EOP
12813         set try
12814         if eval $compile && $to try.c; then
12815                 if $run ./try; then
12816                         echo "And its _base field acts std."
12817                         val="$define"
12818                 else
12819                         echo "But its _base field isn't std."
12820                 fi
12821         else
12822                 echo "However, it seems to be lacking the _base field."
12823         fi
12824         $rm -f try.c try
12825         ;;
12826 esac
12827 set d_stdiobase
12828 eval $setvar
12829
12830 $cat >&4 <<EOM
12831 Checking how to access stdio streams by file descriptor number...
12832 EOM
12833 case "$stdio_stream_array" in
12834 '')     $cat >try.c <<EOCP
12835 #include <stdio.h>
12836 int main() {
12837   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12838     printf("yes\n");
12839 }
12840 EOCP
12841         for s in _iob __iob __sF
12842         do
12843                 set try -DSTDIO_STREAM_ARRAY=$s
12844                 if eval $compile; then
12845                         case "`$run ./try`" in
12846                         yes)    stdio_stream_array=$s; break ;;
12847                         esac
12848                 fi
12849         done
12850         $rm -f try.* try$exe_ext
12851 esac
12852 case "$stdio_stream_array" in
12853 '')     $cat >&4 <<EOM
12854 I can't figure out how to access stdio streams by file descriptor number.
12855 EOM
12856         d_stdio_stream_array="$undef"
12857         ;;
12858 *)      $cat >&4 <<EOM
12859 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12860 EOM
12861         d_stdio_stream_array="$define"
12862         ;;
12863 esac
12864
12865 : see if strcoll exists
12866 set strcoll d_strcoll
12867 eval $inlibc
12868
12869 : check for structure copying
12870 echo " "
12871 echo "Checking to see if your C compiler can copy structs..." >&4
12872 $cat >try.c <<'EOCP'
12873 int main()
12874 {
12875         struct blurfl {
12876                 int dyick;
12877         } foo, bar;
12878
12879         foo = bar;
12880 }
12881 EOCP
12882 if $cc -c try.c >/dev/null 2>&1 ; then
12883         val="$define"
12884         echo "Yup, it can."
12885 else
12886         val="$undef"
12887         echo "Nope, it can't."
12888 fi
12889 set d_strctcpy
12890 eval $setvar
12891 $rm -f try.*
12892
12893 : see if strerror and/or sys_errlist[] exist
12894 echo " "
12895 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12896     if set strerror val -f d_strerror; eval $csym; $val; then
12897                 echo 'strerror() found.' >&4
12898                 d_strerror="$define"
12899                 d_strerrm='strerror(e)'
12900                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12901                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12902                         d_syserrlst="$define"
12903                 else
12904                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12905                         d_syserrlst="$undef"
12906                 fi
12907     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12908                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12909                 echo 'strerror() found in string header.' >&4
12910                 d_strerror="$define"
12911                 d_strerrm='strerror(e)'
12912                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12913                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12914                                 d_syserrlst="$define"
12915                 else
12916                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12917                         d_syserrlst="$undef"
12918                 fi
12919     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12920                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12921                 d_strerror="$undef"
12922                 d_syserrlst="$define"
12923                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12924     else
12925                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12926                 d_strerror="$undef"
12927                 d_syserrlst="$undef"
12928                 d_strerrm='"unknown"'
12929     fi
12930 fi
12931
12932 : see if strftime exists
12933 set strftime d_strftime
12934 eval $inlibc
12935
12936 : see if strtod exists
12937 set strtod d_strtod
12938 eval $inlibc
12939
12940 : see if strtol exists
12941 set strtol d_strtol
12942 eval $inlibc
12943
12944 : see if strtold exists
12945 set strtold d_strtold
12946 eval $inlibc
12947
12948 : see if strtoll exists
12949 set strtoll d_strtoll
12950 eval $inlibc
12951
12952 case "$d_longlong-$d_strtoll" in
12953 "$define-$define")
12954         $cat <<EOM
12955 Checking whether your strtoll() works okay...
12956 EOM
12957         $cat >try.c <<'EOCP'
12958 #include <errno.h>
12959 #ifdef __hpux
12960 #define strtoll __strtoll
12961 #endif
12962 #ifdef __EMX__
12963 #define strtoll _strtoll
12964 #endif
12965 #include <stdio.h>
12966 extern long long int strtoll(char *s, char **, int); 
12967 static int bad = 0;
12968 int check(char *s, long long ell, int een) {
12969         long long gll;
12970         errno = 0;
12971         gll = strtoll(s, 0, 10);
12972         if (!((gll == ell) && (errno == een)))
12973                 bad++;
12974 }
12975 int main() {
12976         check(" 1",                                      1LL, 0);
12977         check(" 0",                                      0LL, 0);
12978         check("-1",                                     -1LL, 0);
12979         check("-9223372036854775808", -9223372036854775808LL, 0);
12980         check("-9223372036854775808", -9223372036854775808LL, 0);
12981         check(" 9223372036854775807",  9223372036854775807LL, 0);
12982         check("-9223372036854775808", -9223372036854775808LL, 0);
12983         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12984         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12985         if (!bad)
12986                 printf("ok\n");
12987 }
12988 EOCP
12989         set try
12990         if eval $compile; then
12991                 yyy=`$run ./try`
12992                 case "$yyy" in
12993                 ok) echo "Your strtoll() seems to be working okay." ;;
12994                 *) cat <<EOM >&4
12995 Your strtoll() doesn't seem to be working okay.
12996 EOM
12997                    d_strtoll="$undef"
12998                    ;;
12999                 esac
13000         else
13001                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13002                 d_strtoll="$undef"
13003         fi
13004         ;;
13005 esac
13006
13007 : see if strtoq exists
13008 set strtoq d_strtoq
13009 eval $inlibc
13010
13011 : see if strtoul exists
13012 set strtoul d_strtoul
13013 eval $inlibc
13014
13015 case "$d_strtoul" in
13016 "$define")
13017         $cat <<EOM
13018 Checking whether your strtoul() works okay...
13019 EOM
13020         $cat >try.c <<'EOCP'
13021 #include <errno.h>
13022 #include <stdio.h>
13023 extern unsigned long int strtoul(char *s, char **, int); 
13024 static int bad = 0;
13025 void check(char *s, unsigned long eul, int een) {
13026         unsigned long gul;
13027         errno = 0;
13028         gul = strtoul(s, 0, 10);
13029         if (!((gul == eul) && (errno == een)))
13030                 bad++;
13031 }
13032 int main() {
13033         check(" 1", 1L, 0);
13034         check(" 0", 0L, 0);
13035 EOCP
13036         case "$longsize" in
13037         8)
13038             $cat >>try.c <<'EOCP'
13039         check("18446744073709551615", 18446744073709551615UL, 0);
13040         check("18446744073709551616", 18446744073709551615UL, ERANGE);
13041 #if 0 /* strtoul() for /^-/ strings is undefined. */
13042         check("-1", 18446744073709551615UL, 0);
13043         check("-18446744073709551614", 2, 0);
13044         check("-18446744073709551615", 1, 0);
13045         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
13046         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
13047 #endif
13048 EOCP
13049                 ;;
13050         4)
13051                     $cat >>try.c <<'EOCP'
13052         check("4294967295", 4294967295UL, 0);
13053         check("4294967296", 4294967295UL, ERANGE);
13054 #if 0 /* strtoul() for /^-/ strings is undefined. */
13055         check("-1", 4294967295UL, 0);
13056         check("-4294967294", 2, 0);
13057         check("-4294967295", 1, 0);
13058         check("-4294967296", 4294967295UL, ERANGE);
13059         check("-4294967297", 4294967295UL, ERANGE);
13060 #endif
13061 EOCP
13062                 ;;
13063         *)
13064 : Should we write these tests to be more portable by sprintf-ing
13065 : ~0 and then manipulating that char string as input for strtol?
13066                 ;;
13067         esac
13068         $cat >>try.c <<'EOCP'
13069         if (!bad)
13070                 printf("ok\n");
13071         return 0;
13072 }
13073 EOCP
13074         set try
13075         if eval $compile; then
13076                 case "`$run ./try`" in
13077                 ok) echo "Your strtoul() seems to be working okay." ;;
13078                 *) cat <<EOM >&4
13079 Your strtoul() doesn't seem to be working okay.
13080 EOM
13081                    d_strtoul="$undef"
13082                    ;;
13083                 esac
13084         fi
13085         ;;
13086 esac
13087
13088 : see if strtoull exists
13089 set strtoull d_strtoull
13090 eval $inlibc
13091
13092 case "$d_longlong-$d_strtoull" in
13093 "$define-$define")
13094         $cat <<EOM
13095 Checking whether your strtoull() works okay...
13096 EOM
13097         $cat >try.c <<'EOCP'
13098 #include <errno.h>
13099 #ifdef __hpux
13100 #define strtoull __strtoull
13101 #endif
13102 #include <stdio.h>
13103 extern unsigned long long int strtoull(char *s, char **, int); 
13104 static int bad = 0;
13105 int check(char *s, long long eull, int een) {
13106         long long gull;
13107         errno = 0;
13108         gull = strtoull(s, 0, 10);
13109         if (!((gull == eull) && (errno == een)))
13110                 bad++;
13111 }
13112 int main() {
13113         check(" 1",                                        1LL, 0);
13114         check(" 0",                                        0LL, 0);
13115         check("18446744073709551615",  18446744073709551615ULL, 0);
13116         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13117 #if 0 /* strtoull() for /^-/ strings is undefined. */
13118         check("-1",                    18446744073709551615ULL, 0);
13119         check("-18446744073709551614",                     2LL, 0);
13120         check("-18446744073709551615",                     1LL, 0);
13121         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13122         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13123 #endif
13124         if (!bad)
13125                 printf("ok\n");
13126 }
13127 EOCP
13128         set try
13129         if eval $compile; then
13130                 case "`$run ./try`" in
13131                 ok) echo "Your strtoull() seems to be working okay." ;;
13132                 *) cat <<EOM >&4
13133 Your strtoull() doesn't seem to be working okay.
13134 EOM
13135                    d_strtoull="$undef"
13136                    ;;
13137                 esac
13138         fi
13139         ;;
13140 esac
13141
13142 : see if strtouq exists
13143 set strtouq d_strtouq
13144 eval $inlibc
13145
13146 case "$d_strtouq" in
13147 "$define")
13148         $cat <<EOM
13149 Checking whether your strtouq() works okay...
13150 EOM
13151         $cat >try.c <<'EOCP'
13152 #include <errno.h>
13153 #include <stdio.h>
13154 extern unsigned long long int strtouq(char *s, char **, int); 
13155 static int bad = 0;
13156 void check(char *s, unsigned long long eull, int een) {
13157         unsigned long long gull;
13158         errno = 0;
13159         gull = strtouq(s, 0, 10);
13160         if (!((gull == eull) && (errno == een)))
13161                 bad++;
13162 }
13163 int main() {
13164         check(" 1",                                        1LL, 0);
13165         check(" 0",                                        0LL, 0);
13166         check("18446744073709551615",  18446744073709551615ULL, 0);
13167         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
13168 #if 0 /* strtouq() for /^-/ strings is undefined. */
13169         check("-1",                    18446744073709551615ULL, 0);
13170         check("-18446744073709551614",                     2LL, 0);
13171         check("-18446744073709551615",                     1LL, 0);
13172         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
13173         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
13174 #endif
13175         if (!bad)
13176                 printf("ok\n");
13177         return 0;
13178 }
13179 EOCP
13180         set try
13181         if eval $compile; then
13182                 case "`$run ./try`" in
13183                 ok) echo "Your strtouq() seems to be working okay." ;;
13184                 *) cat <<EOM >&4
13185 Your strtouq() doesn't seem to be working okay.
13186 EOM
13187                    d_strtouq="$undef"
13188                    ;;
13189                 esac
13190         fi
13191         ;;
13192 esac
13193
13194 : see if strxfrm exists
13195 set strxfrm d_strxfrm
13196 eval $inlibc
13197
13198 : see if symlink exists
13199 set symlink d_symlink
13200 eval $inlibc
13201
13202 : see if syscall exists
13203 set syscall d_syscall
13204 eval $inlibc
13205
13206 : see if prototype for syscall is available
13207 echo " "
13208 set d_syscallproto syscall $i_unistd unistd.h
13209 eval $hasproto
13210
13211 : see if sysconf exists
13212 set sysconf d_sysconf
13213 eval $inlibc
13214
13215 : see if system exists
13216 set system d_system
13217 eval $inlibc
13218
13219 : see if tcgetpgrp exists
13220 set tcgetpgrp d_tcgetpgrp
13221 eval $inlibc
13222
13223 : see if tcsetpgrp exists
13224 set tcsetpgrp d_tcsetpgrp
13225 eval $inlibc
13226
13227 : see if prototype for telldir is available
13228 echo " "
13229 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
13230 eval $hasproto
13231
13232 : see if this is a sys/times.h system
13233 set sys/times.h i_systimes
13234 eval $inhdr
13235
13236 : see if times exists
13237 echo " "
13238 if set times val -f d_times; eval $csym; $val; then
13239         echo 'times() found.' >&4
13240         d_times="$define"
13241         inc=''
13242         case "$i_systimes" in
13243         "$define") inc='sys/times.h';;
13244         esac
13245         rp="What is the type returned by times() on this system?"
13246         set clock_t clocktype long stdio.h sys/types.h $inc
13247         eval $typedef_ask
13248 else
13249         echo 'times() NOT found, hope that will do.' >&4
13250         d_times="$undef"
13251         clocktype='int'
13252 fi
13253
13254 : see if truncate exists
13255 set truncate d_truncate
13256 eval $inlibc
13257
13258 : see if tzname[] exists
13259 echo " "
13260 if set tzname val -a d_tzname; eval $csym; $val; then
13261         val="$define"
13262         echo 'tzname[] found.' >&4
13263 else
13264         val="$undef"
13265         echo 'tzname[] NOT found.' >&4
13266 fi
13267 set d_tzname
13268 eval $setvar
13269
13270 case "$osname" in
13271 next|rhapsody|darwin) multiarch="$define" ;;
13272 esac
13273 case "$multiarch" in
13274 ''|[nN]*) multiarch="$undef" ;;
13275 esac
13276
13277 : check for ordering of bytes in a long
13278 echo " "
13279 case "$usecrosscompile$multiarch" in
13280 *$define*)
13281         $cat <<EOM
13282 You seem to be either cross-compiling or doing a multiarchitecture build,
13283 skipping the byteorder check.
13284
13285 EOM
13286         byteorder='ffff'
13287         ;;
13288 *)
13289         case "$byteorder" in
13290         '')
13291                 $cat <<'EOM'
13292 In the following, larger digits indicate more significance.  A big-endian
13293 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
13294 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
13295 machines may have weird orders like 3412.  A Cray will report 87654321,
13296 an Alpha will report 12345678. If the test program works the default is
13297 probably right.
13298 I'm now running the test program...
13299 EOM
13300                 $cat >try.c <<'EOCP'
13301 #include <stdio.h>
13302 int main()
13303 {
13304         int i;
13305         union {
13306                 unsigned long l;
13307                 char c[sizeof(long)];
13308         } u;
13309
13310         if (sizeof(long) > 4)
13311                 u.l = (0x08070605L << 32) | 0x04030201L;
13312         else
13313                 u.l = 0x04030201L;
13314         for (i = 0; i < sizeof(long); i++)
13315                 printf("%c", u.c[i]+'0');
13316         printf("\n");
13317         exit(0);
13318 }
13319 EOCP
13320                 xxx_prompt=y
13321                 set try
13322                 if eval $compile && ./try > /dev/null; then
13323                         dflt=`$run ./try`
13324                         case "$dflt" in
13325                         [1-4][1-4][1-4][1-4]|12345678|87654321)
13326                                 echo "(The test program ran ok.)"
13327                                 echo "byteorder=$dflt"
13328                                 xxx_prompt=n
13329                         ;;
13330                         ????|????????) echo "(The test program ran ok.)" ;;
13331                         *) echo "(The test program didn't run right for some reason.)" ;;
13332                         esac
13333                 else
13334                         dflt='4321'
13335                         cat <<'EOM'
13336 (I can't seem to compile the test program.  Guessing big-endian...)
13337 EOM
13338                 fi
13339                 case "$xxx_prompt" in
13340                 y)
13341                         rp="What is the order of bytes in a long?"
13342                         . ./myread
13343                         byteorder="$ans"
13344                         ;;
13345                 *)      byteorder=$dflt
13346                         ;;
13347                 esac
13348                 ;;
13349         esac
13350         $rm -f try.c try
13351         ;;
13352 esac
13353
13354
13355 $cat <<EOM
13356
13357 Checking to see whether you can access character data unalignedly...
13358 EOM
13359 $cat >try.c <<EOCP
13360 #include <stdio.h>
13361 #define U32 $u32type
13362 #define BYTEORDER $byteorder
13363 int main() {
13364 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13365     U8 buf[] = "\0\0\0\1\0\0\0\0";
13366     U32 *up;
13367     int i;
13368
13369     if (sizeof(U32) != 4) {
13370         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13371         exit(1);
13372     }
13373
13374     fflush(stdout);
13375
13376     for (i = 0; i < 4; i++) {
13377         up = (U32*)(buf + i);
13378         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13379                (*up == 1 << (8*(3-i)))  /* little-endian */
13380               )
13381            )
13382         {
13383             printf("read failed (%x)\n", *up);
13384             exit(2);
13385         }
13386     }
13387
13388     /* write test */
13389     for (i = 0; i < 4; i++) {
13390         up = (U32*)(buf + i);
13391         *up = 0xBeef;
13392         if (*up != 0xBeef) {
13393             printf("write failed (%x)\n", *up);
13394             exit(3);
13395         }
13396     }
13397
13398     exit(0);
13399 #else
13400     printf("1\n");
13401     exit(1);
13402 #endif
13403     return 0;
13404 }
13405 EOCP
13406 set try
13407 if eval $compile_ok; then
13408         echo "(Testing for character data alignment may dump core.)" >&4
13409         $run ./try 2>&1 >/dev/null
13410         case "$?" in
13411         0)      cat >&4 <<EOM
13412 You can access character data pretty unalignedly.
13413 EOM
13414                 d_u32align="$undef"
13415                 ;;
13416         *)      cat >&4 <<EOM
13417 It seems that you must access character data in an aligned manner.
13418 EOM
13419                 d_u32align="$define"
13420                 ;;
13421         esac
13422         $rm -f core core.try.* try.core
13423 else
13424         rp='Can you access character data at unaligned addresses?'
13425         dflt='n'
13426         . ./myread
13427         case "$ans" in
13428         [yY]*)  d_u32align="$undef"  ;;
13429         *)      d_u32align="$define" ;;
13430         esac
13431 fi
13432
13433 : see if ualarm exists
13434 set ualarm d_ualarm
13435 eval $inlibc
13436
13437 : see if umask exists
13438 set umask d_umask
13439 eval $inlibc
13440
13441 : see if unordered exists
13442 set unordered d_unordered
13443 eval $inlibc
13444
13445 : see if usleep exists
13446 set usleep d_usleep
13447 eval $inlibc
13448
13449 : see if prototype for usleep is available
13450 echo " "
13451 set d_usleepproto usleep $i_unistd unistd.h
13452 eval $hasproto
13453
13454 : see if ustat exists
13455 set ustat d_ustat
13456 eval $inlibc
13457
13458 : backward compatibility for d_hvfork
13459 if test X$d_hvfork != X; then
13460         d_vfork="$d_hvfork"
13461         d_hvfork=''
13462 fi
13463 : see if there is a vfork
13464 val=''
13465 set vfork val
13466 eval $inlibc
13467
13468 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13469 : perl on Solaris 2.x, and probably elsewhere.
13470 case "$val" in
13471 $define)
13472         echo " "
13473         case "$usevfork" in
13474         false) dflt='n';;
13475         *) dflt='y';;
13476         esac
13477         cat <<'EOM'
13478  
13479 Perl can only use a vfork() that doesn't suffer from strict
13480 restrictions on calling functions or modifying global data in
13481 the child.  For example, glibc-2.1 contains such a vfork()
13482 that is unsuitable.  If your system provides a proper fork()
13483 call, chances are that you do NOT want perl to use vfork().
13484
13485 EOM
13486         rp="Do you still want to use vfork()?"
13487         . ./myread
13488         case "$ans" in
13489         y|Y) ;;
13490         *)
13491                 echo "Ok, we won't use vfork()."
13492                 val="$undef"
13493                 ;;
13494         esac
13495         ;;
13496 esac
13497 set d_vfork
13498 eval $setvar
13499 case "$d_vfork" in
13500 $define) usevfork='true';;
13501 *) usevfork='false';;
13502 esac
13503
13504 : see if closedir exists
13505 set closedir d_closedir
13506 eval $inlibc
13507
13508 case "$d_closedir" in
13509 "$define")
13510         echo " "
13511         echo "Checking whether closedir() returns a status..." >&4
13512         cat > try.c <<EOM
13513 #$i_dirent I_DIRENT             /**/
13514 #$i_sysdir I_SYS_DIR            /**/
13515 #$i_sysndir I_SYS_NDIR          /**/
13516 #$i_systypes I_SYS_TYPES        /**/
13517
13518 #if defined(I_SYS_TYPES)
13519 #include <sys/types.h>
13520 #endif
13521 #if defined(I_DIRENT)
13522 #include <dirent.h>
13523 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13524 #include <sys/dir.h>
13525 #endif
13526 #else
13527 #ifdef I_SYS_NDIR
13528 #include <sys/ndir.h>
13529 #else
13530 #ifdef I_SYS_DIR
13531 #ifdef hp9000s500
13532 #include <ndir.h>       /* may be wrong in the future */
13533 #else
13534 #include <sys/dir.h>
13535 #endif
13536 #endif
13537 #endif
13538 #endif 
13539 int main() { return closedir(opendir(".")); }
13540 EOM
13541         set try
13542         if eval $compile_ok; then
13543                 if $run ./try > /dev/null 2>&1 ; then
13544                         echo "Yes, it does."
13545                         val="$undef"
13546                 else
13547                         echo "No, it doesn't."
13548                         val="$define"
13549                 fi
13550         else
13551                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13552                 val="$define"
13553         fi
13554         ;;
13555 *)
13556         val="$undef";
13557         ;;
13558 esac
13559 set d_void_closedir
13560 eval $setvar
13561 $rm -f try try.*
13562 : see if there is a wait4
13563 set wait4 d_wait4
13564 eval $inlibc
13565
13566 : see if waitpid exists
13567 set waitpid d_waitpid
13568 eval $inlibc
13569
13570 : see if wcstombs exists
13571 set wcstombs d_wcstombs
13572 eval $inlibc
13573
13574 : see if wctomb exists
13575 set wctomb d_wctomb
13576 eval $inlibc
13577
13578 : see if writev exists
13579 set writev d_writev
13580 eval $inlibc
13581
13582 : preserve RCS keywords in files with variable substitution, grrr
13583 Date='$Date'
13584 Id='$Id'
13585 Log='$Log'
13586 RCSfile='$RCSfile'
13587 Revision='$Revision'
13588
13589 : check for alignment requirements
13590 echo " "
13591 case "$usecrosscompile$multiarch" in
13592 *$define*)
13593         $cat <<EOM
13594 You seem to be either cross-compiling or doing a multiarchitecture build,
13595 skipping the memory alignment check.
13596
13597 EOM
13598         case "$alignbytes" in
13599         '') alignbytes=8 ;;
13600         esac
13601         ;;
13602 *)
13603         case "$alignbytes" in
13604         '') echo "Checking alignment constraints..." >&4
13605                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13606                         $cat >try.c <<'EOCP'
13607 typedef long double NV;
13608 EOCP
13609                 else
13610                         $cat >try.c <<'EOCP'
13611 typedef double NV;
13612 EOCP
13613                 fi
13614                 $cat >>try.c <<'EOCP'
13615 #include <stdio.h>
13616 struct foobar {
13617         char foo;
13618         NV bar;
13619 } try_algn;
13620 int main()
13621 {
13622     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13623     return(0);
13624 }
13625 EOCP
13626                 set try
13627                 if eval $compile_ok; then
13628                         dflt=`$run ./try`
13629                 else
13630                         dflt='8'
13631                         echo "(I can't seem to compile the test program...)"
13632                 fi
13633                 ;;
13634         *) dflt="$alignbytes"
13635                 ;;
13636         esac
13637         rp="Doubles must be aligned on a how-many-byte boundary?"
13638         . ./myread
13639         alignbytes="$ans"
13640         $rm -f try.c try
13641         ;;
13642 esac
13643
13644
13645 : set the base revision
13646 baserev=5.0
13647
13648 : how do we catenate cpp tokens here?
13649 echo " "
13650 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13651 $cat >cpp_stuff.c <<'EOCP'
13652 #define RCAT(a,b)a/**/b
13653 #define ACAT(a,b)a ## b
13654 RCAT(Rei,ser)
13655 ACAT(Cir,cus)
13656 EOCP
13657 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13658 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13659         echo "Oh!  Smells like ANSI's been here." >&4
13660         echo "We can catify or stringify, separately or together!"
13661         cpp_stuff=42
13662 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13663         echo "Ah, yes!  The good old days!" >&4
13664         echo "However, in the good old days we don't know how to stringify and"
13665         echo "catify at the same time."
13666         cpp_stuff=1
13667 else
13668         $cat >&4 <<EOM
13669 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13670 to have to edit the values of CAT[2-5] in config.h...
13671 EOM
13672         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13673 fi
13674 $rm -f cpp_stuff.*
13675
13676 : see if this is a db.h system
13677 set db.h i_db
13678 eval $inhdr
13679
13680 case "$i_db" in
13681 $define)
13682         : Check db version.
13683         echo " "
13684         echo "Checking Berkeley DB version ..." >&4
13685         $cat >try.c <<EOCP
13686 #$d_const HASCONST
13687 #ifndef HASCONST
13688 #define const
13689 #endif
13690 #include <sys/types.h>
13691 #include <stdio.h>
13692 #include <db.h>
13693 int main(int argc, char *argv[])
13694 {
13695 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13696     int Major, Minor, Patch ;
13697     unsigned long Version ;
13698     (void)db_version(&Major, &Minor, &Patch) ;
13699     if (argc == 2) {
13700         printf("%d %d %d %d %d %d\n",
13701                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13702                Major, Minor, Patch);
13703         exit(0);
13704     }
13705     printf("You have Berkeley DB Version 2 or greater.\n");
13706
13707     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13708                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13709     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13710                 Major, Minor, Patch) ;
13711
13712     /* check that db.h & libdb are compatible */
13713     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13714         printf("db.h and libdb are incompatible.\n") ;
13715         exit(3);        
13716     }
13717
13718     printf("db.h and libdb are compatible.\n") ;
13719
13720     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13721                 + DB_VERSION_PATCH ;
13722
13723     /* needs to be >= 2.3.4 */
13724     if (Version < 2003004) {
13725     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13726         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13727         exit(2);        
13728     }
13729
13730     exit(0);
13731 #else
13732 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13733     if (argc == 2) {
13734         printf("1 0 0\n");
13735         exit(0);
13736     }
13737     printf("You have Berkeley DB Version 1.\n");
13738     exit(0);    /* DB version < 2: the coast is clear. */
13739 #else
13740     exit(1);    /* <db.h> not Berkeley DB? */
13741 #endif
13742 #endif
13743 }
13744 EOCP
13745         set try
13746         if eval $compile_ok && $run ./try; then
13747                 echo 'Looks OK.' >&4
13748                 set `$run ./try 1`
13749                 db_version_major=$1
13750                 db_version_minor=$2
13751                 db_version_patch=$3
13752         else
13753                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13754                 i_db=$undef
13755                 case " $libs " in
13756                 *"-ldb "*)
13757                         : Remove db from list of libraries to use
13758                         echo "Removing unusable -ldb from library list" >&4
13759                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13760                         shift
13761                         libs="$*"
13762                         echo "libs = $libs" >&4
13763                         ;;
13764                 esac
13765         fi
13766         $rm -f try.*
13767         ;;
13768 esac
13769
13770 case "$i_db" in
13771 define)
13772         : Check the return type needed for hash 
13773         echo " "
13774         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13775         $cat >try.c <<EOCP
13776 #$d_const HASCONST
13777 #ifndef HASCONST
13778 #define const
13779 #endif
13780 #include <sys/types.h>
13781 #include <db.h>
13782
13783 #ifndef DB_VERSION_MAJOR
13784 u_int32_t hash_cb (ptr, size)
13785 const void *ptr;
13786 size_t size;
13787 {
13788 }
13789 HASHINFO info;
13790 int main()
13791 {
13792         info.hash = hash_cb;
13793 }
13794 #endif
13795 EOCP
13796         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13797                 if $contains warning try.out >>/dev/null 2>&1 ; then
13798                         db_hashtype='int'
13799                 else
13800                         db_hashtype='u_int32_t'
13801                 fi
13802         else
13803                 : XXX Maybe we should just give up here.
13804                 db_hashtype=u_int32_t
13805                 $cat try.out >&4
13806                 echo "Help:  I can't seem to compile the db test program." >&4
13807                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13808         fi
13809         $rm -f try.*
13810         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13811         ;;
13812 *)      db_hashtype=u_int32_t
13813         ;;
13814 esac
13815 case "$i_db" in
13816 define)
13817         : Check the return type needed for prefix 
13818         echo " "
13819         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13820         cat >try.c <<EOCP
13821 #$d_const HASCONST
13822 #ifndef HASCONST
13823 #define const
13824 #endif
13825 #include <sys/types.h>
13826 #include <db.h>
13827
13828 #ifndef DB_VERSION_MAJOR
13829 size_t prefix_cb (key1, key2)
13830 const DBT *key1;
13831 const DBT *key2;
13832 {
13833 }
13834 BTREEINFO info;
13835 int main()
13836 {
13837         info.prefix = prefix_cb;
13838 }
13839 #endif
13840 EOCP
13841         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13842                 if $contains warning try.out >>/dev/null 2>&1 ; then
13843                         db_prefixtype='int'
13844                 else
13845                         db_prefixtype='size_t'
13846                 fi
13847         else
13848                 db_prefixtype='size_t'
13849                 : XXX Maybe we should just give up here.
13850                 $cat try.out >&4
13851                 echo "Help:  I can't seem to compile the db test program." >&4
13852                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13853         fi
13854         $rm -f try.*
13855         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13856         ;;
13857 *)      db_prefixtype='size_t'
13858         ;;
13859 esac
13860
13861
13862 : How can we generate normalized random numbers ?
13863 echo " "
13864 echo "Looking for a random number function..." >&4
13865 case "$randfunc" in
13866 '')
13867         if set drand48 val -f; eval $csym; $val; then
13868                 dflt="drand48"
13869                 echo "Good, found drand48()." >&4
13870         elif set random val -f; eval $csym; $val; then
13871                 dflt="random"
13872                 echo "OK, found random()." >&4
13873         else
13874                 dflt="rand"
13875                 echo "Yick, looks like I have to use rand()." >&4
13876         fi
13877         echo " "
13878         ;;
13879 *)
13880         dflt="$randfunc"
13881         ;;
13882 esac
13883 cont=true
13884
13885 case "$ccflags" in
13886 *-Dmy_rand=*|*-Dmy_srand=*)
13887         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13888         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13889         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13890         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13891         ;;
13892 esac
13893
13894 while $test "$cont"; do
13895         rp="Use which function to generate random numbers?"
13896         . ./myread
13897         if $test "$ans" = "$dflt"; then
13898                 : null
13899         else
13900                 randbits=''
13901         fi
13902         randfunc="$ans"
13903         if set $ans val -f; eval $csym; $val; then
13904                 cont=''
13905         else
13906                 dflt=y
13907                 rp="I cannot find function $ans. Use that name anyway?"
13908                 . ./myread
13909                 dflt=rand
13910                 case "$ans" in
13911                         [yY]*) cont='';;
13912                 esac
13913         fi
13914         case "$cont" in
13915         '')
13916                 case "$randfunc" in
13917                 drand48)
13918                         drand01="drand48()"
13919                         seedfunc="srand48"
13920                         randbits=48
13921                         randseedtype=long
13922                         ;;
13923                 rand|random)
13924                         case "$randbits" in
13925                         '')
13926 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13927                                 $cat >try.c <<EOCP
13928 #$i_unistd I_UNISTD
13929 #$i_stdlib I_STDLIB
13930 #include <stdio.h>
13931 #ifdef I_UNISTD
13932 #  include <unistd.h>
13933 #endif
13934 #ifdef I_STDLIB
13935 #  include <stdlib.h>
13936 #endif
13937 int main()
13938 {
13939         register int i;
13940         register unsigned long tmp;
13941         register unsigned long max = 0L;
13942
13943         for (i = 1000; i; i--) {
13944                 tmp = (unsigned long) $randfunc();
13945                 if (tmp > max) max = tmp;
13946         }
13947         for (i = 0; max; i++)
13948                 max /= 2;
13949         printf("%d\n",i);
13950 }
13951 EOCP
13952                                 set try
13953                                 if eval $compile_ok; then
13954                                         dflt=`try`
13955                                 else
13956                                         dflt='?'
13957                                         echo "(I can't seem to compile the test program...)"
13958                                 fi
13959                                 ;;
13960                         *)
13961                                 dflt="$randbits"
13962                                 ;;
13963                         esac
13964                         rp="How many bits does your $randfunc() function produce?"
13965                         . ./myread
13966                         randbits="$ans"
13967                         $rm -f try.c try
13968                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13969                         seedfunc="s$randfunc"
13970                         randseedtype=unsigned
13971                         ;;
13972                 *)
13973                         dflt="31"
13974                         rp="How many bits does your $randfunc() function produce?"
13975                         . ./myread
13976                         randbits="$ans"
13977                         seedfunc="s$randfunc"
13978                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13979                         if set $seedfunc val -f; eval $csym; $val; then
13980                                 echo "(Using $seedfunc() to seed random generator)"
13981                         else
13982                                 echo "(Warning: no $seedfunc() to seed random generator)"
13983                                 seedfunc=rand
13984                         fi
13985                         randseedtype=unsigned
13986                         ;;
13987                 esac
13988                 ;;
13989         esac
13990 done
13991
13992 echo " "
13993 echo "Determining whether or not we are on an EBCDIC system..." >&4
13994 $cat >try.c <<'EOM'
13995 int main()
13996 {
13997   if ('M'==0xd4) return 0;
13998   return 1;
13999 }
14000 EOM
14001
14002 val=$undef
14003 set try
14004 if eval $compile_ok; then
14005         if $run ./try; then
14006                 echo "You seem to speak EBCDIC." >&4
14007                 val="$define"
14008         else
14009                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
14010         fi
14011 else
14012         echo "I'm unable to compile the test program." >&4
14013         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
14014 fi
14015 $rm -f try try.*
14016 set ebcdic
14017 eval $setvar
14018
14019 echo " "
14020 $cat >&4 <<EOM
14021 Checking how to flush all pending stdio output...
14022 EOM
14023 # I only know how to find the first 32 possibly open files on SunOS.
14024 # See also hints/sunos_4_1.sh and util.c  --AD
14025 case "$osname" in
14026 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
14027 esac
14028 $cat >>try.c <<EOCP
14029 #include <stdio.h>
14030 #$i_unistd I_UNISTD
14031 #ifdef I_UNISTD
14032 # include <unistd.h>
14033 #endif
14034 #$d_sysconf HAS_SYSCONF
14035 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
14036 #ifdef HAS_STDIO_STREAM_ARRAY
14037 # define STDIO_STREAM_ARRAY $stdio_stream_array
14038 #endif
14039 int main() {
14040   FILE* p;
14041   unlink("try.out");
14042   p = fopen("try.out", "w");
14043 #ifdef TRY_FPUTC
14044   fputc('x', p);
14045 #else
14046 # ifdef TRY_FPRINTF
14047   fprintf(p, "x");
14048 # endif
14049 #endif
14050 #ifdef TRY_FFLUSH_NULL
14051   fflush(NULL);
14052 #endif
14053 #ifdef TRY_FFLUSH_ALL
14054   {
14055     long open_max = -1;
14056 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
14057     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
14058 # else
14059 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
14060     open_max = sysconf(_SC_OPEN_MAX);
14061 #  else
14062 #   ifdef FOPEN_MAX
14063     open_max = FOPEN_MAX;
14064 #   else
14065 #    ifdef OPEN_MAX
14066     open_max = OPEN_MAX;
14067 #    else
14068 #     ifdef _NFILE
14069     open_max = _NFILE;
14070 #     endif
14071 #    endif
14072 #   endif
14073 #  endif
14074 # endif 
14075 # ifdef HAS_STDIO_STREAM_ARRAY
14076     if (open_max > 0) {
14077       long i;
14078       for (i = 0; i < open_max; i++)
14079             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
14080                 STDIO_STREAM_ARRAY[i]._file < open_max &&
14081                 STDIO_STREAM_ARRAY[i]._flag)
14082                 fflush(&STDIO_STREAM_ARRAY[i]);
14083     }   
14084   }
14085 # endif
14086 #endif
14087   _exit(42);
14088 }
14089 EOCP
14090 : first we have to find out how _not_ to flush
14091 $to try.c
14092 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
14093     output=''
14094     set try -DTRY_FPUTC
14095     if eval $compile; then
14096             $run ./try 2>/dev/null
14097             code="$?"
14098             $from try.out
14099             if $test ! -s try.out -a "X$code" = X42; then
14100                 output=-DTRY_FPUTC
14101             fi
14102     fi
14103     case "$output" in
14104     '')
14105             set try -DTRY_FPRINTF
14106             if eval $compile; then
14107                     $run ./try 2>/dev/null
14108                     code="$?"
14109                     $from try.out
14110                     if $test ! -s try.out -a "X$code" = X42; then
14111                         output=-DTRY_FPRINTF
14112                     fi
14113             fi
14114         ;;
14115     esac
14116 fi
14117 : check for fflush NULL behaviour
14118 case "$fflushNULL" in
14119 '')     set try -DTRY_FFLUSH_NULL $output
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                         fflushNULL="`$cat try.out`"
14126                 else
14127                         if $test "X$code" != X42; then
14128                                 $cat >&4 <<EOM
14129 (If this test failed, don't worry, we'll try another method shortly.)
14130 EOM
14131                         fi
14132                 fi
14133         fi
14134         $rm -f core try.core core.try.*
14135         case "$fflushNULL" in
14136         x)      $cat >&4 <<EOM
14137 Your fflush(NULL) works okay for output streams.
14138 Let's see if it clobbers input pipes...
14139 EOM
14140 # As of mid-March 2000 all versions of Solaris appear to have a stdio
14141 # bug that improperly flushes the input end of pipes.  So we avoid the
14142 # autoflush on fork/system/exec support for now. :-(
14143 $cat >tryp.c <<EOCP
14144 #include <stdio.h>
14145 int
14146 main(int argc, char **argv)
14147 {
14148     char buf[1024];
14149     int i;
14150     char *bp = buf;
14151     while (1) {
14152         while ((i = getc(stdin)) != -1
14153                && (*bp++ = i) != '\n'
14154                && bp < &buf[1024])
14155         /* DO NOTHING */ ;
14156         *bp = '\0';
14157         fprintf(stdout, "%s", buf);
14158         fflush(NULL);
14159         if (i == -1)
14160             return 0;
14161         bp = buf;
14162     }
14163 }
14164 EOCP
14165                 fflushNULL="$define"
14166                 set tryp
14167                 if eval $compile; then
14168                     $rm -f tryp.out
14169                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14170                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
14171                        $cat >&4 <<EOM
14172 fflush(NULL) seems to behave okay with input streams.
14173 EOM
14174                         fflushNULL="$define"
14175                     else
14176                         $cat >&4 <<EOM
14177 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
14178 EOM
14179                         fflushNULL="$undef"
14180                     fi
14181                 fi
14182                 $rm -f core tryp.c tryp.core core.tryp.*
14183                 ;;
14184         '')     $cat >&4 <<EOM
14185 Your fflush(NULL) isn't working (contrary to ANSI C).
14186 EOM
14187                 fflushNULL="$undef"
14188                 ;;
14189         *)      $cat >&4 <<EOM
14190 Cannot figure out whether your fflush(NULL) works or not.
14191 I'm assuming it doesn't (contrary to ANSI C).
14192 EOM
14193                 fflushNULL="$undef"
14194                 ;;
14195         esac
14196         ;;
14197 $define|true|[yY]*)
14198         fflushNULL="$define"
14199         ;;
14200 *)
14201         fflushNULL="$undef"
14202         ;;
14203 esac
14204 : check explicit looping only if NULL did not work, and if the pipe
14205 : bug does not show up on an explicit flush too
14206 case "$fflushNULL" in
14207 "$undef")
14208         $cat >tryp.c <<EOCP
14209 #include <stdio.h>
14210 int
14211 main(int argc, char **argv)
14212 {
14213     char buf[1024];
14214     int i;
14215     char *bp = buf;
14216     while (1) {
14217         while ((i = getc(stdin)) != -1
14218                && (*bp++ = i) != '\n'
14219                && bp < &buf[1024])
14220         /* DO NOTHING */ ;
14221         *bp = '\0';
14222         fprintf(stdout, "%s", buf);
14223         fflush(stdin);
14224         if (i == -1)
14225             return 0;
14226         bp = buf;
14227     }
14228 }
14229 EOCP
14230         set tryp
14231         if eval $compile; then
14232             $rm -f tryp.out
14233             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
14234             if cmp tryp.c tryp.out >/dev/null 2>&1; then
14235                $cat >&4 <<EOM
14236 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
14237 EOM
14238                 : now check for fflushall behaviour
14239                 case "$fflushall" in
14240                 '')     set try -DTRY_FFLUSH_ALL $output
14241                         if eval $compile; then
14242                                 $cat >&4 <<EOM
14243 (Now testing the other method--but note that this also may fail.)
14244 EOM
14245                                 $run ./try 2>/dev/null
14246                                 code=$?
14247                                 $from try.out
14248                                 if $test -s try.out -a "X$code" = X42; then
14249                                         fflushall="`$cat try.out`"
14250                                 fi
14251                         fi
14252                         $rm -f core try.core core.try.*
14253                         case "$fflushall" in
14254                         x)      $cat >&4 <<EOM
14255 Whew. Flushing explicitly all the stdio streams works.
14256 EOM
14257                                 fflushall="$define"
14258                                 ;;
14259                         '')     $cat >&4 <<EOM
14260 Sigh. Flushing explicitly all the stdio streams doesn't work.
14261 EOM
14262                                 fflushall="$undef"
14263                                 ;;
14264                         *)      $cat >&4 <<EOM
14265 Cannot figure out whether flushing stdio streams explicitly works or not.
14266 I'm assuming it doesn't.
14267 EOM
14268                                 fflushall="$undef"
14269                                 ;;
14270                         esac
14271                         ;;
14272                 "$define"|true|[yY]*)
14273                         fflushall="$define"
14274                         ;;
14275                 *)
14276                         fflushall="$undef"
14277                         ;;
14278                 esac
14279             else
14280                 $cat >&4 <<EOM
14281 All is futile.  Even fflush(stdin) clobbers input pipes!
14282 EOM
14283                 fflushall="$undef"
14284             fi
14285         else
14286             fflushall="$undef"
14287         fi
14288         $rm -f core tryp.c tryp.core core.tryp.*
14289         ;;
14290 *)      fflushall="$undef"
14291         ;;
14292 esac
14293
14294 case "$fflushNULL$fflushall" in
14295 undefundef)
14296         $cat <<EOM
14297 OK, I give up.  I cannot figure out how to flush pending stdio output.
14298 We won't be flushing handles at all before fork/exec/popen.
14299 EOM
14300         ;;
14301 esac
14302 $rm -f try.* try$exe_ext
14303
14304 : Store the full pathname to the ar program for use in the C program
14305 : Respect a hint or command line value for full_ar.
14306 case "$full_ar" in
14307 '') full_ar=$ar ;;
14308 esac
14309
14310 : Store the full pathname to the sed program for use in the C program
14311 full_sed=$sed
14312
14313 : see what type gids are declared as in the kernel
14314 echo " "
14315 echo "Looking for the type for group ids returned by getgid()."
14316 set gid_t gidtype xxx stdio.h sys/types.h
14317 eval $typedef
14318 case "$gidtype" in
14319 xxx)
14320         xxx=`./findhdr sys/user.h`
14321         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
14322         case $1 in
14323         unsigned) dflt="$1 $2" ;;
14324         *) dflt="$1" ;;
14325         esac
14326         ;;
14327 *) dflt="$gidtype";;
14328 esac
14329 case "$gidtype" in
14330 gid_t) echo "gid_t found." ;;
14331 *)      rp="What is the type for group ids returned by getgid()?"
14332         . ./myread
14333         gidtype="$ans"
14334         ;;
14335 esac
14336
14337 echo " "
14338 case "$gidtype" in
14339 *_t) zzz="$gidtype"     ;;
14340 *)   zzz="gid"          ;;
14341 esac
14342 echo "Checking the size of $zzz..." >&4 
14343 cat > try.c <<EOCP
14344 #include <sys/types.h>
14345 #include <stdio.h>
14346 int main() {
14347     printf("%d\n", (int)sizeof($gidtype));
14348     exit(0);
14349 }
14350 EOCP
14351 set try
14352 if eval $compile_ok; then
14353         yyy=`$run ./try`
14354         case "$yyy" in
14355         '')     gidsize=4
14356                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14357                 ;;
14358         *)      gidsize=$yyy
14359                 echo "Your $zzz is $gidsize bytes long."
14360                 ;;
14361         esac
14362 else
14363         gidsize=4
14364         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14365 fi
14366
14367
14368 echo " "
14369 case "$gidtype" in
14370 *_t) zzz="$gidtype"     ;;
14371 *)   zzz="gid"          ;;
14372 esac
14373 echo "Checking the sign of $zzz..." >&4 
14374 cat > try.c <<EOCP
14375 #include <sys/types.h>
14376 #include <stdio.h>
14377 int main() {
14378         $gidtype foo = -1;
14379         if (foo < 0)
14380                 printf("-1\n");
14381         else
14382                 printf("1\n");
14383 }
14384 EOCP
14385 set try
14386 if eval $compile; then
14387         yyy=`$run ./try`
14388         case "$yyy" in
14389         '')     gidsign=1
14390                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14391                 ;;
14392         *)      gidsign=$yyy
14393                 case "$gidsign" in
14394                  1) echo "Your $zzz is unsigned." ;;
14395                 -1) echo "Your $zzz is signed."   ;;
14396                 esac
14397                 ;;
14398         esac
14399 else
14400         gidsign=1
14401         echo "(I can't compile the test program--guessing unsigned.)" >&4
14402 fi
14403
14404
14405 echo " "
14406
14407 if $test X"$quadtype" != X; then
14408
14409 echo "Checking how to print 64-bit integers..." >&4
14410
14411 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14412         $cat >try.c <<'EOCP'
14413 #include <sys/types.h>
14414 #include <stdio.h>
14415 int main() {
14416   int q = 12345678901;
14417   printf("%ld\n", q);
14418 }
14419 EOCP
14420         set try
14421         if eval $compile; then
14422                 yyy=`$run ./try`
14423                 case "$yyy" in
14424                 12345678901)
14425                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14426                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14427                         echo "We will use %d."
14428                         ;;
14429                 esac
14430         fi
14431 fi
14432
14433 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14434         $cat >try.c <<'EOCP'
14435 #include <sys/types.h>
14436 #include <stdio.h>
14437 int main() {
14438   long q = 12345678901;
14439   printf("%ld\n", q);
14440 }
14441 EOCP
14442         set try
14443         if eval $compile; then
14444                 yyy=`$run ./try`
14445                 case "$yyy" in
14446                 12345678901)
14447                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14448                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14449                         echo "We will use %ld."
14450                         ;;
14451                 esac
14452         fi
14453 fi
14454
14455 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14456         $cat >try.c <<'EOCP'
14457 #include <sys/types.h>
14458 #include <inttypes.h>
14459 #include <stdio.h>
14460 int main() {
14461   int64_t q = 12345678901;
14462   printf("%" PRId64 "\n", q);
14463 }
14464 EOCP
14465         set try
14466         if eval $compile; then
14467                 yyy=`$run ./try`
14468                 case "$yyy" in
14469                 12345678901)
14470                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14471                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14472                         echo "We will use the C9X style."
14473                         ;;
14474                 esac
14475         fi
14476 fi
14477
14478 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14479         $cat >try.c <<EOCP
14480 #include <sys/types.h>
14481 #include <stdio.h>
14482 int main() {
14483   $quadtype q = 12345678901;
14484   printf("%Ld\n", q);
14485 }
14486 EOCP
14487         set try
14488         if eval $compile; then
14489                 yyy=`$run ./try`
14490                 case "$yyy" in
14491                 12345678901)
14492                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14493                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14494                         echo "We will use %Ld."
14495                         ;;
14496                 esac
14497         fi
14498 fi
14499
14500 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14501         $cat >try.c <<'EOCP'
14502 #include <sys/types.h>
14503 #include <stdio.h>
14504 int main() {
14505   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14506   printf("%lld\n", q);
14507 }
14508 EOCP
14509         set try
14510         if eval $compile; then
14511                 yyy=`$run ./try`
14512                 case "$yyy" in
14513                 12345678901)
14514                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14515                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14516                         echo "We will use the %lld style."
14517                         ;;
14518                 esac
14519         fi
14520 fi
14521
14522 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14523         $cat >try.c <<EOCP
14524 #include <sys/types.h>
14525 #include <stdio.h>
14526 int main() {
14527   $quadtype q = 12345678901;
14528   printf("%qd\n", q);
14529 }
14530 EOCP
14531         set try
14532         if eval $compile; then
14533                 yyy=`$run ./try`
14534                 case "$yyy" in
14535                 12345678901)
14536                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14537                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14538                         echo "We will use %qd."
14539                         ;;
14540                 esac
14541         fi
14542 fi
14543
14544 if $test X"$sPRId64" = X; then
14545         echo "Cannot figure out how to print 64-bit integers." >&4
14546 fi
14547
14548 $rm -f try try.*
14549
14550 fi
14551
14552 case "$sPRId64" in
14553 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14554         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14555         ;;
14556 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14557         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14558         ;;
14559 esac
14560
14561
14562 echo " "
14563 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14564
14565 if $test X"$ivsize" = X8; then
14566         ivdformat="$sPRId64"
14567         uvuformat="$sPRIu64"
14568         uvoformat="$sPRIo64"
14569         uvxformat="$sPRIx64"
14570         uvXUformat="$sPRIXU64"
14571 else
14572         if $test X"$ivsize" = X"$longsize"; then
14573                 ivdformat='"ld"'
14574                 uvuformat='"lu"'
14575                 uvoformat='"lo"'
14576                 uvxformat='"lx"'
14577                 uvXUformat='"lX"'
14578         else
14579                 if $test X"$ivsize" = X"$intsize"; then
14580                         ivdformat='"d"'
14581                         uvuformat='"u"'
14582                         uvoformat='"o"'
14583                         uvxformat='"x"'
14584                         uvXUformat='"X"'
14585                 else
14586                         : far out
14587                         if $test X"$ivsize" = X"$shortsize"; then
14588                                 ivdformat='"hd"'
14589                                 uvuformat='"hu"'
14590                                 uvoformat='"ho"'
14591                                 uvxformat='"hx"'
14592                                 uvXUformat='"hX"'
14593                         fi
14594                 fi
14595         fi
14596 fi
14597
14598 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14599         nveformat="$sPRIeldbl"
14600         nvfformat="$sPRIfldbl"
14601         nvgformat="$sPRIgldbl"
14602         nvEUformat="$sPRIEUldbl"
14603         nvFUformat="$sPRIFUldbl"
14604         nvGUformat="$sPRIGUldbl"
14605 else
14606         nveformat='"e"'
14607         nvfformat='"f"'
14608         nvgformat='"g"'
14609         nvEUformat='"E"'
14610         nvFUformat='"F"'
14611         nvGUformat='"G"'
14612 fi
14613
14614 case "$ivdformat" in
14615 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14616     exit 1
14617     ;;
14618 esac
14619
14620
14621 echo " "
14622 $echo "Checking the format string to be used for gids..." >&4
14623
14624 case "$gidsign" in
14625 -1)     if $test X"$gidsize" = X"$ivsize"; then
14626                 gidformat="$ivdformat"
14627         else
14628                 if $test X"$gidsize" = X"$longsize"; then
14629                         gidformat='"ld"'
14630                 else
14631                         if $test X"$gidsize" = X"$intsize"; then
14632                                 gidformat='"d"'
14633                         else
14634                                 if $test X"$gidsize" = X"$shortsize"; then
14635                                         gidformat='"hd"'
14636                                 fi
14637                         fi
14638                 fi
14639         fi
14640         ;;
14641 *)      if $test X"$gidsize" = X"$uvsize"; then
14642                 gidformat="$uvuformat"
14643         else
14644                 if $test X"$gidsize" = X"$longsize"; then
14645                         gidformat='"lu"'
14646                 else
14647                         if $test X"$gidsize" = X"$intsize"; then
14648                                 gidformat='"u"'
14649                         else
14650                                 if $test X"$gidsize" = X"$shortsize"; then
14651                                         gidformat='"hu"'
14652                                 fi
14653                         fi
14654                 fi
14655         fi
14656         ;;
14657 esac
14658
14659 : see if getgroups exists
14660 set getgroups d_getgrps
14661 eval $inlibc
14662
14663 : see if setgroups exists
14664 set setgroups d_setgrps
14665 eval $inlibc
14666
14667
14668 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14669 echo " "
14670 case "$d_getgrps$d_setgrps" in
14671 *define*)
14672         case "$groupstype" in
14673         '') dflt="$gidtype" ;;
14674         *)  dflt="$groupstype" ;;
14675         esac
14676         $cat <<EOM
14677 What type of pointer is the second argument to getgroups() and setgroups()?
14678 Usually this is the same as group ids, $gidtype, but not always.
14679
14680 EOM
14681         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14682         . ./myread
14683         groupstype="$ans"
14684         ;;
14685 *)  groupstype="$gidtype";;
14686 esac
14687
14688 echo " "
14689 echo "Checking if your $make program sets \$(MAKE)..." >&4
14690 case "$make_set_make" in
14691 '')
14692         $sed 's/^X //' > testmake.mak << 'EOF'
14693 Xall:
14694 X       @echo 'maketemp="$(MAKE)"'
14695 EOF
14696         case "`$make -f testmake.mak 2>/dev/null`" in
14697         *maketemp=*) make_set_make='#' ;;
14698         *)      make_set_make="MAKE=$make" ;;
14699         esac
14700         $rm -f testmake.mak
14701         ;;
14702 esac
14703 case "$make_set_make" in
14704 '#') echo "Yup, it does.";;
14705 *) echo "Nope, it doesn't.";;
14706 esac
14707
14708 : see what type is used for mode_t
14709 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14710 set mode_t modetype int stdio.h sys/types.h
14711 eval $typedef_ask
14712
14713 : see if stdarg is available
14714 echo " "
14715 if $test `./findhdr stdarg.h`; then
14716         echo "<stdarg.h> found." >&4
14717         valstd="$define"
14718 else
14719         echo "<stdarg.h> NOT found." >&4
14720         valstd="$undef"
14721 fi
14722
14723 : see if varags is available
14724 echo " "
14725 if $test `./findhdr varargs.h`; then
14726         echo "<varargs.h> found." >&4
14727 else
14728         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14729 fi
14730
14731 : set up the varargs testing programs
14732 $cat > varargs.c <<EOP
14733 #ifdef I_STDARG
14734 #include <stdarg.h>
14735 #endif
14736 #ifdef I_VARARGS
14737 #include <varargs.h>
14738 #endif
14739
14740 #ifdef I_STDARG
14741 int f(char *p, ...)
14742 #else
14743 int f(va_alist)
14744 va_dcl
14745 #endif
14746 {
14747         va_list ap;
14748 #ifndef I_STDARG
14749         char *p;
14750 #endif
14751 #ifdef I_STDARG
14752         va_start(ap,p);
14753 #else
14754         va_start(ap);
14755         p = va_arg(ap, char *);
14756 #endif
14757         va_end(ap);
14758 }
14759 EOP
14760 $cat > varargs <<EOP
14761 $startsh
14762 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14763         echo "true"
14764 else
14765         echo "false"
14766 fi
14767 $rm -f varargs$_o
14768 EOP
14769 chmod +x varargs
14770
14771 : now check which varargs header should be included
14772 echo " "
14773 i_varhdr=''
14774 case "$valstd" in
14775 "$define")
14776         if `./varargs I_STDARG`; then
14777                 val='stdarg.h'
14778         elif `./varargs I_VARARGS`; then
14779                 val='varargs.h'
14780         fi
14781         ;;
14782 *)
14783         if `./varargs I_VARARGS`; then
14784                 val='varargs.h'
14785         fi
14786         ;;
14787 esac
14788 case "$val" in
14789 '')
14790 echo "I could not find the definition for va_dcl... You have problems..." >&4
14791         val="$undef"; set i_stdarg; eval $setvar
14792         val="$undef"; set i_varargs; eval $setvar
14793         ;;
14794 *) 
14795         set i_varhdr
14796         eval $setvar
14797         case "$i_varhdr" in
14798         stdarg.h)
14799                 val="$define"; set i_stdarg; eval $setvar
14800                 val="$undef"; set i_varargs; eval $setvar
14801                 ;;
14802         varargs.h)
14803                 val="$undef"; set i_stdarg; eval $setvar
14804                 val="$define"; set i_varargs; eval $setvar
14805                 ;;
14806         esac
14807         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14808 esac
14809 $rm -f varargs*
14810
14811 : see if we need va_copy
14812 echo " "
14813 case "$i_stdarg" in
14814 "$define")
14815         $cat >try.c <<EOCP
14816 #include <stdarg.h>
14817 #include <stdio.h>
14818 #$i_stdlib I_STDLIB
14819 #ifdef I_STDLIB
14820 #include <stdlib.h>
14821 #endif
14822 #include <signal.h>
14823
14824 int
14825 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14826 {
14827   return vfprintf(f, fmt, *valp);
14828 }
14829  
14830 int    
14831 myvfprintf(FILE *f, const  char *fmt, va_list val)
14832 {
14833   return ivfprintf(f, fmt, &val);
14834 }
14835       
14836 int
14837 myprintf(char *fmt, ...) 
14838 {
14839   va_list val;
14840   va_start(val, fmt);
14841   return myvfprintf(stdout, fmt, val); 
14842 }         
14843
14844 int
14845 main(int ac, char **av)
14846 {
14847   signal(SIGSEGV, exit);
14848
14849   myprintf("%s%cs all right, then\n", "that", '\'');                            
14850   exit(0);      
14851 }
14852 EOCP
14853         set try
14854         if eval $compile && $run ./try 2>&1 >/dev/null; then
14855                 case "`$run ./try`" in
14856                 "that's all right, then")
14857                         okay=yes
14858                         ;;
14859                 esac
14860         fi
14861         case "$okay" in
14862         yes)    echo "It seems that you don't need va_copy()." >&4
14863                 need_va_copy="$undef"
14864                 ;;
14865         *)      echo "It seems that va_copy() or similar will be needed." >&4
14866                 need_va_copy="$define"
14867                 ;;
14868         esac
14869         $rm -f try.* core core.* *.core *.core.*
14870         ;;
14871 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14872         ;;
14873 esac
14874
14875 : define a fucntion to check prototypes
14876 $cat > protochk <<EOSH
14877 $startsh
14878 cc="$cc"
14879 optimize="$optimize"
14880 ccflags="$ccflags"
14881 prototype="$prototype"
14882 define="$define"
14883 rm=$rm
14884 EOSH
14885
14886 $cat >> protochk <<'EOSH'
14887
14888 $rm -f try.c
14889 foo="$1"
14890 shift
14891 while test $# -ge 2; do
14892         case "$1" in
14893                 $define) echo "#include <$2>" >> try.c ;;
14894                 literal) echo "$2" >> try.c ;;
14895         esac
14896     shift 2
14897 done
14898 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14899 cat >> try.c <<'EOCP'
14900 #ifdef CAN_PROTOTYPE
14901 #define _(args) args
14902 #else
14903 #define _(args) ()
14904 #endif
14905 EOCP
14906 echo "$foo" >> try.c
14907 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14908 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14909 status=$?
14910 $rm -f try.[co]
14911 exit $status
14912 EOSH
14913 chmod +x protochk
14914 $eunicefix protochk
14915
14916 : see what type is used for size_t
14917 rp="What is the type used for the length parameter for string functions?"
14918 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14919 eval $typedef_ask
14920
14921 : check for type of arguments to gethostbyaddr. 
14922 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14923         case "$d_gethbyaddr" in
14924         $define)
14925                 $cat <<EOM
14926
14927 Checking to see what type of arguments are accepted by gethostbyaddr().
14928 EOM
14929                 hdrs="$define sys/types.h
14930                         $d_socket sys/socket.h 
14931                         $i_niin netinet/in.h 
14932                         $i_netdb netdb.h
14933                         $i_unistd unistd.h"
14934                 : The first arg can 'char *' or 'void *'
14935                 : The second arg is some of integral type
14936                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14937                         for yyy in size_t long int; do
14938                                 case "$netdb_host_type" in
14939                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14940                                         if ./protochk "$try" $hdrs; then
14941                                                 echo "Your system accepts $xxx for the first arg."
14942                                                 echo "...and $yyy for the second arg."
14943                                                 netdb_host_type="$xxx"
14944                                                 netdb_hlen_type="$yyy"
14945                                         fi
14946                                         ;;
14947                                 esac
14948                         done
14949                 done
14950                 : In case none of those worked, prompt the user.
14951                 case "$netdb_host_type" in
14952                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14953                         dflt='char *'
14954                         . ./myread
14955                         netdb_host_type=$ans
14956                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14957                         dflt="$sizetype"
14958                         . ./myread
14959                         netdb_hlen_type=$ans
14960                         ;;
14961                 esac
14962                 ;;
14963         *)      : no gethostbyaddr, so pick harmless defaults
14964                 netdb_host_type='char *'
14965                 netdb_hlen_type="$sizetype"
14966                 ;;
14967         esac
14968         # Remove the "const" if needed. -- but then we'll have a 
14969         # prototype clash!
14970         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14971 fi
14972
14973 : check for type of argument to gethostbyname. 
14974 if test "X$netdb_name_type" = X ; then
14975         case "$d_gethbyname" in
14976         $define)
14977                 $cat <<EOM
14978
14979 Checking to see what type of argument is accepted by gethostbyname().
14980 EOM
14981                 hdrs="$define sys/types.h
14982                         $d_socket sys/socket.h 
14983                         $i_niin netinet/in.h 
14984                         $i_netdb netdb.h
14985                         $i_unistd unistd.h"
14986                 for xxx in "const char *" "char *"; do
14987                         case "$netdb_name_type" in
14988                         '')     try="extern struct hostent *gethostbyname($xxx);"
14989                                 if ./protochk "$try" $hdrs; then
14990                                         echo "Your system accepts $xxx."
14991                                         netdb_name_type="$xxx"
14992                                 fi
14993                                 ;;
14994                         esac
14995                 done
14996                 : In case none of those worked, prompt the user.
14997                 case "$netdb_name_type" in
14998                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14999                         dflt='char *'
15000                         . ./myread
15001                         netdb_name_type=$ans
15002                         ;;
15003                 esac
15004                 ;;
15005         *)      : no gethostbyname, so pick harmless default
15006                 netdb_name_type='char *'
15007                 ;;
15008         esac
15009 fi
15010
15011 : check for type of 1st argument to getnetbyaddr. 
15012 if test "X$netdb_net_type" = X ; then
15013         case "$d_getnbyaddr" in
15014         $define)
15015                 $cat <<EOM
15016
15017 Checking to see what type of 1st argument is accepted by getnetbyaddr().
15018 EOM
15019                 hdrs="$define sys/types.h
15020                         $d_socket sys/socket.h 
15021                         $i_niin netinet/in.h 
15022                         $i_netdb netdb.h
15023                         $i_unistd unistd.h"
15024                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
15025                         case "$netdb_net_type" in
15026                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
15027                                 if ./protochk "$try" $hdrs; then
15028                                         echo "Your system accepts $xxx."
15029                                         netdb_net_type="$xxx"
15030                                 fi
15031                                 ;;
15032                         esac
15033                 done
15034                 : In case none of those worked, prompt the user.
15035                 case "$netdb_net_type" in
15036                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
15037                         dflt='long'
15038                         . ./myread
15039                         netdb_net_type=$ans
15040                         ;;
15041                 esac
15042                 ;;
15043         *)      : no getnetbyaddr, so pick harmless default
15044                 netdb_net_type='long'
15045                 ;;
15046         esac
15047 fi
15048 : locate the preferred pager for this system
15049 case "$pager" in
15050 '')
15051         dflt=''
15052         case "$pg" in
15053         /*) dflt=$pg;;
15054         [a-zA-Z]:/*) dflt=$pg;;
15055         esac
15056         case "$more" in
15057         /*) dflt=$more;;
15058         [a-zA-Z]:/*) dflt=$more;;
15059         esac
15060         case "$less" in
15061         /*) dflt=$less;;
15062         [a-zA-Z]:/*) dflt=$less;;
15063         esac
15064         case "$dflt" in
15065         '') dflt=/usr/ucb/more;;
15066         esac
15067         ;;
15068 *) dflt="$pager";;
15069 esac
15070 echo " "
15071 fn=f/
15072 rp='What pager is used on your system?'
15073 . ./getfile
15074 pager="$ans"
15075
15076 : see what type pids are declared as in the kernel
15077 rp="What is the type of process ids on this system?"
15078 set pid_t pidtype int stdio.h sys/types.h
15079 eval $typedef_ask
15080
15081 : Find earliest binary compatible site_perl subdirectory perl can use.
15082 case "$bincompat5005" in
15083 "$define") xs_apiversion='5.005' ;;
15084 *) xs_apiversion=$version ;;   # The current site_perl version.
15085 esac
15086 : Find earliest pure perl site_perl subdirectory perl can use.
15087 : The versioned directories started at 5.005.
15088 pm_apiversion='5.005'
15089
15090 : see if ar generates random libraries by itself
15091 echo " "
15092 echo "Checking how to generate random libraries on your machine..." >&4
15093 echo 'int bar1() { return bar2(); }' > bar1.c
15094 echo 'int bar2() { return 2; }' > bar2.c
15095 $cat > foo.c <<'EOP'
15096 int main() { printf("%d\n", bar1()); exit(0); }
15097 EOP
15098 $cc $ccflags -c bar1.c >/dev/null 2>&1
15099 $cc $ccflags -c bar2.c >/dev/null 2>&1
15100 $cc $ccflags -c foo.c >/dev/null 2>&1
15101 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
15102 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15103         $run ./foobar >/dev/null 2>&1; then
15104         echo "$ar appears to generate random libraries itself."
15105         orderlib=false
15106         ranlib=":"
15107 elif $ar ts bar$_a >/dev/null 2>&1 &&
15108         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
15109         $run ./foobar >/dev/null 2>&1; then
15110                 echo "a table of contents needs to be added with '$ar ts'."
15111                 orderlib=false
15112                 ranlib="$ar ts"
15113 else
15114         case "$ranlib" in
15115         :) ranlib='';;
15116         '')
15117                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
15118                 $test -f $ranlib || ranlib=''
15119                 ;;
15120         esac
15121         if $test -n "$ranlib"; then
15122                 echo "your system has '$ranlib'; we'll use that."
15123                 orderlib=false
15124         else
15125                 echo "your system doesn't seem to support random libraries"
15126                 echo "so we'll use lorder and tsort to order the libraries."
15127                 orderlib=true
15128                 ranlib=":"
15129         fi
15130 fi
15131 $rm -f foo* bar* 
15132
15133 : check for type of arguments to select. 
15134 case "$selecttype" in
15135 '') case "$d_select" in
15136         $define)
15137                 echo " "
15138                 $cat <<EOM
15139 Checking to see what type of arguments are accepted by select().
15140 EOM
15141                 hdrs="$define sys/types.h
15142                         $i_systime sys/time.h 
15143                         $i_sysselct sys/select.h
15144                         $d_socket sys/socket.h"
15145                 : The first arg can be int, unsigned, or size_t
15146                 : The last arg may or may not be 'const'
15147                 val=''
15148                 : void pointer has been seen but using that
15149                 : breaks the selectminbits test
15150                 for xxx in 'fd_set *' 'int *'; do
15151                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
15152                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
15153                                         case "$val" in
15154                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
15155                                                 if ./protochk "$try" $hdrs; then
15156                                                         echo "Your system accepts $xxx."
15157                                                         val="$xxx"
15158                                                 fi
15159                                                 ;;
15160                                         esac
15161                                 done
15162                         done
15163                 done
15164                 case "$val" in
15165                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
15166                         case "$d_fd_set" in
15167                                 $define) dflt="fd_set *" ;;
15168                                 *)              dflt="int *" ;;
15169                         esac
15170                         . ./myread
15171                         val=$ans
15172                         ;;
15173                 esac
15174                 selecttype="$val"
15175                 ;;
15176         *)      : no select, so pick a harmless default
15177                 selecttype='int *'
15178                 ;;
15179         esac
15180         ;;
15181 esac
15182
15183 : check for the select 'width'
15184 case "$selectminbits" in
15185 '') case "$d_select" in
15186         $define)
15187                 $cat <<EOM
15188
15189 Checking to see on how many bits at a time your select() operates...
15190 EOM
15191                 $cat >try.c <<EOCP
15192 #include <sys/types.h>
15193 #$i_time I_TIME
15194 #$i_systime I_SYS_TIME
15195 #$i_systimek I_SYS_TIME_KERNEL
15196 #ifdef I_TIME
15197 #   include <time.h>
15198 #endif
15199 #ifdef I_SYS_TIME
15200 #   ifdef I_SYS_TIME_KERNEL
15201 #       define KERNEL
15202 #   endif
15203 #   include <sys/time.h>
15204 #   ifdef I_SYS_TIME_KERNEL
15205 #       undef KERNEL
15206 #   endif
15207 #endif
15208 #$i_sysselct I_SYS_SELECT
15209 #ifdef I_SYS_SELECT
15210 #include <sys/select.h>
15211 #endif
15212 #$d_socket HAS_SOCKET
15213 #ifdef HAS_SOCKET
15214 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
15215 #endif
15216 #include <stdio.h>
15217 $selecttype b;
15218 #define S sizeof(*(b))
15219 #define MINBITS 64
15220 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
15221 #define NBITS  (NBYTES * 8)
15222 int main() {
15223     char s[NBYTES];
15224     struct timeval t;
15225     int i;
15226     FILE* fp;
15227     int fd;
15228
15229     fclose(stdin);
15230     fp = fopen("try.c", "r");
15231     if (fp == 0)
15232       exit(1);
15233     fd = fileno(fp);
15234     if (fd < 0)
15235       exit(2);
15236     b = ($selecttype)s;
15237     for (i = 0; i < NBITS; i++)
15238         FD_SET(i, b);
15239     t.tv_sec  = 0;
15240     t.tv_usec = 0;
15241     select(fd + 1, b, 0, 0, &t);
15242     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
15243     printf("%d\n", i + 1);
15244     return 0;
15245 }
15246 EOCP
15247                 set try
15248                 if eval $compile_ok; then
15249                         selectminbits=`$run ./try`
15250                         case "$selectminbits" in
15251                         '')     cat >&4 <<EOM
15252 Cannot figure out on how many bits at a time your select() operates.
15253 I'll play safe and guess it is 32 bits.
15254 EOM
15255                                 selectminbits=32
15256                                 bits="32 bits"
15257                                 ;;
15258                         1)      bits="1 bit" ;;
15259                         *)      bits="$selectminbits bits" ;;
15260                         esac
15261                         echo "Your select() operates on $bits at a time." >&4
15262                 else
15263                         rp='What is the minimum number of bits your select() operates on?'
15264                         case "$byteorder" in
15265                         1234|12345678)  dflt=32 ;;
15266                         *)              dflt=1  ;;
15267                         esac
15268                         . ./myread
15269                         val=$ans
15270                         selectminbits="$val"
15271                 fi
15272                 $rm -f try.* try
15273                 ;;
15274         *)      : no select, so pick a harmless default
15275                 selectminbits='32'
15276                 ;;
15277         esac
15278         ;;
15279 esac
15280
15281 : Trace out the files included by signal.h, then look for SIGxxx names.
15282 : Remove SIGARRAYSIZE used by HPUX.
15283 : Remove SIGSTKSIZE used by Linux.
15284 : Remove SIGSTKSZ used by Posix.
15285 : Remove SIGTYP void lines used by OS2.
15286 : Some cpps, like os390, dont give the file name anywhere
15287 if [ "X$fieldn" = X ]; then
15288         : Just make some guesses.  We check them later.
15289         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
15290 else
15291         xxx=`echo '#include <signal.h>' |
15292         $cppstdin $cppminus $cppflags 2>/dev/null |
15293         $grep '^[       ]*#.*include' | 
15294         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
15295 fi
15296 : Check this list of files to be sure we have parsed the cpp output ok.
15297 : This will also avoid potentially non-existent files, such 
15298 : as ../foo/bar.h
15299 xxxfiles=''
15300 for xx in $xxx /dev/null ; do
15301         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
15302 done
15303 : If we have found no files, at least try signal.h
15304 case "$xxxfiles" in
15305 '')     xxxfiles=`./findhdr signal.h` ;;
15306 esac
15307 xxx=`awk '
15308 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
15309         print substr($2, 4, 20)
15310 }
15311 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
15312         print substr($3, 4, 20)
15313 }' $xxxfiles`
15314 : Append some common names just in case the awk scan failed.
15315 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
15316 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
15317 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
15318 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
15319 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
15320
15321 : generate a few handy files for later
15322 $cat > signal.c <<'EOCP'
15323 #include <sys/types.h>
15324 #include <signal.h>
15325 #include <stdio.h>
15326 int main() {
15327
15328 /* Strange style to avoid deeply-nested #if/#else/#endif */
15329 #ifndef NSIG
15330 #  ifdef _NSIG
15331 #    define NSIG (_NSIG)
15332 #  endif
15333 #endif
15334
15335 #ifndef NSIG
15336 #  ifdef SIGMAX
15337 #    define NSIG (SIGMAX+1)
15338 #  endif
15339 #endif
15340
15341 #ifndef NSIG
15342 #  ifdef SIG_MAX
15343 #    define NSIG (SIG_MAX+1)
15344 #  endif
15345 #endif
15346
15347 #ifndef NSIG
15348 #  ifdef MAXSIG
15349 #    define NSIG (MAXSIG+1)
15350 #  endif
15351 #endif
15352
15353 #ifndef NSIG
15354 #  ifdef MAX_SIG
15355 #    define NSIG (MAX_SIG+1)
15356 #  endif
15357 #endif
15358
15359 #ifndef NSIG
15360 #  ifdef SIGARRAYSIZE
15361 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15362 #  endif
15363 #endif
15364
15365 #ifndef NSIG
15366 #  ifdef _sys_nsig
15367 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15368 #  endif
15369 #endif
15370
15371 /* Default to some arbitrary number that's big enough to get most
15372    of the common signals.
15373 */
15374 #ifndef NSIG
15375 #    define NSIG 50
15376 #endif
15377
15378 printf("NSIG %d\n", NSIG);
15379
15380 #ifndef JUST_NSIG
15381
15382 EOCP
15383
15384 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15385 {
15386         printf "#ifdef SIG"; printf $1; printf "\n"
15387         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15388         printf $1; printf ");\n"
15389         printf "#endif\n"
15390 }
15391 END {
15392         printf "#endif /* JUST_NSIG */\n";
15393         printf "exit(0);\n}\n";
15394 }
15395 ' >>signal.c
15396 $cat >signal.awk <<'EOP'
15397 BEGIN { ndups = 0 }
15398 $1 ~ /^NSIG$/ { nsig = $2 }
15399 ($1 !~ /^NSIG$/) && (NF == 2) {
15400     if ($2 > maxsig) { maxsig = $2 }
15401     if (sig_name[$2]) {
15402         dup_name[ndups] = $1
15403         dup_num[ndups] = $2
15404         ndups++ 
15405     }
15406     else {
15407         sig_name[$2] = $1
15408         sig_num[$2] = $2
15409     }
15410 }
15411 END { 
15412     if (nsig == 0) {
15413         nsig = maxsig + 1
15414     }
15415     printf("NSIG %d\n", nsig);
15416     for (n = 1; n < nsig; n++) {
15417         if (sig_name[n]) {
15418             printf("%s %d\n", sig_name[n], sig_num[n])
15419         }
15420         else {
15421             printf("NUM%d %d\n", n, n) 
15422         }
15423     }
15424     for (n = 0; n < ndups; n++) {
15425         printf("%s %d\n", dup_name[n], dup_num[n])
15426     }
15427 }
15428 EOP
15429 $cat >signal_cmd <<EOS
15430 $startsh
15431 if $test -s signal.lst; then
15432     echo "Using your existing signal.lst file"
15433         exit 0
15434 fi
15435 xxx="$xxx"
15436 EOS
15437 $cat >>signal_cmd <<'EOS'
15438
15439 set signal
15440 if eval $compile_ok; then
15441         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15442 else
15443         echo "(I can't seem be able to compile the whole test program)" >&4
15444         echo "(I'll try it in little pieces.)" >&4
15445         set signal -DJUST_NSIG
15446         if eval $compile_ok; then
15447                 $run ./signal$_exe > signal.nsg
15448                 $cat signal.nsg
15449         else
15450                 echo "I can't seem to figure out how many signals you have." >&4
15451                 echo "Guessing 50." >&4
15452                 echo 'NSIG 50' > signal.nsg
15453         fi
15454         : Now look at all the signal names, one at a time.
15455         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15456                 $cat > signal.c <<EOCP
15457 #include <sys/types.h>
15458 #include <signal.h>
15459 #include <stdio.h>
15460 int main() {
15461 printf("$xx %d\n", SIG${xx});
15462 return 0;
15463 }
15464 EOCP
15465                 set signal
15466                 if eval $compile; then
15467                         echo "SIG${xx} found."
15468                         $run ./signal$_exe  >> signal.ls1
15469                 else
15470                         echo "SIG${xx} NOT found."
15471                 fi
15472         done
15473         if $test -s signal.ls1; then
15474                 $cat signal.nsg signal.ls1 |
15475                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15476         fi
15477
15478 fi
15479 if $test -s signal.lst; then
15480         :
15481 else
15482         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15483         echo 'kill -l' >signal
15484         set X `csh -f <signal`
15485         $rm -f signal
15486         shift
15487         case $# in
15488         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15489         esac
15490         echo $@ | $tr ' ' $trnl | \
15491             $awk '{ printf "%s %d\n", $1, ++s; }
15492                   END { printf "NSIG %d\n", ++s }' >signal.lst
15493 fi
15494 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15495 EOS
15496 chmod a+x signal_cmd
15497 $eunicefix signal_cmd
15498
15499 : generate list of signal names
15500 echo " "
15501 case "$sig_name_init" in
15502 '') doinit=yes ;;
15503 *)  case "$sig_num_init" in
15504     ''|*,*) doinit=yes ;;
15505     esac ;;
15506 esac
15507 case "$doinit" in
15508 yes)
15509         echo "Generating a list of signal names and numbers..." >&4
15510         . ./signal_cmd
15511         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15512         sig_name=`$awk 'BEGIN { printf "ZERO " }
15513                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15514         sig_num=`$awk  'BEGIN { printf "0 " }
15515                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15516         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15517                              !/^NSIG/   { printf "\"%s\", ", $1 }
15518                              END        { printf "0\n" }' signal.lst`
15519         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15520                              !/^NSIG/   { printf "%d, ", $2}
15521                              END        { printf "0\n"}' signal.lst`
15522         ;;
15523 esac
15524 echo "The following $sig_count signals are available:"
15525 echo " "
15526 echo $sig_name | $awk \
15527 'BEGIN { linelen = 0 }
15528 {
15529         for (i = 1; i <= NF; i++) {
15530                 name = "SIG" $i " "
15531                 linelen = linelen + length(name)
15532                 if (linelen > 70) {
15533                         printf "\n"
15534                         linelen = length(name)
15535                 }
15536                 printf "%s", name
15537         }
15538         printf "\n"
15539 }'
15540 sig_size=`echo $sig_name | awk '{print NF}'`
15541 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15542
15543 echo " "
15544 case "$sizetype" in
15545 *_t) zzz="$sizetype"    ;;
15546 *)   zzz="filesize"     ;;
15547 esac
15548 echo "Checking the size of $zzz..." >&4 
15549 cat > try.c <<EOCP
15550 #include <sys/types.h>
15551 #include <stdio.h>
15552 int main() {
15553     printf("%d\n", (int)sizeof($sizetype));
15554     exit(0);
15555 }
15556 EOCP
15557 set try
15558 if eval $compile_ok; then
15559         yyy=`$run ./try`
15560         case "$yyy" in
15561         '')     sizesize=4
15562                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15563                 ;;
15564         *)      sizesize=$yyy
15565                 echo "Your $zzz size is $sizesize bytes."
15566                 ;;
15567         esac
15568 else
15569         sizesize=4
15570         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15571 fi
15572
15573
15574 : check for socklen_t
15575 echo " "
15576 echo "Checking to see if you have socklen_t..." >&4
15577 $cat >try.c <<EOCP
15578 #include <sys/types.h>
15579 #$d_socket HAS_SOCKET
15580 #ifdef HAS_SOCKET
15581 #include <sys/socket.h>
15582 #endif
15583 int main() { socklen_t x = 16; }
15584 EOCP
15585 set try
15586 if eval $compile; then
15587         val="$define"
15588         echo "You have socklen_t."
15589 else
15590         val="$undef"
15591         echo "You do not have socklen_t."
15592         case "$sizetype" in
15593         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15594         esac
15595 fi
15596 $rm -f try try.*
15597 set d_socklen_t
15598 eval $setvar
15599
15600 : see if this is a socks.h system
15601 set socks.h i_socks
15602 eval $inhdr
15603
15604 : check for type of the size argument to socket calls
15605 case "$d_socket" in
15606 "$define")
15607         $cat <<EOM
15608
15609 Checking to see what type is the last argument of accept().
15610 EOM
15611         yyy=''
15612         case "$d_socklen_t" in
15613         "$define") yyy="$yyy socklen_t"
15614         esac
15615         yyy="$yyy $sizetype int long unsigned"
15616         for xxx in $yyy; do
15617                 case "$socksizetype" in
15618                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15619                         case "$usesocks" in
15620                         "$define")
15621                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15622                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15623                                         socksizetype="$xxx"
15624                                 fi
15625                                 ;;
15626                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15627                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15628                                         socksizetype="$xxx"
15629                                 fi
15630                                 ;;
15631                         esac
15632                         ;;
15633                 esac
15634         done
15635 : In case none of those worked, prompt the user.
15636         case "$socksizetype" in
15637         '')     rp='What is the type for socket address structure sizes?'
15638                 dflt='int'
15639                 . ./myread
15640                 socksizetype=$ans
15641                 ;;
15642         esac
15643         ;;
15644 *)      : no sockets, so pick relatively harmless default
15645         socksizetype='int'
15646         ;;
15647 esac
15648
15649 : see what type is used for signed size_t
15650 set ssize_t ssizetype int stdio.h sys/types.h
15651 eval $typedef
15652 dflt="$ssizetype"
15653 $cat > try.c <<EOM
15654 #include <stdio.h>
15655 #include <sys/types.h>
15656 #define Size_t $sizetype
15657 #define SSize_t $dflt
15658 int main()
15659 {
15660         if (sizeof(Size_t) == sizeof(SSize_t))
15661                 printf("$dflt\n");
15662         else if (sizeof(Size_t) == sizeof(int))
15663                 printf("int\n");
15664         else 
15665                 printf("long\n");
15666         exit(0);
15667 }
15668 EOM
15669 echo " "
15670 set try
15671 if eval $compile_ok && $run ./try > /dev/null; then
15672         ssizetype=`$run ./try`
15673         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15674 else
15675         $cat >&4 <<EOM
15676 Help! I can't compile and run the ssize_t test program: please enlighten me!
15677 (This is probably a misconfiguration in your system or libraries, and
15678 you really ought to fix it.  Still, I'll try anyway.)
15679
15680 I need a type that is the same size as $sizetype, but is guaranteed to
15681 be signed.  Common values are ssize_t, int and long.
15682
15683 EOM
15684         rp="What signed type is the same size as $sizetype?"
15685         . ./myread
15686         ssizetype="$ans"
15687 fi
15688 $rm -f try try.*
15689
15690 : see what type of char stdio uses.
15691 echo " "
15692 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15693 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15694         echo "Your stdio uses unsigned chars." >&4
15695         stdchar="unsigned char"
15696 else
15697         echo "Your stdio uses signed chars." >&4
15698         stdchar="char"
15699 fi
15700 $rm -f stdioh
15701
15702
15703
15704 : see if time exists
15705 echo " "
15706 if test "X$d_time" = X -o X"$timetype" = X; then
15707     if set time val -f d_time; eval $csym; $val; then
15708                 echo 'time() found.' >&4
15709                 val="$define"
15710                 rp="What is the type returned by time() on this system?"
15711                 set time_t timetype long stdio.h sys/types.h
15712                 eval $typedef_ask
15713     else
15714                 echo 'time() not found, hope that will do.' >&4
15715                 val="$undef"
15716                 timetype='int';
15717     fi
15718     set d_time
15719     eval $setvar
15720 fi
15721
15722 : see what type uids are declared as in the kernel
15723 echo " "
15724 echo "Looking for the type for user ids returned by getuid()."
15725 set uid_t uidtype xxx stdio.h sys/types.h
15726 eval $typedef
15727 case "$uidtype" in
15728 xxx)
15729         xxx=`./findhdr sys/user.h`
15730         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15731         case $1 in
15732         unsigned) dflt="$1 $2" ;;
15733         *) dflt="$1" ;;
15734         esac
15735         ;;
15736 *) dflt="$uidtype";;
15737 esac
15738 case "$uidtype" in
15739 uid_t)  echo "uid_t found." ;;
15740 *)      rp="What is the type for user ids returned by getuid()?"
15741         . ./myread
15742         uidtype="$ans"
15743         ;;
15744 esac
15745
15746 echo " "
15747 case "$uidtype" in
15748 *_t) zzz="$uidtype"     ;;
15749 *)   zzz="uid"          ;;
15750 esac
15751 echo "Checking the size of $zzz..." >&4 
15752 cat > try.c <<EOCP
15753 #include <sys/types.h>
15754 #include <stdio.h>
15755 int main() {
15756     printf("%d\n", (int)sizeof($uidtype));
15757     exit(0);
15758 }
15759 EOCP
15760 set try
15761 if eval $compile_ok; then
15762         yyy=`$run ./try`
15763         case "$yyy" in
15764         '')     uidsize=4
15765                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15766                 ;;
15767         *)      uidsize=$yyy
15768                 echo "Your $zzz is $uidsize bytes long."
15769                 ;;
15770         esac
15771 else
15772         uidsize=4
15773         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15774 fi
15775
15776 echo " "
15777 case "$uidtype" in
15778 *_t) zzz="$uidtype"     ;;
15779 *)   zzz="uid"          ;;
15780 esac
15781 echo "Checking the sign of $zzz..." >&4
15782 cat > try.c <<EOCP
15783 #include <sys/types.h>
15784 #include <stdio.h>
15785 int main() {
15786         $uidtype foo = -1;
15787         if (foo < 0)
15788                 printf("-1\n");
15789         else
15790                 printf("1\n");
15791 }
15792 EOCP
15793 set try
15794 if eval $compile; then
15795         yyy=`$run ./try`
15796         case "$yyy" in
15797         '')     uidsign=1
15798                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15799                 ;;
15800         *)      uidsign=$yyy
15801                 case "$uidsign" in
15802                  1) echo "Your $zzz is unsigned." ;;
15803                 -1) echo "Your $zzz is signed."   ;;
15804                 esac
15805                 ;;
15806         esac
15807 else
15808         uidsign=1
15809         echo "(I can't compile the test program--guessing unsigned.)" >&4
15810 fi
15811
15812
15813
15814 echo " "
15815 $echo "Checking the format string to be used for uids..." >&4
15816
15817 case "$uidsign" in
15818 -1)     if $test X"$uidsize" = X"$ivsize"; then
15819                 uidformat="$ivdformat"
15820         else
15821                 if $test X"$uidsize" = X"$longsize"; then
15822                         uidformat='"ld"'
15823                 else
15824                         if $test X"$uidsize" = X"$intsize"; then
15825                                 uidformat='"d"'
15826                         else
15827                                 if $test X"$uidsize" = X"$shortsize"; then
15828                                         uidformat='"hd"'
15829                                 fi
15830                         fi
15831                 fi
15832         fi
15833         ;;
15834 *)      if $test X"$uidsize" = X"$uvsize"; then
15835                 uidformat="$uvuformat"
15836         else
15837                 if $test X"$uidsize" = X"$longsize"; then
15838                         uidformat='"lu"'
15839                 else
15840                         if $test X"$uidsize" = X"$intsize"; then
15841                                 uidformat='"u"'
15842                         else
15843                                 if $test X"$uidsize" = X"$shortsize"; then
15844                                         uidformat='"hu"'
15845                                 fi
15846                         fi
15847                 fi
15848         fi
15849         ;;
15850 esac
15851
15852 : determine compiler compiler
15853 case "$yacc" in
15854 '')
15855         dflt=yacc;;
15856 *)
15857         dflt="$yacc";;
15858 esac
15859 echo " "
15860 comp='yacc'
15861 if $test -f "$byacc"; then
15862         dflt="$byacc"
15863         comp="byacc or $comp"
15864 fi
15865 if $test -f "$bison"; then
15866         comp="$comp or bison -y"
15867 fi
15868 rp="Which compiler compiler ($comp) shall I use?"
15869 . ./myread
15870 yacc="$ans"
15871 case "$yacc" in
15872 *bis*)
15873         case "$yacc" in
15874         *-y*) ;;
15875         *)
15876                 yacc="$yacc -y"
15877                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15878                 ;;
15879         esac
15880         ;;
15881 esac
15882
15883 : see if fcntl.h is there
15884 val=''
15885 set fcntl.h val
15886 eval $inhdr
15887
15888 : see if we can include fcntl.h
15889 case "$val" in
15890 "$define")
15891         echo " "
15892         if $h_fcntl; then
15893                 val="$define"
15894                 echo "We'll be including <fcntl.h>." >&4
15895         else
15896                 val="$undef"
15897                 if $h_sysfile; then
15898         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15899                 else
15900                         echo "We won't be including <fcntl.h>." >&4
15901                 fi
15902         fi
15903         ;;
15904 *)
15905         h_fcntl=false
15906         val="$undef"
15907         ;;
15908 esac
15909 set i_fcntl
15910 eval $setvar
15911
15912 : see if this is a fp.h system
15913 set fp.h i_fp
15914 eval $inhdr
15915
15916 : see if this is a fp_class.h system
15917 set fp_class.h i_fp_class
15918 eval $inhdr
15919
15920 : see if this is a ieeefp.h system
15921 set ieeefp.h i_ieeefp
15922 eval $inhdr
15923
15924 : see if this is a libutil.h system
15925 set libutil.h i_libutil
15926 eval $inhdr
15927
15928 : see if locale.h is available
15929 set locale.h i_locale
15930 eval $inhdr
15931
15932 : see if mach cthreads are available
15933 if test "X$usethreads" = "X$define"; then
15934         set mach/cthreads.h i_machcthr
15935         eval $inhdr
15936 else
15937         i_machcthr="$undef"
15938 fi
15939
15940
15941
15942 : see if this is a math.h system
15943 set math.h i_math
15944 eval $inhdr
15945
15946 : see if this is a mntent.h system
15947 set mntent.h i_mntent
15948 eval $inhdr
15949
15950 : see if ndbm.h is available
15951 set ndbm.h t_ndbm
15952 eval $inhdr
15953 case "$t_ndbm" in
15954 $define)
15955         : see if dbm_open exists
15956         set dbm_open d_dbm_open
15957         eval $inlibc
15958         case "$d_dbm_open" in
15959         $undef)
15960                 t_ndbm="$undef"
15961                 echo "We won't be including <ndbm.h>"
15962                 ;;
15963         esac
15964         ;;
15965 esac
15966 val="$t_ndbm"
15967 set i_ndbm
15968 eval $setvar
15969
15970 : see if net/errno.h is available
15971 val=''
15972 set net/errno.h val
15973 eval $inhdr
15974
15975 : Unfortunately, it causes problems on some systems.  Arrgh.
15976 case "$val" in
15977 $define)
15978         cat > try.c <<'EOM'
15979 #include <stdio.h>
15980 #include <errno.h>
15981 #include <net/errno.h>
15982 int func()
15983 {
15984         return ENOTSOCK;
15985 }
15986 EOM
15987         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15988                 echo "We'll be including <net/errno.h>." >&4
15989         else
15990                 echo "We won't be including <net/errno.h>." >&4
15991                 val="$undef"
15992         fi
15993         $rm -f try.* try
15994         ;;
15995 esac
15996 set i_neterrno
15997 eval $setvar
15998
15999 : see if netinet/tcp.h is available
16000 set netinet/tcp.h i_netinettcp
16001 eval $inhdr
16002
16003 : see if this is a poll.h system
16004 set poll.h i_poll
16005 eval $inhdr
16006
16007 : see if this is a prot.h system
16008 set prot.h i_prot
16009 eval $inhdr
16010
16011 echo " "
16012 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
16013 $cat <<'EOSH' > Cppsym.know
16014 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
16015 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
16016 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
16017 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
16018 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
16019 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
16020 bull c cadmus clipper CMU COFF COMPILER_VERSION
16021 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
16022 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
16023 Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
16024 FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
16025 GLIBC GLIBC_MINOR
16026 GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
16027 H3050R H3050RX hbullx20 hcx host_mips
16028 hp200 hp300 hp700 HP700 hp800 hp9000
16029 hp9000s200 hp9000s300 hp9000s400 hp9000s500
16030 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
16031 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
16032 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
16033 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
16034 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
16035 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
16036 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
16037 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
16038 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
16039 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
16040 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
16041 MATH_HAS_NO_SIDE_EFFECTS
16042 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
16043 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
16044 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
16045 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
16046 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
16047 NetBSD news1500 news1700 news1800 news1900 news3700
16048 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
16049 ns32016 ns32332 ns32k nsc32000
16050 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
16051 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
16052 pc532 pdp11 PGC PIC plexus PORTAR posix
16053 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
16054 POSIX_C_SOURCE POSIX_SOURCE POWER
16055 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
16056 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
16057 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
16058 sony sony_news sonyrisc sparc sparclite spectrum
16059 stardent stdc STDC_EXT stratos sun sun3 sun386
16060 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
16061 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
16062 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
16063 sysV68 sysV88 Tek4132 Tek4300 titan
16064 TM3200 TM5400 TM5600
16065 tower tower32 tower32_200 tower32_600 tower32_700
16066 tower32_800 tower32_850 tss
16067 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
16068 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
16069 unix UNIX95 UNIX99 unixpc unos
16070 USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
16071 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
16072 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
16073 USGr4 USGr4_2
16074 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
16075 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
16076 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
16077 z8000
16078 EOSH
16079 # Maybe put other stuff here too.
16080 cat <<EOSH >>Cppsym.know
16081 $osname
16082 EOSH
16083 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
16084 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
16085 $cat Cppsym.know > Cppsym.c
16086 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
16087 $rm -f Cppsym.a Cppsym.b Cppsym.c
16088 cat <<EOSH > Cppsym
16089 $startsh
16090 if $test \$# -gt 0; then
16091     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
16092     if $test -s Cppsym.got; then
16093         $rm -f Cppsym.got
16094         exit 0
16095     fi
16096     $rm -f Cppsym.got
16097     exit 1
16098 else
16099     $tr " " "$trnl" | ./Cppsym.try
16100     exit 0
16101 fi
16102 EOSH
16103 chmod +x Cppsym
16104 $eunicefix Cppsym
16105 cat <<EOSH > Cppsym.try
16106 $startsh
16107 cat <<'EOCP' > try.c
16108 #include <stdio.h>
16109 int main() {
16110 EOCP
16111 $awk \\
16112 EOSH
16113 cat <<'EOSH' >> Cppsym.try
16114 'length($1) > 0 {
16115     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
16116     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
16117     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
16118     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
16119 }'       >> try.c
16120 echo 'return 0;}' >> try.c
16121 EOSH
16122 cat <<EOSH >> Cppsym.try
16123 ccflags="$ccflags"
16124 case "$osname-$gccversion" in
16125 irix-) ccflags="\$ccflags -woff 1178" ;;
16126 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
16127 esac
16128 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
16129 EOSH
16130 chmod +x Cppsym.try
16131 $eunicefix Cppsym.try
16132 ./Cppsym < Cppsym.know > Cppsym.true
16133 : now check the C compiler for additional symbols
16134 postprocess_cc_v=''
16135 case "$osname" in
16136 aix) postprocess_cc_v="|$tr , ' '" ;;
16137 esac
16138 $cat >ccsym <<EOS
16139 $startsh
16140 $cat >tmp.c <<EOF
16141 extern int foo;
16142 EOF
16143 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
16144 do
16145         case "\$i" in
16146         -D*) echo "\$i" | $sed 's/^-D//';;
16147         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
16148         esac
16149 done
16150 $rm -f try.c
16151 EOS
16152 postprocess_cc_v=''
16153 chmod +x ccsym
16154 $eunicefix ccsym
16155 ./ccsym > ccsym1.raw
16156 if $test -s ccsym1.raw; then
16157        $sort ccsym1.raw | $uniq >ccsym.raw
16158 else
16159        mv ccsym1.raw ccsym.raw
16160 fi
16161
16162 $awk '/\=/ { print $0; next }
16163         { print $0"=1" }' ccsym.raw >ccsym.list
16164 $awk '/\=/ { print $0; next }
16165         { print $0"=1" }' Cppsym.true >ccsym.true
16166 $comm -13 ccsym.true ccsym.list >ccsym.own
16167 $comm -12 ccsym.true ccsym.list >ccsym.com
16168 $comm -23 ccsym.true ccsym.list >ccsym.cpp
16169 also=''
16170 if $test -z ccsym.raw; then
16171         echo "Your C compiler doesn't seem to define any symbols!" >&4
16172         echo " "
16173         echo "However, your C preprocessor defines the following symbols:"
16174         $cat Cppsym.true
16175         ccsymbols=''
16176         cppsymbols=`$cat Cppsym.true`
16177         cppsymbols=`echo $cppsymbols`
16178         cppccsymbols="$cppsymbols"
16179 else
16180         if $test -s ccsym.com; then
16181                 echo "Your C compiler and pre-processor define these symbols:"
16182                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
16183                 also='also '
16184                 symbols='ones'
16185                 cppccsymbols=`$cat ccsym.com`
16186                 cppccsymbols=`echo $cppccsymbols`
16187                 $test "$silent" || sleep 1
16188         fi
16189         if $test -s ccsym.cpp; then
16190                 $test "$also" && echo " "
16191                 echo "Your C pre-processor ${also}defines the following symbols:"
16192                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
16193                 also='further '
16194                 cppsymbols=`$cat ccsym.cpp`
16195                 cppsymbols=`echo $cppsymbols`
16196                 $test "$silent" || sleep 1
16197         fi
16198         if $test -s ccsym.own; then
16199                 $test "$also" && echo " "
16200                 echo "Your C compiler ${also}defines the following cpp symbols:"
16201                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
16202                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
16203                 ccsymbols=`$cat ccsym.own`
16204                 ccsymbols=`echo $ccsymbols`
16205                 $test "$silent" || sleep 1
16206         fi
16207 fi
16208
16209 : see if this is a termio system
16210 val="$undef"
16211 val2="$undef"
16212 val3="$undef"
16213 if $test `./findhdr termios.h`; then
16214         set tcsetattr i_termios
16215         eval $inlibc
16216         val3="$i_termios"
16217 fi
16218 echo " "
16219 case "$val3" in
16220 "$define") echo "You have POSIX termios.h... good!" >&4;;
16221 *) if ./Cppsym pyr; then
16222                 case "`/bin/universe`" in
16223                 ucb) if $test `./findhdr sgtty.h`; then
16224                                 val2="$define"
16225                                 echo "<sgtty.h> found." >&4
16226                         else
16227                                 echo "System is pyramid with BSD universe."
16228                                 echo "<sgtty.h> not found--you could have problems." >&4
16229                         fi;;
16230                 *) if $test `./findhdr termio.h`; then
16231                                 val="$define"
16232                                 echo "<termio.h> found." >&4
16233                         else
16234                                 echo "System is pyramid with USG universe."
16235                                 echo "<termio.h> not found--you could have problems." >&4
16236                         fi;;
16237                 esac
16238         elif ./usg; then
16239                 if $test `./findhdr termio.h`; then
16240                         echo "<termio.h> found." >&4
16241                         val="$define"
16242                 elif $test `./findhdr sgtty.h`; then
16243                         echo "<sgtty.h> found." >&4
16244                         val2="$define"
16245                 else
16246 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
16247                 fi
16248         else
16249                 if $test `./findhdr sgtty.h`; then
16250                         echo "<sgtty.h> found." >&4
16251                         val2="$define"
16252                 elif $test `./findhdr termio.h`; then
16253                         echo "<termio.h> found." >&4
16254                         val="$define"
16255                 else
16256 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
16257                 fi
16258         fi;;
16259 esac
16260 set i_termio; eval $setvar
16261 val=$val2; set i_sgtty; eval $setvar
16262 val=$val3; set i_termios; eval $setvar
16263
16264 : see if this is a shadow.h system
16265 set shadow.h i_shadow
16266 eval $inhdr
16267
16268 : see if stddef is available
16269 set stddef.h i_stddef
16270 eval $inhdr
16271
16272 : see if this is a sunmath.h system
16273 set sunmath.h i_sunmath
16274 eval $inhdr
16275
16276 : see if sys/access.h is available
16277 set sys/access.h i_sysaccess
16278 eval $inhdr
16279
16280 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
16281 set sys/filio.h i_sysfilio
16282 eval $inhdr
16283 echo " "
16284 if $test `./findhdr sys/ioctl.h`; then
16285         val="$define"
16286         echo '<sys/ioctl.h> found.' >&4
16287 else
16288         val="$undef"
16289         if $test $i_sysfilio = "$define"; then
16290             echo '<sys/ioctl.h> NOT found.' >&4
16291         else
16292                 $test $i_sgtty = "$define" && xxx="sgtty.h"
16293                 $test $i_termio = "$define" && xxx="termio.h"
16294                 $test $i_termios = "$define" && xxx="termios.h"
16295 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
16296         fi
16297 fi
16298 set i_sysioctl
16299 eval $setvar
16300
16301 : see if socket ioctl defs are in sys/sockio.h
16302 echo " "
16303 xxx=`./findhdr sys/sockio.h`
16304 if $test "$xxx"; then
16305         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
16306                 val="$define"
16307                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
16308         else
16309                 val="$undef"
16310                 echo "No socket ioctls found in <sys/sockio.h>." >&4
16311         fi
16312 else
16313         val="$undef"
16314         $cat <<EOM
16315 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
16316 EOM
16317 fi
16318 set i_syssockio
16319 eval $setvar
16320
16321
16322 : see if this is a syslog.h system
16323 set syslog.h i_syslog
16324 eval $inhdr
16325
16326
16327 : see if this is a sys/mode.h system
16328 set sys/mode.h i_sysmode
16329 eval $inhdr
16330
16331 : see if sys/resource.h has to be included
16332 set sys/resource.h i_sysresrc
16333 eval $inhdr
16334
16335 : see if sys/security.h is available
16336 set sys/security.h i_syssecrt
16337 eval $inhdr
16338
16339 : see if this is a sys/statvfs.h system
16340 set sys/statvfs.h i_sysstatvfs
16341 eval $inhdr
16342
16343 : see if this is a sys/un.h system
16344 set sys/un.h i_sysun
16345 eval $inhdr
16346
16347
16348 : see if this is a sys/utsname.h system
16349 set sys/utsname.h i_sysutsname
16350 eval $inhdr
16351
16352 : see if this is a syswait system
16353 set sys/wait.h i_syswait
16354 eval $inhdr
16355
16356 : see if this is a ustat.h system
16357 set ustat.h i_ustat
16358 eval $inhdr
16359
16360 : see if this is an utime system
16361 set utime.h i_utime
16362 eval $inhdr
16363
16364 : see if this is a values.h system
16365 set values.h i_values
16366 eval $inhdr
16367
16368 : see if this is a vfork system
16369 case "$d_vfork" in
16370 "$define")
16371         set vfork.h i_vfork
16372         eval $inhdr
16373         ;;
16374 *)
16375         i_vfork="$undef"
16376         ;;
16377 esac
16378
16379 : see if gdbm.h is available
16380 set gdbm.h t_gdbm
16381 eval $inhdr
16382 case "$t_gdbm" in
16383 $define)
16384         : see if gdbm_open exists
16385         set gdbm_open d_gdbm_open
16386         eval $inlibc
16387         case "$d_gdbm_open" in
16388         $undef)
16389                 t_gdbm="$undef"
16390                 echo "We won't be including <gdbm.h>"
16391                 ;;
16392         esac
16393         ;;
16394 esac
16395 val="$t_gdbm"
16396 set i_gdbm
16397 eval $setvar
16398
16399 echo " "
16400 echo "Looking for extensions..." >&4
16401 : If we are using the old config.sh, known_extensions may contain
16402 : old or inaccurate or duplicate values.
16403 known_extensions=''
16404 nonxs_extensions=''
16405 : We do not use find because it might not be available.
16406 : We do not just use MANIFEST because the user may have dropped
16407 : some additional extensions into the source tree and expect them
16408 : to be built.
16409
16410 : Function to recursively find available extensions, ignoring DynaLoader
16411 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16412 find_extensions='
16413     for xxx in *; do
16414        case "$xxx" in
16415            DynaLoader|dynaload) ;;
16416            *)
16417            if $test -f $xxx/$xxx.xs; then
16418                known_extensions="$known_extensions $1$xxx";
16419            elif $test -f $xxx/Makefile.PL; then
16420                nonxs_extensions="$nonxs_extensions $1$xxx";
16421            else
16422                if $test -d $xxx -a $# -lt 10; then
16423                    set $1$xxx/ $*;
16424                    cd $xxx;
16425                    eval $find_extensions;
16426                    cd ..;
16427                    shift;
16428                fi;
16429            fi
16430            ;;
16431        esac;
16432     done'
16433 tdir=`pwd`
16434 cd $rsrc/ext
16435 set X
16436 shift
16437 eval $find_extensions
16438 # Special case:  Add in threads/shared since it is not picked up by the
16439 # recursive find above (and adding in general recursive finding breaks
16440 # SDBM_File/sdbm).  A.D.  10/25/2001.
16441 known_extensions="$known_extensions threads/shared"
16442 set X $nonxs_extensions
16443 shift
16444 nonxs_extensions="$*"
16445 set X $known_extensions
16446 shift
16447 known_extensions="$*"
16448 cd $tdir
16449
16450 : Now see which are supported on this system.
16451 avail_ext=''
16452 for xxx in $known_extensions ; do
16453         case "$xxx" in
16454         DB_File|db_file)
16455                 case "$i_db" in
16456                 $define) avail_ext="$avail_ext $xxx" ;;
16457                 esac
16458                 ;;
16459         GDBM_File|gdbm_fil)
16460                 case "$i_gdbm" in 
16461                 $define) avail_ext="$avail_ext $xxx" ;;
16462                 esac
16463                 ;;
16464         I18N/Langinfo|i18n_lan)
16465                 case "$i_langinfo$d_nl_langinfo" in 
16466                 $define$define) avail_ext="$avail_ext $xxx" ;;
16467                 esac
16468                 ;;
16469         NDBM_File|ndbm_fil)
16470                 case "$i_ndbm" in
16471                 $define)
16472                     case "$osname-$use64bitint" in
16473                     cygwin-*|hpux-define)
16474                         case "$libs" in
16475                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16476                         esac
16477                         ;;
16478                     *) avail_ext="$avail_ext $xxx" ;;
16479                     esac
16480                     ;;
16481                 esac
16482                 ;;
16483         ODBM_File|odbm_fil) 
16484                 case "${i_dbm}${i_rpcsvcdbm}" in
16485                 *"${define}"*)
16486                     case "$osname-$use64bitint" in
16487                     cygwin-*|hpux-define)
16488                         case "$libs" in
16489                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16490                         esac
16491                         ;;
16492                     *) avail_ext="$avail_ext $xxx" ;;
16493                     esac
16494                     ;;
16495                 esac
16496                 ;;
16497         POSIX|posix)
16498                 case "$useposix" in
16499                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16500                 esac
16501                 ;;
16502         Opcode|opcode)
16503                 case "$useopcode" in
16504                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16505                 esac
16506                 ;;
16507         Socket|socket)
16508                 case "$d_socket" in 
16509                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16510                 esac
16511                 ;;
16512         Sys/Syslog|sys/syslog)
16513                 : XXX syslog requires socket
16514                 case "$d_socket" in 
16515                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16516                 esac
16517                 ;;
16518         Thread|thread)
16519                 case "$usethreads" in
16520                 true|$define|y)
16521                         case "$useithreads" in
16522                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16523                         esac
16524                 esac
16525                 ;;
16526         threads|threads/shared)
16527                 case "$usethreads" in
16528                 true|$define|y)
16529                         case "$useithreads" in
16530                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
16531                         esac
16532                 esac
16533                 ;;
16534         IPC/SysV|ipc/sysv)
16535                 : XXX Do we need a useipcsysv variable here
16536                 case "${d_msg}${d_sem}${d_shm}" in 
16537                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16538                 esac
16539                 ;;
16540         *)      avail_ext="$avail_ext $xxx"
16541                 ;;
16542         esac
16543 done
16544
16545 set X $avail_ext
16546 shift
16547 avail_ext="$*"
16548
16549 : Now see which nonxs extensions are supported on this system.
16550 : For now assume all are.
16551 nonxs_ext=''
16552 for xxx in $nonxs_extensions ; do
16553         case "$xxx" in
16554         *)      nonxs_ext="$nonxs_ext $xxx"
16555                 ;;
16556         esac
16557 done
16558
16559 set X $nonxs_ext
16560 shift
16561 nonxs_ext="$*"
16562
16563 case $usedl in
16564 $define)
16565         $cat <<EOM
16566 A number of extensions are supplied with $package.  You may choose to
16567 compile these extensions for dynamic loading (the default), compile
16568 them into the $package executable (static loading), or not include
16569 them at all.  Answer "none" to include no extensions.
16570 Note that DynaLoader is always built and need not be mentioned here.
16571
16572 EOM
16573         case "$dynamic_ext" in
16574         '') dflt="$avail_ext" ;;
16575         *)      dflt="$dynamic_ext"
16576                 # Perhaps we are reusing an old out-of-date config.sh.
16577                 case "$hint" in
16578                 previous)
16579                         if test X"$dynamic_ext" != X"$avail_ext"; then
16580                                 $cat <<EOM
16581 NOTICE:  Your previous config.sh list may be incorrect. 
16582 The extensions now available to you are 
16583         ${avail_ext}
16584 but the default list from your previous config.sh is
16585         ${dynamic_ext} 
16586
16587 EOM
16588                         fi
16589                         ;;
16590                 esac
16591                 ;;
16592         esac
16593         case "$dflt" in
16594         '')     dflt=none;;
16595         esac
16596         rp="What extensions do you wish to load dynamically?"
16597         . ./myread
16598         case "$ans" in
16599         none) dynamic_ext=' ' ;;
16600         *) dynamic_ext="$ans" ;;
16601         esac
16602
16603         case "$static_ext" in
16604         '')
16605                 : Exclude those already listed in dynamic linking
16606                 dflt=''
16607                 for xxx in $avail_ext; do
16608                         case " $dynamic_ext " in
16609                         *" $xxx "*) ;;
16610                         *) dflt="$dflt $xxx" ;;
16611                         esac
16612                 done
16613                 set X $dflt
16614                 shift
16615                 dflt="$*"
16616                 ;;
16617         *)  dflt="$static_ext" 
16618                 ;;
16619         esac
16620
16621         case "$dflt" in
16622         '')     dflt=none;;
16623         esac
16624         rp="What extensions do you wish to load statically?"
16625         . ./myread
16626         case "$ans" in
16627         none) static_ext=' ' ;;
16628         *) static_ext="$ans" ;;
16629         esac
16630         ;;
16631 *)
16632         $cat <<EOM
16633 A number of extensions are supplied with $package.  Answer "none" 
16634 to include no extensions. 
16635 Note that DynaLoader is always built and need not be mentioned here.
16636
16637 EOM
16638         case "$static_ext" in
16639         '') dflt="$avail_ext" ;;
16640         *)      dflt="$static_ext"
16641                 # Perhaps we are reusing an old out-of-date config.sh.
16642                 case "$hint" in
16643                 previous)
16644                         if test X"$static_ext" != X"$avail_ext"; then
16645                                 $cat <<EOM
16646 NOTICE:  Your previous config.sh list may be incorrect. 
16647 The extensions now available to you are 
16648         ${avail_ext}
16649 but the default list from your previous config.sh is
16650         ${static_ext} 
16651
16652 EOM
16653                         fi
16654                         ;;
16655                 esac
16656                 ;;
16657         esac
16658         : Exclude those that are not xs extensions
16659         case "$dflt" in
16660         '')     dflt=none;;
16661         esac
16662         rp="What extensions do you wish to include?"
16663         . ./myread
16664         case "$ans" in
16665         none) static_ext=' ' ;;
16666         *) static_ext="$ans" ;;
16667         esac
16668         ;;
16669 esac
16670
16671 set X $dynamic_ext $static_ext $nonxs_ext
16672 shift
16673 extensions="$*"
16674
16675 : Remove libraries needed only for extensions
16676 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16677 : The exception is SunOS 4.x, which needs them.
16678 case "${osname}X${osvers}" in
16679 sunos*X4*)
16680     perllibs="$libs"
16681     ;;
16682 *) case "$usedl" in
16683     $define|true|[yY]*)
16684             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16685             shift
16686             perllibs="$*"
16687             ;;
16688     *)  perllibs="$libs"
16689             ;;
16690     esac
16691     ;;
16692 esac
16693
16694 : Remove build directory name from cppstdin so it can be used from
16695 : either the present location or the final installed location.
16696 echo " "
16697 : Get out of the UU directory to get correct path name.
16698 cd ..
16699 case "$cppstdin" in
16700 `pwd`/cppstdin)
16701         echo "Stripping down cppstdin path name"
16702         cppstdin=cppstdin
16703         ;;
16704 esac
16705 cd UU
16706
16707 : end of configuration questions
16708 echo " "
16709 echo "End of configuration questions."
16710 echo " "
16711
16712 : back to where it started
16713 if test -d ../UU; then
16714         cd ..
16715 fi
16716
16717 : configuration may be patched via a 'config.arch' file
16718 if $test -f config.arch; then
16719         echo "I see a config.arch file, loading it."
16720         . ./config.arch
16721 fi
16722
16723 : configuration may be patched via a 'config.over' file
16724 if $test -f config.over; then
16725         echo " "
16726         dflt=y
16727         rp='I see a config.over file.  Do you wish to load it?'
16728         . UU/myread
16729         case "$ans" in
16730         n*) echo "OK, I'll ignore it.";;
16731         *)      . ./config.over
16732                 echo "Configuration override changes have been loaded."
16733                 ;;
16734         esac
16735 fi
16736
16737 : in case they want portability, strip down executable paths
16738 case "$d_portable" in
16739 "$define")
16740         echo " "
16741         echo "Stripping down executable paths..." >&4
16742         for file in $loclist $trylist; do
16743                 eval temp=\$$file
16744                 eval $file=`basename $temp`
16745         done
16746         ;;
16747 esac
16748
16749 : create config.sh file
16750 echo " "
16751 echo "Creating config.sh..." >&4
16752 $spitshell <<EOT >config.sh
16753 $startsh
16754 #
16755 # This file was produced by running the Configure script. It holds all the
16756 # definitions figured out by Configure. Should you modify one of these values,
16757 # do not forget to propagate your changes by running "Configure -der". You may
16758 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16759 #
16760
16761 # Package name      : $package
16762 # Source directory  : $src
16763 # Configuration time: $cf_time
16764 # Configured by     : $cf_by
16765 # Target system     : $myuname
16766
16767 Author='$Author'
16768 Date='$Date'
16769 Header='$Header'
16770 Id='$Id'
16771 Locker='$Locker'
16772 Log='$Log'
16773 Mcc='$Mcc'
16774 RCSfile='$RCSfile'
16775 Revision='$Revision'
16776 Source='$Source'
16777 State='$State'
16778 _a='$_a'
16779 _exe='$_exe'
16780 _o='$_o'
16781 afs='$afs'
16782 afsroot='$afsroot'
16783 alignbytes='$alignbytes'
16784 ansi2knr='$ansi2knr'
16785 aphostname='$aphostname'
16786 api_revision='$api_revision'
16787 api_subversion='$api_subversion'
16788 api_version='$api_version'
16789 api_versionstring='$api_versionstring'
16790 ar='$ar'
16791 archlib='$archlib'
16792 archlibexp='$archlibexp'
16793 archname64='$archname64'
16794 archname='$archname'
16795 archobjs='$archobjs'
16796 awk='$awk'
16797 baserev='$baserev'
16798 bash='$bash'
16799 bin='$bin'
16800 bincompat5005='$bincompat5005'
16801 binexp='$binexp'
16802 bison='$bison'
16803 byacc='$byacc'
16804 byteorder='$byteorder'
16805 c='$c'
16806 castflags='$castflags'
16807 cat='$cat'
16808 cc='$cc'
16809 cccdlflags='$cccdlflags'
16810 ccdlflags='$ccdlflags'
16811 ccflags='$ccflags'
16812 ccflags_uselargefiles='$ccflags_uselargefiles'
16813 ccname='$ccname'
16814 ccsymbols='$ccsymbols'
16815 ccversion='$ccversion'
16816 cf_by='$cf_by'
16817 cf_email='$cf_email'
16818 cf_time='$cf_time'
16819 charsize='$charsize'
16820 chgrp='$chgrp'
16821 chmod='$chmod'
16822 chown='$chown'
16823 clocktype='$clocktype'
16824 comm='$comm'
16825 compress='$compress'
16826 contains='$contains'
16827 cp='$cp'
16828 cpio='$cpio'
16829 cpp='$cpp'
16830 cpp_stuff='$cpp_stuff'
16831 cppccsymbols='$cppccsymbols'
16832 cppflags='$cppflags'
16833 cpplast='$cpplast'
16834 cppminus='$cppminus'
16835 cpprun='$cpprun'
16836 cppstdin='$cppstdin'
16837 cppsymbols='$cppsymbols'
16838 cryptlib='$cryptlib'
16839 csh='$csh'
16840 d_Gconvert='$d_Gconvert'
16841 d_PRIEUldbl='$d_PRIEUldbl'
16842 d_PRIFUldbl='$d_PRIFUldbl'
16843 d_PRIGUldbl='$d_PRIGUldbl'
16844 d_PRIXU64='$d_PRIXU64'
16845 d_PRId64='$d_PRId64'
16846 d_PRIeldbl='$d_PRIeldbl'
16847 d_PRIfldbl='$d_PRIfldbl'
16848 d_PRIgldbl='$d_PRIgldbl'
16849 d_PRIi64='$d_PRIi64'
16850 d_PRIo64='$d_PRIo64'
16851 d_PRIu64='$d_PRIu64'
16852 d_PRIx64='$d_PRIx64'
16853 d_SCNfldbl='$d_SCNfldbl'
16854 d__fwalk='$d__fwalk'
16855 d_access='$d_access'
16856 d_accessx='$d_accessx'
16857 d_alarm='$d_alarm'
16858 d_archlib='$d_archlib'
16859 d_atolf='$d_atolf'
16860 d_atoll='$d_atoll'
16861 d_attribut='$d_attribut'
16862 d_bcmp='$d_bcmp'
16863 d_bcopy='$d_bcopy'
16864 d_bincompat5005='$d_bincompat5005'
16865 d_bsd='$d_bsd'
16866 d_bsdgetpgrp='$d_bsdgetpgrp'
16867 d_bsdsetpgrp='$d_bsdsetpgrp'
16868 d_bzero='$d_bzero'
16869 d_casti32='$d_casti32'
16870 d_castneg='$d_castneg'
16871 d_charvspr='$d_charvspr'
16872 d_chown='$d_chown'
16873 d_chroot='$d_chroot'
16874 d_chsize='$d_chsize'
16875 d_class='$d_class'
16876 d_closedir='$d_closedir'
16877 d_cmsghdr_s='$d_cmsghdr_s'
16878 d_const='$d_const'
16879 d_crypt='$d_crypt'
16880 d_csh='$d_csh'
16881 d_cuserid='$d_cuserid'
16882 d_dbl_dig='$d_dbl_dig'
16883 d_dbminitproto='$d_dbminitproto'
16884 d_difftime='$d_difftime'
16885 d_dirfd='$d_dirfd'
16886 d_dirnamlen='$d_dirnamlen'
16887 d_dlerror='$d_dlerror'
16888 d_dlopen='$d_dlopen'
16889 d_dlsymun='$d_dlsymun'
16890 d_dosuid='$d_dosuid'
16891 d_drand48proto='$d_drand48proto'
16892 d_dup2='$d_dup2'
16893 d_eaccess='$d_eaccess'
16894 d_endgrent='$d_endgrent'
16895 d_endhent='$d_endhent'
16896 d_endnent='$d_endnent'
16897 d_endpent='$d_endpent'
16898 d_endpwent='$d_endpwent'
16899 d_endsent='$d_endsent'
16900 d_eofnblk='$d_eofnblk'
16901 d_eunice='$d_eunice'
16902 d_fchdir='$d_fchdir'
16903 d_fchmod='$d_fchmod'
16904 d_fchown='$d_fchown'
16905 d_fcntl='$d_fcntl'
16906 d_fcntl_can_lock='$d_fcntl_can_lock'
16907 d_fd_macros='$d_fd_macros'
16908 d_fd_set='$d_fd_set'
16909 d_fds_bits='$d_fds_bits'
16910 d_fgetpos='$d_fgetpos'
16911 d_finite='$d_finite'
16912 d_finitel='$d_finitel'
16913 d_flexfnam='$d_flexfnam'
16914 d_flock='$d_flock'
16915 d_flockproto='$d_flockproto'
16916 d_fork='$d_fork'
16917 d_fp_class='$d_fp_class'
16918 d_fpathconf='$d_fpathconf'
16919 d_fpclass='$d_fpclass'
16920 d_fpclassify='$d_fpclassify'
16921 d_fpclassl='$d_fpclassl'
16922 d_fpos64_t='$d_fpos64_t'
16923 d_frexpl='$d_frexpl'
16924 d_fs_data_s='$d_fs_data_s'
16925 d_fseeko='$d_fseeko'
16926 d_fsetpos='$d_fsetpos'
16927 d_fstatfs='$d_fstatfs'
16928 d_fstatvfs='$d_fstatvfs'
16929 d_fsync='$d_fsync'
16930 d_ftello='$d_ftello'
16931 d_ftime='$d_ftime'
16932 d_getcwd='$d_getcwd'
16933 d_getespwnam='$d_getespwnam'
16934 d_getfsstat='$d_getfsstat'
16935 d_getgrent='$d_getgrent'
16936 d_getgrps='$d_getgrps'
16937 d_gethbyaddr='$d_gethbyaddr'
16938 d_gethbyname='$d_gethbyname'
16939 d_gethent='$d_gethent'
16940 d_gethname='$d_gethname'
16941 d_gethostprotos='$d_gethostprotos'
16942 d_getitimer='$d_getitimer'
16943 d_getlogin='$d_getlogin'
16944 d_getmnt='$d_getmnt'
16945 d_getmntent='$d_getmntent'
16946 d_getnbyaddr='$d_getnbyaddr'
16947 d_getnbyname='$d_getnbyname'
16948 d_getnent='$d_getnent'
16949 d_getnetprotos='$d_getnetprotos'
16950 d_getpagsz='$d_getpagsz'
16951 d_getpbyname='$d_getpbyname'
16952 d_getpbynumber='$d_getpbynumber'
16953 d_getpent='$d_getpent'
16954 d_getpgid='$d_getpgid'
16955 d_getpgrp2='$d_getpgrp2'
16956 d_getpgrp='$d_getpgrp'
16957 d_getppid='$d_getppid'
16958 d_getprior='$d_getprior'
16959 d_getprotoprotos='$d_getprotoprotos'
16960 d_getprpwnam='$d_getprpwnam'
16961 d_getpwent='$d_getpwent'
16962 d_getsbyname='$d_getsbyname'
16963 d_getsbyport='$d_getsbyport'
16964 d_getsent='$d_getsent'
16965 d_getservprotos='$d_getservprotos'
16966 d_getspnam='$d_getspnam'
16967 d_gettimeod='$d_gettimeod'
16968 d_gnulibc='$d_gnulibc'
16969 d_grpasswd='$d_grpasswd'
16970 d_hasmntopt='$d_hasmntopt'
16971 d_htonl='$d_htonl'
16972 d_index='$d_index'
16973 d_inetaton='$d_inetaton'
16974 d_int64_t='$d_int64_t'
16975 d_isascii='$d_isascii'
16976 d_isfinite='$d_isfinite'
16977 d_isinf='$d_isinf'
16978 d_isnan='$d_isnan'
16979 d_isnanl='$d_isnanl'
16980 d_killpg='$d_killpg'
16981 d_lchown='$d_lchown'
16982 d_ldbl_dig='$d_ldbl_dig'
16983 d_link='$d_link'
16984 d_locconv='$d_locconv'
16985 d_lockf='$d_lockf'
16986 d_longdbl='$d_longdbl'
16987 d_longlong='$d_longlong'
16988 d_lseekproto='$d_lseekproto'
16989 d_lstat='$d_lstat'
16990 d_madvise='$d_madvise'
16991 d_mblen='$d_mblen'
16992 d_mbstowcs='$d_mbstowcs'
16993 d_mbtowc='$d_mbtowc'
16994 d_memchr='$d_memchr'
16995 d_memcmp='$d_memcmp'
16996 d_memcpy='$d_memcpy'
16997 d_memmove='$d_memmove'
16998 d_memset='$d_memset'
16999 d_mkdir='$d_mkdir'
17000 d_mkdtemp='$d_mkdtemp'
17001 d_mkfifo='$d_mkfifo'
17002 d_mkstemp='$d_mkstemp'
17003 d_mkstemps='$d_mkstemps'
17004 d_mktime='$d_mktime'
17005 d_mmap='$d_mmap'
17006 d_modfl='$d_modfl'
17007 d_modfl_pow32_bug='$d_modfl_pow32_bug'
17008 d_mprotect='$d_mprotect'
17009 d_msg='$d_msg'
17010 d_msg_ctrunc='$d_msg_ctrunc'
17011 d_msg_dontroute='$d_msg_dontroute'
17012 d_msg_oob='$d_msg_oob'
17013 d_msg_peek='$d_msg_peek'
17014 d_msg_proxy='$d_msg_proxy'
17015 d_msgctl='$d_msgctl'
17016 d_msgget='$d_msgget'
17017 d_msghdr_s='$d_msghdr_s'
17018 d_msgrcv='$d_msgrcv'
17019 d_msgsnd='$d_msgsnd'
17020 d_msync='$d_msync'
17021 d_munmap='$d_munmap'
17022 d_mymalloc='$d_mymalloc'
17023 d_nice='$d_nice'
17024 d_nl_langinfo='$d_nl_langinfo'
17025 d_nv_preserves_uv='$d_nv_preserves_uv'
17026 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
17027 d_off64_t='$d_off64_t'
17028 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
17029 d_oldpthreads='$d_oldpthreads'
17030 d_oldsock='$d_oldsock'
17031 d_open3='$d_open3'
17032 d_pathconf='$d_pathconf'
17033 d_pause='$d_pause'
17034 d_perl_otherlibdirs='$d_perl_otherlibdirs'
17035 d_phostname='$d_phostname'
17036 d_pipe='$d_pipe'
17037 d_poll='$d_poll'
17038 d_portable='$d_portable'
17039 d_procselfexe='$d_procselfexe'
17040 d_pthread_atfork='$d_pthread_atfork'
17041 d_pthread_yield='$d_pthread_yield'
17042 d_pwage='$d_pwage'
17043 d_pwchange='$d_pwchange'
17044 d_pwclass='$d_pwclass'
17045 d_pwcomment='$d_pwcomment'
17046 d_pwexpire='$d_pwexpire'
17047 d_pwgecos='$d_pwgecos'
17048 d_pwpasswd='$d_pwpasswd'
17049 d_pwquota='$d_pwquota'
17050 d_qgcvt='$d_qgcvt'
17051 d_quad='$d_quad'
17052 d_readdir='$d_readdir'
17053 d_readlink='$d_readlink'
17054 d_readv='$d_readv'
17055 d_recvmsg='$d_recvmsg'
17056 d_rename='$d_rename'
17057 d_rewinddir='$d_rewinddir'
17058 d_rmdir='$d_rmdir'
17059 d_safebcpy='$d_safebcpy'
17060 d_safemcpy='$d_safemcpy'
17061 d_sanemcmp='$d_sanemcmp'
17062 d_sbrkproto='$d_sbrkproto'
17063 d_sched_yield='$d_sched_yield'
17064 d_scm_rights='$d_scm_rights'
17065 d_seekdir='$d_seekdir'
17066 d_select='$d_select'
17067 d_sem='$d_sem'
17068 d_semctl='$d_semctl'
17069 d_semctl_semid_ds='$d_semctl_semid_ds'
17070 d_semctl_semun='$d_semctl_semun'
17071 d_semget='$d_semget'
17072 d_semop='$d_semop'
17073 d_sendmsg='$d_sendmsg'
17074 d_setegid='$d_setegid'
17075 d_seteuid='$d_seteuid'
17076 d_setgrent='$d_setgrent'
17077 d_setgrps='$d_setgrps'
17078 d_sethent='$d_sethent'
17079 d_setitimer='$d_setitimer'
17080 d_setlinebuf='$d_setlinebuf'
17081 d_setlocale='$d_setlocale'
17082 d_setnent='$d_setnent'
17083 d_setpent='$d_setpent'
17084 d_setpgid='$d_setpgid'
17085 d_setpgrp2='$d_setpgrp2'
17086 d_setpgrp='$d_setpgrp'
17087 d_setprior='$d_setprior'
17088 d_setproctitle='$d_setproctitle'
17089 d_setpwent='$d_setpwent'
17090 d_setregid='$d_setregid'
17091 d_setresgid='$d_setresgid'
17092 d_setresuid='$d_setresuid'
17093 d_setreuid='$d_setreuid'
17094 d_setrgid='$d_setrgid'
17095 d_setruid='$d_setruid'
17096 d_setsent='$d_setsent'
17097 d_setsid='$d_setsid'
17098 d_setvbuf='$d_setvbuf'
17099 d_sfio='$d_sfio'
17100 d_shm='$d_shm'
17101 d_shmat='$d_shmat'
17102 d_shmatprototype='$d_shmatprototype'
17103 d_shmctl='$d_shmctl'
17104 d_shmdt='$d_shmdt'
17105 d_shmget='$d_shmget'
17106 d_sigaction='$d_sigaction'
17107 d_sigprocmask='$d_sigprocmask'
17108 d_sigsetjmp='$d_sigsetjmp'
17109 d_sockatmark='$d_sockatmark'
17110 d_sockatmarkproto='$d_sockatmarkproto'
17111 d_socket='$d_socket'
17112 d_socklen_t='$d_socklen_t'
17113 d_sockpair='$d_sockpair'
17114 d_socks5_init='$d_socks5_init'
17115 d_sqrtl='$d_sqrtl'
17116 d_sresgproto='$d_sresgproto'
17117 d_sresuproto='$d_sresuproto'
17118 d_statblks='$d_statblks'
17119 d_statfs_f_flags='$d_statfs_f_flags'
17120 d_statfs_s='$d_statfs_s'
17121 d_statvfs='$d_statvfs'
17122 d_stdio_cnt_lval='$d_stdio_cnt_lval'
17123 d_stdio_ptr_lval='$d_stdio_ptr_lval'
17124 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
17125 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
17126 d_stdio_stream_array='$d_stdio_stream_array'
17127 d_stdiobase='$d_stdiobase'
17128 d_stdstdio='$d_stdstdio'
17129 d_strchr='$d_strchr'
17130 d_strcoll='$d_strcoll'
17131 d_strctcpy='$d_strctcpy'
17132 d_strerrm='$d_strerrm'
17133 d_strerror='$d_strerror'
17134 d_strftime='$d_strftime'
17135 d_strtod='$d_strtod'
17136 d_strtol='$d_strtol'
17137 d_strtold='$d_strtold'
17138 d_strtoll='$d_strtoll'
17139 d_strtoq='$d_strtoq'
17140 d_strtoul='$d_strtoul'
17141 d_strtoull='$d_strtoull'
17142 d_strtouq='$d_strtouq'
17143 d_strxfrm='$d_strxfrm'
17144 d_suidsafe='$d_suidsafe'
17145 d_symlink='$d_symlink'
17146 d_syscall='$d_syscall'
17147 d_syscallproto='$d_syscallproto'
17148 d_sysconf='$d_sysconf'
17149 d_sysernlst='$d_sysernlst'
17150 d_syserrlst='$d_syserrlst'
17151 d_system='$d_system'
17152 d_tcgetpgrp='$d_tcgetpgrp'
17153 d_tcsetpgrp='$d_tcsetpgrp'
17154 d_telldir='$d_telldir'
17155 d_telldirproto='$d_telldirproto'
17156 d_time='$d_time'
17157 d_times='$d_times'
17158 d_truncate='$d_truncate'
17159 d_tzname='$d_tzname'
17160 d_u32align='$d_u32align'
17161 d_ualarm='$d_ualarm'
17162 d_umask='$d_umask'
17163 d_uname='$d_uname'
17164 d_union_semun='$d_union_semun'
17165 d_unordered='$d_unordered'
17166 d_usleep='$d_usleep'
17167 d_usleepproto='$d_usleepproto'
17168 d_ustat='$d_ustat'
17169 d_vendorarch='$d_vendorarch'
17170 d_vendorbin='$d_vendorbin'
17171 d_vendorlib='$d_vendorlib'
17172 d_vfork='$d_vfork'
17173 d_void_closedir='$d_void_closedir'
17174 d_voidsig='$d_voidsig'
17175 d_voidtty='$d_voidtty'
17176 d_volatile='$d_volatile'
17177 d_vprintf='$d_vprintf'
17178 d_wait4='$d_wait4'
17179 d_waitpid='$d_waitpid'
17180 d_wcstombs='$d_wcstombs'
17181 d_wctomb='$d_wctomb'
17182 d_writev='$d_writev'
17183 d_xenix='$d_xenix'
17184 date='$date'
17185 db_hashtype='$db_hashtype'
17186 db_prefixtype='$db_prefixtype'
17187 db_version_major='$db_version_major'
17188 db_version_minor='$db_version_minor'
17189 db_version_patch='$db_version_patch'
17190 defvoidused='$defvoidused'
17191 direntrytype='$direntrytype'
17192 dlext='$dlext'
17193 dlsrc='$dlsrc'
17194 doublesize='$doublesize'
17195 drand01='$drand01'
17196 dynamic_ext='$dynamic_ext'
17197 eagain='$eagain'
17198 ebcdic='$ebcdic'
17199 echo='$echo'
17200 egrep='$egrep'
17201 emacs='$emacs'
17202 eunicefix='$eunicefix'
17203 exe_ext='$exe_ext'
17204 expr='$expr'
17205 extensions='$extensions'
17206 extras='$extras'
17207 fflushNULL='$fflushNULL'
17208 fflushall='$fflushall'
17209 find='$find'
17210 firstmakefile='$firstmakefile'
17211 flex='$flex'
17212 fpossize='$fpossize'
17213 fpostype='$fpostype'
17214 freetype='$freetype'
17215 from='$from'
17216 full_ar='$full_ar'
17217 full_csh='$full_csh'
17218 full_sed='$full_sed'
17219 gccosandvers='$gccosandvers'
17220 gccversion='$gccversion'
17221 gidformat='$gidformat'
17222 gidsign='$gidsign'
17223 gidsize='$gidsize'
17224 gidtype='$gidtype'
17225 glibpth='$glibpth'
17226 grep='$grep'
17227 groupcat='$groupcat'
17228 groupstype='$groupstype'
17229 gzip='$gzip'
17230 h_fcntl='$h_fcntl'
17231 h_sysfile='$h_sysfile'
17232 hint='$hint'
17233 hostcat='$hostcat'
17234 i16size='$i16size'
17235 i16type='$i16type'
17236 i32size='$i32size'
17237 i32type='$i32type'
17238 i64size='$i64size'
17239 i64type='$i64type'
17240 i8size='$i8size'
17241 i8type='$i8type'
17242 i_arpainet='$i_arpainet'
17243 i_bsdioctl='$i_bsdioctl'
17244 i_db='$i_db'
17245 i_dbm='$i_dbm'
17246 i_dirent='$i_dirent'
17247 i_dld='$i_dld'
17248 i_dlfcn='$i_dlfcn'
17249 i_fcntl='$i_fcntl'
17250 i_float='$i_float'
17251 i_fp='$i_fp'
17252 i_fp_class='$i_fp_class'
17253 i_gdbm='$i_gdbm'
17254 i_grp='$i_grp'
17255 i_ieeefp='$i_ieeefp'
17256 i_inttypes='$i_inttypes'
17257 i_langinfo='$i_langinfo'
17258 i_libutil='$i_libutil'
17259 i_limits='$i_limits'
17260 i_locale='$i_locale'
17261 i_machcthr='$i_machcthr'
17262 i_malloc='$i_malloc'
17263 i_math='$i_math'
17264 i_memory='$i_memory'
17265 i_mntent='$i_mntent'
17266 i_ndbm='$i_ndbm'
17267 i_netdb='$i_netdb'
17268 i_neterrno='$i_neterrno'
17269 i_netinettcp='$i_netinettcp'
17270 i_niin='$i_niin'
17271 i_poll='$i_poll'
17272 i_prot='$i_prot'
17273 i_pthread='$i_pthread'
17274 i_pwd='$i_pwd'
17275 i_rpcsvcdbm='$i_rpcsvcdbm'
17276 i_sfio='$i_sfio'
17277 i_sgtty='$i_sgtty'
17278 i_shadow='$i_shadow'
17279 i_socks='$i_socks'
17280 i_stdarg='$i_stdarg'
17281 i_stddef='$i_stddef'
17282 i_stdlib='$i_stdlib'
17283 i_string='$i_string'
17284 i_sunmath='$i_sunmath'
17285 i_sysaccess='$i_sysaccess'
17286 i_sysdir='$i_sysdir'
17287 i_sysfile='$i_sysfile'
17288 i_sysfilio='$i_sysfilio'
17289 i_sysin='$i_sysin'
17290 i_sysioctl='$i_sysioctl'
17291 i_syslog='$i_syslog'
17292 i_sysmman='$i_sysmman'
17293 i_sysmode='$i_sysmode'
17294 i_sysmount='$i_sysmount'
17295 i_sysndir='$i_sysndir'
17296 i_sysparam='$i_sysparam'
17297 i_sysresrc='$i_sysresrc'
17298 i_syssecrt='$i_syssecrt'
17299 i_sysselct='$i_sysselct'
17300 i_syssockio='$i_syssockio'
17301 i_sysstat='$i_sysstat'
17302 i_sysstatfs='$i_sysstatfs'
17303 i_sysstatvfs='$i_sysstatvfs'
17304 i_systime='$i_systime'
17305 i_systimek='$i_systimek'
17306 i_systimes='$i_systimes'
17307 i_systypes='$i_systypes'
17308 i_sysuio='$i_sysuio'
17309 i_sysun='$i_sysun'
17310 i_sysutsname='$i_sysutsname'
17311 i_sysvfs='$i_sysvfs'
17312 i_syswait='$i_syswait'
17313 i_termio='$i_termio'
17314 i_termios='$i_termios'
17315 i_time='$i_time'
17316 i_unistd='$i_unistd'
17317 i_ustat='$i_ustat'
17318 i_utime='$i_utime'
17319 i_values='$i_values'
17320 i_varargs='$i_varargs'
17321 i_varhdr='$i_varhdr'
17322 i_vfork='$i_vfork'
17323 ignore_versioned_solibs='$ignore_versioned_solibs'
17324 inc_version_list='$inc_version_list'
17325 inc_version_list_init='$inc_version_list_init'
17326 incpath='$incpath'
17327 inews='$inews'
17328 installarchlib='$installarchlib'
17329 installbin='$installbin'
17330 installman1dir='$installman1dir'
17331 installman3dir='$installman3dir'
17332 installprefix='$installprefix'
17333 installprefixexp='$installprefixexp'
17334 installprivlib='$installprivlib'
17335 installscript='$installscript'
17336 installsitearch='$installsitearch'
17337 installsitebin='$installsitebin'
17338 installsitelib='$installsitelib'
17339 installstyle='$installstyle'
17340 installusrbinperl='$installusrbinperl'
17341 installvendorarch='$installvendorarch'
17342 installvendorbin='$installvendorbin'
17343 installvendorlib='$installvendorlib'
17344 intsize='$intsize'
17345 issymlink='$issymlink'
17346 ivdformat='$ivdformat'
17347 ivsize='$ivsize'
17348 ivtype='$ivtype'
17349 known_extensions='$known_extensions'
17350 ksh='$ksh'
17351 ld='$ld'
17352 lddlflags='$lddlflags'
17353 ldflags='$ldflags'
17354 ldflags_uselargefiles='$ldflags_uselargefiles'
17355 ldlibpthname='$ldlibpthname'
17356 less='$less'
17357 lib_ext='$lib_ext'
17358 libc='$libc'
17359 libperl='$libperl'
17360 libpth='$libpth'
17361 libs='$libs'
17362 libsdirs='$libsdirs'
17363 libsfiles='$libsfiles'
17364 libsfound='$libsfound'
17365 libspath='$libspath'
17366 libswanted='$libswanted'
17367 libswanted_uselargefiles='$libswanted_uselargefiles'
17368 line='$line'
17369 lint='$lint'
17370 lkflags='$lkflags'
17371 ln='$ln'
17372 lns='$lns'
17373 locincpth='$locincpth'
17374 loclibpth='$loclibpth'
17375 longdblsize='$longdblsize'
17376 longlongsize='$longlongsize'
17377 longsize='$longsize'
17378 lp='$lp'
17379 lpr='$lpr'
17380 ls='$ls'
17381 lseeksize='$lseeksize'
17382 lseektype='$lseektype'
17383 mail='$mail'
17384 mailx='$mailx'
17385 make='$make'
17386 make_set_make='$make_set_make'
17387 mallocobj='$mallocobj'
17388 mallocsrc='$mallocsrc'
17389 malloctype='$malloctype'
17390 man1dir='$man1dir'
17391 man1direxp='$man1direxp'
17392 man1ext='$man1ext'
17393 man3dir='$man3dir'
17394 man3direxp='$man3direxp'
17395 man3ext='$man3ext'
17396 mips_type='$mips_type'
17397 mkdir='$mkdir'
17398 mmaptype='$mmaptype'
17399 modetype='$modetype'
17400 more='$more'
17401 multiarch='$multiarch'
17402 mv='$mv'
17403 myarchname='$myarchname'
17404 mydomain='$mydomain'
17405 myhostname='$myhostname'
17406 myuname='$myuname'
17407 n='$n'
17408 need_va_copy='$need_va_copy'
17409 netdb_hlen_type='$netdb_hlen_type'
17410 netdb_host_type='$netdb_host_type'
17411 netdb_name_type='$netdb_name_type'
17412 netdb_net_type='$netdb_net_type'
17413 nm='$nm'
17414 nm_opt='$nm_opt'
17415 nm_so_opt='$nm_so_opt'
17416 nonxs_ext='$nonxs_ext'
17417 nroff='$nroff'
17418 nvEUformat='$nvEUformat'
17419 nvFUformat='$nvFUformat'
17420 nvGUformat='$nvGUformat'
17421 nveformat='$nveformat'
17422 nvfformat='$nvfformat'
17423 nvgformat='$nvgformat'
17424 nvsize='$nvsize'
17425 nvtype='$nvtype'
17426 o_nonblock='$o_nonblock'
17427 obj_ext='$obj_ext'
17428 old_pthread_create_joinable='$old_pthread_create_joinable'
17429 optimize='$optimize'
17430 orderlib='$orderlib'
17431 osname='$osname'
17432 osvers='$osvers'
17433 otherlibdirs='$otherlibdirs'
17434 package='$package'
17435 pager='$pager'
17436 passcat='$passcat'
17437 patchlevel='$patchlevel'
17438 path_sep='$path_sep'
17439 perl5='$perl5'
17440 perl='$perl'
17441 perl_patchlevel='$perl_patchlevel'
17442 perladmin='$perladmin'
17443 perllibs='$perllibs'
17444 perlpath='$perlpath'
17445 pg='$pg'
17446 phostname='$phostname'
17447 pidtype='$pidtype'
17448 plibpth='$plibpth'
17449 pm_apiversion='$pm_apiversion'
17450 pmake='$pmake'
17451 pr='$pr'
17452 prefix='$prefix'
17453 prefixexp='$prefixexp'
17454 privlib='$privlib'
17455 privlibexp='$privlibexp'
17456 prototype='$prototype'
17457 ptrsize='$ptrsize'
17458 quadkind='$quadkind'
17459 quadtype='$quadtype'
17460 randbits='$randbits'
17461 randfunc='$randfunc'
17462 randseedtype='$randseedtype'
17463 ranlib='$ranlib'
17464 rd_nodata='$rd_nodata'
17465 revision='$revision'
17466 rm='$rm'
17467 rmail='$rmail'
17468 run='$run'
17469 runnm='$runnm'
17470 sPRIEUldbl='$sPRIEUldbl'
17471 sPRIFUldbl='$sPRIFUldbl'
17472 sPRIGUldbl='$sPRIGUldbl'
17473 sPRIXU64='$sPRIXU64'
17474 sPRId64='$sPRId64'
17475 sPRIeldbl='$sPRIeldbl'
17476 sPRIfldbl='$sPRIfldbl'
17477 sPRIgldbl='$sPRIgldbl'
17478 sPRIi64='$sPRIi64'
17479 sPRIo64='$sPRIo64'
17480 sPRIu64='$sPRIu64'
17481 sPRIx64='$sPRIx64'
17482 sSCNfldbl='$sSCNfldbl'
17483 sched_yield='$sched_yield'
17484 scriptdir='$scriptdir'
17485 scriptdirexp='$scriptdirexp'
17486 sed='$sed'
17487 seedfunc='$seedfunc'
17488 selectminbits='$selectminbits'
17489 selecttype='$selecttype'
17490 sendmail='$sendmail'
17491 sh='$sh'
17492 shar='$shar'
17493 sharpbang='$sharpbang'
17494 shmattype='$shmattype'
17495 shortsize='$shortsize'
17496 shrpenv='$shrpenv'
17497 shsharp='$shsharp'
17498 sig_count='$sig_count'
17499 sig_name='$sig_name'
17500 sig_name_init='$sig_name_init'
17501 sig_num='$sig_num'
17502 sig_num_init='$sig_num_init'
17503 sig_size='$sig_size'
17504 signal_t='$signal_t'
17505 sitearch='$sitearch'
17506 sitearchexp='$sitearchexp'
17507 sitebin='$sitebin'
17508 sitebinexp='$sitebinexp'
17509 sitelib='$sitelib'
17510 sitelib_stem='$sitelib_stem'
17511 sitelibexp='$sitelibexp'
17512 siteprefix='$siteprefix'
17513 siteprefixexp='$siteprefixexp'
17514 sizesize='$sizesize'
17515 sizetype='$sizetype'
17516 sleep='$sleep'
17517 smail='$smail'
17518 so='$so'
17519 sockethdr='$sockethdr'
17520 socketlib='$socketlib'
17521 socksizetype='$socksizetype'
17522 sort='$sort'
17523 spackage='$spackage'
17524 spitshell='$spitshell'
17525 src='$src'
17526 ssizetype='$ssizetype'
17527 startperl='$startperl'
17528 startsh='$startsh'
17529 static_ext='$static_ext'
17530 stdchar='$stdchar'
17531 stdio_base='$stdio_base'
17532 stdio_bufsiz='$stdio_bufsiz'
17533 stdio_cnt='$stdio_cnt'
17534 stdio_filbuf='$stdio_filbuf'
17535 stdio_ptr='$stdio_ptr'
17536 stdio_stream_array='$stdio_stream_array'
17537 strings='$strings'
17538 submit='$submit'
17539 subversion='$subversion'
17540 sysman='$sysman'
17541 tail='$tail'
17542 tar='$tar'
17543 targetarch='$targetarch'
17544 tbl='$tbl'
17545 tee='$tee'
17546 test='$test'
17547 timeincl='$timeincl'
17548 timetype='$timetype'
17549 to='$to'
17550 touch='$touch'
17551 tr='$tr'
17552 trnl='$trnl'
17553 troff='$troff'
17554 u16size='$u16size'
17555 u16type='$u16type'
17556 u32size='$u32size'
17557 u32type='$u32type'
17558 u64size='$u64size'
17559 u64type='$u64type'
17560 u8size='$u8size'
17561 u8type='$u8type'
17562 uidformat='$uidformat'
17563 uidsign='$uidsign'
17564 uidsize='$uidsize'
17565 uidtype='$uidtype'
17566 uname='$uname'
17567 uniq='$uniq'
17568 uquadtype='$uquadtype'
17569 use5005threads='$use5005threads'
17570 use64bitall='$use64bitall'
17571 use64bitint='$use64bitint'
17572 usecrosscompile='$usecrosscompile'
17573 usedl='$usedl'
17574 useithreads='$useithreads'
17575 uselargefiles='$uselargefiles'
17576 uselongdouble='$uselongdouble'
17577 usemorebits='$usemorebits'
17578 usemultiplicity='$usemultiplicity'
17579 usemymalloc='$usemymalloc'
17580 usenm='$usenm'
17581 useopcode='$useopcode'
17582 useperlio='$useperlio'
17583 useposix='$useposix'
17584 usereentrant='$usereentrant'
17585 usesfio='$usesfio'
17586 useshrplib='$useshrplib'
17587 usesocks='$usesocks'
17588 usethreads='$usethreads'
17589 usevendorprefix='$usevendorprefix'
17590 usevfork='$usevfork'
17591 usrinc='$usrinc'
17592 uuname='$uuname'
17593 uvXUformat='$uvXUformat'
17594 uvoformat='$uvoformat'
17595 uvsize='$uvsize'
17596 uvtype='$uvtype'
17597 uvuformat='$uvuformat'
17598 uvxformat='$uvxformat'
17599 vendorarch='$vendorarch'
17600 vendorarchexp='$vendorarchexp'
17601 vendorbin='$vendorbin'
17602 vendorbinexp='$vendorbinexp'
17603 vendorlib='$vendorlib'
17604 vendorlib_stem='$vendorlib_stem'
17605 vendorlibexp='$vendorlibexp'
17606 vendorprefix='$vendorprefix'
17607 vendorprefixexp='$vendorprefixexp'
17608 version='$version'
17609 version_patchlevel_string='$version_patchlevel_string'
17610 versiononly='$versiononly'
17611 vi='$vi'
17612 voidflags='$voidflags'
17613 xlibpth='$xlibpth'
17614 xs_apiversion='$xs_apiversion'
17615 yacc='$yacc'
17616 yaccflags='$yaccflags'
17617 zcat='$zcat'
17618 zip='$zip'
17619 EOT
17620
17621 : Add in command line options if available
17622 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17623
17624 : add special variables
17625 $test -f $src/patchlevel.h && \
17626 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17627 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17628 echo "PERL_CONFIG_SH=true" >>config.sh
17629
17630 : propagate old symbols
17631 if $test -f UU/config.sh; then
17632         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17633         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17634         $sort | $uniq -u >UU/oldsyms
17635         set X `cat UU/oldsyms`
17636         shift
17637         case $# in
17638         0) ;;
17639         *)
17640                 cat <<EOM
17641 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17642 EOM
17643                 echo "# Variables propagated from previous config.sh file." >>config.sh
17644                 for sym in `cat UU/oldsyms`; do
17645                         echo "    Propagating $hint variable "'$'"$sym..."
17646                         eval 'tmp="$'"${sym}"'"'
17647                         echo "$tmp" | \
17648                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17649                 done
17650                 ;;
17651         esac
17652 fi
17653
17654 : Finish up by extracting the .SH files
17655 case "$alldone" in
17656 exit)
17657         $rm -rf UU
17658         echo "Extraction done."
17659         exit 0
17660         ;;
17661 cont)
17662         ;;
17663 '')
17664         dflt=''
17665         nostick=true
17666         $cat <<EOM
17667
17668 If you'd like to make any changes to the config.sh file before I begin
17669 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17670
17671 EOM
17672         rp="Press return or use a shell escape to edit config.sh:"
17673         . UU/myread
17674         nostick=''
17675         case "$ans" in
17676         '') ;;
17677         *) : in case they cannot read
17678                 sh 1>&4 -c "$ans";;
17679         esac
17680         ;;
17681 esac
17682
17683 : if this fails, just run all the .SH files by hand
17684 . ./config.sh
17685
17686 echo " "
17687 exec 1>&4
17688 pwd=`pwd`
17689 . ./UU/extract
17690 cd $pwd
17691
17692 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17693         dflt=y
17694         case "$silent" in
17695         true) ;;
17696         *)
17697                 $cat <<EOM
17698
17699 Now you need to generate make dependencies by running "$make depend".
17700 You might prefer to run it in background: "$make depend > makedepend.out &"
17701 It can take a while, so you might not want to run it right now.
17702
17703 EOM
17704                 ;;
17705         esac
17706         rp="Run $make depend now?"
17707         . UU/myread
17708         case "$ans" in
17709         y*)
17710                 $make depend && echo "Now you must run '$make'."
17711                 ;;
17712         *)
17713                 echo "You must run '$make depend' then '$make'."
17714                 ;;
17715         esac
17716 elif test -f [Mm]akefile; then
17717         echo " "
17718         echo "Now you must run a $make."
17719 else
17720         echo "Configure done."
17721 fi
17722
17723 if $test -f Policy.sh; then
17724     $cat <<EOM
17725
17726 If you compile $package on a different machine or from a different object
17727 directory, copy the Policy.sh file from this object directory to the
17728 new one before you run Configure -- this will help you with most of
17729 the policy defaults.
17730
17731 EOM
17732 fi
17733 if $test -f config.msg; then
17734     echo "Hmm.  I also noted the following information while running:"
17735     echo " "
17736     $cat config.msg >&4
17737     $rm -f config.msg
17738 fi
17739 $rm -f kit*isdone ark*isdone
17740 $rm -rf UU
17741
17742 : End of Configure
17743